Вход Регистрация
Файл: protected/extensions/yii2-debug/controllers/DefaultController.php
Строк: 250
<?php

/**
 * @author Roman Zhuravlev <zhuravljov@gmail.com>
 * @package Yii2Debug
 * @since 1.1.13
 *
 * @property Yii2Debug $owner
 */
class DefaultController extends CController
{
    public 
$layout 'main';
    public 
$summary;

    
/**
     * @return Yii2Debug
     */
    
public function getOwner()
    {
        return 
$this->getModule()->owner;
    }

    
/**
     * @return Yii2Debug
     * @deprecated will removed in 1.2
     */
    
public function getComponent()
    {
        return 
$this->getModule()->owner;
    }

    
/**
     * Общий список логов
     */
    
public function actionIndex()
    {
        
$this->render('index', array(
            
'manifest' => $this->getManifest(),
        ));
    }

    
/**
     * Страница для просмотра отладочной информации
     * @param null $tag сохраненного лога
     * @param null $panel id страницы
     */
    
public function actionView($tag null$panel null)
    {
        if (
$tag === null) {
            
$tags array_keys($this->getManifest());
            
$tag reset($tags);
        }
        
$this->loadData($tag);
        if (isset(
$this->component->panels[$panel])) {
            
$activePanel $this->getOwner()->panels[$panel];
        } else {
            
$activePanel $this->getOwner()->panels['request'];
        }
        
$this->render('view', array(
            
'tag' => $tag,
            
'summary' => $this->summary,
            
'manifest' => $this->getManifest(),
            
'panels' => $this->getOwner()->panels,
            
'activePanel' => $activePanel,
        ));
    }

    
/**
     * Блокировка/разблокировка лога от автоматического удаления
     * @param string $tag
     */
    
public function actionLock($tag)
    {
        
$lock $this->getOwner()->getLock($tag);
        
$this->getOwner()->setLock($tag, !$lock);
        echo !
$lock;
    }

    
/**
     * @param string $tag
     * @param int $num
     * @param string $connection
     * @throws CHttpException
     * @throws Exception
     */
    
public function actionExplain($tag$num$connection)
    {
        
$this->loadData($tag);

        
$dbPanel $this->getOwner()->panels['db'];
        if (!(
$dbPanel instanceof Yii2DbPanel)) {
            throw new 
Exception('Yii2DbPanel not found');
        }
        if (!
$dbPanel->canExplain) {
            throw new 
CHttpException(403'Forbidden');
        }
        
$message $dbPanel->messageByNum($num);
        if (
$message === null) {
            throw new 
Exception("Not found query by number $num");
        }
        
$query $dbPanel->formatSql($messagetrue);
        
/* @var CDbConnection $db */
        
$db Yii::app()->getComponent($connection);

        if (!
Yii::app()->request->isAjaxRequest) {
            
$this->getOwner()->setLock($tagtrue);
            
$this->render('explain', array(
                
'tag' => $tag,
                
'summary' => $this->summary,
                
'manifest' => $this->getManifest(),
                
'panels' => $this->getOwner()->panels,
                
'dbPanel' => $dbPanel,
                
'connection' => $db,
                
'procedure' => Yii2DbPanel::getExplainQuery($query$db->driverName),
                
'explainRows' => Yii2DbPanel::explain($query$db),
            ));
        } else {
            
$this->renderPartial('_explain', array(
                
'connection' => $db,
                
'explainRows' => Yii2DbPanel::explain($query$db),
            ));
        }
    }

    
/**
     * Генерирует код дебаг-панели по ajax-запросу
     * @param $tag
     */
    
public function actionToolbar($tag)
    {
        
$this->loadData($tag);
        
$this->renderPartial('toolbar', array(
            
'tag' => $tag,
            
'panels' => $this->getOwner()->panels,
        ));
    }

    public function 
actionPhpinfo()
    {
        
phpinfo();
    }

    private 
$_manifest;

    protected function 
getManifest()
    {
        if (
$this->_manifest === null) {
            
$path $this->getOwner()->logPath;
            
$indexFile "$path/index.data";
            if (
is_file($indexFile)) {
                
$this->_manifest array_reverse(unserialize(file_get_contents($indexFile)), true);
            } else {
                
$this->_manifest = array();
            }
        }
        return 
$this->_manifest;
    }

    protected function 
loadData($tag)
    {
        
$manifest $this->getManifest();
        if (isset(
$manifest[$tag])) {
            
$path $this->getOwner()->logPath;
            
$dataFile "$path/$tag.data";
            
$data unserialize(file_get_contents($dataFile));
            foreach (
$this->getOwner()->panels as $id => $panel) {
                if (isset(
$data[$id])) {
                    
$panel->load($data[$id], $tag);
                } else {
                    
// remove the panel since it has not received any data
                    
unset($this->getOwner()->panels[$id]);
                }
            }
            
$this->summary $data['summary'];
        } else {
            throw new 
CHttpException(404"Unable to find debug data tagged with '$tag'.");
        }
    }

    public function 
actionConfig()
    {
        if (!
$this->getOwner()->showConfig) {
            throw new 
CHttpException(403'Forbidden');
        }
        
$components = array();
        foreach (
Yii::app()->getComponents(false) as $id => $config) {
            try {
                
$components[$id] = Yii::app()->getComponent($id);
            } catch (
Exception $e) {
                
assert(is_array($config));
                
$components[$id] = array_merge($config, array(
                    
'_error_' => $e->getMessage(),
                ));
            }
        }
        
ksort($components);
        
$modules Yii::app()->modules;
        
ksort($modules);
        
$data $this->hideConfigData(
            array(
                
'app' => Yii2Debug::prepareData(Yii::app()),
                
'components' => Yii2Debug::prepareData($components),
                
'modules' => Yii2Debug::prepareData($modules),
                
'params' => Yii2Debug::prepareData(Yii::app()->params),
            ),
            
$this->getOwner()->hiddenConfigOptions
        
);
        
$this->render('config'$data);
    }

    
/**
     * @param array $config
     * @param array $options
     * @return array
     */
    
private function hideConfigData($config$options)
    {
        foreach (
$options as $option) {
            
$item = &$config;
            foreach (
explode('/'$option) as $key) {
                if (
is_array($item) && isset($item[$key])) {
                    
$item = &$item[$key];
                } else {
                    unset(
$item);
                    break;
                }
            }
            if (isset(
$item)) {
                
$item '**********';
                unset(
$item);
            }
        }
        return 
$config;
    }
}
Онлайн: 0
Реклама