mirror of
				https://github.com/e107inc/e107.git
				synced 2025-10-27 03:31:47 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			519 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			519 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /*
 | |
|  * e107 website system
 | |
|  *
 | |
|  * Copyright (C) 2008-2017 e107 Inc (e107.org)
 | |
|  * Released under the terms and conditions of the
 | |
|  * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
 | |
|  *
 | |
|  * Administration Area - User classes
 | |
|  *
 | |
| */
 | |
| 
 | |
| require_once(__DIR__.'/../class2.php');
 | |
| 
 | |
| if (!getperms('4'))
 | |
| {
 | |
|   e107::redirect('admin');
 | |
|   exit;
 | |
| }
 | |
| 
 | |
| e107::coreLan('userclass2', true);
 | |
| 
 | |
| 
 | |
| 	class uclass_admin extends e_admin_dispatcher
 | |
| 	{
 | |
| 
 | |
| 		protected $modes = array(
 | |
| 
 | |
| 			'main'	=> array(
 | |
| 				'controller' 	=> 'uclass_ui',
 | |
| 				'path' 			=> null,
 | |
| 				'ui' 			=> 'uclass_ui_form',
 | |
| 				'uipath' 		=> null
 | |
| 			),
 | |
| 
 | |
| 
 | |
| 		);
 | |
| 
 | |
| 
 | |
| 		protected $adminMenu = array(
 | |
| 
 | |
| 			'main/list'			=> array('caption'=> LAN_MANAGE, 'perm' => '4'),
 | |
| 			'main/create'		=> array('caption'=> LAN_CREATE, 'perm' => '4'),
 | |
| 			'main/initial' 		=> array('caption'=> UCSLAN_38, 'perm' => '4', 'icon'=>'fa-asterisk'),
 | |
| 			'main/options' 		=> array('caption'=> LAN_OPTIONS, 'perm' => '4'),
 | |
| 
 | |
| 			// 'main/custom'		=> array('caption'=> 'Custom Page', 'perm' => 'P')
 | |
| 		);
 | |
| 
 | |
| 		protected $adminMenuAliases = array(
 | |
| 			'main/edit'	=> 'main/list'
 | |
| 		);
 | |
| 
 | |
| 		protected $menuTitle = ADLAN_38;
 | |
| 
 | |
| 		protected $adminMenuIcon = 'e-userclass-24';
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 	class uclass_ui extends e_admin_ui
 | |
| 	{
 | |
| 
 | |
| 		protected $pluginTitle		= ADLAN_38;
 | |
| 		protected $pluginName		= 'core';
 | |
| //		protected $eventName		= 'userclass';
 | |
| 		protected $table			= 'userclass_classes';
 | |
| 		protected $pid				= 'userclass_id';
 | |
| 		protected $perPage			= 10;
 | |
| 		protected $batchDelete		= true;
 | |
| 		protected $batchCopy		= false; // no way to generate the non-incrementing primary key at the moment
 | |
| 	//	protected $listOrder		= 'userclass_id DESC'; //XXX Make more intuitive.
 | |
| 		protected $listOrder        = "CASE WHEN userclass_id = 250 THEN 1 WHEN userclass_id =254 THEN 2 WHEN userclass_id = 253 THEN 3  WHEN userclass_id < 250 THEN 4 END, userclass_id DESC ";
 | |
| 		//	protected $sortField		= 'somefield_order';
 | |
| 		//	protected $orderStep		= 10;
 | |
| 		protected $tabs			= null;// Use 'tab'=>0  OR 'tab'=>1 in the $fields below to enable.
 | |
| 
 | |
| 	//	protected $listQry      	= "SELECT * FROM `#generic` WHERE gen_type='wmessage'  "; // Example Custom Query. LEFT JOINS allowed. Should be without any Order or Limit.
 | |
| 
 | |
| 	//	protected $listOrder		= 'gen_id DESC';
 | |
| 
 | |
| 
 | |
| 
 | |
| 		protected $fields = array(
 | |
| 			'checkboxes' 		        =>  array ( 'title' => '', 		'type' => null,         'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect',  ),
 | |
| 			'userclass_id'				=> array('title'=> LAN_ID,		'type' =>'hidden',  	 'data'=>'int', 'width' => '5%',	'thclass' => 'left'),
 | |
| 			'userclass_icon' 			=> array('title'=> LAN_ICON,	'type' => 'icon', 		'tab'=>0, 'data'=>'str', 'width' => '5%',	'thclass' => 'left', 'class' => 'center'),
 | |
| 			'userclass_name'	   		=> array('title'=> LAN_NAME,	'type' => 'text', 		'tab'=>0,'data'=>'str', 'inline'=>true, 'width' => 'auto',	'thclass' => 'left'),
 | |
| 			'userclass_description'   	=> array('title'=> LAN_DESCRIPTION,	'type' => 'text', 		'tab'=>0,'data'=>'str', 'inline'=>true,'width' => 'auto',	'thclass' => 'left', 'writeParms'=>array('size'=>'xxlarge')),
 | |
| 			'userclass_type' 			=> array('title'=> LAN_TYPE,	'type' => 'dropdown',	'tab'=>0,'data'=>'int', 'width' => '10%',	'thclass' => 'left',	'class'=>'left' ),
 | |
| 			'userclass_editclass' 		=> array('title'=> LAN_MANAGER,	'type' => 'userclass',	'tab'=>0,'data'=>'int', 'width' => 'auto',	'thclass' => 'left', 'writeParms'=>array('classlist'=>'nobody,public,main,admin,classes,matchclass,member, no-excludes')),
 | |
| 			'userclass_visibility' 		=> array('title'=> LAN_VISIBILITY,	'type' => 'userclass',	'tab'=>0,'data'=>'int', 'width' => 'auto',	'thclass' => 'left', 'writeParms'=>array()),
 | |
| 			'userclass_parent' 			=> array('title'=> LAN_PARENT,	'type' => 'userclass',	'tab'=>0,'data'=>'int', 'width' => 'auto',	'thclass' => 'left', 'writeParms'=>array('classlist'=>'main,admin,nobody,public,classes,matchclass,member, no-excludes')),
 | |
| 			'userclass_perms' 			=> array('title'=> "Perms",	'type' => 'hidden',	'tab'=>0,'data'=>'str', 'width' => 'auto',	'thclass' => 'left', 'writeParms'=>array()),
 | |
| 
 | |
| 			'options' 					=> array('title'=> LAN_OPTIONS, 'type' => 'method',		'width' => '10%',	'thclass' => 'center last', 'forced'=>TRUE,  'class'=>'right', 'readParms' => array('deleteClass' => e_UC_NOBODY))
 | |
| 		);
 | |
| 
 | |
| 		protected $fieldpref = array('userclass_icon', 'userclass_name', 'userclass_description');
 | |
| 
 | |
| 	/*
 | |
| 		protected $prefs = array(
 | |
| 			'wm_enclose'		=> array('title'=> WMLAN_05, 'type'=>'boolean', 'data' => 'int','help'=> WMLAN_06),		);*/
 | |
| 
 | |
| 		public function init()
 | |
| 		{
 | |
| 
 | |
| 			if(E107_DBG_BASIC && isset($_GET['id']) && intval($_GET['id']) === 254) // Experimental
 | |
| 			{
 | |
| 				e107::getMessage()->addDebug("Experimental Feature active");
 | |
| 				$this->tabs = array(LAN_GENERAL,"Administrator Permissions");
 | |
| 				$this->fields['userclass_perms']['type'] = 'method';
 | |
| 				$this->fields['userclass_perms']['tab'] = 1;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			// Listen for submitted data.
 | |
| 			$this->initialPageSubmit();
 | |
| 			$this->optionsPageSubmit();
 | |
| 
 | |
| 			if($this->getAction() == 'list')
 | |
| 			{
 | |
| 				$this->fields['userclass_id']['type'] = 'number';
 | |
| 			}
 | |
| 
 | |
| 			// Set Defaults for when creating new records.
 | |
| 			$this->fields['userclass_type']['writeParms']                   = array(UC_TYPE_STD => UCSLAN_80,	UC_TYPE_GROUP => UCSLAN_81);
 | |
| 			$this->fields['userclass_editclass']['writeParms']['default']   = e_UC_MAINADMIN;
 | |
| 			$this->fields['userclass_parent']['writeParms']['default']      = e_UC_NOBODY;
 | |
| 			$this->fields['userclass_visibility']['writeParms']['default']  = e_UC_MAINADMIN;
 | |
| 			$this->fields['userclass_id']['writeParms']['default']          =$this->getUserClassAdmin()->findNewClassID();
 | |
| 
 | |
| 			if(getperms('0'))
 | |
| 			{
 | |
| 				$this->fields['userclass_editclass']['batch'] = true;
 | |
| 				$this->fields['userclass_visibility']['batch'] = true;
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 		/**
 | |
| 		 * @return Object
 | |
| 		 */
 | |
| 		public function getUserClassAdmin()
 | |
| 		{
 | |
| 			return e107::getSingleton('user_class_admin');
 | |
| 		}
 | |
| 
 | |
| 		public function beforeCreate($new_data, $old_data)
 | |
| 		{
 | |
| 			return $new_data;
 | |
| 		}
 | |
| 
 | |
| 		public function afterCreate($new_data, $old_data, $id)
 | |
| 		{
 | |
| 			e107::getUserClass()->clearCache();
 | |
| 			$e_userclass    = $this->getUserClassAdmin();
 | |
| 			$e_userclass->calc_tree();
 | |
| 			$e_userclass->save_tree();
 | |
| 		}
 | |
| 
 | |
| 		public function beforeUpdate($new_data, $old_data, $id)
 | |
| 		{
 | |
| 
 | |
| 			if(!empty($new_data['perms']))
 | |
| 			{
 | |
| 				$new_data['userclass_perms'] = implode(".",$new_data['perms']);
 | |
| 			}
 | |
| 
 | |
| 			e107::getMessage()->addDebug(print_a($new_data,true));
 | |
| 
 | |
| 			return $new_data;
 | |
| 		}
 | |
| 
 | |
| 		public function afterUpdate($new_data, $old_data, $id)
 | |
| 		{
 | |
| 			e107::getUserClass()->clearCache();
 | |
| 		}
 | |
| 
 | |
| 		public function afterDelete($deleted_data,$id, $deleted_check = false)
 | |
| 		{
 | |
| 			e107::getUserClass()->clearCache();
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		public function onCreateError($new_data, $old_data)
 | |
| 		{
 | |
| 			// do something
 | |
| 		}
 | |
| 
 | |
| 		public function onUpdateError($new_data, $old_data, $id)
 | |
| 		{
 | |
| 			// do something
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		function renderHelp()
 | |
| 		{
 | |
| 			$e_userclass = e107::getSingleton('user_class_admin'); 			// Admin functions - should just obliterate any previous object created in class2.php
 | |
| 			$e_userclass->calc_tree();
 | |
| 			$text = "<div id='userclass-tree-structure'>".$e_userclass->show_graphical_tree()."</div>";
 | |
| 
 | |
| 			return array('caption'=>UCSLAN_91, 'text' => $text); 
 | |
| 
 | |
| 			// $text .= $e_userclass->show_graphical_tree();
 | |
| 		}
 | |
| 
 | |
| 		public function optionsPage()
 | |
| 		{
 | |
| 			$mes = e107::getMessage();
 | |
| 			$frm = e107::getForm();
 | |
| 
 | |
| 
 | |
| 			$mes->addWarning(LAN_OPTIONS."<br /><br />".UCSLAN_53);
 | |
| 
 | |
| 			$text = "<h4>".LAN_PREFS."</h4>
 | |
| 			<form method='post' action='".e_SELF."?mode=main&action=options' id='treesetForm'>
 | |
| 			<table class='table adminform'>
 | |
| 			<colgroup>
 | |
| 			<col class='col-label' />
 | |
| 			<col class='col-content' />
 | |
| 			</colgroup>
 | |
| 			<tr><td >".UCSLAN_54."<br /><span class='smalltext'>".UCSLAN_57."</span><br />
 | |
| 			</td><td>
 | |
| 			".$frm->admin_button('add_class_tree','no-value','delete', UCSLAN_58)."
 | |
| 			</td>
 | |
| 			</tr>
 | |
| 			<tr>
 | |
| 			<td>".UCSLAN_55."<br /><span class='smalltext'>".UCSLAN_56."</span><br />
 | |
| 			</td><td>
 | |
| 			".$frm->admin_button('flatten_class_tree','no-value','delete', UCSLAN_58)."
 | |
| 			</td>
 | |
| 			</tr>";
 | |
| 
 | |
| 		/*
 | |
| 			if ($params == '.xml')
 | |
| 			{
 | |
| 				$text .= "<tr>
 | |
| 			<td>".'Create XML file of DB'."<br /><span class='smalltext'>".'Dev aid to set initial values'."</span><br />
 | |
| 			</td><td>
 | |
| 			".$frm->admin_button('create_xml_db','no-value','create', 'Create')."
 | |
| 			</td>
 | |
| 		</tr>";
 | |
| 
 | |
| 			}
 | |
| 		*/
 | |
| 
 | |
| 			$text .= "</table></form>";
 | |
| 
 | |
| 
 | |
| 
 | |
| 		//	$ns->tablerender(ADLAN_38.SEP.LAN_PREFS, $mes->render().$text);
 | |
| 
 | |
| 
 | |
| 			$text .= "
 | |
| 			<h4>".UCSLAN_71."</h4><form method='post' action='".e_SELF."?options' id='maintainForm'>
 | |
| 			<table class='table adminform'>
 | |
| 			<colgroup>
 | |
| 				<col class='col-label' />
 | |
| 				<col class='col-content' />
 | |
| 			</colgroup>
 | |
| 			<tr>
 | |
| 				<td>".UCSLAN_72."<br />
 | |
| 					<span class='smalltext'>".UCSLAN_73."</span>
 | |
| 				</td>
 | |
| 				<td>
 | |
| 				".$frm->admin_button('rebuild_tree','no-value','delete', UCSLAN_58)."
 | |
| 				</td>
 | |
| 			</tr>
 | |
| 			</table>
 | |
| 			</form>";
 | |
| 
 | |
| 		//	$ns->tablerender(UCSLAN_71, $text);
 | |
| 			return $text;
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		public function optionsPageSubmit()
 | |
| 		{
 | |
| 
 | |
| 			if (!check_class(e_UC_MAINADMIN))
 | |
| 			{
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			$message        = '';
 | |
| 			$sql            = e107::getDb();
 | |
| 			$mes            = e107::getMessage();
 | |
| 			$e_userclass    = $this->getUserClassAdmin();
 | |
| 
 | |
| 			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->readTree(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->update('userclass_classes', "userclass_parent='0'");
 | |
| 				$e_userclass->calc_tree();
 | |
| 				$e_userclass->save_tree();
 | |
| 				$e_userclass->readTree(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 ($params == 'xml') $params = '.xml'; else $params = '';
 | |
| 
 | |
| 			if (isset($_POST['create_xml_db']) && ($params == '.xml'))
 | |
| 			{
 | |
| 				$message = $e_userclass->makeXMLFile() ? 'XML file created' : 'Error creating XML file';
 | |
| 			}
 | |
| 			*/
 | |
| 
 | |
| 			if ($message)
 | |
| 			{
 | |
| 				$mes->addSuccess($message);
 | |
| 			//	$ns->tablerender('', "<div style='text-align:center'><b>".$message."</b></div>");
 | |
| 			}
 | |
| 
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 
 | |
| 		public function initialPage()
 | |
| 		{
 | |
| 
 | |
| 			$pref           = e107::pref('core');
 | |
| 			$mes            = e107::getMessage();
 | |
| 
 | |
| 			$frm            = e107::getForm();
 | |
| 	//		$e_userclass    = $this->getUserClassAdmin();
 | |
| 
 | |
| 		//	$text           = "";
 | |
| 
 | |
| 			$initial_classes = varset($pref['initial_user_classes'],'');
 | |
| 
 | |
| 			$irc = explode(',',$initial_classes);
 | |
| 			$icn = array();
 | |
| 
 | |
| 			foreach ($irc as $i)
 | |
| 			{
 | |
| 				if (trim($i)) $icn[] = e107::getUserClass()->getName($i);
 | |
| 			}
 | |
| 
 | |
| 			$class_text = $frm->userclass('init_classes',$initial_classes, 'checkbox', array('options'=>'classes,force'));
 | |
| 
 | |
| 		//	$class_text = e107::getUserClass()->uc_checkboxes('init_classes', $initial_classes, 'classes, force', TRUE);
 | |
| 		//	$class_text = e107::getUserClass()->vetted_tree('init_classes',array($e_userclass,'checkbox_desc'), $initial_classes, 'classes, force, no-excludes');
 | |
| 
 | |
| 			$mes->addInfo(UCSLAN_49);
 | |
| 
 | |
| 			$text = "<div>
 | |
| 			<form method='post' action='".e_SELF."?mode=main&action=initial' id='initialForm'>
 | |
| 			<table class='table table-bordered adminform'>
 | |
| 			<tr><td>".UCSLAN_43."</td><td>";
 | |
| 
 | |
| 				if (count($icn) < 1)
 | |
| 				{
 | |
| 					$text .= LAN_NONE;
 | |
| 				}
 | |
| 
 | |
| 				if ($class_text)
 | |
| 				{
 | |
| 					$text .= $class_text."</td></tr><tr><td>";
 | |
| 					$sel_stage = varset($pref['init_class_stage'],2);
 | |
| 
 | |
| 					$initClassStages = array(1 =>UCSLAN_47, 2=>UCSLAN_48);
 | |
| 
 | |
| 					$text .= UCSLAN_45."<br />	</td>
 | |
| 				    <td>".$frm->select('init_class_stage', $initClassStages, $sel_stage, 'size=xlarge')."<span class='field-help'>".UCSLAN_46."</span>
 | |
| 
 | |
| 				    </td></tr></table>
 | |
| 				    <div class='buttons-bar center'>".	$frm->admin_button('set_initial_classes','no-value','create',LAN_UPDATE)."</div>";
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					$text .= UCSLAN_39;
 | |
| 				}
 | |
| 
 | |
| 			$text .= "</td></tr></table></form></div>";
 | |
| 			return $mes->render() . $text;
 | |
| 		//	$ns->tablerender(ADLAN_38.SEP.UCSLAN_40, $mes->render() . $text);
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/**
 | |
| 		 * @return bool
 | |
| 		 */
 | |
| 		public function initialPageSubmit()
 | |
| 		{
 | |
| 			if(empty($_POST['set_initial_classes']))
 | |
| 			{
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			$pref['init_class_stage'] = intval($_POST['init_class_stage']);
 | |
| 
 | |
| 			$temp = array();
 | |
| 
 | |
| 			foreach ($_POST['init_classes'] as $ic)
 | |
| 			{
 | |
| 				$temp[] = intval($ic);
 | |
| 			}
 | |
| 
 | |
| 			$newval = implode(',', $temp);
 | |
| 
 | |
| 			$pref['initial_user_classes'] = $newval;
 | |
| 
 | |
| 			e107::getConfig()->setPref($pref)->save(true,true,true);
 | |
| 
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 	class uclass_ui_form extends e_admin_form_ui
 | |
| 	{
 | |
| 		function userclass_type($curVal,$mode)
 | |
| 		{
 | |
| 			$types = array(
 | |
| 				UC_TYPE_STD 	=> UCSLAN_80,
 | |
| 				UC_TYPE_GROUP	=> UCSLAN_81
 | |
| 			);
 | |
| 
 | |
| 			return varset($types[$curVal]);
 | |
| 		}
 | |
| 
 | |
| 		function options($parms, $value, $id, $attributes)
 | |
| 		{
 | |
| 
 | |
| 
 | |
| 			$text = "";
 | |
| 			$options = array();
 | |
| 
 | |
| 			if($attributes['mode'] == 'read')
 | |
| 			{
 | |
| 
 | |
| 				$classID = $this->getController()->getListModel()->get('userclass_id');
 | |
| 
 | |
| 
 | |
| 				if(!$this->getController()->getUserClassAdmin()->queryCanDeleteClass($classID))
 | |
| 				{
 | |
| 					$options['readParms']['deleteClass'] = e_UC_NOBODY;
 | |
| 				}
 | |
| 
 | |
| 				if($classID == 0)
 | |
| 				{
 | |
| 					$options['readParms']['deleteClass'] = e_UC_NOBODY;
 | |
| 					$options['readParms']['editClass'] = e_UC_NOBODY;
 | |
| 				}
 | |
| 
 | |
| 				$text .= $this->renderValue('options',$value, $options,$id);
 | |
| 
 | |
| 			//	if($parent != 0)
 | |
| 				{
 | |
| 		//			$link = e_SELF."?searchquery=&filter_options=page_chapter__".$id."&mode=page&action=list";
 | |
| 		//			$text .= "<a href='".$link."' class='btn' title='View Pages in this chapter'>".E_32_CUST."</a>";
 | |
| 				}
 | |
| 
 | |
| 				return $text;
 | |
| 			}
 | |
| 
 | |
| 			return '';
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		function userclass_perms($curVal,$mode)
 | |
| 		{
 | |
| 		//	if($mode == 'read')
 | |
| 		//	{
 | |
| 				//	$uid = $this->getController()->getModel()->get('user_id');
 | |
| 				//	return e107::getUserPerms()->renderPerms($curVal,$uid);
 | |
| 		//	}
 | |
| 
 | |
| 			if($mode == 'write')
 | |
| 			{
 | |
| 				$prm = e107::getUserPerms();
 | |
| 				return $prm->renderPermTable('tabs',$curVal);
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			return null;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| new uclass_admin();
 | |
| require_once(e_ADMIN."auth.php");
 | |
| e107::getAdminUI()->runPage();
 | |
| require_once(e_ADMIN."footer.php");
 | |
| 
 |