db_Select('userclass_classes', '*', "userclass_id = {$class_id}"))
{
header("location:".SITEURL);
exit;
}
$row = $sql->db_Fetch();
if (!getperms('0') && !check_class($row['userclass_editclass']))
{
header("location:".SITEURL);
exit;
}
}
if (e_QUERY)
{
$uc_qs = explode(".", e_QUERY);
}
$action = varset($uc_qs[0],'config');
$params = varset($uc_qs[1],'');
//---------------------------------------------------
// Set Initial Classes
//---------------------------------------------------
if (isset($_POST['set_initial_classes']))
{
$changed = $pref['init_class_stage'] != intval($_POST['init_class_stage']);
$pref['init_class_stage'] = intval($_POST['init_class_stage']);
$temp = varset($pref['initial_user_classes'],'');
$newval = implode(',',$_POST['init_classes']);
if ($temp != $newval) $changed = TRUE;
if ($changed)
{
$pref['initial_user_classes'] = $newval;
save_prefs();
userclass2_adminlog("AL_UC_LAN_05","New: {$newval}, Old: {$temp}, Stage: ".$pref['init_class_stage'],5);
$message = UCSLAN_41;
}
else
{
$message = UCSLAN_42;
}
}
//---------------------------------------------------
// Delete existing class
//---------------------------------------------------
if (isset($_POST['delete']))
{
$class_id = intval($_POST['existing']);
check_allowed($class_id);
if ($class_id > 247) // Crude check, but good enough for now
{
$message = UCSLAN_29;
}
elseif ($_POST['confirm'])
{
if ($e_userclass->delete_class($class_id))
{
// $sql->db_Delete('userclass_classes', "userclass_id='".$class_id."' ");
userclass2_adminlog("AL_UC_LAN_02","ID:{$class_id} (".$e_userclass->uc_get_classname($class_id).")",2);
if ($sql->db_Select('user', 'user_id, user_class', "user_class = '{$class_id}' OR user_class REGEXP('^{$class_id},') OR user_class REGEXP(',{$class_id},') OR user_class REGEXP(',{$class_id}$')"))
{ // Delete existing users from class
while ($row = $sql->db_Fetch())
{
$uidList[$row['user_id']] = $row['user_class'];
}
$uclass->class_remove($class_id, $uidList);
}
if (isset($pref['frontpage'][$class_id]))
{
unset($pref['frontpage'][$class_id]); // (Should work with both 0.7 and 0.8 front page methods)
save_prefs();
}
$message = UCSLAN_3;
}
else
{
$message = UCSLAN_4;
}
}
else
{
$message = UCSLAN_4;
}
}
//---------------------------------------------------
// Add/Edit class information
//---------------------------------------------------
if (isset($_POST['updateclass']) || isset($_POST['createclass']))
{
$class_record = array(
'userclass_name' => varset($tp->toDB($_POST['userclass_name']),''),
'userclass_description' => varset($tp->toDB($_POST['userclass_description']),''),
'userclass_editclass' => intval(varset($_POST['userclass_editclass'],0)),
'userclass_parent' => intval(varset($_POST['userclass_parent'],0)),
'userclass_visibility' => intval(varset($_POST['userclass_visibility'],0)),
'userclass_icon' => varset($tp->toDB($_POST['userclass_icon']),'')
);
$do_tree = FALSE;
if (isset($_POST['updateclass']))
{
check_allowed($_POST['userclass_id']);
$class_record['userclass_id'] = intval($_POST['userclass_id']);
$e_userclass->save_edited_class($class_record);
userclass2_adminlog("AL_UC_LAN_03","ID:{$class_record['userclass_id']} (".$class_record['userclass_name'].")",3);
$do_tree = TRUE;
$message = UCSLAN_5;
}
elseif (isset($_POST['createclass']))
{
if($class_record['userclass_name'])
{
if (getperms("0") || ($class_record['userclass_editclass'] && check_class($class_record['userclass_editclass'])))
{
$i = 1;
while ($sql->db_Select('userclass_classes', '*', "userclass_id='".$i."' ") && $i < 255)
{
$i++;
}
if ($i < 245)
{
$class_record['userclass_id'] = $i;
$e_userclass->add_new_class($class_record);
userclass2_adminlog("AL_UC_LAN_01","ID:{$class_record['userclass_id']} (".$class_record['userclass_name'].")",1);
$do_tree = TRUE;
}
$message = UCSLAN_6;
}
else
{
header("location:".SITEURL);
exit;
}
}
else
{
$message = UCSLAN_37;
}
}
if ($do_tree)
{
$e_userclass->calc_tree();
$e_userclass->save_tree();
}
}
if ($message)
{
$ns->tablerender("", "
".$message."
");
}
switch ($action)
{
//-----------------------------------
// Class management
//-----------------------------------
case 'config' :
if(isset($_POST['edit']))
{
$params = 'edit';
$class_num = varset($_POST['existing'],0);
}
else
{
$class_num = varset($uc_qs[2],0);
}
if ($params == 'edit')
{
check_allowed($class_num);
$sql->db_Select('userclass_classes', '*', "userclass_id='".intval($class_num)."' ");
$row = $sql->db_Fetch();
extract($row);
}
// Get the userclass icons
require_once(e_HANDLER."file_class.php");
$fl = new e_file;
$rejectlist = array('$.','$..','/','CVS','thumbs.db','Thumbs.db','*._$', 'index', 'null*', 'blank*');
$iconpath = e_IMAGE.UC_CLASS_ICON_DIR;
$iconlist = $fl->get_files($iconpath,"",$rejectlist);
$userclass_id = varset($userclass_id,0);
$userclass_editclass = varset($userclass_editclass,e_UC_ADMIN);
$userclass_visibility = varset($userclass_visibility,e_UC_ADMIN);
$userclass_parent = varset($userclass_parent,e_UC_PUBLIC);
$userclass_icon = varset($userclass_icon,'');
$class_total = $sql->db_Select("userclass_classes", "*", "ORDER BY userclass_name", "nowhere");
$text = "
";
$text .= $e_userclass->show_graphical_tree();
$ns->tablerender(UCSLAN_21, $text);
break; // End of 'config' option
//-----------------------------------
// Initial User class(es)
//-----------------------------------
case 'initial' :
$initial_classes = varset($pref['initial_user_classes'],'');
$irc = explode(',',$initial_classes);
$icn = array();
foreach ($irc as $i)
{
if (trim($i)) $icn[] = $e_userclass->uc_get_classname($i);
}
// $class_text = $e_userclass->uc_checkboxes('init_classes', $initial_classes, 'classes, force', TRUE);
$class_text = $e_userclass->vetted_tree('init_classes',array($e_userclass,'checkbox_desc'), $initial_classes, 'classes, force');
$text = "";
$ns->tablerender(UCSLAN_40, $text);
break; // End of 'initial'
//-----------------------------------
// Debug aids
//-----------------------------------
case 'debug' :
// if (!check_class(e_UC_MAINADMIN)) break; // Let ordinary admins see this if they know enough to specify the URL
$text .= $e_userclass->show_graphical_tree(TRUE); // Print with debug options
$ns->tablerender(UCSLAN_21, $text);
$text = "Class rights for first 20 users in database |
User ID | Disp Name | Raw classes | Inherited classes |
";
$sql->db_Select('user','user_id,user_name,user_class',"ORDER BY user_id LIMIT 0,20",'no_where');
while ($row = $sql->db_Fetch())
{
$text .= "".$row['user_id']." | ".$row['user_name']." | ".$row['user_class']." | ".$e_userclass->get_all_user_classes($row['user_class'])." |
";
}
$text .= "
";
$ns->tablerender(UCSLAN_21, $text);
break; // End of 'debug'
//-----------------------------------
// Configuration options
//-----------------------------------
case 'options' :
if (!check_class(e_UC_MAINADMIN)) break;
// Set general options
if (isset($_POST['set_admin_options']))
{
$pref['admin_log_log']['admin_userclass'] = intval($_POST['admin_log_userclass']);
save_prefs();
}
if (isset($_POST['add_class_tree']))
{ // Create a default tree
$message = UCSLAN_62;
if (!$e_userclass->update_db(TRUE))
{
$message .= UCSLAN_63;
}
else
{
$e_userclass->set_default_structure();
$e_userclass->calc_tree();
$e_userclass->save_tree();
$e_userclass->read_tree(TRUE); // Need to re-read the tree to show correct info
$message .= UCSLAN_64;
}
}
if (isset($_POST['flatten_class_tree']))
{ // Remove the default tree
$message = UCSLAN_65;
$sql->db_Update("userclass_classes", "userclass_parent='0'");
$e_userclass->calc_tree();
$e_userclass->save_tree();
$e_userclass->read_tree(TRUE); // Need to re-read the tree to show correct info
$message .= UCSLAN_64;
}
if (isset($_POST['rebuild_tree']))
{
$message = UCSLAN_70;
$e_userclass->calc_tree();
$e_userclass->save_tree();
$message .= UCSLAN_64;
}
if ($message)
{
$ns->tablerender("", "".$message."
");
}
$text = "";
$ns->tablerender(UCSLAN_60, $text);
$text = "";
$ns->tablerender(UCSLAN_61, $text);
$text = "";
$ns->tablerender(UCSLAN_71, $text);
break; // End of 'options'
//-----------------------------------
// Test options
//-----------------------------------
case 'test' :
if (!check_class(e_UC_MAINADMIN)) break;
if (isset($_POST['add_db_fields']))
{ // Add the extra DB fields
$message = "Add DB fields: ";
$e_userclass->update_db(FALSE);
$message .= "Completed";
}
if (isset($_POST['remove_db_fields']))
{ // Remove the DB fields
$message = "Remove DB fields: ";
$sql->db_Select_gen("ALTER TABLE #userclass_classes DROP `userclass_parent`, DROP `userclass_accum`, DROP `userclass_visibility`");
$message .= "Completed";
}
if (isset($_POST['add_class_tree']))
{ // Create a default tree
$message = "Create default class tree: ";
if (!$e_userclass->update_db(TRUE))
{
$message .= "Must add new DB fields first";
}
else
{
$e_userclass->set_default_structure();
$e_userclass->read_tree(TRUE); // Need to re-read the tree to show correct info
$message .= "Completed";
}
}
if (isset($_POST['remove_class_tree']))
{ // Remove the default tree
$message = "Remove default class tree: ";
$sql->db_Delete("userclass_classes","`userclass_id` IN (".implode(',',array(e_UC_MAINADMIN,e_UC_MEMBER, e_UC_ADMIN, e_UC_ADMINMOD, e_UC_MODS, e_UC_USERS, e_UC_READONLY)).") ");
$e_userclass->read_tree(TRUE); // Need to re-read the tree to show correct info
$message .= "completed";
}
if (isset($_POST['rebuild_tree']))
{
$message = 'Rebuilding tree: ';
$e_userclass->calc_tree();
$e_userclass->save_tree();
$message .= " completed";
}
if ($message)
{
$ns->tablerender("", "".$message."
");
}
$db_status = "Unknown";
$db_status = $e_userclass->update_db(TRUE) ? "Updated" : "Original";
$text = "";
$ns->tablerender('User classes - test features', $text);
break; // End of temporary test options
//-----------------------------------
// Edit class membership
//-----------------------------------
case 'membs' :
if ($params == 'clear')
{
$class_id = intval(varset($uc_qs[2]));
check_allowed($class_id);
if ($sql->db_Select('user', 'user_id, user_class', "user_class = '{$class_id}' OR user_class REGEXP('^{$class_id},') OR user_class REGEXP(',{$class_id},') OR user_class REGEXP(',{$class_id}$')"))
{
while ($row = $sql->db_Fetch())
{
$uidList[$row['user_id']] = $row['user_class'];
}
$uclass->class_remove($class_id, $uidList);
$message = UCSLAN_1;
userclass2_adminlog("AL_UC_LAN_06","ID:{$class_id} (".$e_userclass->uc_get_classname($class_id).")",6);
}
}
elseif($params)
{ // Process the updated membership list
$tmp2 = explode('-', $params,2);
$class_id = intval($tmp2[0]);
check_allowed($class_id);
$message = UCSLAN_2;
if ($sql->db_Select('user', 'user_id, user_class', "user_class = '{$class_id}' OR user_class REGEXP('^{$class_id},') OR user_class REGEXP(',{$class_id},') OR user_class REGEXP(',{$class_id}$')"))
{
while ($row = $sql->db_Fetch())
{
$uidList[$row['user_id']] = $row['user_class'];
}
$uclass->class_remove($class_id, $uidList);
}
unset($uidList);
if ($sql->db_Select('user', 'user_id, user_class', "user_id IN({$tmp2[1]})"))
{
while ($row = $sql->db_Fetch())
{
$uidList[$row['user_id']] = $row['user_class'];
}
$uclass->class_add($class_id, $uidList);
}
userclass2_adminlog("AL_UC_LAN_04","ID:{$class_id} (".$e_userclass->uc_get_classname($class_id).")",4);
}
if ($message)
{
$ns->tablerender("", "".$message."
");
}
// If we're editing a class, get the info on the class
if(isset($_POST['class_members_edit']))
{
$uc_edit_class = varset($_POST['class_to_edit'],0);
check_allowed($uc_edit_class);
$sql->db_Select('userclass_classes', '*', "userclass_id='".$_POST['class_to_edit']."' ");
$row = $sql->db_Fetch();
extract($row);
}
$class_total = $sql->db_Select("userclass_classes", "*", "ORDER BY userclass_name", "nowhere");
$text = "";
$ns->tablerender(UCSLAN_28, $text);
break; // End of 'membs' (class membership) option
//-----------------------------------
// Special fooling around
//-----------------------------------
case 'special' :
if (!check_class(e_UC_MAINADMIN)) break; // Let ordinary admins see this if they know enough to specify the URL
$text = "";
$ns->tablerender('Click on the button - the settings above should be remembered, and the $_POST values displayed', $text);
break; // End of 'debug'
} // End - switch ($action)
// Log event to admin log
function userclass2_adminlog($title, $woffle,$msg_num='00')
{
global $pref, $admin_log;
if (!varset($pref['admin_log_log']['admin_userclass'],0)) return;
$admin_log->log_event($title,$woffle,E_LOG_INFORMATIVE,'UCLASS_'.$msg_num);
}
function userclass2_adminmenu()
{
if (e_QUERY)
{
$tmp = explode(".", e_QUERY);
// $action = $tmp[0];
}
$action = varsettrue($tmp[0],'config');
$var['config']['text'] = UCSLAN_25;
$var['config']['link'] = 'userclass2.php';
$var['membs']['text'] = UCSLAN_26;
$var['membs']['link'] ='userclass2.php?membs';
$var['initial']['text'] = UCSLAN_38;
$var['initial']['link'] ='userclass2.php?initial';
if (check_class(e_UC_MAINADMIN))
{
$var['options']['text'] = UCSLAN_50;
$var['options']['link'] ='userclass2.php?options';
if (defined('UC_DEBUG_OPTS'))
{
$var['debug']['text'] = UCSLAN_27;
$var['debug']['link'] ='userclass2.php?debug';
$var['test']['text'] = 'Test functions';
$var['test']['link'] ="userclass2.php?test";
$var['specials']['text'] = 'Special tests';
$var['specials']['link'] ="userclass2.php?special";
}
}
show_admin_menu(UCSLAN_51, $action, $var);
}
require_once("footer.php");
function headerjs()
{
if (!e_QUERY) return '';
$qs = explode('.',e_QUERY);
if ($qs[0] != 'membs') return '';
// We only want this JS on the class membership selection page
$script_js = "\n";
return $script_js;
}
?>