+ $language = $this->user->getConfigValue('language');
+ putenv('LC_ALL=' . $language);
+ setlocale(LC_ALL, $language);
+ bindtextdomain($language, LOCALE);
+ textdomain($language);
+
+ # Pagination
+ $this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p');
+
+ # Set up theme
+ $themeDirectory = $this->user->getConfigValue('theme');
+
+ if ($themeDirectory === false) {
+ $themeDirectory = DEFAULT_THEME;
+ }
+
+ $this->currentTheme = $themeDirectory;
+ }
+
+ public function configFileIsAvailable() {
+ if (! self::$configFileAvailable) {
+ $this->notInstalledMessage = 'You have to rename <strong>inc/poche/config.inc.php.new</strong> to <strong>inc/poche/config.inc.php</strong>.';
+
+ return false;
+ }
+
+ return true;
+ }
+
+ public function themeIsInstalled() {
+ # Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet
+ if (! self::$canRenderTemplates) {
+ $this->notInstalledMessage = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. Have a look at <a href="http://doc.inthepoche.com/doku.php?id=users:begin:install">the documentation.</a>';
+
+ return false;
+ }
+
+ if (! is_writable(CACHE)) {
+ $this->notInstalledMessage = '<h1>error</h1><p>You don\'t have write access on cache directory.</p>';
+
+ self::$canRenderTemplates = false;
+
+ return false;
+ }
+
+ # Check if the selected theme and its requirements are present
+ if (! is_dir(THEME . '/' . $this->getTheme())) {
+ $this->notInstalledMessage = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')';
+
+ self::$canRenderTemplates = false;
+
+ return false;
+ }
+
+ foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
+ if (! is_dir(THEME . '/' . $requiredTheme)) {
+ $this->notInstalledMessage = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')';
+
+ self::$canRenderTemplates = false;
+
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * all checks before installation.
+ * @todo move HTML to template
+ * @return boolean
+ */
+ public function systemIsInstalled()
+ {
+ $msg = '';
+
+ $configSalt = defined('SALT') ? constant('SALT') : '';
+
+ if (empty($configSalt)) {
+ $msg = '<h1>error</h1><p>You have not yet filled in the SALT value in the config.inc.php file.</p>';
+ } else if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) {
+ Tools::logm('sqlite file doesn\'t exist');
+ $msg = '<h1>error</h1><p>sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.</p>';
+ } else if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) {
+ $msg = '<h1>install folder</h1><p>you have to delete the /install folder before using poche.</p>';
+ } else if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) {
+ Tools::logm('you don\'t have write access on sqlite file');
+ $msg = '<h1>error</h1><p>You don\'t have write access on sqlite file.</p>';
+ }
+
+ if (! empty($msg)) {
+ $this->notInstalledMessage = $msg;
+
+ return false;
+ }
+
+ return true;
+ }
+
+ public function getNotInstalledMessage() {
+ return $this->notInstalledMessage;
+ }
+
+ private function initTpl()
+ {
+ $loaderChain = new Twig_Loader_Chain();
+
+ # add the current theme as first to the loader chain so Twig will look there first for overridden template files
+ try {
+ $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $this->getTheme()));
+ } catch (Twig_Error_Loader $e) {
+ # @todo isInstalled() should catch this, inject Twig later
+ die('The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (' . THEME . '/' . $this->getTheme() .' is missing)');
+ }
+
+ # add all required themes to the loader chain
+ foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
+ try {
+ $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . DEFAULT_THEME));
+ } catch (Twig_Error_Loader $e) {
+ # @todo isInstalled() should catch this, inject Twig later
+ die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')');
+ }
+ }
+
+ if (DEBUG_POCHE) {
+ $twig_params = array();
+ } else {
+ $twig_params = array('cache' => CACHE);
+ }
+
+ $this->tpl = new Twig_Environment($loaderChain, $twig_params);