173 lines
6.5 KiB
PHP
173 lines
6.5 KiB
PHP
<?php namespace RainLab\Blog;
|
|
|
|
use Backend;
|
|
use Controller;
|
|
use RainLab\Blog\Models\Post;
|
|
use System\Classes\PluginBase;
|
|
use RainLab\Blog\Classes\TagProcessor;
|
|
use RainLab\Blog\Models\Category;
|
|
use Event;
|
|
|
|
class Plugin extends PluginBase
|
|
{
|
|
public function pluginDetails()
|
|
{
|
|
return [
|
|
'name' => 'rainlab.blog::lang.plugin.name',
|
|
'description' => 'rainlab.blog::lang.plugin.description',
|
|
'author' => 'Alexey Bobkov, Samuel Georges',
|
|
'icon' => 'icon-pencil',
|
|
'homepage' => 'https://github.com/rainlab/blog-plugin'
|
|
];
|
|
}
|
|
|
|
public function registerComponents()
|
|
{
|
|
return [
|
|
'RainLab\Blog\Components\Post' => 'blogPost',
|
|
'RainLab\Blog\Components\Posts' => 'blogPosts',
|
|
'RainLab\Blog\Components\Categories' => 'blogCategories',
|
|
'RainLab\Blog\Components\RssFeed' => 'blogRssFeed'
|
|
];
|
|
}
|
|
|
|
public function registerPermissions()
|
|
{
|
|
return [
|
|
'rainlab.blog.manage_settings' => [
|
|
'tab' => 'rainlab.blog::lang.blog.tab',
|
|
'label' => 'rainlab.blog::lang.blog.manage_settings'
|
|
],
|
|
'rainlab.blog.access_posts' => [
|
|
'tab' => 'rainlab.blog::lang.blog.tab',
|
|
'label' => 'rainlab.blog::lang.blog.access_posts'
|
|
],
|
|
'rainlab.blog.access_categories' => [
|
|
'tab' => 'rainlab.blog::lang.blog.tab',
|
|
'label' => 'rainlab.blog::lang.blog.access_categories'
|
|
],
|
|
'rainlab.blog.access_other_posts' => [
|
|
'tab' => 'rainlab.blog::lang.blog.tab',
|
|
'label' => 'rainlab.blog::lang.blog.access_other_posts'
|
|
],
|
|
'rainlab.blog.access_import_export' => [
|
|
'tab' => 'rainlab.blog::lang.blog.tab',
|
|
'label' => 'rainlab.blog::lang.blog.access_import_export'
|
|
],
|
|
'rainlab.blog.access_publish' => [
|
|
'tab' => 'rainlab.blog::lang.blog.tab',
|
|
'label' => 'rainlab.blog::lang.blog.access_publish'
|
|
]
|
|
];
|
|
}
|
|
|
|
public function registerNavigation()
|
|
{
|
|
return [
|
|
'blog' => [
|
|
'label' => 'rainlab.blog::lang.blog.menu_label',
|
|
'url' => Backend::url('rainlab/blog/posts'),
|
|
'icon' => 'icon-pencil',
|
|
'iconSvg' => 'plugins/rainlab/blog/assets/images/blog-icon.svg',
|
|
'permissions' => ['rainlab.blog.*'],
|
|
'order' => 300,
|
|
|
|
'sideMenu' => [
|
|
'new_post' => [
|
|
'label' => 'rainlab.blog::lang.posts.new_post',
|
|
'icon' => 'icon-plus',
|
|
'url' => Backend::url('rainlab/blog/posts/create'),
|
|
'permissions' => ['rainlab.blog.access_posts']
|
|
],
|
|
'posts' => [
|
|
'label' => 'rainlab.blog::lang.blog.posts',
|
|
'icon' => 'icon-copy',
|
|
'url' => Backend::url('rainlab/blog/posts'),
|
|
'permissions' => ['rainlab.blog.access_posts']
|
|
],
|
|
'categories' => [
|
|
'label' => 'rainlab.blog::lang.blog.categories',
|
|
'icon' => 'icon-list-ul',
|
|
'url' => Backend::url('rainlab/blog/categories'),
|
|
'permissions' => ['rainlab.blog.access_categories']
|
|
]
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
public function registerSettings()
|
|
{
|
|
return [
|
|
'blog' => [
|
|
'label' => 'rainlab.blog::lang.blog.menu_label',
|
|
'description' => 'rainlab.blog::lang.blog.settings_description',
|
|
'category' => 'rainlab.blog::lang.blog.menu_label',
|
|
'icon' => 'icon-pencil',
|
|
'class' => 'RainLab\Blog\Models\Settings',
|
|
'order' => 500,
|
|
'keywords' => 'blog post category',
|
|
'permissions' => ['rainlab.blog.manage_settings']
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Register method, called when the plugin is first registered.
|
|
*/
|
|
public function register()
|
|
{
|
|
/*
|
|
* Register the image tag processing callback
|
|
*/
|
|
TagProcessor::instance()->registerCallback(function($input, $preview) {
|
|
if (!$preview) {
|
|
return $input;
|
|
}
|
|
|
|
return preg_replace('|\<img src="image" alt="([0-9]+)"([^>]*)\/>|m',
|
|
'<span class="image-placeholder" data-index="$1">
|
|
<span class="upload-dropzone">
|
|
<span class="label">'. trans('rainlab.blog::lang.post.dropzone') .'</span>
|
|
<span class="indicator"></span>
|
|
</span>
|
|
</span>',
|
|
$input);
|
|
});
|
|
}
|
|
|
|
public function boot()
|
|
{
|
|
/*
|
|
* Register menu items for the RainLab.Pages plugin
|
|
*/
|
|
Event::listen('pages.menuitem.listTypes', function() {
|
|
return [
|
|
'blog-category' => 'rainlab.blog::lang.menuitem.blog_category',
|
|
'all-blog-categories' => 'rainlab.blog::lang.menuitem.all_blog_categories',
|
|
'blog-post' => 'rainlab.blog::lang.menuitem.blog_post',
|
|
'all-blog-posts' => 'rainlab.blog::lang.menuitem.all_blog_posts',
|
|
'category-blog-posts' => 'rainlab.blog::lang.menuitem.category_blog_posts',
|
|
];
|
|
});
|
|
|
|
Event::listen('pages.menuitem.getTypeInfo', function($type) {
|
|
if ($type == 'blog-category' || $type == 'all-blog-categories') {
|
|
return Category::getMenuTypeInfo($type);
|
|
}
|
|
elseif ($type == 'blog-post' || $type == 'all-blog-posts' || $type == 'category-blog-posts') {
|
|
return Post::getMenuTypeInfo($type);
|
|
}
|
|
});
|
|
|
|
Event::listen('pages.menuitem.resolveItem', function($type, $item, $url, $theme) {
|
|
if ($type == 'blog-category' || $type == 'all-blog-categories') {
|
|
return Category::resolveMenuItem($item, $url, $theme);
|
|
}
|
|
elseif ($type == 'blog-post' || $type == 'all-blog-posts' || $type == 'category-blog-posts') {
|
|
return Post::resolveMenuItem($item, $url, $theme);
|
|
}
|
|
});
|
|
}
|
|
}
|