diff options
| author | Yuchen Pei <hi@ypei.me> | 2021-10-15 09:52:00 +1100 | 
|---|---|---|
| committer | Yuchen Pei <hi@ypei.me> | 2021-10-15 09:52:00 +1100 | 
| commit | 71b0e901f5fb1cfcd162d8acc23120d3f77a3152 (patch) | |
| tree | 323c00faef1edc7dea2e88ff581cc2258b2b6432 /admin/Library/Helper | |
| parent | 72cce24864b064b5762f4fe97fdf40d8d2ad4b51 (diff) | |
| parent | 07f5140771388c9e0c8a99b0dd2e5d950bdb173b (diff) | |
Merge branch 'development' into h-node
Diffstat (limited to 'admin/Library/Helper')
| -rwxr-xr-x | admin/Library/Helper/Array.php | 11 | ||||
| -rwxr-xr-x | admin/Library/Helper/Html.php | 14 | ||||
| -rwxr-xr-x | admin/Library/Helper/List.php | 278 | ||||
| -rwxr-xr-x | admin/Library/Helper/Menu.php | 75 | ||||
| -rwxr-xr-x | admin/Library/Helper/Pages.php | 108 | ||||
| -rwxr-xr-x | admin/Library/Helper/Popup.php | 87 | ||||
| -rw-r--r-- | admin/Library/Helper/index.html | 1 | 
7 files changed, 574 insertions, 0 deletions
diff --git a/admin/Library/Helper/Array.php b/admin/Library/Helper/Array.php new file mode 100755 index 0000000..32a4c27 --- /dev/null +++ b/admin/Library/Helper/Array.php @@ -0,0 +1,11 @@ +<?php + +// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +// See COPYRIGHT.txt and LICENSE.txt. + +if (!defined('EG')) die('Direct access not allowed!'); + +//Helper class to manage arrays +class Helper_Array extends ArrayExt {  + +}
\ No newline at end of file diff --git a/admin/Library/Helper/Html.php b/admin/Library/Helper/Html.php new file mode 100755 index 0000000..b3648be --- /dev/null +++ b/admin/Library/Helper/Html.php @@ -0,0 +1,14 @@ +<?php + +// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +// See COPYRIGHT.txt and LICENSE.txt. + +if (!defined('EG')) die('Direct access not allowed!'); + +//base class of all the Helper classes that returns HTML +class Helper_Html {  + +	public $viewArgs = array(); //arguments of the view action (to mantain the status, ex: page,language,etc) +	public $viewStatus = null; //additional string to the url to define the status of the view action (ex: page,language,etc) + +}
\ No newline at end of file diff --git a/admin/Library/Helper/List.php b/admin/Library/Helper/List.php new file mode 100755 index 0000000..660ac67 --- /dev/null +++ b/admin/Library/Helper/List.php @@ -0,0 +1,278 @@ +<?php + +// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +// See COPYRIGHT.txt and LICENSE.txt. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to create the HTML for the view action +class Helper_List extends Helper_Html { + +	protected $_itemsList = array(); //2-dimensional associative array containing the list items +	//keys: type,table:field,controller/action,value +	protected $_head = array(); //2-dimensional array containing the head of the table +	protected $_identifierName; + +	protected $_recordNumber = null; //number of records from the table + +	protected $_allowedItems = array('simpleLink','simpleText','delForm','editForm','associateForm','moveupForm','movedownForm'); //type of items allowed + +	//set if the submit buttons have to be images or not (it can be yse or not) +	public $submitImageType = 'no'; +	 +	//set the files of the images +	public $submitImages = array( +		'edit'		=>	null, +		'del'		=>	null, +		'up'		=>	null, +		'down'		=>	null, +		'link'		=>	null +	); + +	//set the titles of the input:submit +	public $submitTitles = array( +		'edit'		=>	'edit the record', +		'del'		=>	'delete the record', +		'up'		=>	'move up the record', +		'down'		=>	'move down the record', +		'link'		=>	'associate the record' +	); + +	//$position: array. First element: page number, second element: number of pages +	public $position = array(); +	 +	//it can be: both, top, bottom, none +	protected $_boundaries = 'none'; + +	public function build($identifierName = 'identifier') +	{ +		$this->_identifierName = $identifierName; +	} + +	public function setIdentifierName($identifierName) +	{ +		$this->_identifierName = $identifierName; +	} + +	//add a list Item. $type: the type of the item, $field: the table.field to exctract (use colon to separate the table and the field),$action: controller/action,$value=if type == link->the value of the link +	public function addItem($type, $action = '', $field = '', $name = '') { +		if (!in_array($type,$this->_allowedItems)) { +			throw new Exception('"'.$type. '" argument not allowed in '.__METHOD__.' method'); +		} +		$temp=array(); +		$temp['type'] = $type; +		$temp['action'] = $action; +		$temp['field'] = $field; +		$temp['name'] = $name; +		$this->_itemsList[] = $temp; + +		//set the $this->_head array +		$head = array(); +		$head['type'] = $type; + +		if ($type === 'simpleText') { +			$head['action'] = $this->extractFieldName($action); +		} else { +			$head['action'] = ' '; +		} +		$this->_head[] = $head; +	} + + +	//set the head of the table +	//$columnsName: name of the columns. It has to be a comma-separated list of strings +	public function setHead($columnsName = '') +	{ +		//get the array from the list +		$columnsArray = explode(',',$columnsName); +		for ($i = 0; $i < count($columnsArray); $i++) +		{ +			if ($i < count($this->_itemsList)) $this->_head[$i]['action'] = $columnsArray[$i]; +		} +	} + + +	//$method to extract the field name from the $action string (;table:field;) +	public function extractFieldName($string) { +		$string = str_replace(';','',$string); +		return $string; +	} + +	//replace the strings wrapped by ; with their correspondent value taken by the $recordArray associative array (a row of the select query) +	public function replaceFields($string,$rowArray) { +		$stringArray = explode(';',$string); +		for ($i = 0; $i < count($stringArray); $i++) { +			if (strstr($stringArray[$i],':')) { +				//check if a function has been indicated +				if (strstr($stringArray[$i],'|')) +				{ +					//get the function +					$firstArray = explode('|',$stringArray[$i]); +					$func = $firstArray[0]; +					//replace the fields +					$temp =  explode(':',$firstArray[1]); +					$stringArray[$i] = $rowArray[$temp[0]][$temp[1]]; +					 +					if (!function_exists($func)) { +						throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$func.'</b> does not exists..'); +					} +					//apply the function +					$stringArray[$i] = call_user_func($func,$stringArray[$i]); +				} +				else +				{ +					$temp = explode(':',$stringArray[$i]); +					$stringArray[$i] = $rowArray[$temp[0]][$temp[1]]; +				} +			} +		} +		return implode('',$stringArray); +	} + +	//call the method replaceFields upon the $items array using the associative array $rowArray +	public function replaceAll($item,$rowArray) { +		$item['action'] = $this->replaceFields($item['action'],$rowArray); +		$item['field'] = $this->replaceFields($item['field'],$rowArray); +		$item['name'] = $this->replaceFields($item['name'],$rowArray); +		return $item; +	} + +	//wrap the column with the tag td +	public function wrapColumn($string, $className = null) { +		return wrap($string,array('td'=>$className)); +	} + +	//wrap the row with the tag tr +	public function wrapRow($string,$className = null) { +		return wrap($string,array('tr'=>$className)); +	} + +	public function wrapList($string) { +		return wrap($string,array('table'=>'listTable')); +	} + +	//method to create the HTML of the head of the table +	public function createHead() { +		$htmlHead = null; +		foreach ($this->_head as $item) { +			$temp = $item['action']; +			$htmlHead .= $this->wrapColumn($temp,$item['type']); +		} +		return $htmlHead; +	} + +	//create the HTML of a single row (values taken from the associative array $rowArray) +	public function getRowList($rowArray) { +		$htmlList = null; +		foreach ($this->_itemsList as $item) { +			$item = $this->replaceAll($item,$rowArray); + +			if (($this->_boundaries === 'top' and $item['type'] === 'moveupForm') or ($this->_boundaries === 'bottom' and $item['type'] === 'movedownForm') or ($this->_boundaries === 'both' and ($item['type'] === 'moveupForm' or $item['type'] === 'movedownForm'))) +			{ +				$htmlList .= $this->wrapColumn(' ',$item['type']); +			} +			else +			{ +				$temp = call_user_func_array(array($this,$item['type']),array($item)); +				$htmlList .= $this->wrapColumn($temp,$item['type']); +			} +		} +		return $htmlList; +	} + +	//$index: record number +	public function ifInBoundaries($index) +	{ +		$this->_boundaries = 'none'; +		 +		if (!empty($this->position)) +		{ +			if ($this->_recordNumber === 1 and strcmp($this->position[0],1) === 0) +			{ +				$this->_boundaries = 'both'; +			} +			else if ($index === 0 and strcmp($this->position[0],1) === 0) +			{ +				$this->_boundaries = 'top'; +			} +			else if ($index === ($this->_recordNumber-1) and strcmp($this->position[0],$this->position[1]) === 0) +			{ +				$this->_boundaries = 'bottom'; +			} +		} + +	} + +	//create the HTML of the entire list. $queryResult: the array coming from the select query +	public function render($queryResult) +	{ +		//set the number of records +		$this->_recordNumber = count($queryResult); +		$htmlList = null; +		//create the HTML of the head of the record list +		$htmlList .= $this->wrapRow($this->createHead(),'listHead'); +		for ($i = 0; $i < count($queryResult); $i++) +		{ +			$this->ifInBoundaries($i); +			$temp = $this->getRowList($queryResult[$i]); +			$htmlList .= $this->wrapRow($temp,'listRow'); +		} +		return $this->wrapList($htmlList); +	} + +	public function generalForm($itemArray, $submitName, $submitValue) +	{ +		$string = "<form class='listItemForm' action='".Url::getRoot(null).$itemArray['action'].$this->viewStatus."' method='POST'>\n"; +		$name = (strcmp($itemArray['name'],'') !== 0) ? $itemArray['name'] : $submitName; +		 +		if (strcmp($this->submitImageType,'yes') === 0) +		{ +			$string .= "<input type='image' title='".$this->submitTitles[$submitValue]."' src='".$this->submitImages[$submitValue]."' value='$submitValue'>\n"; +			$string .= "<input type='hidden' name='".$name."' value='$submitValue'>\n"; +		} +		else +		{ +			$string .= "<input type='submit' title='".$this->submitTitles[$submitValue]."' name='".$name."' value='$submitValue'>\n"; +		} +		 +		$string .= "<input type='hidden' name='".$this->_identifierName."' value='".$itemArray['field']."'>\n"; +		$string .= "</form>\n"; +		return $string; +	} + +	public function moveupForm($itemArray) +	{ +		return $this->generalForm($itemArray, 'moveupAction', 'up'); +	} + +	public function movedownForm($itemArray) +	{ +		return $this->generalForm($itemArray, 'movedownAction', 'down'); +	} + +	public function editForm($itemArray) +	{ +		return $this->generalForm($itemArray, 'generalAction', 'edit'); +	} + +	public function delForm($itemArray) +	{ +		return $this->generalForm($itemArray, 'delAction', 'del'); +	} + +	public function associateForm($itemArray) +	{ +		return $this->generalForm($itemArray, 'generalAction', 'link'); +	} + +	public function simpleText($itemArray) { +		$string = "<span class='textItem'>".$itemArray['action']."</span>\n"; +		return $string; +	} + +	public function simpleLink($itemArray) { +		$string = "<a class='linkItem' href='".Url::getRoot(null).$itemArray['action'].$this->viewStatus."'>".$itemArray['name']."</a>\n"; +		return $string; +	} +	 +}
\ No newline at end of file diff --git a/admin/Library/Helper/Menu.php b/admin/Library/Helper/Menu.php new file mode 100755 index 0000000..119ada8 --- /dev/null +++ b/admin/Library/Helper/Menu.php @@ -0,0 +1,75 @@ +<?php + +// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +// See COPYRIGHT.txt and LICENSE.txt. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to write the top menĂ¹ of the view files +class Helper_Menu extends Helper_Html +{ + +	public $panelController; //panel controller +	public $controller; + +	public $links = array( +	 +		'back'	=>	array( +			'title'	=>	'back', +			'class'	=>	'mainMenuItem', +			'text'	=>	'Back', +			'url'	=>	'main' +		), +		 +		'add'	=>	array( +			'title'	=>	'add a new record', +			'class'	=>	'mainMenuItem', +			'text'	=>	'Add', +			'url'	=>	'form/insert' +		), + +		'panel'	=>	array( +			'title'	=>	'back to the Panel', +			'class'	=>	'mainMenuItem', +			'text'	=>	'Panel', +			'url'	=>	'main' +		) +		 +	); +	 +	public function build($controller = null, $panelController = null) +	{ +		$this->controller = $controller; +		$this->panelController = $panelController; +	} + +	//$voices: comma-separated list of links you want to print  +	public function render($linksList) +	{ +		$linksArray = explode(',',$linksList); +		$menu = null; +		foreach ($linksArray as $linkName) +		{ +			//check that the voice exists +			if (array_key_exists($linkName,$this->links)) +			{ +				//check that the text and the ure are defined +				if (isset($this->links[$linkName]['text']) and isset($this->links[$linkName]['url'])) +				{ +					$title = isset($this->links[$linkName]['title']) ? "title='".$this->links[$linkName]['title']."'" : null; +					$class = isset($this->links[$linkName]['class']) ? "class='".$this->links[$linkName]['class']."'" : null; +					 +					//choose the controller (current or panel) +					$controller = (strcmp($linkName,'panel') === 0) ? $this->panelController.'/' : $this->controller.'/'; +					$viewStatus = (strcmp($linkName,'panel') === 0) ? null : $this->viewStatus; +					 +					$href = Url::getRoot($controller.$this->links[$linkName]['url'].$viewStatus); +					$text = $this->links[$linkName]['text']; +					$menu .= "<div $class><a $title href='$href'>$text</a></div>\n"; +				} +			} +		} +		return $menu; +	} + +}
\ No newline at end of file diff --git a/admin/Library/Helper/Pages.php b/admin/Library/Helper/Pages.php new file mode 100755 index 0000000..eec58f6 --- /dev/null +++ b/admin/Library/Helper/Pages.php @@ -0,0 +1,108 @@ +<?php + +// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +// See COPYRIGHT.txt and LICENSE.txt. + +if (!defined('EG')) die('Direct access not allowed!'); + +//Helper class to create the HTML of the page division list +class Helper_Pages extends Helper_Html +{ + +	protected $_urlViewAction; //url of the current page +	protected $_currentPage; //number of the page +	protected $_numbOfPages; //number of pages +	protected $_variableArg = ''; //value of the $viewArgs key that has to be modified + +	public $previousString; //string of the link to the previous page +	public $nextString; //string of the link to the next page +	 +	public function build($urlViewAction = '' , $variableArg = 'page', $previousString = 'previous', $nextString = 'next') +	{ + +		$this->_variableArg = $variableArg; +		$this->_urlViewAction =$urlViewAction; //url of the controller and (/) main action +		$this->previousString = $previousString; +		$this->nextString = $nextString; +		 +	} + +	//return the number of pages +	public function getNumbOfPages() +	{ +		return $this->_numbOfPages; +	} + +	//get the limit of the select query clause +	public function getLimit($currentPage,$recordNumber,$recordPerPage) +	{ +		$this->_currentPage = $currentPage; +		$this->_numbOfPages=(($recordNumber%$recordPerPage)===0) ? (int) ($recordNumber/$recordPerPage) : ((int) ($recordNumber/$recordPerPage))+1; +		$start=(($currentPage-1)*$recordPerPage); +		return "$start,$recordPerPage"; +	} + +	//return the page list string +	public function render($pageNumber,$numberOfPages) +	{ +		$pageList = null; +		$pageList .= $this->pageLink($this->_currentPage-1,$this->previousString); +		$pageList .= $this->recursiveLink($pageNumber,$numberOfPages); +		$pageList .= $this->pageLink($this->_currentPage+1,$this->nextString); +		return $pageList; +	} + +	//recorsive function in order to write the page list +	public function recursiveLink($pageNumber,$numberOfPages) +	{ +		 +		if ($numberOfPages === 0) return null; +		 +		if ($numberOfPages === 1) { +			return $this->pageLink($pageNumber); +		} else { +			return $this->pageLink($pageNumber) . $this->recursiveLink($pageNumber+1,$numberOfPages-1); +		} +	} + +	public function pageLink($pageNumber, $string = null) { +		if ($pageNumber > 0 and $pageNumber <= $this->_numbOfPages) { +			return $this->html($pageNumber,$string); +		} else { +			return null; +		} +	}  + +	//return the html link +	public function html($pageNumber,$string = null) { +		if (isset($string)) { +			$strNumber = $string; +			$strClass = "class='itemListPage'"; +		} else { +			if ($pageNumber === $this->_currentPage) +			{ +				$strNumber = $pageNumber; +				$strClass = "class='currentPage'"; +			} +			else +			{ +				$strNumber = $pageNumber; +				$strClass = "class='itemListPage'"; +			} +		} +		$this->viewArgs[$this->_variableArg] = $pageNumber; +		$viewStatus = Url::createUrl(array_values($this->viewArgs)); +		$href= Url::getRoot(null) . $this->_urlViewAction .$viewStatus; +		return $this->getATag($href,$strNumber,$strClass); +	} + +	//get the HTMl of the tag +	//$href: href of the link +	//$text: the text of the link +	//$strClass: the class of the link +	public function getATag($href,$text,$strClass) +	{ +		return "<a $strClass href='$href'>$text</a>"; +	} + +}
\ No newline at end of file diff --git a/admin/Library/Helper/Popup.php b/admin/Library/Helper/Popup.php new file mode 100755 index 0000000..17ba908 --- /dev/null +++ b/admin/Library/Helper/Popup.php @@ -0,0 +1,87 @@ +<?php + +// All EasyGiant code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. +// See COPYRIGHT.txt and LICENSE.txt. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to create the popup menu +class Helper_Popup extends Helper_Html { + +	public $popupArray = array();  //array of popup objects (see popup.php) +	public $url = null; //the url (controller/action) to link by means of the popup menĂ¹ +// 	public $fieldArg = null; //the key of the viewArgs array to set to the field in the where clause +// 	public $valueArg = null; //the key of the viewArgs array to be set to the value in the where clause  +	public $pageArg = null; //the key of the viewArgs array representing the page number. $this->viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null +	 +	//the type of the popup. If type !=exclusive, than each voice selected is added to the where clause. If type=exclusive, the selection of a popup voice causes the unselection of the other voices +	public $type = null; +	 +	//list of popup names +	public $popupItems = array(); +	 +	public function build($url, $popupArray = null, $type = 'exclusive', $pageArg = null) { +		$this->url = $url; +		$this->popupArray = $popupArray; +		$this->pageArg = $pageArg; +		$this->type = $type; +		 +		foreach ($this->popupArray as $field => $popup) +		{ +			$this->popupItems[] = $field; +		} +	} + +	//check that the ViewArgs array is complete +	public function checkViewArgs() +	{ +		foreach ($this->popupArray as $field => $popup) +		{ +			if (!array_key_exists($field,$this->viewArgs)) return false; +		} +		return true; +	} + +	//unselect the voices different from the current one +	public function unselect($currentVoice) +	{ +		foreach ($this->popupItems as $item) +		{ +			if (strcmp($item,$currentVoice) !== 0) $this->viewArgs[$item] = Params::$nullQueryValue; +		} +	} + +	public function render() { +		$returnString = null; +		if ($this->checkViewArgs()) +		{ +			if (isset($this->viewArgs[$this->pageArg])) +			{ +				$this->viewArgs[$this->pageArg] = 1; +			} +			foreach ($this->popupArray as $field => $popup) +			{ +				if ($this->type === 'exclusive') $this->unselect($field); +				//save the value of the current ViewArg +				$tempArg = $this->viewArgs[$field]; +				$returnString .= "<ul onMouseOver='DisplayTag(this,\"block\");' onMouseOut='DisplayTag(this,\"none\");' id='menuBlock'><li class='innerItem'>".$popup->name."<ul class='innerList'>\n"; +				for ($i = 0; $i < count($popup->itemsValue); $i++) +				{ +					$this->viewArgs[$field] = $popup->itemsValue[$i]; +					$viewStatus = Url::createUrl(array_values($this->viewArgs)); +					$returnString .=  "<li><a href='".Url::getRoot($this->url).$viewStatus."'>".$popup->itemsName[$i]."</a></li>\n"; +				} +				$this->viewArgs[$field] = Params::$nullQueryValue; +				$viewStatus = Url::createUrl(array_values($this->viewArgs)); +				$returnString .=  "<li><a href='".Url::getRoot($this->url).$viewStatus."'>All</a></li>\n"; +				$returnString .= "</ul>\n</li>\n</ul>\n"; +				$this->viewArgs[$field] = $tempArg; +			} +			if (count($this->popupArray)>0) { +				$returnString .= "<script type=\"text/javascript\" src=\"/admin/Public/Js/DisplayTag.js\"></script>\n"; +			} +		} +		return $returnString; +	} + +} diff --git a/admin/Library/Helper/index.html b/admin/Library/Helper/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Helper/index.html @@ -0,0 +1 @@ +   | 
