FEATURE #1528: add button for creating slider from gallery
This commit is contained in:
@@ -19,6 +19,15 @@ interface AppHandler
|
|||||||
|
|
||||||
public static function getHistoryHandler();
|
public static function getHistoryHandler();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load some extra data for content management form?
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function loadExtraData(Content $content);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save module-specific values into database
|
* Save module-specific values into database
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class CreateNewContent extends Controller
|
|||||||
'page' => $this->content,
|
'page' => $this->content,
|
||||||
'rootPages' => $this->content->rootPages(),
|
'rootPages' => $this->content->rootPages(),
|
||||||
'moduleName' => trans($module->name),
|
'moduleName' => trans($module->name),
|
||||||
|
'extraData' => call_user_func([$module->handler, 'loadExtraData'], $this->content),
|
||||||
'formSectionNames' => call_user_func([$module->handler, 'getExtendedFormSections']),
|
'formSectionNames' => call_user_func([$module->handler, 'getExtendedFormSections']),
|
||||||
'formSections' => call_user_func([$module->handler, 'getExtendedFormInputsCreate']),
|
'formSections' => call_user_func([$module->handler, 'getExtendedFormInputsCreate']),
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -13,6 +13,16 @@ use Illuminate\Support\Facades\Event;
|
|||||||
|
|
||||||
class CreateNewWidget extends Controller
|
class CreateNewWidget extends Controller
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var Widget
|
||||||
|
*/
|
||||||
|
private $widget;
|
||||||
|
|
||||||
|
public function __construct(Widget $widget)
|
||||||
|
{
|
||||||
|
$this->widget = $widget;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Form for new widget area
|
* Form for new widget area
|
||||||
*
|
*
|
||||||
@@ -41,20 +51,9 @@ class CreateNewWidget extends Controller
|
|||||||
{
|
{
|
||||||
$widgetType = WidgetType::findOrFail($type);
|
$widgetType = WidgetType::findOrFail($type);
|
||||||
|
|
||||||
// create new widget
|
|
||||||
$widget = new Widget();
|
|
||||||
$widget->widget_type_handler = $widgetType->handler;
|
|
||||||
$widget->user_id = Auth::user()->id;
|
|
||||||
$widget->name = $request->name;
|
|
||||||
|
|
||||||
// save description if available
|
|
||||||
if (isset($request->description)) {
|
|
||||||
$widget->description = $request->description;
|
|
||||||
}
|
|
||||||
|
|
||||||
// try to save this widget
|
// try to save this widget
|
||||||
try {
|
try {
|
||||||
$widget = call_user_func([$widgetType->handler, 'save'], $widget, $request);
|
$this->widget->createNew($widgetType, $request->all());
|
||||||
} catch (MissingParameterException $e) {
|
} catch (MissingParameterException $e) {
|
||||||
// user omitted some value
|
// user omitted some value
|
||||||
return $this->invalidWidget($type, $e->getMessage());
|
return $this->invalidWidget($type, $e->getMessage());
|
||||||
@@ -63,12 +62,6 @@ class CreateNewWidget extends Controller
|
|||||||
return $this->invalidWidget($type, trans('admin/widgets.cannotSave', ['exception' => $e->getMessage()]));
|
return $this->invalidWidget($type, trans('admin/widgets.cannotSave', ['exception' => $e->getMessage()]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// save into database
|
|
||||||
$widget->save();
|
|
||||||
|
|
||||||
// fire event with newly created widget
|
|
||||||
Event::fire(new \App\Events\CreateNewWidget($widget));
|
|
||||||
|
|
||||||
// redirect with success notification
|
// redirect with success notification
|
||||||
return redirect()
|
return redirect()
|
||||||
->route('widgets.new', ['type' => $type])
|
->route('widgets.new', ['type' => $type])
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ class EditContent extends Controller
|
|||||||
'page' => $page,
|
'page' => $page,
|
||||||
'rootPages' => $page->rootPages(),
|
'rootPages' => $page->rootPages(),
|
||||||
'templates' => $templates,
|
'templates' => $templates,
|
||||||
|
'extraData' => call_user_func([$page->module_handler, 'loadExtraData'], $page),
|
||||||
'formSectionNames' => call_user_func([$page->module_handler, 'getExtendedFormSections']),
|
'formSectionNames' => call_user_func([$page->module_handler, 'getExtendedFormSections']),
|
||||||
'formSections' => call_user_func([$page->module_handler, 'getExtendedFormInputsEdit']),
|
'formSections' => call_user_func([$page->module_handler, 'getExtendedFormInputsEdit']),
|
||||||
'historySize' => count($history['changesets'])
|
'historySize' => count($history['changesets'])
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class EditWidget extends Controller
|
|||||||
|
|
||||||
// try to save this widget
|
// try to save this widget
|
||||||
try {
|
try {
|
||||||
$widget = call_user_func([$widget->widget_type_handler, 'save'], $widget, $request);
|
$widget = call_user_func([$widget->widget_type_handler, 'save'], $widget, (object)$request->all());
|
||||||
} catch (MissingParameterException $e) {
|
} catch (MissingParameterException $e) {
|
||||||
// user omitted some value
|
// user omitted some value
|
||||||
return $this->invalidWidget($e->getMessage());
|
return $this->invalidWidget($e->getMessage());
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Support\Facades\Event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Widget
|
* Class Widget
|
||||||
@@ -22,5 +23,36 @@ class Widget extends Model
|
|||||||
|
|
||||||
protected $guarded = [];
|
protected $guarded = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new widget of given type
|
||||||
|
*
|
||||||
|
* @param WidgetType $widgetType
|
||||||
|
* @param $data
|
||||||
|
*
|
||||||
|
* @return Widget
|
||||||
|
*/
|
||||||
|
public function createNew(WidgetType $widgetType, $data) {
|
||||||
|
// create new widget
|
||||||
|
$widget = new Widget();
|
||||||
|
$widget->widget_type_handler = $widgetType->handler;
|
||||||
|
$widget->user_id = \Auth::user()->id;
|
||||||
|
$widget->name = $data->name;
|
||||||
|
|
||||||
|
// save description if available
|
||||||
|
if (isset($data->description)) {
|
||||||
|
$widget->description = $data->description;
|
||||||
|
}
|
||||||
|
|
||||||
|
$widget = call_user_func([$widgetType->handler, 'save'], $widget, $data);
|
||||||
|
|
||||||
|
// save into database
|
||||||
|
$widget->save();
|
||||||
|
|
||||||
|
// fire event with newly created widget
|
||||||
|
Event::fire(new \App\Events\CreateNewWidget($widget));
|
||||||
|
|
||||||
|
return $widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -29,11 +29,11 @@ interface PublicWidget
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Widget $widget
|
* @param Widget $widget
|
||||||
* @param Request $request
|
* @param \stdClass $data
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function save(Widget $widget, Request $request);
|
public static function save(Widget $widget, \stdClass $data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function for installing given widget
|
* Function for installing given widget
|
||||||
|
|||||||
@@ -41,20 +41,20 @@ class HtmlCode extends NonInstallableWidget
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Widget $widget
|
* @param Widget $widget
|
||||||
* @param Request $request
|
* @param \stdClass $data
|
||||||
*
|
*
|
||||||
* @return Widget
|
* @return Widget
|
||||||
* @throws MissingParameterException
|
* @throws MissingParameterException
|
||||||
*/
|
*/
|
||||||
public static function save(Widget $widget, Request $request)
|
public static function save(Widget $widget, \stdClass $data)
|
||||||
{
|
{
|
||||||
if (!isset($request->code) || empty($request->code)) {
|
if (!isset($data->code) || empty($data->code)) {
|
||||||
throw new MissingParameterException('code');
|
throw new MissingParameterException('code');
|
||||||
}
|
}
|
||||||
|
|
||||||
$widgetSettings = [
|
$widgetSettings = [
|
||||||
'code' => $request->code,
|
'code' => $data->code,
|
||||||
'containerClass' => isset($request->containerClass) ? $request->containerClass : ''
|
'containerClass' => isset($data->containerClass) ? $data->containerClass : ''
|
||||||
];
|
];
|
||||||
|
|
||||||
$widget->settings = json_encode($widgetSettings);
|
$widget->settings = json_encode($widgetSettings);
|
||||||
|
|||||||
@@ -40,19 +40,19 @@ class Menu extends NonInstallableWidget
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \App\Models\Widget $widget
|
* @param \App\Models\Widget $widget
|
||||||
* @param Request $request
|
* @param \stdClass $data
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function save(\App\Models\Widget $widget, Request $request)
|
public static function save(\App\Models\Widget $widget, \stdClass $data)
|
||||||
{
|
{
|
||||||
if (!isset($request->settings) || empty($request->settings) || !json_decode($request->settings)) {
|
if (!isset($data->settings) || empty($data->settings) || !json_decode($data->settings)) {
|
||||||
throw new MissingParameterException('settings');
|
throw new MissingParameterException('settings');
|
||||||
}
|
}
|
||||||
|
|
||||||
$settings = [
|
$settings = [
|
||||||
'links' => json_decode($request->settings),
|
'links' => json_decode($data->settings),
|
||||||
'containerClass' => $request->containerClass
|
'containerClass' => $data->containerClass
|
||||||
];
|
];
|
||||||
|
|
||||||
$widget->settings = json_encode($settings);
|
$widget->settings = json_encode($settings);
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Widgets\OrbitSlider;
|
namespace App\Widgets\OrbitSlider;
|
||||||
|
|
||||||
use App\Http\Requests\Request;
|
|
||||||
use App\Models\Directory;
|
use App\Models\Directory;
|
||||||
use App\Models\Widget;
|
use App\Models\Widget;
|
||||||
use App\Widgets\Contracts\PublicWidget;
|
use App\Widgets\Contracts\PublicWidget;
|
||||||
@@ -36,58 +35,79 @@ class OrbitSlider implements PublicWidget
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Widget $widget
|
* @param $name
|
||||||
* @param Request $request
|
* @param $directoryId
|
||||||
|
* @param $parentDirectoryId
|
||||||
|
*
|
||||||
|
* @throws WidgetExistsException
|
||||||
|
*/
|
||||||
|
protected static function checkIfDirectoryExists($name, $directoryId, $parentDirectoryId)
|
||||||
|
{
|
||||||
|
// check if directory does not exists
|
||||||
|
$exists = Directory::where('name', $name)
|
||||||
|
->where('parent_id', $parentDirectoryId);
|
||||||
|
|
||||||
|
// if widget has some directory set, we are performing edit
|
||||||
|
if ($directoryId) {
|
||||||
|
$exists = $exists->where('id', '!=', $directoryId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($exists->exists()) {
|
||||||
|
throw new WidgetExistsException($name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Widget $widget
|
||||||
|
* @param \stdClass $data
|
||||||
*
|
*
|
||||||
* @throws WidgetExistsException
|
* @throws WidgetExistsException
|
||||||
*
|
*
|
||||||
* @return Widget
|
* @return Widget
|
||||||
*/
|
*/
|
||||||
public static function save(Widget $widget, Request $request)
|
public static function save(Widget $widget, \stdClass $data)
|
||||||
{
|
{
|
||||||
$settings = json_decode($widget->settings);
|
$settings = json_decode($widget->settings);
|
||||||
$parentDirectoryId = Storage::get(self::CONFIG_FILENAME);
|
$parentDirectoryId = Storage::get(self::CONFIG_FILENAME);
|
||||||
$directoryId = isset($settings->directoryId) ? $settings->directoryId : null;
|
$directoryId = isset($settings->directoryId) ? $settings->directoryId : null;
|
||||||
$edit = false;
|
|
||||||
|
|
||||||
// check if directory does not exists
|
if (!isset($data->useExistingDirectory)) {
|
||||||
$exists = Directory::where('name', $request->name)
|
// check if name with same name does not exists yet
|
||||||
->where('parent_id', $parentDirectoryId);
|
self::checkIfDirectoryExists($data->name, $directoryId, $parentDirectoryId);
|
||||||
|
|
||||||
if ($directoryId) {
|
// setup some information about directory
|
||||||
$edit = true;
|
$directory = $directoryId ? Directory::find($directoryId) : new Directory;
|
||||||
$exists = $exists->where('id', '!=', $directoryId);
|
|
||||||
|
// setup some info when creating new directory
|
||||||
|
if (!$directoryId) {
|
||||||
|
$directory->user_id = Auth::user()->id;
|
||||||
|
$directory->parent_id = $parentDirectoryId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// common info both for edit and creation
|
||||||
|
$directory->name = $data->name;
|
||||||
|
$directory->description = $data->description;
|
||||||
|
|
||||||
|
// save into database
|
||||||
|
$directory->save();
|
||||||
|
|
||||||
|
$directoryId = $directory->id;
|
||||||
|
} else {
|
||||||
|
$directoryId = $data->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 = [
|
$settings = [
|
||||||
'directoryId' => $directory->id,
|
'directoryId' => $directoryId,
|
||||||
'imagePerSlide' => $request->imagePerSlide,
|
'imagePerSlide' => isset($data->imagePerSlide) ? $data->imagePerSlide : 4,
|
||||||
'displayBullets' => $request->has('displayBullets'),
|
'displayBullets' => isset($data->displayBullets),
|
||||||
'sliderClass' => isset($request->containerClass) ? $request->containerClass : '',
|
'sliderClass' => isset($data->containerClass) ? $data->containerClass : '',
|
||||||
'slideContainerClass' => isset($request->slideContainerClass) ? $request->slideContainerClass : '',
|
'slideContainerClass' => isset($data->slideContainerClass) ? $data->slideContainerClass : '',
|
||||||
'code' => $request->code
|
'code' => isset($data->code) ? $data->code : ''
|
||||||
];
|
];
|
||||||
|
|
||||||
$widget->settings = self::createSettings($settings);
|
self::checkSettings($settings);
|
||||||
|
|
||||||
|
$widget->settings = json_encode($settings);;
|
||||||
|
|
||||||
return $widget;
|
return $widget;
|
||||||
}
|
}
|
||||||
@@ -97,8 +117,12 @@ class OrbitSlider implements PublicWidget
|
|||||||
*
|
*
|
||||||
* @param $settings
|
* @param $settings
|
||||||
*/
|
*/
|
||||||
public static function prepareSettings(&$settings)
|
public static function checkSettings(&$settings)
|
||||||
{
|
{
|
||||||
|
if (!is_object($settings)) {
|
||||||
|
$settings = (object)$settings;
|
||||||
|
}
|
||||||
|
|
||||||
if (!isset($settings->slideContainerClass)) {
|
if (!isset($settings->slideContainerClass)) {
|
||||||
$settings->slideContainerClass = '';
|
$settings->slideContainerClass = '';
|
||||||
}
|
}
|
||||||
@@ -121,12 +145,6 @@ class OrbitSlider implements PublicWidget
|
|||||||
$settings->code = '';
|
$settings->code = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function createSettings($settings) {
|
|
||||||
self::prepareSettings($settings);
|
|
||||||
|
|
||||||
return json_encode($settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getter for presenter/renderer of this widget
|
* Getter for presenter/renderer of this widget
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ class OrbitSlider implements WidgetRenderer
|
|||||||
$images = File::where('directory_id', $directoryId)
|
$images = File::where('directory_id', $directoryId)
|
||||||
->where('mime_type', 'LIKE', 'image%')
|
->where('mime_type', 'LIKE', 'image%')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
// add some non-existing values
|
// add some non-existing values
|
||||||
\App\Widgets\OrbitSlider\OrbitSlider::prepareSettings($settings);
|
\App\Widgets\OrbitSlider\OrbitSlider::checkSettings($settings);
|
||||||
|
|
||||||
$slidesCount = ($settings->imagePerSlide == 'fullscreen') ? count($images) : ceil(count($images) / $settings->imagePerSlide);
|
$slidesCount = ($settings->imagePerSlide == 'fullscreen') ? count($images) : ceil(count($images) / $settings->imagePerSlide);
|
||||||
$htmlGridNumber = ($settings->imagePerSlide == 'fullscreen') ? false : 12 / $settings->imagePerSlide;
|
$htmlGridNumber = ($settings->imagePerSlide == 'fullscreen') ? false : 12 / $settings->imagePerSlide;
|
||||||
@@ -65,7 +65,7 @@ class OrbitSlider implements WidgetRenderer
|
|||||||
|
|
||||||
// create default object with settings
|
// create default object with settings
|
||||||
$settings = new \stdClass();
|
$settings = new \stdClass();
|
||||||
\App\Widgets\OrbitSlider\OrbitSlider::prepareSettings($settings);
|
\App\Widgets\OrbitSlider\OrbitSlider::checkSettings($settings);
|
||||||
|
|
||||||
return view('admin.widgets.orbitSlider.new', [
|
return view('admin.widgets.orbitSlider.new', [
|
||||||
'type' => $type,
|
'type' => $type,
|
||||||
@@ -87,7 +87,7 @@ class OrbitSlider implements WidgetRenderer
|
|||||||
$settings = json_decode($widget->settings);
|
$settings = json_decode($widget->settings);
|
||||||
|
|
||||||
// create default object with settings
|
// create default object with settings
|
||||||
\App\Widgets\OrbitSlider\OrbitSlider::prepareSettings($settings);
|
\App\Widgets\OrbitSlider\OrbitSlider::checkSettings($settings);
|
||||||
|
|
||||||
return view('admin.widgets.orbitSlider.edit', [
|
return view('admin.widgets.orbitSlider.edit', [
|
||||||
'widget' => $widget,
|
'widget' => $widget,
|
||||||
|
|||||||
@@ -169,4 +169,16 @@ class ContactForm extends Handler
|
|||||||
{
|
{
|
||||||
// TODO: Implement install() method.
|
// TODO: Implement install() method.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load some extra data for content management form?
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function loadExtraData(Content $content)
|
||||||
|
{
|
||||||
|
// nothing to do
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -50,6 +50,24 @@ class Gallery implements AppHandler
|
|||||||
return History::class;
|
return History::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function loadExtraData(Content $content)
|
||||||
|
{
|
||||||
|
if (is_string($content->module_settings)) {
|
||||||
|
$content->module_settings = json_decode($content->module_settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
$extra = [
|
||||||
|
'slider' => isset($content->module_settings->slider) ? $content->module_settings->slider : false
|
||||||
|
];
|
||||||
|
|
||||||
|
return $extra;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save module-specific values into database
|
* Save module-specific values into database
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -0,0 +1,113 @@
|
|||||||
|
<?php namespace Modules\Gallery\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Models\Content;
|
||||||
|
use App\Models\Widget;
|
||||||
|
use App\Models\WidgetType;
|
||||||
|
use App\Widgets\OrbitSlider\OrbitSlider;
|
||||||
|
use Pingpong\Modules\Routing\Controller;
|
||||||
|
|
||||||
|
class CreateOrbitSlider extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var Widget
|
||||||
|
*/
|
||||||
|
private $widget;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreateOrbitSlider constructor.
|
||||||
|
*
|
||||||
|
* @param Widget $widget
|
||||||
|
*/
|
||||||
|
public function __construct(Widget $widget)
|
||||||
|
{
|
||||||
|
$this->widget = $widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load gallery or redirect user back to content edit form
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
protected function getGallery($id)
|
||||||
|
{
|
||||||
|
$content = Content::where('module_handler', config('gallery.handler'))
|
||||||
|
->findOrFail($id);
|
||||||
|
$content->module_settings = json_decode($content->module_settings);
|
||||||
|
|
||||||
|
// check if gallery has assigned some directory id
|
||||||
|
if (!isset($content->module_settings->directoryId)) {
|
||||||
|
return redirect()
|
||||||
|
->route('content.edit', ['id' => $id])
|
||||||
|
->with('error', trans('gallery::admin/content.invalidGallery'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load widget type for Orbit Slider. In case it does not exist, redirect user back to content edit form.
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
protected function getOrbitSliderWidgetType($id)
|
||||||
|
{
|
||||||
|
// try to load widget type for slider
|
||||||
|
$widgetType = WidgetType::where('handler', OrbitSlider::class)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
// check if widget type exists
|
||||||
|
if (!$widgetType) {
|
||||||
|
return redirect()
|
||||||
|
->route('content.edit', ['id' => $id])
|
||||||
|
->with('error', trans('gallery::admin/content.orbitSliderMissing'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $widgetType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method for creating slider from photogallery
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function createNew($id)
|
||||||
|
{
|
||||||
|
// try to find gallery with specified ID
|
||||||
|
$content = $this->getGallery($id);
|
||||||
|
|
||||||
|
// load info about orbit slider widget
|
||||||
|
$widgetType = $this->getOrbitSliderWidgetType($id);
|
||||||
|
|
||||||
|
// create slider basic config
|
||||||
|
$sliderSettings = (object)[
|
||||||
|
'name' => $content->title,
|
||||||
|
'description' => $content->meta_description,
|
||||||
|
'directoryId' => $content->module_settings->directoryId,
|
||||||
|
'useExistingDirectory' => true,
|
||||||
|
];
|
||||||
|
|
||||||
|
// try to create the slider
|
||||||
|
try {
|
||||||
|
$slider = $this->widget->createNew($widgetType, $sliderSettings);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return redirect()
|
||||||
|
->route('content.edit', ['id' => $id])
|
||||||
|
->with('error', trans('gallery::admin/content.sliderFailed', ['message' => $e->getMessage()]));
|
||||||
|
}
|
||||||
|
|
||||||
|
// update gallery info
|
||||||
|
$content->module_settings->slider = $slider->id;
|
||||||
|
$content->module_settings = json_encode($content->module_settings);
|
||||||
|
$content->save();
|
||||||
|
|
||||||
|
return redirect()
|
||||||
|
->route('content.edit', ['id' => $id])
|
||||||
|
->with('success', trans('gallery::admin/content.sliderCreated'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
Route::group([
|
||||||
|
'middleware' => ['web', 'auth', 'adminMenu'],
|
||||||
|
'namespace' => 'Modules\Gallery\Http\Controllers\Admin',
|
||||||
|
'prefix' => 'admin/gallery'
|
||||||
|
], function () {
|
||||||
|
|
||||||
|
// method for creating slider from photogallery
|
||||||
|
Route::get('makeSlider/{id}', 'CreateOrbitSlider@createNew')
|
||||||
|
->name('gallery.makeSlider');
|
||||||
|
});
|
||||||
@@ -1,5 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
return [
|
return [
|
||||||
'upload' => 'Upload photos',
|
'upload' => 'Upload photos',
|
||||||
'uploadAfterSavingGallery' => 'Uploading for this gallery is not available yet. You must create the gallery first and upload later.'
|
'uploadAfterSavingGallery' => 'Uploading for this gallery is not available yet. You must create the gallery first and upload later.',
|
||||||
|
'makeSlider' => 'Make slider from this photogallery',
|
||||||
|
'orbitSliderMissing' => 'Cannot create slider. Widget for slider is not installed.',
|
||||||
|
'invalidGallery' => 'This content page is not a valid gallery page.',
|
||||||
|
'sliderFailed' => 'Slider could not be created. Reason: :message',
|
||||||
|
'sliderCreated' => 'Slider successfully created.',
|
||||||
|
'sliderEdit' => 'Slider settings',
|
||||||
];
|
];
|
||||||
@@ -1,3 +1,12 @@
|
|||||||
<div class="row column">
|
<div class="row column">
|
||||||
<a href="{{route('upload.overview', ['id' => $page->module_settings->directoryId])}}" class="button large expanded success">@lang('gallery::admin/content.upload')</a>
|
<a href="{{route('upload.overview', ['id' => $page->module_settings->directoryId])}}" class="button large expanded success">@lang('gallery::admin/content.upload')</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row column text-center">
|
||||||
|
@if (!$extraData['slider'])
|
||||||
|
<a href="{{route('gallery.makeSlider', ['id' => $page->id])}}" class="button primary">@lang('gallery::admin/content.makeSlider')</a>
|
||||||
|
@else
|
||||||
|
<a href="{{route('widgets.edit', ['id' => $extraData['slider']])}}" class="button secondary">@lang('gallery::admin/content.sliderEdit')</a>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
<div class="clearfix"></div>
|
||||||
@@ -96,4 +96,16 @@ class StaticPage extends Handler
|
|||||||
{
|
{
|
||||||
// nothing to do
|
// nothing to do
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load some extra data for content management form?
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function loadExtraData(Content $content)
|
||||||
|
{
|
||||||
|
// nothing to do
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,43 +1,48 @@
|
|||||||
<div class="orbit {{$settings->sliderClass}}" role="region" data-orbit>
|
@if (!empty($images))
|
||||||
<ul class="orbit-container">
|
<div class="orbit {{$settings->sliderClass}}" role="region" data-orbit>
|
||||||
<button class="orbit-previous" aria-label="previous">
|
<ul class="orbit-container">
|
||||||
<span class="show-for-sr">Previous Slide</span>
|
<p class="orbit-previous" aria-label="previous">
|
||||||
<i class="fa fa-fw fa-2x fa-chevron-left"></i>
|
<span class="show-for-sr">Previous Slide</span>
|
||||||
</button>
|
<i class="fa fa-fw fa-2x fa-chevron-left"></i>
|
||||||
<button class="orbit-next" aria-label="next">
|
</p>
|
||||||
<span class="show-for-sr">Next Slide</span>
|
<p class="orbit-next" aria-label="next">
|
||||||
<i class="fa fa-fw fa-2x fa-chevron-right"></i>
|
<span class="show-for-sr">Next Slide</span>
|
||||||
</button>
|
<i class="fa fa-fw fa-2x fa-chevron-right"></i>
|
||||||
|
</p>
|
||||||
|
|
||||||
@if ($settings->imagePerSlide == 'fullscreen')
|
@if ($settings->imagePerSlide == 'fullscreen')
|
||||||
@foreach($images as $i => $image)
|
@foreach($images as $i => $image)
|
||||||
<li class="orbit-slide {{$settings->slideContainerClass}} @if($i == 0)is-active @endif">
|
<li class="orbit-slide {{$settings->slideContainerClass}} @if($i == 0)is-active @endif">
|
||||||
<h2>{{$image->name}}</h2>
|
<h2>{{$image->name}}</h2>
|
||||||
<h3>{{$image->description}}</h3>
|
<h3>{{$image->description}}</h3>
|
||||||
<div class="img"
|
<div class="img"
|
||||||
style="background-image: url({{config('app.upload_url')}}/{{$image->filename}})"></div>
|
style="background-image: url({{config('app.upload_url')}}/{{$image->filename}})"></div>
|
||||||
</li>
|
</li>
|
||||||
@endforeach
|
@endforeach
|
||||||
@else
|
@else
|
||||||
@for($i = 0; $i < $slidesCount; $i++)
|
@for($i = 0; $i < $slidesCount; $i++)
|
||||||
<li class="orbit-slide row {{$settings->slideContainerClass}} @if($i == 0)is-active @endif">
|
<li class="orbit-slide row {{$settings->slideContainerClass}} @if($i == 0)is-active @endif">
|
||||||
@for ($j = 0; $j < $settings->imagePerSlide; $j++)
|
@for ($j = 0; $j < $settings->imagePerSlide; $j++)
|
||||||
<div class="column medium-{{$gridNumber}}">
|
@if (!isset($images[$i*$settings->imagePerSlide + $j]))
|
||||||
<img src="{{config('app.upload_url')}}/{{$images[$j]->filename}}" />
|
@break
|
||||||
</div>
|
@endif
|
||||||
@endfor
|
<div class="column medium-{{$gridNumber}}">
|
||||||
</li>
|
<img src="{{config('app.upload_url')}}/{{$images[$i*$settings->imagePerSlide + $j]->filename}}" />
|
||||||
@endfor
|
</div>
|
||||||
|
@endfor
|
||||||
|
</li>
|
||||||
|
@endfor
|
||||||
|
@endif
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
@if ($settings->displayBullets)
|
||||||
|
<nav class="orbit-bullets">
|
||||||
|
@for($i = 0; $i < $slidesCount; $i++)
|
||||||
|
<button @if($i == 0) class="is-active" @endif data-slide="{{$i}}"></button>
|
||||||
|
@endfor
|
||||||
|
</nav>
|
||||||
@endif
|
@endif
|
||||||
</ul>
|
|
||||||
|
|
||||||
@if ($settings->displayBullets)
|
{!! $settings->code !!}
|
||||||
<nav class="orbit-bullets">
|
</div>
|
||||||
@for($i = 0; $i < $slidesCount; $i++)
|
@endif
|
||||||
<button @if($i == 0) class="is-active" @endif data-slide="{{$i}}"></button>
|
|
||||||
@endfor
|
|
||||||
</nav>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
{!! $settings->code !!}
|
|
||||||
</div>
|
|
||||||
Reference in New Issue
Block a user