2014-07-21 22:56:35 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Model;
|
|
|
|
|
|
|
|
use Core\Translator;
|
|
|
|
use Core\Security;
|
2014-11-23 20:13:38 +01:00
|
|
|
use Core\Session;
|
2014-07-21 22:56:35 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Config model
|
|
|
|
*
|
|
|
|
* @package model
|
|
|
|
* @author Frederic Guillot
|
|
|
|
*/
|
|
|
|
class Config extends Base
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* SQL table name
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
2014-11-23 20:13:38 +01:00
|
|
|
const TABLE = 'settings';
|
2014-07-21 22:56:35 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get available timezones
|
|
|
|
*
|
|
|
|
* @access public
|
2015-01-16 14:23:05 +01:00
|
|
|
* @param boolean $prepend Prepend a default value
|
2014-07-21 22:56:35 +02:00
|
|
|
* @return array
|
|
|
|
*/
|
2015-01-16 14:23:05 +01:00
|
|
|
public function getTimezones($prepend = false)
|
2014-07-21 22:56:35 +02:00
|
|
|
{
|
|
|
|
$timezones = timezone_identifiers_list();
|
2015-01-16 14:23:05 +01:00
|
|
|
$listing = array_combine(array_values($timezones), $timezones);
|
|
|
|
|
|
|
|
if ($prepend) {
|
|
|
|
return array('' => t('Application default')) + $listing;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $listing;
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get available languages
|
|
|
|
*
|
|
|
|
* @access public
|
2015-01-16 14:23:05 +01:00
|
|
|
* @param boolean $prepend Prepend a default value
|
2014-07-21 22:56:35 +02:00
|
|
|
* @return array
|
|
|
|
*/
|
2015-01-16 14:23:05 +01:00
|
|
|
public function getLanguages($prepend = false)
|
2014-07-21 22:56:35 +02:00
|
|
|
{
|
2014-10-22 19:59:09 +02:00
|
|
|
// Sorted by value
|
2015-01-16 14:23:05 +01:00
|
|
|
$languages = array(
|
2014-11-23 20:13:38 +01:00
|
|
|
'da_DK' => 'Dansk',
|
2014-10-22 19:59:09 +02:00
|
|
|
'de_DE' => 'Deutsch',
|
|
|
|
'en_US' => 'English',
|
|
|
|
'es_ES' => 'Español',
|
|
|
|
'fr_FR' => 'Français',
|
|
|
|
'it_IT' => 'Italiano',
|
2015-01-16 14:23:05 +01:00
|
|
|
'hu_HU' => 'Magyar',
|
2014-10-22 19:59:09 +02:00
|
|
|
'pl_PL' => 'Polski',
|
|
|
|
'pt_BR' => 'Português (Brasil)',
|
|
|
|
'ru_RU' => 'Русский',
|
|
|
|
'fi_FI' => 'Suomi',
|
|
|
|
'sv_SE' => 'Svenska',
|
|
|
|
'zh_CN' => '中文(简体)',
|
2014-11-23 20:13:38 +01:00
|
|
|
'ja_JP' => '日本語',
|
|
|
|
'th_TH' => 'ไทย',
|
2014-07-21 22:56:35 +02:00
|
|
|
);
|
2015-01-16 14:23:05 +01:00
|
|
|
|
|
|
|
if ($prepend) {
|
|
|
|
return array('' => t('Application default')) + $languages;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $languages;
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get a config variable from the session or the database
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @param string $name Parameter name
|
|
|
|
* @param string $default_value Default value of the parameter
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function get($name, $default_value = '')
|
|
|
|
{
|
2014-11-23 20:13:38 +01:00
|
|
|
if (! Session::isOpen()) {
|
|
|
|
$value = $this->db->table(self::TABLE)->eq('option', $name)->findOneColumn('value');
|
|
|
|
return $value ?: $default_value;
|
|
|
|
}
|
|
|
|
|
2015-01-16 14:23:05 +01:00
|
|
|
// Cache config in session
|
|
|
|
if (! isset($this->session['config'][$name])) {
|
|
|
|
$this->session['config'] = $this->getAll();
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
|
2015-01-16 14:23:05 +01:00
|
|
|
if (! empty($this->session['config'][$name])) {
|
|
|
|
return $this->session['config'][$name];
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return $default_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get all settings
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function getAll()
|
|
|
|
{
|
2014-11-23 20:13:38 +01:00
|
|
|
return $this->db->table(self::TABLE)->listing('option', 'value');
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Save settings in the database
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @param $values array Settings values
|
|
|
|
* @return boolean
|
|
|
|
*/
|
|
|
|
public function save(array $values)
|
|
|
|
{
|
2014-11-23 20:13:38 +01:00
|
|
|
foreach ($values as $option => $value) {
|
|
|
|
|
|
|
|
$result = $this->db->table(self::TABLE)->eq('option', $option)->update(array('value' => $value));
|
|
|
|
|
|
|
|
if (! $result) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reload settings in the session and the translations
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
*/
|
|
|
|
public function reload()
|
|
|
|
{
|
2015-01-16 14:23:05 +01:00
|
|
|
$this->session['config'] = $this->getAll();
|
2014-11-23 20:13:38 +01:00
|
|
|
$this->setupTranslations();
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2014-11-23 20:13:38 +01:00
|
|
|
* Load translations
|
2014-07-21 22:56:35 +02:00
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
*/
|
2014-11-23 20:13:38 +01:00
|
|
|
public function setupTranslations()
|
2014-07-21 22:56:35 +02:00
|
|
|
{
|
2015-01-16 14:23:05 +01:00
|
|
|
if ($this->userSession->isLogged() && ! empty($this->session['user']['language'])) {
|
|
|
|
Translator::load($this->session['user']['language']);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
Translator::load($this->get('application_language', 'en_US'));
|
2014-11-23 20:13:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set timezone
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
*/
|
|
|
|
public function setupTimezone()
|
|
|
|
{
|
2015-01-16 14:23:05 +01:00
|
|
|
if ($this->userSession->isLogged() && ! empty($this->session['user']['timezone'])) {
|
|
|
|
date_default_timezone_set($this->session['user']['timezone']);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
date_default_timezone_set($this->get('application_timezone', 'UTC'));
|
|
|
|
}
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Optimize the Sqlite database
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return boolean
|
|
|
|
*/
|
|
|
|
public function optimizeDatabase()
|
|
|
|
{
|
|
|
|
return $this->db->getconnection()->exec("VACUUM");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compress the Sqlite database
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function downloadDatabase()
|
|
|
|
{
|
|
|
|
return gzencode(file_get_contents(DB_FILENAME));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Sqlite database size in bytes
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return integer
|
|
|
|
*/
|
|
|
|
public function getDatabaseSize()
|
|
|
|
{
|
|
|
|
return DB_DRIVER === 'sqlite' ? filesize(DB_FILENAME) : 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2014-11-23 20:13:38 +01:00
|
|
|
* Regenerate a token
|
2014-07-21 22:56:35 +02:00
|
|
|
*
|
|
|
|
* @access public
|
2014-11-23 20:13:38 +01:00
|
|
|
* @param string $option Parameter name
|
2014-07-21 22:56:35 +02:00
|
|
|
*/
|
2014-11-23 20:13:38 +01:00
|
|
|
public function regenerateToken($option)
|
2014-07-21 22:56:35 +02:00
|
|
|
{
|
2014-11-23 20:13:38 +01:00
|
|
|
return $this->db->table(self::TABLE)
|
|
|
|
->eq('option', $option)
|
|
|
|
->update(array('value' => Security::generateToken()));
|
2014-07-21 22:56:35 +02:00
|
|
|
}
|
|
|
|
}
|