Merge branch 'refactoring' into elixir

This commit is contained in:
Michal Kváček
2017-02-09 23:42:23 +01:00
112 changed files with 856 additions and 1223 deletions
@@ -9,11 +9,11 @@ interface AdvancedContentModifier {
* Save module-specific values into database
*
* @param Content $content
* @param Request $request
* @param array $inputData
*
* @return mixed
*/
public static function createNew(Content &$content, Request $request);
public static function createNew(Content &$content, array $inputData);
/**
* Method used for editing existing content page.
@@ -2,6 +2,7 @@
namespace App\CMS\Contracts\Repositories;
use App\Models\Module as ModuleModel;
use App\Models\Templates\Template as TemplateModel;
interface Template
{
@@ -12,6 +13,8 @@ interface Template
const CUSTOM_EDIT_DIRECTORY = 1;
const ORIGINAL_DIRECTORY = 2;
public function setModel(TemplateModel $model);
public function getPathToTemplate();
public function getForModule(ModuleModel $module);
-6
View File
@@ -1,6 +0,0 @@
<?php
namespace App\CMS\CustomFields;
class BaseField {
}
-6
View File
@@ -1,6 +0,0 @@
<?php
namespace App\CMS\CustomFields;
class Date extends BaseField {
}
-6
View File
@@ -1,6 +0,0 @@
<?php
namespace App\CMS\CustomFields;
class Number extends BaseField {
}
-6
View File
@@ -1,6 +0,0 @@
<?php
namespace App\CMS\CustomFields;
class SelectboxList extends BaseField {
}
-6
View File
@@ -1,6 +0,0 @@
<?php
namespace App\CMS\CustomFields;
class String extends BaseField {
}
@@ -1,20 +0,0 @@
<?php
namespace App\CMS\Enumerations;
use App\Models\CustomFieldResource;
class CustomFieldResources extends BaseEnumeration
{
public static $items = [];
public static function init()
{
// load items from database
$types = CustomFieldResource::all(['id', 'name']);
// push items into collection
foreach ($types as $type) {
self::push($type->id, $type->name);
}
}
}
-21
View File
@@ -1,21 +0,0 @@
<?php
namespace App\CMS\Enumerations;
use App\Models\CustomFieldType;
class CustomFieldTypes extends BaseEnumeration
{
public static $items = [];
public static function init()
{
// load items from database
$types = CustomFieldType::all(['id', 'name']);
// push items into collection
foreach ($types as $type) {
self::push($type->id, $type->name);
}
}
}
@@ -0,0 +1,6 @@
<?php
namespace App\CMS\Exceptions\FileManager;
class SubdirectoryExistsInDirectory extends \Exception
{
}
-8
View File
@@ -34,7 +34,6 @@ abstract class BaseHandler implements BaseModuleHandler
* Submenus can be registered later
*/
$menu->dropdown(trans('admin/mainMenu.contentPages'), function ($sub) {
$sub->addDivider(9999);
$sub->route('content.overview', trans('admin/mainMenu.contentPageOverview'), [], 10000, ['icon' => 'fa fa-fw fa-list']);
}, 20, ['icon' => 'fa fa-fw fa-database']);
@@ -96,18 +95,11 @@ abstract class BaseHandler implements BaseModuleHandler
}, 60, ['icon' => 'fa fa-fw fa-file-code-o']);
}
// $menu->dropdown(trans('admin/mainMenu.customFields'), function ($sub) {
// $sub->route('customfields.new', trans('admin/mainMenu.customFieldsNew'), [], 10, ['icon' => 'fa fa-fw fa-code']);
// $sub->route('customfields.overview', trans('admin/mainMenu.customFieldsOverview'), [], 50, ['icon' => 'fa fa-fw fa-code-fork']);
// }, 30, ['icon' => 'fa fa-fw fa-code']);
$sub->route('log.overview', trans('admin/mainMenu.actionLog'), [], 70, ['icon' => 'fa fa-fw fa-history']);
$sub->route('settings.overview', trans('admin/mainMenu.settings'), [], 80, ['icon' => 'fa fa-fw fa-gear']);
}, 10000, ['icon' => 'fa fa-fw fa-gears']);
});
// order
// create menu with user profile
\Menu::create('profileMenu', function ($menu) {
$menu->route('users.detail', trans('admin/userManagement.profile'), [], 10, ['icon' => 'fa fa-fw fa-user icon']);
+1 -1
View File
@@ -24,7 +24,7 @@ class Interaction
* @var $interaction InteractionContract
*/
$interaction = App::make($interactionClass);
$interaction = app($interactionClass);
// validate interaction
$validator = Validator::make($data, $interaction->getValidationRules($extraParameters));
@@ -1,9 +1,10 @@
<?php
namespace App\CMS\Handlers\Registrators;
use App\CMS\Contracts\Repositories\Template;
use App\CMS\Enumerations\TemplatePaths;
use App\CMS\Enumerations\Templates;
use App\CMS\Contracts\Repositories\Template;
use App\Models\Templates\Template as TemplateModel;
use App\Models\Templates\TemplatePath;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
@@ -134,7 +135,10 @@ class TemplateRegistrator
*/
protected function relativePath($directory)
{
return trim(str_replace(base_path(), '', $directory), '/');
$directory = str_replace('/', DIRECTORY_SEPARATOR, $directory);
$directory = str_replace('\\', DIRECTORY_SEPARATOR, $directory);
return trim(str_replace(base_path(), '', $directory), '\\/');
}
/**
@@ -145,6 +149,10 @@ class TemplateRegistrator
*/
protected function scanForSubdirectories($directory, $name)
{
if (!is_dir($directory)) {
return;
}
$directories = File::directories($directory);
foreach ($directories as $dir) {
@@ -222,7 +230,7 @@ class TemplateRegistrator
];
// save template into database
$newTemplate = Template::create($params);
$newTemplate = TemplateModel::create($params);
// push template into enumeration - so it will not be registered again
Templates::push($newTemplate->id, $templateName);
@@ -295,12 +303,17 @@ class TemplateRegistrator
*
* @return string
*/
private function getTemplateName($template)
protected function getTemplateName($template)
{
$templateName = str_replace($this->registeredPath . DIRECTORY_SEPARATOR, '', $template);
$templateName = $template;
$templateName = str_replace($this->registeredPath, '', $templateName);
$templateName = str_replace('\\', DIRECTORY_SEPARATOR, $templateName);
$templateName = str_replace('/', DIRECTORY_SEPARATOR, $templateName);
$templateName = str_replace(DIRECTORY_SEPARATOR, '.', $templateName);
$templateName = str_replace(Template::TEMPLATE_SUFFIX, '', $templateName);
$templateName = preg_replace('/\.{2,}/', '.', $templateName);
return $this->namespace . $templateName;
return $this->namespace . trim($templateName, '.');
}
}
@@ -8,7 +8,6 @@ class WidgetRegistrator
{
protected $registeredWidgets = [];
/**
* Method used for registering new widgets
*
@@ -51,7 +50,9 @@ class WidgetRegistrator
]);
// install widget (if neccessary)
call_user_func($classname . '::install');
if (is_callable([$classname, 'install'])) {
call_user_func($classname . '::install');
}
}
}
}
+1 -1
View File
@@ -28,7 +28,7 @@ class CurrentTemplate implements TemplateHandler
throw new \ErrorException('DB not migrated, please, do so!');
}
if (self::$template) {
self::$template->moduleSettings = json_decode(self::$template->moduleSettings);
self::$template->module_settings = json_decode(self::$template->module_settings);
}
self::$initialized = true;
+1 -1
View File
@@ -98,7 +98,7 @@ class FileManager
return $string;
break;
case 'application':
return '<iframe src = "'.asset('resources/assets/admin/js/viewerJs/').'/#'.Template::upload($file->filename).'" style="width: 100%; height: 50em" allowfullscreen webkitallowfullscreen></iframe>';
return '<iframe src = "'.asset('resources/assets/admin/js/viewerJs/').'/#'.Path::upload($file->filename).'" style="width: 100%; height: 50em" allowfullscreen webkitallowfullscreen></iframe>';
break;
default:
return self::getPreview($file);
+49
View File
@@ -0,0 +1,49 @@
<?php
namespace App\CMS\Helpers;
use App\Models\FileManager\Directory;
use App\Models\FileManager\File;
class RootDirectory
{
protected static $directory;
/**
* Create root directory
*
* @return Directory
*/
protected static function create()
{
$directory = new Directory();
$directory->name = 'Root';
$directory->is_root = true;
$directory->save();
Directory::whereNull('parent_id')
->where('is_root', false)
->update(['parent_id' => $directory->id]);
File::where('directory_id', null)
->update(['directory_id' => $directory->id]);
return $directory;
}
/**
* Get root directory
*
* @return Directory
*/
public static function get()
{
self::$directory = Directory::where('is_root', true)
->first();
if (is_null(self::$directory)) {
self::$directory = self::create();
}
return self::$directory;
}
}
+1 -1
View File
@@ -7,7 +7,7 @@ class Widget
{
$handler = $widget->widget_type_handler;
if (!is_object($widget->settings)) {
if (is_string($widget->settings)) {
$widget->settings = json_decode($widget->settings);
}
@@ -85,7 +85,6 @@ class EditContent implements Interaction
'url' => 'required|unique:contents,url,' . $id.',id,deleted_at,NULL,language,' . LaravelLocalization::getCurrentLocale(),
'publishedFrom' => 'date',
'publishedTo' => 'date',
'titlePhoto' => 'exists:files,id',
'status' => 'required|in:' . $statuses,
'parentPage' => 'exists:contents,id'
];
@@ -0,0 +1,65 @@
<?php
namespace App\CMS\Interactions\Admin\FileManager;
use App\CMS\Contracts\Interaction;
use App\CMS\Exceptions\FileManager\SubdirectoryExistsInDirectory;
use App\CMS\Repositories\FileManager\Directory as DirectoryRepository;
use App\Models\FileManager\Directory;
class CreateDirectory implements Interaction
{
/**
* @var DirectoryRepository
*/
private $repository;
public function __construct(DirectoryRepository $repository)
{
$this->repository = $repository;
}
/**
* Perform given action
*
* @param $data array input data
* @param $parameters array parameters
*
* @return Directory
* @throws SubdirectoryExistsInDirectory
*/
public function handle($data, $parameters)
{
$data['parentDirectory'] = isset($data['parentDirectory']) ? $data['parentDirectory'] : null;
// todo this should probably go into validation, but we are not able to get $data in getValidationRules
// check if created folder does not exist in current directory
if ($this->repository->checkIfNameExists($data['name'], $data['parentDirectory'])) {
throw new SubdirectoryExistsInDirectory();
}
// todo use Directory::create() and rename columns/fields in request
// create new database entry
$directory = new Directory();
$directory->name = $data['name'];
$directory->parent_id = $data['parentDirectory'];
$directory->user_id = \Auth::user()->id;
$directory->description = $data['description'];
$directory->save();
return $directory;
}
/**
* @param $data array input data
*
* @return array
* @throws SubdirectoryExistsInDirectory
*/
public function getValidationRules($data = [])
{
return [
'name' => 'required|max:255',
'parentDirectory' => 'exists:directories,id'
];
}
}
@@ -77,6 +77,6 @@ class FoundationDrilldownMenuPresenter extends Presenter
<ul class="vertical menu">
' . $this->getChildMenuItems($item) . '
</ul>
</li>' . PHP_EOL;;
</li>' . PHP_EOL;
}
}
@@ -56,6 +56,6 @@ class FoundationDropdownMenuPresenter extends Presenter
<ul class="vertical menu">
' . $this->getChildMenuItems($item) . '
</ul>
</li>' . PHP_EOL;;
</li>' . PHP_EOL;
}
}
+4 -1
View File
@@ -42,6 +42,9 @@ class Content
$normalFieldsEdited = 0;
foreach ($fields as $field => $change) {
if ($field == 'viewed')
continue;
$history = [
'user_id' => \Auth::user()->id,
'content_id' => $content->id,
@@ -104,7 +107,7 @@ class Content
}
$moduleSettings = (array)json_decode($changed['moduleSettings']);
$originalSettings = (array)json_decode($original['moduleSettings']);
$originalSettings = isset($original['moduleSettings']) ? (array)json_decode($original['moduleSettings']) : [];
unset($changed['moduleSettings']);
$settingChanged = array_keys(array_diff_assoc($moduleSettings, $originalSettings));
@@ -1,10 +1,33 @@
<?php
namespace App\Models\ActionLog\ModelTraits;
namespace App\Cms\Repositories\ActionLog;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
trait ActionLog
class Actions
{
/**
* @param null $userId
*
* @return array
*/
public function getLoggedActions($userId = null)
{
$actions = $this->getLogActionsQuery(true);
$user = null;
if ($userId) {
$user = User::findOrFail($userId);
$actions->where('users.id', $userId);
}
$actions = $actions->paginate(25);
$this->translateLogMessages($actions);
return [$user, $actions];
}
/**
* Query factory for loading action logs with their type (therefore with name and value)
*
@@ -58,8 +81,6 @@ trait ActionLog
* Method used for translating and filling parameters into value of log.
*
* @param $messages
*
* @return array
*/
public function translateLogMessages(&$messages)
{
@@ -0,0 +1,54 @@
<?php
namespace App\CMS\Repositories\FileManager;
use App\CMS\Helpers\RootDirectory;
use App\Models\FileManager\Directory as DirectoryModel;
class Directory
{
/**
* Checks if directory with given name does not exist in current directory
*
* @param $name
* @param $parentDirectoryId
* @param bool $ignoredId
*/
public function checkIfNameExists($name, $parentDirectoryId, $ignoredId = false)
{
$exists = DirectoryModel::where('name', $name)
->where('parent_id', $parentDirectoryId);
if ($ignoredId !== false) {
$exists = $exists->where('id', '!=', $ignoredId);
}
return $exists->exists();
}
public function update(DirectoryModel $directory, $data) {
$directory->name = $data['name'];
$directory->description = $data['description'];
$directory->save();
}
/**
* @param DirectoryModel $directory
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function getAllSubdirectories(DirectoryModel &$directory)
{
if (!$directory->exists) {
$directory = DirectoryModel::where('is_root', true)
->first();
if (is_null($directory)) {
$directory = RootDirectory::get();
}
}
$subdirectories = $directory->allSubdirectories();
return $subdirectories;
}
}
+7 -6
View File
@@ -8,7 +8,7 @@ use App\Models\Templates\Template as TemplateModel;
class Template extends Repository implements ITemplate
{
public function __construct(TemplateModel $model)
public function setModel(TemplateModel $model)
{
$this->model = $model;
}
@@ -23,7 +23,7 @@ class Template extends Repository implements ITemplate
public function getPathToTemplate($mode = null)
{
$templateName = $this->model->template_name;
$path = $this->model->path()->get();
$path = $this->model->templatePath;
// delete namespace if given
if (strpos($this->model->template_name, '::')) {
@@ -66,9 +66,10 @@ class Template extends Repository implements ITemplate
}
}
public function getForModule(Module $module) {
return Template::where('module_id', $module->id)
->select(['template_name', 'name', 'description'])
->get();
public function getForModule(Module $module)
{
return TemplateModel::where('module_id', $module->id)
->select(['template_name', 'name', 'description'])
->get();
}
}
@@ -52,7 +52,7 @@ class HtmlCode implements WidgetRenderer
*/
public static function renderEditForm(Widget $widget)
{
$settings = json_decode($widget->settings);
$settings = $widget->settings;
return view('admin.widgets.htmlCode.edit', ['widget' => $widget, 'settings' => $settings]);
}
}
}
+3 -2
View File
@@ -7,6 +7,7 @@ use App\CMS\Widgets\Exceptions\MissingParameterException;
use App\Http\Requests\Request;
use App\Models\Content\Content;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
use App\CMS\Contracts\Repositories\Content as IContent;
class Menu implements PublicWidget
{
@@ -66,10 +67,10 @@ class Menu implements PublicWidget
public static function selectContentPages($ids)
{
$allowedStatuses = [Content::STATUS_PUBLIC];
$allowedStatuses = [IContent::STATUS_PUBLIC];
if (\Auth::user()) {
$allowedStatuses[] = Content::STATUS_PROTECTED;
$allowedStatuses[] = IContent::STATUS_PROTECTED;
}
$pages = Content::where('language', LaravelLocalization::getCurrentLocale())
+8 -13
View File
@@ -4,9 +4,9 @@ namespace App\CMS\Widgets\Menu\Presenters;
use App\CMS\Contracts\Repositories\Content as ContentContract;
use App\CMS\Contracts\Widgets\WidgetRenderer;
use App\CMS\Widgets\Menu\Menu as WidgetMenu;
use App\Models\Content\Content;
use App\Models\Widgets\Widget;
use App\Models\Widgets\WidgetType;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Route;
@@ -79,24 +79,19 @@ class Menu implements WidgetRenderer
*/
public static function renderAddForm(WidgetType $type)
{
$extensions = App::make('registerMenuExtension')
->get();
$widget = new Widget();
$content = new Content();
$content = app(ContentContract::class);
// get list of all pages
$pages = $content->getOverview()
->get();
$pages = $content->getOverview();
$widget->settings = new \stdClass();
$widget->settings->links = [];
$widget->settingsObj = new \stdClass();
$widget->settingsObj->links = new \stdClass();
return view('admin.widgets.menu.new', [
'type' => $type,
'widget' => $widget,
'pages' => $pages,
'extensions' => $extensions
'type' => $type,
'widget' => $widget,
'pages' => $pages,
]);
}
@@ -0,0 +1,57 @@
<?php
namespace App\CMS\Widgets\SocialButtons\Presenters;
use App\Models\Widgets\Widget;
use App\Models\Widgets\WidgetType;
use App\Models\Settings as SettingsModel;
use App\CMS\Contracts\Widgets\WidgetRenderer;
use App\CMS\Widgets\SocialButtons\Presenters\Route;
use Illuminate\Http\Request;
use Modules\Blog\Article\Entities\Article as ArticleModel;
use Modules\Blog\Article\Handlers\Article;
class SocialButtons implements WidgetRenderer
{
/**
* Method used for displaying widget.
*
* This method renders some HTML code for displaying.
*
* @param Widget $widget
*
* @return mixed
*/
public static function render(Widget $widget)
{
return view('visitor.widgets.shareButtons.all', compact('widget'));
}
/**
* Display form for creating new instance of widget
*
* @param WidgetType $type
*
* @return mixed
*/
public static function renderAddForm(WidgetType $type)
{
return view('admin.widgets.socialButtons.new', [
'type' => $type,
'widget' => new Widget(),
'settings' => new \stdClass()
]);
}
/**
* Display form for editing already existing widget
*
* @param Widget $widget
*
* @return mixed
*/
public static function renderEditForm(Widget $widget)
{
$settings = $widget->settings;
return view('admin.widgets.socialButtons.edit', ['widget' => $widget, 'settings' => $settings]);
}
}
@@ -0,0 +1,55 @@
<?php
namespace App\CMS\Widgets\SocialButtons;
use App\CMS\Contracts\Widgets\PublicWidget;
use App\CMS\Widgets\Exceptions\MissingParameterException;
use App\Http\Requests\Request;
use App\Models\Widgets\Widget;
class SocialButtons implements PublicWidget
{
/**
* Name getter
*
* @return string
*/
public static function getName()
{
return 'widgets/socialButtons.widgetName';
}
/**
* Getter for description
*
* @return string
*/
public static function getDescription()
{
return 'widgets/socialButtons.widgetDescription';
}
/**
* Getter for presenter/renderer of this widget
*
* @return WidgetRenderer
*/
public static function getPresenter()
{
return Presenters\SocialButtons::class;
}
/**
* @param Request $data
*
* @return array
* @throws MissingParameterException
*/
public static function save(Request $data)
{
//if (!isset($data->code) || empty($data->code)) {
// throw new MissingParameterException('code');
//}
return [];
}
}
-2
View File
@@ -32,8 +32,6 @@ class AddLanguage extends Command
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
-2
View File
@@ -24,8 +24,6 @@ class ChangePassword extends Command
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
+2 -2
View File
@@ -93,7 +93,7 @@ class InstallModule extends Command
}
// we cannot rely on config() helper, because this module does not have to be published
$config = @include($path);
$config = include($path);
return $config;
}
@@ -146,7 +146,7 @@ class InstallModule extends Command
throw new \Exception('Module ' . $config['name'] . ' already exists in database.');
}
if (!$module) {
if (is_null($module)) {
// insert module into database
$settings = [
'staticName' => $this->moduleName,
+1 -1
View File
@@ -3,7 +3,7 @@
namespace App\Events;
use App\Models\Widgets\Widget;
use App\Models\WidgetArea;
use App\Models\Widgets\WidgetArea;
use Illuminate\Queue\SerializesModels;
class AssignWidget extends Event
-27
View File
@@ -1,27 +0,0 @@
<?php
namespace App\Events;
use App\Events\Event;
use App\Models\CustomField;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class CreateNewCustomField extends Event
{
use SerializesModels;
/**
* @var CustomField
*/
public $customField;
/**
* Create a new event instance.
*
* @param CustomField $customField
*/
public function __construct(CustomField $customField)
{
$this->customField = $customField;
}
}
+1 -1
View File
@@ -2,7 +2,7 @@
namespace App\Events;
use App\Models\WidgetArea;
use App\Models\Widgets\WidgetArea;
use Illuminate\Queue\SerializesModels;
class CreateNewWidgetArea extends Event
-27
View File
@@ -1,27 +0,0 @@
<?php
namespace App\Events;
use App\Events\Event;
use App\Models\CustomField;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class DeleteCustomField extends Event
{
use SerializesModels;
/**
* @var CustomField
*/
public $customField;
/**
* Create a new event instance.
*
* @param CustomField $customField
*/
public function __construct(CustomField $customField)
{
$this->customField = $customField;
}
}
-27
View File
@@ -1,27 +0,0 @@
<?php
namespace App\Events;
use App\Events\Event;
use App\Models\CustomField;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class EditCustomField extends Event
{
use SerializesModels;
/**
* @var CustomField
*/
public $customField;
/**
* Create a new event instance.
*
* @param CustomField $customField
*/
public function __construct(CustomField $customField)
{
$this->customField = $customField;
}
}
+1 -1
View File
@@ -3,7 +3,7 @@
namespace App\Events;
use App\Models\Widgets\Widget;
use App\Models\WidgetArea;
use App\Models\Widgets\WidgetArea;
use Illuminate\Queue\SerializesModels;
class RemoveWidgetFromArea extends Event
@@ -2,49 +2,22 @@
namespace App\Http\Controllers\Admin\ActionLog;
use App\Cms\Repositories\ActionLog\Actions;
use App\Http\Controllers\Admin\Controller;
use App\Models\ActionLog\ActionLog;
use App\Models\User;
use Illuminate\Support\Facades\Input;
class Overview extends Controller
{
/**
* @var ActionLog
*/
private $log;
/**
* ActionLog constructor.
*
* @param ActionLog $log
*/
public function __construct(ActionLog $log)
{
parent::__construct();
$this->log = $log;
}
/**
* Get overview of logged actions
*
* @param Actions $repository
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function getOverview()
public function index(Actions $repository)
{
$user = null;
$userId = Input::get('userId');
$actions = $this->log->getLogActionsQuery(true);
if ($userId) {
$user = User::findOrFail($userId);
$actions->where('users.id', $userId);
}
$actions = $actions->paginate(25);
$this->log->translateLogMessages($actions);
list($user, $actions) = $repository->getLoggedActions(Input::get('userId'));
return view('admin.actionLog.overview', ['actions' => $actions, 'user' => $user]);
}
@@ -1,72 +0,0 @@
<?php
namespace App\Http\Controllers\Admin\CustomFields;
use App\CMS\Enumerations\CustomFieldResources;
use App\CMS\Enumerations\CustomFieldTypes;
use App\Events\CreateNewCustomField as CreateNewCustomFieldEvent;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\NewCustomFieldRequest;
use App\Models\CustomField;
use Illuminate\Support\Facades\Event;
class CreateNewCustomField extends Controller
{
public function getNew()
{
$types = CustomFieldTypes::getWithTranslations();
$resources = CustomFieldResources::getWithTranslations();
return view('admin.customFields.new', [
'types' => $types,
'resources' => $resources
]);
}
public function postNew(NewCustomFieldRequest $request)
{
$customField = new CustomField();
// set mandatory fields
$customField->name = $request->name;
$customField->type_id = $request->type;
$customField->resource_id = $request->resource;
$customField->required = $request->has('required');
// set non-mandatory fields
if ($request->description) {
$customField->description = $request->description;
}
if ($request->possibleValues) {
$customField->possible_values = trim(preg_replace('~[\r\n]+~', '|', $request->possibleValues));
}
if ($request->defaultValue) {
$customField->default_value = $request->defaultValue;
}
if ($request->regExp) {
$customField->regexp = $request->regExp;
}
if ($request->minLength) {
$customField->min_length = $request->minLength;
}
if ($request->maxLength) {
$customField->max_length = $request->maxLength;
}
$customField->save();
// fire event about creating new custom field
Event::fire(new CreateNewCustomFieldEvent($customField));
return redirect()
->route('customfields.new')
->with('success', trans('admin/customFields.successfullyCreated'));
}
}
@@ -1,24 +0,0 @@
<?php
namespace App\Http\Controllers\Admin\CustomFields;
use App\CMS\Enumerations\CustomFieldResources;
use App\CMS\Enumerations\CustomFieldTypes;
use App\Http\Controllers\Admin\Controller;
use App\Models\CustomField;
class CustomFieldsOverview extends Controller
{
public function getOverview()
{
$model = new CustomField();
$fields = $model->getIndexedByResource();
return view('admin.customFields.overview', [
'customFields' => $fields,
'usedResources' => array_keys($fields),
'resources' => CustomFieldResources::getWithTranslations(),
'types' => CustomFieldTypes::getWithTranslations()
]);
}
}
@@ -1,105 +0,0 @@
<?php
namespace App\Http\Controllers\Admin\CustomFields;
use App\CMS\Enumerations\CustomFieldResources;
use App\CMS\Enumerations\CustomFieldTypes;
use App\Events\DeleteCustomField;
use App\Events\EditCustomField as EditCustomFieldEvent;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\EditCustomFieldRequest;
use App\Models\CustomField;
use Illuminate\Support\Facades\Event;
class EditCustomField extends Controller
{
public function getEditCustomField($id)
{
$field = CustomField::findOrFail($id);
return view('admin.customFields.edit', [
'field' => $field,
'types' => CustomFieldTypes::getWithTranslations(),
'resources' => CustomFieldResources::getWithTranslations()
]);
}
public function postEditCustomField(EditCustomFieldRequest $request, $id)
{
$customField = CustomField::findOrFail($id);
// setup fields
$customField->name = $request->name;
$customField->required = $request->has('required');
// set non-mandatory fields
if ($request->description) {
$customField->description = $request->description;
}
if ($request->possibleValues) {
$customField->possible_values = trim(preg_replace('~[\r\n]+~', '|', $request->possibleValues));
}
if ($request->defaultValue) {
$customField->default_value = $request->defaultValue;
}
if ($request->regExp) {
$customField->regexp = $request->regExp;
}
if ($request->minLength) {
$customField->min_length = $request->minLength;
}
if ($request->maxLength) {
$customField->max_length = $request->maxLength;
}
// save changes into database
$customField->save();
// fire event about editing custom field
Event::fire(new EditCustomFieldEvent($customField));
return redirect()
->route('customfields.edit', ['id' => $id])
->with('success', trans('admin/customFields.successfullyEdited'));
}
/**
* Deletes custom field given by id.
*
* This method deletes given custom field. It is in this method because deleting is somehow editing the item.
*
* @param $id
*
* @return \Illuminate\Http\RedirectResponse
*/
public function deleteCustomField($id)
{
// find and delete field
try {
$field = CustomField::findOrFail($id);
} catch (\Exception $e) {
// field does not exist, redirect to overview and inform user
return redirect()
->route('customfields.overview')
->with('error', trans('admin/customFields.fieldNotExist'));
}
// delete item
$field->delete();
// fire event about editing custom field
Event::fire(new DeleteCustomField($field));
// redirect back to overview
return redirect()
->route('customfields.overview')
->with('success', trans('admin/customFields.successfullyDeleted'));
}
}
@@ -7,7 +7,7 @@ use Illuminate\Http\Request;
class Dashboard extends Controller
{
public function getIndex(Request $request)
public function index(Request $request)
{
return redirect()->route('content.overview');
}
@@ -2,12 +2,31 @@
namespace App\Http\Controllers\Admin\FileManager;
use App\CMS\Exceptions\FileManager\SubdirectoryExistsInDirectory;
use App\Cms\Handlers\Interactions\Interaction;
use App\CMS\Interactions\Admin\FileManager\CreateDirectory;
use App\CMS\Repositories\FileManager\Directory as DirectoryRepository;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests;
use App\Models\FileManager\Directory;
use Illuminate\Http\Request;
class CreateNewDirectory extends Controller
{
/**
* @var DirectoryRepository
*/
private $repository;
/**
* CreateNewDirectory constructor.
*
* @param DirectoryRepository $repository
*/
public function __construct(DirectoryRepository $repository)
{
$this->repository = $repository;
}
/**
* Create new directory
*
@@ -15,48 +34,21 @@ class CreateNewDirectory extends Controller
*
* @return $this|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
*/
public function postNew(Requests\CreateNewDirectoryRequest $request)
public function store(Request $request)
{
// check if created folder does not exist in current directory
$exists = Directory::where('name', $request->name)
->where('parent_id', $request->parentDirectory)
->exists();
if ($exists) {
if ($request->ajax()) {
return response()->json([
'status' => 'failed',
'message' => trans('admin/fileManager.subdirectoryExists')
]);
} else {
return redirect()
->route('upload.overview', ['id' => $request->parentDirectory])
->withInput()
->with('error', trans('admin/fileManager.subdirectoryExists'));
}
// create new directory
try {
Interaction::handle(CreateDirectory::class, $request->all());
} catch (SubdirectoryExistsInDirectory $e) {
return redirect()
->back()
->withInput()
->with('error', trans('admin/fileManager.subdirectoryExists'));
}
// create new database entry
$directory = new Directory();
$directory->name = $request->name;
$directory->parent_id = $request->parentDirectory;
$directory->user_id = \Auth::user()->id;
$directory->description = $request->description;
$directory->save();
$message = trans('admin/fileManager.newDirectorySuccess');
if (!$request->ajax()) {
return redirect()
->route('upload.overview', ['id' => $request->parentDirectory])
->with('success', $message);
} else {
$payload = [
'status' => 'success',
'message' => $message,
'parentDirectory' => $request->parentDirectory
];
return response()->json($payload);
}
return redirect()
->route('upload.overview', ['id' => $request->parentDirectory])
->with('success', $message);
}
}
@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Admin\FileManager;
use App\CMS\Repositories\FileManager\Directory as DirectoryRepository;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests;
use App\Models\FileManager\Directory;
@@ -10,52 +11,27 @@ class EditDirectory extends Controller
{
/**
* @param Requests\EditDirectoryRequest $request
* @param $directoryId
* @param Directory $directory
*
* @return $this|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
* @internal param $directoryId
*
*/
public function postEdit(Requests\EditDirectoryRequest $request, $directoryId)
public function update(Requests\EditDirectoryRequest $request, Directory $directory)
{
$directory = Directory::findOrFail($directoryId);
// check if given name is not used in parent directory
$exists = Directory::where('parent_id', $directory->parent_id)
->where('name', $request->name)
->where('id', '!=', $directoryId)
->exists();
if ($exists) {
if ($request->ajax()) {
return response()->json([
'status' => 'failed',
'message' => trans('admin/fileManager.subdirectoryExists')
]);
} else {
return redirect()
->route('upload.overview', ['id' => $directoryId])
->withInput()
->with('error', trans('admin/fileManager.subdirectoryExists'));
}
$repository = app(DirectoryRepository::class);
if ($repository->checkIfNameExists($request->name, $directory->parent_id, $directory->id)) {
return redirect()
->back()
->withInput()
->with('error', trans('admin/fileManager.subdirectoryExists'));
}
$directory->name = $request->name;
$directory->description = $request->description;
$directory->save();
$repository->update($directory, $request->except('_token'));
$message = trans('admin/fileManager.editDirectorySuccess');
if (!$request->ajax()) {
return redirect()
->route('upload.overview', ['id' => $directory->id])
->with('success', $message);
} else {
$payload = [
'status' => 'success',
'message' => $message
];
return response()->json($payload);
}
return redirect()
->back()
->with('success', $message);
}
}
@@ -2,13 +2,13 @@
namespace App\Http\Controllers\Admin\FileManager;
use App\Events\EditFile;
use App\CMS\Helpers\FileManager;
use App\CMS\Helpers\RootDirectory;
use App\Events\EditFile;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\EditUploadedFileRequest;
use App\Models\FileManager\File;
use Illuminate\Support\Facades\Event;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class EditUploadedFile extends Controller
{
@@ -17,20 +17,18 @@ class EditUploadedFile extends Controller
*
* Render edit form for displaying details and updating given file
*
* @param int $id file id
* @param File $file
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\View\View
* @internal param int $id file id
*
*/
public function getDetail($id)
public function show(File $file)
{
try {
$file = File::findOrFail($id);
} catch (NotFoundHttpException $e) {
return $this->fileNotFound();
}
$root = RootDirectory::get();
return view('admin.fileManager.edit', [
'file' => $file,
'root' => $root,
'extraInfo' => FileManager::getAdditionalInfo($file)
]);
}
@@ -42,22 +40,19 @@ class EditUploadedFile extends Controller
* unchanged
*
* @param EditUploadedFileRequest $request
* @param $id
* @param File $file
*
* @return \Illuminate\Http\RedirectResponse
* @internal param $id
*
*/
public function postEdit(EditUploadedFileRequest $request, $id)
public function update(EditUploadedFileRequest $request, File $file)
{
try {
$file = File::findOrFail($id);
} catch (NotFoundHttpException $e) {
return $this->fileNotFound();
}
// set values from form
$file->name = $request->name;
$file->keywords = $request->keywords;
$file->description = $request->description;
$file->directory_id = $request->directory_id;
$file->save();
// fire action
@@ -65,23 +60,19 @@ class EditUploadedFile extends Controller
// update successfull
return redirect()
->route('upload.detail', ['id' => $id])
->route('upload.detail', ['file' => $file])
->with('success', trans('admin/fileManager.successfullyChanged'));
}
/**
* Deletes file
*
* @param $id
* @param File $file
*
* @return \Illuminate\Http\RedirectResponse
*/
public function deleteFile($id)
public function delete(File $file)
{
try {
$file = File::findOrFail($id);
} catch (NotFoundHttpException $e) {
return $this->fileNotFound();
}
$directoryId = $file->directory_id;
$file->delete();
@@ -89,16 +80,4 @@ class EditUploadedFile extends Controller
->route('upload.overview', ['id' => $directoryId])
->with('success', trans('admin/fileManager.fileDeleted'));
}
/**
* Redirects user to files overview
*
* @return \Illuminate\Http\RedirectResponse
*/
private function fileNotFound()
{
return redirect()
->route('upload.overview')
->with('error', trans('admin/fileManager.fileNotFound'));
}
}
@@ -1,6 +1,7 @@
<?php
namespace App\Http\Controllers\Admin\FileManager;
use App\CMS\Helpers\Path;
use App\CMS\Helpers\Template;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\Request;
@@ -26,9 +27,9 @@ class UploadFile extends Controller
*
* @param Request $request
*
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\View\View
*/
public function postFile(Request $request)
public function store(Request $request)
{
if (Input::get('CKEditor')) {
return $this->ckEditorUpload($request);
@@ -82,7 +83,7 @@ class UploadFile extends Controller
return view('admin.snippets.ckEditorUploaded', [
'ckEditor' => Input::get('CKEditor'),
'funcNumber' => Input::get('CKEditorFuncNum'),
'fileUrl' => Template::upload($uploadedFile['filename'])
'fileUrl' => Path::upload($uploadedFile['filename'])
]);
}
@@ -1,48 +1,53 @@
<?php
namespace App\Http\Controllers\Admin\FileManager;
use App\CMS\Repositories\FileManager\Directory as DirectoryRepository;
use App\Http\Controllers\Admin\Controller;
use App\Models\FileManager\Directory;
use App\Models\FileManager\File;
use Illuminate\Support\Facades\Input;
class UploadedFilesOverview extends Controller
{
/**
* @var DirectoryRepository
*/
private $directoryRepository;
/**
* UploadedFilesOverview constructor.
*
* @param DirectoryRepository $directoryRepository
*/
public function __construct(DirectoryRepository $directoryRepository)
{
$this->directoryRepository = $directoryRepository;
}
/**
* List of all files and directories
*
* @param null $directoryId
* @param null $fileType
* @param null $fileSubtype
* @param Directory $directory
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function getOverview($directoryId = null, $fileType = null, $fileSubtype = null)
public function index(Directory $directory = null)
{
// get directory information
$directory = is_null($directoryId) ? new Directory() : Directory::findOrFail($directoryId);
// get all files in this directory
$files = File::orderBy('updated_at', 'DESC')
->where('directory_id', $directory->id);
// try to filter by given type
if (!is_null($fileType)) {
if (is_null($fileSubtype)) {
$files = $files->where('mime_type', 'LIKE', $fileType . '%');
} else {
$files = $files->where('mime_type', $fileType . '/' . $fileSubtype);
}
}
// include hidden directories?
$includeHidden = Input::get('hidden');
$subdirectories = $this->directoryRepository->getAllSubdirectories($directory);
if (!$includeHidden) {
$subdirectories = $subdirectories->where('hidden', false);
}
$subdirectories = $subdirectories->get();
return view('admin.fileManager.overview', [
'directory' => $directory,
'subdirectories' => $directory->subdirectories($includeHidden),
'files' => $files->get(),
'newDirectory' => new Directory()
'directory' => $directory,
'subdirectories' => $subdirectories,
'newDirectory' => new Directory(),
'parentDirectory' => $directory
]);
}
}
@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Admin\Templates;
use App\CMS\Contracts\Repositories\Template as TemplateRepositoryContract;
use App\Http\Controllers\Controller;
use App\Http\Requests;
use App\Http\Requests\EditTemplateRequest;
@@ -24,17 +25,19 @@ class EditTemplate extends Controller
* @var $template Template
*/
$template = Template::findOrFail($template);
$path = $template->getPath();
$repo = app(TemplateRepositoryContract::class);
$repo->setModel($template);
// load template content
$absolutePath = $template->getPathToTemplate();
$absolutePath = $repo->getPathToTemplate();
$content = @file_get_contents($absolutePath);
return view('admin.templates.edit', [
'template' => $template,
'templateContent' => $content,
'isWritable' => is_writable(dirname($absolutePath)),
'path' => $path,
'path' => $template->templatePath,
]);
}
@@ -4,8 +4,8 @@ namespace App\Http\Controllers\Admin\Users;
use App\CMS\Enumerations\UserRoles;
use App\CMS\Enumerations\UserStates;
use App\Cms\Repositories\ActionLog\Actions;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests;
use App\Models\ActionLog\ActionLog;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
@@ -17,7 +17,7 @@ class UserDetail extends Controller
*/
private $log;
function __construct(ActionLog $log)
function __construct(Actions $log)
{
$this->log = $log;
}
@@ -38,10 +38,10 @@ class UserDetail extends Controller
$states = UserStates::getWithTranslations();
return view('admin.userManagement.detail', [
'user' => $user,
'user' => $user,
'statuses' => $states,
'roles' => $roles,
'actions' => $actions
'roles' => $roles,
'actions' => $actions
]);
}
}
@@ -6,8 +6,8 @@ use App\Events\AssignWidget;
use App\Events\RemoveWidgetFromArea;
use App\Http\Controllers\Admin\Controller;
use App\Models\Widgets\Widget;
use App\Models\WidgetArea;
use App\Models\WidgetInWidgetArea;
use App\Models\Widgets\WidgetArea;
use App\Models\Widgets\WidgetInWidgetArea;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Event;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
@@ -1,10 +1,10 @@
<?php
namespace App\Http\Controllers\Admin\Widgets;
use App\CMS\Widgets\Exceptions\MissingParameterException;
use App\Http\Controllers\Admin\Controller;
use App\Http\Requests\EditWidgetRequest;
use App\Models\Widgets\Widget;
use App\CMS\Widgets\Exceptions\MissingParameterException;
use Illuminate\Support\Facades\Event;
class EditWidget extends Controller
@@ -47,7 +47,7 @@ class EditWidget extends Controller
// try to save this widget
try {
$widget = call_user_func([$widget->widget_type_handler, 'save'], $widget, (object)$request->all());
$widget->settings = json_encode(call_user_func([$widget->widget_type_handler, 'save'], $request));
} catch (MissingParameterException $e) {
// user omitted some value
return $this->invalidWidget($e->getMessage());
@@ -64,7 +64,7 @@ class EditWidget extends Controller
// redirect with success notification
return redirect()
->route('widgets.overview')
->back()
->with('success', trans('admin/widgets.successfullyEdited'));
}
+2
View File
@@ -4,6 +4,7 @@ namespace App\Http;
use App\Http\Middleware\TemplatePathInstaller;
use App\Http\Middleware\WidgetInstaller;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode;
use Illuminate\Routing\Middleware\ThrottleRequests;
@@ -38,6 +39,7 @@ class Kernel extends HttpKernel
protected $middlewareGroups = [
'web' => [
CheckForMaintenanceMode::class,
AddQueuedCookiesToResponse::class,
],
'admin' => [
Middleware\Authenticate::class,
@@ -2,6 +2,8 @@
namespace App\Http\Requests;
use App\CMS\Interactions\Admin\FileManager\CreateDirectory;
class CreateNewDirectoryRequest extends Request
{
/**
@@ -11,9 +13,8 @@ class CreateNewDirectoryRequest extends Request
*/
public function rules()
{
return [
'name' => 'required|max:255',
'parentDirectory' => 'exists:directories,id'
];
$interaction = app(CreateDirectory::class);
return $interaction->getValidationRules();
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Http\Requests;
class EditCustomFieldRequest extends Request
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required',
'minLength' => 'numeric|min:0',
'maxLength' => 'numeric|min:0',
];
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Http\Requests;
class NewCustomFieldRequest extends Request
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required',
'type' => 'required|exists:custom_field_types,id',
'resource' => 'required|exists:custom_field_resources,id',
'minLength' => 'numeric|min:0',
'maxLength' => 'numeric|min:0',
];
}
}
+2 -2
View File
@@ -28,11 +28,11 @@ Route::group(['prefix' => LaravelLocalization::setLocale()], function () {
}
// display dashboard with some usefull information
Route::get('/', 'Dashboard\Dashboard@getIndex')
Route::get('/', 'Dashboard\Dashboard@index')
->name('admin.dashboard');
// list of all actions
Route::get('actions', 'ActionLog\Overview@getOverview')
Route::get('actions', 'ActionLog\Overview@index')
->name('log.overview');
// search form with results
+9 -9
View File
@@ -1,32 +1,32 @@
<?php
Route::group(['namespace' => 'FileManager'], function () {
Route::get('files/overview/{id?}/{type?}/{subtype?}', 'UploadedFilesOverview@getOverview')
Route::get('files/overview/{directory?}', 'UploadedFilesOverview@index')
->name('upload.overview');
// uploader methods
Route::get('directories/new/{id?}', 'CreateNewDirectory@getNew')
Route::get('directories/new/{parentDirectory?}', 'CreateNewDirectory@create')
->name('upload.newDirectory');
Route::get('directories/edit/{id}', 'EditDirectory@getEdit')
Route::get('directories/edit/{directory}', 'EditDirectory@edit')
->name('upload.editDirectory');
Route::post('directories/edit/{id}', 'EditDirectory@postEdit')
Route::post('directories/edit/{directory}', 'EditDirectory@update')
->name('upload.postEditDirectory');
route::post('directories/new', 'CreateNewDirectory@postNew')
route::post('directories/new', 'CreateNewDirectory@store')
->name('upload.postNewDirectory');
Route::get('upload/detail/{id}', 'EditUploadedFile@getDetail')
Route::get('upload/detail/{file}', 'EditUploadedFile@show')
->name('upload.detail');
Route::post('upload/detail/{id}', 'EditUploadedFile@postEdit')
Route::post('upload/detail/{file}', 'EditUploadedFile@update')
->name('upload.postEdit');
Route::get('upload/delete/{id}', 'EditUploadedFile@deleteFile')
Route::get('upload/delete/{file}', 'EditUploadedFile@delete')
->name('upload.delete');
// uploader methods
Route::post('upload', 'UploadFile@postFile')
Route::post('upload', 'UploadFile@store')
->name('upload.postFile');
});
@@ -1,37 +0,0 @@
<?php
namespace App\Listeners\Loggers;
use App\Events\CreateNewCustomField;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class LogCreateCustomField extends Logger
{
/**
* Handle the event.
*
* @param CreateNewCustomField $event
* @return void
*/
public function handle(CreateNewCustomField $event)
{
$parameters = [
'id' => $event->customField->id,
'name' => $event->customField->name
];
$this->saveLog($parameters);
}
/**
* Getter for action name. Used only internally
*
* @return mixed
*/
protected function getName()
{
return 'newCustomField';
}
}
-36
View File
@@ -1,36 +0,0 @@
<?php
namespace App\Listeners\Loggers;
use App\Events\DeleteCustomField;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class LogDeleteField extends Logger
{
/**
* Handle the event.
*
* @param DeleteCustomField $event
* @return void
*/
public function handle(DeleteCustomField $event)
{
$parameters = [
'id' => $event->customField->id,
'name' => $event->customField->name
];
$this->saveLog($parameters);
}
/**
* Getter for action name. Used only internally
*
* @return mixed
*/
protected function getName()
{
return 'deleteCustomField';
}
}
@@ -1,36 +0,0 @@
<?php
namespace App\Listeners\Loggers;
use App\Events\EditCustomField;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class LogEditCustomField extends Logger
{
/**
* Handle the event.
*
* @param EditCustomField $event
* @return void
*/
public function handle(EditCustomField $event)
{
$parameters = [
'id' => $event->customField->id,
'name' => $event->customField->name
];
$this->saveLog($parameters);
}
/**
* Getter for action name. Used only internally
*
* @return mixed
*/
protected function getName()
{
return 'editCustomField';
}
}
+1 -1
View File
@@ -44,7 +44,7 @@ abstract class Logger
'type_id' => $typeId,
'ip' => request()->ip(),
'user_agent' => request()->header('User-agent'),
'parameters' => json_encode((array)$parameters)
'parameters' => $parameters
];
// create new logged event
+4 -2
View File
@@ -9,8 +9,6 @@ use Illuminate\Database\Eloquent\Model;
*/
class ActionLog extends Model
{
use ModelTraits\ActionLog;
protected $table = 'action_log';
public $timestamps = false;
protected $fillable = [
@@ -20,4 +18,8 @@ class ActionLog extends Model
'user_agent',
'parameters'
];
protected $casts = [
'parameters' => 'array'
];
}
@@ -1,10 +1,9 @@
<?php
namespace App\Models\Content\ModelTraits;
use App\CMS\Handlers\Contracts\AppHandler;
use App\CMS\Handlers\Contracts\HistoryHandler;
use App\CMS\Helpers\Differ;
use App\Models\Content\Content;
use App\Models\Content\Content as ContentModel;
trait ContentHistory
{
@@ -15,7 +14,7 @@ trait ContentHistory
*
* @return array
*/
public function getStructuredHistoryOf(Content $content)
public function getStructuredHistoryOf(ContentModel $content)
{
$data = $content->history()
->select('content_history.*', 'contents.moduleHandler', 'users.email AS user_email', 'users.name AS user_name')
@@ -1,24 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class ContentHasCustomField
*/
class ContentHasCustomField extends Model
{
public $timestamps = false;
protected $fillable = [
'contents_id',
'custom_field_id',
'value'
];
protected $guarded = [];
}
-45
View File
@@ -1,45 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class CustomField
*/
class CustomField extends Model
{
public $timestamps = false;
protected $fillable = [
'name',
'type_id',
'resource_id',
'description',
'possible_values',
'default_value',
'regexp',
'min_length',
'max_length',
'required'
];
protected $guarded = [];
/**
* Getter for all custom fields indexed by resource ID.
*
* @return array
*/
public function getIndexedByResource()
{
// find all records in table
$fields = CustomField::all();
// add them to array indexed by resource ID
$customFields = [];
foreach ($fields as $field) {
$customFields[$field->resource_id][] = $field;
}
return $customFields;
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class CustomFieldResource
*/
class CustomFieldResource extends Model
{
public $timestamps = false;
protected $fillable = [
'name'
];
protected $guarded = [];
}
@@ -1,23 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class CustomFieldType
*/
class CustomFieldType extends Model
{
public $timestamps = false;
protected $fillable = [
'name',
'handler'
];
protected $guarded = [];
}
@@ -1,23 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class ModuleHasCustomField
*/
class ModuleHasCustomField extends Model
{
public $timestamps = false;
protected $fillable = [
'moduleHandler',
'custom_field_id'
];
protected $guarded = [];
}
@@ -1,24 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* Class UserHasCustomField
*/
class UserHasCustomField extends Model
{
public $timestamps = false;
protected $fillable = [
'user_id',
'custom_field_id',
'value'
];
protected $guarded = [];
}
+30 -8
View File
@@ -3,6 +3,7 @@
namespace App\Models\FileManager;
use Illuminate\Database\Eloquent\Model;
use Psy\Exception\ErrorException;
class Directory extends Model
{
@@ -17,25 +18,46 @@ class Directory extends Model
'user_id',
'hidden'
];
protected $casts = [
'hidden' => 'bool',
'is_root' => 'bool'
];
/**
* Files in directory
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function files()
{
return $this->hasMany(File::class);
}
/**
* Relationship with parent/sub directories
*
* @param bool $includeHidden
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function subdirectories($includeHidden = false)
public function allSubdirectories()
{
return $this->hasMany(Directory::class, 'parent_id', 'id');
}
$subdirectories = Directory::where('parent_id', $this->id);
public function subdirectories()
{
$subdirectories = $this->allSubdirectories()
->where('hidden', false);
if (!$includeHidden) {
$subdirectories = $subdirectories->where('hidden', 0);
return $subdirectories;
}
public function delete()
{
// try to prevent from deleting root folder
if ($this->is_root == true) {
throw new ErrorException('Cannot delete root folder!');
}
return $subdirectories->get();
return parent::delete();
}
}
+2 -2
View File
@@ -28,9 +28,9 @@ class File extends Model
'user_id',
'file_size',
'mime_type',
'hash_algorith',
'hash_algorithm',
'name',
'file_size'
'file_hash'
];
public function directory()
+2 -37
View File
@@ -4,12 +4,8 @@ namespace App\Models\FileManager\ModelTraits;
use App\Events\UploadFile;
use App\Models\FileManager\File as FileModel;
use Franzose\ClosureTable\Extensions\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\File as FileFacade;
use Intervention\Image\Constraint;
use Intervention\Image\Facades\Image;
use Symfony\Component\HttpFoundation\File\File as SymphonyFile;
use Symfony\Component\HttpFoundation\File\UploadedFile;
@@ -26,7 +22,7 @@ trait File
*/
public function getFilename(UploadedFile $file)
{
return uniqid() . '.' . $file->getClientOriginalExtension();
return date('Y-m-').uniqid() . '.' . $file->getClientOriginalExtension();
}
/**
@@ -48,12 +44,6 @@ trait File
// save file into physical location (local FS)
$uploadedFile = $file->move($destination, $filename);
// is uploaded file an image?
if (Str::startsWith($uploadedFile->getMimeType(), 'image')) {
// yes, create thumbnail
$this->createThumbnail($uploadedFile);
}
// insert record into database
$id = $this->saveIntoDatabase($uploadedFile, $data, $file->getClientOriginalName());
@@ -101,29 +91,4 @@ trait File
return $newFile->id;
}
/**
* Create thumbnail of given image
*
* @param SymphonyFile $file
*/
private function createThumbnail(SymphonyFile $file)
{
// does thumbnail directory exist?
if (!is_dir(config('app.thumbnail_path'))) {
FileFacade::makeDirectory(config('app.thumbnail_path'));
}
// get image instance
$image = Image::make(config('app.upload_path') . DIRECTORY_SEPARATOR . $file->getFilename());
// resize image and keep aspect ration
$image->resize(env('THUMBNAIL_WIDTH', 300), null, function (Constraint $constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
// save thumbnail with lower quality
$image->save(config('app.thumbnail_path') . DIRECTORY_SEPARATOR . $file->getFilename(), 75);
}
}
}
+24 -19
View File
@@ -1,11 +1,14 @@
<?php
namespace App\Models\ModelTraits;
use App\CMS\Handlers\Contracts\TemplateHandler;
use App\CMS\Contracts\Modules\AppHandler;
use App\CMS\Contracts\Modules\TemplateHandler;
use App\Models\Module as ModuleModel;
use App\Models\Templates\TemplatePath;
use Illuminate\Support\Facades\App;
trait Module {
trait Module
{
/**
* Create new module in database
*
@@ -26,32 +29,32 @@ trait Module {
throw new \ErrorException('Modules can be installed only via Artisan!');
}
$managesContent = $handler ? in_array('App\CMS\Handlers\Contracts\AppHandler', class_implements($handler)) : false;
$managesContent = $handler ? in_array(AppHandler::class, class_implements($handler)) : false;
$isTemplate = $handler ? in_array(TemplateHandler::class, class_implements($handler)) : false;
$supportCategories = $managesContent ? call_user_func([$handler, 'supportCategories']) : false;
if ($parentModuleId) {
$parentModule = Module::findOrFail($parentModuleId);
$parentModule = ModuleModel::findOrFail($parentModuleId);
$parentModule->has_submodules = true;
$parentModule->save();
}
// insert module into database
$module = Module::create([
'name' => $name,
'description' => $description,
'handler' => $handler,
'manages_content' => $managesContent,
'support_categories' => $supportCategories,
'alias' => $alias,
'moduleSettings' => json_encode($settings),
'parent_id' => $parentModuleId ? $parentModuleId : null,
'enabled' => 1,
'is_template' => $isTemplate
]);
$module = ModuleModel::create([
'name' => $name,
'description' => $description,
'handler' => $handler,
'manages_content' => $managesContent,
'support_categories' => $supportCategories,
'alias' => $alias,
'module_settings' => json_encode($settings),
'parent_id' => $parentModuleId ? $parentModuleId : null,
'enabled' => 1,
'is_template' => $isTemplate
]);
// install something module-specific
if ($handler) {
if ($handler && is_callable([$handler, 'install'])) {
call_user_func([$handler, 'install']);
}
@@ -77,7 +80,8 @@ trait Module {
$this->deleteDirectory(public_path('assets'));
// delete all template paths
TemplatePath::getQuery()->delete();
TemplatePath::getQuery()
->delete();
}
if ($this->handler && is_callable([$this->handler, 'uninstall'])) {
@@ -96,8 +100,9 @@ trait Module {
*/
private function deleteDirectory($directory)
{
if (!is_dir($directory))
if (!is_dir($directory)) {
return;
}
$success = \File::deleteDirectory($directory, true);
+1 -1
View File
@@ -17,7 +17,7 @@ class Module extends Model
'name',
'description',
'alias',
'moduleSettings',
'module_settings',
'enabled',
'support_categories',
'manages_content',
+2 -1
View File
@@ -21,7 +21,8 @@ class Template extends Model
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function path() {
public function templatePath()
{
return $this->belongsTo(TemplatePath::class, 'path');
}
}
+1 -9
View File
@@ -40,15 +40,7 @@ class EventServiceProvider extends ServiceProvider
'App\Events\DeleteContent' => [
'App\Listeners\Loggers\LogDeleteContent'
],
'App\Events\CreateNewCustomField' => [
'App\Listeners\Loggers\LogCreateCustomField',
],
'App\Events\EditCustomField' => [
'App\Listeners\Loggers\LogEditCustomField',
],
'App\Events\DeleteCustomField' => [
'App\Listeners\Loggers\LogDeleteField',
],
'App\Events\ChangeSettings' => [
'App\Listeners\Loggers\LogChangeSettings',
],
+4 -6
View File
@@ -25,13 +25,11 @@ class ModuleManager extends ServiceProvider
// iterate over all modules and enable or disable them
foreach ($modules as $module) {
$module->moduleSettings = json_decode($module->moduleSettings);
$module->module_settings = json_decode($module->module_settings);
if ($module->is_template) {
if (isset($module->moduleSettings->providers) && !empty($module->moduleSettings->providers)) {
foreach ($module->moduleSettings->providers as $provider) {
if (isset($module->module_settings->providers) && !empty($module->module_settings->providers)) {
foreach ($module->module_settings->providers as $provider) {
$this->app->register($provider);
}
}
@@ -61,7 +59,7 @@ class ModuleManager extends ServiceProvider
*/
private function createModulesJson(Module $module)
{
$config = $module->moduleSettings;
$config = $module->module_settings;
if (is_null($config)) {
return;
+11 -9
View File
@@ -3,18 +3,19 @@ namespace App\Providers;
use Illuminate\Support\ServiceProvider;
abstract class ModuleServiceProvider extends ServiceProvider {
abstract class ModuleServiceProvider extends ServiceProvider
{
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = false;
protected $alias = false;
protected $path = false;
abstract protected function setModuleAlias();
abstract protected function setModulePath();
/**
@@ -26,7 +27,7 @@ abstract class ModuleServiceProvider extends ServiceProvider {
{
$this->setModuleAlias();
$this->setModulePath();
$this->registerTranslations();
$this->registerConfig();
$this->registerViews();
@@ -39,7 +40,7 @@ abstract class ModuleServiceProvider extends ServiceProvider {
*/
protected function registerConfig()
{
$this->publishes([$this->path . '/../Config/config.php' => config_path($this->alias.'.php')]);
$this->publishes([$this->path . '/../Config/config.php' => config_path($this->alias . '.php')]);
$this->mergeConfigFrom($this->path . '/../Config/config.php', $this->alias);
}
@@ -54,14 +55,16 @@ abstract class ModuleServiceProvider extends ServiceProvider {
*/
protected function registerViews()
{
$viewPath = base_path('resources/views/modules/'.$this->alias);
$viewPath = base_path('resources/views/modules/' . $this->alias);
$sourcePath = $this->path . '/../Resources/views';
$this->publishes([$sourcePath => $viewPath], 'module-views');
$this->loadViewsFrom(array_merge(array_map(function ($path) {
return $path . '/modules/'.$this->alias;
return $path . '/modules/' . $this->alias;
}, \Config::get('view.paths')), [$sourcePath]), $this->alias);
if (is_dir($sourcePath)) {
$this->publishes([$sourcePath => $viewPath], 'module-views');
}
}
/**
@@ -73,5 +76,4 @@ abstract class ModuleServiceProvider extends ServiceProvider {
{
$this->loadTranslationsFrom($this->path . '/../Resources/lang', $this->alias);
}
}
+1 -1
View File
@@ -44,7 +44,7 @@ class SubmodulesManager extends ServiceProvider
$initFiles = $config->get('files', []);
foreach ($initFiles as $file) {
@include $submodulePath . DIRECTORY_SEPARATOR . $file;
require $submodulePath . DIRECTORY_SEPARATOR . $file;
}
} catch (FileNotFoundException $e) {
// ignore missing module and do not register this submodule
+12 -5
View File
@@ -5,6 +5,7 @@ namespace App\Providers;
use App\CMS\Contracts\Repositories\Template as TemplateContract;
use App\CMS\Handlers\Registrators\TemplateRegistrator;
use App\CMS\Helpers\CurrentTemplate;
use App\Models\Module;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;
@@ -44,6 +45,9 @@ class TemplateServiceProvider extends ServiceProvider
public function registerTemplatePaths($publicTemplates)
{
$modules = Module::all()
->pluck('id', 'alias');
/**
* @var $registrator TemplateRegistrator
*/
@@ -51,14 +55,17 @@ class TemplateServiceProvider extends ServiceProvider
foreach ($publicTemplates as $template) {
// setup some global variables
$module = strtolower($template['module']);
$alias = isset($template['alias']) ? $template['alias'] : $module;
$namespace = isset($template['namespace']) ? $template['namespace'] : strtolower($template['module']);
if (!$modules->get($alias)) {
continue;
}
// register path with current template name
$registrator->setNamespace($namespace);
if (is_callable([config($module . '.handler'), 'getModuleId'])) {
$registrator->setModuleId(call_user_func([config($module . '.handler'), 'getModuleId']));
}
$registrator->setModuleId($modules->get($alias));
$registrator->register('resources/views/modules/' . $module, 'visitor', $template['templateName']);
}
@@ -81,11 +88,11 @@ class TemplateServiceProvider extends ServiceProvider
private function publishViewResources()
{
$template = CurrentTemplate::get();
if (!$template || is_null($template->moduleSettings)) {
if (!$template || is_null($template->module_settings)) {
return;
}
$templateDir = base_path('templates/' . $template->moduleSettings->staticName . '/Resources');
$templateDir = base_path('templates/' . $template->module_settings->staticName . '/Resources');
$assetsDir = $templateDir . '/' . TemplateContract::ASSETS_DIRECTORY;
$viewsDir = $templateDir . '/views';
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class MarkDirectoryAsRoot extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('directories', function (Blueprint $table) {
$table->boolean('is_root')->default(false);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('directories', function (Blueprint $table) {
$table->dropColumn('is_root');
});
}
}
-2
View File
@@ -12,8 +12,6 @@ class DatabaseSeeder extends Seeder
public function run()
{
// fill up custom field types
$this->call(SeedCustomFieldTypes::class);
$this->call(SeedCustomFieldResources::class);
$this->call(SeedActionLogTypes::class);
$this->call(SeedSettings::class);
}
@@ -1,24 +0,0 @@
<?php
use Illuminate\Database\Seeder;
class SeedCustomFieldResources extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$types = [
['name' => 'admin/customFields.resource_user'],
['name' => 'admin/customFields.resource_content']
];
foreach ($types as $type) {
\DB::table('custom_field_resource')
->insert($type);
}
}
}
-27
View File
@@ -1,27 +0,0 @@
<?php
use Illuminate\Database\Seeder;
class SeedCustomFieldTypes extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$types = [
['name' => 'admin/customFields.date', 'handler' => '\\App\\CustomFields\\Date'],
['name' => 'admin/customFields.number', 'handler' => '\\App\\CustomFields\\Number'],
['name' => 'admin/customFields.selectboxList', 'handler' => '\\App\\CustomFields\\SelectboxList'],
['name' => 'admin/customFields.string', 'handler' => '\\App\\CustomFields\\String']
];
foreach ($types as $type) {
\DB::table('custom_field_types')
->insert($type);
}
}
}
+2 -2
View File
@@ -59,9 +59,9 @@ class Article extends Handler implements ContentTitles, AdvancedContentModifier,
*
* @return mixed|void
*/
public static function createNew(Content &$content, Request $request)
public static function createNew(Content &$content, array $inputData)
{
$content->moduleSettings = ['allowComments' => (int)$request->has('allowComments')];
$content->moduleSettings = ['allowComments' => (int)isset($inputData['allowComments'])];
}
/**
+1 -2
View File
@@ -1,11 +1,10 @@
<?php
Route::group([
'prefix' => LaravelLocalization::setLocale(),
'middleware' => ['localeSessionRedirect', 'localizationRedirect'],
'namespace' => 'Modules\Blog\Article\Http\Controllers'
], function () {
Route::group([
'middleware' => ['web', 'auth', 'adminMenu'],
'middleware' => ['admin'],
'prefix' => 'admin/comments',
'namespace' => 'Admin'
], function () {
@@ -0,0 +1,60 @@
<?php
namespace Modules\Blog\Modificators;
class PerexCreator
{
/**
* @var \DOMDocument
*/
protected $DOMDocument;
protected $perex;
public function __construct()
{
$this->DOMDocument = new \DOMDocument('1.0', 'UTF-8');
$this->maxLength = 300;
$this->maxImages = 2;
$this->perex = '';
}
private function addHtml($node)
{
$this->perex .= strip_tags($this->DOMDocument->saveHTML($node), '<p><strong><em><b><i><u>');
}
public function create($html)
{
if (empty($html)) {
return null;
}
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
$this->DOMDocument->loadHTML($html);
$texts = $this->DOMDocument->getElementsByTagName('p');
$images = $this->DOMDocument->getElementsByTagName('img');
$iframes = $this->DOMDocument->getElementsByTagName('iframe');
$textId = 0;
$imgId = 0;
if ($texts->length > 1) {
$this->addHtml($texts[$textId++]);
}
if (mb_strlen($this->perex) < $this->maxLength) {
if ($iframes->length > 0) {
$this->perex .= $this->DOMDocument->saveHTML($iframes[0]);
} elseif ($images->length > 0) {
while ($imgId < $images->length && $imgId < $this->maxImages) {
$this->perex .= $this->DOMDocument->saveHTML($images[$imgId++]);
}
} else {
while (mb_strlen($this->perex) < $this->maxLength && $textId < $texts->length) {
$this->addHtml($texts[$textId++]);
}
}
}
return $this->perex;
}
}
+1 -1
View File
@@ -12,4 +12,4 @@
|
*/
require __DIR__ . '/Http/routes.php';
require __DIR__ . DIRECTORY_SEPARATOR.'Http'.DIRECTORY_SEPARATOR.'routes.php';
@@ -1,10 +1,8 @@
<?php
namespace Modules\Blog\ArticleList\Handlers;
use App\CMS\Enumerations\ModulesHandlerToId;
use App\CMS\Handlers\Handler;
use App\Http\Controllers\Controller;
use App\Http\Requests\Request;
use App\Models\Content\Content;
use App\Models\User;
use Carbon\Carbon;
@@ -29,7 +27,7 @@ class ArticleList extends Handler
}, 20, ['icon' => 'fa fa-fw fa-book']);
}
$blogSubmenu->route('content.new', trans('articlelist::module.name'), ['id' => self::getModuleId()], 100, ['icon' => 'fa fa-fw fa-list-alt']);
$blogSubmenu->route('content.new', trans('articlelist::module.name'), ['id' => 'blog-articlelist'], 100, ['icon' => 'fa fa-fw fa-list-alt']);
}
/**
@@ -145,55 +143,8 @@ class ArticleList extends Handler
]);
}
public static function getModuleId()
{
$handler = config('articlelist.handler');
$allModules = ModulesHandlerToId::getWithTranslations();
$moduleId = isset($allModules[$handler]) ? $allModules[$handler] : null;
return $moduleId;
}
public static function supportCategories()
{
return false;
}
/**
* Save module-specific values into database
*
* @param Content $content
* @param Request $request
*
* @return mixed
* @internal param Widget $widget
*/
public static function createNew(Content &$content, Request $request)
{
}
/**
* Method used for editing existing content page.
*
* Reason why it is separated from createNew() method is simple - we need to save history of changes.
*
* @param Content $content
* @param Request $request
*
* @param $revisionID string ID of revision used
*
* @return int number of edited fields
*/
public static function edit(Content &$content, Request $request, $revisionID)
{
}
/**
* Install module
*
* @return mixed
*/
public static function install()
{
}
}
+1 -1
View File
@@ -12,4 +12,4 @@
|
*/
require __DIR__ . '/Http/routes.php';
require __DIR__ . DIRECTORY_SEPARATOR.'Http'.DIRECTORY_SEPARATOR.'routes.php';
+1 -1
View File
@@ -12,4 +12,4 @@
|
*/
require __DIR__ . '/Http/routes.php';
require __DIR__ . DIRECTORY_SEPARATOR.'Http'.DIRECTORY_SEPARATOR.'routes.php';
+11 -12
View File
@@ -21,26 +21,25 @@ class ContactForm extends Handler implements ContentTitles, AdvancedContentModif
* Save module-specific values into database
*
* @param Content $content
* @param Request $request
* @param array $inputData
*
* @return mixed
* @internal param Widget $widget
*/
public static function createNew(Content &$content, Request $request)
public static function createNew(Content &$content, array $inputData)
{
$settings = [
'phone' => $request->phone,
'email' => $request->email,
'contactEmail' => $request->contactEmail,
'subject' => $request->subject,
'companyName' => $request->companyName,
'address' => $request->address,
'gpsLat' => $request->gpsLat,
'gpsLng' => $request->gpsLng,
'phone' => $inputData['phone'],
'email' => $inputData['email'],
'contactEmail' => $inputData['contactEmail'],
'subject' => $inputData['subject'],
'companyName' => $inputData['companyName'],
'address' => $inputData['address'],
'gpsLat' => $inputData['gpsLat'],
'gpsLng' => $inputData['gpsLng'],
];
// save settings
$content->moduleSettings = json_encode($settings);
$content->moduleSettings = $settings;
}
/**
@@ -2,6 +2,7 @@
namespace Modules\ContactForm\Widgets\Address;
use App\CMS\Contracts\Widgets\PublicWidget;
use App\Http\Requests\Request;
use App\Models\Widgets\Widget;
use App\CMS\Contracts\Widgets\WidgetRenderer;
@@ -43,10 +44,8 @@ class Address implements PublicWidget
*
* @return mixed
*/
public static function save(Widget $widget, \stdClass $data)
public static function save(Request $data)
{
$widget->settings = json_encode(['contactFormId' => $data->contactFormId,]);
return $widget;
return ['contactFormId' => $data->contactFormId];
}
}
+3 -4
View File
@@ -3,6 +3,7 @@ namespace Modules\ContactForm\Widgets\Form;
use App\CMS\Contracts\Widgets\PublicWidget;
use App\CMS\Contracts\Widgets\WidgetRenderer;
use App\Http\Requests\Request;
use App\Models\Widgets\Widget;
class Form implements PublicWidget
@@ -43,10 +44,8 @@ class Form implements PublicWidget
*
* @return mixed
*/
public static function save(Widget $widget, \stdClass $data)
public static function save(Request $data)
{
$widget->settings = json_encode(['contactFormId' => $data->contactFormId,]);
return $widget;
return ['contactFormId' => $data->contactFormId];
}
}
+40 -38
View File
@@ -1,42 +1,44 @@
<?php
return [
"createSubdirectoryFor" => "Vytvořit podadresář v :directory.",
"createdAt" => "Nahráno",
"delete" => "Smazat",
"description" => "Popis souboru",
"directories" => "Podadresáře v adresáři :directory",
"directoryDescription" => "Popis",
"directoryHidden" => "Skrytý adresář",
"directoryName" => "Jméno adresáře",
"edit" => "Upravit soubor :name",
"editButton" => "Upravit",
"editDirectory" => "Upravit adresář",
"editDirectorySuccess" => "Úspěšně uloženo",
"encoding" => "Kódování",
"fileDeleted" => "Soubor smazán",
"fileInfo" => "Informace",
"fileSize" => "Velikost",
"hash" => "Hash",
"invalidFile" => "Nahrávaný soubor nelze nahrát, z nějakého důvodu není validní.",
"keywords" => "Klíčová slova (oddělena čárkou)",
"mime" => "MIME typ",
"name" => "Jméno",
"newDirectory" => "Vytvořit nový adresář",
"newDirectorySuccess" => "Nový adresář úspěšně vytvořen",
"newFile" => "Nový soubor",
"noFileSpecified" => "Nebyl zvolen žádný soubor k nahrávání",
"noFiles" => "Žádný soubor nebyl nalezen",
"noSubdirectories" => "Žádné podadresáře",
"originalFilename" => "Původní jméno",
"overview" => "Seznam všech souborů",
"parentDirectory" => "Rodičovský adresář",
"resolution" => "Rozlišení",
"rootDirectories" => "Kořenové adresáře",
"selectFile" => "Vybrat soubor",
"subdirectoryExists" => "Adresář s tímto jménem tu již eixstuje",
"successfullyChanged" => "Úspěšně uloženo",
"updatedAt" => "Poslední změna",
"upload" => "Nahrát nový soubor",
"uploadSuccessfull" => "Soubor úspěšně nahrán|:count soubory úspěšně nahrány|:count souborů úspěšně nahráno",
"url" => "Veřejná URL",
"createdAt" => "Nahráno",
"delete" => "Smazat",
"description" => "Popis souboru",
"directories" => "Podadresáře v adresáři :directory",
"directoryDescription" => "Popis",
"directoryHidden" => "Skrytý adresář",
'directory' => 'Adresář',
"directoryName" => "Jméno adresáře",
"edit" => "Upravit soubor :name",
"editButton" => "Upravit",
"editDirectory" => "Upravit adresář",
"editDirectorySuccess" => "Úspěšně uloženo",
"encoding" => "Kódování",
"fileDeleted" => "Soubor smazán",
"fileInfo" => "Informace",
"fileSize" => "Velikost",
"hash" => "Hash",
"invalidFile" => "Nahrávaný soubor nelze nahrát, z nějakého důvodu není validní.",
"keywords" => "Klíčová slova (oddělena čárkou)",
"mime" => "MIME typ",
"name" => "Jméno",
"newDirectory" => "Vytvořit nový adresář",
"newDirectorySuccess" => "Nový adresář úspěšně vytvořen",
"newFile" => "Nový soubor",
"noFileSpecified" => "Nebyl zvolen žádný soubor k nahrávání",
"noFiles" => "Žádný soubor nebyl nalezen",
"noSubdirectories" => "Žádné podadresáře",
"originalFilename" => "Původní jméno",
"overview" => "Seznam všech souborů",
"parentDirectory" => "Rodičovský adresář",
"resolution" => "Rozlišení",
"rootDirectories" => "Kořenové adresáře",
"selectFile" => "Vybrat soubor",
"subdirectoryExists" => "Adresář s tímto jménem tu již eixstuje",
"successfullyChanged" => "Úspěšně uloženo",
"updatedAt" => "Poslední změna",
"upload" => "Nahrát nový soubor",
"uploadSuccessfull" => "Soubor úspěšně nahrán|:count soubory úspěšně nahrány|:count souborů úspěšně nahráno",
"url" => "Veřejná URL",
'rootDirectory' => 'Kořenový adresář'
];
@@ -1,18 +1,20 @@
<form method="POST" action="{{$action}}">
{!! csrf_field() !!}
<input type="text" name="name" placeholder="@lang('admin/fileManager.directoryName')" class="form-control"
<input type="text" name="name" required placeholder="@lang('admin/fileManager.directoryName')" class="form-control"
value="{{old('name', $directory->name)}}" />
<textarea name="description" class="form-control" placeholder="@lang('admin/fileManager.directoryDescription')"
rows="3">{{old('description', $directory->description)}}</textarea>
@if ($parentDirectory->id)
<input type="hidden" name="parentDirectory" value="{{$parentDirectory->id}}">
@endif
<button type="submit" class="btn btn-primary">
@if ($directory->id)
@lang('admin/fileManager.editDirectory')
@else
@lang('admin/fileManager.editDirectory')
@else
@lang('admin/fileManager.newDirectory')
@endif
</button>
</form>
@@ -0,0 +1,10 @@
<option value="{{$directory->id}}" @if($file->directory_id == $directory->id) selected @endif>
{{str_repeat('-', $depth)}}
{{$directory->is_root ? trans('admin/fileManager.rootDirectory') : $directory->name}}
</option>
@if (!is_null($directory->subdirectories))
@foreach($directory->subdirectories as $dir)
@include('admin.fileManager.directories.subdirectoriesOptionList', ['directory' => $dir, 'depth' => $depth +1, 'file' => $file])
@endforeach
@endif

Some files were not shown because too many files have changed in this diff Show More