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

class actionContentItemView extends cmsAction {

    public function 
run(){

        
$user cmsUser::getInstance();
        
$config cmsConfig::getInstance();
        
        
// Получаем название типа контента и сам тип
        
$ctype_name $this->request->get('ctype_name');
        
$ctype $this->model->getContentTypeByName($ctype_name);        

        
// Получаем SLUG записи
        
$slug $this->request->get('slug');
        
        if (!
$ctype) {
            if (
$config->ctype_default){
                
$ctype $this->model->getContentTypeByName($config->ctype_default);            
                if (!
$ctype) { cmsCore::error404(); }                
                
$slug $ctype_name '/' $slug;
                
$ctype_name $config->ctype_default;
            } else {
                
cmsCore::error404();                
            }
        } else {
            
$core cmsCore::getInstance();
            if (
$config->ctype_default && $config->ctype_default == $core->uri_controller){
                
$this->redirect(href_to($slug '.html'), 301);
            }
        }
        
        if (!
$ctype['options']['item_on']) { cmsCore::error404(); }
        
        
// Получаем запись
        
$item $this->model->getContentItemBySLUG($ctype_name$slug);
        if (!
$item) { cmsCore::error404(); } 

        
// Проверяем прохождение модерации
        
$is_moderator $user->is_admin || $this->model->userIsContentTypeModerator($ctype_name$user->id);
        if (!
$item['is_approved']){            
            if (!
$is_moderator && $user->id != $item['user_id']){ cmsCore::error404(); }
        }

        
// Проверяем публикацию
        
if (!$item['is_pub']){
            if (!
$is_moderator && $user->id != $item['user_id']){ cmsCore::error404(); }
        }
        
        
// Проверяем приватность
        
if ($item['is_private']){
            
$is_friend $user->isFriend($item['user_id']);
            
$is_can_view_private cmsUser::isAllowed($ctype['name'], 'view_all');
            if (!
$is_friend && !$is_can_view_private && !$is_moderator){ cmsCore::error404(); }
        }

        
// Проверяем ограничения доступа из других контроллеров
        
if ($item['is_parent_hidden']){
            
$is_parent_viewable_result cmsEventsManager::hook("content_view_hidden", array('viewable'=>true'item'=>$item));
            if (!
$is_parent_viewable_result['viewable']){
                
cmsUser::goLogin();
            }
        }

        
$item['ctype_name'] = $ctype_name;

        if (
$ctype['is_cats'] && $item['category_id'] > 1){
            
$item['category'] = $this->model->getCategory($ctype_name$item['category_id']);
        }

        
// Получаем поля для данного типа контента
        
$fields $this->model->getContentFields($ctype_name);

        
// Парсим значения полей
        
foreach($fields as $name=>$field){
            
$fields$name ]['html'] = $field['handler']->parse$item[$name] );
        }

        
// Получаем поля-свойства
        
if ($ctype['is_cats'] && $item['category_id'] > 1){
            
$props $this->model->getContentProps($ctype['name'], $item['category_id']);
            
$props_values $this->model->getPropsValues($ctype['name'], $item['id']);
        }

        
// Рейтинг
        
if ($ctype['is_rating']){

            
$rating_controller cmsCore::getController('rating', new cmsRequest(array(
                
'target_controller' => $this->name,
                
'target_subject' => $ctype['name']
            ), 
cmsRequest::CTX_INTERNAL));

            
$is_rating_allowed cmsUser::isAllowed($ctype['name'], 'rate') && ($item['user_id'] != $user->id);

            
$item['rating_widget'] = $rating_controller->getWidget($item['id'], $item['rating'], $is_rating_allowed);

        }

        
// Комментарии
        
if ($ctype['is_comments'] && $item['is_approved']){

            
$comments_controller cmsCore::getController('comments', new cmsRequest(array(
                
'target_controller' => $this->name,
                
'target_subject' => $ctype['name'],
                
'target_id' => $item['id']
            ), 
cmsRequest::CTX_INTERNAL));

            
$item['comments_widget'] = $comments_controller->getWidget();

        }

        
// Получаем теги
        
if ($ctype['is_tags']){
            
$tags_model cmsCore::getModel('tags');
            
$item['tags'] = $tags_model->getTagsForTarget($this->name$ctype['name'], $item['id']);
        }

        
// Информация о модераторе для админа и владельца записи
        
if ($item['approved_by'] && ($user->is_admin || $user->id == $item['user_id'])){
            
$item['approved_by'] = cmsCore::getModel('users')->getUser($item['approved_by']);
        }

        list(
$ctype$item$fields) = cmsEventsManager::hook("content_before_item", array($ctype$item$fields));
        list(
$ctype$item$fields) = cmsEventsManager::hook("content_{$ctype['name']}_before_item", array($ctype$item$fields));

        if (!empty(
$ctype['options']['hits_on'])){
            
$this->model->incrementHitsCounter($ctype['name'], $item['id']);
        }
        
        return 
cmsTemplate::getInstance()->render('item_view', array(
            
'ctype' => $ctype,
            
'fields' => $fields,
            
'props' => isset($props) ? $props false,
            
'props_values' => isset($props_values) ? $props_values false,
            
'item' => $item,
            
'is_moderator' => $is_moderator,
            
'user' => $user
        
));

    }

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