00001 <?php
00002 # This file is part of the Savane project
00003 # <http://gna.org/projects/savane/>
00004 #
00005 # $Id: user.php 5359 2006-02-14 08:47:46Z toddy $
00006 #
00007 # Copyright 1999-2000 (c) The SourceForge Crew
00008 # Copyright 2000-2003 (c) Free Software Foundation
00009 #
00010 # Copyright 2004 (c) Mathieu Roy <yeupou--gnu.org>
00011 #
00012 # The Savane project is free software; you can redistribute it and/or
00013 # modify it under the terms of the GNU General Public License
00014 # as published by the Free Software Foundation; either version 2
00015 # of the License, or (at your option) any later version.
00016 #
00017 # The Savane project is distributed in the hope that it will be useful,
00018 # but WITHOUT ANY WARRANTY; without even the implied warranty of
00019 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00020 # GNU General Public License for more details.
00021 #
00022 # You should have received a copy of the GNU General Public License
00023 # along with the Savane project; if not, write to the Free Software
00024 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
00025
00026
00027 unset($USER_IS_SUPER_USER);
00028 $USER_RES=array();
00029
00030 function user_isloggedin()
00031 {
00032 global $G_USER;
00033 if ($G_USER['user_id'])
00034 {
00035 return true;
00036 }
00037 else
00038 {
00039 return false;
00040 }
00041 }
00042
00043 function user_can_be_super_user()
00044 {
00045 global $USER_IS_SUPER_USER;
00046
00047
00048
00049
00050 if (isset($USER_IS_SUPER_USER))
00051 {
00052 return $USER_IS_SUPER_USER;
00053 }
00054 else
00055 {
00056 if (user_isloggedin())
00057 {
00058 $sql="SELECT * FROM user_group WHERE user_id='". user_getid() ."' AND group_id='".$GLOBALS[sys_group_id]."' AND admin_flags='A'";
00059 $result=db_query($sql);
00060 if (!$result || db_numrows($result) < 1)
00061 {
00062 $USER_IS_SUPER_USER=false;
00063 return $USER_IS_SUPER_USER;
00064 }
00065 else
00066 {
00067 #matching row was found - set and save this knowledge for later
00068 $USER_IS_SUPER_USER=true;
00069 return $USER_IS_SUPER_USER;
00070 }
00071 }
00072 else
00073 {
00074 $USER_IS_SUPER_USER=false;
00075 return $USER_IS_SUPER_USER;
00076 }
00077 }
00078 }
00079
00080
00081 function user_is_super_user()
00082 {
00083 # User is superuser only if he wants to, otherwise he's going to see
00084 # things like any other user + a link in the left menu
00085 if (user_can_be_super_user() &&
00086 $_COOKIE["session_su"] == "wannabe")
00087 {
00088 return true;
00089 }
00090
00091 return false;
00092 }
00093
00094 function user_ismember($group_id,$type=0)
00095 {
00096 return member_check(0, $group_id, $type);
00097 }
00098
00099 # Check the user role in a project - deprecated
00100 function user_check_ismember($user_id, $group_id, $type=0)
00101 {
00102 return member_check($user_id, $group_id, $type);
00103 }
00104
00105 # Get the groups to which a user belongs
00106 function user_groups($uid)
00107 {
00108 $sql="SELECT * FROM user_group WHERE user_id='$uid'";
00109 $result = db_query($sql);
00110 $arr=array();
00111 while ($val = db_fetch_array($result))
00112 {
00113 array_push($arr,$val[group_id]);
00114 };
00115 return $arr;
00116 }
00117
00118 # Get the email of a user
00119 function user_get_email($uid)
00120 {
00121 $sql="SELECT * FROM user WHERE user_id='$uid'";
00122 $result = db_query($sql);
00123 $val = db_fetch_array($result);
00124 return $val['email'];
00125 }
00126
00127 # Check if a user belongs to a group - deprecated
00128 function user_is_group_member($uid, $gid)
00129 {
00130 return user_check_ismember($uid, $gid);
00131 }
00132
00133 # Check if a user belongs to a group and is pending - deprecated
00134 # Return value: The whole row of user_group
00135 function user_is_group_pending($uid, $gid)
00136 {
00137 return member_check_is_pending($user_id, $group_id);
00138 }
00139
00140 # Approve a pending user for a group - deprecated
00141 function user_approve_for_group($uid, $gid)
00142 {
00143 return member_approve($uid, $gid);
00144 }
00145
00146 # Add or update a user to/in a group - deprecated
00147 function user_add_to_group($uid, $gid, $admin_flags, $bug_flags,$forum_flags, $project_flags, $patch_flags, $support_flags, $doc_flags)
00148 {
00149
00150 return member_add($uid, $gid);
00151 }
00152
00153 # Remove a user from a group - deprecated
00154 function user_remove_from_group($uid, $gid)
00155 {
00156 return member_remove($uid, $gid);
00157 }
00158
00159 function user_getname($user_id=0, $getrealname=0)
00160 {
00161 global $G_USER,$USER_NAMES;
00162
00163 if (!$user_id && $getrealname != 0)
00164 {
00165 $user_id = user_getid();
00166 }
00167
00168 # use current user if one is not passed in
00169 if (!$user_id && $getrealname == 0)
00170 {
00171 return ($G_USER?$G_USER['user_name']:"NA");
00172 }
00173 else
00174 {
00175 if ($user_id == 0) {
00176 if ($getrealname == 0) { return ("NA"); }
00177 else { return ("anonymous"); }
00178 }
00179
00180 # else must lookup name
00181 if ($USER_NAMES["user_$user_id"] && $getrealname == 0)
00182 {
00183 #user name was fetched previously
00184 return $USER_NAMES["user_$user_id"];
00185 }
00186 elseif ($USER_NAMES["realname_$user_id"] && $getrealname != 0)
00187 {
00188 #user name was fetched previously
00189 return $USER_NAMES["realname_$user_id"];
00190 }
00191 else
00192 {
00193 #fetch the user name and store it for future reference
00194 $result = db_query("SELECT user_id,user_name,realname FROM user WHERE user_id='$user_id'");
00195 if ($result && db_numrows($result) > 0)
00196 {
00197 if ($getrealname == 0)
00198 {
00199 #valid user - store and return
00200 $USER_NAMES["user_$user_id"]=db_result($result,0,"user_name");
00201 return $USER_NAMES["user_$user_id"];
00202 }
00203 else
00204 {
00205 #valid user - store and return
00206 $USER_NAMES["realname_$user_id"]=db_result($result,0,"realname");
00207 return $USER_NAMES["realname_$user_id"];
00208
00209 }
00210 }
00211 else
00212 {
00213 if ($getrealname == 0)
00214 {
00215 #invalid user - store and return
00216 $USER_NAMES["user_$user_id"]="<strong>Invalid User ID</strong>";
00217 return $USER_NAMES["user_$user_id"];
00218 }
00219 else
00220 {
00221 #invalid user - store and return
00222 $USER_NAMES["realname_$user_id"]="<strong>Invalid User ID</strong>";
00223 return $USER_NAMES["realname_$user_id"];
00224 }
00225 }
00226 }
00227 }
00228 }
00229
00230
00231 function user_getid($username=0)
00232 {
00233 if (!$username)
00234 {
00235 # No username, return info for the current user
00236 global $G_USER;
00237 return ($G_USER?$G_USER['user_id']:0);
00238 }
00239 else
00240 {
00241 $result = db_query("SELECT user_id FROM user WHERE user_name='$username'");
00242 return db_result($result,0,"user_id");
00243 }
00244 }
00245
00246 function user_exists($user_id)
00247 {
00248 $result = user_get_result_set($user_id);
00249 if ($result && db_numrows($result) > 0) {
00250 return 1;
00251 } else {
00252 return 0;
00253 }
00254 }
00255
00256 #quick hack - this entire library needs a rewrite similar to groups library
00257 # yeupou@gnu.org Please no! rewrite both the library and this one, and
00258 # please avoid object things without discussing about it on savannah-dev
00259 function user_getrealname($user_id=0, $rfc822_compliant=0)
00260 {
00261 $ret = user_getname($user_id, 1);
00262 # rfc822 requires some characters to be escaped. We usually care about this
00263 # compliance only in email headers.
00264 if ($rfc822_compliant && ereg("\.|\,|\@|\/|\\|\||\;|\!", $ret))
00265 { $ret = "\"$ret\""; }
00266 return $ret;
00267 }
00268
00269 function user_getemail($user_id)
00270 {
00271 $result = user_get_result_set($user_id);
00272 if ($result && db_numrows($result) > 0)
00273 {
00274 return db_result($result,0,"email");
00275 }
00276 else
00277 {
00278 return false;
00279 }
00280 }
00281
00282 function user_get_result_set($user_id)
00283 {
00284 #create a common set of user result sets,
00285 #so it doesn't have to be fetched each time
00286
00287 global $USER_RES;
00288 if (!$USER_RES["_".$user_id."_"])
00289 {
00290 $USER_RES["_".$user_id."_"]=db_query("SELECT * FROM user WHERE user_id='$user_id'");
00291 return $USER_RES["_".$user_id."_"];
00292 }
00293 else
00294 {
00295 return $USER_RES["_".$user_id."_"];
00296 }
00297 }
00298
00299 function user_get_result_set_from_unix($user_name)
00300 {
00301 #create a common set of user result sets,
00302 #so it doesn't have to be fetched each time
00303
00304 global $USER_RES;
00305 $res = db_query("SELECT * FROM user WHERE user_name='$user_name'");
00306 $user_id = db_result($res,0,'user_id');
00307 $USER_RES["_".$user_id."_"] = $res;
00308 return $USER_RES["_".$user_id."_"];
00309 }
00310
00311 function user_get_timezone()
00312 {
00313 if (user_isloggedin())
00314 {
00315 $result=user_get_result_set(user_getid());
00316 return db_result($result,0,'timezone');
00317 }
00318 else
00319 {
00320 return '';
00321 }
00322 }
00323
00324 function user_set_preference ($preference_name,$value)
00325 {
00326 global $user_pref;
00327 if (user_isloggedin()) {
00328 $preference_name=strtolower(trim($preference_name));
00329 $result=db_query("UPDATE user_preferences SET preference_value='$value' ".
00330 "WHERE user_id='".user_getid()."' AND preference_name='$preference_name'");
00331 if (db_affected_rows($result) < 1) {
00332 $result=db_query("INSERT INTO user_preferences (user_id,preference_name,preference_value) ".
00333 "VALUES ('".user_getid()."','$preference_name','$value')");
00334 }
00335
00336 # Update the Preference cache if it was setup by a user_get_preference
00337 if (isset($user_pref))
00338 { $user_pref[$preference_name] = $value; }
00339
00340 return true;
00341
00342 } else {
00343 return false;
00344 }
00345 }
00346 function user_unset_preference ($preference_name)
00347 {
00348 global $user_pref;
00349 if (user_isloggedin()) {
00350 $preference_name=strtolower(trim($preference_name));
00351 $result=db_query("DELETE FROM user_preferences WHERE user_id='".user_getid()."' AND preference_name='$preference_name' LIMIT 1");
00352
00353 # Update the Preference cache if it was setup by a user_get_preference
00354 if (isset($user_pref))
00355 { unset($user_pref[$preference_name]); }
00356
00357 dbg("Remove pref $preference_name");
00358 return true;
00359 }
00360 }
00361
00362
00363
00364
00365 function user_get_preference ($preference_name, $user_id=false)
00366 {
00367 global $user_pref;
00368
00369 if ($user_id)
00370 {
00371 # looking for information without being the user
00372 return db_result(db_query("SELECT preference_value FROM user_preferences ".
00373 "WHERE user_id='$user_id' AND preference_name='$preference_name'"),0,'preference_value');
00374
00375 }
00376
00377 if (user_isloggedin())
00378 {
00379 $preference_name=strtolower(trim($preference_name));
00380
00381 # First check to see if we have already fetched the preferences
00382 if ($user_pref) {
00383 if ($user_pref["$preference_name"]) {
00384 #we have fetched prefs - return part of array
00385 return $user_pref["$preference_name"];
00386 } else {
00387 #we have fetched prefs, but this pref hasn't been set
00388 return false;
00389 }
00390 } else {
00391 #we haven't returned prefs - go to the db
00392 $result=db_query("SELECT preference_name,preference_value FROM user_preferences ".
00393 "WHERE user_id='".user_getid()."'");
00394 if (db_numrows($result) < 1) {
00395 return false;
00396 } else {
00397 #iterate and put the results into an array
00398 for ($i=0; $i<db_numrows($result); $i++) {
00399 $user_pref[db_result($result,$i,'preference_name')]=db_result($result,$i,'preference_value');
00400 }
00401 if (isset($user_pref["$preference_name"])) {
00402 #we have fetched prefs - return part of array
00403 return $user_pref["$preference_name"];
00404 } else {
00405 #we have fetched prefs, but this pref hasn't been set
00406 return false;
00407 }
00408 }
00409 }
00410 } else {
00411 return false;
00412 }
00413 }
00414
00415 # Find out if the user use the vote, very similar to
00416 # trackers_votes_user_remains_count
00417 function user_use_votes ($user_id=false)
00418 {
00419 if (!$user_id)
00420 { $user_id = user_getid(); }
00421
00422 $sql = "SELECT vote_id FROM user_votes WHERE user_id='$user_id'";
00423 $result = db_query($sql);
00424 if (db_numrows($result) > 0)
00425 {
00426 return true;
00427 }
00428 return false;
00429 }
00430
00441 function user_guess ()
00442 {
00443 # $group_id should have been sanitized already
00444 global $group_id;
00445
00446 # Not logged in?
00447 if (!user_isloggedin())
00448 {
00449 define(AUDIENCE, "anonymous");
00450 return true;
00451 }
00452
00453 # On a non-group page?
00454 if (!$group_id)
00455 {
00456 define(AUDIENCE, "loggedin");
00457 return true;
00458 }
00459
00460 # On a group page without being member of the group?
00461 if (!member_check(0, $group_id))
00462 {
00463 define(AUDIENCE, "loggedin");
00464 return true;
00465 }
00466
00467 # Being member
00468 define(AUDIENCE, "members");
00469 return true;
00470
00471 }
00472
00473 ?>