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

class actionCommentsRefresh extends cmsAction {

    public 
$request_params = array(
        
'tc' => array(
            
'default' => '',
            
'rules'   => array(
                array(
'required'),
                array(
'sysname'),
                array(
'max_length'32)
            )
        ),
        
'ts' => array(
            
'default' => '',
            
'rules'   => array(
                array(
'required'),
                array(
'sysname'),
                array(
'max_length'32)
            )
        ),
        
'ti' => array(
            
'default' => 0,
            
'rules'   => array(
                array(
'required'),
                array(
'digits')
            )
        ),
        
'tud' => array(
            
'default' => 0,
            
'rules'   => array(
                array(
'digits')
            )
        ),
        
'timestamp' => array(
            
'default' => 0,
            
'rules'   => array(
                array(
'required'),
                array(
'digits')
            )
        )
    );

    public function 
run(){

        if (!
$this->request->isAjax()){ cmsCore::error404(); }
        if (!
$this->cms_user->is_logged) { cmsCore::error404(); }

        
$timestamp         $this->request->get('timestamp');
        
$target_controller $this->request->get('tc');
        
$target_subject    $this->request->get('ts');
        
$target_id         $this->request->get('ti');
        
$target_user_id    $this->request->get('tud');

        
// Проверяем наличие контроллера и модели
        
if (!(cmsCore::isControllerExists($target_controller) &&
                    
cmsCore::isModelExists($target_controller) &&
                    
cmsController::enabled($target_controller))){
            return 
$this->cms_template->renderJSON([
                
'error' => false'total' => 0'exists' => 0
            
]);
        }

        
$comments_per_request 5;

        
$this->model->
                
filterEqual('target_controller'$target_controller)->
                
filterEqual('target_subject'$target_subject)->
                
filterEqual('target_id'$target_id)->
                
filterTimestampGt('date_pub'$timestamp)->
                
filterNotEqual('user_id'$this->cms_user->id)->
                
orderBy('id')->
                
limit($comments_per_request);

        
$total_count $this->model->getCommentsCount();

        if (!
$total_count){
            return 
$this->cms_template->renderJSON([
                
'error' => false'total' => 0'exists' => 0
            
]);
        }

        
$comments $this->model->getComments();

        
// Получаем модель целевого контроллера
        
$target_model cmsCore::getModel($target_controller);

        
// получаем опции, если есть
        
$target_options = [];
        if(
method_exists($target_model'getCommentsOptions')){
            
$target_options $target_model->getCommentsOptions($target_subject);
        }

        
$comments_collection = [];

        
$template_name = !empty($target_options['template']) ? $target_options['template'] : $this->comment_template;

        foreach(
$comments as $comment){
            
$comments_collection[] = array(
                
'id'        => $comment['id'],
                
'parent_id' => $comment['parent_id'],
                
'level'     => $comment['level'],
                
'timestamp' => strtotime($comment['date_pub']),
                
'html'      => $this->cms_template->render($template_name, array(
                    
'comments'       => array($comment),
                    
'target_user_id' => $target_user_id,
                    
'user'           => $this->cms_user,
                    
'is_levels'      => true,
                    
'is_controls'    => true,
                    
'is_show_target' => false
                
), new cmsRequest(array(), cmsRequest::CTX_INTERNAL))
            );
        }

        
// Формируем и возвращаем результат
        
return $this->cms_template->renderJSON([
            
'error' => false,
            
'total' => $total_count,
            
'exists' => $total_count $comments_per_request $total_count $comments_per_request 0,
            
'comments' => $comments_collection
        
]);

    }

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