diff --git a/composer.json b/composer.json
index 23989450b..ad4e3695b 100644
--- a/composer.json
+++ b/composer.json
@@ -6,10 +6,12 @@
"type": "project",
"require": {
"php": "^7.1.3",
+ "dimsav/laravel-translatable": "^9.0",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.6.*",
"laravel/tinker": "^1.0",
- "nwidart/laravel-modules": "^3.2"
+ "nwidart/laravel-modules": "^3.2",
+ "propaganistas/laravel-intl": "^2.0"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.1",
@@ -22,7 +24,9 @@
"replace": {
"webkul/laravel-user": "self.version",
"webkul/laravel-admin": "self.version",
- "webkul/laravel-ui": "self.version"
+ "webkul/laravel-ui": "self.version",
+ "webkul/laravel-core": "self.version",
+ "webkul/laravel-attribute": "self.version"
},
"autoload": {
"classmap": [
@@ -33,7 +37,9 @@
"App\\": "app/",
"Webkul\\User\\": "packages/Webkul/User/src",
"Webkul\\Admin\\": "packages/Webkul/Admin/src",
- "Webkul\\Ui\\": "packages/Webkul/Ui/src"
+ "Webkul\\Ui\\": "packages/Webkul/Ui/src",
+ "Webkul\\Attribute\\": "packages/Webkul/Attribute/src",
+ "Webkul\\Core\\": "packages/Webkul/Core/src"
}
},
"autoload-dev": {
diff --git a/composer.lock b/composer.lock
index b5ae2735f..72e9bdcda 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,107 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "5d86c298bb279ec35bcbbd1dfb204831",
+ "content-hash": "1cfe5a0cb070df958cccb486627d42f2",
"packages": [
+ {
+ "name": "commerceguys/intl",
+ "version": "v1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/commerceguys/intl.git",
+ "reference": "22156e447530d6ebd387bfee51ef1ae2c70a5ff0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/commerceguys/intl/zipball/22156e447530d6ebd387bfee51ef1ae2c70a5ff0",
+ "reference": "22156e447530d6ebd387bfee51ef1ae2c70a5ff0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "mikey179/vfsstream": "1.*",
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "CommerceGuys\\Intl\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bojan Zivanovic"
+ }
+ ],
+ "description": "Internationalization library powered by CLDR data.",
+ "time": "2018-06-21T14:03:04+00:00"
+ },
+ {
+ "name": "dimsav/laravel-translatable",
+ "version": "v9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dimsav/laravel-translatable.git",
+ "reference": "a174b327342e882df7df9d971cf36ae678c16088"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dimsav/laravel-translatable/zipball/a174b327342e882df7df9d971cf36ae678c16088",
+ "reference": "a174b327342e882df7df9d971cf36ae678c16088",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/support": "5.6.*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "orchestra/testbench": "3.6.*",
+ "phpunit/phpunit": "~7.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Dimsav\\Translatable\\TranslatableServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dimsav\\Translatable\\": "src/Translatable/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Dimitrios Savvopoulos",
+ "email": "ds@dimsav.com",
+ "homepage": "http://dimsav.com"
+ }
+ ],
+ "description": "A Laravel package for multilingual models",
+ "keywords": [
+ "database",
+ "language",
+ "laravel",
+ "translation"
+ ],
+ "time": "2018-02-10T14:10:41+00:00"
+ },
{
"name": "dnoegel/php-xdg-base-dir",
"version": "0.1",
@@ -453,6 +552,71 @@
],
"time": "2015-04-20T18:58:01+00:00"
},
+ {
+ "name": "jenssegers/date",
+ "version": "v3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jenssegers/date.git",
+ "reference": "3f5f94f28bd5108fab011869434209101d4189ae"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jenssegers/date/zipball/3f5f94f28bd5108fab011869434209101d4189ae",
+ "reference": "3f5f94f28bd5108fab011869434209101d4189ae",
+ "shasum": ""
+ },
+ "require": {
+ "nesbot/carbon": "^1.0",
+ "php": ">=5.6",
+ "symfony/translation": "^2.7|^3.0|^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.0|^6.0|^7.0",
+ "satooshi/php-coveralls": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Jenssegers\\Date\\DateServiceProvider"
+ ],
+ "aliases": {
+ "Date": "Jenssegers\\Date\\Date"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Jenssegers\\Date\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jens Segers",
+ "homepage": "https://jenssegers.com"
+ }
+ ],
+ "description": "A date library to help you work with dates in different languages",
+ "homepage": "https://github.com/jenssegers/date",
+ "keywords": [
+ "carbon",
+ "date",
+ "datetime",
+ "i18n",
+ "laravel",
+ "time",
+ "translation"
+ ],
+ "time": "2018-05-16T11:53:55+00:00"
+ },
{
"name": "laravel/framework",
"version": "v5.6.24",
@@ -1040,6 +1204,69 @@
],
"time": "2018-06-08T15:26:40+00:00"
},
+ {
+ "name": "propaganistas/laravel-intl",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Propaganistas/Laravel-Intl.git",
+ "reference": "645a34430ae92d287e97a06815d613be1f3002b5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Propaganistas/Laravel-Intl/zipball/645a34430ae92d287e97a06815d613be1f3002b5",
+ "reference": "645a34430ae92d287e97a06815d613be1f3002b5",
+ "shasum": ""
+ },
+ "require": {
+ "commerceguys/intl": "^1.0.1",
+ "illuminate/support": ">=5.1,<5.7",
+ "jenssegers/date": "^3.2.3",
+ "php": ">=7.0",
+ "punic/punic": "^3.1",
+ "umpirsky/country-list": "^2.0",
+ "umpirsky/locale-list": "^1.0"
+ },
+ "require-dev": {
+ "orchestra/testbench": ">=3.1",
+ "phpunit/phpunit": "^5.0|^6.0|^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Propaganistas\\LaravelIntl\\IntlServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Propaganistas\\LaravelIntl\\": "src/"
+ },
+ "files": [
+ "src/helpers.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Propaganistas",
+ "email": "Propaganistas@users.noreply.github.com"
+ }
+ ],
+ "description": "Easy to use internationalization functions for Laravel",
+ "keywords": [
+ "i18n",
+ "internationalization",
+ "intl",
+ "l10n",
+ "laravel"
+ ],
+ "time": "2018-07-03T07:55:17+00:00"
+ },
{
"name": "psr/container",
"version": "1.0.0",
@@ -1256,6 +1483,75 @@
],
"time": "2018-06-10T17:57:20+00:00"
},
+ {
+ "name": "punic/punic",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/punic/punic.git",
+ "reference": "bd49ff54ea6ee8a902a567905664ecc7840037d6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/punic/punic/zipball/bd49ff54ea6ee8a902a567905664ecc7840037d6",
+ "reference": "bd49ff54ea6ee8a902a567905664ecc7840037d6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "replace": {
+ "punic/calendar": "*",
+ "punic/common": "*"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "2.2.*",
+ "phpunit/phpunit": "^4"
+ },
+ "bin": [
+ "bin/punic-data"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Punic\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michele Locati",
+ "email": "mlocati@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Remo Laubacher",
+ "email": "remo.laubacher@gmail.com",
+ "role": "Collaborator, motivator and perfectionist supporter"
+ }
+ ],
+ "description": "PHP-Unicode CLDR",
+ "homepage": "https://github.com/punic/punic",
+ "keywords": [
+ "calendar",
+ "cldr",
+ "date",
+ "date-time",
+ "i18n",
+ "internationalization",
+ "l10n",
+ "localization",
+ "php",
+ "time",
+ "translate",
+ "translations",
+ "unicode"
+ ],
+ "time": "2018-02-09T15:54:34+00:00"
+ },
{
"name": "ramsey/uuid",
"version": "3.7.3",
@@ -2308,6 +2604,83 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"time": "2017-11-27T11:13:29+00:00"
},
+ {
+ "name": "umpirsky/country-list",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/umpirsky/country-list.git",
+ "reference": "ddabf3a8ef2956fc0fbd22da9bec642ab6cfdede"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/umpirsky/country-list/zipball/ddabf3a8ef2956fc0fbd22da9bec642ab6cfdede",
+ "reference": "ddabf3a8ef2956fc0fbd22da9bec642ab6cfdede",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "slowprog/composer-copy-file": "^0.2",
+ "symfony/locale": "^2.7|^3.0",
+ "umpirsky/list-generator": "^1.2"
+ },
+ "type": "library",
+ "extra": {
+ "copy-file": {
+ "vendor/umpirsky/list-generator/Dockerfile": "./",
+ "vendor/umpirsky/list-generator/docker-compose.yml": "./"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Saša Stamenković",
+ "email": "umpirsky@gmail.com"
+ }
+ ],
+ "description": "List of all countries with names and ISO 3166-1 codes in all languages and data formats.",
+ "time": "2018-02-27T18:55:19+00:00"
+ },
+ {
+ "name": "umpirsky/locale-list",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/umpirsky/locale-list.git",
+ "reference": "8141f749e16e568a5a9f7e813c50f72efa794c2e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/umpirsky/locale-list/zipball/8141f749e16e568a5a9f7e813c50f72efa794c2e",
+ "reference": "8141f749e16e568a5a9f7e813c50f72efa794c2e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4"
+ },
+ "require-dev": {
+ "symfony/locale": "^2.7|^3.0",
+ "umpirsky/list-generator": "^1.1"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Saša Stamenković",
+ "email": "umpirsky@gmail.com"
+ }
+ ],
+ "description": "List of all locales with names and codes in all languages and all data formats.",
+ "time": "2018-06-01T17:50:07+00:00"
+ },
{
"name": "vlucas/phpdotenv",
"version": "v2.4.0",
diff --git a/config/app.php b/config/app.php
index a80273444..40d3689df 100644
--- a/config/app.php
+++ b/config/app.php
@@ -151,6 +151,9 @@ return [
* Package Service Providers...
*/
+ Dimsav\Translatable\TranslatableServiceProvider::class,
+ Propaganistas\LaravelIntl\IntlServiceProvider::class,
+
/*
* Application Service Providers...
*/
@@ -163,7 +166,9 @@ return [
Webkul\User\Providers\UserServiceProvider::class,
Webkul\Admin\Providers\AdminServiceProvider::class,
- Webkul\Ui\Providers\UiServiceProvider::class
+ Webkul\Ui\Providers\UiServiceProvider::class,
+ Webkul\Attribute\Providers\AttributeServiceProvider::class,
+ Webkul\Core\Providers\CoreServiceProvider::class
],
/*
diff --git a/packages/Webkul/Admin/composer.json b/packages/Webkul/Admin/composer.json
index ec85e56fd..8e417b84a 100644
--- a/packages/Webkul/Admin/composer.json
+++ b/packages/Webkul/Admin/composer.json
@@ -9,7 +9,8 @@
],
"require": {
"webkul/laravel-user": "dev-master",
- "webkul/laravel-ui": "dev-master"
+ "webkul/laravel-ui": "dev-master",
+ "webkul/laravel-core": "dev-master"
},
"autoload": {
"psr-4": {
diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php
index 37bc76195..306001016 100644
--- a/packages/Webkul/Admin/src/Http/routes.php
+++ b/packages/Webkul/Admin/src/Http/routes.php
@@ -36,9 +36,28 @@ Route::group(['middleware' => ['web']], function () {
Route::get('/logout', 'Webkul\User\Http\Controllers\SessionController@destroy')->defaults('_config', [
'redirect' => 'admin.session.create'
])->name('admin.session.destroy');
-
+
+
+ // Dashboard Route
Route::get('/dashboard', 'Webkul\Admin\Http\Controllers\DashboardController@index')->name('admin.dashboard.index');
+
+ // Catalog Routes
+ Route::prefix('catalog')->group(function () {
+ Route::get('/attributes', 'Webkul\Attribute\Http\Controllers\AttributeController@index')->defaults('_config', [
+ 'view' => 'admin::catalog.attributes.index'
+ ])->name('admin.catalog.attributes.index');
+
+ Route::get('/attributes/create', 'Webkul\Attribute\Http\Controllers\AttributeController@create')->defaults('_config', [
+ 'view' => 'admin::catalog.attributes.create'
+ ])->name('admin.catalog.attributes.create');
+
+ Route::post('/attributes/create', 'Webkul\Attribute\Http\Controllers\AttributeController@store')->defaults('_config', [
+ 'redirect' => 'admin.catalog.attributes.index'
+ ])->name('admin.catalog.attributes.store');
+ });
+
+
// User Routes
Route::get('/users', 'Webkul\User\Http\Controllers\UserController@index')->defaults('_config', [
'view' => 'admin::users.users.index'
@@ -60,6 +79,7 @@ Route::group(['middleware' => ['web']], function () {
'redirect' => 'admin.users.index'
])->name('admin.users.update');
+
// User Role Routes
Route::get('/roles', 'Webkul\User\Http\Controllers\RoleController@index')->defaults('_config', [
'view' => 'admin::users.roles.index'
@@ -82,6 +102,20 @@ Route::group(['middleware' => ['web']], function () {
])->name('admin.roles.update');
+ // Locale Routes
+ Route::get('/locales', 'Webkul\Core\Http\Controllers\LocaleController@index')->defaults('_config', [
+ 'view' => 'admin::locales.index'
+ ])->name('admin.locales.index');
+
+ Route::get('/locales/create', 'Webkul\Core\Http\Controllers\LocaleController@create')->defaults('_config', [
+ 'view' => 'admin::locales.create'
+ ])->name('admin.locales.create');
+
+ Route::post('/locales/create', 'Webkul\Core\Http\Controllers\LocaleController@store')->defaults('_config', [
+ 'redirect' => 'admin.locales.index'
+ ])->name('admin.locales.store');
+
+
// Admin Profile route
Route::get('/account', 'Webkul\User\Http\Controllers\AccountController@edit')->defaults('_config', [
'view' => 'admin::account.edit'
diff --git a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php
index 3a31e3f0a..65dc81f3e 100644
--- a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php
+++ b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php
@@ -18,12 +18,12 @@ class AdminServiceProvider extends ServiceProvider
{
include __DIR__ . '/../Http/routes.php';
+ $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'admin');
+
$this->publishes([
__DIR__ . '/../../publishable/assets' => public_path('vendor/webkul/admin/assets'),
], 'public');
- $this->loadMigrationsFrom(__DIR__ . '/../Database/migrations');
-
$this->loadViewsFrom(__DIR__ . '/../Resources/views', 'admin');
$this->composeView();
@@ -60,7 +60,7 @@ class AdminServiceProvider extends ServiceProvider
];
}
}
-
+
$view->with('menu', $menu)->with('subMenus', $subMenus)->with('tabs', $tabs);
});
}
diff --git a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php
index aa80d9937..df2639d7a 100644
--- a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php
+++ b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php
@@ -10,11 +10,11 @@ use Webkul\Ui\Menu;
class EventServiceProvider extends ServiceProvider
{
/**
- * Register services.
+ * Bootstrap services.
*
* @return void
*/
- public function register()
+ public function boot()
{
$this->createAdminMenu();
@@ -39,6 +39,10 @@ class EventServiceProvider extends ServiceProvider
Event::listen('admin.menu.build', function($menu) {
$menu->add('dashboard', 'Dashboard', 'admin.dashboard.index', 1, 'dashboard-icon');
+ $menu->add('catalog', 'Catalog', 'admin.catalog.attributes.index', 3, 'catalog-icon');
+
+ $menu->add('catalog.attributes', 'Attributes', 'admin.catalog.attributes.index', 3);
+
$menu->add('configuration', 'Configure', 'admin.account.edit', 6, 'configuration-icon');
$menu->add('configuration.account', 'My Account', 'admin.account.edit', 1);
@@ -50,6 +54,8 @@ class EventServiceProvider extends ServiceProvider
$menu->add('settings.users.users', 'Users', 'admin.users.index', 1, '');
$menu->add('settings.users.roles', 'Roles', 'admin.roles.index', 2, '');
+
+ $menu->add('settings.locales', 'Locales', 'admin.locales.index', 2, '');
});
}
@@ -67,13 +73,11 @@ class EventServiceProvider extends ServiceProvider
$acl->add('settings', 'Settings', 'admin.users.index', 6);
- $acl->add('settings.users', 'Users', 'admin.users.index');
+ $acl->add('settings.users', 'Users', 'admin.users.index', 1);
- $acl->add('settings.users.users', 'Users', 'admin.users.index');
+ $acl->add('settings.users.users', 'Users', 'admin.users.index', 1);
- $acl->add('settings.users.roles', 'Roles', 'admin.roles.index');
-
- $acl->add('settings.users.roles1', 'Roles 1', 'admin.roles.index');
+ $acl->add('settings.users.roles', 'Roles', 'admin.roles.index', 2);
});
}
diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php
new file mode 100644
index 000000000..853ddd80b
--- /dev/null
+++ b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/create.blade.php
@@ -0,0 +1,85 @@
+@extends('admin::layouts.content')
+
+@section('content')
+
+@stop
+
+@section('javascript')
+
+@stop
\ No newline at end of file
diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/attributes/index.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/index.blade.php
new file mode 100644
index 000000000..d6305062d
--- /dev/null
+++ b/packages/Webkul/Admin/src/Resources/views/catalog/attributes/index.blade.php
@@ -0,0 +1,21 @@
+@extends('admin::layouts.content')
+
+@section('content')
+
+@stop
\ No newline at end of file
diff --git a/packages/Webkul/Admin/src/Resources/views/locales/create.blade.php b/packages/Webkul/Admin/src/Resources/views/locales/create.blade.php
new file mode 100644
index 000000000..69c88bc72
--- /dev/null
+++ b/packages/Webkul/Admin/src/Resources/views/locales/create.blade.php
@@ -0,0 +1,43 @@
+@extends('admin::layouts.content')
+
+@section('content')
+
+@stop
\ No newline at end of file
diff --git a/packages/Webkul/Admin/src/Resources/views/locales/index.blade.php b/packages/Webkul/Admin/src/Resources/views/locales/index.blade.php
new file mode 100644
index 000000000..f64f7016b
--- /dev/null
+++ b/packages/Webkul/Admin/src/Resources/views/locales/index.blade.php
@@ -0,0 +1,21 @@
+@extends('admin::layouts.content')
+
+@section('content')
+
+@stop
\ No newline at end of file
diff --git a/packages/Webkul/Admin/src/Resources/views/users/roles/create.blade.php b/packages/Webkul/Admin/src/Resources/views/users/roles/create.blade.php
index fa6529183..c0d3d587e 100644
--- a/packages/Webkul/Admin/src/Resources/views/users/roles/create.blade.php
+++ b/packages/Webkul/Admin/src/Resources/views/users/roles/create.blade.php
@@ -46,7 +46,7 @@
-
+
diff --git a/packages/Webkul/Admin/src/Resources/views/users/roles/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/users/roles/edit.blade.php
new file mode 100644
index 000000000..08b79c1c5
--- /dev/null
+++ b/packages/Webkul/Admin/src/Resources/views/users/roles/edit.blade.php
@@ -0,0 +1,74 @@
+@extends('admin::layouts.content')
+
+@section('content')
+
+@stop
+
+@section('javascript')
+
+@stop
\ No newline at end of file
diff --git a/packages/Webkul/Attribute/.gitignore b/packages/Webkul/Attribute/.gitignore
new file mode 100644
index 000000000..30bc16279
--- /dev/null
+++ b/packages/Webkul/Attribute/.gitignore
@@ -0,0 +1 @@
+/node_modules
\ No newline at end of file
diff --git a/packages/Webkul/Attribute/composer.json b/packages/Webkul/Attribute/composer.json
new file mode 100644
index 000000000..8b6257ada
--- /dev/null
+++ b/packages/Webkul/Attribute/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "webkul/laravel-attribute",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Jitendra Singh",
+ "email": "jitendra@webkul.com"
+ }
+ ],
+ "require": {
+ "nwidart/laravel-modules": "^3.2"
+ },
+ "autoload": {
+ "psr-4": {
+ "Webkul\\Attribute\\": "src/"
+ }
+ },
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Webkul\\Attribute\\Providers\\AttributeServiceProvider"
+ ],
+ "aliases": { }
+ }
+ },
+ "minimum-stability": "dev"
+}
diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_130148_create_attributes_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_130148_create_attributes_table.php
new file mode 100644
index 000000000..06744de37
--- /dev/null
+++ b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_130148_create_attributes_table.php
@@ -0,0 +1,43 @@
+increments('id');
+ $table->string('code')->unique();
+ $table->string('name');
+ $table->string('type');
+ $table->string('validation')->nullable();
+ $table->integer('position')->nullable();
+ $table->boolean('is_required');
+ $table->boolean('is_unique');
+ $table->boolean('value_per_locale');
+ $table->boolean('value_per_channel');
+ $table->boolean('is_filterable');
+ $table->boolean('is_configurable');
+ $table->boolean('is_user_defined')->default(1);
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('attributes');
+ }
+}
diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_132854_create_attribute_translations_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_132854_create_attribute_translations_table.php
new file mode 100644
index 000000000..5c1607871
--- /dev/null
+++ b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_132854_create_attribute_translations_table.php
@@ -0,0 +1,35 @@
+increments('id');
+ $table->string('locale');
+ $table->text('name')->nullable();
+ $table->integer('attribute_id')->unsigned();
+ $table->unique(['attribute_id', 'locale']);
+ $table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('attribute_translations');
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135152_create_attribute_groups_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135152_create_attribute_groups_table.php
new file mode 100644
index 000000000..d657883d2
--- /dev/null
+++ b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135152_create_attribute_groups_table.php
@@ -0,0 +1,35 @@
+increments('id');
+ $table->string('name');
+ $table->timestamps();
+ $table->integer('sort_order');
+ $table->integer('attribute_family_id')->unsigned();
+ $table->unique(['attribute_family_id', 'name']);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('attribute_groups');
+ }
+}
diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135200_create_attribute_families_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135200_create_attribute_families_table.php
new file mode 100644
index 000000000..13c0e6c25
--- /dev/null
+++ b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_135200_create_attribute_families_table.php
@@ -0,0 +1,36 @@
+increments('id');
+ $table->string('name');
+ $table->boolean('status')->default(0);
+ });
+
+ Schema::table('attribute_groups', function($table) {
+ $table->foreign('attribute_family_id')->references('id')->on('attribute_families')->onDelete('cascade');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('attribute_families');
+ }
+}
diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_140832_create_attribute_options_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_140832_create_attribute_options_table.php
new file mode 100644
index 000000000..19e579faf
--- /dev/null
+++ b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_140832_create_attribute_options_table.php
@@ -0,0 +1,35 @@
+increments('id');
+ $table->string('code');
+ $table->integer('sort_order');
+ $table->integer('attribute_id')->unsigned();
+ $table->unique(['attribute_id', 'code']);
+ $table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('attribute_options');
+ }
+}
diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_140856_create_attribute_option_translations_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_140856_create_attribute_option_translations_table.php
new file mode 100644
index 000000000..94944a3ab
--- /dev/null
+++ b/packages/Webkul/Attribute/src/Database/Migrations/2018_07_05_140856_create_attribute_option_translations_table.php
@@ -0,0 +1,35 @@
+increments('id');
+ $table->string('locale');
+ $table->text('label')->nullable();
+ $table->integer('attribute_option_id')->unsigned();
+ $table->unique(['attribute_option_id', 'locale']);
+ $table->foreign('attribute_option_id')->references('id')->on('attribute_options')->onDelete('cascade');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('attribute_option_translations');
+ }
+}
diff --git a/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php b/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php
new file mode 100644
index 000000000..59fa8e87d
--- /dev/null
+++ b/packages/Webkul/Attribute/src/Http/Controllers/AttributeController.php
@@ -0,0 +1,119 @@
+
+ * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
+ */
+class AttributeController extends Controller
+{
+ /**
+ * Contains route related configuration
+ *
+ * @var array
+ */
+ protected $_config;
+
+ /**
+ * Create a new controller instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ $this->_config = request('_config');
+ }
+
+ /**
+ * Display a listing of the resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function index()
+ {
+ return view($this->_config['view']);
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function create()
+ {
+ return view($this->_config['view'], compact('roleItems'));
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function store()
+ {
+ $this->validate(request(), [
+ 'code' => ['required', 'unique:attributes,code', new \Webkul\Core\Contracts\Validations\Slug],
+ 'name' => 'required',
+ 'type' => 'required'
+ ]);
+
+ Attribute::create(request()->all());
+
+ session()->flash('success', 'Attribute created successfully.');
+
+ return redirect()->route($this->_config['redirect']);
+ }
+
+ /**
+ * Show the form for editing the specified resource.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function edit($id)
+ {
+ $role = Role::findOrFail($id);
+
+ return view($this->_config['view'], compact('role'));
+ }
+
+ /**
+ * Update the specified resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function update(Request $request, $id)
+ {
+ $this->validate(request(), [
+ 'name' => 'required',
+ 'permission_type' => 'required',
+ ]);
+
+ $role = Role::findOrFail($id);
+
+ $role->update(request()->all());
+
+ session()->flash('success', 'Role updated successfully.');
+
+ return redirect()->route($this->_config['redirect']);
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy($id)
+ {
+ //
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Attribute/src/Http/Controllers/Controller.php b/packages/Webkul/Attribute/src/Http/Controllers/Controller.php
new file mode 100644
index 000000000..0d3d3595f
--- /dev/null
+++ b/packages/Webkul/Attribute/src/Http/Controllers/Controller.php
@@ -0,0 +1,13 @@
+loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
+ }
+
+ /**
+ * Register services.
+ *
+ * @return void
+ */
+ public function register()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Category/.gitignore b/packages/Webkul/Category/.gitignore
new file mode 100644
index 000000000..30bc16279
--- /dev/null
+++ b/packages/Webkul/Category/.gitignore
@@ -0,0 +1 @@
+/node_modules
\ No newline at end of file
diff --git a/packages/Webkul/Category/composer.json b/packages/Webkul/Category/composer.json
new file mode 100644
index 000000000..9f9bab1ce
--- /dev/null
+++ b/packages/Webkul/Category/composer.json
@@ -0,0 +1,25 @@
+{
+ "name": "webkul/laravel-category",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Jitendra Singh",
+ "email": "jitendra@webkul.com"
+ }
+ ],
+ "require": {},
+ "autoload": {
+ "psr-4": {
+ "Webkul\\Attribute\\": "src/"
+ }
+ },
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Webkul\\Attribute\\Providers\\AttributeServiceProvider"
+ ],
+ "aliases": { }
+ }
+ },
+ "minimum-stability": "dev"
+}
diff --git a/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142820_create_categories_table.php b/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142820_create_categories_table.php
new file mode 100644
index 000000000..7d4f5e200
--- /dev/null
+++ b/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142820_create_categories_table.php
@@ -0,0 +1,35 @@
+increments('id');
+ $table->string('code')->unique();
+ $table->integer('position');
+ $table->integer('parent_id')->unsigned()->nullable();
+ $table->foreign('parent_id')->references('id')->on('categories')->onDelete('cascade');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('categories');
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142836_create_category_name_translations_table.php b/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142836_create_category_name_translations_table.php
new file mode 100644
index 000000000..48c6656a3
--- /dev/null
+++ b/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142836_create_category_name_translations_table.php
@@ -0,0 +1,31 @@
+increments('id');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('category_name_translation');
+ }
+}
diff --git a/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142851_create_category_description_translations_table.php b/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142851_create_category_description_translations_table.php
new file mode 100644
index 000000000..521516390
--- /dev/null
+++ b/packages/Webkul/Category/src/Database/Migrations/2018_07_05_142851_create_category_description_translations_table.php
@@ -0,0 +1,31 @@
+increments('id');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('category_description_translations');
+ }
+}
diff --git a/packages/Webkul/Category/src/Providers/CategoryServiceProvider.php b/packages/Webkul/Category/src/Providers/CategoryServiceProvider.php
new file mode 100644
index 000000000..a832e33d8
--- /dev/null
+++ b/packages/Webkul/Category/src/Providers/CategoryServiceProvider.php
@@ -0,0 +1,30 @@
+loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
+ }
+
+ /**
+ * Register services.
+ *
+ * @return void
+ */
+ public function register()
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Core/.gitignore b/packages/Webkul/Core/.gitignore
new file mode 100644
index 000000000..30bc16279
--- /dev/null
+++ b/packages/Webkul/Core/.gitignore
@@ -0,0 +1 @@
+/node_modules
\ No newline at end of file
diff --git a/packages/Webkul/Core/composer.json b/packages/Webkul/Core/composer.json
new file mode 100644
index 000000000..922b432b9
--- /dev/null
+++ b/packages/Webkul/Core/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "webkul/laravel-core",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Jitendra Singh",
+ "email": "jitendra@webkul.com"
+ }
+ ],
+ "require": {
+ "propaganistas/laravel-intl": "^2.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "Webkul\\Core\\": "src/"
+ }
+ },
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Webkul\\Core\\Providers\\CoreServiceProvider"
+ ],
+ "aliases": { }
+ }
+ },
+ "minimum-stability": "dev"
+}
diff --git a/packages/Webkul/Core/src/Contracts/RepositoryInterface.php b/packages/Webkul/Core/src/Contracts/RepositoryInterface.php
new file mode 100644
index 000000000..a1b90aa4f
--- /dev/null
+++ b/packages/Webkul/Core/src/Contracts/RepositoryInterface.php
@@ -0,0 +1,27 @@
+
+ * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
+ */
+interface RepositoryInterface {
+
+ public function all($columns = ['*']);
+
+ public function paginate($perPage = 15, $columns = ['*']);
+
+ public function create(array $data);
+
+ public function update(array $data, $id);
+
+ public function delete($id);
+
+ public function find($id, $columns = ['*']);
+
+ public function findBy($field, $value, $columns = ['*']);
+
+}
\ No newline at end of file
diff --git a/packages/Webkul/Core/src/Contracts/Validations/Slug.php b/packages/Webkul/Core/src/Contracts/Validations/Slug.php
new file mode 100644
index 000000000..f144dbbc0
--- /dev/null
+++ b/packages/Webkul/Core/src/Contracts/Validations/Slug.php
@@ -0,0 +1,30 @@
+increments('id');
+ $table->string('code')->unique();
+ $table->string('name');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('locales');
+ }
+}
diff --git a/packages/Webkul/User/src/Database/migrations/.gitkeep b/packages/Webkul/Core/src/Database/Seeders/.gitkeep
similarity index 100%
rename from packages/Webkul/User/src/Database/migrations/.gitkeep
rename to packages/Webkul/Core/src/Database/Seeders/.gitkeep
diff --git a/packages/Webkul/Core/src/Database/Seeders/DatabaseSeeder.php b/packages/Webkul/Core/src/Database/Seeders/DatabaseSeeder.php
new file mode 100644
index 000000000..eef670023
--- /dev/null
+++ b/packages/Webkul/Core/src/Database/Seeders/DatabaseSeeder.php
@@ -0,0 +1,18 @@
+call(LocalesTableSeeder::class);
+ }
+}
diff --git a/packages/Webkul/Core/src/Database/Seeders/LocalesTableSeeder.php b/packages/Webkul/Core/src/Database/Seeders/LocalesTableSeeder.php
new file mode 100644
index 000000000..fa33dcc31
--- /dev/null
+++ b/packages/Webkul/Core/src/Database/Seeders/LocalesTableSeeder.php
@@ -0,0 +1,17 @@
+code = 'en';
+ $locale->name = 'English';
+ $locale->save();
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Core/src/Eloquent/Repository.php b/packages/Webkul/Core/src/Eloquent/Repository.php
new file mode 100644
index 000000000..d3eabc4a2
--- /dev/null
+++ b/packages/Webkul/Core/src/Eloquent/Repository.php
@@ -0,0 +1,120 @@
+
+ * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
+ */
+abstract class Repository implements RepositoryInterface {
+
+ /**
+ * @var App
+ */
+ private $app;
+
+ /**
+ * @var \Illuminate\Database\Eloquent\Model
+ */
+ protected $model;
+
+ /**
+ * @param App $app
+ * @throws \Webkul\Core\Exceptions\RepositoryException
+ */
+ public function __construct(App $app) {
+ $this->app = $app;
+
+ $this->makeModel();
+ }
+
+ /**
+ * Specify Model class name
+ *
+ * @return mixed
+ */
+ public abstract function model();
+
+ /**
+ * @param array $columns
+ * @return mixed
+ */
+ public function all($columns = ['*']) {
+ return $this->model->get($columns);
+ }
+
+ /**
+ * @param int $perPage
+ * @param array $columns
+ * @return mixed
+ */
+ public function paginate($perPage = 1, $columns = ['*']) {
+ return $this->model->paginate($perPage, $columns);
+ }
+
+ /**
+ * @param array $data
+ * @return mixed
+ */
+ public function create(array $data) {
+ return $this->model->create($data);
+ }
+
+ /**
+ * @param array $data
+ * @param $id
+ * @param string $attribute
+ * @return mixed
+ */
+ public function update(array $data, $id, $attribute="id") {
+ return $this->model->where($attribute, '=', $id)->update($data);
+ }
+
+ /**
+ * @param $id
+ * @return mixed
+ */
+ public function delete($id) {
+ return $this->model->destroy($id);
+ }
+
+ /**
+ * @param $id
+ * @param array $columns
+ * @return mixed
+ */
+ public function find($id, $columns = ['*']) {
+ return $this->model->find($id, $columns);
+ }
+
+ /**
+ * @param $attribute
+ * @param $value
+ * @param array $columns
+ * @return mixed
+ */
+ public function findBy($attribute, $value, $columns = ['*']) {
+ return $this->model->where($attribute, '=', $value)->first($columns);
+ }
+
+ /**
+ * @return \Illuminate\Database\Eloquent\Builder
+ * @throws RepositoryException
+ */
+ public function makeModel() {
+ $model = $this->app->make($this->model());
+
+ if (!$model instanceof Model)
+ throw new RepositoryException("Class {$this->model()} must be an instance of Illuminate\\Database\\Eloquent\\Model");
+
+ return $this->model = $model->newQuery();
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Core/src/Exceptions/RepositoryException.php b/packages/Webkul/Core/src/Exceptions/RepositoryException.php
new file mode 100644
index 000000000..2fce64a6c
--- /dev/null
+++ b/packages/Webkul/Core/src/Exceptions/RepositoryException.php
@@ -0,0 +1,14 @@
+
+ * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
+ */
+class RepositoryException extends \Exception
+{
+
+}
\ No newline at end of file
diff --git a/packages/Webkul/Core/src/Http/Controllers/Controller.php b/packages/Webkul/Core/src/Http/Controllers/Controller.php
new file mode 100644
index 000000000..08a7833f3
--- /dev/null
+++ b/packages/Webkul/Core/src/Http/Controllers/Controller.php
@@ -0,0 +1,13 @@
+
+ * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com)
+ */
+class LocaleController extends Controller
+{
+ /**
+ * Contains route related configuration
+ *
+ * @var array
+ */
+ protected $_config;
+
+ /**
+ * Create a new controller instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ $this->_config = request('_config');
+ }
+
+ /**
+ * Display a listing of the resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function index()
+ {
+ return view($this->_config['view']);
+ }
+
+ /**
+ * Show the form for creating a new resource.
+ *
+ * @return \Illuminate\Http\Response
+ */
+ public function create()
+ {
+ return view($this->_config['view']);
+ }
+
+ /**
+ * Store a newly created resource in storage.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return \Illuminate\Http\Response
+ */
+ public function store(Request $request)
+ {
+ $this->validate(request(), [
+ 'code' => 'required|unique:locales,code',
+ 'name' => 'required'
+ ]);
+
+ Locale::create(request(['code','name']));
+
+ session()->flash('success', 'Locale created successfully.');
+
+ return redirect()->route($this->_config['redirect']);
+ }
+
+ /**
+ * Remove the specified resource from storage.
+ *
+ * @param int $id
+ * @return \Illuminate\Http\Response
+ */
+ public function destroy($id)
+ {
+ //
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Core/src/Models/Locale.php b/packages/Webkul/Core/src/Models/Locale.php
new file mode 100644
index 000000000..7d12e4623
--- /dev/null
+++ b/packages/Webkul/Core/src/Models/Locale.php
@@ -0,0 +1,18 @@
+loadMigrationsFrom(__DIR__ . '/../Database/Migrations');
+
+ $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'core');
+
+ $this->publishes([
+ __DIR__ . '/../../publishable/lang' => public_path('vendor/webkul/core/lang'),
+ ], 'public');
+
+ Validator::extend('slug', 'Webkul\Core\Contracts\Validations\Slug@passes');
+ }
+
+ /**
+ * Register services.
+ *
+ * @return void
+ */
+ public function register()
+ {
+ }
+}
\ No newline at end of file
diff --git a/packages/Webkul/Core/src/Resources/lang/en/validation.php b/packages/Webkul/Core/src/Resources/lang/en/validation.php
new file mode 100644
index 000000000..12efc8886
--- /dev/null
+++ b/packages/Webkul/Core/src/Resources/lang/en/validation.php
@@ -0,0 +1,5 @@
+ 'The :attribute must be valid slug.'
+];
\ No newline at end of file
diff --git a/packages/Webkul/Ui/src/Menu.php b/packages/Webkul/Ui/src/Menu.php
index 4b8f09074..9370f168e 100644
--- a/packages/Webkul/Ui/src/Menu.php
+++ b/packages/Webkul/Ui/src/Menu.php
@@ -67,6 +67,9 @@ class Menu {
* @return void
*/
public function sortItems($items) {
+ if(!$items) {
+ return;
+ }
usort($items, function($a, $b) {
if ($a['sort'] == $b['sort']) {
return 0;
diff --git a/packages/Webkul/Ui/src/Resources/assets/images/Icon-Catalog-Active.svg b/packages/Webkul/Ui/src/Resources/assets/images/Icon-Catalog-Active.svg
new file mode 100644
index 000000000..ba35b9621
--- /dev/null
+++ b/packages/Webkul/Ui/src/Resources/assets/images/Icon-Catalog-Active.svg
@@ -0,0 +1,16 @@
+
+
+
+ Icon-Catalog-Active
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/Webkul/Ui/src/Resources/assets/images/Icon-Catalog.svg b/packages/Webkul/Ui/src/Resources/assets/images/Icon-Catalog.svg
new file mode 100644
index 000000000..f7453ca83
--- /dev/null
+++ b/packages/Webkul/Ui/src/Resources/assets/images/Icon-Catalog.svg
@@ -0,0 +1,16 @@
+
+
+
+ Icon-Catalog
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/Webkul/Ui/src/Resources/assets/js/components/accordian.vue b/packages/Webkul/Ui/src/Resources/assets/js/components/accordian.vue
index 86cbf81bc..847d463b4 100644
--- a/packages/Webkul/Ui/src/Resources/assets/js/components/accordian.vue
+++ b/packages/Webkul/Ui/src/Resources/assets/js/components/accordian.vue
@@ -1,5 +1,5 @@
-