Merge pull request #316 from bagisto/jitendra

Removed event from menu, acl, config creation
This commit is contained in:
JItendra Singh 2018-12-14 13:58:14 +05:30 committed by GitHub
commit dec1e2254f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 121 additions and 205 deletions

View File

@ -0,0 +1,25 @@
<?php
return [
[
'key' => 'inventories',
'name' => 'Inventories',
'view' => 'admin::catalog.products.accordians.inventories',
'sort' => 1
], [
'key' => 'images',
'name' => 'Images',
'view' => 'admin::catalog.products.accordians.images',
'sort' => 2
], [
'key' => 'categories',
'name' => 'Categories',
'view' => 'admin::catalog.products.accordians.categories',
'sort' => 3
], [
'key' => 'variations',
'name' => 'Variations',
'view' => 'admin::catalog.products.accordians.variations',
'sort' => 4
]
];

View File

@ -1,41 +0,0 @@
<?php
namespace Webkul\Admin;
class ProductFormAccordian {
public $items = [];
/**
* Shortcut method for create a Product Form Accordian with a callback.
* This will allow you to do things like fire an event on creation.
*
* @param callable $callback Callback to use after the accordian creation
* @return object
*/
public static function create($callback) {
$accordian = new ProductFormAccordian();
$callback($accordian);
$accordian->items = core()->sortItems($accordian->items);
return $accordian;
}
/**
* Add a accordian item to the item stack
*
* @param string $key Dot seperated heirarchy
* @param string $name Text for the anchor
* @param string $view Blade file for accordian
* @param integer $sort Sorting index for the items
*/
public function add($key, $name, $view, $sort = 0)
{
array_push($this->items, [
'key' => $key,
'name' => $name,
'view' => $view,
'sort' => $sort
]);
}
}

View File

@ -3,15 +3,17 @@
namespace Webkul\Admin\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Blade;
use Webkul\Admin\Providers\EventServiceProvider;
use Illuminate\Contracts\Debug\ExceptionHandler;
use Webkul\Admin\Exceptions\Handler;
use Illuminate\Foundation\AliasLoader;
use Webkul\Admin\Facades\Configuration as ConfigurationFacade;
use Webkul\Admin\Configuration;
use Webkul\Core\Tree;
/**
* Admin service provider
*
* @author Jitendra Singh <jitendra@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class AdminServiceProvider extends ServiceProvider
{
/**
@ -59,26 +61,54 @@ class AdminServiceProvider extends ServiceProvider
protected function composeView()
{
view()->composer(['admin::catalog.products.create', 'admin::catalog.products.edit'], function ($view) {
$accordians = current(Event::fire('admin.catalog.products.accordian.create'));
$accordian = Tree::create();
$view->with('form_accordians', $accordians);
foreach(config('product_form_accordians') as $item) {
$accordian->add($item);
}
$accordian->items = core()->sortItems($accordian->items);
$view->with('form_accordians', $accordian);
});
view()->composer(['admin::layouts.nav-left', 'admin::layouts.nav-aside', 'admin::layouts.tabs'], function ($view) {
$menu = current(Event::fire('admin.menu.create'));
$tree = Tree::create();
$menu->items = core()->sortItems($menu->items);
foreach(config('menu.admin') as $item) {
if (bouncer()->hasPermission($item['key'])) {
$tree->add($item, 'menu');
}
}
$view->with('menu', $menu);
$tree->items = core()->sortItems($tree->items);
$view->with('menu', $tree);
});
view()->composer(['admin::layouts.nav-aside', 'admin::layouts.tabs', 'admin::configuration.index'], function ($view) {
$tree = current(Event::fire('admin.config.create'));
$tree = Tree::create();
foreach(config('core') as $item) {
$tree->add($item);
}
$tree->items = core()->sortItems($tree->items);
$view->with('config', $tree);
});
view()->composer(['admin::users.roles.create', 'admin::users.roles.edit'], function ($view) {
$tree = Tree::create();
foreach(config('acl') as $item) {
$tree->add($item);
}
$tree->items = core()->sortItems($tree->items);
$view->with('acl', $tree);
});
}
/**
@ -95,5 +125,9 @@ class AdminServiceProvider extends ServiceProvider
$this->mergeConfigFrom(
dirname(__DIR__) . '/Config/acl.php', 'acl'
);
$this->mergeConfigFrom(
dirname(__DIR__) . '/Config/product_form_accordians.php', 'product_form_accordians'
);
}
}

View File

@ -4,10 +4,6 @@ namespace Webkul\Admin\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\View;
use Webkul\Ui\Menu;
use Webkul\Core\Tree;
use Webkul\Admin\ProductFormAccordian;
class EventServiceProvider extends ServiceProvider
{
@ -18,16 +14,6 @@ class EventServiceProvider extends ServiceProvider
*/
public function boot()
{
$this->createAdminMenu();
$this->createAdminConfig();
$this->buildACL();
$this->registerACL();
$this->createProductFormAccordian();
Event::listen('checkout.order.save.after', 'Webkul\Admin\Listeners\Order@sendNewOrderMail');
Event::listen('checkout.invoice.save.after', 'Webkul\Admin\Listeners\Order@sendNewInvoiceMail');
@ -36,98 +22,4 @@ class EventServiceProvider extends ServiceProvider
Event::listen('checkout.order.save.after', 'Webkul\Admin\Listeners\Order@updateProductInventory');
}
/**
* This method fires an event for menu creation, any package can add their menu item by listening to the admin.menu.build event
*
* @return void
*/
public function createAdminMenu()
{
Event::listen('admin.menu.create', function () {
return Tree::create(function ($menu) {
Event::fire('admin.menu.build', $menu);
});
});
Event::listen('admin.menu.build', function ($menu) {
foreach(config('menu.admin') as $item) {
if (bouncer()->hasPermission($item['key'])) {
$menu->add($item, 'menu');
}
}
});
}
/**
* This method fires an event for config creation, any package can add their config item by listening to the admin.config.build event
*
* @return void
*/
public function createAdminConfig()
{
Event::listen('admin.config.create', function () {
return Tree::create(function ($tree) {
Event::fire('admin.config.build', $tree);
});
});
Event::listen('admin.config.build', function ($config) {
foreach(config('core') as $item) {
$config->add($item);
}
});
}
/**
* Build route based ACL
*
* @return voidbuildACL
*/
public function buildACL()
{
Event::listen('admin.acl.build', function ($acl) {
foreach(config('acl') as $item) {
$acl->add($item);
}
});
}
/**
* Registers acl to entire application
*
* @return void
*/
public function registerACL()
{
$this->app->singleton('acl', function () {
return current(Event::fire('admin.acl.create'));
});
View::share('acl', app('acl'));
}
/**
* This method fires an event for accordian creation, any package can add their accordian item by listening to the admin.catalog.products.accordian.build event
*
* @return void
*/
public function createProductFormAccordian()
{
Event::listen('admin.catalog.products.accordian.create', function() {
return ProductFormAccordian::create(function($accordian) {
Event::fire('admin.catalog.products.accordian.build', $accordian);
});
});
Event::listen('admin.catalog.products.accordian.build', function($accordian) {
$accordian->add('inventories', 'Inventories', 'admin::catalog.products.accordians.inventories', 1);
$accordian->add('images', 'Images', 'admin::catalog.products.accordians.images', 2);
$accordian->add('categories', 'Categories', 'admin::catalog.products.accordians.categories', 3);
$accordian->add('variations', 'Variations', 'admin::catalog.products.accordians.variations', 4);
});
}
}
}

View File

@ -8,7 +8,7 @@
$validations = implode('|', array_filter($validations));
$name = $field['title'];
$name = $field['name'];
?>
<div class="control-group {{ $field['type'] }}" :class="[errors.has('{{ $name }}') ? 'has-error' : '']">
<label for="{{ $name }}" {{ !isset($field['validation']) || strpos('required', $field['validation']) < 0 ? '' : 'class=required' }}>

View File

@ -4,14 +4,40 @@ namespace Webkul\Core;
use Illuminate\Support\Facades\Request;
/**
* Tree class
*
* @author Jitendra Singh <jitendra@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class Tree {
/**
* Contains tree item
*
* @var array
*/
public $items = [];
/**
* Contains current item route
*
* @var string
*/
public $current;
/**
* Contains current item key
*
* @var string
*/
public $currentKey;
/**
* Create a new instance.
*
* @return void
*/
public function __construct() {
$this->current = Request::url();
}
@ -23,9 +49,12 @@ class Tree {
* @param callable $callback Callback to use after the Config creation
* @return object
*/
public static function create($callback) {
public static function create($callback = null) {
$tree = new Tree();
$callback($tree);
if($callback) {
$callback($tree);
}
return $tree;
}
@ -48,6 +77,7 @@ class Tree {
}
$children = str_replace('.', '.children.', $item['key']);
core()->array_set($this->items, $children, $item);
}

View File

@ -8,6 +8,12 @@ use Illuminate\Support\ServiceProvider;
use Webkul\Product\Helpers\ProductImage;
use View;
/**
* Composer service provider
*
* @author Jitendra Singh <jitendra@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class ComposerServiceProvider extends ServiceProvider
{
/**

View File

@ -3,15 +3,19 @@
namespace Webkul\Shop\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Event;
use Illuminate\Routing\Router;
use Illuminate\Support\Facades\Blade;
use Webkul\Shop\Http\Middleware\Locale;
use Webkul\Shop\Http\Middleware\Theme;
use Webkul\Shop\Http\Middleware\Currency;
use Webkul\Shop\Providers\ComposerServiceProvider;
use Webkul\Core\Tree;
/**
* Shop service provider
*
* @author Jitendra Singh <jitendra@webkul.com>
* @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
*/
class ShopServiceProvider extends ServiceProvider
{
/**
@ -38,8 +42,6 @@ class ShopServiceProvider extends ServiceProvider
$this->app->register(ComposerServiceProvider::class);
$this->composeView();
$this->createCustomerMenu();
}
/**
@ -66,29 +68,15 @@ class ShopServiceProvider extends ServiceProvider
protected function composeView()
{
view()->composer('shop::customers.account.partials.sidemenu', function ($view) {
$menu = current(Event::fire('customer.menu.create'));
$tree = Tree::create();
$view->with('menu', $menu);
});
}
/**
* This method fires an event for menu creation, any package can add their menu item by listening to the customer.menu.build event
*
* @return void
*/
public function createCustomerMenu()
{
Event::listen('customer.menu.create', function () {
return Tree::create(function ($tree) {
Event::fire('customer.menu.build', $tree);
});
});
Event::listen('customer.menu.build', function ($tree) {
foreach(config('menu.customer') as $item) {
$tree->add($item, 'menu');
}
$tree->items = core()->sortItems($tree->items);
$view->with('menu', $tree);
});
}

View File

@ -5,11 +5,9 @@ namespace Webkul\User\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Foundation\AliasLoader;
use Illuminate\Routing\Router;
use Illuminate\Support\Facades\Event;
use Webkul\User\Bouncer;
use Webkul\User\Facades\Bouncer as BouncerFacade;
use Webkul\User\Http\Middleware\Bouncer as BouncerMiddleware;
use Webkul\Core\Tree;
class UserServiceProvider extends ServiceProvider
{
@ -25,22 +23,6 @@ class UserServiceProvider extends ServiceProvider
$router->aliasMiddleware('admin', BouncerMiddleware::class);
$this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
$this->createACL();
}
/**
* This method fires an event for acl creation, any package can add their acl item by listening to the admin.acl.build event
*
* @return void
*/
public function createACL()
{
Event::listen('admin.acl.create', function () {
return Tree::create(function ($acl) {
Event::fire('admin.acl.build', $acl);
});
});
}
/**