5 * Class to interact with the system
8 * @author Christian Bayle
11 * This file is part of GForge.
13 * GForge is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
18 * GForge is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with GForge; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 require_once $gfcommon.'include/System.class.php';
29 class pgsql extends System {
35 * Value to add to unix_uid to get unix uid
37 * @var constant $UID_ADD
42 * Value to add to group_id to get unix gid
44 * @var constant $GID_ADD
49 * Value to add to unix gid to get unix uid of anoncvs special user
51 * @var constant $SCM_UID_ADD
53 var $SCM_UID_ADD = 50000;
56 * pgsql() - CONSTRUCTOR
65 * User management functions
69 * sysCheckUser() - Check for the existence of a user
71 * @param int The user ID of the user to check
72 * @returns true on success/false on error
75 function sysCheckUser($user_id) {
76 $user =& user_get_object($user_id);
84 * sysCreateUser() - Create a user
86 * @param int The user ID of the user to create
87 * @returns The return status
90 function sysCreateUser($user_id) {
91 $user = &user_get_object($user_id);
95 $res=db_query("UPDATE users SET
96 unix_uid=user_id+".$this->UID_ADD.",
97 unix_gid=user_id+".$this->UID_ADD.",
99 WHERE user_id=$user_id");
101 $this->setError('ERROR - Could Not Update User UID/GID: '.db_error());
104 $query="DELETE FROM nss_usergroups WHERE user_id=$user_id";
105 $res1=db_query($query);
107 $this->setError('ERROR - Could Not Delete Group Member(s): '.db_error());
110 // This is group used for user, not a real project
111 $query="DELETE FROM nss_groups WHERE name IN
112 (SELECT user_name FROM users WHERE user_id=$user_id)";
113 $res2=db_query($query);
115 $this->setError('ERROR - Could Not Delete Group GID: '.db_error());
118 $query="INSERT INTO nss_groups
119 (user_id, group_id,name, gid)
120 SELECT user_id, 0, user_name, unix_gid
121 FROM users WHERE user_id=$user_id";
122 $res3=db_query($query);
124 $this->setError('ERROR - Could Not Update Group GID: '.db_error());
127 $query="INSERT INTO nss_usergroups (
129 users.unix_uid AS uid,
130 groups.group_id + ".$this->GID_ADD." AS gid,
131 users.user_id AS user_id,
132 groups.group_id AS group_id,
133 users.user_name AS user_name,
134 groups.unix_group_name AS unix_group_name
135 FROM users,groups,user_group
137 users.user_id=user_group.user_id
139 groups.group_id=user_group.group_id
141 users.user_id=$user_id
145 users.unix_status='A'
150 users.unix_uid AS uid,
151 groups.group_id + ".$this->SCM_UID_ADD." AS gid,
152 users.user_id AS user_id,
153 groups.group_id AS group_id,
154 users.user_name AS user_name,
155 'scm_' || groups.unix_group_name AS unix_group_name
156 FROM users,groups,user_group
158 users.user_id=user_group.user_id
160 groups.group_id=user_group.group_id
162 users.user_id=$user_id
166 users.unix_status='A'
170 user_group.cvs_flags > 0)
172 $res4=db_query($query);
174 $this->setError('ERROR - Could Not Update Group Member(s): '.db_error());
183 * sysCheckCreateUser() - Check that a user has been created
185 * @param int The ID of the user to check
186 * @returns true on success/false on error
189 function sysCheckCreateUser($user_id) {
190 return $this->sysCreateUser($user_id);
194 * sysCheckCreateGroup() - Check that a group has been created
196 * @param int The ID of the user to check
197 * @returns true on success/false on error
200 function sysCheckCreateGroup($user_id) {
201 return $this->sysCreateGroup($user_id);
205 * sysRemoveUser() - Remove a user
207 * @param int The user ID of the user to remove
208 * @returns true on success/false on failure
211 function sysRemoveUser($user_id) {
212 $res=db_query("UPDATE users SET unix_status='N' WHERE user_id=$user_id");
214 $this->setError('ERROR - Could Not Update User Unix Status: '.db_error());
217 $query="DELETE FROM nss_usergroups WHERE user_id=$user_id";
218 $res1=db_query($query);
220 $this->setError('ERROR - Could Not Delete Group Member(s): '.db_error());
223 // This is group used for user, not a real project
224 $query="DELETE FROM nss_groups WHERE name IN
225 (SELECT user_name FROM users WHERE user_id=$user_id)";
226 $res2=db_query($query);
228 $this->setError('ERROR - Could Not Delete Group GID: '.db_error());
236 * sysUserSetAttribute() - Set an attribute for a user
238 * @param int The user ID
239 * @param string The attribute to set
240 * @param string The new value of the attribute
241 * @returns true on success/false on error
244 function sysUserSetAttribute($user_id,$attr,$value) {
249 * Group management functions
253 * sysCheckGroup() - Check for the existence of a group
255 * @param int The ID of the group to check
256 * @returns true on success/false on error
259 function sysCheckGroup($group_id) {
260 $group =& group_get_object($group_id);
264 $query="SELECT group_id FROM nss_groups WHERE group_id=$group_id";
265 $res=db_query($query);
266 if (db_numrows($res) == 0){
275 * sysCreateGroup() - Create a group
277 * @param int The ID of the group to create
278 * @returns true on success/false on error
281 function sysCreateGroup($group_id) {
282 $group = &group_get_object($group_id);
286 $query="DELETE FROM nss_usergroups WHERE group_id=$group_id";
287 $res1=db_query($query);
289 $this->setError('ERROR - Could Not Delete Group Member(s): '.db_error());
292 $query="DELETE FROM nss_groups WHERE group_id=$group_id";
293 $res3=db_query($query);
295 $this->setError('ERROR - Could Not Delete Group GID: '.db_error());
298 $query="INSERT INTO nss_groups
299 (user_id, group_id, name, gid)
300 SELECT 0, group_id, unix_group_name, group_id +".$this->GID_ADD."
302 WHERE group_id=$group_id
304 $res4=db_query($query);
306 $this->setError('ERROR - Could Not Insert Group GID: '.db_error());
309 $query="INSERT INTO nss_groups
310 (user_id, group_id, name, gid)
311 SELECT 0, group_id, 'scm_' || unix_group_name, group_id +".$this->SCM_UID_ADD."
313 WHERE group_id=$group_id
315 $res5=db_query($query);
317 $this->setError('ERROR - Could Not Insert SCM Group GID: '.db_error());
320 $query="INSERT INTO nss_usergroups (
322 users.unix_uid AS uid,
323 groups.group_id + ".$this->GID_ADD." AS gid,
324 users.user_id AS user_id,
325 groups.group_id AS group_id,
326 users.user_name AS user_name,
327 groups.unix_group_name AS unix_group_name
328 FROM users,groups,user_group
330 users.user_id=user_group.user_id
332 groups.group_id=user_group.group_id
334 groups.group_id=$group_id
338 users.unix_status='A'
343 users.unix_uid AS uid,
344 groups.group_id + ".$this->SCM_UID_ADD." AS gid,
345 users.user_id AS user_id,
346 groups.group_id AS group_id,
347 users.user_name AS user_name,
348 'scm_' || groups.unix_group_name AS unix_group_name
349 FROM users,groups,user_group
351 groups.group_id=user_group.group_id
353 users.user_id=user_group.user_id
355 groups.group_id=$group_id
359 users.unix_status='A'
363 user_group.cvs_flags > 0);
365 $res6=db_query($query);
367 $this->setError('ERROR - Could Not Update Group Member(s): '.db_error());
375 * sysRemoveGroup() - Remove a group
377 * @param int The ID of the group to remove
378 * @returns true on success/false on error
381 function sysRemoveGroup($group_id) {
382 $query="DELETE FROM nss_usergroups WHERE group_id=$group_id";
383 //echo "<h2>SYS::sysRemoveGroup: $query</h2>";
384 $res1=db_query($query);
386 $this->setError('ERROR - Could Not Delete Group Member(s): '.db_error());
389 $query="DELETE FROM nss_groups WHERE group_id=$group_id ";
390 //echo "<h2>SYS::sysRemoveGroup: $query</h2>";
391 $res3=db_query($query);
393 $this->setError('ERROR - Could Not Delete Group GID: '.db_error());
400 * sysGroupAddUser() - Add a user to a group
402 * @param int The ID of the group two which the user will be added
403 * @param int The ID of the user to add
404 * @param bool Only add this user to CVS
405 * @returns true on success/false on error
408 function sysGroupAddUser($group_id,$user_id,$cvs_only=0) {
410 $query="DELETE FROM nss_usergroups WHERE user_id=$user_id AND group_id=$group_id
411 AND unix_group_name LIKE 'scm_%'";
413 $query="DELETE FROM nss_usergroups WHERE user_id=$user_id AND group_id=$group_id";
415 //echo "<h2>SYS::sysGroupAddUser DELETE: $query</h2>";
416 $res0=db_query($query);
418 $this->setError('ERROR - Could Not Delete Group Member(s): '.db_error());
421 $query="INSERT INTO nss_usergroups (
423 users.unix_uid AS uid,
424 groups.group_id + ".$this->SCM_UID_ADD." AS gid,
425 users.user_id AS user_id,
426 groups.group_id AS group_id,
427 users.user_name AS user_name,
428 'scm_' || groups.unix_group_name AS unix_group_name
429 FROM users,groups,user_group
431 users.user_id=user_group.user_id
433 groups.group_id=user_group.group_id
435 users.user_id=$user_id
437 groups.group_id=$group_id
441 users.unix_status='A'
445 user_group.cvs_flags > 0) ";
446 //echo "<h2>SYS::sysGroupAddUser ADDCVS: $query</h2>";
447 $res1=db_query($query);
449 $this->setError('ERROR - Could Not Add SCM Member(s): '.db_error());
457 $query="INSERT INTO nss_usergroups (
459 users.unix_uid AS uid,
460 groups.group_id + ".$this->GID_ADD." AS gid,
461 users.user_id AS user_id,
462 groups.group_id AS group_id,
463 users.user_name AS user_name,
464 groups.unix_group_name AS unix_group_name
465 FROM users,groups,user_group
467 users.user_id=user_group.user_id
469 groups.group_id=user_group.group_id
471 users.user_id=$user_id
473 groups.group_id=$group_id
477 users.unix_status='A'
479 users.status = 'A') ";
480 //echo "<h2>SYS::sysGroupAddUser ADDSYS: $query</h2>";
481 $res2=db_query($query);
483 $this->setError('ERROR - Could Not Add Shell Group Member(s): '.db_error());
491 * sysGroupRemoveUser() - Remove a user from a group
493 * @param int The ID of the group from which to remove the user
494 * @param int The ID of the user to remove
495 * @param bool Only remove user from CVS group
496 * @returns true on success/false on error
499 function sysGroupRemoveUser($group_id,$user_id,$cvs_only=0) {
501 $query="DELETE FROM nss_usergroups WHERE group_id=$group_id AND user_id=$user_id
502 AND unix_group_name LIKE 'scm_%'";
504 $query="DELETE FROM nss_usergroups WHERE group_id=$group_id AND user_id=$user_id";
506 //echo "<h2>SYS::sysGroupRemoveUser REM: $query</h2>";
507 $res1=db_query($query);
509 $this->setError('ERROR - Could Not Delete Group Member(s): '.db_error());
518 // c-file-style: "bsd"