FEATURE: add another repositories
This commit is contained in:
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\CMS\Contracts\Content;
|
||||||
|
|
||||||
|
use App\Http\Requests\Request;
|
||||||
|
use App\Models\Content\Content;
|
||||||
|
|
||||||
|
interface AdvancedContentModifier {
|
||||||
|
/**
|
||||||
|
* Save module-specific values into database
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
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 string $revisionId
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function edit(Content &$content, Request $request, $revisionId);
|
||||||
|
/**
|
||||||
|
* Method called right after content page is marked as deleted
|
||||||
|
*
|
||||||
|
* This method is supposed to clean after "deleted" page.
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function delete(Content $content);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\CMS\Handlers\Contracts;
|
namespace App\CMS\Contracts\Modules;
|
||||||
|
|
||||||
use App\Http\Requests\Request;
|
use App\Http\Requests\Request;
|
||||||
use App\Models\Content\Content;
|
use App\Models\Content\Content;
|
||||||
@@ -18,51 +18,6 @@ interface AppHandler extends BaseModuleHandler
|
|||||||
|
|
||||||
public static function getHistoryHandler();
|
public static function getHistoryHandler();
|
||||||
|
|
||||||
/**
|
|
||||||
* Load some extra data for content management form?
|
|
||||||
*
|
|
||||||
* @param Content $content
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function loadExtraData(Content $content);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save module-specific values into database
|
|
||||||
*
|
|
||||||
* @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);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method called right after content page is marked as deleted
|
|
||||||
*
|
|
||||||
* This method is supposed to clean after "deleted" page.
|
|
||||||
*
|
|
||||||
* @param Content $content
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function delete(Content $content);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getter for section names in creating/editing content resource
|
* Getter for section names in creating/editing content resource
|
||||||
*
|
*
|
||||||
+1
-8
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\CMS\Handlers\Contracts;
|
namespace App\CMS\Contracts\Modules;
|
||||||
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
||||||
@@ -15,11 +15,4 @@ interface BaseModuleHandler
|
|||||||
*/
|
*/
|
||||||
public static function registerAdminMenu(User $user);
|
public static function registerAdminMenu(User $user);
|
||||||
|
|
||||||
/**
|
|
||||||
* Install module.
|
|
||||||
*
|
|
||||||
* This method is called after inserting info about module into database. It can be called only using Artisan in
|
|
||||||
* CLI.
|
|
||||||
*/
|
|
||||||
public static function install();
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\CMS\Contracts\Modules;
|
||||||
|
|
||||||
|
use App\Models\Module;
|
||||||
|
|
||||||
|
interface InstallableModule {
|
||||||
|
/**
|
||||||
|
* Install module.
|
||||||
|
*
|
||||||
|
* This method is called after inserting info about module into database. It can be called only using Artisan in
|
||||||
|
* CLI.
|
||||||
|
*/
|
||||||
|
public static function install();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstalls module
|
||||||
|
*
|
||||||
|
* @param Module $module
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function uninstall(Module $module);
|
||||||
|
}
|
||||||
+1
-11
@@ -1,9 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\CMS\Handlers\Contracts;
|
namespace App\CMS\Contracts\Modules;
|
||||||
|
|
||||||
use App\Http\Requests\Request;
|
use App\Http\Requests\Request;
|
||||||
use App\Models\Content\Content;
|
use App\Models\Content\Content;
|
||||||
use App\Models\Module;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface TemplateHandler
|
* Interface TemplateHandler
|
||||||
@@ -14,15 +13,6 @@ use App\Models\Module;
|
|||||||
*/
|
*/
|
||||||
interface TemplateHandler extends BaseModuleHandler
|
interface TemplateHandler extends BaseModuleHandler
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Uninstall template
|
|
||||||
*
|
|
||||||
* Delete some items in database, delete files etc.
|
|
||||||
*
|
|
||||||
* @param Module $template
|
|
||||||
*/
|
|
||||||
public static function uninstall(Module $template);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get list of registered templates and supported modules.
|
* Get list of registered templates and supported modules.
|
||||||
*
|
*
|
||||||
@@ -3,11 +3,9 @@ namespace App\CMS\Contracts\Repositories;
|
|||||||
|
|
||||||
interface Module extends BaseRepository {
|
interface Module extends BaseRepository {
|
||||||
|
|
||||||
public function supportsCategories();
|
public function getCreateContentTitle(\App\Models\Module $module);
|
||||||
|
|
||||||
public function getCreateContentTitle();
|
public function getUpdateContentTitle(\App\Models\Module $module);
|
||||||
|
|
||||||
public function getUpdateContentTitle();
|
|
||||||
|
|
||||||
public function getOverviewTitle(\App\Models\Module $module);
|
public function getOverviewTitle(\App\Models\Module $module);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
namespace App\CMS\Contracts\Repositories;
|
||||||
|
|
||||||
|
use App\Models\Module as ModuleModel;
|
||||||
|
|
||||||
|
interface Template
|
||||||
|
{
|
||||||
|
const EDITED_TEMPLATES_DIRECTORY = 'custom';
|
||||||
|
const ASSETS_DIRECTORY = 'assets';
|
||||||
|
const MODULES_DIRECTORY = 'modules';
|
||||||
|
const TEMPLATE_SUFFIX = '.blade.php';
|
||||||
|
const CUSTOM_EDIT_DIRECTORY = 1;
|
||||||
|
const ORIGINAL_DIRECTORY = 2;
|
||||||
|
|
||||||
|
public function getPathToTemplate();
|
||||||
|
|
||||||
|
public function getForModule(ModuleModel $module);
|
||||||
|
}
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\CMS\Handlers;
|
namespace App\CMS\Handlers;
|
||||||
|
|
||||||
|
use App\CMS\Contracts\Modules\BaseModuleHandler;
|
||||||
use App\CMS\Enumerations\TemplatePathsHumanReadableRootOnly;
|
use App\CMS\Enumerations\TemplatePathsHumanReadableRootOnly;
|
||||||
use App\CMS\Enumerations\WidgetTypes;
|
use App\CMS\Enumerations\WidgetTypes;
|
||||||
use App\CMS\Handlers\Contracts\AppHandler;
|
|
||||||
use App\CMS\Handlers\Contracts\BaseModuleHandler;
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
||||||
abstract class BaseHandler implements BaseModuleHandler
|
abstract class BaseHandler implements BaseModuleHandler
|
||||||
@@ -97,8 +96,6 @@ abstract class BaseHandler implements BaseModuleHandler
|
|||||||
}, 60, ['icon' => 'fa fa-fw fa-file-code-o']);
|
}, 60, ['icon' => 'fa fa-fw fa-file-code-o']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// $menu->dropdown(trans('admin/mainMenu.customFields'), function ($sub) {
|
// $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.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']);
|
// $sub->route('customfields.overview', trans('admin/mainMenu.customFieldsOverview'), [], 50, ['icon' => 'fa fa-fw fa-code-fork']);
|
||||||
@@ -107,8 +104,6 @@ abstract class BaseHandler implements BaseModuleHandler
|
|||||||
$sub->route('log.overview', trans('admin/mainMenu.actionLog'), [], 70, ['icon' => 'fa fa-fw fa-history']);
|
$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']);
|
$sub->route('settings.overview', trans('admin/mainMenu.settings'), [], 80, ['icon' => 'fa fa-fw fa-gear']);
|
||||||
}, 10000, ['icon' => 'fa fa-fw fa-gears']);
|
}, 10000, ['icon' => 'fa fa-fw fa-gears']);
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// order
|
// order
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\CMS\Handlers;
|
namespace App\CMS\Handlers;
|
||||||
|
|
||||||
use App\CMS\Handlers\Contracts\AppHandler;
|
use App\CMS\Contracts\Modules\AppHandler;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\Content\Content;
|
use App\Models\Content\Content;
|
||||||
|
|
||||||
@@ -15,16 +15,6 @@ use App\Models\Content\Content;
|
|||||||
*/
|
*/
|
||||||
abstract class Handler extends BaseHandler implements AppHandler
|
abstract class Handler extends BaseHandler implements AppHandler
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* todo: Temporary method, will be implemented for each Handler
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function supportCategories()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getHistoryHandler()
|
public static function getHistoryHandler()
|
||||||
{
|
{
|
||||||
return History::class;
|
return History::class;
|
||||||
@@ -64,16 +54,7 @@ abstract class Handler extends BaseHandler implements AppHandler
|
|||||||
'files' => 'admin.content.formParts.files'
|
'files' => 'admin.content.formParts.files'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function delete(Content $content)
|
|
||||||
{
|
|
||||||
// temporarily nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function loadExtraData(Content $content) {
|
|
||||||
// temporarily nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getExtendedFormInputsEdit()
|
public static function getExtendedFormInputsEdit()
|
||||||
{
|
{
|
||||||
return self::getExtendedFormInputsCreate();
|
return self::getExtendedFormInputsCreate();
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ namespace App\CMS\Handlers\Registrators;
|
|||||||
|
|
||||||
use App\CMS\Enumerations\TemplatePaths;
|
use App\CMS\Enumerations\TemplatePaths;
|
||||||
use App\CMS\Enumerations\Templates;
|
use App\CMS\Enumerations\Templates;
|
||||||
use App\Models\Templates\Template;
|
use App\CMS\Contracts\Repositories\Template;
|
||||||
use App\Models\Templates\TemplatePath;
|
use App\Models\Templates\TemplatePath;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\File;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ class Template
|
|||||||
/**
|
/**
|
||||||
* Getter for real template name
|
* Getter for real template name
|
||||||
*
|
*
|
||||||
* @param $template
|
* @param $template
|
||||||
|
*
|
||||||
|
* @param bool $throwExceptions
|
||||||
*
|
*
|
||||||
* @return null|string
|
* @return null|string
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class EditContent implements Interaction
|
|||||||
$page = $parameters[0];
|
$page = $parameters[0];
|
||||||
|
|
||||||
// upload file - if provided
|
// upload file - if provided
|
||||||
|
// todo use interaction
|
||||||
$file = $page->uploadTitlePhoto($request);
|
$file = $page->uploadTitlePhoto($request);
|
||||||
|
|
||||||
// let template to modify request and content page
|
// let template to modify request and content page
|
||||||
@@ -52,13 +53,17 @@ class EditContent implements Interaction
|
|||||||
// todo move this method out of the controller!
|
// todo move this method out of the controller!
|
||||||
$data = \App\Http\Controllers\Admin\Contents\EditContent::getFields($request, array_values($fields));
|
$data = \App\Http\Controllers\Admin\Contents\EditContent::getFields($request, array_values($fields));
|
||||||
|
|
||||||
|
// todo use Model Observer and model::original attributes
|
||||||
|
|
||||||
list($revision, $changedColumns) = $page->updateWithHistory($fields, $data);
|
list($revision, $changedColumns) = $page->updateWithHistory($fields, $data);
|
||||||
|
|
||||||
$changedColumns += call_user_func_array([$page->module_handler, 'edit'], [&$page, $request, $revision]);
|
$changedColumns += call_user_func_array([$page->module_handler, 'edit'], [&$page, $request, $revision]);
|
||||||
|
|
||||||
|
|
||||||
|
// move to interaction
|
||||||
$changedColumns += $page->uploadRelatedFiles($request, $revision);
|
$changedColumns += $page->uploadRelatedFiles($request, $revision);
|
||||||
|
|
||||||
if ($changedColumns > 0) // fire event with
|
if ($changedColumns > 0) {
|
||||||
{
|
|
||||||
Event::fire(new EditContentEvent($page, $revision));
|
Event::fire(new EditContentEvent($page, $revision));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class Content extends Repository implements IContent
|
|||||||
/**
|
/**
|
||||||
* @var ContentModel
|
* @var ContentModel
|
||||||
*/
|
*/
|
||||||
private $model;
|
protected $model;
|
||||||
|
|
||||||
public function __construct(ContentModel $model)
|
public function __construct(ContentModel $model)
|
||||||
{
|
{
|
||||||
@@ -54,9 +54,16 @@ class Content extends Repository implements IContent
|
|||||||
$page = new ContentModel();
|
$page = new ContentModel();
|
||||||
$page->user_id = \Auth::user()->id;
|
$page->user_id = \Auth::user()->id;
|
||||||
$page->language = LaravelLocalization::getCurrentLocale();
|
$page->language = LaravelLocalization::getCurrentLocale();
|
||||||
|
$page->status = IContent::STATUS_DRAFT;
|
||||||
$page->module_settings = [];
|
$page->module_settings = [];
|
||||||
} else {
|
} else {
|
||||||
$page = $this->model->find($id);
|
if (is_numeric($id)) {
|
||||||
|
$page = $this->model->findOrFail($id);
|
||||||
|
} else {
|
||||||
|
$page = $this->model->where('language', LaravelLocalization::getCurrentLocale())
|
||||||
|
->where('url', $id)
|
||||||
|
->firstOrFail();
|
||||||
|
}
|
||||||
$page->module_settings = json_decode($page->module_settings);
|
$page->module_settings = json_decode($page->module_settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,25 +6,42 @@ use App\Models\Module as ModuleModel;
|
|||||||
|
|
||||||
class Module extends Repository implements IModule
|
class Module extends Repository implements IModule
|
||||||
{
|
{
|
||||||
public function getOne($id = null) {
|
/**
|
||||||
|
* @var ModuleModel
|
||||||
|
*/
|
||||||
|
private $module;
|
||||||
|
|
||||||
|
public function __construct(ModuleModel $module)
|
||||||
|
{
|
||||||
|
$this->module = $module;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getOne($id = null)
|
||||||
|
{
|
||||||
if (!is_null($id)) {
|
if (!is_null($id)) {
|
||||||
return ModuleModel::find($id);
|
|
||||||
|
if (is_numeric($id)) {
|
||||||
|
return ModuleModel::findOrFail($id);
|
||||||
|
} else {
|
||||||
|
return ModuleModel::where('alias', $id)
|
||||||
|
->firstOrFail();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return new ModuleModel();
|
return new ModuleModel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function supportsCategories()
|
public function getCreateContentTitle(ModuleModel $module)
|
||||||
{
|
{
|
||||||
// TODO: Implement supportsCategories() method.
|
$pageHeading = trans('admin/contents.new', ['name' => trans($module->name)]);
|
||||||
|
if (is_callable([$module->handler, 'getCreateNewTitle'])) {
|
||||||
|
$pageHeading = call_user_func([$module->handler, 'getCreateNewTitle']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $pageHeading;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCreateContentTitle()
|
public function getUpdateContentTitle(ModuleModel $module)
|
||||||
{
|
|
||||||
// TODO: Implement getCreateContentTitle() method.
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getUpdateContentTitle()
|
|
||||||
{
|
{
|
||||||
// TODO: Implement getUpdateContentTitle() method.
|
// TODO: Implement getUpdateContentTitle() method.
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-26
@@ -1,26 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
namespace App\Cms\Repositories\Templates;
|
||||||
|
|
||||||
namespace App\Models\Templates\ModelTraits;
|
use App\CMS\Contracts\Repositories\Template as ITemplate;
|
||||||
|
use App\CMS\Repositories\Repository;
|
||||||
use App\Models\Templates\TemplatePath;
|
use App\Models\Module;
|
||||||
use App\Models\Templates\Template as TemplateModel;
|
use App\Models\Templates\Template as TemplateModel;
|
||||||
|
|
||||||
trait Template {
|
class Template extends Repository implements ITemplate
|
||||||
protected $pathModel = null;
|
{
|
||||||
|
public function __construct(TemplateModel $model)
|
||||||
/**
|
|
||||||
* In one path may be many templates
|
|
||||||
*
|
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
|
||||||
*/
|
|
||||||
public function getPath()
|
|
||||||
{
|
{
|
||||||
if (!$this->pathModel) {
|
$this->model = $model;
|
||||||
$this->pathModel = TemplatePath::where('id', $this->path)
|
|
||||||
->first();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->pathModel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,11 +22,11 @@ trait Template {
|
|||||||
*/
|
*/
|
||||||
public function getPathToTemplate($mode = null)
|
public function getPathToTemplate($mode = null)
|
||||||
{
|
{
|
||||||
$templateName = $this->template_name;
|
$templateName = $this->model->template_name;
|
||||||
$path = $this->getPath();
|
$path = $this->model->path()->get();
|
||||||
|
|
||||||
// delete namespace if given
|
// delete namespace if given
|
||||||
if (strpos($this->template_name, '::')) {
|
if (strpos($this->model->template_name, '::')) {
|
||||||
list(, $templateName) = explode('::', $templateName);
|
list(, $templateName) = explode('::', $templateName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,24 +40,24 @@ trait Template {
|
|||||||
// path parts
|
// path parts
|
||||||
$absolutePath = base_path($path->path);
|
$absolutePath = base_path($path->path);
|
||||||
$templatePath = str_replace('.', $_, $templateName);
|
$templatePath = str_replace('.', $_, $templateName);
|
||||||
$file = $templatePath . TemplateModel::TEMPLATE_SUFFIX;
|
$file = $templatePath . ITemplate::TEMPLATE_SUFFIX;
|
||||||
|
|
||||||
// compose two versions of path - original and with "custom" directory
|
// compose two versions of path - original and with "custom" directory
|
||||||
$original = $absolutePath . $_ . $file;
|
$original = $absolutePath . $_ . $file;
|
||||||
$edited = $absolutePath . $_ . TemplateModel::EDITED_TEMPLATES_DIRECTORY . $_ . $file;
|
$edited = $absolutePath . $_ . ITemplate::EDITED_TEMPLATES_DIRECTORY . $_ . $file;
|
||||||
|
|
||||||
// decide which path will be returned
|
// decide which path will be returned
|
||||||
switch ($mode) {
|
switch ($mode) {
|
||||||
case TemplateModel::CUSTOM_EDIT_DIRECTORY:
|
case ITemplate::CUSTOM_EDIT_DIRECTORY:
|
||||||
return $edited;
|
return $edited;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TemplateModel::ORIGINAL_DIRECTORY:
|
case ITemplate::ORIGINAL_DIRECTORY:
|
||||||
return $original;
|
return $original;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (file_exists($absolutePath . $_ . TemplateModel::EDITED_TEMPLATES_DIRECTORY . $_ . $file)) {
|
if (file_exists($absolutePath . $_ . ITemplate::EDITED_TEMPLATES_DIRECTORY . $_ . $file)) {
|
||||||
return $edited;
|
return $edited;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,4 +65,10 @@ trait Template {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getForModule(Module $module) {
|
||||||
|
return Template::where('module_id', $module->id)
|
||||||
|
->select(['template_name', 'name', 'description'])
|
||||||
|
->get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -3,17 +3,14 @@ namespace App\Http\Controllers\Admin\Contents;
|
|||||||
|
|
||||||
use App\CMS\Contracts\Repositories\Content as IContent;
|
use App\CMS\Contracts\Repositories\Content as IContent;
|
||||||
use App\CMS\Contracts\Repositories\Module as IModuleRepository;
|
use App\CMS\Contracts\Repositories\Module as IModuleRepository;
|
||||||
|
use App\CMS\Contracts\Repositories\Template as ITemplate;
|
||||||
|
use Modules\Categories\Contracts\Repositories\Category as ICategory;
|
||||||
use App\CMS\Enumerations\ContentStatuses;
|
use App\CMS\Enumerations\ContentStatuses;
|
||||||
use App\Cms\Handlers\Interactions\Interaction;
|
use App\Cms\Handlers\Interactions\Interaction;
|
||||||
use App\Cms\Interactions\Admin\Content\NewContent;
|
use App\Cms\Interactions\Admin\Content\NewContent;
|
||||||
use App\Http\Controllers\Admin\Controller;
|
use App\Http\Controllers\Admin\Controller;
|
||||||
use App\Http\Requests\CreateNewContentRequest;
|
use App\Http\Requests\CreateNewContentRequest;
|
||||||
use App\Http\Requests\Request;
|
use App\Http\Requests\Request;
|
||||||
use App\Models\FileManager\File;
|
|
||||||
use App\Models\Module;
|
|
||||||
use App\Models\Templates\Template;
|
|
||||||
use Modules\Categories\Entities\Category;
|
|
||||||
use Pingpong\Modules\Facades\Module as ModuleInstance;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CreateNewContent
|
* Class CreateNewContent
|
||||||
@@ -24,10 +21,6 @@ use Pingpong\Modules\Facades\Module as ModuleInstance;
|
|||||||
*/
|
*/
|
||||||
class CreateNewContent extends Controller
|
class CreateNewContent extends Controller
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var File
|
|
||||||
*/
|
|
||||||
private $file;
|
|
||||||
/**
|
/**
|
||||||
* @var IContent
|
* @var IContent
|
||||||
*/
|
*/
|
||||||
@@ -36,71 +29,63 @@ class CreateNewContent extends Controller
|
|||||||
* @var IModuleRepository
|
* @var IModuleRepository
|
||||||
*/
|
*/
|
||||||
private $module;
|
private $module;
|
||||||
|
/**
|
||||||
|
* @var ICategory
|
||||||
|
*/
|
||||||
|
private $category;
|
||||||
|
/**
|
||||||
|
* @var ITemplate
|
||||||
|
*/
|
||||||
|
private $template;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreateNewContent constructor.
|
* CreateNewContent constructor.
|
||||||
*
|
*
|
||||||
* Sets File and Content models into class variables
|
* Sets File and Content models into class variables
|
||||||
*
|
*
|
||||||
* @param File $file
|
* @param IContent|Content $content
|
||||||
* @param Content $content
|
|
||||||
* @param IModuleRepository $module
|
* @param IModuleRepository $module
|
||||||
|
* @param ICategory $category
|
||||||
|
*
|
||||||
|
* @param ITemplate $template
|
||||||
|
*
|
||||||
|
* @internal param File $file
|
||||||
*/
|
*/
|
||||||
public function __construct(File $file, IContent $content, IModuleRepository $module)
|
public function __construct(IContent $content, IModuleRepository $module, ICategory $category, ITemplate $template)
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->file = $file;
|
|
||||||
$this->content = $content;
|
$this->content = $content;
|
||||||
$this->module = $module;
|
$this->module = $module;
|
||||||
|
$this->category = $category;
|
||||||
|
$this->template = $template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display form for new content page
|
* Display form for new content page
|
||||||
*
|
*
|
||||||
* @param $moduleId
|
* @param $module
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||||
*/
|
*/
|
||||||
public function create($moduleId)
|
public function create($module)
|
||||||
{
|
{
|
||||||
$module = Module::findOrFail($moduleId);
|
$module = $this->module->getOne($module);
|
||||||
$statuses = ContentStatuses::getWithTranslations();
|
$statuses = ContentStatuses::getWithTranslations();
|
||||||
|
$pageHeading = $this->module->getCreateContentTitle($module);
|
||||||
|
$templates = $this->template->getForModule($module);
|
||||||
|
$categories = $this->category->getForModule($module);
|
||||||
|
|
||||||
// set default page title
|
$page = $this->content->getOne();
|
||||||
$pageHeading = trans('admin/contents.new', ['name' => trans($module->name)]);
|
|
||||||
if (is_callable([$module->handler, 'getCreateNewTitle'])) {
|
|
||||||
$pageHeading = call_user_func([$module->handler, 'getCreateNewTitle']);
|
|
||||||
}
|
|
||||||
|
|
||||||
// get list of usable templates
|
|
||||||
$templates = Template::where('module_id', $moduleId)
|
|
||||||
->select(['template_name', 'name', 'description'])
|
|
||||||
->get();
|
|
||||||
|
|
||||||
// add categories, if supported
|
|
||||||
$categoryModule = ModuleInstance::get('categories');
|
|
||||||
$categories = [];
|
|
||||||
if ($module->support_categories && !is_null($categoryModule) && $categoryModule->enabled()) {
|
|
||||||
$categories = Category::where('module_id', $moduleId)
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
// create default content object
|
|
||||||
$this->content->status = IContent::STATUS_DRAFT;
|
|
||||||
|
|
||||||
// render view
|
// render view
|
||||||
return view('admin.content.new', [
|
return view('admin.content.new', [
|
||||||
'pageHeading' => $pageHeading,
|
'pageHeading' => $pageHeading,
|
||||||
'contentStatuses' => $statuses,
|
'contentStatuses' => $statuses,
|
||||||
'templates' => $templates,
|
'templates' => $templates,
|
||||||
'moduleId' => $moduleId,
|
|
||||||
'module' => $module,
|
'module' => $module,
|
||||||
'categories' => $categories,
|
'categories' => $categories,
|
||||||
'page' => $this->content,
|
'page' => $page,
|
||||||
'rootPages' => $this->content->getOverview()
|
'rootPages' => $this->content->getOverview(),
|
||||||
->get(),
|
|
||||||
'moduleName' => trans($module->name),
|
|
||||||
'extraData' => call_user_func([$module->handler, 'loadExtraData'], $this->content),
|
|
||||||
'formSectionNames' => call_user_func([$module->handler, 'getExtendedFormSections']),
|
'formSectionNames' => call_user_func([$module->handler, 'getExtendedFormSections']),
|
||||||
'formSections' => call_user_func([$module->handler, 'getExtendedFormInputsCreate']),
|
'formSections' => call_user_func([$module->handler, 'getExtendedFormInputsCreate']),
|
||||||
]);
|
]);
|
||||||
@@ -116,7 +101,7 @@ class CreateNewContent extends Controller
|
|||||||
*/
|
*/
|
||||||
public function store(Request $request, $moduleId)
|
public function store(Request $request, $moduleId)
|
||||||
{
|
{
|
||||||
$module = Module::findOrFail($moduleId);
|
$module = $this->module->getOne($moduleId);
|
||||||
|
|
||||||
// create new page
|
// create new page
|
||||||
Interaction::handle($request, new NewContent(), $module->handler);
|
Interaction::handle($request, new NewContent(), $module->handler);
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ use Illuminate\Support\Facades\Event;
|
|||||||
use Modules\Categories\Entities\Category;
|
use Modules\Categories\Entities\Category;
|
||||||
use Pingpong\Modules\Facades\Module as ModuleInstance;
|
use Pingpong\Modules\Facades\Module as ModuleInstance;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
use App\CMS\Contracts\Repositories\Content as IContent;
|
||||||
|
use App\CMS\Contracts\Repositories\Module as IModuleRepository;
|
||||||
|
use App\CMS\Contracts\Repositories\Template as ITemplate;
|
||||||
|
use Modules\Categories\Contracts\Repositories\Category as ICategory;
|
||||||
|
|
||||||
class EditContent extends Controller
|
class EditContent extends Controller
|
||||||
{
|
{
|
||||||
@@ -29,66 +33,70 @@ class EditContent extends Controller
|
|||||||
* @var File
|
* @var File
|
||||||
*/
|
*/
|
||||||
private $file;
|
private $file;
|
||||||
|
/**
|
||||||
|
* @var IContent
|
||||||
|
*/
|
||||||
|
private $content;
|
||||||
|
/**
|
||||||
|
* @var IModuleRepository
|
||||||
|
*/
|
||||||
|
private $module;
|
||||||
|
/**
|
||||||
|
* @var ICategory
|
||||||
|
*/
|
||||||
|
private $category;
|
||||||
|
/**
|
||||||
|
* @var ITemplate
|
||||||
|
*/
|
||||||
|
private $template;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EditContent constructor.
|
* EditContent constructor.
|
||||||
*
|
*
|
||||||
* Load ContentHistory and File into this controller
|
* Load ContentHistory and File into this controller
|
||||||
*
|
*
|
||||||
* @param ContentHistory $history
|
* @param ContentHistory $history
|
||||||
* @param File $file
|
* @param File $file
|
||||||
|
* @param IContent $content
|
||||||
|
* @param IModuleRepository $module
|
||||||
|
* @param ICategory $category
|
||||||
|
* @param ITemplate $template
|
||||||
*/
|
*/
|
||||||
public function __construct(ContentHistory $history, File $file)
|
public function __construct(ContentHistory $history, File $file, IContent $content, IModuleRepository $module, ICategory $category, ITemplate $template)
|
||||||
{
|
{
|
||||||
$this->history = $history;
|
$this->history = $history;
|
||||||
$this->file = $file;
|
$this->file = $file;
|
||||||
|
$this->content = $content;
|
||||||
|
$this->module = $module;
|
||||||
|
$this->category = $category;
|
||||||
|
$this->template = $template;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display form for editing static page
|
* Display form for editing static page
|
||||||
*
|
*
|
||||||
* @param $id
|
* @param $url
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||||
*/
|
*/
|
||||||
public function edit($id)
|
public function edit($url)
|
||||||
{
|
{
|
||||||
// select all content statuses
|
|
||||||
$statuses = ContentStatuses::getWithTranslations();
|
$statuses = ContentStatuses::getWithTranslations();
|
||||||
|
$page = $this->content->getOne($url);
|
||||||
// try to find requested page
|
|
||||||
$page = Content::findOrFail($id);
|
|
||||||
$page->module_settings = json_decode($page->module_settings);
|
|
||||||
|
|
||||||
// get module ID
|
// get module ID
|
||||||
$module = Module::where('handler', $page->module_handler)
|
$module = Module::where('handler', $page->module_handler)
|
||||||
->firstOrFail();
|
->firstOrFail();
|
||||||
|
|
||||||
$pageHeading = trans('admin/contents.edit', ['name' => e($page->title)]);
|
$pageHeading = $this->module->getUpdateContentTitle($module);
|
||||||
if (is_callable([$module->handler, 'getEditTitle'])) {
|
$templates = $this->template->getForModule($module);
|
||||||
$pageHeading = call_user_func([$module->handler, 'getEditTitle'], $page);
|
$categories = $this->category->getForModule($module);
|
||||||
}
|
$history = $this->history->getStructuredHistoryOf($page);
|
||||||
|
|
||||||
// get all Blade templates for rendering page
|
|
||||||
$templates = Template::where('module_id', $module->id)
|
|
||||||
->select(['template_name', 'name', 'description'])
|
|
||||||
->get();
|
|
||||||
|
|
||||||
// get module for Categories - PingPong module
|
|
||||||
$categoryModule = ModuleInstance::get('categories');
|
|
||||||
|
|
||||||
// add categories, if supported
|
|
||||||
$categories = [];
|
|
||||||
if ($module->support_categories && !is_null($categoryModule) && $categoryModule->enabled()) {
|
|
||||||
$categories = Category::where('module_id', $module->id)
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
// modify data for edit form according to installed template
|
// modify data for edit form according to installed template
|
||||||
call_user_func_array([CurrentTemplate::handler(), 'beforePopulatingEditForm'], [&$page]);
|
call_user_func_array([CurrentTemplate::handler(), 'beforePopulatingEditForm'], [&$page]);
|
||||||
|
|
||||||
$history = $this->history->getStructuredHistoryOf($page);
|
|
||||||
|
|
||||||
// render view
|
// render view
|
||||||
return view('admin.content.edit', [
|
return view('admin.content.edit', [
|
||||||
'pageHeading' => $pageHeading,
|
'pageHeading' => $pageHeading,
|
||||||
@@ -96,11 +104,8 @@ class EditContent extends Controller
|
|||||||
'page' => $page,
|
'page' => $page,
|
||||||
'module' => $module,
|
'module' => $module,
|
||||||
'categories' => $categories,
|
'categories' => $categories,
|
||||||
'rootPages' => $page->getOverview()
|
'rootPages' => $this->content->getOverview(),
|
||||||
->where('contents.id', '!=', $page->id)
|
|
||||||
->get(),
|
|
||||||
'templates' => $templates,
|
'templates' => $templates,
|
||||||
'extraData' => call_user_func([$page->module_handler, 'loadExtraData'], $page),
|
|
||||||
'formSectionNames' => call_user_func([$page->module_handler, 'getExtendedFormSections']),
|
'formSectionNames' => call_user_func([$page->module_handler, 'getExtendedFormSections']),
|
||||||
'formSections' => call_user_func([$page->module_handler, 'getExtendedFormInputsEdit']),
|
'formSections' => call_user_func([$page->module_handler, 'getExtendedFormInputsEdit']),
|
||||||
'historySize' => count($history['changesets'])
|
'historySize' => count($history['changesets'])
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
Route::group(['namespace' => 'Contents'], function () {
|
Route::group(['namespace' => 'Contents'], function () {
|
||||||
// list of all static pages
|
// list of all static pages
|
||||||
Route::get('content/overview/{moduleId?}/{status?}', 'ContentOverview@index')
|
Route::get('content/overview/{module?}', 'ContentOverview@index')
|
||||||
->name('content.overview');
|
->name('content.overview');
|
||||||
|
|
||||||
// form for creating new static page
|
// form for creating new static page
|
||||||
Route::get('content/new/{moduleId}', 'CreateNewContent@create')
|
Route::get('content/new/{module}', 'CreateNewContent@create')
|
||||||
->name('content.new');
|
->name('content.new');
|
||||||
|
|
||||||
// form for editing existing static page
|
// form for editing existing static page
|
||||||
Route::get('content/edit/{id}', 'EditContent@edit')
|
Route::get('content/edit/{url}', 'EditContent@edit')
|
||||||
->name('content.edit');
|
->name('content.edit');
|
||||||
|
|
||||||
// post method for creating new static page
|
// post method for creating new static page
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Models\Content;
|
namespace App\Models\Content;
|
||||||
|
|
||||||
use App\Events\CreateNewContent;
|
|
||||||
use App\Events\Event;
|
|
||||||
use App\Models\FileManager\File;
|
use App\Models\FileManager\File;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@@ -44,7 +42,7 @@ class Content extends Model
|
|||||||
*/
|
*/
|
||||||
public function history()
|
public function history()
|
||||||
{
|
{
|
||||||
return $this->hasMany(\App\Models\Content\ContentHistory::class);
|
return $this->hasMany(ContentHistory::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ use Illuminate\Database\Eloquent\Model;
|
|||||||
|
|
||||||
class Template extends Model
|
class Template extends Model
|
||||||
{
|
{
|
||||||
use ModelTraits\Template;
|
|
||||||
public $timestamps = true;
|
public $timestamps = true;
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'template_name',
|
'template_name',
|
||||||
@@ -16,10 +15,13 @@ class Template extends Model
|
|||||||
'description',
|
'description',
|
||||||
'editable'
|
'editable'
|
||||||
];
|
];
|
||||||
const EDITED_TEMPLATES_DIRECTORY = 'custom';
|
|
||||||
const ASSETS_DIRECTORY = 'assets';
|
/**
|
||||||
const MODULES_DIRECTORY = 'modules';
|
* Template path where this template is stored
|
||||||
const TEMPLATE_SUFFIX = '.blade.php';
|
*
|
||||||
const CUSTOM_EDIT_DIRECTORY = 1;
|
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||||
const ORIGINAL_DIRECTORY = 2;
|
*/
|
||||||
|
public function path() {
|
||||||
|
return $this->belongsTo(TemplatePath::class, 'path');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -4,9 +4,6 @@ namespace App\Models\Templates;
|
|||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
/**
|
|
||||||
* Class CustomFieldType
|
|
||||||
*/
|
|
||||||
class TemplatePath extends Model
|
class TemplatePath extends Model
|
||||||
{
|
{
|
||||||
public $timestamps = true;
|
public $timestamps = true;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ namespace App\Providers;
|
|||||||
|
|
||||||
use App\CMS\Contracts\Repositories\Content as IContent;
|
use App\CMS\Contracts\Repositories\Content as IContent;
|
||||||
use App\CMS\Contracts\Repositories\Module as IModule;
|
use App\CMS\Contracts\Repositories\Module as IModule;
|
||||||
|
use App\CMS\Contracts\Repositories\Template as ITemplate;
|
||||||
use App\CMS\Handlers\Registrators\SearchEngineRegistrator;
|
use App\CMS\Handlers\Registrators\SearchEngineRegistrator;
|
||||||
use App\CMS\Handlers\Registrators\SettingsExtensionRegistrator;
|
use App\CMS\Handlers\Registrators\SettingsExtensionRegistrator;
|
||||||
use App\CMS\Handlers\Registrators\TemplateRegistrator;
|
use App\CMS\Handlers\Registrators\TemplateRegistrator;
|
||||||
@@ -14,6 +15,7 @@ use App\CMS\Handlers\Search\Presenters\AdminContent as AdminContentPresenter;
|
|||||||
use App\CMS\Handlers\Search\Presenters\AdminFiles;
|
use App\CMS\Handlers\Search\Presenters\AdminFiles;
|
||||||
use App\CMS\Repositories\Content\Content as ContentRepository;
|
use App\CMS\Repositories\Content\Content as ContentRepository;
|
||||||
use App\CMS\Repositories\Module as ModuleRepository;
|
use App\CMS\Repositories\Module as ModuleRepository;
|
||||||
|
use App\CMS\Repositories\Templates\Template as TemplateRepository;
|
||||||
use App\CMS\Widgets\HtmlCode\HtmlCode;
|
use App\CMS\Widgets\HtmlCode\HtmlCode;
|
||||||
use App\CMS\Widgets\Menu\Menu;
|
use App\CMS\Widgets\Menu\Menu;
|
||||||
use Barryvdh\Debugbar\ServiceProvider as DebugBarServiceProvider;
|
use Barryvdh\Debugbar\ServiceProvider as DebugBarServiceProvider;
|
||||||
@@ -41,6 +43,7 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
|
|
||||||
$this->app->bind(IContent::class, ContentRepository::class);
|
$this->app->bind(IContent::class, ContentRepository::class);
|
||||||
$this->app->bind(IModule::class, ModuleRepository::class);
|
$this->app->bind(IModule::class, ModuleRepository::class);
|
||||||
|
$this->app->bind(ITemplate::class, TemplateRepository::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,18 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Modules\Blog\Article\Handlers;
|
namespace Modules\Blog\Article\Handlers;
|
||||||
|
|
||||||
use App\CMS\Enumerations\ModulesHandlerToId;
|
use App\CMS\Contracts\Content\AdvancedContentModifier;
|
||||||
|
use App\CMS\Contracts\Modules\InstallableModule;
|
||||||
use App\CMS\Handlers\Contracts\ContentTitles;
|
use App\CMS\Handlers\Contracts\ContentTitles;
|
||||||
use App\CMS\Handlers\Handler;
|
use App\CMS\Handlers\Handler;
|
||||||
use App\Http\Controllers\Admin\Contents\EditContent;
|
use App\Http\Controllers\Admin\Contents\EditContent;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests\Request;
|
use App\Http\Requests\Request;
|
||||||
use App\Models\ActionLogType;
|
use App\Models\ActionLog\ActionLogType;
|
||||||
use App\Models\Content\Content;
|
use App\Models\Content\Content;
|
||||||
|
use App\Models\Module;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Modules\Blog\Article\Entities\Comment;
|
use Modules\Blog\Article\Entities\Comment;
|
||||||
|
|
||||||
class Article extends Handler implements ContentTitles
|
class Article extends Handler implements ContentTitles, AdvancedContentModifier, InstallableModule
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Render given module into visitor area.
|
* Render given module into visitor area.
|
||||||
@@ -109,22 +111,13 @@ class Article extends Handler implements ContentTitles
|
|||||||
}
|
}
|
||||||
|
|
||||||
$blogSubmenu->dropdown(trans('article::module.name'), function ($sub) {
|
$blogSubmenu->dropdown(trans('article::module.name'), function ($sub) {
|
||||||
$sub->route('content.new', trans('article::article.new'), ['id' => self::getModuleId()], 10, ['icon' => 'fa fa-fw fa-pencil']);
|
$sub->route('content.new', trans('article::article.new'), ['id' => config('article.alias')], 10, ['icon' => 'fa fa-fw fa-pencil']);
|
||||||
$sub->route('content.overview', trans('article::article.overview'), ['id' => self::getModuleId()], 30, ['icon' => 'fa fa-fw fa-book']);
|
$sub->route('content.overview', trans('article::article.overview'), ['id' => config('article.alias')], 30, ['icon' => 'fa fa-fw fa-book']);
|
||||||
}, 10, ['icon' => 'fa fa-fw fa-book']);
|
}, 10, ['icon' => 'fa fa-fw fa-book']);
|
||||||
|
|
||||||
$blogSubmenu->route('comments.overview', trans('article::module.commentsOverview'), [], 20, ['icon' => 'fa fa-fw fa-commenting-o']);
|
$blogSubmenu->route('comments.overview', trans('article::module.commentsOverview'), [], 20, ['icon' => 'fa fa-fw fa-commenting-o']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getModuleId()
|
|
||||||
{
|
|
||||||
$handler = config('article.handler');
|
|
||||||
$allModules = ModulesHandlerToId::getWithTranslations();
|
|
||||||
$moduleId = isset($allModules[$handler]) ? $allModules[$handler] : null;
|
|
||||||
|
|
||||||
return $moduleId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install module
|
* Install module
|
||||||
*/
|
*/
|
||||||
@@ -153,6 +146,19 @@ class Article extends Handler implements ContentTitles
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstalls module
|
||||||
|
*
|
||||||
|
* @param Module $module
|
||||||
|
*
|
||||||
|
* @return mixed|void
|
||||||
|
*/
|
||||||
|
public static function uninstall(Module $module)
|
||||||
|
{
|
||||||
|
ActionLogType::whereIn('string_id', ['commentCreated', 'commentDeleted', 'commentApproved'])
|
||||||
|
->delete();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get translated title for pages overview of given type.
|
* Get translated title for pages overview of given type.
|
||||||
*
|
*
|
||||||
@@ -186,4 +192,38 @@ class Article extends Handler implements ContentTitles
|
|||||||
{
|
{
|
||||||
return trans('article::module.editArticle');
|
return trans('article::module.editArticle');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method called right after content page is marked as deleted
|
||||||
|
*
|
||||||
|
* This method is supposed to clean after "deleted" page.
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function delete(Content $content)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load some extra data for content management form?
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function loadExtraData(Content $content)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this module support categories?
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public static function supportCategories()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
namespace Modules\Categories\Contracts\Repositories;
|
||||||
|
|
||||||
|
use App\CMS\Contracts\Repositories\BaseRepository;
|
||||||
|
use App\Models\Module;
|
||||||
|
|
||||||
|
interface Category {
|
||||||
|
public function getForModule(Module $module);
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ use App\Models\Content\Content;
|
|||||||
use App\Models\Module;
|
use App\Models\Module;
|
||||||
use Franzose\ClosureTable\Models\Entity;
|
use Franzose\ClosureTable\Models\Entity;
|
||||||
|
|
||||||
class Category extends Entity implements CategoryInterface
|
class Category extends Entity
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The table associated with the model.
|
* The table associated with the model.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ namespace Modules\Categories\Entities;
|
|||||||
|
|
||||||
use Franzose\ClosureTable\Models\ClosureTable;
|
use Franzose\ClosureTable\Models\ClosureTable;
|
||||||
|
|
||||||
class CategoryClosure extends ClosureTable implements CategoryClosureInterface
|
class CategoryClosure extends ClosureTable
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The table associated with the model.
|
* The table associated with the model.
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace Modules\Categories\Entities;
|
|
||||||
|
|
||||||
use Franzose\ClosureTable\Contracts\ClosureTableInterface;
|
|
||||||
|
|
||||||
interface CategoryClosureInterface extends ClosureTableInterface
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace App;namespace Modules\Categories\Entities;
|
|
||||||
use Franzose\ClosureTable\Contracts\EntityInterface;
|
|
||||||
|
|
||||||
interface CategoryInterface extends EntityInterface
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,21 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Modules\Categories\Handlers;
|
namespace Modules\Categories\Handlers;
|
||||||
|
|
||||||
use App\CMS\Enumerations\ModulesHandlerToId;
|
use App\CMS\Contracts\Modules\BaseModuleHandler;
|
||||||
use App\CMS\Handlers\BaseHandler;
|
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
||||||
class Categories extends BaseHandler
|
class Categories implements BaseModuleHandler
|
||||||
{
|
{
|
||||||
public static function getModuleId()
|
|
||||||
{
|
|
||||||
$handler = config('categories.handler');
|
|
||||||
$allModules = ModulesHandlerToId::getWithTranslations();
|
|
||||||
$moduleId = isset($allModules[$handler]) ? $allModules[$handler] : null;
|
|
||||||
|
|
||||||
return $moduleId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register admin menu (or multiple ones)
|
* Register admin menu (or multiple ones)
|
||||||
*
|
*
|
||||||
@@ -26,8 +16,6 @@ class Categories extends BaseHandler
|
|||||||
*/
|
*/
|
||||||
public static function registerAdminMenu(User $user)
|
public static function registerAdminMenu(User $user)
|
||||||
{
|
{
|
||||||
parent::registerAdminMenu($user);
|
|
||||||
|
|
||||||
// register links in admin menu
|
// register links in admin menu
|
||||||
$menu = \Menu::instance('mainMenu');
|
$menu = \Menu::instance('mainMenu');
|
||||||
$menu->dropdown(trans('categories::categories.name'), function ($sub) {
|
$menu->dropdown(trans('categories::categories.name'), function ($sub) {
|
||||||
@@ -35,14 +23,4 @@ class Categories extends BaseHandler
|
|||||||
$sub->route('categories.overview', trans('categories::categories.overview'), [], 30, ['icon' => 'fa fa-fw fa-tags']);
|
$sub->route('categories.overview', trans('categories::categories.overview'), [], 30, ['icon' => 'fa fa-fw fa-tags']);
|
||||||
}, 55, ['icon' => 'fa fa-fw fa-tags']);
|
}, 55, ['icon' => 'fa fa-fw fa-tags']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Install module
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function install()
|
|
||||||
{
|
|
||||||
// nothing to install
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
<?php namespace Modules\Categories\Providers;
|
<?php
|
||||||
|
namespace Modules\Categories\Providers;
|
||||||
|
|
||||||
use App\Providers\ModuleServiceProvider;
|
use App\Providers\ModuleServiceProvider;
|
||||||
|
use Modules\Categories\Contracts\Repositories\Category as ICategory;
|
||||||
|
use Modules\Categories\Repositories\Category as Category;
|
||||||
|
|
||||||
class CategoriesServiceProvider extends ModuleServiceProvider
|
class CategoriesServiceProvider extends ModuleServiceProvider
|
||||||
{
|
{
|
||||||
@@ -9,6 +12,13 @@ class CategoriesServiceProvider extends ModuleServiceProvider
|
|||||||
$this->alias = 'categories';
|
$this->alias = 'categories';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function boot()
|
||||||
|
{
|
||||||
|
parent::boot();
|
||||||
|
|
||||||
|
$this->app->bind(ICategory::class, Category::class);
|
||||||
|
}
|
||||||
|
|
||||||
protected function setModulePath()
|
protected function setModulePath()
|
||||||
{
|
{
|
||||||
$this->path = __DIR__;
|
$this->path = __DIR__;
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
namespace Modules\Categories\Repositories;
|
||||||
|
|
||||||
|
use App\Models\Module;
|
||||||
|
use Modules\Categories\Entities\Category as CategoryModel;
|
||||||
|
use Modules\Categories\Contracts\Repositories\Category as ICategory;
|
||||||
|
use Pingpong\Modules\Facades\Module as ModuleInstance;
|
||||||
|
|
||||||
|
class Category implements ICategory
|
||||||
|
{
|
||||||
|
public function getForModule(Module $module)
|
||||||
|
{
|
||||||
|
$categoryModule = ModuleInstance::get('categories');
|
||||||
|
$categories = [];
|
||||||
|
if ($module->support_categories && !is_null($categoryModule) && $categoryModule->enabled()) {
|
||||||
|
$categories = CategoryModel::where('module_id', $module->id)
|
||||||
|
->get();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $categories;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Modules\ContactForm\Handlers;
|
namespace Modules\ContactForm\Handlers;
|
||||||
|
|
||||||
|
use App\CMS\Contracts\Content\AdvancedContentModifier;
|
||||||
use App\CMS\Enumerations\ModulesHandlerToId;
|
use App\CMS\Enumerations\ModulesHandlerToId;
|
||||||
use App\CMS\Handlers\Contracts\ContentTitles;
|
use App\CMS\Handlers\Contracts\ContentTitles;
|
||||||
use App\CMS\Handlers\Handler;
|
use App\CMS\Handlers\Handler;
|
||||||
@@ -9,7 +10,7 @@ use App\Http\Requests\Request;
|
|||||||
use App\Models\Content\Content;
|
use App\Models\Content\Content;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
||||||
class ContactForm extends Handler implements ContentTitles
|
class ContactForm extends Handler implements ContentTitles, AdvancedContentModifier
|
||||||
{
|
{
|
||||||
public static function getHistoryHandler()
|
public static function getHistoryHandler()
|
||||||
{
|
{
|
||||||
@@ -152,27 +153,6 @@ class ContactForm extends Handler implements ContentTitles
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Install module
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function install()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load some extra data for content management form?
|
|
||||||
*
|
|
||||||
* @param Content $content
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function loadExtraData(Content $content)
|
|
||||||
{
|
|
||||||
// nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get translated title for pages overview of given type.
|
* Get translated title for pages overview of given type.
|
||||||
*
|
*
|
||||||
@@ -206,4 +186,38 @@ class ContactForm extends Handler implements ContentTitles
|
|||||||
{
|
{
|
||||||
return trans('contactform::module.editForm');
|
return trans('contactform::module.editForm');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this module support categories?
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public static function supportCategories()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method called right after content page is marked as deleted
|
||||||
|
*
|
||||||
|
* This method is supposed to clean after "deleted" page.
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function delete(Content $content)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load some extra data for content management form?
|
||||||
|
*
|
||||||
|
* @param Content $content
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function loadExtraData(Content $content)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -4,8 +4,6 @@ namespace Modules\StaticPages\Handlers;
|
|||||||
use App\CMS\Enumerations\ModulesHandlerToId;
|
use App\CMS\Enumerations\ModulesHandlerToId;
|
||||||
use App\CMS\Handlers\Contracts\ContentTitles;
|
use App\CMS\Handlers\Contracts\ContentTitles;
|
||||||
use App\CMS\Handlers\Handler;
|
use App\CMS\Handlers\Handler;
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Http\Requests\Request;
|
|
||||||
use App\Models\Content\Content;
|
use App\Models\Content\Content;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
||||||
@@ -13,93 +11,16 @@ class StaticPage extends Handler implements ContentTitles
|
|||||||
{
|
{
|
||||||
public static function registerAdminMenu(User $user)
|
public static function registerAdminMenu(User $user)
|
||||||
{
|
{
|
||||||
parent::registerAdminMenu($user);
|
|
||||||
|
|
||||||
// register links in admin menu
|
// register links in admin menu
|
||||||
$menu = \Menu::instance('mainMenu');
|
$menu = \Menu::instance('mainMenu');
|
||||||
$submenu = $menu->whereTitle(trans('admin/mainMenu.contentPages'));
|
$submenu = $menu->whereTitle(trans('admin/mainMenu.contentPages'));
|
||||||
|
|
||||||
$submenu->dropdown(trans('staticpages::adminMenu.staticPages'), function ($submenu) use ($user) {
|
$submenu->dropdown(trans('staticpages::adminMenu.staticPages'), function ($submenu) use ($user) {
|
||||||
$submenu->route('content.new', trans('staticpages::adminMenu.new'), ['moduleId' => self::getModuleId()], 10, ['icon' => 'fa fa-plus']);
|
$submenu->route('content.new', trans('staticpages::adminMenu.new'), ['module' => config('staticpages.alias')], 10, ['icon' => 'fa fa-plus']);
|
||||||
$submenu->route('content.overview', trans('staticpages::adminMenu.overview'), ['moduleId' => self::getModuleId()], 20, ['icon' => 'fa fa-list']);
|
$submenu->route('content.overview', trans('staticpages::adminMenu.overview'), ['module' => config('staticpages.alias')], 20, ['icon' => 'fa fa-list']);
|
||||||
}, 15, ['icon' => 'fa fa-newspaper-o']);
|
}, 15, ['icon' => 'fa fa-newspaper-o']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getModuleId()
|
|
||||||
{
|
|
||||||
$handler = config('staticpages.handler');
|
|
||||||
$allModules = ModulesHandlerToId::getWithTranslations();
|
|
||||||
$moduleId = isset($allModules[$handler]) ? $allModules[$handler] : null;
|
|
||||||
|
|
||||||
return $moduleId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Does given module manage content? Or is it just module with widgets/something internal/something absolutely else?
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function managesContent()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save module-specific values into database
|
|
||||||
*
|
|
||||||
* @param Content $content
|
|
||||||
* @param Request $request
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function createNew(Content &$content, Request $request)
|
|
||||||
{
|
|
||||||
// There is nothing more we can save. Static pages are only text saved into database.
|
|
||||||
// This funcionality is already covered in saving content page alone.
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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 string $revisionId
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function edit(Content &$content, Request $request, $revisionId)
|
|
||||||
{
|
|
||||||
// There is nothing more we can save. Static pages are only text saved into database.
|
|
||||||
// This funcionality is already covered in saving content page alone.
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Install module
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function install()
|
|
||||||
{
|
|
||||||
// nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load some extra data for content management form?
|
|
||||||
*
|
|
||||||
* @param Content $content
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function loadExtraData(Content $content)
|
|
||||||
{
|
|
||||||
// nothing to do
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get translated title for pages overview of given type.
|
* Get translated title for pages overview of given type.
|
||||||
*
|
*
|
||||||
@@ -133,4 +54,24 @@ class StaticPage extends Handler implements ContentTitles
|
|||||||
{
|
{
|
||||||
return trans('staticpages::module.editPage');
|
return trans('staticpages::module.editPage');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does given module manage content? Or is it just module with widgets/something internal/something absolutely else?
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function managesContent()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this module support categories?
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public static function supportCategories()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form method="POST" enctype="multipart/form-data" action="{{route('content.newPost', ['moduleId' => $moduleId])}}">
|
<form method="POST" enctype="multipart/form-data" action="{{route('content.newPost', ['moduleId' => $module->id])}}">
|
||||||
{!! csrf_field() !!}
|
{!! csrf_field() !!}
|
||||||
|
|
||||||
@include('admin.content.formInputs')
|
@include('admin.content.formInputs')
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
@foreach($pages as $page)
|
@foreach($pages as $page)
|
||||||
<div class="row p-tb-15">
|
<div class="row p-tb-15">
|
||||||
<div class="col-md-1 hidden-sm-down text-center with-placeholder">
|
<div class="col-md-1 hidden-sm-down text-center with-placeholder">
|
||||||
<a href="{{route('content.edit', ['id' => $page->id])}}">
|
<a href="{{route('content.edit', ['url' => $page->url])}}">
|
||||||
@if(!view()->exists(\App\CMS\Helpers\Template::name($page->template, false)))
|
@if(!view()->exists(\App\CMS\Helpers\Template::name($page->template, false)))
|
||||||
<i class="fa fa-2x text-warning fa-warning" data-toggle="tooltip"
|
<i class="fa fa-2x text-warning fa-warning" data-toggle="tooltip"
|
||||||
title="@lang('admin/contents.invalidTemplateSelected')"></i>
|
title="@lang('admin/contents.invalidTemplateSelected')"></i>
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-10 col-md-3 col-lg-4">
|
<div class="col-xs-10 col-md-3 col-lg-4">
|
||||||
<a href="{{route('content.edit', ['id' => $page->id])}}">
|
<a href="{{route('content.edit', ['url' => $page->url])}}">
|
||||||
{{$page->title}}
|
{{$page->title}}
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
@endif
|
@endif
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<a class="edit" href="{{route('content.edit', ['id' => $page->id])}}"
|
<a class="edit" href="{{route('content.edit', ['url' => $page->url])}}"
|
||||||
data-toggle="tooltip" title="@lang('admin/contents.editPlain')">
|
data-toggle="tooltip" title="@lang('admin/contents.editPlain')">
|
||||||
<i class="fa fa-pencil"></i>
|
<i class="fa fa-pencil"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -1,24 +1,25 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace Templates\Base\OnePage\Handlers;
|
namespace Templates\Base\OnePage\Handlers;
|
||||||
|
|
||||||
use App\CMS\Handlers\Contracts\TemplateHandler;
|
use App\CMS\Contracts\Modules\InstallableModule;
|
||||||
|
use App\CMS\Contracts\Modules\TemplateHandler;
|
||||||
use App\CMS\Helpers\CurrentTemplate;
|
use App\CMS\Helpers\CurrentTemplate;
|
||||||
use App\CMS\Helpers\PageRenderer;
|
use App\CMS\Helpers\PageRenderer;
|
||||||
use App\CMS\Helpers\Settings;
|
use App\CMS\Helpers\Settings;
|
||||||
use App\CMS\Helpers\Template;
|
use App\CMS\Helpers\Template;
|
||||||
use App\Models\ActionLogType;
|
use App\Models\ActionLog\ActionLogType;
|
||||||
use App\Models\Content\Content;
|
use App\Models\Content\Content;
|
||||||
use App\Models\Module;
|
use App\Models\Module;
|
||||||
use App\Models\Settings as SettingsModel;
|
use App\Models\Settings as SettingsModel;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Models\Widgets\Widget;
|
use App\Models\Widgets\Widget;
|
||||||
use App\Models\WidgetArea;
|
use App\Models\Widgets\WidgetArea;
|
||||||
use App\Models\WidgetInWidgetArea;
|
use App\Models\Widgets\WidgetInWidgetArea;
|
||||||
use App\Models\Widgets\WidgetType;
|
use App\Models\Widgets\WidgetType;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Templates\Base\OnePage\Widgets\OnePageMenu\OnePageMenu;
|
use Templates\Base\OnePage\Widgets\OnePageMenu\OnePageMenu;
|
||||||
|
|
||||||
abstract class OnePage implements TemplateHandler
|
abstract class OnePage implements TemplateHandler, InstallableModule
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Name of settings key for list of pages used on homepage
|
* Name of settings key for list of pages used on homepage
|
||||||
|
|||||||
Reference in New Issue
Block a user