diff options
Diffstat (limited to 'inc/poche/Poche.class.php')
-rw-r--r-- | inc/poche/Poche.class.php | 166 |
1 files changed, 123 insertions, 43 deletions
diff --git a/inc/poche/Poche.class.php b/inc/poche/Poche.class.php index 6325adcf..806da54b 100644 --- a/inc/poche/Poche.class.php +++ b/inc/poche/Poche.class.php | |||
@@ -20,7 +20,8 @@ class Poche | |||
20 | public $pagination; | 20 | public $pagination; |
21 | 21 | ||
22 | private $currentTheme = ''; | 22 | private $currentTheme = ''; |
23 | private $notInstalledMessage = ''; | 23 | private $currentLanguage = ''; |
24 | private $notInstalledMessage = array(); | ||
24 | 25 | ||
25 | # @todo make this dynamic (actually install themes and save them in the database including author information et cetera) | 26 | # @todo make this dynamic (actually install themes and save them in the database including author information et cetera) |
26 | private $installedThemes = array( | 27 | private $installedThemes = array( |
@@ -33,28 +34,21 @@ class Poche | |||
33 | 34 | ||
34 | public function __construct() | 35 | public function __construct() |
35 | { | 36 | { |
36 | if (! $this->configFileIsAvailable()) { | 37 | if ($this->configFileIsAvailable()) { |
37 | return; | 38 | $this->init(); |
38 | } | 39 | } |
39 | 40 | ||
40 | $this->init(); | 41 | if ($this->themeIsInstalled()) { |
41 | 42 | $this->initTpl(); | |
42 | if (! $this->themeIsInstalled()) { | ||
43 | return; | ||
44 | } | 43 | } |
45 | 44 | ||
46 | $this->initTpl(); | 45 | if ($this->systemIsInstalled()) { |
47 | 46 | $this->store = new Database(); | |
48 | if (! $this->systemIsInstalled()) { | 47 | $this->messages = new Messages(); |
49 | return; | 48 | # installation |
50 | } | 49 | if (! $this->store->isInstalled()) { |
51 | 50 | $this->install(); | |
52 | $this->store = new Database(); | 51 | } |
53 | $this->messages = new Messages(); | ||
54 | |||
55 | # installation | ||
56 | if (! $this->store->isInstalled()) { | ||
57 | $this->install(); | ||
58 | } | 52 | } |
59 | } | 53 | } |
60 | 54 | ||
@@ -90,11 +84,20 @@ class Poche | |||
90 | } | 84 | } |
91 | 85 | ||
92 | $this->currentTheme = $themeDirectory; | 86 | $this->currentTheme = $themeDirectory; |
87 | |||
88 | # Set up language | ||
89 | $languageDirectory = $this->user->getConfigValue('language'); | ||
90 | |||
91 | if ($languageDirectory === false) { | ||
92 | $languageDirectory = DEFAULT_THEME; | ||
93 | } | ||
94 | |||
95 | $this->currentLanguage = $languageDirectory; | ||
93 | } | 96 | } |
94 | 97 | ||
95 | public function configFileIsAvailable() { | 98 | public function configFileIsAvailable() { |
96 | if (! self::$configFileAvailable) { | 99 | if (! self::$configFileAvailable) { |
97 | $this->notInstalledMessage = 'You have to rename <strong>inc/poche/config.inc.php.new</strong> to <strong>inc/poche/config.inc.php</strong>.'; | 100 | $this->notInstalledMessage[] = 'You have to rename inc/poche/config.inc.php.new to inc/poche/config.inc.php.'; |
98 | 101 | ||
99 | return false; | 102 | return false; |
100 | } | 103 | } |
@@ -103,39 +106,44 @@ class Poche | |||
103 | } | 106 | } |
104 | 107 | ||
105 | public function themeIsInstalled() { | 108 | public function themeIsInstalled() { |
109 | $passTheme = TRUE; | ||
106 | # Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet | 110 | # Twig is an absolute requirement for Poche to function. Abort immediately if the Composer installer hasn't been run yet |
107 | if (! self::$canRenderTemplates) { | 111 | if (! self::$canRenderTemplates) { |
108 | $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>'; | 112 | $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>'; |
109 | 113 | $passTheme = FALSE; | |
110 | return false; | ||
111 | } | 114 | } |
112 | 115 | ||
113 | if (! is_writable(CACHE)) { | 116 | if (! is_writable(CACHE)) { |
114 | $this->notInstalledMessage = '<h1>error</h1><p>You don\'t have write access on cache directory.</p>'; | 117 | $this->notInstalledMessage[] = 'You don\'t have write access on cache directory.'; |
115 | 118 | ||
116 | self::$canRenderTemplates = false; | 119 | self::$canRenderTemplates = false; |
117 | 120 | ||
118 | return false; | 121 | $passTheme = FALSE; |
119 | } | 122 | } |
120 | 123 | ||
121 | # Check if the selected theme and its requirements are present | 124 | # Check if the selected theme and its requirements are present |
122 | if (! is_dir(THEME . '/' . $this->getTheme())) { | 125 | if ($this->getTheme() != '' && ! is_dir(THEME . '/' . $this->getTheme())) { |
123 | $this->notInstalledMessage = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')'; | 126 | $this->notInstalledMessage[] = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')'; |
124 | 127 | ||
125 | self::$canRenderTemplates = false; | 128 | self::$canRenderTemplates = false; |
126 | 129 | ||
127 | return false; | 130 | $passTheme = FALSE; |
128 | } | 131 | } |
129 | 132 | ||
130 | foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) { | 133 | foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) { |
131 | if (! is_dir(THEME . '/' . $requiredTheme)) { | 134 | if (! is_dir(THEME . '/' . $requiredTheme)) { |
132 | $this->notInstalledMessage = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')'; | 135 | $this->notInstalledMessage[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')'; |
133 | 136 | ||
134 | self::$canRenderTemplates = false; | 137 | self::$canRenderTemplates = false; |
135 | 138 | ||
136 | return false; | 139 | $passTheme = FALSE; |
137 | } | 140 | } |
138 | } | 141 | } |
142 | |||
143 | if (!$passTheme) { | ||
144 | return FALSE; | ||
145 | } | ||
146 | |||
139 | 147 | ||
140 | return true; | 148 | return true; |
141 | } | 149 | } |
@@ -147,25 +155,30 @@ class Poche | |||
147 | */ | 155 | */ |
148 | public function systemIsInstalled() | 156 | public function systemIsInstalled() |
149 | { | 157 | { |
150 | $msg = ''; | 158 | $msg = TRUE; |
151 | 159 | ||
152 | $configSalt = defined('SALT') ? constant('SALT') : ''; | 160 | $configSalt = defined('SALT') ? constant('SALT') : ''; |
153 | 161 | ||
154 | if (empty($configSalt)) { | 162 | if (empty($configSalt)) { |
155 | $msg = '<h1>error</h1><p>You have not yet filled in the SALT value in the config.inc.php file.</p>'; | 163 | $this->notInstalledMessage[] = 'You have not yet filled in the SALT value in the config.inc.php file.'; |
156 | } else if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) { | 164 | $msg = FALSE; |
165 | } | ||
166 | if (STORAGE == 'sqlite' && ! file_exists(STORAGE_SQLITE)) { | ||
157 | Tools::logm('sqlite file doesn\'t exist'); | 167 | Tools::logm('sqlite file doesn\'t exist'); |
158 | $msg = '<h1>error</h1><p>sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.</p>'; | 168 | $this->notInstalledMessage[] = 'sqlite file doesn\'t exist, you can find it in install folder. Copy it in /db folder.'; |
159 | } else if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) { | 169 | $msg = FALSE; |
160 | $msg = '<h1>install folder</h1><p>you have to delete the /install folder before using poche.</p>'; | 170 | } |
161 | } else if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) { | 171 | if (is_dir(ROOT . '/install') && ! DEBUG_POCHE) { |
172 | $this->notInstalledMessage[] = 'you have to delete the /install folder before using poche.'; | ||
173 | $msg = FALSE; | ||
174 | } | ||
175 | if (STORAGE == 'sqlite' && ! is_writable(STORAGE_SQLITE)) { | ||
162 | Tools::logm('you don\'t have write access on sqlite file'); | 176 | Tools::logm('you don\'t have write access on sqlite file'); |
163 | $msg = '<h1>error</h1><p>You don\'t have write access on sqlite file.</p>'; | 177 | $this->notInstalledMessage[] = 'You don\'t have write access on sqlite file.'; |
178 | $msg = FALSE; | ||
164 | } | 179 | } |
165 | 180 | ||
166 | if (! empty($msg)) { | 181 | if (! $msg) { |
167 | $this->notInstalledMessage = $msg; | ||
168 | |||
169 | return false; | 182 | return false; |
170 | } | 183 | } |
171 | 184 | ||
@@ -250,6 +263,10 @@ class Poche | |||
250 | public function getTheme() { | 263 | public function getTheme() { |
251 | return $this->currentTheme; | 264 | return $this->currentTheme; |
252 | } | 265 | } |
266 | |||
267 | public function getLanguage() { | ||
268 | return $this->currentLanguage; | ||
269 | } | ||
253 | 270 | ||
254 | public function getInstalledThemes() { | 271 | public function getInstalledThemes() { |
255 | $handle = opendir(THEME); | 272 | $handle = opendir(THEME); |
@@ -275,6 +292,29 @@ class Poche | |||
275 | return $themes; | 292 | return $themes; |
276 | } | 293 | } |
277 | 294 | ||
295 | public function getInstalledLanguages() { | ||
296 | $handle = opendir(LOCALE); | ||
297 | $languages = array(); | ||
298 | |||
299 | while (($language = readdir($handle)) !== false) { | ||
300 | # Languages are stored in a directory, so all directory names are languages | ||
301 | # @todo move language installation data to database | ||
302 | if (! is_dir(LOCALE . '/' . $language) || in_array($language, array('..', '.'))) { | ||
303 | continue; | ||
304 | } | ||
305 | |||
306 | $current = false; | ||
307 | |||
308 | if ($language === $this->getLanguage()) { | ||
309 | $current = true; | ||
310 | } | ||
311 | |||
312 | $languages[] = array('name' => $language, 'current' => $current); | ||
313 | } | ||
314 | |||
315 | return $languages; | ||
316 | } | ||
317 | |||
278 | public function getDefaultConfig() | 318 | public function getDefaultConfig() |
279 | { | 319 | { |
280 | return array( | 320 | return array( |
@@ -364,11 +404,13 @@ class Poche | |||
364 | case 'config': | 404 | case 'config': |
365 | $dev = $this->getPocheVersion('dev'); | 405 | $dev = $this->getPocheVersion('dev'); |
366 | $prod = $this->getPocheVersion('prod'); | 406 | $prod = $this->getPocheVersion('prod'); |
367 | $compare_dev = version_compare(POCHE_VERSION, $dev); | 407 | $compare_dev = version_compare(POCHE, $dev); |
368 | $compare_prod = version_compare(POCHE_VERSION, $prod); | 408 | $compare_prod = version_compare(POCHE, $prod); |
369 | $themes = $this->getInstalledThemes(); | 409 | $themes = $this->getInstalledThemes(); |
410 | $languages = $this->getInstalledLanguages(); | ||
370 | $tpl_vars = array( | 411 | $tpl_vars = array( |
371 | 'themes' => $themes, | 412 | 'themes' => $themes, |
413 | 'languages' => $languages, | ||
372 | 'dev' => $dev, | 414 | 'dev' => $dev, |
373 | 'prod' => $prod, | 415 | 'prod' => $prod, |
374 | 'compare_dev' => $compare_dev, | 416 | 'compare_dev' => $compare_dev, |
@@ -493,6 +535,44 @@ class Poche | |||
493 | Tools::redirect('?view=config'); | 535 | Tools::redirect('?view=config'); |
494 | } | 536 | } |
495 | 537 | ||
538 | public function updateLanguage() | ||
539 | { | ||
540 | # no data | ||
541 | if (empty($_POST['language'])) { | ||
542 | } | ||
543 | |||
544 | # we are not going to change it to the current language... | ||
545 | if ($_POST['language'] == $this->getLanguage()) { | ||
546 | $this->messages->add('w', _('still using the "' . $this->getLanguage() . '" language!')); | ||
547 | Tools::redirect('?view=config'); | ||
548 | } | ||
549 | |||
550 | $languages = $this->getInstalledLanguages(); | ||
551 | $actualLanguage = false; | ||
552 | |||
553 | foreach ($languages as $language) { | ||
554 | if ($language['name'] == $_POST['language']) { | ||
555 | $actualLanguage = true; | ||
556 | break; | ||
557 | } | ||
558 | } | ||
559 | |||
560 | if (! $actualLanguage) { | ||
561 | $this->messages->add('e', _('that language does not seem to be installed')); | ||
562 | Tools::redirect('?view=config'); | ||
563 | } | ||
564 | |||
565 | $this->store->updateUserConfig($this->user->getId(), 'language', $_POST['language']); | ||
566 | $this->messages->add('s', _('you have changed your language preferences')); | ||
567 | |||
568 | $currentConfig = $_SESSION['poche_user']->config; | ||
569 | $currentConfig['language'] = $_POST['language']; | ||
570 | |||
571 | $_SESSION['poche_user']->setConfig($currentConfig); | ||
572 | |||
573 | Tools::redirect('?view=config'); | ||
574 | } | ||
575 | |||
496 | /** | 576 | /** |
497 | * checks if login & password are correct and save the user in session. | 577 | * checks if login & password are correct and save the user in session. |
498 | * it redirects the user to the $referer link | 578 | * it redirects the user to the $referer link |