ORIENT/plugins/rainlab/blog/Plugin.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">Click or drop an image...</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);
}
});
}
}