example * * * \param p_db : db_name id (or -1 for account_repository or -2 if p_type contains the full name of a database * * \param p_type = dossier, mod or the name of a datase * \return the connection */ function DbConnect($p_db=-1,$p_type='dossier') { if ( IsNumber($p_db) == false || strlen($p_db) > 5 ) die ("Dossier invalide"); if ( $p_db==-1) $l_dossier=sprintf("%saccount_repository",domaine); else { if ( $p_db == -2 ) $l_dossier=$p_type; else switch ($p_type) { case 'dossier': $l_dossier=sprintf("%sdossier%d",domaine,$p_db); break; case 'mod': $l_dossier=sprintf("%smod%d",domaine,$p_db); break; } } $phpcompta_user=phpcompta_user; $password=phpcompta_password; $port=phpcompta_psql_port; $host=( ! defined ("phpcompta_psql_host"))?'127.0.0.1':phpcompta_psql_host; ob_start(); $a=pg_connect("dbname=$l_dossier host='$host' user='$phpcompta_user' password='$password' port=$port"); if ( $a == false ) { ob_end_clean(); echo '

Impossible de se connecter à postgreSql !

'; echo "Vos paramètres sont incorrectes :
"; echo "
"; echo "base de donnée : $l_dossier
"; echo "Domaine : ".domaine."
"; echo "Port $port
"; echo "Utilisateur : $phpcompta_user
"; echo "host : $host
"; exit ("Connection impossible : vérifiez vos paramètres de base de données"); } ob_end_clean(); echo_debug ('postgres.php',__LINE__,"connect to $p_db dbname $l_dossier"); return $a; } /*! * \brief send a sql string to the database * \param $p_connection db connection * \param $p_string sql string * \return false if error otherwise true */ function ExecSql($p_connection, $p_string,$p_encoding='utf8') { echo_debug('postgres.php',__LINE__,"SQL = $p_string"); // probl. with Ubuntu & UTF8 //---- try { pg_set_client_encoding($p_connection,$p_encoding); $ret=pg_query($p_connection,$p_string); if ( ! $ret ) throw new Exception (" SQL ERROR $p_string ",1); } catch (Exception $a) { echo $p_string; $a->getMessage(); $a->getTrace(); return $ret; } return $ret; } /*! * \brief send a sql string to the database using the function * pg_query_params. Useful for avoiding the problem with the quotes * and to execute several times the same command * \param $p_connection db connection * \param $p_string sql string * \param $p_array array containing the value * \return false if error otherwise true */ function ExecSqlParam($p_connection, $p_string,$p_array) { echo_debug('postgres.php',__LINE__,"SQL = $p_string"); echo_debug('postgres.php',__LINE__,$p_array); // probl. with Ubuntu & UTF8 //---- pg_set_client_encoding($p_connection,'utf8'); //ob_start(); $ret=pg_query_params($p_connection,$p_string,$p_array); if ( ! $ret ) { //ob_end_clean(); $r=$p_string."array ".var_export($p_array,TRUE); throw new Exception (" SQL ERROR $r",1); } //ob_end_clean(); return $ret; } /*! * \brief Return all the users * as an array */ function GetAllUser() { echo_debug('postgres.php',__LINE__,"GetUser"); $cn=DbConnect(); $sql="select * from ac_users where use_login!='phpcompta'"; echo_debug('postgres.php',__LINE__,"ExecSql"); $Res=ExecSql($cn,$sql); $Num=pg_NumRows($Res); if ( $Num == 0 ) return null; for ($i=0;$i < $Num; $i++) { $User[]=pg_fetch_array($Res,$i); } return $User; } /*! * \brief Get the number of rows * from table jnt_use_dos where $p_dossier = dos_id and * use_id=$p_user. */ function ExisteJnt($p_dossier,$p_user) { $cn=DbConnect(); $Res=ExecSql($cn,"select * from jnt_use_dos where dos_id=".$p_dossier." and use_id=".$p_user); return pg_NumRows($Res); } /* ExistePriv * * * */ function ExistePriv($p_jntid) { $cn=DbConnect(); $Res=ExecSql($cn,"select * from priv_user where priv_jnt=".$p_jntid); return pg_NumRows($Res); } /* GetJnt * Get the jnt * * */ function GetJnt($p_dossier,$p_user) { $cn=DbConnect(); $Res=ExecSql($cn,"select jnt_id from jnt_use_dos where dos_id=".$p_dossier." and use_id=".$p_user); $R=pg_fetch_array($Res,0); return $R['jnt_id']; } /*! \brief Count the number of row * * \param $p_conn connection handler * \param $p_sql sql string * \param $array if not null we use the safer ExecSqlParam */ function CountSql($p_conn,$p_sql,$array=null) { if ( $array == null ) $r_sql=ExecSql($p_conn,$p_sql); else $r_sql=ExecSqlParam($p_conn,$p_sql,$array); return pg_NumRows($r_sql); } /*! * \param id of a dossier * \return Name of the dossier */ function GetDossierName($p_dossier) { $cn=DbConnect(); $Ret=ExecSql($cn,"select dos_name from ac_dossier where dos_id=".$p_dossier); $r= pg_fetch_array($Ret,0); return $r['dos_name']; } /*!\brief get the current sequence */ function GetSequence($p_cn,$p_seq) { $Res=ExecSql($p_cn,"select currval('$p_seq') as seq"); $seq=pg_fetch_array($Res,0); return $seq['seq']; } /*!\brief get the current sequence */ function NextSequence($p_cn,$p_seq) { $Res=ExecSql($p_cn,"select nextval('$p_seq') as seq"); $seq=pg_fetch_array($Res,0); return $seq['seq']; } function StartSql($p_cn) { $Res=ExecSql($p_cn,"start transaction"); } function EndSql($p_cn) { $Res=ExecSql($p_cn,"end transaction"); } function Commit($p_cn) { $Res=ExecSql($p_cn,"commit"); } function Rollback($p_cn) { $Res=ExecSql($p_cn,"rollback"); } function AlterSequence($p_cn,$p_name,$p_value) { if ( $p_value <= 0 ) $p_value=1; $Res=ExecSql($p_cn,"alter sequence $p_name restart $p_value"); } /*! * \brief Get the properties of an user * it means theme, profile, admin... * * \param $p_user user login * \param $p_cn connection * * \return an array containing * - use_admin * - use_usertype * - g_theme * - use_name * - use_login */ function GetUserProperty($p_cn,$p_user) { $sql="select use_login,use_first_name,use_name,use_admin,use_usertype,g_theme from ac_users where use_login='$p_user'"; $Ret=ExecSql($p_cn,$sql); if ( pg_NumRows($Ret) == 0) return array('use_first_name'=>'?', 'use_name'=>'Unknown', 'use_admin'=>0, 'use_usertype'=>'user', 'g_theme'=>'classic', 'use_login'=>$p_user); $a=pg_fetch_array($Ret,0); return $a; } /*! * \brief Give the mod_id from modeledef * * * \param $p_cn database connection (repository) * \param $p_modname template name * \return template id or 0 if not found * */ function GetModeleId($p_cn,$p_modname) { $Res=ExecSql($p_cn,"select mod_id from modeledef where mod_name='$p_modname'"); if (pg_NumRows($Res) == 0) return 0; $name=pg_fetch_array($Res,0); return $name['mod_id']; } /*!\brief purpose return the result of a sql statment * in a array * \param $p_cn database connection * \param $p_sql sql query * \param $p_array if not null we use ExecSqlParam */ function get_array($p_cn,$p_sql,$p_array=null) { echo_debug('postgres.php',__LINE__,"get_array"); if ( $p_array == null ) { $r=ExecSql($p_cn,$p_sql); } else { $r=ExecSqlParam($p_cn,$p_sql,$p_array); } if ( ($Max= pg_NumRows($r)) == 0 ) return null; $array=pg_fetch_all($r); echo_debug('postgres.php',__LINE__,var_export($array,true)); return $array; } /*! save_upload_document * \brief Save a "piece justificative" * * \param $cn database connection * \param $seq jr_grpt_id * \return $oid of the lob file if success * null if a error occurs * */ function save_upload_document ($cn,$seq) { $new_name=tempnam($_ENV['TMP'],'pj'); echo_debug('postgres.php',__LINE__,"new name=".$new_name); echo_debug(__FILE__.":".__LINE__.$_FILES); if ($_FILES["pj"]["error"] > 0) { echo_error(__FILE__.":".__LINE__."Error: " . $_FILES["pj"]["error"] ); } if ( strlen ($_FILES['pj']['tmp_name']) != 0 ) { echo_debug(__FILE__.":".__LINE__.'_FILE is'.$_FILES['pj']['tmp_name']); if (move_uploaded_file($_FILES['pj']['tmp_name'], $new_name)) { // echo "Image saved"; echo_debug(__FILE__.":".__LINE__."Doc saved"); $oid= pg_lo_import($cn,$new_name); if ( $oid == false ) { echo_error('postgres.php',__LINE__,"cannot upload document"); Rollback($cn); return; } echo_debug('postgres.php',__LINE__,"Loading document"); // Remove old document $ret=ExecSql($cn,"select jr_pj from jrn where jr_grpt_id=$seq"); if (pg_num_rows($ret) != 0) { $r=pg_fetch_array($ret,0); $old_oid=$r['jr_pj']; if (strlen($old_oid) != 0) pg_lo_unlink($cn,$old_oid); } // Load new document ExecSql($cn,"update jrn set jr_pj=".$oid.", jr_pj_name='".$_FILES['pj']['name']."', ". "jr_pj_type='".$_FILES['pj']['type']."' where jr_grpt_id=$seq"); return $oid; } else { echo "

Error

"; Rollback($cn); } } return 0; } /*!\brief return the value of the sql, the sql will return only one value * with the value * \param $p_cn database connection * \param $p_sql the sql stmt example :select s_value from document_state where s_id=2 *\param $p_array if array is not null we use the ExecSqlParm (safer) *\see ExecSqlParm * \return only the first value or an empty string if nothing is found */ function getDbValue($p_cn,$p_sql,$p_array=null) { if ( $p_array == null) { $ret=ExecSql($p_cn,$p_sql); } else { $ret=ExecSqlParam($p_cn,$p_sql,$p_array); } if ( pg_NumRows($ret) == 0 ) return ""; $r=pg_fetch_row($ret,0); return $r[0]; } /*!\brief test if a sequence exist */ /* \return true if the seq. exist otherwise false */ function exist_sequence($p_cn,$p_name) { $r=CountSql($p_cn,"select relname from pg_class where relname=lower('".$p_name."')"); if ( $r==0) return false; return true; } function create_sequence($p_cn,$p_name) { $sql="create sequence ".$p_name; ExecSql($p_cn,$sql); } /*! ************************************************** * \brief Get version of a database, the content of the * table version * * \param $p_cn database connection * * \return version number * */ function get_version($p_cn) { $Res=ExecSql($p_cn,"select val from version"); $a=pg_fetch_array($Res,0); return $a['val']; } /*! execute_script ************************************************** * \brief Execute a sql script * * \param $p_cn database * \param $script script name */ function execute_script($p_cn,$script) { if ( DEBUG=='false' ) ob_start(); $hf=fopen($script,'r'); if ( $hf == false ) { echo 'Ne peut ouvrir '.$script; exit(); } $sql=""; $flag_function=false; while (!feof($hf)) { $buffer=fgets($hf); $buffer=str_replace ("$","\$",$buffer); print $buffer."
"; // comment are not execute if ( substr($buffer,0,2) == "--" ) { //echo "comment $buffer"; continue; } // Blank Lines Are Skipped If ( Strlen($buffer)==0) { //echo "Blank $buffer"; Continue; } if ( strpos(strtolower($buffer),"create function")===0 ) { echo "found a function"; $flag_function=true; $sql=$buffer; continue; } if ( strpos(strtolower($buffer),"create or replace function")===0 ) { echo "found a function"; $flag_function=true; $sql=$buffer; continue; } // No semi colon -> multiline command if ( $flag_function== false && strpos($buffer,';') == false ) { $sql.=$buffer; continue; } if ( $flag_function ) { if ( strpos(strtolower($buffer), "language plpgsql") === false && strpos(strtolower($buffer), "language 'plpgsql'") === false ) { $sql.=$buffer; continue; } } else { // cut the semi colon $buffer=str_replace (';','',$buffer); } $sql.=$buffer; echo_debug('setup.php',__LINE__,"Execute sql $sql"); if ( ExecSql($p_cn,$sql) == false ) { Rollback($p_cn); if ( DEBUG=='false' ) ob_end_clean(); print "ERROR : $sql"; exit(); } $sql=""; $flag_function=false; print "
"; } // while (feof) fclose($hf); if ( DEBUG=='false' ) ob_end_clean(); } /*!\brief loop to apply all the path to a folder or * a template * \param $p_cn database connexion * \param $p_name database name * */ function apply_patch($p_cn,$p_name,$from_setup=1) { $MaxVersion=DBVERSION-1; echo ''; } ?>