diff --git a/composer.json b/composer.json index 502e36421..79eefdf65 100644 --- a/composer.json +++ b/composer.json @@ -11,6 +11,7 @@ "php": "^7.1.3", "dimsav/laravel-translatable": "^9.0", "fideloper/proxy": "^4.0", + "intervention/image": "^2.4", "kalnoy/nestedset": "^4.3", "laravel/framework": "5.6.*", "laravel/tinker": "^1.0", diff --git a/composer.lock b/composer.lock index d907946d1..43a06425e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "daaa24e649dd4e9808feef8251e43247", + "content-hash": "8acd4eec85be1351459a67cfd14d039b", "packages": [ { "name": "commerceguys/intl", @@ -465,6 +465,141 @@ ], "time": "2018-02-07T20:20:57+00:00" }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "intervention/image", + "version": "2.4.2", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "e82d274f786e3d4b866a59b173f42e716f0783eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/e82d274f786e3d4b866a59b173f42e716f0783eb", + "reference": "e82d274f786e3d4b866a59b173f42e716f0783eb", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@olivervogel.com", + "homepage": "http://olivervogel.com/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "time": "2018-05-29T14:19:03+00:00" + }, { "name": "jakub-onderka/php-console-color", "version": "0.1", @@ -1371,6 +1506,56 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.0.2", diff --git a/config/app.php b/config/app.php index 41513b3e8..c0c8e6ef1 100644 --- a/config/app.php +++ b/config/app.php @@ -170,6 +170,9 @@ return [ App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, + //Laravel Intervention + Intervention\Image\ImageServiceProvider::class, + //Webkul packages Webkul\User\Providers\UserServiceProvider::class, Webkul\Admin\Providers\AdminServiceProvider::class, @@ -232,7 +235,8 @@ return [ 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, - 'Datagrid' => Webkul\Ui\DataGrid\Facades\DataGrid::class + 'Datagrid' => Webkul\Ui\DataGrid\Facades\DataGrid::class, + 'Image' => Intervention\Image\Facades\Image::class ], ]; diff --git a/config/image.php b/config/image.php new file mode 100644 index 000000000..2b1d2c3e1 --- /dev/null +++ b/config/image.php @@ -0,0 +1,20 @@ + 'gd' + +]; diff --git a/packages/Webkul/Admin/src/Http/ViewComposers/DataGrids/UserComposer.php b/packages/Webkul/Admin/src/Http/ViewComposers/DataGrids/UserComposer.php index 028d9bd6f..9a7b147cb 100644 --- a/packages/Webkul/Admin/src/Http/ViewComposers/DataGrids/UserComposer.php +++ b/packages/Webkul/Admin/src/Http/ViewComposers/DataGrids/UserComposer.php @@ -44,6 +44,11 @@ class UserComposer 'column' => 'u.id', 'type' => 'number', 'label' => 'Admin ID' + ], + [ + 'column' => 'r.id', + 'type' => 'number', + 'label' => 'Role ID' ] ], 'searchable' => [ @@ -77,13 +82,13 @@ class UserComposer // ], ], 'join' => [ - // [ - // 'join' => 'leftjoin', - // 'table' => 'roles as r', - // 'primaryKey' => 'u.role_id', - // 'condition' => '=', - // 'secondaryKey' => 'r.id', - // ] + [ + 'join' => 'leftjoin', + 'table' => 'roles as r', + 'primaryKey' => 'u.role_id', + 'condition' => '=', + 'secondaryKey' => 'r.id', + ] ], 'columns' => [ [ @@ -104,12 +109,18 @@ class UserComposer 'label' => 'Admin E-Mail', 'sortable' => true, ], - // [ - // 'name' => 'r.name as rolename', - // 'type' => 'string', - // 'label' => 'Role Name', - // 'sortable' => true, - // ], + [ + 'name' => 'r.name', + 'type' => 'string', + 'label' => 'Role Name', + 'sortable' => true, + ], + [ + 'name' => 'r.id as ds', + 'type' => 'string', + 'label' => 'Role ID', + 'sortable' => true, + ], // [ // 'name' => 'a.first_name', // 'type' => 'string', diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index e0518507c..1a49e40b7 100644 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -299,6 +299,15 @@ Route::group(['middleware' => ['web']], function () { ])->name('admin.account.edit'); Route::put('/account', 'Webkul\User\Http\Controllers\AccountController@update')->name('admin.account.update'); + + // Admin Store Front Settings Route + Route::get('/slider/create','Webkul\Shop\Http\Controllers\SliderController@index')->defaults('_config',[ + 'view' => 'admin::sliders.create' + ])->name('admin.sliders.index'); + + Route::post('/slider/create','Webkul\Shop\Http\Controllers\SliderController@create')->defaults('_config',[ + 'redirect' => 'admin::sliders.create' + ])->name('admin.sliders.create'); }); }); }); diff --git a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php index eb09fd1ca..03095496a 100644 --- a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php +++ b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php @@ -33,13 +33,13 @@ class EventServiceProvider extends ServiceProvider */ public function createAdminMenu() { - Event::listen('admin.menu.create', function() { - return Menu::create(function($menu) { + Event::listen('admin.menu.create', function () { + return Menu::create(function ($menu) { Event::fire('admin.menu.build', $menu); }); }); - Event::listen('admin.menu.build', function($menu) { + Event::listen('admin.menu.build', function ($menu) { $menu->add('dashboard', 'Dashboard', 'admin.dashboard.index', 1, 'dashboard-icon'); $menu->add('catalog', 'Catalog', 'admin.catalog.products.index', 3, 'catalog-icon'); @@ -75,6 +75,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.sliders', 'Create Sliders', 'admin.sliders.index', 8, ''); }); } @@ -85,7 +87,7 @@ class EventServiceProvider extends ServiceProvider */ public function buildACL() { - Event::listen('admin.acl.build', function($acl) { + Event::listen('admin.acl.build', function ($acl) { $acl->add('dashboard', 'Dashboard', 'admin.dashboard.index', 1); $acl->add('configuration', 'Configure', 'admin.account.edit', 5); @@ -107,7 +109,7 @@ class EventServiceProvider extends ServiceProvider */ public function registerACL() { - $this->app->singleton('acl', function() { + $this->app->singleton('acl', function () { return current(Event::fire('admin.acl.create')); }); @@ -121,13 +123,13 @@ class EventServiceProvider extends ServiceProvider */ public function createProductFormAccordian() { - Event::listen('admin.catalog.products.accordian.create', function() { - return ProductFormAccordian::create(function($accordian) { + 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) { + Event::listen('admin.catalog.products.accordian.build', function ($accordian) { $accordian->add('categories', 'Categories', 'admin::catalog.products.accordians.categories', 1); }); } diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index b5f7f76ec..396c8e85f 100644 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -235,6 +235,16 @@ return [ 'default-locale' => 'Default Locale', 'currencies' => 'Currencies', 'base-currency' => 'Base Currency' - ] + ], + + 'sliders' => [ + 'title' => 'Title', + 'add-title' => 'Create Slider', + 'save-btn-title' => 'Save Slider', + 'general' => 'General', + 'image' => 'Image', + 'content' => 'Content', + 'channels' => 'Channel' + ], ] ]; \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/sliders/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sliders/create.blade.php new file mode 100644 index 000000000..5509662a0 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/sliders/create.blade.php @@ -0,0 +1,70 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.sliders.add-title') }} +@stop + +@section('content') +
+
+ + +
+
+ @csrf() + +
+ +
+ + + @{{ errors.first('title') }} +
+ +
+ + + @{{ errors.first('channel') }} +
+ +
+ + + + + + + @{{ errors.first('image') }} + + +
+ +
+ + + + + @{{ errors.first('content') }} +
+ +
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/packages/Webkul/Core/src/Database/Migrations/2018_08_03_114203_create_sliders_table.php b/packages/Webkul/Core/src/Database/Migrations/2018_08_03_114203_create_sliders_table.php new file mode 100644 index 000000000..2028f60f8 --- /dev/null +++ b/packages/Webkul/Core/src/Database/Migrations/2018_08_03_114203_create_sliders_table.php @@ -0,0 +1,39 @@ +increments('id'); + $table->string('title'); + $table->string('path'); + $table->string('content'); + $table->integer('channel_id')->unsigned(); + $table->foreign('channel_id')->references('id')->on('channels')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::disableForeignKeyConstraints(); + Schema::dropIfExists('sliders'); + Schema::enableForeignKeyConstraints(); + } +} diff --git a/packages/Webkul/Core/src/Models/Slider.php b/packages/Webkul/Core/src/Models/Slider.php new file mode 100644 index 000000000..e62b9c5df --- /dev/null +++ b/packages/Webkul/Core/src/Models/Slider.php @@ -0,0 +1,17 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class SliderRepository extends Repository +{ + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Core\Models\Slider'; + } +} \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/Controllers/SliderController.php b/packages/Webkul/Shop/src/Http/Controllers/SliderController.php new file mode 100644 index 000000000..fe673aa68 --- /dev/null +++ b/packages/Webkul/Shop/src/Http/Controllers/SliderController.php @@ -0,0 +1,49 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ + +class SliderController extends controller +{ + protected $_config; + + public function __construct() + { + $this->_config = request('_config'); + + } + + public function index(){ + $call = new Channel(); + $channels = $call->getChannelWithLocales(); + return view($this->_config['view'])->with('channels',[$channels]); + } + + public function create(Request $request) { + $this->validate($request,[ + 'title' => 'string|required|max:100', + 'image' => 'required|image|mimes:png,jpg', + // |dimensions:ratio=12/5 + 'content' => 'string' + ]); + + $image = $request->file('image'); + $input['imagename'] = time().'.'.$image->getClientOriginalExtension(); + $destinationPath = public_path('/images'); + $image->move($destinationPath, $input['imagename']); + + + } +} \ No newline at end of file diff --git a/packages/Webkul/Ui/src/DataGrid/DataGrid.php b/packages/Webkul/Ui/src/DataGrid/DataGrid.php index a468040ec..ae05d3391 100644 --- a/packages/Webkul/Ui/src/DataGrid/DataGrid.php +++ b/packages/Webkul/Ui/src/DataGrid/DataGrid.php @@ -668,11 +668,13 @@ class DataGrid } } } - if ($alias_proper_secondary) { - $this->getQueryWithJoin(); - } else { - throw new \Exception('Due to a bug in laravel, you can\'t use secondary table columns without aliasing'); - } + $this->getQueryWithJoin(); + + // if ($alias_proper_secondary) { + // $this->getQueryWithJoin(); + // } else { + // throw new \Exception('Due to a bug in laravel, you can\'t use secondary table columns without aliasing'); + // } } else { throw new \Exception('Aliases of Join table and the secondary key columns do not match'); } diff --git a/packages/Webkul/Ui/src/Resources/assets/js/app.js b/packages/Webkul/Ui/src/Resources/assets/js/app.js index 070c8caa3..127421440 100644 --- a/packages/Webkul/Ui/src/Resources/assets/js/app.js +++ b/packages/Webkul/Ui/src/Resources/assets/js/app.js @@ -6,3 +6,4 @@ Vue.component("tree-item", require("./components/tree-view/tree-item")); Vue.component("tree-checkbox", require("./components/tree-view/tree-checkbox")); Vue.component("tree-radio", require("./components/tree-view/tree-radio")); Vue.component("modal", require("./components/modal")); +Vue.component("image-upload", require("./components/image/image-upload-single")); 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 7da741d3f..b52134d37 100644 --- a/packages/Webkul/Ui/src/Resources/assets/js/components/accordian.vue +++ b/packages/Webkul/Ui/src/Resources/assets/js/components/accordian.vue @@ -6,7 +6,7 @@ - +
@@ -24,7 +24,8 @@ data: function() { return { - isActive: false + isActive: false, + imageData: '', } }, diff --git a/packages/Webkul/Ui/src/Resources/assets/js/components/image/image-upload-multiple.vue b/packages/Webkul/Ui/src/Resources/assets/js/components/image/image-upload-multiple.vue new file mode 100644 index 000000000..e69de29bb diff --git a/packages/Webkul/Ui/src/Resources/assets/js/components/image/image-upload-single.vue b/packages/Webkul/Ui/src/Resources/assets/js/components/image/image-upload-single.vue new file mode 100644 index 000000000..7cf7a4845 --- /dev/null +++ b/packages/Webkul/Ui/src/Resources/assets/js/components/image/image-upload-single.vue @@ -0,0 +1,73 @@ + + +