From 52ed807720e6dde41605ba477d7ab3c106f3cdbb Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Sun, 30 Oct 2011 20:33:05 +0000 Subject: [PATCH] =?UTF-8?q?0000430:=20r=C3=A9=C3=A9criture=20de=20u=5FShow?= =?UTF-8?q?Dossier=20&=20GetAvailable=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- html/user_login.php | 6 +- include/class_user.php | 1434 +++++++++++++++++++++------------------ include/opening.inc.php | 2 +- include/user_menu.php | 102 --- 4 files changed, 791 insertions(+), 753 deletions(-) diff --git a/html/user_login.php b/html/user_login.php index 6951706c8..2ae0868b7 100644 --- a/html/user_login.php +++ b/html/user_login.php @@ -91,7 +91,7 @@ echo '
'; if ( $User->admin == 0 ) { // how many folder ? - $folder=GetAvailableFolder($_SESSION['g_user'],0); + $folder=$User->get_available_folder(); if ( $folder != null && count($folder) == 1 ) { @@ -142,11 +142,11 @@ echo $w->input('p_nom',$p_nom); $filtre=""; if ( isset ($_GET ['p_nom'])) { - $filtre=sql_string($_GET['p_nom']); + $filtre=$_GET['p_nom']; } // If admin show everything otherwise only the available dossier -$res=u_ShowDossier($_SESSION['g_user'],$User->Admin(),$filtre); +$res=$User->show_dossier($filtre); echo $res; ?>

diff --git a/include/class_user.php b/include/class_user.php index 93bc999dd..04b3c1e86 100644 --- a/include/class_user.php +++ b/include/class_user.php @@ -1,4 +1,5 @@ '._('Session expirée
Utilisateur déconnecté').''; - redirect('index.php',1); - exit(); - } + var $id; + var $pass; + var $db; + var $admin; + var $valid; - $this->login=$_SESSION['g_user']; - $this->pass=$_SESSION['g_pass']; - $this->lang=(isset($_SESSION['g_lang']))?$_SESSION['g_lang']:'fr_FR.utf8'; - $this->valid=(isset ($_SESSION['isValid']))?1:0; - $this->db=$p_cn; - $this->id=-1; - if ( isset($_SESSION['g_theme']) ) - $this->theme=$_SESSION['g_theme']; + function User($p_cn, $p_id=-1) + { + // if p_id is not set then check the connected user + if ($p_id == -1) + { + if (!isset($_SESSION['g_user'])) + { + echo '

' . _('Session expirée
Utilisateur déconnecté') . '

'; + redirect('index.php', 1); + exit(); + } - $this->admin=( isset($_SESSION['use_admin']) )?$_SESSION['use_admin']:0; + $this->login = $_SESSION['g_user']; + $this->pass = $_SESSION['g_pass']; + $this->lang = (isset($_SESSION['g_lang'])) ? $_SESSION['g_lang'] : 'fr_FR.utf8'; + $this->valid = (isset($_SESSION['isValid'])) ? 1 : 0; + $this->db = $p_cn; + $this->id = -1; + if (isset($_SESSION['g_theme'])) + $this->theme = $_SESSION['g_theme']; - if ( isset($_SESSION['use_name']) ) - $this->name=$_SESSION['use_name']; - if ( isset($_SESSION['use_first_name']) ) - $this->first_name=$_SESSION['use_first_name']; - $this->load(); - } - else // if p_id is set get data of another user - { - $this->id=$p_id; - $this->db=$p_cn; - $this->load(); - } - } - /*!\brief load data from database. - * if this->id == -1, it is unknown so we have to retrieve it - from the database by the login - * return -1 if nothing is found - */ - function load() - { - /* if this->id == -1, it is unknown so we have to retrieve it from - the database thanks it login */ - if ( $this->id < 0 ) - { - $sql_cond=" where use_login=$1"; - $sql_array=array($this->login); - } - else - { - $sql_cond=" where use_id=$1"; - $sql_array=array($this->id); - } - $sql="select use_id, + $this->admin = ( isset($_SESSION['use_admin']) ) ? $_SESSION['use_admin'] : 0; + + if (isset($_SESSION['use_name'])) + $this->name = $_SESSION['use_name']; + if (isset($_SESSION['use_first_name'])) + $this->first_name = $_SESSION['use_first_name']; + $this->load(); + } + else // if p_id is set get data of another user + { + $this->id = $p_id; + $this->db = $p_cn; + $this->load(); + } + } + + /* !\brief load data from database. + * if this->id == -1, it is unknown so we have to retrieve it + from the database by the login + * return -1 if nothing is found + */ + + function load() + { + /* if this->id == -1, it is unknown so we have to retrieve it from + the database thanks it login */ + if ($this->id < 0) + { + $sql_cond = " where use_login=$1"; + $sql_array = array($this->login); + } + else + { + $sql_cond = " where use_id=$1"; + $sql_array = array($this->id); + } + $sql = "select use_id, use_first_name, use_name, use_login, use_active, use_admin from ac_users "; - $cn=new Database(); - $Res=$cn->exec_sql($sql.$sql_cond,$sql_array); - if (($Max=Database::num_row($Res)) == 0 ) return -1; - $row=Database::fetch_array($Res,0); - $this->id=$row['use_id']; - $this->first_name=$row['use_first_name']; - $this->name=$row['use_name']; - $this->active=$row['use_active']; - $this->login=$row['use_login']; - $this->admin=$row['use_admin']; - } - function save() - { + $cn = new Database(); + $Res = $cn->exec_sql($sql . $sql_cond, $sql_array); + if (($Max = Database::num_row($Res)) == 0) + return -1; + $row = Database::fetch_array($Res, 0); + $this->id = $row['use_id']; + $this->first_name = $row['use_first_name']; + $this->name = $row['use_name']; + $this->active = $row['use_active']; + $this->login = $row['use_login']; + $this->admin = $row['use_admin']; + } - $Sql="update ac_users set use_first_name=$1, use_name=$2 + function save() + { + + $Sql = "update ac_users set use_first_name=$1, use_name=$2 ,use_active=$3,use_admin=$4 where use_id=$5"; - $cn=new Database(); - $Res=$cn->exec_sql($Sql,array($this->first_name,$this->last_name,$this->active,$this->admin,$this->id)); - } - /*! - * \brief Check if user is active and exists in therepository - * Automatically redirect, it doesn't check if a user can access a folder - *\param $silent false, echo an error message and exit, true : exit without warning - * default is false - * - ++*/ - function Check($silent=false,$from='') - { + $cn = new Database(); + $Res = $cn->exec_sql($Sql, array($this->first_name, $this->last_name, $this->active, $this->admin, $this->id)); + } - $res=0; - $pass5=md5($this->pass); + /* ! + * \brief Check if user is active and exists in therepository + * Automatically redirect, it doesn't check if a user can access a folder + * \param $silent false, echo an error message and exit, true : exit without warning + * default is false + * + ++ */ - $cn=new Database(); - $sql="select ac_users.use_login,ac_users.use_active, ac_users.use_pass, + function Check($silent=false, $from='') + { + + $res = 0; + $pass5 = md5($this->pass); + + $cn = new Database(); + $sql = "select ac_users.use_login,ac_users.use_active, ac_users.use_pass, use_admin,use_first_name,use_name from ac_users where ac_users.use_id='$this->id' and ac_users.use_active=1 and ac_users.use_pass='$pass5'"; - $ret=$cn->exec_sql($sql); - $res=Database::num_row($ret); - if ( $res >0 ) - { - $r=Database::fetch_array($ret,0); - $_SESSION['use_admin']=$r['use_admin']; - $_SESSION['use_name']=$r['use_name']; - $_SESSION['use_first_name']=$r['use_first_name']; - $_SESSION['isValid']=1; + $ret = $cn->exec_sql($sql); + $res = Database::num_row($ret); + if ($res > 0) + { + $r = Database::fetch_array($ret, 0); + $_SESSION['use_admin'] = $r['use_admin']; + $_SESSION['use_name'] = $r['use_name']; + $_SESSION['use_first_name'] = $r['use_first_name']; + $_SESSION['isValid'] = 1; - $this->admin=$_SESSION['use_admin']; - $this->name=$_SESSION['use_name']; - $this->first_name=$_SESSION['use_first_name']; - $this->load_global_pref(); + $this->admin = $_SESSION['use_admin']; + $this->name = $_SESSION['use_name']; + $this->first_name = $_SESSION['use_first_name']; + $this->load_global_pref(); + } + $sql = "insert into audit_connect (ac_user,ac_ip,ac_module,ac_url,ac_state) values ($1,$2,$3,$4,$5)"; + if ($res == 0) + { + $cn->exec_sql($sql, array($_SESSION['g_user'], $_SERVER["REMOTE_ADDR"], $from, $_SERVER['REQUEST_URI'], 'FAIL')); + if (!$silent) + { + alert(_('Utilisateur ou mot de passe incorrect')); + redirect('index.html'); + } + $this->valid = 0; + session_unset(); + exit - 1; + } + else + { + if ($from == 'LOGIN') + $cn->exec_sql($sql, array($_SESSION['g_user'], $_SERVER["REMOTE_ADDR"], $from, $_SERVER['REQUEST_URI'], 'SUCCESS')); + $this->valid = 1; + } + return $ret; + } - } - $sql="insert into audit_connect (ac_user,ac_ip,ac_module,ac_url,ac_state) values ($1,$2,$3,$4,$5)"; + /* !\brief return the access to a folder, + * \param $p_dossier id if it is == 0 then we take the value from $_SESSION + * \return the priv_priv + * - X no access + * - R has access (normal user) + * - L Local Admin + * + */ - if ( $res == 0 ) - { - $cn->exec_sql($sql,array($_SESSION['g_user'],$_SERVER["REMOTE_ADDR"],$from,$_SERVER['REQUEST_URI'],'FAIL')); - if ( ! $silent) - { - alert(_('Utilisateur ou mot de passe incorrect')); - redirect('index.html'); - } - $this->valid=0; - session_unset(); - exit -1; - } - else - { - if ( $from=='LOGIN') - $cn->exec_sql($sql,array($_SESSION['g_user'],$_SERVER["REMOTE_ADDR"],$from,$_SERVER['REQUEST_URI'],'SUCCESS')); - $this->valid=1; - } + function get_folder_access($p_dossier = 0) + { - return $ret; + if ($p_dossier == 0) + $p_dossier = dossier::id(); + if ($this->is_local_admin($p_dossier) == 1) + return 'L'; + $cn = new Database(); - } - /*!\brief return the access to a folder, - * \param $p_dossier id if it is == 0 then we take the value from $_SESSION - *\return the priv_priv - * - X no access - * - R has access (normal user) - * - L Local Admin - * - */ - function get_folder_access($p_dossier = 0) - { - - if ($p_dossier==0) $p_dossier=dossier::id(); - if ( $this->is_local_admin($p_dossier) == 1) return 'L'; - $cn=new Database(); - - $sql="select priv_priv from priv_user join jnt_use_dos on (jnt_id=priv_jnt) join ac_users using (use_id) + $sql = "select priv_priv from priv_user join jnt_use_dos on (jnt_id=priv_jnt) join ac_users using (use_id) where use_id=$1 and dos_id=$2"; - $res=$cn->get_value($sql,array($this->id,$p_dossier)); - if ( $res=='') return 'X'; - return $res; - } - /*\brief save the access of a folder - *\param $db_id the dossier id - *\param $priv the priv. to set - */ - function set_folder_access($db_id,$priv) - { + $res = $cn->get_value($sql, array($this->id, $p_dossier)); + if ($res == '') + return 'X'; + return $res; + } - $cn=new Database(); - $jnt=$cn->get_value("select jnt_id from jnt_use_dos where dos_id=$1 and use_id=$2",array($db_id,$this->id)); + /* \brief save the access of a folder + * \param $db_id the dossier id + * \param $priv the priv. to set + */ - if ( $cn->size() == 0 ) - { + function set_folder_access($db_id, $priv) + { - $Res=$cn->exec_sql("insert into jnt_use_dos(dos_id,use_id) values($1,$2)",array($db_id,$this->id)); - $jnt=$cn->get_value("select jnt_id from jnt_use_dos where dos_id=$1 and use_id=$2",array($db_id,$this->id)); - $Res=$cn->exec_sql("insert into priv_user (priv_priv,priv_jnt) values($1,$2)",array($priv,$jnt)); - } - $Res=$cn->exec_sql("update priv_user set priv_priv=$1 where priv_jnt=$2",array($priv,$jnt)); + $cn = new Database(); + $jnt = $cn->get_value("select jnt_id from jnt_use_dos where dos_id=$1 and use_id=$2", array($db_id, $this->id)); - } - /*!\brief check that a user is valid and the access to the folder - * \param $p_ledger the ledger to check - *\return the priv_priv - * - O only predefined operation - * - W write - * - R read only - * - X no access - * + if ($cn->size() == 0) + { - * - */ - function get_ledger_access($p_ledger) - { - if ( $this->admin == 1 || - $this->is_local_admin(dossier::id()) ==1 ) - return 'W'; + $Res = $cn->exec_sql("insert into jnt_use_dos(dos_id,use_id) values($1,$2)", array($db_id, $this->id)); + $jnt = $cn->get_value("select jnt_id from jnt_use_dos where dos_id=$1 and use_id=$2", array($db_id, $this->id)); + $Res = $cn->exec_sql("insert into priv_user (priv_priv,priv_jnt) values($1,$2)", array($priv, $jnt)); + } + $Res = $cn->exec_sql("update priv_user set priv_priv=$1 where priv_jnt=$2", array($priv, $jnt)); + } - $sql="select uj_priv from user_sec_jrn where uj_login=$1 and uj_jrn_id=$2"; - $res=$this->db->get_value($sql,array($this->login,$p_ledger)); + /* !\brief check that a user is valid and the access to the folder + * \param $p_ledger the ledger to check + * \return the priv_priv + * - O only predefined operation + * - W write + * - R read only + * - X no access + * - if ( $res=='' ) $res='X'; - return $res; - } + * + */ - /*! - * \brief get all the available ledgers for the current user - * \param $p_type = ALL or the type of the ledger (ACH,VEN,FIN,ODS) - * \param $p_access =3 for Read or WRITE, 2 write, 1 for readonly - * \return a double array of available ledgers - @verbatim - [0] => [jrn_def_id] - [jrn_def_type] - [jrn_def_name] - [jrn_def_class_deb] - [jrn_def_class_cred] - [jrn_type_id] - [jrn_desc] - [uj_priv] - @endverbatim - */ - function get_ledger($p_type='ALL',$p_access=3) - { - if ( $this->admin != 1 && $this->is_local_admin() != 1) - { - $sql_type=($p_type=='ALL')?'':"and jrn_def_type=upper('".sql_string($p_type)."')"; - switch($p_access) - { - case 3: - $sql_access=" and uj_priv!= 'X'"; - break; - case 2: - $sql_access=" and uj_priv = 'W'"; - break; + function get_ledger_access($p_ledger) + { + if ($this->admin == 1 || + $this->is_local_admin(dossier::id()) == 1) + return 'W'; - case 1: - $sql_access=" and uj_priv = 'R'"; - break; + $sql = "select uj_priv from user_sec_jrn where uj_login=$1 and uj_jrn_id=$2"; + $res = $this->db->get_value($sql, array($this->login, $p_ledger)); - } + if ($res == '') + $res = 'X'; + return $res; + } - $sql="select jrn_def_id,jrn_def_type, + /* ! + * \brief get all the available ledgers for the current user + * \param $p_type = ALL or the type of the ledger (ACH,VEN,FIN,ODS) + * \param $p_access =3 for Read or WRITE, 2 write, 1 for readonly + * \return a double array of available ledgers + @verbatim + [0] => [jrn_def_id] + [jrn_def_type] + [jrn_def_name] + [jrn_def_class_deb] + [jrn_def_class_cred] + [jrn_type_id] + [jrn_desc] + [uj_priv] + @endverbatim + */ + + function get_ledger($p_type='ALL', $p_access=3) + { + if ($this->admin != 1 && $this->is_local_admin() != 1) + { + $sql_type = ($p_type == 'ALL') ? '' : "and jrn_def_type=upper('" . sql_string($p_type) . "')"; + switch ($p_access) + { + case 3: + $sql_access = " and uj_priv!= 'X'"; + break; + case 2: + $sql_access = " and uj_priv = 'W'"; + break; + + case 1: + $sql_access = " and uj_priv = 'R'"; + break; + } + + $sql = "select jrn_def_id,jrn_def_type, jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_type_id,jrn_desc,uj_priv, jrn_deb_max_line,jrn_cred_max_line from jrn_def join jrn_type on jrn_def_type=jrn_type_id join user_sec_jrn on uj_jrn_id=jrn_def_id where - uj_login='".$this->login."'". - $sql_type.$sql_access. - " order by jrn_Def_id"; - } - else - { - $sql_type=($p_type=='ALL')?'':"where jrn_def_type=upper('".sql_string($p_type)."')"; - $sql="select jrn_def_id,jrn_def_type,jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_deb_max_line,jrn_cred_max_line, + uj_login='" . $this->login . "'" . + $sql_type . $sql_access . + " order by jrn_Def_id"; + } + else + { + $sql_type = ($p_type == 'ALL') ? '' : "where jrn_def_type=upper('" . sql_string($p_type) . "')"; + $sql = "select jrn_def_id,jrn_def_type,jrn_def_name,jrn_def_class_deb,jrn_def_class_cred,jrn_deb_max_line,jrn_cred_max_line, jrn_type_id,jrn_desc,'W' as uj_priv from jrn_def join jrn_type on jrn_def_type=jrn_type_id $sql_type order by jrn_Def_id"; + } + $res = $this->db->exec_sql($sql); + if (Database::num_row($res) == 0) + return null; + $array = Database::fetch_all($res); + return $array; + } - } - $res=$this->db->exec_sql($sql); - if ( Database::num_row($res) == 0 ) return null; - $array=Database::fetch_all($res); - return $array; - } + /* !\brief return an sql condition for filtering the permitted ledger + * \param $p_type = ALL or the type of the ledger (ACH,VEN,FIN,ODS) + * \param $p_access =3 for READ or WRITE, 2 READ and write, 1 for readonly + * + * \return sql condition like = jrn_def_id in (...) + */ - /*!\brief return an sql condition for filtering the permitted ledger - * \param $p_type = ALL or the type of the ledger (ACH,VEN,FIN,ODS) - * \param $p_access =3 for READ or WRITE, 2 READ and write, 1 for readonly - * - *\return sql condition like = jrn_def_id in (...) - */ - function get_ledger_sql($p_type='ALL',$p_access=3) - { - $aLedger=$this->get_ledger($p_type,$p_access); - if ( empty ($aLedger)) return ' jrn_def_id < 0 '; - $sql=" jrn_def_id in ("; - foreach ($aLedger as $row) - { - $sql.=$row['jrn_def_id'].','; - } - $sql.='-1)'; - return $sql; - } - /*! - * \brief Check if an user is an admin - * - * \return 1 for yes 0 for no - */ - function Admin() - { - if ( $this->login != 'phpcompta') - { - $pass5=md5($this->pass); - $sql="select use_admin from ac_users where use_login=$1 + function get_ledger_sql($p_type='ALL', $p_access=3) + { + $aLedger = $this->get_ledger($p_type, $p_access); + if (empty($aLedger)) + return ' jrn_def_id < 0 '; + $sql = " jrn_def_id in ("; + foreach ($aLedger as $row) + { + $sql.=$row['jrn_def_id'] . ','; + } + $sql.='-1)'; + return $sql; + } + + /* ! + * \brief Check if an user is an admin + * + * \return 1 for yes 0 for no + */ + + function Admin() + { + if ($this->login != 'phpcompta') + { + $pass5 = md5($this->pass); + $sql = "select use_admin from ac_users where use_login=$1 and use_active=1 "; - $cn=new Database(); - $res=$cn->exec_sql($sql,array($this->login)); - if ( Database::num_row($res)==0) exit(__FILE__." ".__LINE__." aucun resultat"); - $this->admin=Database::fetch_result($res,0); - } - else $this->admin=1; + $cn = new Database(); + $res = $cn->exec_sql($sql, array($this->login)); + if (Database::num_row($res) == 0) + exit(__FILE__ . " " . __LINE__ . " aucun resultat"); + $this->admin = Database::fetch_result($res, 0); + } + else + $this->admin = 1; - return $this->admin; - } - /*! - * \brief Set the selected periode in the user's preferences - * - * \param $p_periode periode - * \param - $p_user - * - */ - function set_periode($p_periode) - { - $sql="update user_local_pref set parameter_value='$p_periode' where user_id='$this->id' and parameter_type='PERIODE'"; - $Res=$this->db->exec_sql($sql); - } + return $this->admin; + } - private function set_default_periode() - { + /* ! + * \brief Set the selected periode in the user's preferences + * + * \param $p_periode periode + * \param - $p_user + * + */ - /* get the first periode */ - $sql='select min(p_id) as pid from parm_periode where p_closed = false and p_start = (select min(p_start) from parm_periode)'; - $Res=$this->db->exec_sql($sql); + function set_periode($p_periode) + { + $sql = "update user_local_pref set parameter_value='$p_periode' where user_id='$this->id' and parameter_type='PERIODE'"; + $Res = $this->db->exec_sql($sql); + } - $pid=Database::fetch_result($Res,0,0); - /* if all the periode are closed, then we use the last closed period */ - if ( $pid == null ) - { - $sql='select min(p_id) as pid from parm_periode where p_start = (select max(p_start) from parm_periode)'; - $Res2=$this->db->exec_sql($sql); - $pid=Database::fetch_result($Res2,0,0); - if ( $pid == null ) - { - echo _("Aucune période trouvéee !!!"); - exit(1); - } + private function set_default_periode() + { - $pid=Database::fetch_result($Res2,0,0); - } + /* get the first periode */ + $sql = 'select min(p_id) as pid from parm_periode where p_closed = false and p_start = (select min(p_start) from parm_periode)'; + $Res = $this->db->exec_sql($sql); - $sql=sprintf("insert into user_local_pref (user_id,parameter_value,parameter_type) - values ('%s','%d','PERIODE')", - $this->login,$pid); - $Res=$this->db->exec_sql($sql); - } + $pid = Database::fetch_result($Res, 0, 0); + /* if all the periode are closed, then we use the last closed period */ + if ($pid == null) + { + $sql = 'select min(p_id) as pid from parm_periode where p_start = (select max(p_start) from parm_periode)'; + $Res2 = $this->db->exec_sql($sql); + $pid = Database::fetch_result($Res2, 0, 0); + if ($pid == null) + { + echo _("Aucune période trouvéee !!!"); + exit(1); + } - /*! - * \brief Get the default periode from the user's preferences - * - * \return the default periode - * - * - */ + $pid = Database::fetch_result($Res2, 0, 0); + } - function get_periode() - { + $sql = sprintf("insert into user_local_pref (user_id,parameter_value,parameter_type) + values ('%s','%d','PERIODE')", $this->login, $pid); + $Res = $this->db->exec_sql($sql); + } - $array=$this->get_preference(); - if ( ! isset ($array['PERIODE'])) - { - $this->set_default_periode(); - $array=$this->get_preference(); - } - return $array['PERIODE']; - } - /*!\brief return the mini rapport to display on the welcome page - *\return 0 if nothing if found or the report to display (formdef.fr_id) - */ - function get_mini_report() - { - $array=$this->get_preference(); - $fr_id=(isset($array['MINIREPORT']))?$array['MINIREPORT']:0; - return $fr_id; + /* ! + * \brief Get the default periode from the user's preferences + * + * \return the default periode + * + * + */ - } + function get_periode() + { - /*!\brief set the mini rapport to display on the welcome page - */ - function set_mini_report($p_id) - { - $count=$this->db->get_value("select count(*) from user_local_pref where user_id=$1 and parameter_type=$2", - array($this->id,'MINIREPORT')); - if ( $count == 1 ) - { - $sql="update user_local_pref set parameter_value=$1 where user_id=$2 and parameter_type='MINIREPORT'"; - $Res=$this->db->exec_sql($sql,array($p_id,$this->id)); - } - else - { - $sql="insert into user_local_pref (user_id,parameter_type,parameter_value)". - "values($1,'MINIREPORT',$2)"; - $Res=$this->db->exec_sql($sql,array($this->id,$p_id)); - } + $array = $this->get_preference(); + if (!isset($array['PERIODE'])) + { + $this->set_default_periode(); + $array = $this->get_preference(); + } + return $array['PERIODE']; + } + /* !\brief return the mini rapport to display on the welcome page + * \return 0 if nothing if found or the report to display (formdef.fr_id) + */ - } - function save_global_preference($key,$value) - { - $repo=new Database(); - $count=$repo->get_value("select count(*) + function get_mini_report() + { + $array = $this->get_preference(); + $fr_id = (isset($array['MINIREPORT'])) ? $array['MINIREPORT'] : 0; + return $fr_id; + } + + /* !\brief set the mini rapport to display on the welcome page + */ + + function set_mini_report($p_id) + { + $count = $this->db->get_value("select count(*) from user_local_pref where user_id=$1 and parameter_type=$2", array($this->id, 'MINIREPORT')); + if ($count == 1) + { + $sql = "update user_local_pref set parameter_value=$1 where user_id=$2 and parameter_type='MINIREPORT'"; + $Res = $this->db->exec_sql($sql, array($p_id, $this->id)); + } + else + { + $sql = "insert into user_local_pref (user_id,parameter_type,parameter_value)" . + "values($1,'MINIREPORT',$2)"; + $Res = $this->db->exec_sql($sql, array($this->id, $p_id)); + } + } + + function save_global_preference($key, $value) + { + $repo = new Database(); + $count = $repo->get_value("select count(*) from user_global_pref where - parameter_type=$1 and user_id=$2", - array($key,$this->login)); - if ( $count == 1 ) - { - $repo->exec_sql("update user_global_pref set parameter_value=$1 - where parameter_type=$2 and user_id=$3", - array($value,$key,$this->login)); - } elseif($count == 0) - { - $repo->exec_sql("insert into user_global_pref(user_id,parameter_type,parameter_value) - values($1,$2,$3)",array($this->login,$key,$value)); + parameter_type=$1 and user_id=$2", array($key, $this->login)); + if ($count == 1) + { + $repo->exec_sql("update user_global_pref set parameter_value=$1 + where parameter_type=$2 and user_id=$3", array($value, $key, $this->login)); + } + elseif ($count == 0) + { + $repo->exec_sql("insert into user_global_pref(user_id,parameter_type,parameter_value) + values($1,$2,$3)", array($this->login, $key, $value)); + } } - } - /*! - * \brief Get the default user's preferences - * \return array of (parameter_type => parameter_value) - */ - function get_preference () - { - $sql="select parameter_type,parameter_value from user_local_pref where user_id=$1"; - $Res=$this->db->exec_sql($sql,array($this->id)); - $l_array=array(); - for ( $i =0;$i < Database::num_row($Res);$i++) - { - $row= Database::fetch_array($Res,$i); - $type=$row['parameter_type']; - $l_array[$type]=$row['parameter_value']; - } + /* ! + * \brief Get the default user's preferences + * \return array of (parameter_type => parameter_value) + */ + + function get_preference() + { + $sql = "select parameter_type,parameter_value from user_local_pref where user_id=$1"; + $Res = $this->db->exec_sql($sql, array($this->id)); + $l_array = array(); + for ($i = 0; $i < Database::num_row($Res); $i++) + { + $row = Database::fetch_array($Res, $i); + $type = $row['parameter_type']; + $l_array[$type] = $row['parameter_value']; + } - return $l_array; - } - /*! - * \brief Check if an user is allowed to do an action - * \param p_action_id - * \return - * - 0 no priv - * - 1 priv granted - *@see constant.security.php - */ - function check_action ( $p_action_id) - { - /* save it into the log */ - global $audit; - if ( $this->Admin()==1 ) return 1; - if ( $this->is_local_admin(dossier::id()) == 1 ) return 1; + return $l_array; + } - $Res=$this->db->exec_sql( - "select * from user_sec_act where ua_login=$1 and ua_act_id=$2", - array($this->login,$p_action_id)); - $Count=Database::num_row($Res); - if ( $Count == 0 ) - { - if (isset ($audit) && $audit == true) - { - $cn=new Database(); - $sql="insert into audit_connect (ac_user,ac_ip,ac_module,ac_url,ac_state) values ($1,$2,$3,$4,$5)"; - $cn->exec_sql($sql,array($_SESSION['g_user'],$_SERVER["REMOTE_ADDR"],$p_action_id,$_SERVER['REQUEST_URI'],'FAIL')); - } - return 0; - } - if ( $Count == 1 ) return 1; - echo "

Action Invalide !!! $Count select * from user_sec_act where ua_login='$p_login' and ua_act_id=$p_action_id

"; - exit(); - } - /*! - * \brief Get the global preferences from user_global_pref - * in the account_repository db - * - * \note set $SESSION[g_variable] - */ - function load_global_pref() - { - $cn=new Database(); - // Load everything in an array - $Res=$cn->exec_sql ("select parameter_type,parameter_value from + /* ! + * \brief Check if an user is allowed to do an action + * \param p_action_id + * \return + * - 0 no priv + * - 1 priv granted + * @see constant.security.php + */ + + function check_action($p_action_id) + { + /* save it into the log */ + global $audit; + if ($this->Admin() == 1) + return 1; + if ($this->is_local_admin(dossier::id()) == 1) + return 1; + + $Res = $this->db->exec_sql( + "select * from user_sec_act where ua_login=$1 and ua_act_id=$2", array($this->login, $p_action_id)); + $Count = Database::num_row($Res); + if ($Count == 0) + { + if (isset($audit) && $audit == true) + { + $cn = new Database(); + $sql = "insert into audit_connect (ac_user,ac_ip,ac_module,ac_url,ac_state) values ($1,$2,$3,$4,$5)"; + $cn->exec_sql($sql, array($_SESSION['g_user'], $_SERVER["REMOTE_ADDR"], $p_action_id, $_SERVER['REQUEST_URI'], 'FAIL')); + } + return 0; + } + if ($Count == 1) + return 1; + echo "

Action Invalide !!! $Count select * from user_sec_act where ua_login='$p_login' and ua_act_id=$p_action_id

"; + exit(); + } + + /* ! + * \brief Get the global preferences from user_global_pref + * in the account_repository db + * + * \note set $SESSION[g_variable] + */ + + function load_global_pref() + { + $cn = new Database(); + // Load everything in an array + $Res = $cn->exec_sql("select parameter_type,parameter_value from user_global_pref - where user_id='".$this->login."'"); - $Max=Database::num_row($Res); - if ( $Max == 0 ) - { - $this->insert_default_global_pref(); - $this->load_global_pref(); - return; - } - // Load value into array - $line=array(); - for ($i=0;$i<$Max;$i++) - { - $row=Database::fetch_array($Res,$i); - $type=$row['parameter_type']; - $line[$type]=$row['parameter_value']; - ; - } - // save array into g_ variable - $array_pref=array ('g_theme'=>'THEME','g_pagesize'=>'PAGESIZE','g_topmenu'=>'TOPMENU','g_lang'=>'LANG'); - foreach ($array_pref as $name=>$parameter ) - { - if ( ! isset ($line[$parameter]) ) - { - $this->insert_default_global_pref($parameter); - $this->load_global_pref(); - return; - } - $_SESSION[$name]=$line[$parameter]; - } - } + where user_id='" . $this->login . "'"); + $Max = Database::num_row($Res); + if ($Max == 0) + { + $this->insert_default_global_pref(); + $this->load_global_pref(); + return; + } + // Load value into array + $line = array(); + for ($i = 0; $i < $Max; $i++) + { + $row = Database::fetch_array($Res, $i); + $type = $row['parameter_type']; + $line[$type] = $row['parameter_value']; + ; + } + // save array into g_ variable + $array_pref = array('g_theme' => 'THEME', 'g_pagesize' => 'PAGESIZE', 'g_topmenu' => 'TOPMENU', 'g_lang' => 'LANG'); + foreach ($array_pref as $name => $parameter) + { + if (!isset($line[$parameter])) + { + $this->insert_default_global_pref($parameter); + $this->load_global_pref(); + return; + } + $_SESSION[$name] = $line[$parameter]; + } + } - /*! - * \brief insert default pref - * if no parameter are given insert all the existing - * parameter otherwise only the requested - * \param $p_type parameter's type or nothing - * \param $p_value parameter value - * - */ - function insert_default_global_pref($p_type="",$p_value="") - { + /* ! + * \brief insert default pref + * if no parameter are given insert all the existing + * parameter otherwise only the requested + * \param $p_type parameter's type or nothing + * \param $p_value parameter value + * + */ - $default_parameter= array("THEME"=>"Light", - "PAGESIZE"=>"50", - 'TOPMENU'=>'TEXT', - 'LANG'=>'fr_FR.utf8'); - $cn=new Database(); - $Sql="insert into user_global_pref(user_id,parameter_type,parameter_value) + function insert_default_global_pref($p_type="", $p_value="") + { + + $default_parameter = array("THEME" => "Light", + "PAGESIZE" => "50", + 'TOPMENU' => 'TEXT', + 'LANG' => 'fr_FR.utf8'); + $cn = new Database(); + $Sql = "insert into user_global_pref(user_id,parameter_type,parameter_value) values ('%s','%s','%s')"; - if ( $p_type == "" ) - { - foreach ( $default_parameter as $name=>$value) - { - $Insert=sprintf($Sql,$this->login,$name,$value); - $cn->exec_sql($Insert); - } - } - else - { - $value=($p_value=="")?$default_parameter[$p_type]:$p_value; - $Insert=sprintf($Sql,$this->login,$p_type,$value); - $cn->exec_sql($Insert); - } + if ($p_type == "") + { + foreach ($default_parameter as $name => $value) + { + $Insert = sprintf($Sql, $this->login, $name, $value); + $cn->exec_sql($Insert); + } + } + else + { + $value = ($p_value == "") ? $default_parameter[$p_type] : $p_value; + $Insert = sprintf($Sql, $this->login, $p_type, $value); + $cn->exec_sql($Insert); + } + } + /* ! + * \brief update default pref + * if value is not given then use the default value + * + * \param $p_type parameter's type + * \param $p_value parameter's value value of the type + */ - } - - /*! - * \brief update default pref - * if value is not given then use the default value - * - * \param $p_type parameter's type - * \param $p_value parameter's value value of the type - */ - function update_global_pref($p_type,$p_value="") - { - $default_parameter= array("THEME"=>"Light", - "PAGESIZE"=>"50", - "LANG"=>'fr_FR.utf8', - 'TOPMENU'=>'SELECT'); - $cn=new Database(); - $Sql="update user_global_pref set parameter_value=$1 + function update_global_pref($p_type, $p_value="") + { + $default_parameter = array("THEME" => "Light", + "PAGESIZE" => "50", + "LANG" => 'fr_FR.utf8', + 'TOPMENU' => 'SELECT'); + $cn = new Database(); + $Sql = "update user_global_pref set parameter_value=$1 where parameter_type=$2 and user_id=$3"; - $value=($p_value=="")?$default_parameter[$p_type]:$p_value; - $cn->exec_sql($Sql,array($value,$p_type,$this->login)); + $value = ($p_value == "") ? $default_parameter[$p_type] : $p_value; + $cn->exec_sql($Sql, array($value, $p_type, $this->login)); + } - }//end function - /*!\brief Return the year of current Periode - * it is the parm_periode.p_exercice col - * if an error occurs return 0 - */ - function get_exercice() - { - $sql="select p_exercice from parm_periode where p_id=".$this->get_periode(); - $Ret=$this->db->exec_sql($sql); - if (Database::num_row($Ret) == 1) - { - $r=Database::fetch_array($Ret,0); - return $r['p_exercice']; - } - else - return 0; +//end function + /* !\brief Return the year of current Periode + * it is the parm_periode.p_exercice col + * if an error occurs return 0 + */ - } + function get_exercice() + { + $sql = "select p_exercice from parm_periode where p_id=" . $this->get_periode(); + $Ret = $this->db->exec_sql($sql); + if (Database::num_row($Ret) == 1) + { + $r = Database::fetch_array($Ret, 0); + return $r['p_exercice']; + } + else + return 0; + } - /*!\brief Check if the user can access - * otherwise warn and exit - * \param $p_action requested action - * \param $p_js = 1 javascript, or 0 just a text - * \return nothing the program exits automatically - */ - function can_request($p_action,$p_js=0) - { - if ( $this->check_action($p_action)==0 ) - { - if ( $p_js == 1 ) - { - echo ""; + /* !\brief Check if the user can access + * otherwise warn and exit + * \param $p_action requested action + * \param $p_js = 1 javascript, or 0 just a text + * \return nothing the program exits automatically + */ - } - else - { - echo '
'; - echo '

Cette action ne vous est pas autorisée Contactez votre responsable

'; - echo '
'; + function can_request($p_action, $p_js=0) + { + if ($this->check_action($p_action) == 0) + { + if ($p_js == 1) + { + echo ""; + } + else + { + echo '
'; + echo '

Cette action ne vous est pas autorisée Contactez votre responsable

'; + echo '
'; + } + exit(-1); + } + } - } - exit(-1); + /* ! + * \brief Check if an user is an local administrator + * + * + * \param $p_dossier : dossier_id + * + * \return + * - 0 if no + * - 1 if yes + * + */ - } - } + function is_local_admin($p_dossier=-1) + { + if ($p_dossier == -1) + { + $p_dossier = dossier::id(); + } - /*! - * \brief Check if an user is an local administrator - * - * - * \param $p_dossier : dossier_id - * - * \return - * - 0 if no - * - 1 if yes - * - */ - function is_local_admin($p_dossier=-1) - { - if ($p_dossier==-1) - { - $p_dossier=dossier::id(); - } + if ($this->login == 'phpcompta') + return 1; + $sql = 'select priv_priv from ac_users join jnt_use_dos using (use_id) join priv_user ' . + ' on ( jnt_use_dos.jnt_id = priv_user.priv_jnt) ' . + " where priv_priv='L' and use_login='" . $this->login . "' and dos_id=$p_dossier"; - if ( $this->login == 'phpcompta') return 1; - $sql='select priv_priv from ac_users join jnt_use_dos using (use_id) join priv_user '. - ' on ( jnt_use_dos.jnt_id = priv_user.priv_jnt) '. - " where priv_priv='L' and use_login='".$this->login."' and dos_id=$p_dossier"; + $cn = new Database(); - $cn=new Database(); - - $isAdmin=$cn->count_sql($sql); + $isAdmin = $cn->count_sql($sql); - return $isAdmin; + return $isAdmin; + } - } - /*! - *\brief return an array with all the users who can access $p_dossier including the global admin. The user - * must be activated - * - *\param $p_dossier dossier - *\return an array of user's object - * array indices - * - use_id (id ) - * - use_login (login of the user) - * - use_name - * - use_first_name - * - *\exception throw an exception if nobody can access - */ - static function get_list($p_dossier) - { - $sql="select distinct use_id,use_login,use_first_name,use_name from ac_users + /* ! + * \brief return an array with all the users who can access $p_dossier including the global admin. The user + * must be activated + * + * \param $p_dossier dossier + * \return an array of user's object + * array indices + * - use_id (id ) + * - use_login (login of the user) + * - use_name + * - use_first_name + * + * \exception throw an exception if nobody can access + */ + + static function get_list($p_dossier) + { + $sql = "select distinct use_id,use_login,use_first_name,use_name from ac_users left outer join jnt_use_dos using (use_id) left join priv_user on (priv_jnt=jnt_id) where (dos_id=$1 or use_admin=1) and use_active=1 and (use_admin=1 or priv_priv <> 'X') order by use_login,use_name"; - $repo=new Database(); - $array=$repo->get_array($sql,array($p_dossier)); - if ( $repo->size() == 0 ) throw new Exception ('Error inaccessible folder'); - return $array; - } - /*! - * \brief check the access of an user on a ledger - * - * \param $p_jrn the ledger id - * \return - * - O only predefined operation - * - W write - * - R read only - * - X no access - * - */ + $repo = new Database(); + $array = $repo->get_array($sql, array($p_dossier)); + if ($repo->size() == 0) + throw new Exception('Error inaccessible folder'); + return $array; + } - function check_jrn($p_jrn) - { - return $this->get_ledger_access($p_jrn); - } - /*!\brief check if an user can access a folder, if he cannot display a dialog box - * and exit - *\param the folder if - *\param $silent false, echo an error message and exit, true : exit without warning - * default is false - * \return - * - L for administrator (local and global) - * - P for extension only - * - R regular user - */ - function check_dossier($p_dossier_id,$silent=false) - { - $this->Admin(); - if ( $this->admin==1 || $this->is_local_admin($p_dossier_id)==1) return 'L'; - $cn=new Database(); + /* ! + * \brief check the access of an user on a ledger + * + * \param $p_jrn the ledger id + * \return + * - O only predefined operation + * - W write + * - R read only + * - X no access + * + */ - $dossier=$cn->get_value("select priv_priv from jnt_use_dos join priv_user on (priv_jnt=jnt_id) where dos_id=$1 and use_id=$2", - array($p_dossier_id,$this->id)); - $dossier=($dossier=='')?'X':$dossier; - if ( $dossier=='X') - { - if ( ! $silent) - { - alert(_('Dossier non accessible')); - exit(); - } + function check_jrn($p_jrn) + { + return $this->get_ledger_access($p_jrn); + } - } - return $dossier; - } - /** - *@brief return the first date and the last date of the current exercice for the current user - *@return and array ([0] => start_date,[1] => end_date) - */ - function get_limit_current_exercice() - { - $current_exercice=$this->get_exercice(); - $periode=new Periode($this->db); - list($per_start,$per_end)=$periode->get_limit($current_exercice); - $start=$per_start->first_day(); - $end=$per_end->last_day(); - return array($start,$end); - } + /* !\brief check if an user can access a folder, if he cannot display a dialog box + * and exit + * \param the folder if + * \param $silent false, echo an error message and exit, true : exit without warning + * default is false + * \return + * - L for administrator (local and global) + * - P for extension only + * - R regular user + */ + + function check_dossier($p_dossier_id, $silent=false) + { + $this->Admin(); + if ($this->admin == 1 || $this->is_local_admin($p_dossier_id) == 1) + return 'L'; + $cn = new Database(); + + $dossier = $cn->get_value("select priv_priv from jnt_use_dos join priv_user on (priv_jnt=jnt_id) where dos_id=$1 and use_id=$2", array($p_dossier_id, $this->id)); + $dossier = ($dossier == '') ? 'X' : $dossier; + if ($dossier == 'X') + { + if (!$silent) + { + alert(_('Dossier non accessible')); + exit(); + } + } + return $dossier; + } + + /** + * @brief return the first date and the last date of the current exercice for the current user + * @return and array ([0] => start_date,[1] => end_date) + */ + function get_limit_current_exercice() + { + $current_exercice = $this->get_exercice(); + $periode = new Periode($this->db); + list($per_start, $per_end) = $periode->get_limit($current_exercice); + $start = $per_start->first_day(); + $end = $per_end->last_day(); + return array($start, $end); + } + + /* ! + * \brief Show all the available folder for the users + * at the login page. For the special case 'E' + * go directly to extension and bypasse the dashboard + * \param $p_user user + * \param $p_admin 1 if admin + * + * \return table in HTML + * + */ + + function show_dossier($p_filtre="") + { + $p_array = $this->get_available_folder($p_filtre); + + $result = ""; + if ($p_array == 0) + return $result . " * Aucun dossier *"; + + $result.=""; + for ($i = 0; $i < sizeof($p_array); $i++) + { + + $id = $p_array[$i]['dos_id']; + $name = $p_array[$i]['dos_name']; + $desc = $p_array[$i]['dos_description']; + if ($i % 2 == 0) + $tr = "odd"; + else + $tr = "even"; + if ($this->check_dossier($id) != 'P') + { + $target = "do.php?gDossier=$id"; + } + else + { + $target = "extension.php?gDossier=$id"; + } + + $result.=""; + + $result.=""; + $desc = ($desc == "") ? "Aucune description" : h($desc); + $desc = "$desc"; + $result.=""; + $result.=""; + } + $result.="
"; + $result.=""; + $result.=$id . " " . h($name) . ""; + $result.=""; + $result.="" . $desc; + $result.="
"; + return $result; + } + + /* ! + * \brief Get all the available folders + * for the users, checked with the security + * + * \param $p_user user login + * \param $p_admin 1 if admin + * \return array containing + * - ac_dossier.dos_id + * - ac_dossier.dos_name + * - ac_dossier.dos_description + * + */ + + function get_available_folder( $p_filter="") + { + + $filter = ""; + if ($this->admin == 0) + { + // show only available folders + // if user is not an admin + $sql = "select distinct dos_id,dos_name,dos_description from ac_users + natural join jnt_use_dos + natural join ac_dossier + join priv_user on ( priv_jnt=jnt_id) + where use_active=1 + and use_login='".sql_string($this->login)."' + and priv_priv != 'X' and dos_name ilike '%$p_filter%' + order by dos_name"; + } + else + { + $sql = "select distinct dos_id,dos_name,dos_description from ac_dossier + where dos_name ilike '%".sql_string($p_filter)."%' order by dos_name"; + } + require_once('class_database.php'); + $cn = new Database(); + + $Res = $cn->exec_sql($sql); + $max = Database::num_row($Res); + if ($max == 0) + return 0; + + for ($i = 0; $i < $max; $i++) + { + $array[] = Database::fetch_array($Res, $i); + } + return $array; + } } + ?> diff --git a/include/opening.inc.php b/include/opening.inc.php index 7424f46f2..9909ef82b 100644 --- a/include/opening.inc.php +++ b/include/opening.inc.php @@ -40,7 +40,7 @@ if ($sa == '') echo '
Etape 1 '; echo 'Choississez le dossier où sont les soldes à importer'; - $avail=GetAvailableFolder($User->id,$User->Admin()); + $avail=$User->get_available_folder(); if ( empty( $avail) ) { diff --git a/include/user_menu.php b/include/user_menu.php index 4fb32ea84..ea9a4502c 100644 --- a/include/user_menu.php +++ b/include/user_menu.php @@ -29,110 +29,8 @@ require_once("class_icard.php"); require_once("class_ispan.php"); -/*! - * \brief Show all the available folder for the users - * at the login page. For the special case 'E' - * go directly to extension and bypasse the dashboard - * \param $p_user user - * \param $p_admin 1 if admin - * - * \return table in HTML - * - */ -function u_ShowDossier($p_user,$p_admin,$p_filtre="") -{ - $p_array=GetAvailableFolder($p_user,$p_admin,$p_filtre); - - $result=""; - if ( $p_array == 0 ) return $result." * Aucun dossier *"; - $cn=new Database(); - $user=new User($cn); - $result.=""; - for ($i=0;$icheck_dossier($id)!='P') - { - $target="do.php?gDossier=$id"; - } - else - { - $target="extension.php?gDossier=$id"; - } - - $result.=""; - - $result.=""; - $desc=($desc=="")?"Aucune description":h($desc); - $desc="$desc"; - $result.=""; - $result.=""; - - } - $result.="
"; - $result.=""; - $result.=$id." ".h($name).""; - $result.=""; - $result.="".$desc; - $result.="
"; - return $result; -} -/*! - * \brief Get all the available folders - * for the users, checked with the security - * - * \param $p_user user login - * \param $p_admin 1 if admin - * \return array containing - * - ac_dossier.dos_id - * - ac_dossier.dos_name - * - ac_dossier.dos_description - * - */ -function GetAvailableFolder($p_user,$p_admin,$p_filter="") -{ - - $filter=""; - if ($p_admin==0) - { - // show only available folders - // if user is not an admin - $sql="select distinct dos_id,dos_name,dos_description from ac_users - natural join jnt_use_dos - natural join ac_dossier - join priv_user on ( priv_jnt=jnt_id) - where use_active=1 - and use_login='$p_user' - and priv_priv != 'X' and dos_name ilike '%$p_filter%' - order by dos_name"; - - } - else - { - $sql="select distinct dos_id,dos_name,dos_description from ac_dossier - where dos_name ilike '%$p_filter%' order by dos_name"; - } - require_once('class_database.php'); - $cn=new Database(); - - $Res=$cn->exec_sql($sql); - $max=Database::num_row($Res); - if ( $max == 0 ) return 0; - - for ($i=0;$i<$max;$i++) - { - $array[]=Database::fetch_array($Res,$i); - } - return $array; -} /*! * \brief show the top menu for the user profile * and highight the selected one