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
* @ returns array with key names
*
* This function returns all keys saved in config . php . Please note that it
* does not return the values .
*/
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
* @ param $key key
* @ param $default = null default value
* @ returns 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
*/
2011-03-12 20:19:11 +03:00
public static function getValue ( $key , $default = null ){
2011-04-08 18:54:12 +04:00
self :: readData ();
if ( array_key_exists ( $key , self :: $cache )){
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
* @ param $key key
* @ param $value value
* @ returns true / false
*
* This function sets the value and writes the config . php . If the file can
* not be written , false will be returned .
*/
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
* @ param $key key
* @ returns true / false
*
* This function removes a key from the config . php . If owncloud has no
* write access to config . php , the function will return false .
*/
public static function deleteKey ( $key ){
2011-04-08 18:54:12 +04:00
self :: readData ();
if ( array_key_exists ( $key , self :: $cache )){
// Delete key from cache
unset ( self :: $cache [ $key ] );
// Write changes
self :: writeData ();
}
return true ;
}
/**
* @ brief Loads the config file
* @ returns true / false
*
* Reads the config file and saves it to the cache
*/
2011-04-16 13:25:21 +04:00
private static function readData (){
if ( self :: $init ){
2011-04-08 18:54:12 +04:00
return true ;
}
2011-09-18 21:37:54 +04:00
if ( ! file_exists ( OC :: $SERVERROOT . " /config/config.php " )){
2011-04-08 18:54:12 +04:00
return false ;
}
// Include the file, save the data from $CONFIG
2011-09-18 21:37:54 +04:00
include ( OC :: $SERVERROOT . " /config/config.php " );
2011-06-14 01:15:15 +04:00
if ( isset ( $CONFIG ) && is_array ( $CONFIG )){
2011-05-15 17:03:12 +04:00
self :: $cache = $CONFIG ;
}
2011-04-08 18:54:12 +04:00
// We cached everything
self :: $init = true ;
return true ;
}
/**
* @ brief Writes the config file
* @ returns true / false
*
* Saves the config to the config file .
*
* Known flaws : Strings are not escaped properly
*/
2011-04-16 13:25:21 +04:00
public static function writeData (){
2011-04-08 18:54:12 +04:00
// Create a php file ...
$content = " <?php \n \$ CONFIG = array( \n " ;
foreach ( self :: $cache as $key => $value ){
if ( is_bool ( $value )){
$value = $value ? 'true' : 'false' ;
$content .= " \" $key\ " => $value , \n " ;
}
else {
$value = str_replace ( " ' " , " \\ ' " , $value );
2011-04-16 14:18:42 +04:00
$content .= " \" $key\ " => '$value' , \n " ;
2011-04-08 18:54:12 +04:00
}
}
$content .= " ); \n ?> \n " ;
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-02-18 00:42:56 +04:00
$tmpl -> assign ( 'errors' , array ( 1 => array ( 'error' => " Can't write into config directory 'config' " , 'hint' => " You can usually fix this by giving the webserver user write access to the config directory in owncloud " )));
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 );
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
}