123 lines
3.3 KiB
PHP
123 lines
3.3 KiB
PHP
<?php
|
|
namespace App\Widgets\OrbitSlider\Presenters;
|
|
|
|
use App\Models\File;
|
|
use App\Models\Widget;
|
|
use App\Models\WidgetType;
|
|
use App\Widgets\Contracts\WidgetRenderer;
|
|
|
|
class OrbitSlider implements WidgetRenderer
|
|
{
|
|
/**
|
|
* Method for populating settings array with default values
|
|
*
|
|
* @param $settings
|
|
*/
|
|
protected static function prepareSettings(&$settings)
|
|
{
|
|
if (!isset($settings->slideContainerClass)) {
|
|
$settings->slideContainerClass = '';
|
|
}
|
|
|
|
if (!isset($settings->imagesPerSlide)) {
|
|
$settings->imagesPerSlide = 4;
|
|
}
|
|
|
|
if (!isset($settings->directoryId)) {
|
|
$settings->directoryId = false;
|
|
}
|
|
if (!isset($settings->sliderClass)) {
|
|
$settings->sliderClass = '';
|
|
}
|
|
if (!isset($settings->code)) {
|
|
$settings->code = '';
|
|
}
|
|
}
|
|
|
|
protected static function getAvailableColumns()
|
|
{
|
|
return [
|
|
'fullscreen' => trans('widgets/orbitSlider.fullscreen'),
|
|
1 => '1',
|
|
2 => '2',
|
|
3 => '3',
|
|
4 => '4',
|
|
6 => '6',
|
|
12 => '12',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Method used for displaying widget.
|
|
*
|
|
* This method renders some HTML code for displaying.
|
|
*
|
|
* @param object $settings
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function render($settings)
|
|
{
|
|
$directoryId = $settings->directoryId;
|
|
|
|
$images = File::where('directory_id', $directoryId)
|
|
->where('mime_type', 'LIKE', 'image%')
|
|
->get();
|
|
|
|
// add some non-existing values
|
|
self::prepareSettings($settings);
|
|
|
|
$slidesCount = ($settings->imagePerSlide == 'fullscreen') ? count($images) : ceil(count($images) / $settings->imagePerSlide);
|
|
$htmlGridNumber = ($settings->imagePerSlide == 'fullscreen') ? false : 12 / $settings->imagePerSlide;
|
|
|
|
return view('widgets.orbitSlider.element', [
|
|
'images' => $images,
|
|
'settings' => $settings,
|
|
'slidesCount' => $slidesCount,
|
|
'gridNumber' => $htmlGridNumber
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Display form for creating new instance of widget
|
|
*
|
|
* @param WidgetType $type
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function renderAddForm(WidgetType $type)
|
|
{
|
|
$widget = new Widget();
|
|
|
|
// create default object with settings
|
|
$settings = new \stdClass();
|
|
self::prepareSettings($settings);
|
|
|
|
return view('admin.widgets.orbitSlider.new', [
|
|
'type' => $type,
|
|
'widget' => $widget,
|
|
'availableColumns' => self::getAvailableColumns()
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Display form for editing already existing widget
|
|
*
|
|
* @param Widget $widget
|
|
*
|
|
* @return mixed
|
|
*/
|
|
public static function renderEditForm(Widget $widget)
|
|
{
|
|
$settings = json_decode($widget->settings);
|
|
|
|
// create default object with settings
|
|
self::prepareSettings($settings);
|
|
|
|
return view('admin.widgets.orbitSlider.edit', [
|
|
'widget' => $widget,
|
|
'settings' => $settings,
|
|
'availableColumns' => self::getAvailableColumns()
|
|
]);
|
|
}
|
|
} |