FIX: lots of bugfixes, sorry for ugly commit
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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,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,8 +50,10 @@ class WidgetRegistrator
|
||||
]);
|
||||
|
||||
// install widget (if neccessary)
|
||||
if (is_callable([$classname, 'install'])) {
|
||||
call_user_func($classname . '::install');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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'
|
||||
];
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -107,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));
|
||||
|
||||
@@ -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,8 +66,9 @@ class Template extends Repository implements ITemplate
|
||||
}
|
||||
}
|
||||
|
||||
public function getForModule(Module $module) {
|
||||
return Template::where('module_id', $module->id)
|
||||
public function getForModule(Module $module)
|
||||
{
|
||||
return TemplateModel::where('module_id', $module->id)
|
||||
->select(['template_name', 'name', 'description'])
|
||||
->get();
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,8 +32,6 @@ class AddLanguage extends Command
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
|
||||
@@ -24,8 +24,6 @@ class ChangePassword extends Command
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\WidgetArea;
|
||||
use App\Models\Widgets\WidgetArea;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class CreateNewWidgetArea extends Event
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -34,7 +34,7 @@ class CreateNewDirectory extends Controller
|
||||
*
|
||||
* @return $this|\Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function postNew(Request $request)
|
||||
public function store(Request $request)
|
||||
{
|
||||
// create new directory
|
||||
try {
|
||||
|
||||
@@ -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;
|
||||
@@ -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'])
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,17 +14,28 @@ class UploadedFilesOverview extends Controller
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function index(Directory $directory =null)
|
||||
public function index(Directory $directory = null)
|
||||
{
|
||||
// include hidden directories?
|
||||
$includeHidden = Input::get('hidden');
|
||||
|
||||
$subdirectories = $includeHidden ? $directory->allSubdirectories : $directory->subdirectories;
|
||||
if (!$directory->exists) {
|
||||
$subdirectories = Directory::whereNull('parent_id');
|
||||
} else {
|
||||
$subdirectories = $directory->allSubdirectories();
|
||||
}
|
||||
|
||||
if ($includeHidden === false) {
|
||||
$subdirectories = $subdirectories->where('hidden', false);
|
||||
}
|
||||
|
||||
$subdirectories = $subdirectories->get();
|
||||
|
||||
return view('admin.fileManager.overview', [
|
||||
'directory' => $directory,
|
||||
'subdirectories' => $subdirectories,
|
||||
'newDirectory' => new Directory()
|
||||
'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;
|
||||
}
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
|
||||
|
||||
@@ -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,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([
|
||||
$module = ModuleModel::create([
|
||||
'name' => $name,
|
||||
'description' => $description,
|
||||
'handler' => $handler,
|
||||
'manages_content' => $managesContent,
|
||||
'support_categories' => $supportCategories,
|
||||
'alias' => $alias,
|
||||
'moduleSettings' => json_encode($settings),
|
||||
'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);
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ class Module extends Model
|
||||
'name',
|
||||
'description',
|
||||
'alias',
|
||||
'moduleSettings',
|
||||
'module_settings',
|
||||
'enabled',
|
||||
'support_categories',
|
||||
'manages_content',
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
/**
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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'])];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -12,4 +12,4 @@
|
||||
|
|
||||
*/
|
||||
|
||||
require __DIR__ . '/Http/routes.php';
|
||||
require __DIR__ . DIRECTORY_SEPARATOR.'Http'.DIRECTORY_SEPARATOR.'routes.php';
|
||||
|
||||
@@ -12,4 +12,4 @@
|
||||
|
|
||||
*/
|
||||
|
||||
require __DIR__ . '/Http/routes.php';
|
||||
require __DIR__ . DIRECTORY_SEPARATOR.'Http'.DIRECTORY_SEPARATOR.'routes.php';
|
||||
|
||||
@@ -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,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];
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,11 @@
|
||||
<textarea name="description" class="form-control" placeholder="@lang('admin/fileManager.directoryDescription')"
|
||||
rows="3">{{old('description', $directory->description)}}</textarea>
|
||||
|
||||
|
||||
@if ($parentDirectory->id)
|
||||
<input type="text" name="parentDirectory" value="{{$parentDirectory->id}}">
|
||||
@endif
|
||||
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@if ($directory->id)
|
||||
@lang('admin/fileManager.editDirectory')
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<div class="col-lg-2">
|
||||
<div class="callout">
|
||||
<figure class="user-img text-center figure">
|
||||
<img class="img-rounded" src="{{$user->gravatar(200)}}" alt="" />
|
||||
<img class="img-rounded" src="@gravatar($user->email, 200)" alt="" />
|
||||
|
||||
@if($user->id == Auth::user()->id)
|
||||
<figcaption class="figure-caption">@lang('admin/userManagement.gravatarLink')</figcaption>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class="card-block container truncate sameheight-item">
|
||||
<div class="col-xs-12 text-center">
|
||||
<a href="{{route('users.edit', ['id' => $user->id])}}">
|
||||
<img src="{{$user->gravatar(100)}}" alt="" />
|
||||
<img src="{{\App\CMS\Helpers\Gravatar::img($user->email, 100)}}" alt="" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-12">
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
<div class="col-lg-4">
|
||||
<h3>@lang('admin/widgetAreas.new')</h3>
|
||||
|
||||
@include('admin.widgets.area.form', ['action' => route('widgetareas.postNew'), 'area' => new \App\Models\WidgetArea()])
|
||||
@include('admin.widgets.area.form', ['action' => route('widgetareas.postNew'), 'area' => new \App\Models\Widgets\WidgetArea()])
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user