283 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package     FrameworkOnFramework
 | |
|  * @subpackage  render
 | |
|  * @copyright   Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba Ltd. All rights reserved.
 | |
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt
 | |
|  */
 | |
| defined('F0F_INCLUDED') or die;
 | |
| 
 | |
| /**
 | |
|  * Abstract view renderer class. The renderer is what turns XML view templates
 | |
|  * into actual HTML code, renders the submenu links and potentially wraps the
 | |
|  * HTML output in a div with a component-specific ID.
 | |
|  *
 | |
|  * @package  FrameworkOnFramework
 | |
|  * @since    2.0
 | |
|  */
 | |
| abstract class F0FRenderAbstract
 | |
| {
 | |
| 	/** @var int Priority of this renderer. Higher means more important */
 | |
| 	protected $priority = 50;
 | |
| 
 | |
| 	/** @var int Is this renderer enabled? */
 | |
| 	protected $enabled = false;
 | |
| 
 | |
| 	/**
 | |
| 	 * Returns the information about this renderer
 | |
| 	 *
 | |
| 	 * @return object
 | |
| 	 */
 | |
| 	public function getInformation()
 | |
| 	{
 | |
| 		return (object) array(
 | |
| 				'priority'	 => $this->priority,
 | |
| 				'enabled'	 => $this->enabled,
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Echoes any HTML to show before the view template
 | |
| 	 *
 | |
| 	 * @param   string    $view    The current view
 | |
| 	 * @param   string    $task    The current task
 | |
| 	 * @param   F0FInput  $input   The input array (request parameters)
 | |
| 	 * @param   array     $config  The view configuration array
 | |
| 	 *
 | |
| 	 * @return  void
 | |
| 	 */
 | |
| 	abstract public function preRender($view, $task, $input, $config = array());
 | |
| 
 | |
| 	/**
 | |
| 	 * Echoes any HTML to show after the view template
 | |
| 	 *
 | |
| 	 * @param   string    $view    The current view
 | |
| 	 * @param   string    $task    The current task
 | |
| 	 * @param   F0FInput  $input   The input array (request parameters)
 | |
| 	 * @param   array     $config  The view configuration array
 | |
| 	 *
 | |
| 	 * @return  void
 | |
| 	 */
 | |
| 	abstract public function postRender($view, $task, $input, $config = array());
 | |
| 
 | |
| 	/**
 | |
| 	 * Renders a F0FForm and returns the corresponding HTML
 | |
| 	 *
 | |
| 	 * @param   F0FForm   &$form     The form to render
 | |
| 	 * @param   F0FModel  $model     The model providing our data
 | |
| 	 * @param   F0FInput  $input     The input object
 | |
| 	 * @param   string    $formType  The form type: edit, browse or read
 | |
| 	 * @param   boolean   $raw       If true, the raw form fields rendering (without the surrounding form tag) is returned.
 | |
| 	 *
 | |
| 	 * @return  string    The HTML rendering of the form
 | |
| 	 */
 | |
| 	public function renderForm(F0FForm &$form, F0FModel $model, F0FInput $input, $formType = null, $raw = false)
 | |
| 	{
 | |
| 		if (is_null($formType))
 | |
| 		{
 | |
| 			$formType = $form->getAttribute('type', 'edit');
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			$formType = strtolower($formType);
 | |
| 		}
 | |
| 
 | |
| 		switch ($formType)
 | |
| 		{
 | |
| 			case 'browse':
 | |
| 				return $this->renderFormBrowse($form, $model, $input);
 | |
| 				break;
 | |
| 
 | |
| 			case 'read':
 | |
| 				if ($raw)
 | |
| 				{
 | |
| 					return $this->renderFormRaw($form, $model, $input, 'read');
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					return $this->renderFormRead($form, $model, $input);
 | |
| 				}
 | |
| 
 | |
| 				break;
 | |
| 
 | |
| 			default:
 | |
| 				if ($raw)
 | |
| 				{
 | |
| 					return $this->renderFormRaw($form, $model, $input, 'edit');
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					return $this->renderFormEdit($form, $model, $input);
 | |
| 				}
 | |
| 				break;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Renders the submenu (link bar) for a category view when it is used in a
 | |
| 	 * extension
 | |
| 	 *
 | |
| 	 * Note: this function has to be called from the addSubmenu function in
 | |
| 	 * 		 the ExtensionNameHelper class located in
 | |
| 	 * 		 administrator/components/com_ExtensionName/helpers/Extensionname.php
 | |
| 	 *
 | |
| 	 * Example Code:
 | |
| 	 *
 | |
| 	 *	class ExtensionNameHelper
 | |
| 	 *	{
 | |
| 	 * 		public static function addSubmenu($vName)
 | |
| 	 *		{
 | |
| 	 *			// Load F0F
 | |
| 	 *			include_once JPATH_LIBRARIES . '/fof/include.php';
 | |
| 	 *
 | |
| 	 *			if (!defined('F0F_INCLUDED'))
 | |
| 	 *			{
 | |
| 	 *				JError::raiseError('500', 'F0F is not installed');
 | |
| 	 *			}
 | |
| 	 *
 | |
| 	 *			if (version_compare(JVERSION, '3.0', 'ge'))
 | |
| 	 *			{
 | |
| 	 *				$strapper = new F0FRenderJoomla3;
 | |
| 	 *			}
 | |
| 	 *			else
 | |
| 	 *			{
 | |
| 	 *				$strapper = new F0FRenderJoomla;
 | |
| 	 *			}
 | |
| 	 *
 | |
| 	 *			$strapper->renderCategoryLinkbar('com_babioonevent');
 | |
| 	 *		}
 | |
| 	 *	}
 | |
| 	 *
 | |
| 	 * @param   string  $extension  The name of the extension
 | |
| 	 * @param   array   $config     Extra configuration variables for the toolbar
 | |
| 	 *
 | |
| 	 * @return  void
 | |
| 	 */
 | |
| 	public function renderCategoryLinkbar($extension, $config = array())
 | |
| 	{
 | |
| 		// On command line don't do anything
 | |
| 		if (F0FPlatform::getInstance()->isCli())
 | |
| 		{
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		// Do not render a category submenu unless we are in the the admin area
 | |
| 		if (!F0FPlatform::getInstance()->isBackend())
 | |
| 		{
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$toolbar = F0FToolbar::getAnInstance($extension, $config);
 | |
| 		$toolbar->renderSubmenu();
 | |
| 
 | |
| 		$this->renderLinkbarItems($toolbar);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Renders a F0FForm for a Browse view and returns the corresponding HTML
 | |
| 	 *
 | |
| 	 * @param   F0FForm   &$form  The form to render
 | |
| 	 * @param   F0FModel  $model  The model providing our data
 | |
| 	 * @param   F0FInput  $input  The input object
 | |
| 	 *
 | |
| 	 * @return  string    The HTML rendering of the form
 | |
| 	 */
 | |
| 	abstract protected function renderFormBrowse(F0FForm &$form, F0FModel $model, F0FInput $input);
 | |
| 
 | |
| 	/**
 | |
| 	 * Renders a F0FForm for a Read view and returns the corresponding HTML
 | |
| 	 *
 | |
| 	 * @param   F0FForm   &$form  The form to render
 | |
| 	 * @param   F0FModel  $model  The model providing our data
 | |
| 	 * @param   F0FInput  $input  The input object
 | |
| 	 *
 | |
| 	 * @return  string    The HTML rendering of the form
 | |
| 	 */
 | |
| 	abstract protected function renderFormRead(F0FForm &$form, F0FModel $model, F0FInput $input);
 | |
| 
 | |
| 	/**
 | |
| 	 * Renders a F0FForm for an Edit view and returns the corresponding HTML
 | |
| 	 *
 | |
| 	 * @param   F0FForm   &$form  The form to render
 | |
| 	 * @param   F0FModel  $model  The model providing our data
 | |
| 	 * @param   F0FInput  $input  The input object
 | |
| 	 *
 | |
| 	 * @return  string    The HTML rendering of the form
 | |
| 	 */
 | |
| 	abstract protected function renderFormEdit(F0FForm &$form, F0FModel $model, F0FInput $input);
 | |
| 
 | |
| 	/**
 | |
| 	 * Renders a raw F0FForm and returns the corresponding HTML
 | |
| 	 *
 | |
| 	 * @param   F0FForm   &$form     The form to render
 | |
| 	 * @param   F0FModel  $model     The model providing our data
 | |
| 	 * @param   F0FInput  $input     The input object
 | |
| 	 * @param   string    $formType  The form type e.g. 'edit' or 'read'
 | |
| 	 *
 | |
| 	 * @return  string    The HTML rendering of the form
 | |
| 	 */
 | |
| 	abstract protected function renderFormRaw(F0FForm &$form, F0FModel $model, F0FInput $input, $formType);
 | |
| 
 | |
| 	/**
 | |
| 	 * Renders a raw fieldset of a F0FForm and returns the corresponding HTML
 | |
| 	 *
 | |
| 	 * @TODO: Convert to an abstract method or interface at FOF3
 | |
| 	 *
 | |
| 	 * @param   stdClass  &$fieldset   The fieldset to render
 | |
| 	 * @param   F0FForm   &$form       The form to render
 | |
| 	 * @param   F0FModel  $model       The model providing our data
 | |
| 	 * @param   F0FInput  $input       The input object
 | |
| 	 * @param   string    $formType    The form type e.g. 'edit' or 'read'
 | |
| 	 * @param   boolean   $showHeader  Should I render the fieldset's header?
 | |
| 	 *
 | |
| 	 * @return  string    The HTML rendering of the fieldset
 | |
| 	 */
 | |
| 	protected function renderFieldset(stdClass &$fieldset, F0FForm &$form, F0FModel $model, F0FInput $input, $formType, $showHeader = true)
 | |
| 	{
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Renders a label for a fieldset.
 | |
| 	 *
 | |
| 	 * @TODO: Convert to an abstract method or interface at FOF3
 | |
| 	 *
 | |
| 	 * @param   object  	$field  	The field of the label to render
 | |
| 	 * @param   F0FForm   	&$form      The form to render
 | |
| 	 * @param 	string		$title		The title of the label
 | |
| 	 *
 | |
| 	 * @return 	string		The rendered label
 | |
| 	 */
 | |
| 	protected function renderFieldsetLabel($field, F0FForm &$form, $title)
 | |
| 	{
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Checks if the fieldset defines a tab pane
 | |
| 	 *
 | |
| 	 * @param   SimpleXMLElement  $fieldset
 | |
| 	 *
 | |
| 	 * @return  boolean
 | |
| 	 */
 | |
| 	protected function isTabFieldset($fieldset)
 | |
| 	{
 | |
| 		if (!isset($fieldset->class) || !$fieldset->class)
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		$class = $fieldset->class;
 | |
| 		$classes = explode(' ', $class);
 | |
| 
 | |
| 		if (!in_array('tab-pane', $classes))
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			return in_array('active', $classes) ? 2 : 1;
 | |
| 		}
 | |
| 	}
 | |
| }
 |