You've already forked joomla_test
							
							first commit
This commit is contained in:
		
							
								
								
									
										470
									
								
								libraries/joomla/grid/grid.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										470
									
								
								libraries/joomla/grid/grid.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,470 @@ | ||||
| <?php | ||||
| /** | ||||
|  * JGrid class to dynamically generate HTML tables | ||||
|  * | ||||
|  * @package     Joomla.Platform | ||||
|  * @subpackage  Grid | ||||
|  * | ||||
|  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved. | ||||
|  * @license     GNU General Public License version 2 or later; see LICENSE | ||||
|  */ | ||||
|  | ||||
| defined('JPATH_PLATFORM') or die; | ||||
|  | ||||
| /** | ||||
|  * JGrid class to dynamically generate HTML tables | ||||
|  * | ||||
|  * @package     Joomla.Platform | ||||
|  * @subpackage  Grid | ||||
|  * @since       11.3 | ||||
|  */ | ||||
| class JGrid | ||||
| { | ||||
| 	/** | ||||
| 	 * Array of columns | ||||
| 	 * @var array | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	protected $columns = array(); | ||||
|  | ||||
| 	/** | ||||
| 	 * Current active row | ||||
| 	 * @var int | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	protected $activeRow = 0; | ||||
|  | ||||
| 	/** | ||||
| 	 * Rows of the table (including header and footer rows) | ||||
| 	 * @var array | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	protected $rows = array(); | ||||
|  | ||||
| 	/** | ||||
| 	 * Header and Footer row-IDs | ||||
| 	 * @var array | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	protected $specialRows = array('header' => array(), 'footer' => array()); | ||||
|  | ||||
| 	/** | ||||
| 	 * Associative array of attributes for the table-tag | ||||
| 	 * @var array | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	protected $options; | ||||
|  | ||||
| 	/** | ||||
| 	 * Constructor for a JGrid object | ||||
| 	 * | ||||
| 	 * @param   array  $options  Associative array of attributes for the table-tag | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function __construct($options = array()) | ||||
| 	{ | ||||
| 		$this->setTableOptions($options, true); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Magic function to render this object as a table. | ||||
| 	 * | ||||
| 	 * @return  string | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function __toString() | ||||
| 	{ | ||||
| 		return $this->toString(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to set the attributes for a table-tag | ||||
| 	 * | ||||
| 	 * @param   array  $options  Associative array of attributes for the table-tag | ||||
| 	 * @param   bool   $replace  Replace possibly existing attributes | ||||
| 	 * | ||||
| 	 * @return  JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function setTableOptions($options = array(), $replace = false) | ||||
| 	{ | ||||
| 		if ($replace) | ||||
| 		{ | ||||
| 			$this->options = $options; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$this->options = array_merge($this->options, $options); | ||||
| 		} | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the Attributes of the current table | ||||
| 	 * | ||||
| 	 * @return  array Associative array of attributes | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function getTableOptions() | ||||
| 	{ | ||||
| 		return $this->options; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Add new column name to process | ||||
| 	 * | ||||
| 	 * @param   string  $name  Internal column name | ||||
| 	 * | ||||
| 	 * @return  JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function addColumn($name) | ||||
| 	{ | ||||
| 		$this->columns[] = $name; | ||||
|  | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Returns the list of internal columns | ||||
| 	 * | ||||
| 	 * @return  array List of internal columns | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function getColumns() | ||||
| 	{ | ||||
| 		return $this->columns; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Delete column by name | ||||
| 	 * | ||||
| 	 * @param   string  $name  Name of the column to be deleted | ||||
| 	 * | ||||
| 	 * @return  JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function deleteColumn($name) | ||||
| 	{ | ||||
| 		$index = array_search($name, $this->columns); | ||||
| 		if ($index !== false) | ||||
| 		{ | ||||
| 			unset($this->columns[$index]); | ||||
| 			$this->columns = array_values($this->columns); | ||||
| 		} | ||||
|  | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to set a whole range of columns at once | ||||
| 	 * This can be used to re-order the columns, too | ||||
| 	 * | ||||
| 	 * @param   array  $columns  List of internal column names | ||||
| 	 * | ||||
| 	 * @return  JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function setColumns($columns) | ||||
| 	{ | ||||
| 		$this->columns = array_values($columns); | ||||
|  | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Adds a row to the table and sets the currently | ||||
| 	 * active row to the new row | ||||
| 	 * | ||||
| 	 * @param   array  $options  Associative array of attributes for the row | ||||
| 	 * @param   int    $special  1 for a new row in the header, 2 for a new row in the footer | ||||
| 	 * | ||||
| 	 * @return  JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function addRow($options = array(), $special = false) | ||||
| 	{ | ||||
| 		$this->rows[]['_row'] = $options; | ||||
| 		$this->activeRow = count($this->rows) - 1; | ||||
| 		if ($special) | ||||
| 		{ | ||||
| 			if ($special === 1) | ||||
| 			{ | ||||
| 				$this->specialRows['header'][] = $this->activeRow; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				$this->specialRows['footer'][] = $this->activeRow; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to get the attributes of the currently active row | ||||
| 	 * | ||||
| 	 * @return array Associative array of attributes | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function getRowOptions() | ||||
| 	{ | ||||
| 		return $this->rows[$this->activeRow]['_row']; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Method to set the attributes of the currently active row | ||||
| 	 * | ||||
| 	 * @param   array  $options  Associative array of attributes | ||||
| 	 * | ||||
| 	 * @return JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function setRowOptions($options) | ||||
| 	{ | ||||
| 		$this->rows[$this->activeRow]['_row'] = $options; | ||||
|  | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the currently active row ID | ||||
| 	 * | ||||
| 	 * @return  int ID of the currently active row | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function getActiveRow() | ||||
| 	{ | ||||
| 		return $this->activeRow; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set the currently active row | ||||
| 	 * | ||||
| 	 * @param   int  $id  ID of the row to be set to current | ||||
| 	 * | ||||
| 	 * @return  JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function setActiveRow($id) | ||||
| 	{ | ||||
| 		$this->activeRow = (int) $id; | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Set cell content for a specific column for the | ||||
| 	 * currently active row | ||||
| 	 * | ||||
| 	 * @param   string  $name     Name of the column | ||||
| 	 * @param   string  $content  Content for the cell | ||||
| 	 * @param   array   $option   Associative array of attributes for the td-element | ||||
| 	 * @param   bool    $replace  If false, the content is appended to the current content of the cell | ||||
| 	 * | ||||
| 	 * @return  JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function setRowCell($name, $content, $option = array(), $replace = true) | ||||
| 	{ | ||||
| 		if ($replace || !isset($this->rows[$this->activeRow][$name])) | ||||
| 		{ | ||||
| 			$cell = new stdClass; | ||||
| 			$cell->options = $option; | ||||
| 			$cell->content = $content; | ||||
| 			$this->rows[$this->activeRow][$name] = $cell; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			$this->rows[$this->activeRow][$name]->content .= $content; | ||||
| 			$this->rows[$this->activeRow][$name]->options = $option; | ||||
| 		} | ||||
|  | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get all data for a row | ||||
| 	 * | ||||
| 	 * @param   int  $id  ID of the row to return | ||||
| 	 * | ||||
| 	 * @return  array Array of columns of a table row | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function getRow($id = false) | ||||
| 	{ | ||||
| 		if ($id === false) | ||||
| 		{ | ||||
| 			$id = $this->activeRow; | ||||
| 		} | ||||
|  | ||||
| 		if (isset($this->rows[(int) $id])) | ||||
| 		{ | ||||
| 			return $this->rows[(int) $id]; | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get the IDs of all rows in the table | ||||
| 	 * | ||||
| 	 * @param   int  $special  false for the standard rows, 1 for the header rows, 2 for the footer rows | ||||
| 	 * | ||||
| 	 * @return  array Array of IDs | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function getRows($special = false) | ||||
| 	{ | ||||
| 		if ($special) | ||||
| 		{ | ||||
| 			if ($special === 1) | ||||
| 			{ | ||||
| 				return $this->specialRows['header']; | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				return $this->specialRows['footer']; | ||||
| 			} | ||||
| 		} | ||||
| 		return array_diff(array_keys($this->rows), array_merge($this->specialRows['header'], $this->specialRows['footer'])); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Delete a row from the object | ||||
| 	 * | ||||
| 	 * @param   int  $id  ID of the row to be deleted | ||||
| 	 * | ||||
| 	 * @return  JGrid This object for chaining | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function deleteRow($id) | ||||
| 	{ | ||||
| 		unset($this->rows[$id]); | ||||
|  | ||||
| 		if (in_array($id, $this->specialRows['header'])) | ||||
| 		{ | ||||
| 			unset($this->specialRows['header'][array_search($id, $this->specialRows['header'])]); | ||||
| 		} | ||||
|  | ||||
| 		if (in_array($id, $this->specialRows['footer'])) | ||||
| 		{ | ||||
| 			unset($this->specialRows['footer'][array_search($id, $this->specialRows['footer'])]); | ||||
| 		} | ||||
|  | ||||
| 		if ($this->activeRow == $id) | ||||
| 		{ | ||||
| 			end($this->rows); | ||||
| 			$this->activeRow = key($this->rows); | ||||
| 		} | ||||
|  | ||||
| 		return $this; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Render the HTML table | ||||
| 	 * | ||||
| 	 * @return  string The rendered HTML table | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	public function toString() | ||||
| 	{ | ||||
| 		$output = array(); | ||||
| 		$output[] = '<table' . $this->renderAttributes($this->getTableOptions()) . '>'; | ||||
|  | ||||
| 		if (count($this->specialRows['header'])) | ||||
| 		{ | ||||
| 			$output[] = $this->renderArea($this->specialRows['header'], 'thead', 'th'); | ||||
| 		} | ||||
|  | ||||
| 		if (count($this->specialRows['footer'])) | ||||
| 		{ | ||||
| 			$output[] = $this->renderArea($this->specialRows['footer'], 'tfoot'); | ||||
| 		} | ||||
|  | ||||
| 		$ids = array_diff(array_keys($this->rows), array_merge($this->specialRows['header'], $this->specialRows['footer'])); | ||||
| 		if (count($ids)) | ||||
| 		{ | ||||
| 			$output[] = $this->renderArea($ids); | ||||
| 		} | ||||
|  | ||||
| 		$output[] = '</table>'; | ||||
| 		return implode('', $output); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Render an area of the table | ||||
| 	 * | ||||
| 	 * @param   array   $ids   IDs of the rows to render | ||||
| 	 * @param   string  $area  Name of the area to render. Valid: tbody, tfoot, thead | ||||
| 	 * @param   string  $cell  Name of the cell to render. Valid: td, th | ||||
| 	 * | ||||
| 	 * @return string The rendered table area | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	protected function renderArea($ids, $area = 'tbody', $cell = 'td') | ||||
| 	{ | ||||
| 		$output = array(); | ||||
| 		$output[] = '<' . $area . ">\n"; | ||||
| 		foreach ($ids as $id) | ||||
| 		{ | ||||
| 			$output[] = "\t<tr" . $this->renderAttributes($this->rows[$id]['_row']) . ">\n"; | ||||
| 			foreach ($this->getColumns() as $name) | ||||
| 			{ | ||||
| 				if (isset($this->rows[$id][$name])) | ||||
| 				{ | ||||
| 					$column = $this->rows[$id][$name]; | ||||
| 					$output[] = "\t\t<" . $cell . $this->renderAttributes($column->options) . '>' . $column->content . '</' . $cell . ">\n"; | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			$output[] = "\t</tr>\n"; | ||||
| 		} | ||||
| 		$output[] = '</' . $area . '>'; | ||||
|  | ||||
| 		return implode('', $output); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Renders an HTML attribute from an associative array | ||||
| 	 * | ||||
| 	 * @param   array  $attributes  Associative array of attributes | ||||
| 	 * | ||||
| 	 * @return  string The HTML attribute string | ||||
| 	 * | ||||
| 	 * @since 11.3 | ||||
| 	 */ | ||||
| 	protected function renderAttributes($attributes) | ||||
| 	{ | ||||
| 		if (count((array) $attributes) == 0) | ||||
| 		{ | ||||
| 			return ''; | ||||
| 		} | ||||
| 		$return = array(); | ||||
| 		foreach ($attributes as $key => $option) | ||||
| 		{ | ||||
| 			$return[] = $key . '="' . $option . '"'; | ||||
| 		} | ||||
| 		return ' ' . implode(' ', $return); | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 alazhar
					alazhar