2001-05-02 10:02:32 +02:00
< ? php
/************************************************************************** \
* phpGroupWare API - Application configuration in a centralized location *
* This file written by Joseph Engo < jengo @ phpgroupware . org > *
* Copyright ( C ) 2000 , 2001 Joseph Engo *
* -------------------------------------------------------------------------*
* This library is part of the phpGroupWare API *
* http :// www . phpgroupware . org / api *
* ------------------------------------------------------------------------ *
* This library is free software ; you can redistribute it and / or modify it *
* under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation ; either version 2.1 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 Lesser General Public License for more details . *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library ; if not , write to the Free Software Foundation , *
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA *
\ **************************************************************************/
/* $Id$ */
class config
{
var $db ;
var $appname ;
2003-11-08 23:30:06 +01:00
var $config_data ; // actual config-data
var $read_data ; // config-data as read from db
2001-05-02 10:02:32 +02:00
function config ( $appname = '' )
{
if ( ! $appname )
{
2001-11-23 20:19:04 +01:00
$appname = $GLOBALS [ 'phpgw_info' ][ 'flags' ][ 'currentapp' ];
2001-05-02 10:02:32 +02:00
}
2003-10-08 00:02:30 +02:00
$this -> db = is_object ( $GLOBALS [ 'phpgw' ] -> db ) ? $GLOBALS [ 'phpgw' ] -> db : $GLOBALS [ 'phpgw_setup' ] -> db ;
2001-05-02 10:02:32 +02:00
$this -> appname = $appname ;
}
2003-11-03 15:25:50 +01:00
/*!
@ function read_repository
@ abstract reads the whole repository for $this -> appname , appname has to be set via the constructor
*/
2001-05-02 10:02:32 +02:00
function read_repository ()
{
2003-11-08 23:30:06 +01:00
$this -> config_data = array ();
2001-05-21 19:18:39 +02:00
$this -> db -> query ( " select * from phpgw_config where config_app=' " . $this -> appname . " ' " , __LINE__ , __FILE__ );
2001-05-02 10:02:32 +02:00
while ( $this -> db -> next_record ())
{
2002-04-13 05:34:23 +02:00
$test = @ unserialize ( $this -> db -> f ( 'config_value' ));
if ( $test )
{
$this -> config_data [ $this -> db -> f ( 'config_name' )] = $test ;
}
else
{
$this -> config_data [ $this -> db -> f ( 'config_name' )] = $this -> db -> f ( 'config_value' );
}
2001-05-02 10:02:32 +02:00
}
2003-11-08 23:30:06 +01:00
$this -> read_data = $this -> config_data ;
2001-05-02 10:02:32 +02:00
}
2003-11-03 15:25:50 +01:00
/*!
@ function save_repository
@ abstract updates the whole repository for $this -> appname , you have to call read_repository () before ( ! )
*/
2001-05-02 10:02:32 +02:00
function save_repository ()
{
2003-11-08 23:30:06 +01:00
if ( is_array ( $this -> config_data ))
2001-05-02 10:02:32 +02:00
{
2001-06-23 06:37:31 +02:00
$this -> db -> lock ( array ( 'phpgw_config' , 'phpgw_app_sessions' ));
2001-06-23 03:01:39 +02:00
if ( $this -> appname == 'phpgwapi' )
{
$this -> db -> query ( " delete from phpgw_app_sessions where sessionid = '0' and loginid = '0' and app = ' " . $this -> appname . " ' and location = 'config' " , __LINE__ , __FILE__ );
}
2003-11-03 15:25:50 +01:00
foreach ( $this -> config_data as $name => $value )
2001-06-13 17:44:56 +02:00
{
2003-11-03 15:25:50 +01:00
$this -> save_value ( $name , $value );
2001-06-13 17:44:56 +02:00
}
2003-11-08 23:30:06 +01:00
foreach ( $this -> read_data as $name => $value )
{
if ( ! isset ( $this -> config_data [ $name ])) // has been deleted
{
$this -> db -> query ( " DELETE FROM phpgw_config WHERE config_app=' $this->appname ' AND config_name=' $name ' " , __LINE__ , __FILE__ );
}
}
2001-06-13 17:44:56 +02:00
$this -> db -> unlock ();
2001-05-02 10:02:32 +02:00
}
2003-11-08 23:30:06 +01:00
$this -> read_data = $this -> config_data ;
2001-05-02 10:02:32 +02:00
}
2003-11-03 15:25:50 +01:00
/*!
@ function save_value
@ abstract updates or insert a single config - value
@ param $name string name of the config - value
@ param $value mixed content
@ param $app string app - name , defaults to $this -> appname set via the constructor
*/
function save_value ( $name , $value , $app = False )
{
//echo "<p>config::save_value('$name','".print_r($value,True)."','$app')</p>\n";
if ( ! $app || $app == $this -> appname )
{
$app = $this -> appname ;
$this -> config_data [ $name ] = $value ;
}
$name = $this -> db -> db_addslashes ( $name );
2003-11-08 23:30:06 +01:00
if ( $app == $this -> appname && $this -> read_data [ $name ] == $value )
{
return True ; // no change ==> exit
}
2003-11-03 15:25:50 +01:00
$this -> db -> query ( $sql = " select * from phpgw_config where config_app=' $app ' AND config_name=' $name ' " , __LINE__ , __FILE__ );
if ( $this -> db -> next_record ())
{
$value_read = @ unserialize ( $this -> db -> f ( 'config_value' ));
if ( ! $value_read )
{
$value_read = $this -> db -> f ( 'config_value' );
}
if ( $value_read == $value )
{
return True ; // no change ==> exit
}
$update = True ;
}
//echo "<p>config::save_value('$name','".print_r($value,True)."','$app')</p>\n";
if ( is_array ( $value ))
{
$value = serialize ( $value );
}
$value = $this -> db -> db_addslashes ( $value );
$query = $update ? " UPDATE phpgw_config SET config_value=' $value ' WHERE config_app=' $app ' AND config_name=' $name ' " :
" INSERT INTO phpgw_config (config_app,config_name,config_value) VALUES (' $app ',' $name ',' $value ') " ;
return $this -> db -> query ( $query , __LINE__ , __FILE__ );
}
/*!
@ function delete_repository
@ abstract deletes the whole repository for $this -> appname , appname has to be set via the constructor
*/
2001-05-02 10:02:32 +02:00
function delete_repository ()
{
2001-05-21 19:18:39 +02:00
$this -> db -> query ( " delete from phpgw_config where config_app=' " . $this -> appname . " ' " , __LINE__ , __FILE__ );
2001-05-02 10:02:32 +02:00
}
2003-11-08 23:30:06 +01:00
/*!
@ function delete_value
@ abstract deletes a single value from the repository , you need to call save_repository after
@ param $variable_name string name of the config
*/
function delete_value ( $variable_name )
{
unset ( $this -> config_data [ $variable_name ]);
}
2003-11-03 15:25:50 +01:00
/*!
@ function value
@ abstract sets a single value in the repositry , you need to call save_repository after
@ param $variable_name string name of the config
@ param $variable_data mixed the content
*/
2001-05-02 10:02:32 +02:00
function value ( $variable_name , $variable_data )
{
$this -> config_data [ $variable_name ] = $variable_data ;
}
2001-05-21 19:18:39 +02:00
}
?>