[0002707] Added check for email uniqueness during password reset.
[fa-stable.git] / admin / db / users_db.inc
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU General Public License, GPL, 
5         as published by the Free Software Foundation, either version 3 
6         of the License, or (at your option) any later version.
7     This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
10     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
11 ***********************************************************************/
12
13 function add_user($user_id, $real_name, $password, $phone, $email, $role_id, 
14         $language, $profile, $rep_popup, $pos)
15 {
16         $sql = "INSERT INTO ".TB_PREF."users (user_id, real_name, password"
17                 .", phone, email, role_id, language, pos, print_profile, rep_popup)
18                 VALUES (".db_escape($user_id).", 
19                 ".db_escape($real_name).", ".db_escape($password) .",".db_escape($phone)
20                 .",".db_escape($email).", ".db_escape($role_id).", ".db_escape($language)
21                 .", ".db_escape($pos).",".db_escape($profile).",".db_escape($rep_popup)
22                 ." )";
23
24         return db_query($sql, "could not add user for $user_id");
25 }
26
27 //-----------------------------------------------------------------------------------------------
28
29 function update_user_password($id, $user_id, $password)
30 {
31         $sql = "UPDATE ".TB_PREF."users SET password=".db_escape($password) . ",
32                 user_id = ".db_escape($user_id). " WHERE id=".db_escape($id);
33
34         return db_query($sql, "could not update user password for $user_id");
35 }
36
37 //-----------------------------------------------------------------------------------------------
38
39 function update_user($id, $user_id, $real_name, $phone, $email, $role_id, 
40         $language, $profile, $rep_popup, $pos)
41 {
42         $sql = "UPDATE ".TB_PREF."users SET real_name=".db_escape($real_name).
43         ", phone=".db_escape($phone).",
44                 email=".db_escape($email).",
45                 role_id=".db_escape($role_id).",
46                 language=".db_escape($language).",
47                 print_profile=".db_escape($profile).",
48                 rep_popup=".db_escape($rep_popup).",
49                 pos=".db_escape($pos).",
50                 user_id = " . db_escape($user_id)
51                 . " WHERE id=" . db_escape($id);
52         return db_query($sql, "could not update user for $user_id");
53 }
54
55 //-----------------------------------------------------------------------------------------------
56
57 function update_user_prefs($id, $prefs)
58 {
59         $sql = "UPDATE ".TB_PREF."users SET ";
60         foreach($prefs as $name => $value) {
61                 $prefs[$name] = $name.'='. db_escape($value);
62         }
63         $sql .= implode(',', $prefs) . " WHERE id=".db_escape($id);
64
65         return db_query($sql, "could not update user display prefs for $id");
66 }
67
68 //-----------------------------------------------------------------------------------------------
69
70
71 function get_users($all=false)
72 {
73         $sql = "SELECT u.*, r.role FROM ".TB_PREF."users u, ".TB_PREF."security_roles r
74                 WHERE u.role_id=r.id";
75         if (!$all) $sql .= " AND !u.inactive";
76         
77         return db_query($sql, "could not get users");
78 }
79
80 //-----------------------------------------------------------------------------------------------
81
82 function get_user($id)
83 {
84         $sql = "SELECT * FROM ".TB_PREF."users WHERE id=".db_escape($id);
85
86         $result = db_query($sql, "could not get user $id");
87
88         return db_fetch($result);
89 }
90
91 //-----------------------------------------------------------------------------------------------
92
93 function get_user_by_login($user_id)
94 {
95         $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id=".db_escape($user_id);
96
97         $result = db_query($sql, "could not get user $user_id");
98
99         return db_fetch($result);
100 }
101
102 //-----------------------------------------------------------------------------------------------
103
104 function get_user_by_email($email)
105 {
106         $sql = "SELECT * FROM ".TB_PREF."users WHERE email=".db_escape($email);
107
108         $result = db_query($sql, "could not get user for email $email");
109
110         if (db_num_rows($result) != 1)
111                 return false;
112
113         return db_fetch($result);
114 }
115
116 //-----------------------------------------------------------------------------------------------
117
118 function delete_user($id)
119 {
120         $sql="DELETE FROM ".TB_PREF."users WHERE id=".db_escape($id);
121
122         db_query($sql, "could not delete user $id");
123 }
124
125 //-----------------------------------------------------------------------------------------------
126 //
127 //      Obsolete, to be removed in 2.4. This function as been spleet into get_user_auth/get_user_by_login
128 //      in FA 2.3.6
129 //
130 function get_user_for_login($user_id, $password)
131 {
132         set_global_connection();
133
134 // do not exclude inactive records or you lost access after source upgrade
135 // on sites using pre 2.2 database
136         $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id = ".db_escape($user_id)." AND"
137                 ." password=".db_escape($password);
138
139         return db_query($sql, "could not get validate user login for $user_id");
140 }
141
142 //-----------------------------------------------------------------------------------------------
143
144 function get_user_auth($user_id, $password)
145 {
146
147         $sql = "SELECT * FROM ".TB_PREF."users WHERE user_id = ".db_escape($user_id)." AND"
148                 ." password=".db_escape($password);
149
150         return db_num_rows(db_query($sql, "could not get validate user login for $user_id")) != 0;
151 }
152
153 //-----------------------------------------------------------------------------------------------
154
155 function update_user_visitdate($user_id)
156 {
157         $sql = "UPDATE ".TB_PREF."users SET last_visit_date='". date("Y-m-d H:i:s") ."'
158                 WHERE user_id=".db_escape($user_id);
159
160         db_query($sql, "could not update last visit date for user $user_id");
161 }
162
163 //-----------------------------------------------------------------------------------------------
164 function check_user_activity($id) 
165 {
166         $sql = "SELECT COUNT(*) FROM ".TB_PREF."audit_trail WHERE audit_trail.user="
167                 . db_escape($id);
168         $result = db_query($sql,"Cant check user activity");
169         $ret = db_fetch($result);
170
171         return $ret[0];
172 }
173
174 //-----------------------------------------------------------------------------------------------
175 function show_users_online()
176 {
177         global $show_users_online, $db, $GetText;
178         
179         if (!isset($show_users_online) || $show_users_online == 0 || !defined('TB_PREF') || 
180                 !isset($GetText) || !isset($db))
181                 return "";
182         $result = db_query("SHOW TABLES LIKE '".TB_PREF."useronline'"); 
183         if (db_num_rows($result) == 1)
184         {
185                 $timeoutseconds = 120;
186
187                 $timestamp=time();
188                 $timeout=$timestamp-$timeoutseconds;
189                 /*
190                 This will find out if user is from behind proxy server. 
191                 In that case, the script would count them all as 1 user.
192                 This function tryes to get real IP address.
193                 */
194                 if (isset($_SERVER['HTTP_CLIENT_IP'])) {
195                         $ip = $_SERVER['HTTP_CLIENT_IP'];
196                 }
197                 elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
198                         $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
199                 }
200                 elseif (isset($_SERVER['HTTP_X_FORWARDED'])) {
201                         $ip = $_SERVER['HTTP_X_FORWARDED'];
202                 }
203                 elseif (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
204                         $ip = $_SERVER['HTTP_FORWARDED_FOR'];
205                 }
206                 elseif (isset($_SERVER['HTTP_FORWARDED'])) {
207                         $ip = $_SERVER['HTTP_FORWARDED'];
208                 }
209                 else {
210                         $ip = $_SERVER['REMOTE_ADDR'];
211                 }
212
213                 // Add user to database
214                 db_query("INSERT INTO ".TB_PREF."useronline (timestamp, ip, file) VALUES ('". $timestamp ."',". db_escape($ip) .",". db_escape($_SERVER['PHP_SELF']) .")");
215                 //Remove users that were not online within $timeoutseconds.
216                 db_query("DELETE FROM ".TB_PREF."useronline WHERE timestamp<". $timeout);
217
218                 // Select online users
219                 $result = db_query("SELECT DISTINCT ip FROM ".TB_PREF."useronline");
220                 $users = db_num_rows($result);
221         }
222         else
223                 $users = 1;
224         return "$users ".($users == 1 ? _("user online") : _("users online"));
225
226 }
227 ?>