Old ineffective sql_trail superseded by new improved db_trail logging only calls...
[fa-stable.git] / admin / db / users_db.inc
index 53f3c40cdf1f22624f54be4168459eb63347f13d..1040930591988465f9a24a09e45d53a3e8eefced 100644 (file)
 <?php
 /**********************************************************************
     Copyright (C) FrontAccounting, LLC.
-       Released under the terms of the GNU Affero General Public License,
-       AGPL, as published by the Free Software Foundation, either version 
-       of the License, or (at your option) any later version.
+       Released under the terms of the GNU General Public License, GPL, 
+       as published by the Free Software Foundation, either version 3 
+       of the License, or (at your option) any later version.
     This program 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 License here <http://www.gnu.org/licenses/agpl-3.0.html>.
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
 ***********************************************************************/
 
-function add_user($user_id, $real_name, $password, $phone, $email, $full_access
+function add_user($user_id, $real_name, $password, $phone, $email, $role_id
        $language, $profile, $rep_popup, $pos)
 {
+       begin_transaction(__FUNCTION__, func_get_args());
        $sql = "INSERT INTO ".TB_PREF."users (user_id, real_name, password"
-               .", phone, email, full_access, language, pos, print_profile, rep_popup)
+               .", phone, email, role_id, language, pos, print_profile, rep_popup)
                VALUES (".db_escape($user_id).", 
-               ".db_escape($real_name).", ".db_escape($password) .",".db_escape($phone).",
-                ".db_escape($email).", $full_access, ".db_escape($language).",
-                $pos,".db_escape($profile).",$rep_popup)";
-
-       db_query($sql, "could not add user for $user_id");
+               ".db_escape($real_name).", ".db_escape($password) .",".db_escape($phone)
+               .",".db_escape($email).", ".db_escape($role_id).", ".db_escape($language)
+               .", ".db_escape($pos).",".db_escape($profile).",".db_escape($rep_popup)
+               ." )";
+
+       $result = db_query($sql, "could not add user for $user_id");
+       commit_transaction();
+       return $result;
 }
 
 //-----------------------------------------------------------------------------------------------
 
-function update_user_password($user_id, $password)
+function update_user_password($id, $user_id, $password)
 {
-       $sql = "UPDATE ".TB_PREF."users SET password=".db_escape($password) . "
-               WHERE user_id = ".db_escape($user_id);
+       begin_transaction(__FUNCTION__, func_get_args());
+
+       $sql = "UPDATE ".TB_PREF."users SET password=".db_escape($password) . ",
+               user_id = ".db_escape($user_id). " WHERE id=".db_escape($id);
+       $result = db_query($sql, "could not update user password for $user_id");
 
-       db_query($sql, "could not update user password for $user_id");
+       commit_transaction();
+       return $result;
 }
 
 //-----------------------------------------------------------------------------------------------
 
-function update_user($user_id, $real_name, $phone, $email, $full_access
+function update_user($id, $user_id, $real_name, $phone, $email, $role_id
        $language, $profile, $rep_popup, $pos)
 {
+       begin_transaction(__FUNCTION__, func_get_args());
        $sql = "UPDATE ".TB_PREF."users SET real_name=".db_escape($real_name).
        ", phone=".db_escape($phone).",
                email=".db_escape($email).",
-               full_access=$full_access,
+               role_id=".db_escape($role_id).",
                language=".db_escape($language).",
                print_profile=".db_escape($profile).",
-               rep_popup=$rep_popup,
-               pos=$pos
-               WHERE user_id = ".db_escape($user_id);
-       db_query($sql, "could not update user for $user_id");
+               rep_popup=".db_escape($rep_popup).",
+               pos=".db_escape($pos).",
+               user_id = " . db_escape($user_id)
+               . " WHERE id=" . db_escape($id);
+       return db_query($sql, "could not update user for $user_id");
+       commit_transaction();
 }
 
 //-----------------------------------------------------------------------------------------------
 
-function update_user_display_prefs($user_id, $price_dec, $qty_dec, $exrate_dec, 
-       $percent_dec, $showgl, $showcodes, $date_format, $date_sep, $tho_sep, 
-       $dec_sep, $theme, $pagesize, $show_hints, $profile, $rep_popup, $query_size, $graphic_links)
+function update_user_prefs($id, $prefs)
 {
-       $sql = "UPDATE ".TB_PREF."users SET
-               prices_dec=".db_escape($price_dec).",
-               qty_dec=".db_escape($qty_dec).",
-               rates_dec=".db_escape($exrate_dec).",
-               percent_dec=".db_escape($percent_dec).",
-               show_gl=".db_escape($showgl).",
-               show_codes=".db_escape($showcodes).",
-               date_format=".db_escape($date_format).",
-               date_sep=".db_escape($date_sep).",
-               tho_sep=".db_escape($tho_sep).",
-               dec_sep=".db_escape($dec_sep).",
-               theme=".db_escape($theme).",
-               page_size=".db_escape($pagesize).",
-               show_hints=$show_hints,
-               print_profile=".db_escape($profile).",
-               rep_popup=$rep_popup,
-               query_size=$query_size,
-               graphic_links=$graphic_links
-               WHERE user_id = ".db_escape($user_id);
+       begin_transaction(__FUNCTION__, func_get_args());
+
+       $sql = "UPDATE ".TB_PREF."users SET ";
+       foreach($prefs as $name => $value) {
+               $prefs[$name] = $name.'='. db_escape($value);
+       }
+       $sql .= implode(',', $prefs) . " WHERE id=".db_escape($id);
+
+       $result = db_query($sql, "could not update user display prefs for $id");
 
-       db_query($sql, "could not update user display prefs for $user_id");
+       commit_transaction();
+       return $result;
 }
 
 //-----------------------------------------------------------------------------------------------
 
 
-function get_users()
+function get_users($all=false)
 {
-       $sql = "SELECT * FROM ".TB_PREF."users";
-
+       $sql = "SELECT u.*, r.role FROM ".TB_PREF."users u, ".TB_PREF."security_roles r
+               WHERE u.role_id=r.id";
+       if (!$all) $sql .= " AND !u.inactive";
+       
        return db_query($sql, "could not get users");
 }
 
 //-----------------------------------------------------------------------------------------------
 
-function get_user($user_id)
+function get_user($id)
 {
-       $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id = '$user_id'";
+       $sql = "SELECT * FROM ".TB_PREF."users WHERE id=".db_escape($id);
 
-       $result = db_query($sql, "could not get user for $user_id");
+       $result = db_query($sql, "could not get user $id");
 
        return db_fetch($result);
 }
 
 //-----------------------------------------------------------------------------------------------
 
-function delete_user($user_id)
+function get_user_by_login($user_id)
 {
-       $sql="DELETE FROM ".TB_PREF."users WHERE user_id='$user_id'";
+       $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id=".db_escape($user_id);
+
+       $result = db_query($sql, "could not get user $user_id");
 
-       db_query($sql, "could not delete user $user_id");
+       return db_fetch($result);
 }
 
 //-----------------------------------------------------------------------------------------------
 
-function get_user_for_login($user_id, $password)
+function get_user_by_email($email)
 {
-       set_global_connection();
+       $sql = "SELECT * FROM ".TB_PREF."users WHERE email=".db_escape($email);
+
+       $result = db_query($sql, "could not get user for email $email");
 
-       $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id = '$user_id' AND password='$password'";
+       if (db_num_rows($result) != 1)
+               return false;
 
-       return db_query($sql, "could not get validate user login for $user_id");
+       return db_fetch($result);
 }
 
 //-----------------------------------------------------------------------------------------------
 
-function update_user_visitdate($user_id)
+function delete_user($id)
 {
+       begin_transaction(__FUNCTION__, func_get_args());
+
+       $sql="DELETE FROM ".TB_PREF."users WHERE id=".db_escape($id);
+
+       db_query($sql, "could not delete user $id");
+
+       commit_transaction();
+}
+
+//-----------------------------------------------------------------------------------------------
+
+function get_user_auth($user_id, $password)
+{
+
+       $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id = ".db_escape($user_id)." AND"
+               ." password=".db_escape($password);
+
+       return db_num_rows(db_query($sql, "could not get validate user login for $user_id")) != 0;
+}
+
+//-----------------------------------------------------------------------------------------------
+//
+//     Record user login. When logging is on also current FA state is recorded.
+//
+function update_user_visitdate($user_id, $src_version, $db_version, $extensions)
+{
+       begin_transaction(__FUNCTION__, func_get_args());
+
        $sql = "UPDATE ".TB_PREF."users SET last_visit_date='". date("Y-m-d H:i:s") ."'
                WHERE user_id=".db_escape($user_id);
 
        db_query($sql, "could not update last visit date for user $user_id");
+
+       commit_transaction();
+}
+
+//-----------------------------------------------------------------------------------------------
+function check_user_activity($id) 
+{
+       $sql = "SELECT COUNT(*) FROM ".TB_PREF."audit_trail WHERE audit_trail.user="
+               . db_escape($id);
+       $result = db_query($sql,"Cant check user activity");
+       $ret = db_fetch($result);
+
+       return $ret[0];
 }
 
 //-----------------------------------------------------------------------------------------------
+function show_users_online()
+{
+       global $db, $GetText, $SysPrefs;
+
+       if (!isset($SysPrefs->show_users_online) || $SysPrefs->show_users_online == 0 || !defined('TB_PREF') || 
+               !isset($GetText) || !isset($db))
+               return "";
+       $result = db_query("SHOW TABLES LIKE '".TB_PREF."useronline'"); 
+       if (db_num_rows($result) == 1)
+       {
+               $timeoutseconds = 120;
+
+               $timestamp=time();
+               $timeout=$timestamp-$timeoutseconds;
+               /*
+               This will find out if user is from behind proxy server. 
+               In that case, the script would count them all as 1 user.
+               This function tryes to get real IP address.
+               */
+               if (isset($_SERVER['HTTP_CLIENT_IP'])) {
+                       $ip = $_SERVER['HTTP_CLIENT_IP'];
+               }
+               elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
+                       $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
+               }
+               elseif (isset($_SERVER['HTTP_X_FORWARDED'])) {
+                       $ip = $_SERVER['HTTP_X_FORWARDED'];
+               }
+               elseif (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
+                       $ip = $_SERVER['HTTP_FORWARDED_FOR'];
+               }
+               elseif (isset($_SERVER['HTTP_FORWARDED'])) {
+                       $ip = $_SERVER['HTTP_FORWARDED'];
+               }
+               else {
+                       $ip = $_SERVER['REMOTE_ADDR'];
+               }
+
+               // Add user to database
+               db_query("INSERT INTO ".TB_PREF."useronline (timestamp, ip, file) VALUES ('". $timestamp ."',". db_escape($ip) .",". db_escape($_SERVER['PHP_SELF']) .")");
+               //Remove users that were not online within $timeoutseconds.
+               db_query("DELETE FROM ".TB_PREF."useronline WHERE timestamp<". $timeout);
+
+               // Select online users
+               $result = db_query("SELECT DISTINCT ip FROM ".TB_PREF."useronline");
+               $users = db_num_rows($result);
+       }
+       else
+               $users = 1;
+       return "$users ".($users == 1 ? _("user online") : _("users online"));
 
-?>
\ No newline at end of file
+}