2010-03-16 22:25:05 +03:00
< ? php
2011-03-12 20:19:11 +03:00
/**
* ownCloud
*
* @ author Frank Karlitschek
* @ author Jakob Sack
2012-05-26 21:14:24 +04:00
* @ copyright 2012 Frank Karlitschek frank @ owncloud . org
2011-03-12 20:19:11 +03:00
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation ; either
* version 3 of the License , or any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU AFFERO GENERAL PUBLIC LICENSE for more details .
*
* You should have received a copy of the GNU Affero General Public
* License along with this library . If not , see < http :// www . gnu . org / licenses />.
*
*/
2011-03-13 19:25:34 +03:00
/*
*
* An example of config . php
*
* < ? php
* $CONFIG = array (
* " database " => " mysql " ,
* " firstrun " => false ,
* " pi " => 3.14
* );
* ?>
*
*/
2011-03-12 20:19:11 +03:00
/**
* This class is responsible for reading and writing config . php , the very basic
* configuration file of owncloud .
*/
2011-07-29 23:36:03 +04:00
class OC_Config {
2011-03-12 20:19:11 +03:00
// associative array key => value
private static $cache = array ();
// Is the cache filled?
private static $init = false ;
2010-03-16 22:25:05 +03:00
2010-04-23 02:05:04 +04:00
/**
2011-03-12 20:19:11 +03:00
* @ brief Lists all available config keys
2012-09-23 04:39:11 +04:00
* @ return array with key names
2011-03-12 20:19:11 +03:00
*
* This function returns all keys saved in config . php . Please note that it
* does not return the values .
*/
2012-09-07 17:22:01 +04:00
public static function getKeys () {
2011-04-08 18:54:12 +04:00
self :: readData ();
return array_keys ( self :: $cache );
2010-04-23 02:05:04 +04:00
}
2010-07-12 00:44:48 +04:00
/**
2011-03-12 20:19:11 +03:00
* @ brief Gets a value from config . php
2012-09-23 04:39:11 +04:00
* @ param string $key key
* @ param string $default = null default value
* @ return string the value or $default
2010-07-12 00:44:48 +04:00
*
2011-03-12 20:19:11 +03:00
* This function gets the value from config . php . If it does not exist ,
* $default will be returned .
2010-07-12 00:44:48 +04:00
*/
2012-09-07 17:22:01 +04:00
public static function getValue ( $key , $default = null ) {
2011-04-08 18:54:12 +04:00
self :: readData ();
2012-09-05 16:42:06 +04:00
if ( array_key_exists ( $key , self :: $cache )) {
2011-04-08 18:54:12 +04:00
return self :: $cache [ $key ];
}
2011-03-12 20:19:11 +03:00
return $default ;
2010-07-12 00:44:48 +04:00
}
2010-04-23 02:05:04 +04:00
2010-06-18 22:08:24 +04:00
/**
2011-03-12 20:19:11 +03:00
* @ brief Sets a value
2012-09-23 04:39:11 +04:00
* @ param string $key key
* @ param string $value value
* @ return bool
2011-03-12 20:19:11 +03:00
*
* This function sets the value and writes the config . php . If the file can
* not be written , false will be returned .
*/
2012-09-07 17:22:01 +04:00
public static function setValue ( $key , $value ) {
2011-04-08 18:54:12 +04:00
self :: readData ();
// Add change
self :: $cache [ $key ] = $value ;
// Write changes
self :: writeData ();
2011-03-12 20:19:11 +03:00
return true ;
2010-06-18 22:08:24 +04:00
}
2011-03-12 20:19:11 +03:00
2010-06-18 22:08:24 +04:00
/**
2011-03-12 20:19:11 +03:00
* @ brief Removes a key from the config
2012-09-23 04:39:11 +04:00
* @ param string $key key
* @ return bool
2011-03-12 20:19:11 +03:00
*
* This function removes a key from the config . php . If owncloud has no
* write access to config . php , the function will return false .
*/
2012-09-07 17:22:01 +04:00
public static function deleteKey ( $key ) {
2011-04-08 18:54:12 +04:00
self :: readData ();
2012-09-05 16:42:06 +04:00
if ( array_key_exists ( $key , self :: $cache )) {
2011-04-08 18:54:12 +04:00
// Delete key from cache
unset ( self :: $cache [ $key ] );
// Write changes
self :: writeData ();
}
return true ;
}
/**
* @ brief Loads the config file
2012-09-23 04:39:11 +04:00
* @ return bool
2011-04-08 18:54:12 +04:00
*
* Reads the config file and saves it to the cache
*/
2012-09-07 17:22:01 +04:00
private static function readData () {
2012-09-05 16:42:06 +04:00
if ( self :: $init ) {
2011-04-08 18:54:12 +04:00
return true ;
}
2013-03-07 02:30:16 +04:00
// read all file in config dir ending by config.php
$config_files = glob ( OC :: $SERVERROOT . " /config/*.config.php " );
2013-07-05 17:07:15 +04:00
if ( ! is_array ( $config_files )) {
$config_files = array ();
}
2013-03-07 02:30:16 +04:00
//Filter only regular files
$config_files = array_filter ( $config_files , 'is_file' );
2013-03-10 00:41:59 +04:00
//Sort array naturally :
natsort ( $config_files );
2013-03-07 02:30:16 +04:00
// Add default config
array_unshift ( $config_files , OC :: $SERVERROOT . " /config/config.php " );
2011-04-08 18:54:12 +04:00
2013-03-07 02:30:16 +04:00
//Include file and merge config
foreach ( $config_files as $file ){
2013-07-03 18:00:23 +04:00
@ include $file ;
2013-03-07 02:30:16 +04:00
if ( isset ( $CONFIG ) && is_array ( $CONFIG )) {
self :: $cache = array_merge ( self :: $cache , $CONFIG );
}
2011-05-15 17:03:12 +04:00
}
2011-04-08 18:54:12 +04:00
// We cached everything
self :: $init = true ;
return true ;
}
/**
* @ brief Writes the config file
2012-09-23 04:39:11 +04:00
* @ return bool
2011-04-08 18:54:12 +04:00
*
* Saves the config to the config file .
*
*/
2012-09-07 17:22:01 +04:00
public static function writeData () {
2011-04-08 18:54:12 +04:00
// Create a php file ...
2013-07-08 12:07:57 +04:00
$defaults = new OC_Defaults ;
2013-03-07 00:05:13 +04:00
$content = " <?php \n " ;
if ( defined ( 'DEBUG' ) && DEBUG ) {
$content .= " define('DEBUG',true); \n " ;
}
$content .= " \$ CONFIG = " ;
2012-06-22 14:44:17 +04:00
$content .= var_export ( self :: $cache , true );
2012-06-23 01:01:12 +04:00
$content .= " ; \n " ;
2011-04-08 18:54:12 +04:00
2012-06-13 01:15:44 +04:00
$filename = OC :: $SERVERROOT . " /config/config.php " ;
2011-04-08 18:54:12 +04:00
// Write the file
2012-06-13 01:15:44 +04:00
$result =@ file_put_contents ( $filename , $content );
2011-08-12 21:22:29 +04:00
if ( ! $result ) {
$tmpl = new OC_Template ( '' , 'error' , 'guest' );
2012-09-05 16:42:06 +04:00
$tmpl -> assign ( 'errors' , array ( 1 => array (
'error' => " Can't write into config directory 'config' " ,
2013-07-08 12:07:57 +04:00
'hint' => 'This can usually be fixed by '
. '<a href="' . $defaults -> getDocBaseUrl () . '/server/5.0/admin_manual/installation/installation_source.html#set-the-directory-permissions" target="_blank">giving the webserver write access to the config directory</a>.' )));
2011-08-12 21:22:29 +04:00
$tmpl -> printPage ();
exit ;
}
2012-06-13 01:15:44 +04:00
// Prevent others not to read the config
@ chmod ( $filename , 0640 );
2013-05-25 19:25:43 +04:00
OC_Util :: clearOpcodeCache ();
2011-03-12 20:19:11 +03:00
return true ;
2010-04-08 16:49:48 +04:00
}
2010-03-16 22:25:05 +03:00
}