From 2b61709ade3ad2a86d155b1186bec9f40986fe30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Fri, 1 Apr 2016 01:59:16 +0200 Subject: [PATCH] FEATURE #1522: add orbit slider Had to change some things in global widgets management and also in html code widget. Sorry for this ugly commit.. --- .../Registrators/WidgetRegistrator.php | 6 +- .../Controllers/Admin/EditUploadedFile.php | 1 + app/Http/Controllers/Admin/EditWidget.php | 6 - app/Models/File.php | 2 +- app/Providers/AppServiceProvider.php | 2 + .../Exceptions/WidgetExistsException.php | 14 ++ app/Widgets/HtmlCode/Presenters/HtmlCode.php | 3 +- app/Widgets/OrbitSlider/OrbitSlider.php | 129 ++++++++++++++++++ .../OrbitSlider/Presenters/OrbitSlider.php | 56 ++++++++ ...30_MakeUserIdNotMandatoryInDirectories.php | 37 +++++ .../2016_03_31_225203_AddNameForFiles.php | 34 +++++ resources/lang/en/admin/fileManager.php | 1 + resources/lang/en/admin/widgets.php | 1 + resources/lang/en/widgets/orbitSlider.php | 15 ++ .../admin/fileManager/editForm.blade.php | 12 ++ .../admin/fileManager/newFileForm.blade.php | 13 ++ .../admin/widgets/htmlCode/editForm.blade.php | 4 +- .../admin/widgets/orbitSlider/edit.blade.php | 20 +++ .../widgets/orbitSlider/editForm.blade.php | 74 ++++++++++ .../admin/widgets/orbitSlider/new.blade.php | 10 ++ .../widgets/orbitSlider/newForm.blade.php | 69 ++++++++++ .../widgets/orbitSlider/element.blade.php | 20 +++ .../views/widgets/orbitSlider/image.blade.php | 5 + 23 files changed, 521 insertions(+), 13 deletions(-) create mode 100644 app/Widgets/Exceptions/WidgetExistsException.php create mode 100644 app/Widgets/OrbitSlider/OrbitSlider.php create mode 100644 app/Widgets/OrbitSlider/Presenters/OrbitSlider.php create mode 100644 database/migrations/2016_03_31_214730_MakeUserIdNotMandatoryInDirectories.php create mode 100644 database/migrations/2016_03_31_225203_AddNameForFiles.php create mode 100644 resources/lang/en/widgets/orbitSlider.php create mode 100644 resources/views/admin/widgets/orbitSlider/edit.blade.php create mode 100644 resources/views/admin/widgets/orbitSlider/editForm.blade.php create mode 100644 resources/views/admin/widgets/orbitSlider/new.blade.php create mode 100644 resources/views/admin/widgets/orbitSlider/newForm.blade.php create mode 100644 resources/views/widgets/orbitSlider/element.blade.php create mode 100644 resources/views/widgets/orbitSlider/image.blade.php diff --git a/app/Handlers/Registrators/WidgetRegistrator.php b/app/Handlers/Registrators/WidgetRegistrator.php index 36814493..e70cf9ee 100644 --- a/app/Handlers/Registrators/WidgetRegistrator.php +++ b/app/Handlers/Registrators/WidgetRegistrator.php @@ -38,9 +38,9 @@ class WidgetRegistrator 'name' => $widgetName, 'description' => $widgetDescription ]); - } - // install widget (if neccessary) - call_user_func($classname . '::install'); + // install widget (if neccessary) + call_user_func($classname . '::install'); + } } } diff --git a/app/Http/Controllers/Admin/EditUploadedFile.php b/app/Http/Controllers/Admin/EditUploadedFile.php index 99443df7..cac6bf5c 100644 --- a/app/Http/Controllers/Admin/EditUploadedFile.php +++ b/app/Http/Controllers/Admin/EditUploadedFile.php @@ -55,6 +55,7 @@ class EditUploadedFile extends Controller } // set values from form + $file->name = $request->name; $file->keywords = $request->keywords; $file->description = $request->description; $file->save(); diff --git a/app/Http/Controllers/Admin/EditWidget.php b/app/Http/Controllers/Admin/EditWidget.php index 7c407faf..34c0936e 100644 --- a/app/Http/Controllers/Admin/EditWidget.php +++ b/app/Http/Controllers/Admin/EditWidget.php @@ -12,12 +12,6 @@ class EditWidget extends Controller { $widget = Widget::findOrFail($id); - // decompose widget settings - $settings = json_decode($widget->settings); - - $widget->containerClass = $settings->containerClass; - $widget->code = $settings->code; - $presenter = call_user_func([$widget->widget_type_handler, 'getPresenter']); return call_user_func([$presenter, 'renderEditForm'], $widget); diff --git a/app/Models/File.php b/app/Models/File.php index a5962fd6..6ca591cd 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -104,7 +104,7 @@ class File extends Model $newFile->file_size = $file->getSize(); // save optional fields - $optionalFields = ['description', 'keywords', 'directoryId']; + $optionalFields = ['name', 'description', 'keywords', 'directoryId']; foreach ($optionalFields as $field) { if ($request->has($field)) { diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 8cddb90f..2be6d206 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -12,6 +12,7 @@ use App\Handlers\Search\Presenters\AdminContent as AdminContentPresenter; use App\Handlers\Search\Presenters\AdminFiles; use App\Models\Template; use App\Widgets\HtmlCode\HtmlCode; +use App\Widgets\OrbitSlider\OrbitSlider; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\File; use Illuminate\Support\ServiceProvider; @@ -83,6 +84,7 @@ class AppServiceProvider extends ServiceProvider // register all available widgets $registrator->register(HtmlCode::class); + $registrator->register(OrbitSlider::class); } /** diff --git a/app/Widgets/Exceptions/WidgetExistsException.php b/app/Widgets/Exceptions/WidgetExistsException.php new file mode 100644 index 00000000..2cfa503a --- /dev/null +++ b/app/Widgets/Exceptions/WidgetExistsException.php @@ -0,0 +1,14 @@ + $message]); + + parent::__construct($message, $code, $previous); + } +} \ No newline at end of file diff --git a/app/Widgets/HtmlCode/Presenters/HtmlCode.php b/app/Widgets/HtmlCode/Presenters/HtmlCode.php index 71040ddf..1fa62590 100644 --- a/app/Widgets/HtmlCode/Presenters/HtmlCode.php +++ b/app/Widgets/HtmlCode/Presenters/HtmlCode.php @@ -47,6 +47,7 @@ class HtmlCode implements WidgetRenderer */ public static function renderEditForm(Widget $widget) { - return view('admin.widgets.htmlCode.edit', ['widget' => $widget]); + $settings = json_decode($widget->settings); + return view('admin.widgets.htmlCode.edit', ['widget' => $widget, 'settings' => $settings]); } } \ No newline at end of file diff --git a/app/Widgets/OrbitSlider/OrbitSlider.php b/app/Widgets/OrbitSlider/OrbitSlider.php new file mode 100644 index 00000000..0e065e4d --- /dev/null +++ b/app/Widgets/OrbitSlider/OrbitSlider.php @@ -0,0 +1,129 @@ +settings); + $parentDirectoryId = Storage::get(self::CONFIG_FILENAME); + $directoryId = isset($settings->directoryId) ? $settings->directoryId : null; + $edit = false; + + // check if directory does not exists + $exists = Directory::where('name', $request->name) + ->where('parent_id', $parentDirectoryId); + + if ($directoryId) { + $edit = true; + $exists = $exists->where('id', '!=', $directoryId); + } + + $exists = $exists->exists(); + + if ($exists) { + throw new WidgetExistsException($request->name); + } + + $directory = new Directory; + + if ($edit) { + $directory = Directory::find($directoryId); + } + + // setup some information about directory + $directory->user_id = Auth::user()->id; + $directory->parent_id = $parentDirectoryId; + $directory->name = $request->name; + $directory->description = $request->description; + $directory->save(); + + $settings = [ + 'directoryId' => $directory->id, + 'sliderClass' => isset($request->containerClass) ? $request->containerClass : '', + 'code' => $request->code + ]; + + $widget->settings = json_encode($settings); + + return $widget; + } + + /** + * Getter for presenter/renderer of this widget + * + * @return WidgetRenderer + */ + public static function getPresenter() + { + return Presenters\OrbitSlider::class; + } + + /** + * Function for installing given widget + * + * @return mixed + */ + public static function install() + { + $directory = Directory::where('name', self::DIRECTORY_NAME) + ->first(); + + if (!count($directory)) { + $directory = Directory::create([ + 'name' => self::DIRECTORY_NAME, + 'hidden' => true + ]); + } + + Storage::put(self::CONFIG_FILENAME, $directory->id); + } + + /** + * Function for uninstalling widget + */ + public static function uninstall() + { + // TODO: Implement uninstall() method. + } +} \ No newline at end of file diff --git a/app/Widgets/OrbitSlider/Presenters/OrbitSlider.php b/app/Widgets/OrbitSlider/Presenters/OrbitSlider.php new file mode 100644 index 00000000..5adb81d6 --- /dev/null +++ b/app/Widgets/OrbitSlider/Presenters/OrbitSlider.php @@ -0,0 +1,56 @@ +directoryId; + + $images = File::where('directory_id', $directoryId) + ->where('mime_type', 'LIKE', 'image%') + ->get(); + + return view('widgets.orbitSlider.element', ['images' => $images, 'settings' => $settings]); + } + + /** + * Display form for creating new instance of widget + * + * @param WidgetType $type + * + * @return mixed + */ + public static function renderAddForm(WidgetType $type) + { + return view('admin.widgets.orbitSlider.new', ['type' => $type]); + } + + /** + * Display form for editing already existing widget + * + * @param Widget $widget + * + * @return mixed + */ + public static function renderEditForm(Widget $widget) + { + $settings = json_decode($widget->settings); + + return view('admin.widgets.orbitSlider.edit', ['widget' => $widget, 'settings' => $settings]); + } +} \ No newline at end of file diff --git a/database/migrations/2016_03_31_214730_MakeUserIdNotMandatoryInDirectories.php b/database/migrations/2016_03_31_214730_MakeUserIdNotMandatoryInDirectories.php new file mode 100644 index 00000000..7c719df2 --- /dev/null +++ b/database/migrations/2016_03_31_214730_MakeUserIdNotMandatoryInDirectories.php @@ -0,0 +1,37 @@ +integer('user_id', false) + ->nullable() + ->default(null) + ->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('directories', function (Blueprint $table) { + $table->integer('user_id', false) + ->nullable(false) + ->change(); + }); + } +} diff --git a/database/migrations/2016_03_31_225203_AddNameForFiles.php b/database/migrations/2016_03_31_225203_AddNameForFiles.php new file mode 100644 index 00000000..a4701e65 --- /dev/null +++ b/database/migrations/2016_03_31_225203_AddNameForFiles.php @@ -0,0 +1,34 @@ +string('name') + ->after('file_size') + ->comment('Some human readable name of file. May be used in different ways'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('files', function (Blueprint $table) { + $table->dropColumn('name'); + }); + } +} diff --git a/resources/lang/en/admin/fileManager.php b/resources/lang/en/admin/fileManager.php index 79d9adce..ad5c0b2d 100644 --- a/resources/lang/en/admin/fileManager.php +++ b/resources/lang/en/admin/fileManager.php @@ -20,6 +20,7 @@ return [ 'noFileSpecified' => 'You have not specified any file for upload', 'uploadSuccessfull' => 'Your file was successfully uploaded', 'selectFile' => 'Select file for upload', + 'name' => 'Name', 'keywords' => 'Keywords (comma separated)', 'description' => 'File description', 'noFiles' => 'No files were found. Try to upload some.', diff --git a/resources/lang/en/admin/widgets.php b/resources/lang/en/admin/widgets.php index f72053eb..b64cd259 100644 --- a/resources/lang/en/admin/widgets.php +++ b/resources/lang/en/admin/widgets.php @@ -21,5 +21,6 @@ return [ 'successfullyAssociated' => 'Association successfull', 'associationDoesNotExists' => 'This association does not exist', 'successfullyDeassociated' => 'Successfully removed from widget area', + 'widgetExists' => 'Widget :id already exists.' ]; \ No newline at end of file diff --git a/resources/lang/en/widgets/orbitSlider.php b/resources/lang/en/widgets/orbitSlider.php new file mode 100644 index 00000000..e9d1583b --- /dev/null +++ b/resources/lang/en/widgets/orbitSlider.php @@ -0,0 +1,15 @@ + 'Orbit slider', + 'widgetDescription' => 'Slider for images. Uses Foundation framework.', + 'name' => 'Slider name', + 'description' => 'Slider description', + 'containerClass' => 'Extra HTML class for slider', + 'createNew' => 'Create new', + 'new' => 'Create new orbit slider', + 'edit' => 'Edit slider :name', + 'editExisting' => 'Save', + 'preview' => 'Slider preview', + 'upload' => 'Add photos into slider', + 'code' => 'Some extra HTML/JS code for slider' +]; \ No newline at end of file diff --git a/resources/views/admin/fileManager/editForm.blade.php b/resources/views/admin/fileManager/editForm.blade.php index 999e4e0a..534ce58f 100644 --- a/resources/views/admin/fileManager/editForm.blade.php +++ b/resources/views/admin/fileManager/editForm.blade.php @@ -14,6 +14,18 @@
{!! csrf_field() !!} + + + + +