Skip to content

Commit

Permalink
при обновлении пакетов, учитывается addon_id,
Browse files Browse the repository at this point in the history
актуализируются файлы дополнения.
В настройках полей изображений кроме названий пресетов показываются и их параметры.
В полях можно реализовывать методы hookAfterAdd, hookAfterUpdate и hookAfterRemove,
которые вызываются соответственно при создании/редактировани/удалении поля.
Mobile Detect обновлен до крайней версии.
PHPMailer обновлен до крайней версии.
Мелкие правки по виджетам.
  • Loading branch information
fuzegit committed Sep 23, 2017
1 parent 386d32a commit 0684518
Show file tree
Hide file tree
Showing 20 changed files with 278 additions and 61 deletions.
4 changes: 2 additions & 2 deletions system/config/version.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[version]
major = 2
minor = 8
build = 1
date = 20170907
build = 2
date = 20170000
57 changes: 51 additions & 6 deletions system/controllers/admin/actions/install_finish.php
Original file line number Diff line number Diff line change
Expand Up @@ -157,14 +157,34 @@ private function componentUpdate($manifest) {
$options = null;
}

$model->filterEqual('name', $manifest['package']['name'])->updateFiltered('controllers', array(
$update_data = array(
'title' => $manifest['info']['title'],
'options' => $options,
'author' => (isset($manifest['author']['name']) ? $manifest['author']['name'] : LANG_CP_PACKAGE_NONAME),
'url' => (isset($manifest['author']['url']) ? $manifest['author']['url'] : null),
'version' => $manifest['version']['major'] . '.' . $manifest['version']['minor'] . '.' . $manifest['version']['build'],
'is_backend' => file_exists($controller_root_path.'backend.php')
));
);

$installed_controller = $this->model->getControllerInfo($manifest['package']['name']);

if(!empty($manifest['contents'])){
if(!empty($installed_controller['files'])){

$update_data['files'] = multi_array_unique(array_merge_recursive($installed_controller['files'], $manifest['contents']));

} else {

$update_data['files'] = $manifest['contents'];

}
}

if(!empty($manifest['info']['addon_id'])){
$update_data['files'] = (int)$manifest['info']['addon_id'];
}

$model->filterEqual('name', $manifest['package']['name'])->updateFiltered('controllers', $update_data);

return 'controllers';

Expand Down Expand Up @@ -194,14 +214,39 @@ private function widgetUpdate($manifest) {

$model = new cmsModel();

$model->filterEqual('name', $manifest['package']['name'])->
filterEqual('controller', $manifest['package']['controller'])->
updateFiltered('widgets', array(
$update_data = array(
'title' => $manifest['info']['title'],
'author' => (isset($manifest['author']['name']) ? $manifest['author']['name'] : LANG_CP_PACKAGE_NONAME),
'url' => (isset($manifest['author']['url']) ? $manifest['author']['url'] : null),
'version' => $manifest['version']['major'] . '.' . $manifest['version']['minor'] . '.' . $manifest['version']['build']
));
);

$installed_widget = $model->filterEqual('name', $manifest['package']['name'])->
filterEqual('controller', $manifest['package']['controller'])->
getItem('widgets', function($item){
$item['files'] = cmsModel::yamlToArray($item['files']);
return $item;
});

if(!empty($manifest['contents'])){
if(!empty($installed_widget['files'])){

$update_data['files'] = multi_array_unique(array_merge_recursive($installed_widget['files'], $manifest['contents']));

} else {

$update_data['files'] = $manifest['contents'];

}
}

if(!empty($manifest['info']['addon_id'])){
$update_data['files'] = (int)$manifest['info']['addon_id'];
}

$model->filterEqual('name', $manifest['package']['name'])->
filterEqual('controller', $manifest['package']['controller'])->
updateFiltered('widgets', $update_data);

return 'widgets';

Expand Down
1 change: 1 addition & 0 deletions system/controllers/admin/model.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public function getInstalledControllersCount(){
public function getControllerInfo($controller_name){
return $this->getItemByField('controllers', 'name', $controller_name, function($item){
$item['options'] = cmsModel::yamlToArray($item['options']);
$item['files'] = cmsModel::yamlToArray($item['files']);
$item['title'] = string_lang($item['name'].'_CONTROLLER', $item['title']);
return $item;
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public function run($data){
new fieldList('mapping:image_size', array(
'title' => LANG_RSS_FEED_MAP_IMAGE_SIZE,
'generator' => function($item) {
return array('original' => LANG_PARSER_IMAGE_SIZE_ORIGINAL) + cmsCore::getModel('images')->getPresetsList();
return array('original' => LANG_PARSER_IMAGE_SIZE_ORIGINAL) + cmsCore::getModel('images')->getPresetsList(true);
}
))

Expand Down
6 changes: 6 additions & 0 deletions system/controllers/content/model.php
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,8 @@ public function addContentField($ctype_name, $field, $is_virtual=false){
$sql = "ALTER TABLE {#}{$content_table_name} ADD `{$field['name']}` {$field_parser->getSQL()}";
$this->db->query($sql);

$field_parser->hookAfterAdd($content_table_name, $field, $this);

if($field_parser->is_denormalization){

$cfield_name = $field['name'].cmsFormField::FIELD_CACHE_POSTFIX;
Expand Down Expand Up @@ -669,6 +671,8 @@ public function updateContentField($ctype_name, $id, $field){
$sql = "ALTER TABLE `{#}{$content_table_name}` CHANGE `{$field_old['name']}` `{$field['name']}` {$field_handler->getSQL()}";
$this->db->query($sql);

$field_handler->hookAfterUpdate($content_table_name, $field, $field_old, $this);

if(($field_old['name'] != $field['name']) || ($field_old['type'] != $field['type'])){

// поля денормализации
Expand Down Expand Up @@ -853,6 +857,8 @@ public function deleteContentField($ctype_name_or_id, $id, $by_field='id', $isFo

$this->db->dropTableField($content_table_name, $field['name']);

$field['parser']->hookAfterRemove($content_table_name, $field, $this);

if($field['parser']->is_denormalization){
$this->db->dropTableField($content_table_name, $field['parser']->getDenormalName());
}
Expand Down
2 changes: 1 addition & 1 deletion system/controllers/content/widgets/slider/options.form.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public function init($options=false) {
new fieldList('options:big_image_preset', array(
'title' => LANG_WD_CONTENT_SLIDER_BIG_IMAGE_PRESET,
'generator' => function($item) {
return cmsCore::getModel('images')->getPresetsList()+array('original' => LANG_PARSER_IMAGE_SIZE_ORIGINAL);
return cmsCore::getModel('images')->getPresetsList(true)+array('original' => LANG_PARSER_IMAGE_SIZE_ORIGINAL);
},
)),

Expand Down
7 changes: 5 additions & 2 deletions system/controllers/images/model.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ public function getPresets(){
});
}

public function getPresetsList(){
public function getPresetsList($with_params = false){
return $this->filterIsNull('is_internal')->
orderBy('width')->
get('images_presets', function($item, $model){
get('images_presets', function($item, $model) use($with_params){
if($with_params){
return $item['title'].', '.$item['name'].', '.($item['width'] ? $item['width'] : LANG_AUTO).'X'.($item['height'] ? $item['height'] : LANG_AUTO).'px';
}
return $item['title'];
}, 'name');
}
Expand Down
100 changes: 91 additions & 9 deletions system/core/formfield.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,93 @@

class cmsFormField {

/**
* Префикс названия ячейки БД поля для кэширования
*/
const FIELD_CACHE_POSTFIX = '_cache';

/**
* Имя поля, как было задано в форме
* @var string
*/
public $name;
/**
* Имя поля, как должно быть в HTML теге
* @var string
*/
public $element_name = '';
/**
* Тип фильтрации для поля
* true, false, int, str или date
* @var string || boolean
*/
public $filter_type = false;
/**
* Краткое описания поля фильтрации для простых фильтров в админке
* @var string
*/
public $filter_hint = false;

/**
* Название поля
* @var string
*/
public $title;
public $element_title = '';

/**
* Флаг, указывающий, что поле может быть использовано для создания в полях типов контента, конструкторе форм и т.п.
* @var boolean
*/
public $is_public = true;

/**
* Последняя часть строки SQL запроса для создания поля в базе данных
* @var string
*/
public $sql;
/**
* Последняя часть строки SQL запроса для создания поля в базе данных, в котором будет храниться кэшированное значение
* @var string
*/
public $cache_sql;
/**
* Флаг, указывающий, что при создании поля в базе данных (например, при добавлении поля в типах контента)
* необходимо также добавить SQL индекс к этому полю
* @var boolean
*/
public $allow_index = true;
/**
* Флаг, указывающий, что нам нужна денормализация данных, полученных из поля формы
* @var boolean
*/
public $is_denormalization = false;

/**
* Массив записи, в которой это поле используется
* @var array
*/
public $item = null;

/**
* ID поля, если запись о нём есть в таблице
* @var integer
*/
public $field_id = 0;
/**
* Флаг, что поле виртуальное
* @var boolean
*/
public $is_virtual = false;
/**
* Флаг скрытого поля
* @var boolean
*/
public $is_hidden = false;

/**
* Массив правил валидации
* @var array
*/
public $rules = array();
/**
* Массив опций поля
* @var array
*/
public $options = array();
protected $default_options_loaded = false;

Expand All @@ -36,8 +100,11 @@ class cmsFormField {
* @var string
*/
public $var_type = null;

public $data = array(); // массив для данных в шаблоне
/**
* Массив для данных в шаблоне
* @var array
*/
public $data = array();

public function __construct($name, $options=false){

Expand Down Expand Up @@ -107,7 +174,10 @@ public function getOption($key) {
public function setOptions($options){
if (is_array($options)){
foreach($options as $option=>$value){
if ($option == 'id') { continue; }
if ($option == 'id') {
$this->field_id = $value;
continue;
}
$this->{$option} = $value;
}
if (isset($options['title'])){
Expand Down Expand Up @@ -221,4 +291,16 @@ public function delete($value){
return true;
}

public function hookAfterAdd($content_table_name, $field, $model){
return $this;
}

public function hookAfterUpdate($content_table_name, $field, $field_old, $model){
return $this;
}

public function hookAfterRemove($content_table_name, $field, $model){
return $this;
}

}
3 changes: 2 additions & 1 deletion system/core/template.php
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ public function hasMenu($menu_name){
* @param int $max_items Максимальное количество видимых пунктов
* @param bool $is_allow_multiple_active Определять все активные пункты меню
* @param string $template Название файла шаблона меню в assets/ui/
* @param string $menu_name Название(подпись) меню
* @param string $menu_title Название(подпись) меню
*/
public function menu($menu_name, $detect_active_id=true, $css_class='menu', $max_items=0, $is_allow_multiple_active=false, $template='menu', $menu_title=''){

Expand Down Expand Up @@ -1635,6 +1635,7 @@ public function renderPermissionsGrid($rules, $groups, $values, $submit_url){
* @param string $css_class CSS класс контейнера пунктов меню
* @param int $max_items Максимальное количество видимых пунктов
* @param string $template Название файла шаблона меню в assets/ui/
* @param string $menu_title Название(подпись) меню
*/
public function renderMenu($menu, $active_ids=array(), $css_class='menu', $max_items=0, $template = 'menu', $menu_title=''){

Expand Down
6 changes: 3 additions & 3 deletions system/fields/image.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public function getOptions(){
'title' => LANG_PARSER_IMAGE_SIZE_TEASER,
'default' => 'small',
'generator' => function (){
$presets = cmsCore::getModel('images')->getPresetsList();
$presets = cmsCore::getModel('images')->getPresetsList(true);
$presets['original'] = LANG_PARSER_IMAGE_SIZE_ORIGINAL;
return $presets;
}
Expand All @@ -24,7 +24,7 @@ public function getOptions(){
'title' => LANG_PARSER_IMAGE_SIZE_FULL,
'default' => 'big',
'generator' => function (){
$presets = cmsCore::getModel('images')->getPresetsList();
$presets = cmsCore::getModel('images')->getPresetsList(true);
$presets['original'] = LANG_PARSER_IMAGE_SIZE_ORIGINAL;
return $presets;
}
Expand All @@ -33,7 +33,7 @@ public function getOptions(){
'title' => LANG_PARSER_IMAGE_SIZE_MODAL,
'default' => '',
'generator' => function (){
$presets = cmsCore::getModel('images')->getPresetsList();
$presets = cmsCore::getModel('images')->getPresetsList(true);
$presets['original'] = LANG_PARSER_IMAGE_SIZE_ORIGINAL;
return array('' => '') + $presets;
}
Expand Down
6 changes: 3 additions & 3 deletions system/fields/images.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public function getOptions(){
'title' => LANG_PARSER_IMAGE_SIZE_TEASER,
'default' => 'small',
'generator' => function (){
$presets = cmsCore::getModel('images')->getPresetsList();
$presets = cmsCore::getModel('images')->getPresetsList(true);
$presets['original'] = LANG_PARSER_IMAGE_SIZE_ORIGINAL;
return $presets;
}
Expand All @@ -23,7 +23,7 @@ public function getOptions(){
'title' => LANG_PARSER_IMAGE_SIZE_FULL,
'default' => 'big',
'generator' => function (){
$presets = cmsCore::getModel('images')->getPresetsList();
$presets = cmsCore::getModel('images')->getPresetsList(true);
$presets['original'] = LANG_PARSER_IMAGE_SIZE_ORIGINAL;
return $presets;
}
Expand All @@ -32,7 +32,7 @@ public function getOptions(){
'title' => LANG_PARSER_SMALL_IMAGE_PRESET,
'default' => 'small',
'generator' => function (){
$presets = cmsCore::getModel('images')->getPresetsList();
$presets = cmsCore::getModel('images')->getPresetsList(true);
$presets['original'] = LANG_PARSER_IMAGE_SIZE_ORIGINAL;
return $presets;
}
Expand Down
Loading

0 comments on commit 0684518

Please sign in to comment.