19f4c71edac1bf7f2c34eb3f22e7ffcc78932414
[gwvp.git] / gwvplib / gwvpuseradmin.php
1 <?php
2
3 // setup the call me function for useradmin - matches on url of admin/users
4 $CALL_ME_FUNCTIONS["useradmin"] = "gwvp_UserAdminCallMe";
5
6 $MENU_ITEMS["10users"]["text"] = "Users/Groups";
7 $MENU_ITEMS["10users"]["link"] = "$BASE_URL/admin/users";
8
9
10 function gwvp_UserAdminCallMe()
11 {
12         if(isset($_REQUEST["q"])) {
13                 $query = $_REQUEST["q"];
14                 $qspl = explode("/", $query);
15                 if(isset($qspl[0]) && isset($qspl[1])) {
16                         if($qspl[0] == "admin" && $qspl[1] == "users") {
17                                 if(isset($qspl[2])) {
18                                         switch($qspl[2]) {
19                                                 case "adduser":
20                                                         return "gwvp_AddUserPage";
21                                                         break;
22                                                 case "groupmember":
23                                                         return "gwvp_groupMemberChange";
24                                                         break;
25                                                 case "addgroup":
26                                                         return "gwvp_AddGroupPage";
27                                                         break;
28                                                 case "modify":
29                                                         return "gwvp_ModifyUserPage";
30                                                         break;
31                                                 case "modifygroup":
32                                                         return "gwvp_ModifyGroupPage";
33                                                         break;
34                                                 default:
35                                                         return "gwvp_UserAdminPage";
36                                         }                                       
37                                 } else {
38                                         return "gwvp_UserAdminPage";
39                                 }
40                         }
41                 } 
42                 else return false;
43         }
44         
45         return false;
46 }
47
48 function gwvp_AddUserPage()
49 {
50         global $BASE_URL;
51         
52         $email = $_REQUEST["email"];
53         $fullname = $_REQUEST["fullname"];
54         $pass1 = $_REQUEST["pass1"];
55         $pass2 = $_REQUEST["pass2"];
56         $username = $_REQUEST["username"];
57         $desc = $_REQUEST["desc"];
58         
59         // now for some validation
60         $sendback = false;
61         $message = "";
62         if(!gwvp_checkEmail($email)) {
63                 $sendback = true;
64                 $message .= "EMail address invalid. ";
65         }
66         
67         // function gwvp_getUser($username=null, $email=null, $id=null)
68         if(gwvp_getUser(null, $email, null)!=null) {
69                 $staremail = true;
70                 $sendback = true;
71                 $message .= "EMail address already registered. ";
72         }
73         
74         if(gwvp_getUser($username)!= null) {
75                 $starusername = true;
76                 $sendback = true;
77                 $message .= "Username already exists. ";
78         }
79         
80         if($pass1 != $pass2) {
81                 $starpass = true;
82                 $sendback = true;
83                 $message .= "Passwords dont match. ";
84         }
85         
86         // otherwise, its all good, proceed with user creation
87         if($sendback) {
88                 $_SESSION["sendback_owner"] = "users";
89                 $sb["email"] = $email;
90                 if($staremail) $sb["emailstar"] = true;
91                 $sb["fullname"] = $fullname;
92                 $sb["username"] = $username;
93                 if($starusername) $sb["usernamestar"] = true;
94                 $sb["desc"] = $desc;
95                 if($starpass) $sb["passwordstar"] = true;
96                 
97                 $_SESSION["sendback"] = true;
98                 $_SESSION["sendback_data"] = base64_encode(serialize($sb));
99                 gwvp_SendMessage("error", "$message");
100                 header("Location: $BASE_URL/admin/users");
101                 return;
102         }
103         
104         // TODO: we need to do alot of checking here - that can come later
105         if(gwvp_createUser($email, $fullname, $pass1, $username, $desc, 0)) {
106                 gwvp_SendMessage("info", "user $username, $fullname ($email) created");
107                 header("Location: $BASE_URL/admin/users");
108                 return;
109         } else {
110                 gwvp_SendMessage("error", "error creating user for some unknown reason");
111                 header("Location: $BASE_URL/admin/users");
112                 return;
113         }
114
115         
116         /*
117                 echo "<tr><td>EMail</td><td><input type=\"text\" name=\"email\"></td>";
118                 echo "<td>Full Name</td><td><input type=\"text\" name=\"fullname\"></td></tr>";
119                 echo "<tr><td>Password</td><td><input type=\"text\" name=\"pass1\"></td>";
120                 echo "<td>Password Confirm</td><td><input type=\"text\" name=\"pass2\"></td></tr>";
121                 echo "<tr><td>Username</td><td><input type=\"text\" name=\"username\"></td>";
122                 echo "<td>Description</td><td><input type=\"text\" name=\"desc\"></td></tr>";
123                 */
124         
125 }
126
127 function gwvp_AddGroupPage()
128 {
129         /*
130          *              echo "<tr><td>Group Name</td><td><input type=\"text\" name=\"groupname\"><td></tr>";
131                 echo "<tr><td>Admin Group?</td><td><input type=\"checkbox\" name=\"admingroup\" class=\"mycheckbox\"></td></tr>";
132                 echo "<tr><td>Owner</td><td><div><select class=\"myselect\" name=\"groupowner\">";
133
134          */
135         global $BASE_URL;
136         
137         /*
138          *                              $presetname = " value=\"".$data["groupname"]."\"";
139                                 $presetdesc = " value=\"".$data["groupdesc"]."\"";
140                                 $presetgroupadmin = " ".$data["admingroup"]."\"";
141                                 $presetowner = " value=\"".$data["groupowner"]."\"";
142
143          */
144         
145         $gname = $_REQUEST["groupname"];
146         $isadmin = isset($_REQUEST["admingroup"]);
147         $gdesc = $_REQUEST["groupdesc"];
148         $owner = $_REQUEST["groupowner"];
149         
150         //gwvp_getGroup($gid = null, $gname = null)
151         if($isadmin) error_log("admin true");
152         else error_log("admin not true");
153         
154         if(gwvp_getGroup(null, $gname)) {
155                 $_SESSION["sendback_owner"] = "groups";
156                 $_SESSION["sendback"] = true;
157                 
158                 $data["groupname"] = $gname;
159                 $data["groupdesc"] = $gdesc;
160                 $data["groupowner"] = $owner;
161                 if($isadmin) $data["admingroup"] = "checked";
162                 //else $data["admingroup"] = "";
163                 $data["groupnamestar"] = true;
164                 
165                 gwvp_SendMessage("error", "Group name in use");
166                 
167                 $_SESSION["sendback_data"] = base64_encode(serialize($data));
168                 
169                 header("Location: $BASE_URL/admin/users");
170                 return;
171         }
172         
173         // gwvp_createGroup($group_name, $is_admin, $owner_id)
174         gwvp_createGroup("$gname", $gdesc, $isadmin, $owner);
175         // we also need to add the owner to the group
176         gwvp_addGroupMember(gwvp_getUserName($owner), $gname);
177         
178         
179         header("Location: $BASE_URL/admin/users");
180         return;
181         
182 }
183
184 function gwvp_UserAdminPage()
185 {
186         gwvp_goMainPage("gwvp_UserAdminPageBody");
187 }
188
189 function gwvp_ModifyUserPage()
190 {
191         gwvp_goMainPage("gwvp_ModifyUserPageBody");
192 }
193
194 function gwvp_ModifyGroupPage()
195 {
196         gwvp_goMainPage("gwvp_ModifyGroupPageBody");
197 }
198
199 function gwvp_ModifyUserPageBody()
200 {
201         //error_log("modify user body - coming in");
202         if(!gwvp_CheckAuthLevel("admin")) {
203                 gwvp_AuthNoPermsBody();
204                 return;
205         }
206         
207         
208         $uid = -1;
209         if(isset($_REQUEST["q"])) {
210                 $query = $_REQUEST["q"];
211                 $qspl = explode("/", $query);
212                 $uid = $qspl[3];
213         }
214         
215         echo "modify user $uid";
216 }
217
218 function gwvp_groupMemberChange()
219 {
220         global $LOGIN_TYPE, $BASE_URL;
221         
222         $gid = -1;
223         
224         if(isset($_REQUEST["q"])) {
225                 $query = $_REQUEST["q"];
226                 $qspl = explode("/", $query);
227                 $gid = $qspl[3];
228         }
229         error_log("into groupmemberchange with $gid");
230         if($gid!= -1) {
231                 
232         }
233         
234         if(isset($_REQUEST["add"])) {
235                 error_log("$gid add set to ".$_REQUEST["add"]);
236                 // this is an add op
237                 if(isset($_REQUEST["membersout"])) {
238                         foreach($_REQUEST["membersout"] as $uid) {
239                                 error_log("would add $uid from $gid");
240                                 gwvp_addGroupMemberByID($uid, $gid);
241                                 
242                         }
243                 }
244         }
245         if(isset($_REQUEST["remove"])) {
246                 error_log("$gid remove set to ".$_REQUEST["remove"]);
247                 // this is a remove op
248                 if(isset($_REQUEST["membersin"])) {
249                         foreach($_REQUEST["membersin"] as $uid) {
250                                 error_log("would remote $uid from $gid");
251                                 gwvp_deleteGroupMemberByID($uid, $gid);
252                         }
253                 }
254         }
255         
256         error_log("redirect to $BASE_URL/admin/users/modifygroup/$gid");
257         header("Location: $BASE_URL/admin/users/modifygroup/$gid");
258         //gwvp_goMainPage("gwvp_ModifyGroupPageBody");
259         
260         return;
261 }
262
263 function gwvp_ModifyGroupPageBody()
264 {
265         global $LOGIN_TYPE, $BASE_URL;
266         
267         $gid = -1;
268         if(isset($_REQUEST["q"])) {
269                 $query = $_REQUEST["q"];
270                 $qspl = explode("/", $query);
271                 $gid = $qspl[3];
272         }
273         
274         $users = gwvp_getUsers();
275         
276         $ginfo = gwvp_getGroup($gid);
277         $groupname = $ginfo["name"];
278         $groupdesc = $ginfo["description"];
279         if($ginfo["isadmin"]) $admin = "checked";
280         else $admin = "";
281         
282         echo "<h2>Modify Group - $groupname</h2>";
283         echo "<form method=\"post\" action=\"$BASE_URL/admin/users/groupmodify/$gid\">";
284         echo "<table>";
285         echo "<tr><td>Description</td><td><input type=\"text\" name=\"groupdesc\" value=\"$groupdesc\"></td></tr>";
286         echo "<tr><td>Admin</td><td><input type=\"checkbox\" name=\"is_admin\" $admin></td></tr>";
287         echo "<tr><td><input type=\"submit\" name=\"change\" value=\"Change\"></td></tr>";
288         
289         echo "</table>";
290         echo "</form>";
291         
292         echo "<h3>Group Membership</h3>";
293         echo "<form method=\"post\" action=\"$BASE_URL/admin/users/groupmember/$gid\">";
294         echo "<table border=\"1\"><tr><th>Members</th><th></th><th>All Users</th></tr>";
295         
296         echo "<tr><td>";
297         
298         
299         // members
300         echo "<select name=\"membersin[]\" size=\"20\" multiple=\"true\">";
301         foreach($users as $u_users) {
302                 $uid = $u_users["id"];
303                 $email = $u_users["email"];
304                 $username = $u_users["username"];
305                 $fullname = $u_users["fullname"];
306                 if(gwvp_IsGroupMember($email, $groupname)) {
307                         echo "<option value=\"$uid\">$username, $fullname ($email)</option>";
308                 }
309                 
310
311         }
312         
313         echo "</select>";
314         
315         
316         echo "</td><td>";
317         
318         // move buttons
319         echo "<input type=\"submit\" name=\"add\" value=\"<<\"><br>";
320         echo "<input type=\"submit\" name=\"remove\" value=\">>\"><br>";
321
322         
323         
324         echo "</td><td>";
325         
326         
327         // all users
328         echo "<select name=\"membersout[]\" size=\"20\" multiple=\"true\">";
329         foreach($users as $u_users) {
330                 $uid = $u_users["id"];
331                 $email = $u_users["email"];
332                 $username = $u_users["username"];
333                 $fullname = $u_users["fullname"];
334                 if(!gwvp_IsGroupMember($email, $groupname)) {
335                         echo "<option value=\"$uid\">$username, $fullname ($email)</option>";
336                 }
337         }
338         echo "</select>";
339         
340         
341         
342         echo "</td></tr></table>";
343         echo "</form>";
344         
345         
346         
347         
348         
349         return;
350 }
351
352 function gwvp_UserAdminPageBody()
353 {
354         global $LOGIN_TYPE, $BASE_URL;
355         
356         $groups = gwvp_getGroups();
357         $users = gwvp_getUsers();
358         
359         echo "<h2>Users and Groups</h2>";
360         echo "On this page you can manage users, groups, group membership and update your profile<br>";
361         echo "<table>";
362         
363         echo "<tr><td colspan=\"2\"><hr></td></tr>";
364         
365         
366         // Header part of table
367         // user self-management bit
368         if($LOGIN_TYPE != "anon") {
369                 echo "<tr><td valign=\"top\"><h3>My Profile</h3></td><td><h3>My Groups</h3></td></tr>";
370                 
371                 echo "<tr>";
372                 // user profile bit
373                 echo "<td valign=\"top\">";
374                 echo "User profile bits go here";
375                 echo "</td>";
376                 
377                 // now the group bit for the user
378                 echo "<td valign=\"top\">";
379                 echo "User owned groups, and groups their a member of go here";
380                 echo "</td>";
381                 echo "</tr>";
382                 
383                 echo "<tr><td colspan=\"2\"><hr></td></tr>";
384         }
385         
386         // admin only bit
387         if($LOGIN_TYPE == "admin") {
388                 $data = null;
389                 
390                 $staremail = "";
391                 $starpass = "";
392                 $starusername = "";
393                 $presetemail = "";
394                 $presetfullname = "";
395                 $presetdesc = "";
396                 $presetusername = "";
397                 
398                 if(isset($_SESSION["sendback_owner"])) {
399                         if($_SESSION["sendback_owner"] == "users") {
400                                 /*
401                                  *              $sb["email"] = $email;
402                         if($staremail) $sb["emailstar"] = true;
403                         $sb["fullname"] = $fullname;
404                         $sb["username"] = $username;
405                         if($starusername) $sb["usernamestar"] = true;
406                         $sb["desc"] = $desc;
407                         if($starpass) $sb["passwordstar"] = true;
408         
409                                  */
410                                 $data = unserialize(base64_decode($_SESSION["sendback_data"]));
411                                 
412                                 $presetemail = " value=\"".$data["email"]."\"";
413                                 $presetfullname = " value=\"".$data["fullname"]."\"";
414                                 $presetusername = " value=\"".$data["username"]."\"";
415                                 $presetdesc = " value=\"".$data["desc"]."\"";
416                                 
417                                 if(isset($data["emailstar"])) $staremail = "<img src=\"$BASE_URL/images/star.jpg\">";
418                                 if(isset($data["usernamestar"])) $starusername = "<img src=\"$BASE_URL/images/star.jpg\">";
419                                 if(isset($data["passwordstar"])) $starpass = "<img src=\"$BASE_URL/images/star.jpg\">";
420                                 
421                                 unset($_SESSION["sendback"]);
422                                 unset($_SESSION["sendback_data"]);
423                                 unset($_SESSION["sendback_owner"]);
424                         }
425                 }
426                 
427                 echo "<tr><td valign=\"top\"><h3>Create User</h3></td><td><h3>Create Group</h3></td></tr>";
428                 
429                 // create user bit
430                 echo "<tr><td valign=\"top\">";
431                 
432                 echo "<form method=\"post\" action=\"$BASE_URL/admin/users/adduser\">";
433                 echo "<table>";
434                 echo "<tr><td>EMail</td><td><input type=\"text\" name=\"email\"$presetemail>$staremail</td>";
435                 echo "<td>Full Name</td><td><input type=\"text\" name=\"fullname\"$presetfullname></td></tr>";
436                 echo "<tr><td>Password</td><td><input type=\"text\" name=\"pass1\">$starpass</td>";
437                 echo "<td>Password Confirm</td><td><input type=\"text\" name=\"pass2\">$starpass</td></tr>";
438                 echo "<tr><td>Username</td><td><input type=\"text\" name=\"username\"$presetusername>$starusername</td>";
439                 echo "<td>Description</td><td><input type=\"text\" name=\"desc\"$presetdesc></td></tr>";
440                 echo "<tr><td><input type=\"submit\" name=\"Create\" value=\"Create\" class=\"buttons\"></td></tr>";
441                 echo "</table>";
442                 echo "</form>";
443                 
444                 echo "</td><td valign=\"top\">";
445                 
446                 $stargroupname = "";
447                 $presetname = "";
448                 $presetgroupadmin = "";
449                 $presetowner = -1;
450                 
451                 if(isset($_SESSION["sendback_owner"])) {
452                         if($_SESSION["sendback_owner"] == "groups") {
453                                 /*
454                                  *              $sb["email"] = $email;
455                         if($staremail) $sb["emailstar"] = true;
456                         $sb["fullname"] = $fullname;
457                         $sb["username"] = $username;
458                         if($starusername) $sb["usernamestar"] = true;
459                         $sb["desc"] = $desc;
460                         if($starpass) $sb["passwordstar"] = true;
461         
462                                  */
463                                 $data = unserialize(base64_decode($_SESSION["sendback_data"]));
464                                 
465                                 $presetname = " value=\"".$data["groupname"]."\"";
466                                 $presetdesc = " value=\"".$data["groupdesc"]."\"";
467                                 $presetgroupadmin = " ".$data["admingroup"];
468                                 $presetowner = $data["groupowner"];
469                                 
470                                 if(isset($data["groupnamestar"])) $stargroupname = "<img src=\"$BASE_URL/images/star.jpg\">";
471                                 
472                                 unset($_SESSION["sendback"]);
473                                 unset($_SESSION["sendback_data"]);
474                                 unset($_SESSION["sendback_owner"]);
475                         }
476                 }
477                 
478                 // Create group
479                 echo "<form method=\"post\" action=\"$BASE_URL/admin/users/addgroup\">";
480                 echo "<table>";
481                 echo "<tr><td>Group Name</td><td><input type=\"text\" name=\"groupname\"$presetname>$stargroupname<td></tr>";
482                 echo "<tr><td>Group Description</td><td><input type=\"text\" name=\"groupdesc\"$presetdesc><td></tr>";
483                 echo "<tr><td>Admin Group?</td><td><input type=\"checkbox\" name=\"admingroup\" class=\"mycheckbox\"$presetgroupadmin></td></tr>";
484                 echo "<tr><td>Owner</td><td><div><select class=\"myselect\" name=\"groupowner\">";
485                 foreach($users as $u_users) {
486                         $uid = $u_users["id"];
487                         $email = $u_users["email"];
488                         $username = $u_users["username"];
489                         $fullname = $u_users["fullname"];
490                         if($presetowner == $uid) {
491                                 echo "<option value=\"$uid\" selected>$username, $fullname ($email)</option>";
492                         } else {
493                                 echo "<option value=\"$uid\">$username, $fullname ($email)</option>";
494                         }
495                         
496                 }
497                 echo "</select></div></td></tr>";
498                 
499                 
500                 
501                 echo "<tr><td><input type=\"submit\" name=\"Create\" value=\"Create\" class=\"buttons\"></td></tr>";
502                 echo "</table>";
503                 echo "</form>";
504                 
505                 
506                 echo "</td></tr>";
507                 echo "<tr><td colspan=\"2\"><hr></td></tr>";
508         }
509         
510         
511         
512         // TODO: whats seen here will depend GREATLY on setting in config - need to fix this later
513         // user list
514         echo "<tr><td valign=\"top\"><h3>Users</h3></td><td><h3>Groups</h3></td></tr>";
515         
516         echo "<tr><td>";
517         echo "<table border=\"1\">";
518         switch($LOGIN_TYPE) {
519                 case "anon":
520                         echo "<tr><th>Username</th><th>Groups</th><th>Description</th></tr>";
521                         break;
522                 case "admin":
523                         echo "<tr><th>EMail</th><th>Username</th><th>Full Name</th><th>Groups</th><th>Description</th><th>Admin?</th><th>Status</th><th>Modify</th></tr>";
524                         break;
525                 case "user":
526                         echo "<tr><th>Username</th><th>Groups</th><th>Description</th></tr>";
527                         break;
528         }
529                 
530         /*
531          *              $returns[$rn]["id"] = $u_res["users_id"];
532                 $returns[$rn]["fullname"] = $u_res["user_full_name"];
533                 $returns[$rn]["password"] = $u_res["user_password"];
534                 $returns[$rn]["username"] = $u_res["user_username"];
535                 $returns[$rn]["email"] = $u_res["user_email"];
536                 $returns[$rn]["desc"] = $u_res["user_desc"];
537                 $returns[$rn]["status"] = $u_res["user_status"];
538
539          */
540         foreach($users as $u_users) {
541                 $userid = $u_users["id"];
542                 $email = $u_users["email"];
543                 $fullname = $u_users["fullname"];
544                 $username = $u_users["username"];
545                 $desc = $u_users["desc"];
546                 $status = $u_users["status"];
547                 if(gwvp_IsUserAdmin($email) == 1) {
548                         $globaladmin = "Yes";
549                 } else {
550                         $globaladmin = "No";
551                 }
552                 
553                 
554                 // TODO: sort out group prints here
555                 $ingroups = gwvp_getGroupsForUser($email);
556                 
557                 $ownedgroups = gwvp_getGroupsOwnedByUser($email);
558                 //echo "vardump: ";
559                 //var_dump($ownedgroups);
560                 $ugroups = "";
561                 if($ownedgroups == false) $ogroups = "-";
562                 else {
563                         foreach($ownedgroups as $gr_u) {
564                                 $ugroups .= "<font color=\"#3333ff\">$gr_u</font><br>";
565                         }
566                 }
567                 trim($ugroups);
568                 
569                 
570                 if($ingroups !== false) foreach($ingroups as $grname) {
571                         $isownedgroup = false;
572                         if($ownedgroups !== false) foreach($ownedgroups as $gr_u) {
573                                 if($grname == $gr_u) $isownedgroup = true;
574                         }
575                         if(!$isownedgroup) $ugroups .= "$grname<br>";
576                 }
577                 trim($ugroups);
578                 
579                 switch($LOGIN_TYPE) {
580                         case "anon":
581                                 echo "<tr><td>$username</td><td>$ugroups</td><td>$desc</td></tr>";
582                                 break;
583                         case "admin":
584                                 echo "<tr><td>$email</td><td>$username</td><td>$fullname</td><td>$ugroups</td><td>$desc</td>";
585                                 echo "<td>$globaladmin</td><td>$status</td><td><a href=\"$BASE_URL/admin/users/modify/$userid\">Modify</a></td></tr>";
586                                 break;
587                         case "user":
588                                 echo "<tr><td>$username</td><td>$ugroups</td><td>$desc</td></tr>";
589                                 break;
590                 }
591                 
592                 
593         }
594         echo "</table>";
595         
596         echo "</td><td valign=\"top\">";
597         
598         // group part of table
599         
600         echo "<table border=\"1\">";
601         
602         switch($LOGIN_TYPE) {
603                 case "anon":
604                         echo "<tr><th>Group Name</th><th>Owner</th></tr>";
605                         break;
606                 case "admin":
607                         echo "<tr><th>Group Name</th><th>Owner</th><th>Admin Group?</th><th>Modify</th></tr>";
608                         break;
609                 case "user":
610                         echo "<tr><th>Group Name</th><th>Owner</th><th>Admin Group?</th></tr>";
611                         break;
612         }
613         
614         foreach($groups as $u_groups) {
615                 /*
616                  *              $returns[$rn]["id"] = $u_res["groups_id"];
617                 $returns[$rn]["name"] = $u_res["groups_name"];
618                 if($u_res["groups_is_admin"]=="1") $return[$rn]["admin"] = true;
619                 else $return[$rn]["admin"] = false;
620                 $returns[$rn]["admin"] = $u_res["groups_is_admin"];
621                 $returns[$rn]["ownerid"] = $u_res["groups_owner_id"];
622
623                  */
624                 $gname = $u_groups["name"];
625                 $gid = $u_groups["id"];
626                 $owner = gwvp_getUserEmail($u_groups["ownerid"]);
627                 if($u_groups["admin"]) $gadmin = "Yes";
628                 else $gadmin  = "No";
629
630                 switch($LOGIN_TYPE) {
631                         case "anon":
632                                 echo "<tr><td>$gname</td><td>$owner</td></tr>";
633                                 break;
634                         case "admin":
635                                 echo "<tr><td>$gname</td><td>$owner</td><td>$gadmin</td><td><a href=\"$BASE_URL/admin/users/modifygroup/$gid\">Modify</a></td></tr>";
636                                 break;
637                         case "user":
638                                 echo "<tr><td>$gname</td><td>$owner</td><td>$gadmin</td></tr>";
639                                 break;
640                 }
641                 
642                 
643         }
644         echo "</table>";
645         echo "</td></tr></table>";
646 }
647
648
649 ?>