| | |
| | | */ |
| | | private $legacy_props = array( |
| | | // new name => old name |
| | | 'default_folders' => 'default_imap_folders', |
| | | 'mail_pagesize' => 'pagesize', |
| | | 'addressbook_pagesize' => 'pagesize', |
| | | 'reply_mode' => 'top_posting', |
| | |
| | | |
| | | |
| | | /** |
| | | * @brief Guess the type the string may fit into. |
| | | * |
| | | * Look inside the string to determine what type might be best as a container. |
| | | * |
| | | * @param $value The value to inspect |
| | | * |
| | | * @return The guess at the type. |
| | | */ |
| | | private function guess_type($value) { |
| | | $_ = 'string'; |
| | | |
| | | // array requires hint to be passed. |
| | | |
| | | if (preg_match('/^[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?$/', $value) !== False) { |
| | | $_ = 'double'; |
| | | } else if (preg_match('/^\d+$/', $value) !== False) { |
| | | $_ = 'integer'; |
| | | } else if (preg_match('/(t(rue)?)|(f(alse)?)/i', $value) !== False) { |
| | | $_ = 'boolean'; |
| | | } |
| | | |
| | | return $_; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @brief Parse environment variable into PHP type. |
| | | * |
| | | * Perform an appropriate parsing of the string to create the desired PHP type. |
| | | * |
| | | * @param $string String to parse into PHP type |
| | | * @param $type Type of value to return |
| | | * |
| | | * @return Appropriately typed interpretation of $string. |
| | | */ |
| | | private function parse_env($string, $type) { |
| | | console("parse $string into $type"); |
| | | |
| | | $_ = $string; |
| | | |
| | | switch ($type) { |
| | | case 'boolean': |
| | | $_ = (boolean) $_; |
| | | break; |
| | | case 'integer': |
| | | $_ = (integer) $_; |
| | | break; |
| | | case 'double': |
| | | $_ = (double) $_; |
| | | break; |
| | | case 'string': |
| | | break; |
| | | case 'array': |
| | | $_ = json_decode($_, true); |
| | | break; |
| | | case 'object': |
| | | $_ = json_decode($_, false); |
| | | break; |
| | | case 'resource': |
| | | case 'NULL': |
| | | default: |
| | | $_ = $this->parse_env($_, $this->guess_type($_)); |
| | | } |
| | | |
| | | return $_; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @brief Get environment variable value. |
| | | * |
| | | * Retrieve an environment variable's value or if it's not found, return the |
| | | * provided default value. |
| | | * |
| | | * @param $varname Environment variable name |
| | | * @param $default_value Default value to return if necessary |
| | | * @param $type Type of value to return |
| | | * |
| | | * @return Value of the environment variable or default if not found. |
| | | */ |
| | | private function getenv_default($varname, $default_value, $type = null) { |
| | | $_ = getenv($varname); |
| | | |
| | | if ($_ === False) { |
| | | $_ = $default_value; |
| | | } else { |
| | | if (is_null($type)) { |
| | | $type = gettype($default_value); |
| | | } |
| | | $_ = $this->parse_env($_, $type); |
| | | } |
| | | |
| | | return $_; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Load config from local config file |
| | | * |
| | | * @todo Remove global $CONFIG |
| | |
| | | // fix default imap folders encoding |
| | | foreach (array('drafts_mbox', 'junk_mbox', 'sent_mbox', 'trash_mbox') as $folder) |
| | | $this->prop[$folder] = rcube_charset::convert($this->prop[$folder], RCUBE_CHARSET, 'UTF7-IMAP'); |
| | | |
| | | if (!empty($this->prop['default_folders'])) |
| | | foreach ($this->prop['default_folders'] as $n => $folder) |
| | | $this->prop['default_folders'][$n] = rcube_charset::convert($folder, RCUBE_CHARSET, 'UTF7-IMAP'); |
| | | |
| | | // set PHP error logging according to config |
| | | if ($this->prop['debug_level'] & 1) { |
| | |
| | | $result = explode(',', $result); |
| | | } |
| | | |
| | | $result = $this->getenv_default('ROUNDCUBE_' . strtoupper($name), $result) |
| | | |
| | | $plugin = $rcube->plugins->exec_hook('config_get', array( |
| | | 'name' => $name, 'default' => $def, 'result' => $result)); |
| | | |
| | |
| | | */ |
| | | public function all() |
| | | { |
| | | $props = $this->prop; |
| | | |
| | | foreach ($props as $prop_name => $prop_value) |
| | | $props[$prop_name] = $this->getenv_default('ROUNDCUBE_' . strtoupper($prop_name), $prop_value); |
| | | |
| | | $rcube = rcube::get_instance(); |
| | | $plugin = $rcube->plugins->exec_hook('config_get', array( |
| | | 'name' => '*', 'result' => $this->prop)); |
| | | 'name' => '*', 'result' => $props)); |
| | | |
| | | return $plugin['result']; |
| | | } |