2014-05-07 07:52:13 +00:00
|
|
|
<?php namespace Cms;
|
|
|
|
|
|
2015-05-02 04:43:14 +00:00
|
|
|
use App;
|
2014-05-14 13:24:20 +00:00
|
|
|
use Lang;
|
2014-10-02 22:55:55 +00:00
|
|
|
use Event;
|
2014-05-14 13:24:20 +00:00
|
|
|
use Backend;
|
|
|
|
|
use BackendMenu;
|
|
|
|
|
use BackendAuth;
|
|
|
|
|
use Backend\Classes\WidgetManager;
|
2014-05-07 07:52:13 +00:00
|
|
|
use October\Rain\Support\ModuleServiceProvider;
|
2014-07-19 02:05:50 +00:00
|
|
|
use System\Classes\SettingsManager;
|
2015-04-15 05:44:45 +00:00
|
|
|
use System\Classes\CombineAssets;
|
2014-08-06 11:42:09 +00:00
|
|
|
use Cms\Classes\ComponentManager;
|
2014-10-02 22:55:55 +00:00
|
|
|
use Cms\Classes\Page as CmsPage;
|
2017-02-07 18:43:40 +00:00
|
|
|
use Cms\Classes\CmsObject;
|
2016-06-02 21:22:05 +00:00
|
|
|
use Cms\Models\ThemeData;
|
2017-02-07 18:43:40 +00:00
|
|
|
use Cms\Models\ThemeLog;
|
2014-05-07 07:52:13 +00:00
|
|
|
|
|
|
|
|
class ServiceProvider extends ModuleServiceProvider
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Register the service provider.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function register()
|
|
|
|
|
{
|
|
|
|
|
parent::register('cms');
|
2014-05-14 13:24:20 +00:00
|
|
|
|
2015-05-02 04:43:14 +00:00
|
|
|
$this->registerComponents();
|
2017-02-07 18:43:40 +00:00
|
|
|
$this->registerThemeLogging();
|
2015-05-02 04:43:14 +00:00
|
|
|
$this->registerAssetBundles();
|
2016-06-02 21:22:05 +00:00
|
|
|
$this->registerCombinerEvents();
|
2015-05-02 04:43:14 +00:00
|
|
|
|
2015-06-27 01:04:44 +00:00
|
|
|
/*
|
|
|
|
|
* Backend specific
|
|
|
|
|
*/
|
|
|
|
|
if (App::runningInBackend()) {
|
2015-05-02 04:43:14 +00:00
|
|
|
$this->registerBackendNavigation();
|
2016-05-28 04:17:45 +00:00
|
|
|
$this->registerBackendReportWidgets();
|
2015-05-02 04:43:14 +00:00
|
|
|
$this->registerBackendPermissions();
|
|
|
|
|
$this->registerBackendWidgets();
|
|
|
|
|
$this->registerBackendSettings();
|
2015-06-27 01:04:44 +00:00
|
|
|
}
|
2015-05-02 04:43:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Bootstrap the module events.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function boot()
|
|
|
|
|
{
|
|
|
|
|
parent::boot('cms');
|
|
|
|
|
|
|
|
|
|
$this->bootMenuItemEvents();
|
2015-06-25 09:26:47 +00:00
|
|
|
$this->bootRichEditorEvents();
|
2015-05-02 04:43:14 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2017-02-07 18:43:40 +00:00
|
|
|
* Register components.
|
2015-05-02 04:43:14 +00:00
|
|
|
*/
|
|
|
|
|
protected function registerComponents()
|
|
|
|
|
{
|
|
|
|
|
ComponentManager::instance()->registerComponents(function ($manager) {
|
2017-03-15 20:00:39 +00:00
|
|
|
$manager->registerComponent('Cms\Components\ViewBag', 'viewBag');
|
2015-05-02 04:43:14 +00:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2017-02-07 18:43:40 +00:00
|
|
|
* Registers theme logging on templates.
|
|
|
|
|
*/
|
|
|
|
|
protected function registerThemeLogging()
|
|
|
|
|
{
|
|
|
|
|
CmsObject::extend(function($model) {
|
|
|
|
|
ThemeLog::bindEventsToModel($model);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Register asset bundles.
|
2015-05-02 04:43:14 +00:00
|
|
|
*/
|
|
|
|
|
protected function registerAssetBundles()
|
|
|
|
|
{
|
2014-05-14 13:24:20 +00:00
|
|
|
/*
|
2015-05-02 04:43:14 +00:00
|
|
|
* Register asset bundles
|
2014-05-14 13:24:20 +00:00
|
|
|
*/
|
2015-05-02 04:43:14 +00:00
|
|
|
CombineAssets::registerCallback(function($combiner) {
|
|
|
|
|
$combiner->registerBundle('~/modules/cms/widgets/mediamanager/assets/js/mediamanager-browser.js');
|
2016-02-29 03:52:21 +00:00
|
|
|
$combiner->registerBundle('~/modules/cms/widgets/mediamanager/assets/less/mediamanager.less');
|
2015-05-02 04:43:14 +00:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2016-06-02 21:22:05 +00:00
|
|
|
/**
|
|
|
|
|
* Registers events for the asset combiner.
|
|
|
|
|
*/
|
|
|
|
|
protected function registerCombinerEvents()
|
|
|
|
|
{
|
|
|
|
|
if (App::runningInBackend() || App::runningInConsole()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Event::listen('cms.combiner.beforePrepare', function ($combiner, $assets) {
|
|
|
|
|
$filters = array_flatten($combiner->getFilters());
|
|
|
|
|
ThemeData::applyAssetVariablesToCombinerFilters($filters);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Event::listen('cms.combiner.getCacheKey', function ($combiner, $holder) {
|
|
|
|
|
$holder->key = $holder->key . ThemeData::getCombinerCacheKey();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2015-05-02 04:43:14 +00:00
|
|
|
/*
|
|
|
|
|
* Register navigation
|
|
|
|
|
*/
|
|
|
|
|
protected function registerBackendNavigation()
|
|
|
|
|
{
|
2014-10-10 23:56:53 +00:00
|
|
|
BackendMenu::registerCallback(function ($manager) {
|
2014-05-14 13:24:20 +00:00
|
|
|
$manager->registerMenuItems('October.Cms', [
|
|
|
|
|
'cms' => [
|
|
|
|
|
'label' => 'cms::lang.cms.menu_label',
|
|
|
|
|
'icon' => 'icon-magic',
|
2016-02-20 06:12:41 +00:00
|
|
|
'iconSvg' => 'modules/cms/assets/images/cms-icon.svg',
|
2014-05-14 13:24:20 +00:00
|
|
|
'url' => Backend::url('cms'),
|
2016-10-28 23:23:50 +00:00
|
|
|
'permissions' => [
|
|
|
|
|
'cms.manage_content',
|
|
|
|
|
'cms.manage_assets',
|
|
|
|
|
'cms.manage_pages',
|
|
|
|
|
'cms.manage_layouts',
|
|
|
|
|
'cms.manage_partials'
|
|
|
|
|
],
|
2017-03-02 21:06:42 +00:00
|
|
|
'order' => 100,
|
2014-05-14 13:24:20 +00:00
|
|
|
'sideMenu' => [
|
|
|
|
|
'pages' => [
|
2014-11-10 09:35:20 +00:00
|
|
|
'label' => 'cms::lang.page.menu_label',
|
|
|
|
|
'icon' => 'icon-copy',
|
|
|
|
|
'url' => 'javascript:;',
|
2014-12-19 09:28:27 +00:00
|
|
|
'attributes' => ['data-menu-item' => 'pages'],
|
2014-11-10 09:35:20 +00:00
|
|
|
'permissions' => ['cms.manage_pages'],
|
2015-01-22 08:06:30 +00:00
|
|
|
'counterLabel' => 'cms::lang.page.unsaved_label'
|
2014-05-14 13:24:20 +00:00
|
|
|
],
|
|
|
|
|
'partials' => [
|
2014-11-10 09:35:20 +00:00
|
|
|
'label' => 'cms::lang.partial.menu_label',
|
|
|
|
|
'icon' => 'icon-tags',
|
|
|
|
|
'url' => 'javascript:;',
|
2014-12-19 09:28:27 +00:00
|
|
|
'attributes' => ['data-menu-item' => 'partials'],
|
2014-11-10 09:35:20 +00:00
|
|
|
'permissions' => ['cms.manage_partials'],
|
2015-01-22 08:06:30 +00:00
|
|
|
'counterLabel' => 'cms::lang.partial.unsaved_label'
|
2014-05-14 13:24:20 +00:00
|
|
|
],
|
|
|
|
|
'layouts' => [
|
2014-11-10 09:35:20 +00:00
|
|
|
'label' => 'cms::lang.layout.menu_label',
|
|
|
|
|
'icon' => 'icon-th-large',
|
|
|
|
|
'url' => 'javascript:;',
|
2014-12-19 09:28:27 +00:00
|
|
|
'attributes' => ['data-menu-item' => 'layouts'],
|
2014-11-10 09:35:20 +00:00
|
|
|
'permissions' => ['cms.manage_layouts'],
|
2015-01-22 08:06:30 +00:00
|
|
|
'counterLabel' => 'cms::lang.layout.unsaved_label'
|
2014-05-14 13:24:20 +00:00
|
|
|
],
|
|
|
|
|
'content' => [
|
2014-11-10 09:35:20 +00:00
|
|
|
'label' => 'cms::lang.content.menu_label',
|
|
|
|
|
'icon' => 'icon-file-text-o',
|
|
|
|
|
'url' => 'javascript:;',
|
2014-12-19 09:28:27 +00:00
|
|
|
'attributes' => ['data-menu-item' => 'content'],
|
2014-11-10 09:35:20 +00:00
|
|
|
'permissions' => ['cms.manage_content'],
|
2015-01-22 08:06:30 +00:00
|
|
|
'counterLabel' => 'cms::lang.content.unsaved_label'
|
2014-05-14 13:24:20 +00:00
|
|
|
],
|
|
|
|
|
'assets' => [
|
2014-11-10 09:35:20 +00:00
|
|
|
'label' => 'cms::lang.asset.menu_label',
|
|
|
|
|
'icon' => 'icon-picture-o',
|
|
|
|
|
'url' => 'javascript:;',
|
2014-12-19 09:28:27 +00:00
|
|
|
'attributes' => ['data-menu-item' => 'assets'],
|
2014-11-10 09:35:20 +00:00
|
|
|
'permissions' => ['cms.manage_assets'],
|
2015-01-22 08:06:30 +00:00
|
|
|
'counterLabel' => 'cms::lang.asset.unsaved_label'
|
2014-05-14 13:24:20 +00:00
|
|
|
],
|
|
|
|
|
'components' => [
|
|
|
|
|
'label' => 'cms::lang.component.menu_label',
|
|
|
|
|
'icon' => 'icon-puzzle-piece',
|
|
|
|
|
'url' => 'javascript:;',
|
2014-12-19 09:28:27 +00:00
|
|
|
'attributes' => ['data-menu-item' => 'components'],
|
2014-11-09 01:35:10 +00:00
|
|
|
'permissions' => ['cms.manage_pages', 'cms.manage_layouts', 'cms.manage_partials']
|
2014-05-14 13:24:20 +00:00
|
|
|
]
|
|
|
|
|
]
|
2015-03-15 19:52:03 +00:00
|
|
|
],
|
|
|
|
|
'media' => [
|
|
|
|
|
'label' => 'cms::lang.media.menu_label',
|
|
|
|
|
'icon' => 'icon-folder',
|
2016-02-20 06:12:41 +00:00
|
|
|
'iconSvg' => 'modules/cms/assets/images/media-icon.svg',
|
2015-03-15 19:52:03 +00:00
|
|
|
'url' => Backend::url('cms/media'),
|
2015-06-27 01:50:46 +00:00
|
|
|
'permissions' => ['media.*'],
|
2017-03-02 21:06:42 +00:00
|
|
|
'order' => 200
|
2014-05-14 13:24:20 +00:00
|
|
|
]
|
|
|
|
|
]);
|
|
|
|
|
});
|
2015-05-02 04:43:14 +00:00
|
|
|
}
|
2014-05-14 13:24:20 +00:00
|
|
|
|
2016-05-28 04:17:45 +00:00
|
|
|
/*
|
|
|
|
|
* Register report widgets
|
|
|
|
|
*/
|
|
|
|
|
protected function registerBackendReportWidgets()
|
|
|
|
|
{
|
|
|
|
|
WidgetManager::instance()->registerReportWidgets(function ($manager) {
|
|
|
|
|
$manager->registerReportWidget('Cms\ReportWidgets\ActiveTheme', [
|
|
|
|
|
'label' => 'cms::lang.dashboard.active_theme.widget_title_default',
|
|
|
|
|
'context' => 'dashboard'
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2015-05-02 04:43:14 +00:00
|
|
|
/*
|
|
|
|
|
* Register permissions
|
|
|
|
|
*/
|
|
|
|
|
protected function registerBackendPermissions()
|
|
|
|
|
{
|
2014-10-10 23:56:53 +00:00
|
|
|
BackendAuth::registerCallback(function ($manager) {
|
2014-05-14 13:24:20 +00:00
|
|
|
$manager->registerPermissions('October.Cms', [
|
2014-12-19 09:28:27 +00:00
|
|
|
'cms.manage_content' => [
|
|
|
|
|
'label' => 'cms::lang.permissions.manage_content',
|
2015-05-21 12:54:44 +00:00
|
|
|
'tab' => 'cms::lang.permissions.name',
|
|
|
|
|
'order' => 100
|
2014-12-19 09:28:27 +00:00
|
|
|
],
|
|
|
|
|
'cms.manage_assets' => [
|
|
|
|
|
'label' => 'cms::lang.permissions.manage_assets',
|
2015-05-21 12:54:44 +00:00
|
|
|
'tab' => 'cms::lang.permissions.name',
|
|
|
|
|
'order' => 100
|
2014-12-19 09:28:27 +00:00
|
|
|
],
|
|
|
|
|
'cms.manage_pages' => [
|
|
|
|
|
'label' => 'cms::lang.permissions.manage_pages',
|
2015-05-21 12:54:44 +00:00
|
|
|
'tab' => 'cms::lang.permissions.name',
|
|
|
|
|
'order' => 100
|
2014-12-19 09:28:27 +00:00
|
|
|
],
|
|
|
|
|
'cms.manage_layouts' => [
|
|
|
|
|
'label' => 'cms::lang.permissions.manage_layouts',
|
2015-05-21 12:54:44 +00:00
|
|
|
'tab' => 'cms::lang.permissions.name',
|
|
|
|
|
'order' => 100
|
2014-12-19 09:28:27 +00:00
|
|
|
],
|
|
|
|
|
'cms.manage_partials' => [
|
|
|
|
|
'label' => 'cms::lang.permissions.manage_partials',
|
2015-05-21 12:54:44 +00:00
|
|
|
'tab' => 'cms::lang.permissions.name',
|
|
|
|
|
'order' => 100
|
2014-12-19 09:28:27 +00:00
|
|
|
],
|
|
|
|
|
'cms.manage_themes' => [
|
|
|
|
|
'label' => 'cms::lang.permissions.manage_themes',
|
2015-05-21 12:54:44 +00:00
|
|
|
'tab' => 'cms::lang.permissions.name',
|
|
|
|
|
'order' => 100
|
2015-06-27 01:50:46 +00:00
|
|
|
],
|
|
|
|
|
'media.manage_media' => [
|
|
|
|
|
'label' => 'cms::lang.permissions.manage_media',
|
|
|
|
|
'tab' => 'cms::lang.permissions.name',
|
|
|
|
|
'order' => 100
|
2014-12-19 09:28:27 +00:00
|
|
|
]
|
2014-05-14 13:24:20 +00:00
|
|
|
]);
|
|
|
|
|
});
|
2015-05-02 04:43:14 +00:00
|
|
|
}
|
2014-05-14 13:24:20 +00:00
|
|
|
|
2015-05-02 04:43:14 +00:00
|
|
|
/*
|
|
|
|
|
* Register widgets
|
|
|
|
|
*/
|
|
|
|
|
protected function registerBackendWidgets()
|
|
|
|
|
{
|
2014-10-10 23:56:53 +00:00
|
|
|
WidgetManager::instance()->registerFormWidgets(function ($manager) {
|
2014-05-14 13:24:20 +00:00
|
|
|
$manager->registerFormWidget('Cms\FormWidgets\Components');
|
2016-10-31 21:14:25 +00:00
|
|
|
$manager->registerFormWidget('Cms\FormWidgets\MediaFinder', 'mediafinder');
|
2014-05-14 13:24:20 +00:00
|
|
|
});
|
2015-05-02 04:43:14 +00:00
|
|
|
}
|
2014-05-14 13:24:20 +00:00
|
|
|
|
2015-05-02 04:43:14 +00:00
|
|
|
/*
|
|
|
|
|
* Register settings
|
|
|
|
|
*/
|
|
|
|
|
protected function registerBackendSettings()
|
|
|
|
|
{
|
2014-10-10 23:56:53 +00:00
|
|
|
SettingsManager::instance()->registerCallback(function ($manager) {
|
2014-07-19 02:05:50 +00:00
|
|
|
$manager->registerSettingItems('October.Cms', [
|
|
|
|
|
'theme' => [
|
|
|
|
|
'label' => 'cms::lang.theme.settings_menu',
|
|
|
|
|
'description' => 'cms::lang.theme.settings_menu_description',
|
2014-08-06 08:33:11 +00:00
|
|
|
'category' => SettingsManager::CATEGORY_CMS,
|
2014-07-19 02:05:50 +00:00
|
|
|
'icon' => 'icon-picture-o',
|
2017-03-16 06:16:03 +00:00
|
|
|
'url' => Backend::url('cms/themes'),
|
2015-12-31 11:32:25 +00:00
|
|
|
'permissions' => ['cms.manage_themes'],
|
2015-04-29 09:50:30 +00:00
|
|
|
'order' => 200
|
2014-11-10 09:35:20 +00:00
|
|
|
],
|
|
|
|
|
'maintenance_settings' => [
|
|
|
|
|
'label' => 'cms::lang.maintenance.settings_menu',
|
|
|
|
|
'description' => 'cms::lang.maintenance.settings_menu_description',
|
|
|
|
|
'category' => SettingsManager::CATEGORY_CMS,
|
|
|
|
|
'icon' => 'icon-plug',
|
2016-05-26 21:49:13 +00:00
|
|
|
'class' => 'Cms\Models\MaintenanceSetting',
|
2015-12-31 11:32:25 +00:00
|
|
|
'permissions' => ['cms.manage_themes'],
|
2015-04-29 09:50:30 +00:00
|
|
|
'order' => 300
|
2014-11-10 09:35:20 +00:00
|
|
|
],
|
2017-02-07 18:43:40 +00:00
|
|
|
'theme_logs' => [
|
|
|
|
|
'label' => 'cms::lang.theme_log.menu_label',
|
|
|
|
|
'description' => 'cms::lang.theme_log.menu_description',
|
|
|
|
|
'category' => SettingsManager::CATEGORY_LOGS,
|
|
|
|
|
'icon' => 'icon-magic',
|
|
|
|
|
'url' => Backend::url('cms/themelogs'),
|
|
|
|
|
'permissions' => ['system.access_logs'],
|
|
|
|
|
'order' => 910,
|
|
|
|
|
'keywords' => 'theme change log'
|
|
|
|
|
]
|
2014-07-19 02:05:50 +00:00
|
|
|
]);
|
|
|
|
|
});
|
2014-05-07 07:52:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2015-05-02 04:43:14 +00:00
|
|
|
* Registers events for menu items.
|
2014-05-07 07:52:13 +00:00
|
|
|
*/
|
2015-05-02 04:43:14 +00:00
|
|
|
protected function bootMenuItemEvents()
|
2014-05-07 07:52:13 +00:00
|
|
|
{
|
2014-10-10 23:56:53 +00:00
|
|
|
Event::listen('pages.menuitem.listTypes', function () {
|
2014-10-02 22:55:55 +00:00
|
|
|
return [
|
2016-10-10 21:29:26 +00:00
|
|
|
'cms-page' => 'cms::lang.page.cms_page'
|
2014-10-02 22:55:55 +00:00
|
|
|
];
|
|
|
|
|
});
|
|
|
|
|
|
2014-10-10 23:56:53 +00:00
|
|
|
Event::listen('pages.menuitem.getTypeInfo', function ($type) {
|
|
|
|
|
if ($type == 'cms-page') {
|
2014-10-02 22:55:55 +00:00
|
|
|
return CmsPage::getMenuTypeInfo($type);
|
2014-10-10 23:56:53 +00:00
|
|
|
}
|
2014-10-02 22:55:55 +00:00
|
|
|
});
|
|
|
|
|
|
2014-10-10 23:56:53 +00:00
|
|
|
Event::listen('pages.menuitem.resolveItem', function ($type, $item, $url, $theme) {
|
|
|
|
|
if ($type == 'cms-page') {
|
2014-10-02 22:55:55 +00:00
|
|
|
return CmsPage::resolveMenuItem($item, $url, $theme);
|
2014-10-10 23:56:53 +00:00
|
|
|
}
|
2014-10-02 22:55:55 +00:00
|
|
|
});
|
2014-05-07 07:52:13 +00:00
|
|
|
}
|
2015-06-25 09:26:47 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Registers events for rich editor page links.
|
|
|
|
|
*/
|
|
|
|
|
protected function bootRichEditorEvents()
|
|
|
|
|
{
|
|
|
|
|
Event::listen('backend.richeditor.listTypes', function () {
|
|
|
|
|
return [
|
2016-10-10 21:29:26 +00:00
|
|
|
'cms-page' => 'cms::lang.page.cms_page'
|
2015-06-25 09:26:47 +00:00
|
|
|
];
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Event::listen('backend.richeditor.getTypeInfo', function ($type) {
|
|
|
|
|
if ($type == 'cms-page') {
|
|
|
|
|
return CmsPage::getRichEditorTypeInfo($type);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2014-05-07 07:52:13 +00:00
|
|
|
}
|