go back in DN selection
This commit is contained in:
		
							parent
							
								
									d0388973e5
								
							
						
					
					
						commit
						f0cbe217eb
					
				|  | @ -1043,24 +1043,21 @@ window.lam.html.showDnSelection = function(fieldId, title, okText, cancelText, t | |||
| 	}) | ||||
| 	.done(function(jsonData) { | ||||
| 		jQuery('#dlg_' + fieldId).html(jsonData.dialogData); | ||||
| 	}) | ||||
| 	.fail(function() { | ||||
| 		jQuery(this).dialog("close"); | ||||
| 	}); | ||||
| 	var buttonList = {}; | ||||
| 	buttonList[cancelText] = function() { jQuery(this).dialog("close"); }; | ||||
| 	jQuery('#dlg_' + fieldId).dialog({ | ||||
| 		modal: true, | ||||
| 		title: title, | ||||
| 		dialogClass: 'defaultBackground', | ||||
| 		buttons: buttonList, | ||||
| 		width: 'auto' | ||||
| 		var buttonList = {}; | ||||
| 		buttonList[cancelText] = function() { jQuery(this).dialog("close"); }; | ||||
| 		jQuery('#dlg_' + fieldId).dialog({ | ||||
| 			modal: true, | ||||
| 			title: title, | ||||
| 			dialogClass: 'defaultBackground', | ||||
| 			buttons: buttonList, | ||||
| 			width: 'auto' | ||||
| 		}); | ||||
| 	}); | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  * Selects the DN from dialog. | ||||
|  *  | ||||
|  * | ||||
|  * @param el ok button in dialog | ||||
|  * @param fieldId field id of input field | ||||
|  * @returns false | ||||
|  | @ -1073,6 +1070,39 @@ window.lam.html.selectDn = function(el, fieldId) { | |||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Updates the DN selection. | ||||
|  * | ||||
|  * @param el element | ||||
|  * @param fieldId field id of dialog | ||||
|  * @param tokenName CSRF token name | ||||
|  * @param tokenValue CSRF token value | ||||
|  */ | ||||
| window.lam.html.updateDnSelection = function(el, fieldId, tokenName, tokenValue) { | ||||
| 	var fieldDiv = jQuery('#dlg_' + fieldId); | ||||
| 	var dn = jQuery(el).parents('.row').data('dn'); | ||||
| 	var data = { | ||||
| 		jsonInput: '' | ||||
| 	}; | ||||
| 	data[tokenName] = tokenValue; | ||||
| 	data['fieldId'] = fieldId; | ||||
| 	data['dn'] = dn; | ||||
| 	jQuery.ajax({ | ||||
| 		url: '../misc/ajax.php?function=dnselection', | ||||
| 		method: 'POST', | ||||
| 		data: data | ||||
| 	}) | ||||
| 	.done(function(jsonData) { | ||||
| 		jQuery('#dlg_' + fieldId).html(jsonData.dialogData); | ||||
| 		jQuery(fieldDiv).dialog({ | ||||
| 		    position: {my: 'center', at: 'center', of: window} | ||||
| 		}); | ||||
| 	}) | ||||
| 	.fail(function() { | ||||
| 		jQuery(fieldDiv).dialog("close"); | ||||
| 	}); | ||||
| } | ||||
| 
 | ||||
| jQuery(document).ready(function() { | ||||
| 	window.lam.gui.equalHeight(); | ||||
| 	window.lam.form.autoTrim(); | ||||
|  |  | |||
|  | @ -4,8 +4,7 @@ use \LAM\TOOLS\IMPORT_EXPORT\Importer; | |||
| use \LAM\TOOLS\IMPORT_EXPORT\Exporter; | ||||
| use \LAM\TYPES\TypeManager; | ||||
| use \htmlResponsiveRow; | ||||
| use \htmlDiv; | ||||
| use \htmlGroup; | ||||
| use \htmlLink; | ||||
| use \htmlOutputText; | ||||
| use \htmlButton; | ||||
| /* | ||||
|  | @ -171,25 +170,28 @@ class Ajax { | |||
| 		$result = checkPasswordStrength($password, null, null); | ||||
| 		echo json_encode(array("result" => $result)); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Handles DN selection fields. | ||||
| 	 *  | ||||
| 	 * | ||||
| 	 * @return string JSON output | ||||
| 	 */ | ||||
| 	private function dnSelection() { | ||||
| 		$dn = trim($_POST['dn']); | ||||
| 		if (empty($dn) || !get_preg($dn, 'dn')) { | ||||
| 			$dnList = $this->getDefaultDns(); | ||||
| 			$dn = null; | ||||
| 		} | ||||
| 		$dnList = $this->getDefaultDns(); // TODO remove
 | ||||
| 		$html = $this->buildDnSelectionHtml($dnList); | ||||
| 		else { | ||||
| 			$dnList = $this->getSubDns($dn); | ||||
| 		} | ||||
| 		$html = $this->buildDnSelectionHtml($dnList, $dn); | ||||
| 		return json_encode(array('dialogData' => $html)); | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Returns a list of default DNs from account types + tree suffix. | ||||
| 	 *  | ||||
| 	 * | ||||
| 	 * @return string[] default DNs | ||||
| 	 */ | ||||
| 	private function getDefaultDns() { | ||||
|  | @ -206,22 +208,57 @@ class Ajax { | |||
| 			$baseDnList[] = $suffix; | ||||
| 		} | ||||
| 		$baseDnList = array_unique($baseDnList); | ||||
| 		sort($baseDnList); | ||||
| 		usort($baseDnList, 'compareDN'); | ||||
| 		return $baseDnList; | ||||
| 	} | ||||
| 	 | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Returns the HTML to build the DN selection list. | ||||
| 	 *  | ||||
| 	 * | ||||
| 	 * @param string[] $dnList DN list | ||||
| 	 * @param string $currentDn current DN | ||||
| 	 */ | ||||
| 	private function buildDnSelectionHtml($dnList) { | ||||
| 	private function buildDnSelectionHtml($dnList, $currentDn) { | ||||
| 		$fieldId = trim($_POST['fieldId']); | ||||
| 		$mainRow = new htmlResponsiveRow(); | ||||
| 		if (!empty($currentDn)) { | ||||
| 			$row = new htmlResponsiveRow(); | ||||
| 			$row->addDataAttribute('dn', $currentDn); | ||||
| 			$text = new htmlOutputText($currentDn); | ||||
| 			$text->setIsBold(true); | ||||
| 			$row->add($text, 12, 9); | ||||
| 			$row->setCSSClasses(array('text-right')); | ||||
| 			$buttonId = base64_encode($currentDn); | ||||
| 			$buttonId = str_replace('=', '', $buttonId); | ||||
| 			$button = new htmlButton($buttonId, _('Ok')); | ||||
| 			$button->setIconClass('okButton'); | ||||
| 			$button->setOnClick('window.lam.html.selectDn(this, \'' . htmlspecialchars($fieldId) . '\')'); | ||||
| 			$row->add($button, 12, 3); | ||||
| 			$mainRow->add($row, 12); | ||||
| 			// back up
 | ||||
| 			$onclickUp = 'window.lam.html.updateDnSelection(this, \'' | ||||
| 					. htmlspecialchars($fieldId) . '\', \'' . getSecurityTokenName() . '\', \'' | ||||
| 					. getSecurityTokenValue() . '\')'; | ||||
| 			$row = new htmlResponsiveRow(); | ||||
| 			$row->addDataAttribute('dn', extractDNSuffix($currentDn)); | ||||
| 			$text = new htmlLink('..', '#'); | ||||
| 			$text->setCSSClasses(array('bold')); | ||||
| 			$text->setOnClick($onclickUp); | ||||
| 			$row->add($text, 12, 9); | ||||
| 			$row->setCSSClasses(array('text-right')); | ||||
| 			$buttonId = base64_encode('..'); | ||||
| 			$buttonId = str_replace('=', '', $buttonId); | ||||
| 			$button = new htmlButton($buttonId, _('Up')); | ||||
| 			$button->setIconClass('upButton'); | ||||
| 			$button->setOnClick($onclickUp); | ||||
| 			$row->add($button, 12, 3); | ||||
| 			$mainRow->add($row, 12); | ||||
| 		} | ||||
| 		foreach ($dnList as $dn) { | ||||
| 			$row = new htmlResponsiveRow(); | ||||
| 			$row->addDataAttribute('dn', $dn); | ||||
| 			$row->add(new htmlOutputText($dn), 12, 9); | ||||
| 			$row->setCSSClasses(array('text-right')); | ||||
| 			$buttonId = base64_encode($dn); | ||||
| 			$buttonId = str_replace('=', '', $buttonId); | ||||
| 			$button = new htmlButton($buttonId, _('Ok')); | ||||
|  | @ -238,6 +275,22 @@ class Ajax { | |||
| 		return $out; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Returns the sub DNs of given DN. | ||||
| 	 * | ||||
| 	 * @param string $dn DN | ||||
| 	 * @return string[] sub DNs | ||||
| 	 */ | ||||
| 	private function getSubDns($dn) { | ||||
| 		$dnEntries = ldapListDN($dn); | ||||
| 		$dnList = array(); | ||||
| 		foreach ($dnEntries as $entry) { | ||||
| 			$dnList[] = $entry['dn']; | ||||
| 		} | ||||
| 		usort($dnList, 'compareDN'); | ||||
| 		return $dnList; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue