<commit_before><?php
/**
 * YupeModule файл класса.
 * Модуль yupe - основной модуль системы.
 *
 * Модуль yupe содержит в себе все основные компоненты, которые используются другими модулями
 * Это наше ядрышко. Классы ядра рекомендуется именовать с буквы "Y", пример YWebUser.
 *
 * @category  YupeMudules
 * @package   YupeCMS
 * @author    <NAME> <<EMAIL>>
 * @copyright 2009-2013 Yupe! Copyright &copy;
 * @license   BSD http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F_BSD
 * @version   0.5.3
 * @link      http://yupe.ru
 */

/**
 * YupeModule файл класса.
 * Модуль yupe - основной модуль системы.
 *
 * Модуль yupe содержит в себе все основные компоненты, которые используются другими модулями
 * Это наше ядрышко. Классы ядра рекомендуется именовать с буквы "Y", пример YWebUser.
 *
 * @category  YupeMudules
 * @package   YupeCMS
 * @author    <NAME> <<EMAIL>>
 * @copyright 2009-2013 Yupe! Copyright &copy;
 * @license   BSD http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F_BSD
 * @version   0.5.3
 * @link      http://yupe.ru
 */
class YupeModule extends YWebModule
{
    public $enableAssets;
    public $cache;

    public $siteDescription;
    public $siteName;
    public $siteKeyWords;

    public $backendLayout = 'column2';
    public $backendTheme;
    public $emptyLayout = 'empty';
    public $theme;

    public $brandUrl;
    public $coreCacheTime = 3600;
    public $coreModuleId = 'yupe';
    public $editorsDir = 'application.modules.yupe.widgets.editors';
    public $uploadPath = 'uploads';
    public $email;

    public $categoryIcon;
    public $categorySort;

    public $availableLanguages = 'ru';
    public $defaultLanguage = 'ru';
    public $defaultBackendLanguage = 'ru';

    public $otherCategoryName;
    public $updateChannel = 'release';

    /**
     * Возвращаем версию:
     *
     * @return string
     **/
    public function getVersion()
    {
        return Yii::t('YupeModule.yupe', '0.5.3');
    }

    /**
     * Проверка модуля на ошибки:
     *
     * @return bool/mixed - массив сообщений при ошибках или true если всё ок
     **/
    public function checkSelf()
    {
        $messages = array();

        if (Yii::app()->hasModule('install')) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'У Вас активирован модуль "Установщик", после установки системы его необходимо отключить! <a href="http://www.yiiframework.ru/doc/guide/ru/basics.module">Подробнее про Yii модули</a>'
                ),
            );
        }

        if (Yii::app()->db->enableProfiling) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Пожалуйста, отключите профайлер запросов (файл /protected/config/db.php, параметр "enableProfiling")!'
                ),
            );
        }

        if (Yii::app()->db->enableParamLogging) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Пожалуйста, отключите логирование запросов (файл /protected/config/db.php, параметр "enableParamLogging")!'
                ),
            );
        }

        if (Yii::app()->hasModule('gii')) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'У Вас активирован модуль "gii" после установки системы его необходимо отключить! <a href="http://www.yiiframework.ru/doc/guide/ru/basics.module">Подробнее про Yii модули</a>'
                ),
            );
        }

        $uploadPath = Yii::getPathOfAlias('webroot') . '/' . $this->uploadPath;

        if (!is_writable($uploadPath)) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Директория "{dir}" не доступна для записи! {link}',
                    array(
                        '{dir}' => $uploadPath,
                        '{link}' => CHtml::link(
                            Yii::t('YupeModule.yupe', 'Изменить настройки'),
                            array('/yupe/backend/modulesettings/', 'module' => 'yupe')
                        ),
                    )
                ),
            );
        }

        if (!is_writable(Yii::app()->runtimePath)) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Директория "{dir}" не доступна для записи!',
                    array('{dir}' => Yii::app()->runtimePath)
                ),
            );
        }

        if (!is_writable(Yii::app()->getAssetManager()->basePath)) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Директория "{dir}" не доступна для записи!',
                    array('{dir}' => Yii::app()->getAssetManager()->basePath)
                ),
            );
        }

        if (defined('YII_DEBUG') && YII_DEBUG) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Yii работает в режиме отладки, пожалуйста, отключите его! <br/> <a href="http://www.yiiframework.ru/doc/guide/ru/topics.performance">Подробнее про улучшение производительности Yii приложений</a>'
                ),
            );
        }

        if (!Yii::app()->db->schemaCachingDuration) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Включите кэширование схемы базы данных! <br/> <a href="http://www.yiiframework.ru/doc/guide/ru/topics.performance">Подробнее про улучшение производительности Yii приложений</a>'
                ),
            );
        }

        return isset($messages[YWebModule::CHECK_ERROR]) ? $messages : true;
    }

    /**
     * Возвращаем названия параметров:
     *
     * @return mixed
     **/
    public function getParamsLabels()
    {
        return array(
            'siteDescription' => Yii::t('YupeModule.yupe', 'Описание сайта'),
            'siteName' => Yii::t('YupeModule.yupe', 'Название сайта'),
            'siteKeyWords' => Yii::t('YupeModule.yupe', 'Ключевые слова сайта'),
            'backendLayout' => Yii::t('YupeModule.yupe', 'Layout административной части'),
            'backendTheme' => Yii::t('YupeModule.yupe', 'Тема административной части'),
            'theme' => Yii::t('YupeModule.yupe', 'Тема сайта'),
            'coreCacheTime' => Yii::t('YupeModule.yupe', 'Время кэширования (сек.)'),
            'editorsDir' => Yii::t('YupeModule.yupe', 'Каталог для визивиг редакторов'),
            'uploadPath' => Yii::t('YupeModule.yupe', 'Каталог для загрузки файлов (относительно корня сайта)'),
            'editor' => Yii::t('YupeModule.yupe', 'Визуальный редактор'),
            'email' => Yii::t('YupeModule.yupe', 'Email администратора'),
            'availableLanguages' => Yii::t('YupeModule.yupe', 'Список доступных языков через запятую (напр. ru,en,de)'),
            'defaultLanguage' => Yii::t('YupeModule.yupe', 'Язык по умолчанию для сайта'),
            'defaultBackendLanguage' => Yii::t('YupeModule.yupe', 'Язык по умолчанию для панели управления'),
            'updateChannel' => Yii::t('YupeModule.yupe', 'Обновление Yupe'),
        );
    }

    /**
     * Возвращаем редактируемые параметры:
     *
     * @return mixed
     **/
    public function getEditableParams()
    {
        return array(
            'coreCacheTime',
            'theme' => $this->getThemes(),
            'backendLayout',
            'backendTheme' => $this->getThemes(true),
            'siteName',
            'siteDescription',
            'siteKeyWords',
            'editorsDir',
            'uploadPath',
            'editor' => $this->getEditors(),
            'email',
            'availableLanguages',
            'defaultLanguage' => $this->getLanguagesList(),
            'defaultBackendLanguage' => $this->getLanguagesList(),
            //'updateChannel'          => $this->updateChannelList,
        );
    }

    /**
     * массив групп параметров модуля, для группировки параметров на странице настроек
     * 
     * @return array
     */
    public function getEditableParamsGroups()
    {
        return array(
            'main' => array(
                'label' => Yii::t('YupeModule.yupe', 'Основные настройки'),
            ),
            'theme' => array(
                'label' => Yii::t('YupeModule.yupe', 'Настройка внешнего вида'),
                'items' => array(<commit_msg>#1059 Исправлена ошибка с языками и параметрами модуля, путем добавления валидатора для поля availableLanguages<commit_after><?php
/**
 * YupeModule файл класса.
 * Модуль yupe - основной модуль системы.
 *
 * Модуль yupe содержит в себе все основные компоненты, которые используются другими модулями
 * Это наше ядрышко. Классы ядра рекомендуется именовать с буквы "Y", пример YWebUser.
 *
 * @category  YupeMudules
 * @package   YupeCMS
 * @author    <NAME> <<EMAIL>>
 * @copyright 2009-2013 Yupe! Copyright &copy;
 * @license   BSD http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F_BSD
 * @version   0.5.3
 * @link      http://yupe.ru
 */

/**
 * YupeModule файл класса.
 * Модуль yupe - основной модуль системы.
 *
 * Модуль yupe содержит в себе все основные компоненты, которые используются другими модулями
 * Это наше ядрышко. Классы ядра рекомендуется именовать с буквы "Y", пример YWebUser.
 *
 * @category  YupeMudules
 * @package   YupeCMS
 * @author    <NAME> <<EMAIL>>
 * @copyright 2009-2013 Yupe! Copyright &copy;
 * @license   BSD http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F_BSD
 * @version   0.5.3
 * @link      http://yupe.ru
 */
class YupeModule extends YWebModule
{
    public $enableAssets;
    public $cache;

    public $siteDescription;
    public $siteName;
    public $siteKeyWords;

    public $backendLayout = 'column2';
    public $backendTheme;
    public $emptyLayout = 'empty';
    public $theme;

    public $brandUrl;
    public $coreCacheTime = 3600;
    public $coreModuleId = 'yupe';
    public $editorsDir = 'application.modules.yupe.widgets.editors';
    public $uploadPath = 'uploads';
    public $email;

    public $categoryIcon;
    public $categorySort;

    public $availableLanguages = 'ru';
    public $defaultLanguage = 'ru';
    public $defaultBackendLanguage = 'ru';

    public $otherCategoryName;
    public $updateChannel = 'release';

    /**
     * Возвращаем версию:
     *
     * @return string
     **/
    public function getVersion()
    {
        return Yii::t('YupeModule.yupe', '0.5.3');
    }

    /**
     * Проверка модуля на ошибки:
     *
     * @return bool/mixed - массив сообщений при ошибках или true если всё ок
     **/
    public function checkSelf()
    {
        $messages = array();

        if (Yii::app()->hasModule('install')) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'У Вас активирован модуль "Установщик", после установки системы его необходимо отключить! <a href="http://www.yiiframework.ru/doc/guide/ru/basics.module">Подробнее про Yii модули</a>'
                ),
            );
        }

        if (Yii::app()->db->enableProfiling) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Пожалуйста, отключите профайлер запросов (файл /protected/config/db.php, параметр "enableProfiling")!'
                ),
            );
        }

        if (Yii::app()->db->enableParamLogging) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Пожалуйста, отключите логирование запросов (файл /protected/config/db.php, параметр "enableParamLogging")!'
                ),
            );
        }

        if (Yii::app()->hasModule('gii')) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'У Вас активирован модуль "gii" после установки системы его необходимо отключить! <a href="http://www.yiiframework.ru/doc/guide/ru/basics.module">Подробнее про Yii модули</a>'
                ),
            );
        }

        $uploadPath = Yii::getPathOfAlias('webroot') . '/' . $this->uploadPath;

        if (!is_writable($uploadPath)) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Директория "{dir}" не доступна для записи! {link}',
                    array(
                        '{dir}' => $uploadPath,
                        '{link}' => CHtml::link(
                            Yii::t('YupeModule.yupe', 'Изменить настройки'),
                            array('/yupe/backend/modulesettings/', 'module' => 'yupe')
                        ),
                    )
                ),
            );
        }

        if (!is_writable(Yii::app()->runtimePath)) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Директория "{dir}" не доступна для записи!',
                    array('{dir}' => Yii::app()->runtimePath)
                ),
            );
        }

        if (!is_writable(Yii::app()->getAssetManager()->basePath)) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Директория "{dir}" не доступна для записи!',
                    array('{dir}' => Yii::app()->getAssetManager()->basePath)
                ),
            );
        }

        if (defined('YII_DEBUG') && YII_DEBUG) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Yii работает в режиме отладки, пожалуйста, отключите его! <br/> <a href="http://www.yiiframework.ru/doc/guide/ru/topics.performance">Подробнее про улучшение производительности Yii приложений</a>'
                ),
            );
        }

        if (!Yii::app()->db->schemaCachingDuration) {
            $messages[YWebModule::CHECK_ERROR][] = array(
                'type' => YWebModule::CHECK_ERROR,
                'message' => Yii::t(
                    'YupeModule.yupe',
                    'Включите кэширование схемы базы данных! <br/> <a href="http://www.yiiframework.ru/doc/guide/ru/topics.performance">Подробнее про улучшение производительности Yii приложений</a>'
                ),
            );
        }

        return isset($messages[YWebModule::CHECK_ERROR]) ? $messages : true;
    }

    /**
     * Возвращаем названия параметров:
     *
     * @return mixed
     **/
    public function getParamsLabels()
    {
        return array(
            'siteDescription' => Yii::t('YupeModule.yupe', 'Описание сайта'),
            'siteName' => Yii::t('YupeModule.yupe', 'Название сайта'),
            'siteKeyWords' => Yii::t('YupeModule.yupe', 'Ключевые слова сайта'),
            'backendLayout' => Yii::t('YupeModule.yupe', 'Layout административной части'),
            'backendTheme' => Yii::t('YupeModule.yupe', 'Тема административной части'),
            'theme' => Yii::t('YupeModule.yupe', 'Тема сайта'),
            'coreCacheTime' => Yii::t('YupeModule.yupe', 'Время кэширования (сек.)'),
            'editorsDir' => Yii::t('YupeModule.yupe', 'Каталог для визивиг редакторов'),
            'uploadPath' => Yii::t('YupeModule.yupe', 'Каталог для загрузки файлов (относительно корня сайта)'),
            'editor' => Yii::t('YupeModule.yupe', 'Визуальный редактор'),
            'email' => Yii::t('YupeModule.yupe', 'Email администратора'),
            'availableLanguages' => Yii::t('YupeModule.yupe', 'Список доступных языков через запятую (напр. ru,en,de)'),
            'defaultLanguage' => Yii::t('YupeModule.yupe', 'Язык по умолчанию для сайта'),
            'defaultBackendLanguage' => Yii::t('YupeModule.yupe', 'Язык по умолчанию для панели управления'),
            'updateChannel' => Yii::t('YupeModule.yupe', 'Обновление Yupe'),
        );
    }

    /**
     * Возвращаем редактируемые параметры:
     *
     * @return mixed
     **/
    public function getEditableParams()
    {
        return array(
            'coreCacheTime',
            'theme' => $this->getThemes(),
            'backendLayout',
            'backendTheme' => $this->getThemes(true),
            'siteName',
            'siteDescription',
            'siteKeyWords',
            'editorsDir',
            'uploadPath',
            'editor' => $this->getEditors(),
            'email',
            'availableLanguages',
            'defaultLanguage' => $this->getLanguagesList(),
            'defaultBackendLanguage' => $this->getLanguagesList(),
            //'updateChannel'          => $this->updateChannelList,
        );
    }

    /**
     * Возвращаем правила валидации для параметров модуля
     *
     * @return array Правила валидации для параметров модуля
     */
    public function rules()
    {
        return array(
            array('availableLanguages','filter','filter'=>function($str){ return preg_replace('/\s+/','',$str); }),
        );
    }

    /**
     * массив групп параметров модуля, для группировки параметров на странице настроек
     * 
     * @return array
     */
    public function getEditableParamsGroups()
    {
        return array(
            'main' => array(
                'label' => Yii::t('YupeModule.yupe', 'Основные настройки'),
            ),
            'theme' => array(
                'label' => Yii::t('YupeModule.yupe', 'Настройка внешнего вида'),
                'items' => array(
{'fraction_non_alphanumeric': 0.1429018462501304, 'fraction_numerical': 0.0066757066861374776, 'mean_word_length': 2.010204081632653, 'pattern_counts': {'":': 0, '<': 37, '<?xml version=': 0, '>': 176, 'https://': 0, 'lorem ipsum': 0, 'www.': 8, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2633082', 'n_tokens_mistral': 6553, 'n_tokens_neox': 6596, 'n_words': 1127}