1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-01 20:30:39 +02:00

Bit more flexibility on userclasses

This commit is contained in:
e107steved
2008-03-23 10:11:17 +00:00
parent 8a7ccb5975
commit d11cb307b3
4 changed files with 85 additions and 62 deletions

View File

@@ -11,8 +11,8 @@
| GNU General Public License (http://gnu.org). | GNU General Public License (http://gnu.org).
| |
| $Source: /cvs_backup/e107_0.8/e107_admin/userclass2.php,v $ | $Source: /cvs_backup/e107_0.8/e107_admin/userclass2.php,v $
| $Revision: 1.10 $ | $Revision: 1.11 $
| $Date: 2008-02-16 12:03:26 $ | $Date: 2008-03-23 10:11:09 $
| $Author: e107steved $ | $Author: e107steved $
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
@@ -348,7 +348,7 @@ switch ($action)
<tr> <tr>
<td class='forumheader3'>".UCSLAN_35."</td> <td class='forumheader3'>".UCSLAN_35."</td>
<td class='forumheader3'>"; <td class='forumheader3'>";
$text .= "<select name='userclass_parent' class='tbox'>".$e_userclass->vetted_tree('userclass_parent',array($e_userclass,'select'), $userclass_parent,"main,admin,classes,matchclass,member").'</select>'; $text .= "<select name='userclass_parent' class='tbox'>".$e_userclass->vetted_tree('userclass_parent',array($e_userclass,'select'), $userclass_parent,"main,admin,nobody,classes,matchclass,member").'</select>';
// .r_userclass("userclass_parent", $userclass_parent, "off", "admin,classes,matchclass,public,member"). // .r_userclass("userclass_parent", $userclass_parent, "off", "admin,classes,matchclass,public,member").
$text .= "</td> $text .= "</td>
<td class='forumheader3'>".UCSLAN_36."</td> <td class='forumheader3'>".UCSLAN_36."</td>

View File

@@ -11,8 +11,8 @@
| GNU General Public License (http://gnu.org). | GNU General Public License (http://gnu.org).
| |
| $Source: /cvs_backup/e107_0.8/e107_handlers/userclass_class.php,v $ | $Source: /cvs_backup/e107_0.8/e107_handlers/userclass_class.php,v $
| $Revision: 1.12 $ | $Revision: 1.13 $
| $Date: 2008-02-16 12:03:27 $ | $Date: 2008-03-23 10:11:09 $
| $Author: e107steved $ | $Author: e107steved $
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
@@ -85,7 +85,7 @@ class user_class
*/ */
function read_tree($force = FALSE) function read_tree($force = FALSE)
{ {
if ($this->class_tree && !$force) return $this->class_tree; if (isset($this->class_tree) && !$force) return $this->class_tree;
$this->class_tree = array(); $this->class_tree = array();
$this->class_parents = array(); $this->class_parents = array();
@@ -97,10 +97,29 @@ class user_class
$this->class_tree[$row['userclass_id']]['class_children'] = array(); // Create the child array in case needed $this->class_tree[$row['userclass_id']]['class_children'] = array(); // Create the child array in case needed
} }
// Add in any fixed classes that aren't already defined
foreach ($this->fixed_classes as $c => $d)
{
if (!isset($this->class_tree[$c]) && ($c != e_UC_PUBLIC))
{
// $this->class_tree[$c]['userclass_parent'] = (($c == e_UC_MEMBER) || ($c == e_UC_NOBODY)) ? e_UC_PUBLIC : e_UC_MEMBER;
$this->class_tree[$c]['userclass_parent'] = (($c == e_UC_ADMIN) || ($c == e_UC_MAINADMIN)) ? e_UC_MEMBER : e_UC_PUBLIC ;
$this->class_tree[$c]['userclass_id'] = $c;
$this->class_tree[$c]['userclass_name'] = $d;
$this->class_tree[$c]['userclass_description'] = 'Fixed class';
$this->class_tree[$c]['userclass_visibility'] = 0;
$this->class_tree[$c]['userclass_editclass'] = 0;
$this->class_tree[$c]['userclass_accum'] = $c;
// $this->class_parents[] = $c;
}
}
// Now build the tree // Now build the tree
foreach ($this->class_tree as $uc) foreach ($this->class_tree as $uc)
{ {
if ($uc['userclass_parent'] == 0) if ($uc['userclass_parent'] == e_UC_PUBLIC)
// if (($uc['userclass_parent'] == e_UC_PUBLIC) || ($uc['userclass_parent'] == e_UC_NOBODY) || ($uc['userclass_parent'] == e_UC_MEMBER))
{ // Note parent (top level) classes { // Note parent (top level) classes
$this->class_parents[$uc['userclass_id']] = $uc['userclass_id']; $this->class_parents[$uc['userclass_id']] = $uc['userclass_id'];
} }
@@ -117,21 +136,6 @@ class user_class
} }
} }
// Finally, add in any fixed classes that aren't already defined
foreach ($this->fixed_classes as $c => $d)
{
if (!isset($this->class_tree[$c]) && ($c != e_UC_PUBLIC))
{
$this->class_tree[$c]['userclass_parent'] = ($c == e_UC_MEMBER) ? e_UC_PUBLIC : e_UC_MEMBER;
$this->class_tree[$c]['userclass_id'] = $c;
$this->class_tree[$c]['userclass_name'] = $d;
$this->class_tree[$c]['userclass_description'] = 'Fixed class';
$this->class_tree[$c]['userclass_visibility'] = 0;
$this->class_tree[$c]['userclass_editclass'] = 0;
$this->class_tree[$c]['userclass_accum'] = $c;
$this->class_parents[] = $c;
}
}
} }
@@ -403,18 +407,8 @@ class user_class
$current_value = str_replace(' ','',$current_value); // Simplifies parameter passing for the tidy-minded $current_value = str_replace(' ','',$current_value); // Simplifies parameter passing for the tidy-minded
$perms = $this->uc_required_class_list($optlist,TRUE); // List of classes which we can display $perms = $this->uc_required_class_list($optlist,TRUE); // List of classes which we can display
/* // Start with the fixed classes
foreach ($this->fixed_classes as $c => $j)
{
if (isset($perms[$c]))
{
$ret .= call_user_func($callback,$treename, $c,$current_value,0);
}
}
*/
foreach ($this->class_parents as $p) foreach ($this->class_parents as $p)
{ {
// Looks like we don't need to differentiate between function and class calls
if (isset($perms[$p])) if (isset($perms[$p]))
{ {
$ret .= call_user_func($callback,$treename, $p,$current_value,0); $ret .= call_user_func($callback,$treename, $p,$current_value,0);
@@ -425,6 +419,7 @@ class user_class
} }
// Callback for vetted_tree - Creates the option list for a selection box
function select($treename, $classnum, $current_value, $nest_level) function select($treename, $classnum, $current_value, $nest_level)
{ {
$tmp = explode(',',$current_value); $tmp = explode(',',$current_value);
@@ -671,7 +666,6 @@ class user_class_admin extends user_class
'userclass_icon' => "varchar(250) NOT NULL default ''" 'userclass_icon' => "varchar(250) NOT NULL default ''"
); // Note - 'userclass_id' intentionally not in this list ); // Note - 'userclass_id' intentionally not in this list
// var $fixed_list = array(e_UC_MAINADMIN, e_UC_MEMBER, e_UC_ADMIN, e_UC_ADMINMOD, e_UC_MODS, e_UC_READONLY); // Classes which can't be deleted
// Icons to use for graphical tree display // Icons to use for graphical tree display
// First index - no children, children // First index - no children, children
@@ -723,14 +717,21 @@ class user_class_admin extends user_class
foreach ($this->class_parents as $cp) foreach ($this->class_parents as $cp)
{ {
$rights = array(); $rights = array();
$this->rebuild_tree($cp,$rights); $this->rebuild_tree($cp,$rights); // increasing rights going down the tree
} }
} }
// Internal function, called recursively to rebuild the permissions tree // Internal function, called recursively to rebuild the permissions tree where rights increase going down the tree
// $parent is the class number being processed.
// $rights is the array of rights accumulated so far in the walk down the tree
function rebuild_tree($parent, $rights) function rebuild_tree($parent, $rights)
{ {
if ($this->class_tree[$parent]['userclass_parent'] == e_UC_NOBODY)
{
$this->topdown_tree($parent);
return;
}
$rights[] = $parent; $rights[] = $parent;
$imp_rights = implode(',',$rights); $imp_rights = implode(',',$rights);
if ($this->class_tree[$parent]['userclass_accum'] != $imp_rights) if ($this->class_tree[$parent]['userclass_accum'] != $imp_rights)
@@ -745,6 +746,26 @@ class user_class_admin extends user_class
} }
// Internal function, called recursively to rebuild the permissions tree where rights increase going up the tree
// Returns an array
function topdown_tree($our_class)
{
$rights = array($our_class); // Accumulator always has rights to its own class
foreach ($this->class_tree[$our_class]['class_children'] as $cc)
{
$rights = array_merge($rights,$this->topdown_tree($cc)); // Recursive call
}
$rights = array_unique($rights);
$imp_rights = implode(',',$rights);
if ($this->class_tree[$our_class]['userclass_accum'] != $imp_rights)
{
$this->class_tree[$our_class]['userclass_accum'] = $imp_rights;
$this->class_tree[$our_class]['change_flag'] = 'UPDATE';
}
return $rights;
}
function save_tree() function save_tree()
{ {
// echo "Save Tree<br />"; // echo "Save Tree<br />";
@@ -869,6 +890,7 @@ class user_class_admin extends user_class
} }
function show_graphical_tree($show_debug=FALSE) function show_graphical_tree($show_debug=FALSE)
{ {
$this->graph_debug = $show_debug; $this->graph_debug = $show_debug;
@@ -929,7 +951,6 @@ class user_class_admin extends user_class
function delete_class($class_id) function delete_class($class_id)
{ {
// if (in_array($class_id, $this->fixed_list)) return FALSE; // Some classes can't be deleted
if (isset($this->fixed_classes[$class_id])) return FALSE; // Some classes can't be deleted if (isset($this->fixed_classes[$class_id])) return FALSE; // Some classes can't be deleted
if (!isset($this->class_tree[$class_id])) return FALSE; if (!isset($this->class_tree[$class_id])) return FALSE;
if (count($this->class_tree[$class_id]['class_children'])) return FALSE; // Can't delete class with descendants if (count($this->class_tree[$class_id]['class_children'])) return FALSE; // Can't delete class with descendants
@@ -975,42 +996,36 @@ class user_class_admin extends user_class
{ {
// If they don't exist, we need to create class records for the 'standard' user classes // If they don't exist, we need to create class records for the 'standard' user classes
$init_list = array( $init_list = array(
array('userclass_id' => e_UC_MEMBER, 'userclass_name' => "Member", array('userclass_id' => e_UC_MEMBER, 'userclass_name' => UC_LAN_3,
'userclass_description' => "Registered and logged in users", 'userclass_description' => UCSLAN_75,
'userclass_editclass' => e_UC_MAINADMIN, 'userclass_editclass' => e_UC_MAINADMIN,
'userclass_parent' => e_UC_PUBLIC, 'userclass_parent' => e_UC_PUBLIC,
'userclass_visibility' => e_UC_MEMBER 'userclass_visibility' => e_UC_MEMBER
), ),
array('userclass_id' => e_UC_ADMINMOD, 'userclass_name' => "Admins and Mods", array('userclass_id' => e_UC_ADMINMOD, 'userclass_name' => UC_LAN_8,
'userclass_description' => "Administrators and Moderators", 'userclass_description' => UCSLAN_74,
'userclass_editclass' => e_UC_MAINADMIN, 'userclass_editclass' => e_UC_MAINADMIN,
'userclass_parent' => e_UC_MEMBER, 'userclass_parent' => e_UC_MAINADMIN,
'userclass_visibility' => e_UC_MEMBER 'userclass_visibility' => e_UC_MEMBER
), ),
array('userclass_id' => e_UC_ADMIN, 'userclass_name' => "Admin", array('userclass_id' => e_UC_ADMIN, 'userclass_name' => UC_LAN_5,
'userclass_description' => "Administrators", 'userclass_description' => UCSLAN_76,
'userclass_editclass' => e_UC_MAINADMIN, 'userclass_editclass' => e_UC_MAINADMIN,
'userclass_parent' => e_UC_ADMINMOD, 'userclass_parent' => e_UC_ADMINMOD,
'userclass_visibility' => e_UC_MEMBER 'userclass_visibility' => e_UC_MEMBER
), ),
array('userclass_id' => e_UC_MAINADMIN, 'userclass_name' => "Main Admins", array('userclass_id' => e_UC_MAINADMIN, 'userclass_name' => UC_LAN_6,
'userclass_description' => "Main Administrators", 'userclass_description' => UCSLAN_77,
'userclass_editclass' => e_UC_MAINADMIN, 'userclass_editclass' => e_UC_MAINADMIN,
'userclass_parent' => e_UC_ADMIN, 'userclass_parent' => e_UC_NOBODY,
'userclass_visibility' => e_UC_MEMBER 'userclass_visibility' => e_UC_MEMBER
), ),
array('userclass_id' => e_UC_MODS, 'userclass_name' => "Moderators", array('userclass_id' => e_UC_MODS, 'userclass_name' => UC_LAN_7,
'userclass_description' => "Forum Moderators", 'userclass_description' => UCSLAN_78,
'userclass_editclass' => e_UC_MAINADMIN, 'userclass_editclass' => e_UC_MAINADMIN,
'userclass_parent' => e_UC_ADMINMOD, 'userclass_parent' => e_UC_ADMINMOD,
'userclass_visibility' => e_UC_MEMBER 'userclass_visibility' => e_UC_MEMBER
) /*, )
array('userclass_id' => e_UC_USERS, 'userclass_name' => "Users",
'userclass_description' => "Non-admin users",
'userclass_editclass' => e_UC_MAINADMIN,
'userclass_parent' => e_UC_MEMBER,
'userclass_visibility' => e_UC_MEMBER
) */
); );
foreach ($init_list as $entry) foreach ($init_list as $entry)

View File

@@ -11,8 +11,8 @@
| GNU General Public License (http://gnu.org). | GNU General Public License (http://gnu.org).
| |
| $Source: /cvs_backup/e107_0.8/e107_languages/English/admin/help/userclass2.php,v $ | $Source: /cvs_backup/e107_0.8/e107_languages/English/admin/help/userclass2.php,v $
| $Revision: 1.3 $ | $Revision: 1.4 $
| $Date: 2008-01-07 22:30:29 $ | $Date: 2008-03-23 10:11:17 $
| $Author: e107steved $ | $Author: e107steved $
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
@@ -46,7 +46,7 @@ switch (varsettrue($qs[0],'config'))
The number in front of the class name is its unique ID (reference number). The 'Everyone' class has an ID of 0 (zero). E107 uses these IDs throughout to refer to classes.<br /> The number in front of the class name is its unique ID (reference number). The 'Everyone' class has an ID of 0 (zero). E107 uses these IDs throughout to refer to classes.<br />
After the class name is the class visibility and editability - [vis:253, edit: 27] for example. This means that the class will be visible in most selectors only if the current user is a member of class 253, After the class name is the class visibility and editability - [vis:253, edit: 27] for example. This means that the class will be visible in most selectors only if the current user is a member of class 253,
and the user may edit their class membership only if they are a member of class 27.<br /> and the user may edit their class membership only if they are a member of class 27.<br />
Finally, after the '=', is a list of all classes above each class in the tree, plus the ID of that class. Thus a user who is a member of a particular class will Finally, after the '=', is a list of all classes either above or below each class in the tree, plus the ID of that class. Thus a user who is a member of a particular class will
be a member of all the classes in this list.<br /><br /> be a member of all the classes in this list.<br /><br />
To help with understanding, the class membership of the first 20 members is shown. The first entry on each line shows the classes of which the user is a member. The To help with understanding, the class membership of the first 20 members is shown. The first entry on each line shows the classes of which the user is a member. The
second entry lists all the classes where the user is a member once inheritance takes effect. The third entry shows which class memberships they can edit"; second entry lists all the classes where the user is a member once inheritance takes effect. The third entry shows which class memberships they can edit";
@@ -65,8 +65,10 @@ switch (varsettrue($qs[0],'config'))
To allow users to determine whether they can be a member of a class, allow them to manage it. If you set 'no-one' here, only the admins To allow users to determine whether they can be a member of a class, allow them to manage it. If you set 'no-one' here, only the admins
can manage membership of the class<br /><br /> can manage membership of the class<br /><br />
The 'visibility' field allows you to hide the class from most members - applies in some of the drop-down lists and checkboxes.<br /><br /> The 'visibility' field allows you to hide the class from most members - applies in some of the drop-down lists and checkboxes.<br /><br />
The 'class parent' allows you to set a hierarchy of classes, where the classes lower down the hierarchy also have the rights of their parent class, The 'class parent' allows you to set a hierarchy of classes. If the 'top' of the hierarchy is the 'Everybody/Public' or 'Member' classes, the
and that classes' parent, and so on. The resulting tree is shown in the lower part of the page; you can expand and contract branches by clicking on the '+' and '-' boxes."; classes lower down the hierarchy also have the rights of their parent class, and that classes' parent, and so on. If the 'top' of the hierarchy is
the 'No One/Nobody' class, then rights are accumulated in the opposite direction - a class accumlates all the rights of a class <b>below</b> them in the
tree. The resulting tree is shown in the lower part of the page; you can expand and contract branches by clicking on the '+' and '-' boxes.";
} }
$ns -> tablerender($caption, $text); $ns -> tablerender($caption, $text);
?> ?>

View File

@@ -4,8 +4,8 @@
| e107 website system - Language File. | e107 website system - Language File.
| |
| $Source: /cvs_backup/e107_0.8/e107_languages/English/admin/lan_userclass2.php,v $ | $Source: /cvs_backup/e107_0.8/e107_languages/English/admin/lan_userclass2.php,v $
| $Revision: 1.3 $ | $Revision: 1.4 $
| $Date: 2008-01-13 17:47:35 $ | $Date: 2008-03-23 10:11:17 $
| $Author: e107steved $ | $Author: e107steved $
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
@@ -82,6 +82,12 @@ define("UCSLAN_70", 'Rebuilding class hierarchy: ');
define("UCSLAN_71", 'User Class Maintenance'); define("UCSLAN_71", 'User Class Maintenance');
define("UCSLAN_72", 'Rebuild class hierarchy '); define("UCSLAN_72", 'Rebuild class hierarchy ');
define('UCSLAN_73', '(This may be required if database corruption occurs)'); define('UCSLAN_73', '(This may be required if database corruption occurs)');
define('UCSLAN_74', 'Administrators and Moderators');
define('UCSLAN_75', 'Registered and logged in members');
define('UCSLAN_76', 'Site Administrators');
define('UCSLAN_77', 'Main site Administrators');
define('UCSLAN_78', 'Moderators for Forums and other areas');
define("UCSLAN_UPDATE", 'Update'); define("UCSLAN_UPDATE", 'Update');