db_Select('userclass_classes', '*', "userclass_id = {$class_id}"))
{
if(!$redirect) return false;
header("location:".SITEURL);
exit;
}
$row = $sql->db_Fetch();
if (!getperms('0') && !check_class($row['userclass_editclass']))
{
if(!$redirect) return false;
header("location:".SITEURL);
exit;
}
return true;
}
if (e_QUERY)
{
$uc_qs = explode(".", e_QUERY);
}
$action = varset($uc_qs[0],'config');
$params = varset($uc_qs[1],'');
//AJAX request check is already made by the API
if(e_AJAX_REQUEST)
{
$class_num = intval(varset($uc_qs[2],0));
if(!$class_num && isset($_POST['edit']))
{
$params = 'edit';
$class_num = intval(varset($_POST['existing'],0));
}
if ($params == 'edit')
{
require_once(e_HANDLER.'js_helper.php');
$jshelper = new e_jshelper();
if(!check_allowed($class_num, false))
{
//This will raise an error
//'Access denied' is the message which will be thrown
//by the JS AJAX handler
e_jshelper::sendAjaxError('403', 'Access denied. Form update failed!');
}
$sql->db_Select('userclass_classes', '*', "userclass_id='".$class_num."' ");
$row = $sql->db_Fetch(MYSQL_ASSOC);
//Response action - reset all group checkboxes
$jshelper->addResponseAction('reset-checked', array('group_classes_select' => '0'));
//it's grouped userclass
if ($row['userclass_type'] == UC_TYPE_GROUP)
{
//Response action - show group, hide standard
$jshelper->addResponseAction('element-invoke-by-id', array('show' => 'userclass_type_groups', 'hide' => 'userclass_type_standard'));
//fill in the classes array
$tmp = explode(',',$row['userclass_accum']);
foreach ($tmp as $uid) {
$row['group_classes_select_'.$uid] = $uid;
}
} else {
//hide group, show standard rows
$jshelper->addResponseAction('element-invoke-by-id', array('hide' => 'userclass_type_groups', 'show' => 'userclass_type_standard'));
}
unset($row['userclass_accum']);
$row['createclass'] = UCSLAN_14; //update the submit button value
$row['existing'] = $class_num; //required when user tree is clicked
//icon
$row['iconview'] = $row['userclass_icon'] ? e_IMAGE_ABS.'userclasses/'.$row['userclass_icon'] : e_IMAGE_ABS."generic/blank.gif";
$row['uc_icon_select'] = $row['userclass_icon']; //icons select box
//Send the prefered response type
//echo $jshelper->sendJSONResponse('fill-form', $row);
echo $jshelper->sendXMLResponse('fill-form', $row);
exit;
}
}
/*
* Authorization should be done a bit later!
* FIXME - should we call auth.php and header.php separate?
* Definitely yes if AJAX is in the game.
*/
require_once("auth.php");
//---------------------------------------------------
// 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("05","New: {$newval}, Old: {$temp}, Stage: ".$pref['init_class_stage']);
$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) !== FALSE)
{
// $sql->db_Delete('userclass_classes', "userclass_id='".$class_id."' ");
userclass2_adminlog("02","ID:{$class_id} (".$e_userclass->uc_get_classname($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}$')"))
{ // Delete existing users from class
while ($row = $sql->db_Fetch(MYSQL_ASSOC))
{
$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_10;
}
}
else
{
$message = UCSLAN_4;
}
}
//---------------------------------------------------
// Add/Edit class information
//---------------------------------------------------
if (($action == 'config') && isset($_POST['createclass'])) // Add or edit
{
$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']),''),
'userclass_type' => intval(varset($_POST['userclass_type'],UC_TYPE_STD))
);
if ($class_record['userclass_type'] == UC_TYPE_GROUP)
{
$temp = array();
foreach ($_POST['group_classes_select'] as $gc)
{
$temp[] = intval($gc);
}
$class_record['userclass_accum'] = implode(',',$temp);
}
$do_tree = FALSE; // Set flag to rebuild tree if no errors
$forwardVals = FALSE; // Set to ripple through existing values to a subsequent pass
$tempID = intval(varset($_POST['userclass_id'], -1));
if (($tempID < 0) && $e_userclass->ucGetClassIDFromName($class_record['userclass_name']))
{ // Duplicate name
$message = UCSLAN_63;
$forwardVals = TRUE;
}
elseif ($e_userclass->checkAdminInfo($class_record, $tempID) === FALSE)
{
$message = UCSLAN_86;
}
if (!$forwardVals)
{
if ($tempID > 0)
{ // Editing existing class here
check_allowed($_POST['userclass_id']);
$class_record['userclass_id'] = $tempID;
$e_userclass->save_edited_class($class_record);
userclass2_adminlog("03","ID:{$class_record['userclass_id']} (".$class_record['userclass_name'].")");
$do_tree = TRUE;
$message .= UCSLAN_5;
}
else
{ // Creating new class
if($class_record['userclass_name'])
{
if (getperms("0") || ($class_record['userclass_editclass'] && check_class($class_record['userclass_editclass'])))
{
$i = $e_userclass->findNewClassID();
if ($i === FALSE)
{
$message = UCSLAN_85;
}
else
{
$class_record['userclass_id'] = $i;
$e_userclass->add_new_class($class_record);
userclass2_adminlog("01","ID:{$class_record['userclass_id']} (".$class_record['userclass_name'].")");
$do_tree = TRUE;
$message .= UCSLAN_6;
}
}
else
{
header("location:".SITEURL);
exit;
}
}
else
{
$message = UCSLAN_37; // Class name required
$forwardVals = TRUE;
}
}
}
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 = intval(varset($_POST['existing'],0));
}
else
{
$class_num = intval(varset($uc_qs[2],0));
}
$userclass_id = 0; // Set defaults for new class to start with
$userclass_name = '';
$userclass_description = '';
$userclass_editclass = e_UC_ADMIN;
$userclass_visibility = e_UC_ADMIN;
$userclass_parent = e_UC_NOBODY;
$userclass_icon = '';
$userclass_type = UC_TYPE_STD;
$userclass_groupclass = '';
if ($params == 'edit' || $forwardVals)
{
if (!$forwardVals)
{ // Get the values from DB (else just recycle data uer was trying to store)
check_allowed($class_num);
$sql->db_Select('userclass_classes', '*', "userclass_id='".intval($class_num)."' ");
$class_record = $sql->db_Fetch();
$userclass_id = $class_record['userclass_id']; // Update fields from DB if editing
}
$userclass_name = $class_record['userclass_name'];
$userclass_description = $class_record['userclass_description'];
$userclass_editclass = $class_record['userclass_editclass'];
$userclass_visibility = $class_record['userclass_visibility'];
$userclass_parent = $class_record['userclass_parent'];
$userclass_icon = $class_record['userclass_icon'];
$userclass_type = $class_record['userclass_type'];
if ($userclass_type == UC_TYPE_GROUP)
{
$userclass_groupclass = $class_record['userclass_accum'];
}
}
// Get the userclass icons
require_once(e_HANDLER.'file_class.php');
$fl = new e_file;
$iconpath = e_IMAGE.UC_CLASS_ICON_DIR;
$iconlist = $fl->get_files($iconpath);
$class_total = $sql->db_Count('userclass_classes', '(*)');
$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 | Editable 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())
{
$inherit = $e_userclass->get_all_user_classes($row['user_class']);
$text .= "".$row['user_id']." |
".$row['user_name']." | ".$row['user_class']." |
".$inherit." |
".$e_userclass->get_editable_classes($inherit)." |
";
}
$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;
$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("06","ID:{$class_id} (".$e_userclass->uc_get_classname($class_id).")");
}
}
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("04","ID:{$class_id} (".$e_userclass->uc_get_classname($class_id).")");
}
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($msg_num='00', $woffle='')
{
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);
$admin_log->log_event('UCLASS_'.$msg_num,$woffle,E_LOG_INFORMATIVE,'');
}
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()
{
/*
* e107Ajax.fillForm demonstration
* Open Firebug console for Ajax transaction details
*
*/
$script_js = "\n";
if (!e_QUERY) return $script_js;
$qs = explode('.',e_QUERY);
if ($qs[0] != 'membs') return $script_js;
// We only want this JS on the class membership selection page
$script_js .= "\n";
return $script_js;
}
?>