public function before() { $this->config = $this->getContext()->getService('config'); $this->preferences = $this->getContext()->getService('preferences'); $this->uri = $this->getContext()->getService('uri'); $this->profiler = $this->getContext()->getService('profiler'); $this->radix_coll = $this->getContext()->getService('foolfuuka.radix_collection'); $this->media_factory = $this->getContext()->getService('foolfuuka.media_factory'); $this->comment_factory = $this->getContext()->getService('foolfuuka.comment_factory'); // this has already been forged in the foolfuuka bootstrap $theme_instance = \Foolz\Theme\Loader::forge('foolfuuka'); try { $theme_name = $this->getQuery('theme', $this->getCookie('theme')) ?: $this->preferences->get('foolfuuka.theme.default'); $theme_name_exploded = explode('/', $theme_name); if (count($theme_name_exploded) >= 2) { $theme_name = $theme_name_exploded[0] . '/' . $theme_name_exploded[1]; } $theme = $theme_instance->get($theme_name); if (!isset($theme->enabled) || !$theme->enabled) { throw new \OutOfBoundsException(); } $this->theme = $theme; } catch (\OutOfBoundsException $e) { $theme_name = 'foolz/foolfuuka-theme-foolfuuka'; $this->theme = $theme_instance->get('foolz/foolfuuka-theme-foolfuuka'); } // TODO this is currently bootstrapped in the foolfuuka bootstrap because we need it running before the router. //$this->theme->bootstrap(); $this->builder = $this->theme->createBuilder(); $this->param_manager = $this->builder->getParamManager(); $this->builder->createLayout('chan'); if (count($theme_name_exploded) == 3) { try { $this->builder->setStyle($theme_name_exploded[2]); } catch (\OutOfBoundsException $e) { // just let it go with default on getStyle() } } $pass = $this->getCookie('reply_password', ''); $name = $this->getCookie('reply_name'); $email = $this->getCookie('reply_email'); // KEEP THIS IN SYNC WITH THE ONE IN THE POSTS ADMIN PANEL $to_bind = ['context' => $this->getContext(), 'request' => $this->getRequest(), 'user_name' => $name, 'user_email' => $email, 'user_pass' => $pass, 'disable_headers' => false, 'is_page' => false, 'is_thread' => false, 'is_last50' => false, 'order' => false, 'modifiers' => [], 'backend_vars' => ['user_name' => $name, 'user_email' => $email, 'user_pass' => $pass, 'site_url' => $this->uri->base(), 'default_url' => $this->uri->base(), 'archive_url' => $this->uri->base(), 'system_url' => $this->uri->base(), 'api_url' => $this->uri->base(), 'cookie_domain' => $this->config->get('foolz/foolframe', 'config', 'config.cookie_domain'), 'cookie_prefix' => $this->config->get('foolz/foolframe', 'config', 'config.cookie_prefix'), 'selected_theme' => $theme_name, 'csrf_token_key' => 'csrf_token', 'images' => ['banned_image' => $this->theme->getAssetManager()->getAssetLink('images/banned-image.png'), 'banned_image_width' => 150, 'banned_image_height' => 150, 'missing_image' => $this->theme->getAssetManager()->getAssetLink('images/missing-image.jpg'), 'missing_image_width' => 150, 'missing_image_height' => 150], 'gettext' => ['submit_state' => _i('Submitting'), 'thread_is_real_time' => _i('This thread is being displayed in real time.'), 'update_now' => _i('Update now'), 'ghost_mode' => _i('This thread has entered ghost mode. Your reply will be marked as a ghost post and will only affect the ghost index.')]]]; $this->param_manager->setParams($to_bind); $this->builder->createPartial('tools_modal', 'tools_modal'); $this->builder->createPartial('tools_search', 'tools_search'); $this->builder->createPartial('tools_advanced_search', 'advanced_search'); }