<commit_before><?php

require_once 'structure.php';

/**
 * Абстрактный класс модуля в платформе Абрикос
 *
 * Структура модуля
 *
 * Модуль в платформе Абрикос — это самостоятельная сущность, со своим шаблоном,
 * стилями css, картинками, серверными скриптами и прочими необходимыми для его
 * работы компонентами. Все модули в платформе Абрикос располагаются в папке modules.
 *
 * Главным файлом любого модуля в платформе является скрипт module.php,
 * который должен находиться в корневой папке модуля. Когда ядро платформы просматривает
 * доступные модули, то она смотрит именно этот файл.
 *
 * @package Abricos
 * @copyright Copyright (C) 2008-2011 Abricos. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
 * @author <NAME> <<EMAIL>>
 * @example modules/example/module.php
 */
abstract class Ab_Module {

    /**
     * CSS по умолчанию (имя файла в папке css модуля).
     *
     * @deprecated
     */
    private $defaultCSS = "";

    /**
     * TODO: remove
     *
     * @deprecated
     */
    private $lang;


    /**
     * Ошибка модуля. Если true, модуль не инициализируется в ядре
     *
     * @var boolean
     */
    public $error = false;

    /**
     * Политика безопасности модуля
     *
     * @var Ab_UserPermission
     */
    public $permission = null;

    /**
     * Версия модуля
     *
     * @var string
     */
    public $version = "0.0.0";

    /**
     * Наименование модуля латинскими буквами и цифрами
     *
     * Используется в качестве уникального идентификатора модуля
     * в платформе Абрикос
     *
     * @var string
     */
    public $name = "";

    /**
     * Перехват линка модуля.
     * Если имеет значение "__super", то модуль берет на себя
     * управление с главной страницы.
     *
     * @var string
     */
    public $takelink = "";

    /**
     * Список зависимых модулей и их версии
     * Например:
     * <code>
     * array(
     *   'sys' => '0.5.5',
     *   'uprofile' => '0.1.2'
     * );
     * </code>
     * Примечание: модуль 'core' является синонимом 'sys'
     *
     * @var array
     */
    public $depends = array();

    public $defaultLocale = 'ru-RU';

    private $_i18n = null;

    /**
     * @return Ab_CoreI18n
     */
    public function I18n(){
        if (empty($this->_i18n)){
            require_once 'i18n.php';
            $this->_i18n = new Ab_CoreI18n($this);
        }
        return $this->_i18n;
    }

    /**
     * @return array|null
     * @deprecated
     */
    public function GetI18n(){

        $i18n = $this->I18n();
        $data = $i18n->GetData();

        $curLocale = $i18n->LocaleNormalize(Abricos::$locale);
        $defLocale = $i18n->LocaleNormalize($this->defaultLocale);

        if ($curLocale !== $defLocale){
            $defData = $i18n->GetData($defLocale);
            $data = array_merge_recursive($defData, $data);
        }

        return $data;
    }


    /**
     * Когда управление по формированию ответа сервера переходит модулю,
     * происходит вызов этого метода, который должен вернуть имя
     * контент файла (стартового кирпича).
     *
     * Стартовые кирпичи находяться в папке модуля content и содержат в себе
     * всю необходимую информацию для формирования ответа.
     *
     * Если метод возвращает пустую строку, платформа выдает 404 ошибку.
     *
     * Если файл контент не найден, то платформа выдает 500 ошибку.
     *
     * @return string
     */
    public function GetContentName(){
        return Abricos::$adress->contentName;
    }

    /**
     * Явно указать информацию о шаблоне, тем самым игнорируя шаблон
     * указанный в стартовом кирпиче.
     * Для определения необходимо возвращать массив в формате:
     * array(
     *   'owner' => '<NAME>',
     *   'name' => '<NAME>'
     * )
     *
     * @return null || array
     */
    public function GetTemplate(){
        return null;
    }

    /**
     * Получить менеджер модуля
     *
     * Пример из модуля Example:
     * <code>
     * class ExampleModule extends Ab_Module {
     *    // экземпляр менеджера модуля
     *    private $_manager = null;
     *    ...
     *    public function GetManager(){
     *        if (is_null($this->_manager)){
     *            require_once 'includes/manager.php';
     *            $this->_manager = new ExampleManager($this);
     *        }
     *        return $this->_manager;
     *    }
     *    ...
     * }
     * </code>
     *
     * @return Ab_ModuleManager
     */
    public function GetManager(){
        return null;
    }

    /**
     * @return Ab_CorePhraseList
     */
    public function GetPhrases(){
        return Abricos::$phrases->GetList($this->name);
    }
}

/**
 * Абстрактный класс менеджера модуля в платформе Абрикос
 *
 * Все AJAX запросы и прочие функции внешнего взаимодействия
 * с этим модулей поступают именно в этот класс.
 *
 * Вызов и инициализацию менеджера необходимо осуществлять в
 * методе {@link Ab_Module::GetManager()}
 *
 * @package Abricos
 * @example modules/example/includes/manager.php
 */
abstract class Ab_ModuleManager {

    /**
     * База данных
     *
     * @var AbricosDatabase
     */
    public $db;


    /**
     * Пользователь<commit_msg>require script function in module<commit_after><?php

require_once 'structure.php';

/**
 * Абстрактный класс модуля в платформе Абрикос
 *
 * Структура модуля
 *
 * Модуль в платформе Абрикос — это самостоятельная сущность, со своим шаблоном,
 * стилями css, картинками, серверными скриптами и прочими необходимыми для его
 * работы компонентами. Все модули в платформе Абрикос располагаются в папке modules.
 *
 * Главным файлом любого модуля в платформе является скрипт module.php,
 * который должен находиться в корневой папке модуля. Когда ядро платформы просматривает
 * доступные модули, то она смотрит именно этот файл.
 *
 * @package Abricos
 * @copyright Copyright (C) 2008-2011 Abricos. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
 * @author <NAME> <<EMAIL>>
 * @example modules/example/module.php
 */
abstract class Ab_Module {

    /**
     * CSS по умолчанию (имя файла в папке css модуля).
     *
     * @deprecated
     */
    private $defaultCSS = "";

    /**
     * TODO: remove
     *
     * @deprecated
     */
    private $lang;


    /**
     * Ошибка модуля. Если true, модуль не инициализируется в ядре
     *
     * @var boolean
     */
    public $error = false;

    /**
     * Политика безопасности модуля
     *
     * @var Ab_UserPermission
     */
    public $permission = null;

    /**
     * Версия модуля
     *
     * @var string
     */
    public $version = "0.0.0";

    /**
     * Наименование модуля латинскими буквами и цифрами
     *
     * Используется в качестве уникального идентификатора модуля
     * в платформе Абрикос
     *
     * @var string
     */
    public $name = "";

    /**
     * Перехват линка модуля.
     * Если имеет значение "__super", то модуль берет на себя
     * управление с главной страницы.
     *
     * @var string
     */
    public $takelink = "";

    /**
     * Список зависимых модулей и их версии
     * Например:
     * <code>
     * array(
     *   'sys' => '0.5.5',
     *   'uprofile' => '0.1.2'
     * );
     * </code>
     * Примечание: модуль 'core' является синонимом 'sys'
     *
     * @var array
     */
    public $depends = array();

    public $defaultLocale = 'ru-RU';

    private $_i18n = null;

    /**
     * @return Ab_CoreI18n
     */
    public function I18n(){
        if (empty($this->_i18n)){
            require_once 'i18n.php';
            $this->_i18n = new Ab_CoreI18n($this);
        }
        return $this->_i18n;
    }

    /**
     * @return array|null
     * @deprecated
     */
    public function GetI18n(){

        $i18n = $this->I18n();
        $data = $i18n->GetData();

        $curLocale = $i18n->LocaleNormalize(Abricos::$locale);
        $defLocale = $i18n->LocaleNormalize($this->defaultLocale);

        if ($curLocale !== $defLocale){
            $defData = $i18n->GetData($defLocale);
            $data = array_merge_recursive($defData, $data);
        }

        return $data;
    }


    /**
     * Когда управление по формированию ответа сервера переходит модулю,
     * происходит вызов этого метода, который должен вернуть имя
     * контент файла (стартового кирпича).
     *
     * Стартовые кирпичи находяться в папке модуля content и содержат в себе
     * всю необходимую информацию для формирования ответа.
     *
     * Если метод возвращает пустую строку, платформа выдает 404 ошибку.
     *
     * Если файл контент не найден, то платформа выдает 500 ошибку.
     *
     * @return string
     */
    public function GetContentName(){
        return Abricos::$adress->contentName;
    }

    /**
     * Явно указать информацию о шаблоне, тем самым игнорируя шаблон
     * указанный в стартовом кирпиче.
     * Для определения необходимо возвращать массив в формате:
     * array(
     *   'owner' => '<NAME>',
     *   'name' => '<NAME>'
     * )
     *
     * @return null || array
     */
    public function GetTemplate(){
        return null;
    }

    /**
     * Получить менеджер модуля
     *
     * Пример из модуля Example:
     * <code>
     * class ExampleModule extends Ab_Module {
     *    // экземпляр менеджера модуля
     *    private $_manager = null;
     *    ...
     *    public function GetManager(){
     *        if (is_null($this->_manager)){
     *            require_once 'includes/manager.php';
     *            $this->_manager = new ExampleManager($this);
     *        }
     *        return $this->_manager;
     *    }
     *    ...
     * }
     * </code>
     *
     * @return Ab_ModuleManager
     */
    public function GetManager(){
        return null;
    }

    /**
     * @return Ab_CorePhraseList
     */
    public function GetPhrases(){
        return Abricos::$phrases->GetList($this->name);
    }

    public function ScriptRequire($phpScript){
        return require $phpScript;
    }

    public function ScriptRequireOnce($phpScript){
        return require_once $phpScript;
    }
}

/**
 * Абстрактный класс менеджера модуля в платформе Абрикос
 *
 * Все AJAX запросы и прочие функции внешнего взаимодействия
 * с этим модулей поступают именно в этот класс.
 *
 * Вызов и инициализацию менеджера необходимо осуществлять в
 * методе {@link Ab_Module::GetManager()}
 *
 * @package Abricos
 * @example modules/example/includes/manager.php
 */
abstract class Ab_ModuleManager {

    /**
     * База данных
     *
     * @var AbricosDatabase
     */
    public $db;


    /**
     * Пользователь
{'fraction_non_alphanumeric': 0.11207946771624028, 'fraction_numerical': 0.009933464530034674, 'mean_word_length': 2.1232074919520048, 'pattern_counts': {'":': 0, '<': 23, '<?xml version=': 0, '>': 59, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, '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': '6863382', 'n_tokens_mistral': 3892, 'n_tokens_neox': 4241, 'n_words': 887}