marc-leopold/cms/plugins/rainlab/builder/classes/StandardBehaviorsRegistry.php

430 lines
21 KiB
PHP
Raw Permalink Normal View History

2019-02-25 14:56:59 +00:00
<?php namespace RainLab\Builder\Classes;
use Lang;
/**
* Utility class for registering standard controller behaviors.
*
* @package rainlab\builder
* @author Alexey Bobkov, Samuel Georges
*/
class StandardBehaviorsRegistry
{
protected $behaviorLibrary;
public function __construct($behaviorLibrary)
{
$this->behaviorLibrary = $behaviorLibrary;
$this->registerBehaviors();
}
protected function registerBehaviors()
{
$this->registerListBehavior();
$this->registerFormBehavior();
$this->registerReorderBehavior();
}
protected function registerFormBehavior()
{
$properties = [
'name' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_name'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_name_description'),
'type' => 'string',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_name_required')
]
],
],
'modelClass' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_model_class'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_model_class_description'),
'placeholder' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_model_class_placeholder'),
'type' => 'dropdown',
'fillFrom' => 'model-classes',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_model_class_required')
]
],
],
'form' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_file'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_file_description'),
'placeholder' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_placeholder'),
'type' => 'autocomplete',
'fillFrom' => 'model-forms',
'subtypeFrom' => 'modelClass',
'depends' => ['modelClass'],
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_file_required')
]
],
],
'defaultRedirect' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_default_redirect'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_default_redirect_description'),
'type' => 'autocomplete',
'fillFrom' => 'controller-urls',
'ignoreIfEmpty' => true
],
'create' => [
'type' => 'object',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_create'),
'ignoreIfEmpty' => true,
'properties' => [
[
'property' => 'title',
'type' => 'builderLocalization',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_page_title'),
'ignoreIfEmpty' => true
],
[
'property' => 'redirect',
'type' => 'autocomplete',
'fillFrom' => 'controller-urls',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_redirect'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_redirect_description'),
'ignoreIfEmpty' => true
],
[
'property' => 'redirectClose',
'type' => 'autocomplete',
'fillFrom' => 'controller-urls',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_redirect_close'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_redirect_close_description'),
'ignoreIfEmpty' => true
],
[
'property' => 'flashSave',
'type' => 'builderLocalization',
'ignoreIfEmpty' => true,
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_flash_save'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_flash_save_description'),
]
]
],
'update' => [
'type' => 'object',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_update'),
'ignoreIfEmpty' => true,
'properties' => [
[
'property' => 'title',
'type' => 'builderLocalization',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_page_title'),
'ignoreIfEmpty' => true
],
[
'property' => 'redirect',
'type' => 'autocomplete',
'fillFrom' => 'controller-urls',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_redirect'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_redirect_description'),
'ignoreIfEmpty' => true
],
[
'property' => 'redirectClose',
'type' => 'autocomplete',
'fillFrom' => 'controller-urls',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_redirect_close'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_redirect_close_description'),
'ignoreIfEmpty' => true
],
[
'property' => 'flashSave',
'type' => 'builderLocalization',
'ignoreIfEmpty' => true,
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_flash_save'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_flash_save_description'),
],
[
'property' => 'flashDelete',
'type' => 'builderLocalization',
'ignoreIfEmpty' => true,
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_flash_delete'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_flash_delete_description'),
]
]
],
'preview' => [
'type' => 'object',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_preview'),
'ignoreIfEmpty' => true,
'properties' => [
[
'property' => 'title',
'type' => 'builderLocalization',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_page_title'),
'ignoreIfEmpty' => true
]
]
]
];
$templates = [
'$/rainlab/builder/classes/standardbehaviorsregistry/formcontroller/templates/create.htm.tpl',
'$/rainlab/builder/classes/standardbehaviorsregistry/formcontroller/templates/update.htm.tpl',
'$/rainlab/builder/classes/standardbehaviorsregistry/formcontroller/templates/preview.htm.tpl'
];
$this->behaviorLibrary->registerBehavior(
'Backend\Behaviors\FormController',
'rainlab.builder::lang.controller.behavior_form_controller',
'rainlab.builder::lang.controller.behavior_form_controller_description',
$properties,
'formConfig',
null,
'config_form.yaml',
$templates
);
}
protected function registerListBehavior()
{
$properties = [
'title' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_title'),
'type' => 'builderLocalization',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_title_required')
]
],
],
'modelClass' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_model_class'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_model_class_description'),
'placeholder' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_model_placeholder'),
'type' => 'dropdown',
'fillFrom' => 'model-classes',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_model_class_required')
]
],
],
'list' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_file'),
'placeholder' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_placeholder'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_file_description'),
'type' => 'autocomplete',
'fillFrom' => 'model-lists',
'subtypeFrom' => 'modelClass',
'depends' => ['modelClass'],
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_file_required')
]
],
],
'recordUrl' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_record_url'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_record_url_description'),
'ignoreIfEmpty' => true,
'type' => 'autocomplete',
'fillFrom' => 'controller-urls',
],
'noRecordsMessage' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_no_records_message'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_no_records_message_description'),
'ignoreIfEmpty' => true,
'type' => 'builderLocalization',
],
'recordsPerPage' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_recs_per_page'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_recs_per_page_description'),
'ignoreIfEmpty' => true,
'type' => 'string',
'validation' => [
'regex' => [
'pattern' => '^[0-9]+$',
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_recs_per_page_regex')
]
],
],
'showSetup' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_show_setup'),
'type' => 'checkbox',
'ignoreIfEmpty' => true,
],
'showCheckboxes' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_show_checkboxes'),
'type' => 'checkbox',
'ignoreIfEmpty' => true,
],
'showSorting' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_show_sorting'),
'type' => 'checkbox',
'ignoreIfEmpty' => false,
'default' => true,
'ignoreIfDefault' => true,
],
'defaultSort' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_default_sort'),
'ignoreIfEmpty' => true,
'type' => 'object',
'ignoreIfPropertyEmpty' => 'column',
'properties' => [
[
'property' => 'column',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_ds_column'),
'type' => 'autocomplete',
'fillFrom' => 'model-columns',
'subtypeFrom' => 'modelClass',
'depends' => ['modelClass']
],
[
'property' => 'direction',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_ds_direction'),
'type' => 'dropdown',
'options' => [
'asc' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_ds_asc'),
'desc' => Lang::get('rainlab.builder::lang.controller.property_behavior_form_ds_desc'),
],
]
]
],
'toolbar' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_toolbar'),
'type' => 'object',
'ignoreIfEmpty' => true,
'properties' => [
[
'property' => 'buttons',
'type' => 'string',
'ignoreIfEmpty' => true,
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_toolbar_buttons'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_toolbar_buttons_description'),
],
[
'property' => 'search',
'type' => 'object',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_search'),
'properties' => [
[
'property' => 'prompt',
'type' => 'builderLocalization',
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_search_prompt'),
]
]
]
]
],
'recordOnClick' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_onclick'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_onclick_description'),
'ignoreIfEmpty' => true,
'type' => 'string'
],
'showTree' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_show_tree'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_show_tree_description'),
'type' => 'checkbox',
'ignoreIfEmpty' => true
],
'treeExpanded' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_tree_expanded'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_tree_expanded_description'),
'type' => 'checkbox',
'ignoreIfEmpty' => true
],
'filter' => [
'type' => 'string', // Should be configurable in place later
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_list_filter'),
'ignoreIfEmpty' => true
]
];
$templates = [
'$/rainlab/builder/classes/standardbehaviorsregistry/listcontroller/templates/index.htm.tpl',
'$/rainlab/builder/classes/standardbehaviorsregistry/listcontroller/templates/_list_toolbar.htm.tpl'
];
$this->behaviorLibrary->registerBehavior(
'Backend\Behaviors\ListController',
'rainlab.builder::lang.controller.behavior_list_controller',
'rainlab.builder::lang.controller.behavior_list_controller_description',
$properties,
'listConfig',
null,
'config_list.yaml',
$templates
);
}
protected function registerReorderBehavior()
{
$properties = [
'title' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_title'),
'type' => 'builderLocalization',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_title_required')
]
],
],
'modelClass' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_model_class'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_model_class_description'),
'placeholder' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_model_placeholder'),
'type' => 'dropdown',
'fillFrom' => 'model-classes',
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_model_class_required')
]
],
],
'nameFrom' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_name_from'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_name_from_description'),
'type' => 'autocomplete',
'fillFrom' => 'model-columns',
'subtypeFrom' => 'modelClass',
'depends' => ['modelClass'],
'validation' => [
'required' => [
'message' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_name_from_required')
]
],
],
'toolbar' => [
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_toolbar'),
'type' => 'object',
'ignoreIfEmpty' => true,
'properties' => [
[
'property' => 'buttons',
'type' => 'string',
'ignoreIfEmpty' => true,
'title' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_toolbar_buttons'),
'description' => Lang::get('rainlab.builder::lang.controller.property_behavior_reorder_toolbar_buttons_description'),
]
]
],
];
$templates = [
'$/rainlab/builder/classes/standardbehaviorsregistry/reordercontroller/templates/reorder.htm.tpl',
'$/rainlab/builder/classes/standardbehaviorsregistry/reordercontroller/templates/_reorder_toolbar.htm.tpl'
];
$this->behaviorLibrary->registerBehavior(
'Backend\Behaviors\ReorderController',
'rainlab.builder::lang.controller.behavior_reorder_controller',
'rainlab.builder::lang.controller.behavior_reorder_controller_description',
$properties,
'reorderConfig',
null,
'config_reorder.yaml',
$templates
);
}
}