marc-leopold/cms/plugins/rainlab/builder/formwidgets/MenuEditor.php

222 lines
5.7 KiB
PHP

<?php namespace RainLab\Builder\FormWidgets;
use Backend\Classes\FormWidgetBase;
use RainLab\Builder\Classes\IconList;
use Input;
use Lang;
/**
* Menu items widget.
*
* @package october\backend
* @author Alexey Bobkov, Samuel Georges
*/
class MenuEditor extends FormWidgetBase
{
protected $iconList = null;
/**
* {@inheritDoc}
*/
protected $defaultAlias = 'menueditor';
/**
* {@inheritDoc}
*/
public function init()
{
}
/**
* {@inheritDoc}
*/
public function render()
{
$this->prepareVars();
return $this->makePartial('body');
}
/**
* Prepares the list data
*/
public function prepareVars()
{
$this->vars['model'] = $this->model;
$this->vars['items'] = $this->model->menus;
$this->vars['emptyItem'] = [
'label' => Lang::get('rainlab.builder::lang.menu.new_menu_item'),
'icon' => 'icon-life-ring',
'code' => 'newitemcode',
'url' => '/'
];
$this->vars['emptySubItem'] = [
'label' => Lang::get('rainlab.builder::lang.menu.new_menu_item'),
'icon' => 'icon-sitemap',
'code' => 'newitemcode',
'url' => '/'
];
}
/**
* {@inheritDoc}
*/
public function loadAssets()
{
$this->addJs('js/menubuilder.js', 'builder');
}
public function getPluginCode()
{
$pluginCode = Input::get('plugin_code');
if (strlen($pluginCode)) {
return $pluginCode;
}
$pluginVector = $this->controller->getBuilderActivePluginVector();
return $pluginVector->pluginCodeObj->toCode();
}
//
// Event handlers
//
//
// Methods for the internal use
//
protected function getItemArrayProperty($item, $property)
{
if (array_key_exists($property, $item)) {
return $item[$property];
}
return null;
}
protected function getIconList()
{
if ($this->iconList !== null) {
return $this->iconList;
}
$icons = IconList::getList();
$this->iconList = [];
foreach ($icons as $iconCode=>$iconInfo) {
$iconCode = preg_replace('/^oc\-/', '', $iconCode);
$this->iconList[$iconCode] = $iconInfo;
}
return $this->iconList;
}
protected function getCommonMenuItemConfigurationSchema()
{
$result = [
[
'title' => Lang::get('rainlab.builder::lang.menu.property_code'),
'property' => 'code',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.menu.property_code_required')
]
]
],
[
'title' => Lang::get('rainlab.builder::lang.menu.property_label'),
'type' => 'builderLocalization',
'property' => 'label',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.menu.property_label_required')
]
]
],
[
'title' => Lang::get('rainlab.builder::lang.menu.property_url'),
'property' => 'url',
'type' => 'autocomplete',
'fillFrom' => 'controller-urls',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.menu.property_url_required')
]
]
],
[
'title' => Lang::get('rainlab.builder::lang.menu.property_icon'),
'property' => 'icon',
'type' => 'dropdown',
'options' => $this->getIconList(),
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.menu.property_icon_required')
]
],
],
[
'title' => Lang::get('rainlab.builder::lang.menu.property_permissions'),
'property' => 'permissions',
'type' => 'stringListAutocomplete',
'fillFrom' => 'permissions'
]
];
return $result;
}
protected function getSideMenuConfigurationSchema()
{
$result = $this->getCommonMenuItemConfigurationSchema();
$result[] = [
'title' => Lang::get('rainlab.builder::lang.menu.property_attributes'),
'property' => 'attributes',
'type' => 'stringList'
];
return json_encode($result);
}
protected function getSideMenuConfiguration($item)
{
if (!count($item)) {
return '{}';
}
return json_encode($item);
}
protected function getMainMenuConfigurationSchema()
{
$result = $this->getCommonMenuItemConfigurationSchema();
$result[] = [
'title' => Lang::get('rainlab.builder::lang.menu.property_order'),
'description' => Lang::get('rainlab.builder::lang.menu.property_order_description'),
'property' => 'order',
'validation' => [
'regex' => [
'pattern' => '^[0-9]+$',
'message' => Lang::get('rainlab.builder::lang.menu.property_order_invalid')
]
]
];
return json_encode($result);
}
protected function getMainMenuConfiguration($item)
{
if (!count($item)) {
return '{}';
}
return json_encode($item);
}
}