TKF-Kusht-Federasiya/plugins/indikator/devtools/Plugin.php

170 lines
5.7 KiB
PHP
Raw Normal View History

2022-07-14 11:32:26 +00:00
<?php namespace Indikator\DevTools;
use System\Classes\PluginBase;
use System\Classes\SettingsManager;
use Event;
use Backend;
use BackendAuth;
use BackendMenu;
use Indikator\DevTools\Models\Settings as Tools;
use Db;
class Plugin extends PluginBase
{
public $elevated = true;
public function pluginDetails()
{
return [
'name' => 'indikator.devtools::lang.plugin.name',
'description' => 'indikator.devtools::lang.plugin.description',
'author' => 'indikator.devtools::lang.plugin.author',
'icon' => 'icon-wrench',
'homepage' => 'https://github.com/gergo85/oc-devtools'
];
}
public function registerSettings()
{
return [
'devtool' => [
'label' => 'indikator.devtools::lang.help.menu_label',
'description' => 'indikator.devtools::lang.help.menu_description',
'icon' => 'icon-wrench',
'class' => 'Indikator\DevTools\Models\Settings',
'category' => SettingsManager::CATEGORY_SYSTEM,
'permissions' => ['indikator.devtools.settings']
]
];
}
public function registerFormWidgets()
{
return [
'Indikator\DevTools\FormWidgets\Help' => [
'label' => 'Help',
'code' => 'help'
]
];
}
public function registerPermissions()
{
return [
'indikator.devtools.editor' => [
'tab' => 'indikator.devtools::lang.plugin.name',
'label' => 'indikator.devtools::lang.editor.permission',
'order' => 100,
'roles' => ['developer']
],
'indikator.devtools.settings' => [
'tab' => 'indikator.devtools::lang.plugin.name',
'label' => 'indikator.devtools::lang.help.permission',
'order' => 200,
'roles' => ['developer']
]
];
}
public function boot()
{
// Add new menu
BackendMenu::registerCallback(function($manager) {
$manager->registerMenuItems('Indikator.DevTools', [
'editor' => [
'label' => 'indikator.devtools::lang.editor.menu_label',
'url' => Backend::url('indikator/devtools/editor'),
'icon' => 'icon-file-code-o',
'iconSvg' => 'plugins/indikator/devtools/assets/images/devtools-icon.svg',
'permissions' => ['indikator.devtools.editor'],
'order' => 390,
'sideMenu' => [
'assets' => [
'label' => 'indikator.devtools::lang.editor.plugins',
'icon' => 'icon-cubes',
'url' => 'javascript:;',
'attributes' => ['data-menu-item' => 'assets'],
'counterLabel' => 'cms::lang.asset.unsaved_label',
'order' => 100
]
]
]
]);
});
// Add new features
Event::listen('backend.form.extendFields', function($form)
{
// Security check
if (!BackendAuth::check()) {
return;
}
// Help docs
if ($this->tools_enabled('help') && (get_class($form->config->model) == 'Cms\Classes\Page' || get_class($form->config->model) == 'Cms\Classes\Partial' || get_class($form->config->model) == 'Cms\Classes\Layout') || get_class($form->config->model) == 'Indikator\DevTools\Classes\Asset') {
if (get_class($form->config->model) == 'Indikator\DevTools\Classes\Asset') {
$content = 'php';
}
else {
$content = 'cms';
}
$form->addSecondaryTabFields([
'help' => [
'label' => '',
'tab' => 'indikator.devtools::lang.help.tab',
'type' => 'help',
'content' => $content
]
]);
return;
}
// Wysiwyg editor
if ($this->tools_enabled('wysiwyg') && get_class($form->config->model) == 'Cms\Classes\Content') {
foreach ($form->getFields() as $field) {
if (!empty($field->config['type']) && $field->config['type'] == 'codeeditor') {
$field->config['type'] = $field->config['widget'] = 'richeditor';
}
}
}
});
}
public function tools_enabled($name)
{
// Security check
if ($name != 'help' && $name != 'wysiwyg') {
return false;
}
// Is enabled
if (!Tools::get($name.'_enabled', false)) {
return false;
}
// My account
$admin = BackendAuth::getUser();
// Is superuser
if (Tools::get($name.'_superuser', false) && $admin->is_superuser == 1) {
return true;
}
// Is admin group
if (Tools::get($name.'_admingroup', false) > 0 && Db::table('backend_users_groups')->where(['user_id' => $admin->id, 'user_group_id' => Tools::get($name.'_admingroup', false)])->count() == 1) {
return true;
}
// Is current user
if (Tools::get($name.'_adminid', false) > 0 && $admin->id == Tools::get($name.'_adminid', false)) {
return true;
}
// Finish
return false;
}
}