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 .= " "; // Userclass icon $text .= " "; $text .= " "; // Who can manage class $text .= " "; // List of class checkboxes for grouping $text .= " "; $text .= " "; $text .= " "; $text .= "
"; if ($class_total == "0") { $text .= UCSLAN_7; } else { $text .= "".UCSLAN_8.":"; $text .= "'; $text .= "
".UCSLAN_12." ".UCSLAN_30."
".UCSLAN_13." ".UCSLAN_31."
".UCSLAN_68."
"; $selectjs = " onchange=\"document.getElementById('userclass_icon').value=this.options[this.selectedIndex].value; if(this.options[this.selectedIndex].value!=''){document.getElementById('iconview').src='".$iconpath."'+this.options[this.selectedIndex].value; document.getElementById('iconview').style.display='block';}else{document.getElementById('iconview').src=''; document.getElementById('iconview').style.display='none';}\""; $text .= "\n"; if($userclass_icon) { $img = $iconpath.$userclass_icon; } else { $blank_display = 'display: none'; $img = e_IMAGE_ABS."generic/blank.gif"; } $text .= "
".UCSLAN_69.$IMAGES_DIRECTORY.UC_CLASS_ICON_DIR."
".UCSLAN_79." \n \n ".UCSLAN_82."
".UCSLAN_34." "; $text .= "'; $text .= " ".UCSLAN_33."
".UCSLAN_35." "; $text .= "'; // .r_userclass("userclass_parent", $userclass_parent, "off", "admin,classes,matchclass,public,member"). $text .= " ".UCSLAN_36."
"; if($params == 'edit') { $text .= "   "; } else { $text .= "   "; } $text .= "
"; $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 = "
"; $text .= UCSLAN_43; if (count($icn) > 0) { $text .= implode(', ',$icn); } else { $text .= UCSLAN_44; } $text .= "
".UCSLAN_49."
"; if ($class_text) { $text .= $class_text."
"; $sel_stage = varset($pref['init_class_stage'],2); $text .= "
".UCSLAN_45."
".UCSLAN_46."
\n"; $text .= "
"; } else { $text .= UCSLAN_39; } $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 = ""; $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 .= ""; } $text .= "
Class rights for first 20 users in database
User IDDisp NameRaw classesInherited classesEditable classes
".$row['user_id']." ".$row['user_name']."".$row['user_class']." ".$inherit." ".$e_userclass->get_editable_classes($inherit)."
"; $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 = "
".UCSLAN_59."
"; $ns->tablerender(UCSLAN_60, $text); $text = "
".UCSLAN_52."
".UCSLAN_53."
".UCSLAN_54."
".UCSLAN_57."
".UCSLAN_55."
".UCSLAN_56."
"; $ns->tablerender(UCSLAN_61, $text); $text = "
".UCSLAN_72."
".UCSLAN_73."
"; $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 = "
"; $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= ""; $text .= "
Test Functions and Information
DB Status: ".$db_status."
First required stepReverse the process
Optional default treeDeletes the 'core' class entries
Sets up all the structuresSpare
 
".$e_userclass->show_tree(TRUE)."
"; $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 = "
"; if ($class_total == "0") { $text .= UCSLAN_7; } else { $text .= "".UCSLAN_8.": "; } $text .= "
 
"; if(isset($_POST['class_members_edit'])) { $sql->db_Select("user", "user_id, user_name, user_class, user_login", "user_ban != 1 ORDER BY user_name "); $c = 0; $d = 0; while ($row = $sql->db_Fetch()) { extract($row); if (check_class($userclass_id, $user_class)) { $in_userid[$c] = $user_id; $in_username[$c] = $user_name; $in_userlogin[$c] = $user_login ? "(".$user_login.")" : ""; $c++; } else { $out_userid[$d] = $user_id; $out_username[$d] = $user_name; $out_userlogin[$d] = $user_login ? "(".$user_login.")" : ""; $d++; } } $text .= "
".UCSLAN_16." ".$userclass_name."
\n
".UCSLAN_22."
"; for ($a = 0; $a <= ($d-1); $a++) { $text .= "\n"; } $text .= "
".UCSLAN_23."
"; for($a = 0; $a <= ($c-1); $a++) { $text .= "\n"; } $text .= "
\n
"; if (count($in_userid)) { // No option to clear class if it starts empty $text .= ""; } $text .= "
"; } $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 = "
"; $text .= "\n"; $ns->tablerender('Select box with nested items', $text); $text = "\n"; $ns->tablerender('Multiple Select box with nested items', $text); $checked_class_list = implode(',',$_POST['classes_select']); $text = "
"; $text .= $e_userclass->vetted_tree('classes_select',array($e_userclass,'checkbox'), $checked_class_list); $text .= "Classes: ".$checked_class_list; $text .= ""; $text .= $e_userclass->vetted_tree('normalised_classes_select',array($e_userclass,'checkbox'), $e_userclass->normalise_classes($checked_class_list)); $text .= "Normalised Classes: ".$e_userclass->normalise_classes($checked_class_list); $text .= "
"; $ns->tablerender('Nested checkboxes, showing the effect of the normalise() routine', $text); $text = "Single class: ".$_POST['class_select']."
Multi-select: ".implode(',',$_POST['multi_class_select'])."
Check boxes: ".implode(',',$_POST['classes_select'])."
"; $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; } ?>