diff options
Diffstat (limited to 'app/FreshRSS.php')
| -rw-r--r-- | app/FreshRSS.php | 93 |
1 files changed, 58 insertions, 35 deletions
diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 6114a5d1a..021687999 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -1,15 +1,64 @@ <?php class FreshRSS extends Minz_FrontController { + /** + * Initialize the different FreshRSS / Minz components. + * + * PLEASE DON'T CHANGE THE ORDER OF INITIALIZATIONS UNLESS YOU KNOW WHAT + * YOU DO!! + * + * Here is the list of components: + * - Create a configuration setter and register it to system conf + * - Init extension manager and enable system extensions (has to be done asap) + * - Init authentication system + * - Init user configuration (need auth system) + * - Init FreshRSS context (need user conf) + * - Init i18n (need context) + * - Init sharing system (need user conf and i18n) + * - Init generic styles and scripts (need user conf) + * - Init notifications + * - Enable user extensions (need all the other initializations) + */ public function init() { if (!isset($_SESSION)) { Minz_Session::init('FreshRSS'); } - // Need to be called just after session init because it initializes - // current user. - FreshRSS_Auth::init(); + // Register the configuration setter for the system configuration + $configuration_setter = new FreshRSS_ConfigurationSetter(); + $system_conf = Minz_Configuration::get('system'); + $system_conf->_configurationSetter($configuration_setter); + + // Load list of extensions and enable the "system" ones. + Minz_ExtensionManager::init(); + + // Auth has to be initialized before using currentUser session parameter + // because it's this part which create this parameter. + $this->initAuth(); + + // Then, register the user configuration and use the configuration setter + // created above. + $current_user = Minz_Session::param('currentUser', '_'); + Minz_Configuration::register('user', + join_path(USERS_PATH, $current_user, 'config.php'), + join_path(USERS_PATH, '_', 'config.default.php'), + $configuration_setter); + + // Finish to initialize the other FreshRSS / Minz components. + FreshRSS_Context::init(); + $this->initI18n(); + FreshRSS_Share::load(join_path(DATA_PATH, 'shares.php')); + $this->loadStylesAndScripts(); + $this->loadNotifications(); + // Enable extensions for the current (logged) user. + if (FreshRSS_Auth::hasAccess()) { + $ext_list = FreshRSS_Context::$user_conf->extensions_enabled; + Minz_ExtensionManager::enableByList($ext_list); + } + } + private function initAuth() { + FreshRSS_Auth::init(); if (Minz_Request::isPost() && !is_referer_from_same_domain()) { // Basic protection against XSRF attacks FreshRSS_Auth::removeAccess(); @@ -22,21 +71,15 @@ class FreshRSS extends Minz_FrontController { )) ); } + } - // Load context and configuration. - FreshRSS_Context::init(); - - // Init i18n. - Minz_Session::_param('language', FreshRSS_Context::$conf->language); - Minz_Translate::init(); - - $this->loadStylesAndScripts(); - $this->loadNotifications(); - $this->loadExtensions(); + private function initI18n() { + Minz_Session::_param('language', FreshRSS_Context::$user_conf->language); + Minz_Translate::init(FreshRSS_Context::$user_conf->language); } private function loadStylesAndScripts() { - $theme = FreshRSS_Themes::load(FreshRSS_Context::$conf->theme); + $theme = FreshRSS_Themes::load(FreshRSS_Context::$user_conf->theme); if ($theme) { foreach($theme['files'] as $file) { if ($file[0] === '_') { @@ -57,7 +100,7 @@ class FreshRSS extends Minz_FrontController { Minz_View::appendScript(Minz_Url::display('/scripts/shortcut.js?' . @filemtime(PUBLIC_PATH . '/scripts/shortcut.js'))); Minz_View::appendScript(Minz_Url::display('/scripts/main.js?' . @filemtime(PUBLIC_PATH . '/scripts/main.js'))); - if (Minz_Configuration::authType() === 'persona') { + if (FreshRSS_Context::$system_conf->auth_type === 'persona') { // TODO move it in a plugin // Needed for login AND logout with Persona. Minz_View::appendScript('https://login.persona.org/include.js'); @@ -73,24 +116,4 @@ class FreshRSS extends Minz_FrontController { Minz_Session::_param('notification'); } } - - private function loadExtensions() { - $extensionPath = FRESHRSS_PATH . '/extensions/'; - //TODO: Add a preference to load only user-selected extensions - foreach (scandir($extensionPath) as $key => $extension) { - if (ctype_alpha($extension)) { - $mtime = @filemtime($extensionPath . $extension . '/style.css'); - if ($mtime !== false) { - Minz_View::appendStyle(Minz_Url::display('/ext.php?c&e=' . $extension . '&' . $mtime)); - } - $mtime = @filemtime($extensionPath . $extension . '/script.js'); - if ($mtime !== false) { - Minz_View::appendScript(Minz_Url::display('/ext.php?j&e=' . $extension . '&' . $mtime)); - } - if (file_exists($extensionPath . $extension . '/module.php')) { - //TODO: include - } - } - } - } } |
