/administrator/components/com_zoo/helpers/html.php
PHP | 710 lines | 260 code | 105 blank | 345 comment | 20 complexity | c0c694f299274549df75b97da9dbd90c MD5 | raw file
Possible License(s): LGPL-3.0, GPL-2.0, MIT, BSD-3-Clause, LGPL-2.1
- <?php
- /**
- * @package com_zoo
- * @author YOOtheme http://www.yootheme.com
- * @copyright Copyright (C) YOOtheme GmbH
- * @license http://www.gnu.org/licenses/gpl.html GNU/GPL
- */
-
- /**
- * HTML helper class.
- *
- * @package Component.Helpers
- * @since 2.0
- */
- class HTMLHelper extends AppHelper {
-
- /**
- * Wrapper function
- *
- * @param string $type The function to call
- *
- * @return string The html output
- * @since 2.0
- */
- public function _($type) {
-
- // get arguments
- $args = func_get_args();
-
- // Check to see if we need to load a helper file
- $parts = explode('.', $type);
-
- if (count($parts) >= 2) {
- $func = array_pop($parts);
- $file = array_pop($parts);
-
- if (in_array($file, array('zoo', 'control')) && method_exists($this, $func)) {
- array_shift($args);
- return call_user_func_array(array($this, $func), $args);
- }
- }
-
- return call_user_func_array(array('JHTML', '_'), $args);
- }
-
- /**
- * Get zoo datepicker.
- *
- * @param string $value The value
- * @param string $name The html name
- * @param string $id The html id
- * @param string|array $attribs The html attributes
- * @param boolean $time
- *
- * @return string datepicker html output
- * @since 2.0
- */
- public function calendar($value, $name, $id, $attribs = null, $time = false) {
-
- if (!defined('ZOO_CALENDAR_SCRIPT_DECLARATION')) {
- define('ZOO_CALENDAR_SCRIPT_DECLARATION', true);
-
- $this->app->document->addScript('assets:js/date.js');
-
- $translations = array(
- 'closeText' => 'Done',
- 'currentText' => 'Today',
- 'dayNames' => array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'),
- 'dayNamesMin' => array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'),
- 'dayNamesShort' => array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'),
- 'monthNames' => array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
- 'monthNamesShort' => array('JANUARY_SHORT', 'FEBRUARY_SHORT', 'MARCH_SHORT', 'APRIL_SHORT', 'MAY_SHORT',
- 'JUNE_SHORT', 'JULY_SHORT', 'AUGUST_SHORT', 'SEPTEMBER_SHORT', 'OCTOBER_SHORT', 'NOVEMBER_SHORT', 'DECEMBER_SHORT'),
- 'prevText' => 'Prev',
- 'nextText' => 'Next',
- 'weekHeader' => 'Wk',
- 'appendText' => '(yyyy-mm-dd)'
- );
-
- foreach ($translations as $key => $translation) {
- $translations[$key] = is_array($translation) ? array_map(array('JText', '_'), $translation) : JText::_($translation);
- }
-
- $timepicker_translations = array_map(array('JText', '_'), array(
- 'currentText' => 'Now',
- 'closeText' => 'Done',
- 'timeOnlyTitle' => 'Choose Time',
- 'timeText' => 'Time',
- 'hourText' => 'Hour',
- 'minuteText' => 'Minute',
- 'secondText' => 'Second'
- ));
-
- $javascript = 'jQuery(function($) { $("body").Calendar({ translations: '.json_encode($translations).', timepicker_translations: '.json_encode($timepicker_translations).' }); });';
-
- $this->app->document->addScriptDeclaration($javascript);
- }
-
- if (is_array($attribs)) {
- $attribs = JArrayHelper::toString($attribs);
- }
-
- $data = $time ? ' data-timepicker="timepicker"' : '';
-
- return '<input'.$data.' style="width: 110px" type="text" name="'.$name.'" id="'.$id.'" value="'.htmlspecialchars($value, ENT_COMPAT, 'UTF-8').'" '.$attribs.' />'
- .'<img src="'.JURI::root(true).'/templates/system/images/calendar.png'.'" class="zoo-calendar" />';
- }
-
- /**
- * Get image resource info.
- *
- * @param string $image the image path
- * @param int $width the image width
- * @param int $height the image height
- *
- * @return array|null image info
- * @since 2.0
- */
- public function image($image, $width = null, $height = null) {
-
- $resized_image = $this->app->zoo->resizeImage(JPATH_ROOT.'/'.$image, $width, $height);
- $inner_path = $this->app->path->relative($resized_image);
- $path = JPATH_ROOT.'/'.$inner_path;
-
- if (is_file($path) && $size = getimagesize($path)) {
-
- $info['path'] = $path;
- $info['src'] = JURI::root().$inner_path;
- $info['mime'] = $size['mime'];
- $info['width'] = $size[0];
- $info['height'] = $size[1];
- $info['width_height'] = sprintf('width="%d" height="%d"', $info['width'], $info['height']);
-
- return $info;
- }
-
- return null;
- }
-
- /**
- * Returns category select list html string.
- *
- * @param Application $application The application object
- * @param array $options The options
- * @param string $name The hmtl name
- * @param string|array $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- * @param string $category The category id to build the select list for
- *
- * @return string category select list html
- * @since 2.0
- */
- public function categoryList($application, $options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = NULL, $idtag = false, $translate = false, $category = 0) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- // get category tree list
- $list = $this->app->tree->buildList($category, $application->getCategoryTree(), array(), '- ', '. ', ' ');
-
- // create options
- foreach ($list as $category) {
- $options[] = $this->_('select.option', $category->id, $category->treename);
- }
-
- return $this->_('zoo.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns edit row html string.
- *
- * @param string $name The hmtl name
- * @param string $value The hmtl value
- *
- * @return string the editor row html output
- * @since 2.0
- */
- public function editRow($name, $value) {
-
- $html[] = "\t<tr>\n";
- $html[] = "\t\t<td style=\"color:#666666;\">$name</td>\n";
- $html[] = "\t\t<td>$value</td>\n";
- $html[] = "\t</tr>\n";
-
- return implode("\n", $html);
- }
-
- /**
- * Returns the country select list
- *
- * @param array $countries Countries
- * @param string $name The hmtl name
- * @param string $selected The selected value
- * @param boolean $multiselect Show as multiselect
- *
- * @return string the country select list html output
- * @since 2.0
- */
- public function countrySelectList($countries, $name, $selected, $multiselect) {
-
- $options = array();
- if (!$multiselect) {
- $options[] = $this->app->html->_('select.option', '', '-'.JText::_('Select Country').'-');
- }
-
- foreach ($countries as $key => $country) {
- $options[] = $this->app->html->_('select.option', $key, JText::_($country));
- }
-
- $attribs = $multiselect ? 'size="'.max(min(count($options), 10), 3).'" multiple="multiple"' : '';
-
- return $this->app->html->_('select.genericlist', $options, $name, $attribs, 'value', 'text', $selected);
- }
-
- /**
- * Returns layout select list html string.
- *
- * @param Type $type The type object
- * @param string $layout_type The layout type filter
- * @param array $options The options
- * @param string $name The hmtl name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- *
- * @return string the layout select list html output
- * @since 2.0
- */
- public function layoutList($type, $layout_type, $options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = NULL, $idtag = false, $translate = false) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- $layouts = $this->app->type->layouts($type, $layout_type);
-
- foreach ($layouts as $layout => $metadata) {
- $options[] = $this->_('select.option', $layout, $metadata->get('name'));
- }
-
- return $this->_('select.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns type select list html string.
- *
- * @param Application $application The Application object
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- * @param array $filter The type filter
- *
- * @return string the type select list html output
- * @since 2.0
- */
- public function typeList($application, $options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false, $filter = array()) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- foreach ($application->getTypes() as $type) {
- if (empty($filter) || in_array($type->id, $filter)) {
- $options[] = $this->_('select.option', $type->id, JText::_($type->name));
- }
- }
-
- return $this->_('select.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns module select list html string.
- *
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- *
- * @return string the module select list html output
- * @since 2.0
- */
- public function moduleList($options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- // get modules
- $modules = $this->app->module->load();
-
- if (count($modules)) {
-
- foreach ($modules as $module) {
- $options[] = $this->app->html->_('select.option', $module->id, $module->title.' ('.$module->position.')');
- }
-
- return $this->_('select.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- return JText::_("There are no modules to choose from.");
- }
-
- /**
- * Returns plugin select list html string.
- *
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- * @param string $folder The folder path to filter plugins by
- * @param boolean $enabled Show selected plugins only
- *
- * @return string the plugin select list html output
- * @since 2.0
- */
- public function pluginList($options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false, $folder = false, $enabled = true) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- $plugins = JPluginHelper::getPlugin($folder);
-
- if (count($plugins)) {
-
- foreach ($plugins as $plugin) {
- if ($enabled && JPluginHelper::isEnabled($plugin->type, $plugin->name)) {
- $plugin_name = 'plg_'.$plugin->type.'_'.$plugin->name;
- JFactory::getLanguage()->load($plugin_name.'.sys', JPATH_ADMINISTRATOR);
- $options[] = $this->app->html->_('select.option', $plugin->name, $plugin_name);
- }
- }
-
- return $this->_('select.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- return JText::_("There are no plugins to choose from.");
- }
-
- /**
- * Returns author select list html string.
- *
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- * @param boolean $show_registered_users Show registered users only
- *
- * @return string the author select list html output
- * @since 2.0
- */
- public function authorList($options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false, $show_registered_users = true) {
- $query = 'SELECT DISTINCT u.id AS value, u.name AS text'
- .' FROM #__users AS u'
- .' WHERE u.block = 0'
- .($show_registered_users ? '' : ' AND u.gid > 18');
-
- return $this->queryList($query, $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns item author select list html string.
- *
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- *
- * @return string the item author select list html output
- * @since 2.0
- */
- public function itemAuthorList($options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false) {
- $query = 'SELECT DISTINCT u.id AS value, u.name AS text'
- .' FROM '.ZOO_TABLE_ITEM.' AS i'
- .' JOIN #__users AS u ON i.created_by = u.id';
-
- return $this->queryList($query, $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns item select list html string.
- *
- * @param Application $application The Application object
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- *
- * @return string the item select list html output
- * @since 2.0
- */
- public function itemList($application, $options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- $query = 'SELECT DISTINCT c.item_id as value, a.name as text'
- .' FROM '.ZOO_TABLE_COMMENT.' AS c'
- .' LEFT JOIN '.ZOO_TABLE_ITEM.' AS a ON c.item_id = a.id'
- .' WHERE a.application_id = '.(int) $application->id
- .' ORDER BY a.name';
-
- $rows = $this->app->database->queryAssocList($query);
-
- foreach ($rows as $row) {
- $options[] = $this->_('select.option', $row['value'], $row['text']);
- }
-
- return $this->_('select.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns user access select list.
- *
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- * @param array $exclude Access level ids to exclude
- *
- * @return string the user access list html output
- * @since 2.0
- */
- public function accessLevel($options, $name, $attribs = 'class="inputbox"', $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false, $exclude = array()) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- // set exclude
- $exclude = (array) $exclude;
- reset($exclude);
-
- $groups = $this->app->zoo->getGroups();
- foreach ($exclude as $key) {
- unset($groups[$key]);
- }
- foreach ($groups as $group) {
- $options[] = $this->_('select.option', $group->id, JText::_($group->name), $key, $text);
- }
-
- if (!isset($groups[$selected])) {
- $selected = $this->app->joomla->getDefaultAccess();
- }
-
- return $this->_('select.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns comment author select list html string.
- *
- * @param Application $application The Application object
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- *
- * @return string the comment author select list html output
- * @since 2.0
- */
- public function commentAuthorList($application, $options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false) {
- $query = "SELECT DISTINCT c.author AS value, c.author AS text"
- ." FROM ".ZOO_TABLE_COMMENT." AS c"
- .' LEFT JOIN '.ZOO_TABLE_ITEM.' AS a ON c.item_id = a.id'
- ." WHERE c.author <> ''"
- ." AND a.application_id = ".$application->id
- ." ORDER BY c.author";
- return $this->queryList($query, $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns select list html string.
- *
- * @param string $query The database query
- * @param array $options The options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- *
- * @return string select list html output
- * @since 2.0
- */
- public function queryList($query, $options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- $options = array_merge($options, $this->app->database->queryObjectList($query));
- return $this->_('select.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Wrapper for Joomla 1.5/1.6
- *
- * @param array $data
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $optKey
- * @param string $optText
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate
- *
- * @return string generic list html output
- * @since 2.0
- */
- public function genericList($data, $name, $attribs = null, $optKey = 'value', $optText = 'text', $selected = null, $idtag = false, $translate = false) {
- if ($this->app->joomla->isVersion('1.5')) {
- return $this->app->html->_('select.genericlist', $data, $name, $attribs, $optKey, $optText, $selected);
- } else {
- $attributes['list.attr'] = $attribs;
- $attributes['id'] = $idtag;
- $attributes['list.translate'] = $translate;
- $attributes['option.key'] = $optKey;
- $attributes['option.text'] = $optText;
- $attributes['list.select'] = $selected;
- $attributes['option.text.toHtml'] = false;
-
- return $this->app->html->_('select.genericlist', $data, $name, $attributes);
- }
- }
-
- //******************************
- //* ZOO Controls *
- //******************************
-
- /**
- * Get array list
- *
- * @param array $array
- * @param array $options
- * @param string $name The html name
- * @param array|string $attribs The html attributes
- * @param string $key
- * @param string $text
- * @param string $selected The selected value
- * @param string $idtag
- * @param boolean $translate If the text should be translated.
- *
- * @return string array list html output
- *
- * @return type
- */
- public function arrayList($array, $options, $name, $attribs = null, $key = 'value', $text = 'text', $selected = null, $idtag = false, $translate = false) {
-
- // set options
- settype($options, 'array');
- reset($options);
-
- $options = array_merge($options, $this->listOptions($array));
- return $this->_('select.genericlist', $options, $name, $attribs, $key, $text, $selected, $idtag, $translate);
- }
-
- /**
- * Returns select option as JHTML compatible array.
- *
- * @param array $array
- * @param string $value
- * @param string $text
- *
- * @return array
- * @since 2.0
- */
- public function listOptions($array, $value = 'value', $text = 'text') {
-
- $options = array();
-
- if (is_array($array)) {
- foreach ($array as $val => $txt) {
- $options[] = $this->_('select.option', strval($val), $txt, $value, $text);
- }
- }
-
- return $options;
- }
-
- /**
- * Returns directory select html string.
- *
- * @param string $directory
- * @param string $filter
- * @param string $name
- * @param string $value
- * @param array|string $attribs
- *
- * @return string directory select list html output
- * @since 2.0
- */
- public function selectdirectory($directory, $filter, $name, $value = null, $attribs = null) {
-
- // get directories
- $options = array($this->app->html->_('select.option', '', '- '.JText::_('Select Directory').' -'));
- $dirs = $this->app->path->dirs($directory, true, $filter);
-
- natsort($dirs);
-
- foreach ($dirs as $dir) {
- $options[] = $this->app->html->_('select.option', $dir, $dir);
- }
-
- return $this->app->html->_('select.genericlist', $options, $name, $attribs, 'value', 'text', $value);
- }
-
- /**
- * Returns form textarea html string.
- *
- * @param string $name
- * @param string $value
- * @param array|string $attribs
- *
- * @return string form textarea html output
- * @since 2.0
- */
- public function textarea($name, $value = null, $attribs = null) {
-
- if (is_array($attribs)) {
- $attribs = JArrayHelper::toString($attribs);
- }
-
- $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
-
- // convert <br /> tags so they are not visible when editing
- $value = str_replace('<br />', "\n", $value);
-
- return "\n\t<textarea name=\"$name\" $attribs />".$value."</textarea>\n";
- }
-
- /**
- * Returns form text input html string.
- *
- * @param string $name
- * @param string $value
- * @param array|string $attribs
- *
- * @return string form text input html output
- * @since 2.0
- */
- public function text($name, $value = null, $attribs = null) {
- $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
- return $this->input('text', $name, $value, $attribs);
- }
-
- /**
- * Returns form input html string.
- *
- * @param string $type
- * @param string $name
- * @param string $value
- * @param array|string $attribs
- *
- * @return string form input html output
- * @since 2.0
- */
- public function input($type, $name, $value = null, $attribs = null) {
-
- if (is_array($attribs)) {
- $attribs = JArrayHelper::toString($attribs);
- }
-
- return "\n\t<input type=\"$type\" name=\"$name\" value=\"$value\" $attribs />\n";
- }
-
- }