Вход Регистрация
Файл: system/controllers/content/actions/item_bind_form.php
Строк: 160
<?php

class actionContentItemBindForm extends cmsAction {

    public function 
run() {

        
$ctype_name       $this->request->get('ctype_name''');
        
$child_ctype_name $this->request->get('child_ctype_name''');
        
$item_id          $this->request->get('id'0);
        
$mode             $this->request->get('mode''childs');
        
$input_action     $this->request->get('input_action''bind');
        
$selected_ids     $this->request->get('selected''');

        if (!
$ctype_name || !$child_ctype_name) {
            return 
cmsCore::error404();
        }

        if (
$this->validate_sysname($ctype_name) !== true || $this->validate_sysname($child_ctype_name) !== true) {
            return 
cmsCore::error404();
        }

        
$is_allowed_to_add    cmsUser::isAllowed($child_ctype_name'add_to_parent');
        
$is_allowed_to_bind   $input_action == 'select' || cmsUser::isAllowed($child_ctype_name'bind_to_parent');
        
$is_allowed_to_unbind cmsUser::isAllowed($child_ctype_name'bind_off_parent');

        if (
$mode != 'unbind' && (!$is_allowed_to_add && !$is_allowed_to_bind)) {
            return 
cmsCore::error404();
        }

        if (
$mode == 'unbind' && !$is_allowed_to_unbind) {
            return 
cmsCore::error404();
        }

        
// родительский тип контента
        
$ctype $this->model->getContentTypeByName($ctype_name);
        if (!
$ctype) { return cmsCore::error404(); }

        
// дочерний контроллер
        
$target_controller 'content';

        
// дочерний тип контента
        
$child_ctype $this->model->getContentTypeByName($child_ctype_name);
        
// если нет, проверяем по контроллеру
        
if (!$child_ctype) {
            if (
cmsCore::isControllerExists($child_ctype) && cmsController::enabled($child_ctype)) {

                if (
$mode != 'parents') {
                    return 
cmsCore::error404();
                }

                
$child_ctype = [
                    
'name' => $child_ctype_name,
                    
'id'   => null
                
];

                
$target_controller $child_ctype_name;
            } else {
                return 
cmsCore::error404();
            }
        }

        
// связь
        
$relation $this->model->getContentRelationByTypes($ctype['id'], $child_ctype['id'], $target_controller);
        if (!
$relation) {
            return 
cmsCore::error404();
        }

        
$perm_bind_to_parent cmsUser::getPermissionValue($child_ctype_name'bind_to_parent');

        
// сама запись
        
$item = ['id' => 0];

        if (
$item_id) {
            if (
$mode == 'childs' || $mode == 'unbind') {
                
$item $this->model->getContentItem($ctype_name$item_id);
            } else {
                if (
$relation['target_controller'] != 'content') {
                    
$item cmsCore::getModel($relation['target_controller'])->getContentItem($item_id);
                } else {
                    
$item $this->model->getContentItem($child_ctype_name$item_id);
                }
            }
            if (!
$item) { return cmsCore::error404(); }
        }

        if (
$mode == 'childs' || $mode == 'unbind') {

            if (
$relation['target_controller'] != 'content') {
                
$this->model->setTablePrefix('');
            }

            
$fields $this->model->getContentFields($child_ctype_name);
        }

        if (
$mode == 'parents') {

            
$this->model->setTablePrefix(cmsModel::DEFAULT_TABLE_PREFIX);

            
$fields $this->model->getContentFields($ctype_name);
        }

        
$fields cmsEventsManager::hook('ctype_content_fields'$fields);

        
$filter_fields = [];

        foreach (
$fields as $field) {
            if (
$field['handler']->filter_type == 'str') {
                
$filter_fields[$field['name']] = $field['title'];
            }
        }

        
$filter_fields['id'] = 'ID';

        
$show_all_tab $show_my_tab  $is_allowed_to_bind;

        
// показываем родительские записи
        
if ($mode == 'parents') {
            
$show_all_tab = !in_array($perm_bind_to_parent, ['all_to_own''own_to_own''other_to_own']);
            
$show_my_tab  = !in_array($perm_bind_to_parent, ['own_to_other''other_to_other''all_to_other']);
        }

        
// показываем дочерние записи
        
if ($mode == 'childs') {
            
$show_all_tab = !in_array($perm_bind_to_parent, ['own_to_all''own_to_own''own_to_other']);
            
$show_my_tab  = !in_array($perm_bind_to_parent, ['other_to_own''other_to_other''other_to_all']);
        }

        if (
$this->cms_user->is_admin) {
            
$show_all_tab true;
        }

        
$filter_url href_to($ctype['name'], 'bind_list', [$child_ctype['name'], $item['id']]);
        
$filter_params = [];
        if(
$selected_ids){
            
$filter_params['selected'] = $selected_ids;
        }
        if(
$input_action){
            
$filter_params['input_action'] = $input_action;
        }
        if(
$filter_params){
            
$filter_url .= '?'.http_build_query($filter_params);
        }

        return 
$this->cms_template->render('item_bind_form', [
            
'show_all_tab'  => $show_all_tab,
            
'show_my_tab'   => $show_my_tab && $this->cms_user->is_logged,
            
'mode'          => $mode,
            
'ctype'         => $ctype,
            
'child_ctype'   => $child_ctype,
            
'item'          => $item,
            
'input_action'  => $input_action,
            
'filter_url'    => $filter_url,
            
'filter_fields' => $filter_fields
        
]);
    }

}
Онлайн: 1
Реклама