patUser also allows you to organize users into named collections or groups. You might remember, from the discussion of the patUser database schema in the previous segment of this article, that there are two tables designed specifically for this task, the "groups" table (which maintains a list of available groups) and the "usergroups" table (which maintains a list of which users belong to which group).
Here's the schema for the "groups" tables:
#
# Table structure for table 'groups'
#
CREATE TABLE groups (
gid int(11) NOT NULL auto_increment,
name varchar(50),
UNIQUE gid (gid)
);
Let's now add a couple of groups to the system,
INSERT INTO groups (gid, name) VALUES (1, 'Accounts');
INSERT INTO groups (gid, name) VALUES (2, 'Administration'); INSERT INTOgroups (gid, name) VALUES (3, 'Operations');
and verify that they have been added correctly via an SQL query:
mysql> SELECT * FROM groups;
+-----+----------------+| gid | name |+-----+----------------+| 1 | Accounts || 2 | Administration || 3 | Operations |+-----+----------------+3 rows in set (0.04 sec)
Obviously, we can perform the same task using patUser's getGroups() function, which works in much the same way as the getUsers() function discussed on the previous page. The following code listing demonstrates:
<?php
// include classes
include("../include/patDbc.php");
include("../include/patUser.php");
// initialize database layer
$db = new patMySqlDbc("localhost", "db211", "us111", "secret");
// initialize patUser
$u = new patUser(true);
// connect patUser to database
$u->setAuthDbc($db);
// set tables
$u->setAuthTable("users");
$u->setGroupTable("groups");
// get group list
$list = $u->getGroups(array("gid", "name"));
// uncomment this to see data structure
// print_r($list);
// print as list
echo "<h2>Groups</h2>";
echo "<ul>";
foreach ($list as $l)
{
echo "<li>" . $l['name'] . " (" . $l['gid'] . ")";
}
echo "</ul>";
?>
Here's the output:
Note the introduction of a new method in the script above, setGroupTable(). This method, together with the setGroupFields()method, allows you to configure patUser to use a different set of tables than its default by remapping the default table and column references to custom values.