0, 'format.eol' => "\n", 'format.indent' => "\t"); /** * Set format related options. * * Updates the formatOptions array with all valid values in the passed array. * * @param array $options Option key/value pairs. * * @return void * * @see Html::$formatOptions */ public static function setFormatOptions($options) { foreach ($options as $key => $val) { if (isset(static::$formatOptions[$key])) { static::$formatOptions[$key] = $val; } } } /** * Write a element * * @param string $url The relative URL to use for the href attribute * @param string $text The target attribute to use * @param array $attribs An associative array of attributes to add * * @return string string */ public static function link($url, $text, $attribs = null) { if (is_array($attribs)) { $attribs = ArrayHelper::toString($attribs); } return '' . $text . ''; } /** * Write a element * * @param string $url The relative URL to use for the src attribute. * @param string $name The target attribute to use. * @param array $attribs An associative array of attributes to add. * @param string $noFrames The message to display if the iframe tag is not supported. * * @return string element or message if not supported. */ public static function iframe($url, $name, $attribs = null, $noFrames = '') { if (is_array($attribs)) { $attribs = ArrayHelper::toString($attribs); } return ''; } /** * Returns formatted date according to a given format and time zone. * * @param string $input String in a format accepted by date(), defaults to "now". * @param string $format The date format specification string (see {@link PHP_MANUAL#date}). * @param mixed $tz Time zone to be used for the date. Special cases: boolean true for user * setting, boolean false for server setting. * @param Application $app The application from which we'll retrieve settings, null to use the default app * * @return string A date translated by the given format and time zone. * * @see strftime */ public static function date($input = 'now', $format = null, $tz = true, Application $app = null) { if (!is_object($app)) { $app = Application::getInstance(); } // Get some system objects. $config = $app->getContainer()->appConfig; $userManager = $app->getContainer()->userManager; $user = $userManager->getUser(); // UTC date converted to user time zone. if ($tz === true) { // Get a date object based on UTC. $date = new Date($input, 'UTC'); // Set the correct time zone based on the user configuration. $date->setTimeZone(new \DateTimeZone($user->getParameters()->get('timezone', $config->get('timezone')))); } // UTC date converted to server time zone. elseif ($tz === false) { // Get a date object based on UTC. $date = new Date($input, 'UTC'); // Set the correct time zone based on the server configuration. $date->setTimeZone(new \DateTimeZone($config->get('timezone', 'UTC'))); } // No date conversion. elseif ($tz === null) { $date = new Date($input); } // UTC date converted to given time zone. else { // Get a date object based on UTC. $date = new Date($input, 'UTC'); // Set the correct time zone based on the server configuration. $date->setTimeZone(new \DateTimeZone($tz)); } // If no format is given use the default locale based format. if (!$format) { $format = Text::_('DATE_FORMAT_LC1'); } // $format is an existing language key elseif (Text::hasKey($format)) { $format = Text::_($format); } return $date->format($format, true); } /** * Write a element * * @param string $file The relative or absolute URL to use for the src attribute. * @param string $alt The alt text. * @param mixed $attribs String or associative array of attribute(s) to use. * @param boolean $relative Path to file is relative to /media folder * @param Application $app The application to get configuration from * * @return string */ public static function image($file, $alt, $attribs = null, $relative = false, Application $app = null) { if ($relative) { if (!is_object($app)) { $app = Application::getInstance(); } $file = Uri::base(false, $app->getContainer()) . 'media/' . ltrim($file, '/'); } return '' . $alt . ''; } /** * Creates a tooltip with an image as button * * @param string $tooltip The tip string. * @param mixed $title The title of the tooltip or an associative array with keys contained in * {'title','image','text','href','alt'} and values corresponding to parameters of the same name. * @param string $image The image for the tip, if no text is provided. * @param string $text The text for the tip. * @param string $href An URL that will be used to create the link. * @param string $alt The alt attribute for img tag. * @param string $class CSS class for the tool tip. * @param Application $app The application to get configuration from * * @return string */ public static function tooltip($tooltip, $title = '', $image = 'images/tooltip.png', $text = '', $href = '', $alt = 'Tooltip', $class = 'hasTooltip', Application $app) { if (!is_object($app)) { $app = Application::getInstance(); } if (is_array($title)) { foreach (array('image', 'text', 'href', 'alt', 'class') as $param) { if (isset($title[$param])) { $$param = $title[$param]; } } if (isset($title['title'])) { $title = $title['title']; } else { $title = ''; } } if (!$text) { $alt = htmlspecialchars($alt, ENT_COMPAT, 'UTF-8'); $text = static::image($image, $alt, null, true, $app); } if ($href) { $tip = '' . $text . ''; } else { $tip = $text; } $tooltip = self::tooltipText($title, $tooltip, 0); return '' . $tip . ''; } /** * Converts a double colon separated string or 2 separate strings to a string ready for bootstrap tooltips * * @param string $title The title of the tooltip (or combined '::' separated string). * @param string $content The content to tooltip. * @param int $translate If true will pass texts through Text. * @param int $escape If true will pass texts through htmlspecialchars. * * @return string The tooltip string */ public static function tooltipText($title = '', $content = '', $translate = 1, $escape = 1) { // Return empty in no title or content is given. if ($title == '' && $content == '') { return ''; } // Split title into title and content if the title contains '::' (migrated Joomla! code, using the obsolete Mootools format). if ($content == '' && !(strpos($title, '::') === false)) { list($title, $content) = explode('::', $title, 2); } // Pass strings through Text. if ($translate) { $title = Text::_($title); $content = Text::_($content); } // Escape the strings. if ($escape) { $title = str_replace('"', '"', $title); $content = str_replace('"', '"', $content); } // Return only the content if no title is given. if ($title == '') { return $content; } // Return only the title if title and text are the same. if ($title == $content) { return '' . $title . ''; } // Return the formatted sting combining the title and content. if ($content != '') { return '' . $title . '
' . $content; } // Return only the title. return $title; } /** * Displays a calendar control field * * @param string $value The date value * @param string $name The name of the text field * @param string $id The id of the text field * @param string $format The date format * @param array $attribs Additional HTML attributes * @param Application $app The application to get the configuration from * * @return string HTML markup for a calendar field */ public static function calendar($value, $name, $id, $format = 'yyyy-mm-dd', $attribs = null, Application $app = null) { static $done; if (!is_object($app)) { $app = Application::getInstance(); } if ($done === null) { $done = array(); } $attribs['class'] = isset($attribs['class']) ? $attribs['class'] : 'form-control'; $attribs['class'] = trim($attribs['class'] . ' hasTooltip calendar'); $readonly = isset($attribs['readonly']) && $attribs['readonly'] == 'readonly'; $disabled = isset($attribs['disabled']) && $attribs['disabled'] == 'disabled'; if (is_array($attribs)) { $attribs = ArrayHelper::toString($attribs); } if (!$readonly && !$disabled) { // Load the calendar behavior Behaviour::calendar(); // Only display the triggers once for each control. if (!in_array($id, $done)) { // @todo Implement a way for the application to override the language $lang = Text::detectLanguage($app->getName()); $document = $app->getDocument(); $document ->addScriptDeclaration( <<< JS akeeba.jQuery(document).ready(function(){ akeeba.jQuery('#$id-container').datepicker({ format: "$format", todayBtn: "linked", language: "$lang", autoclose: true }); }) JS ); $done[] = $id; } return '
' . '
'; } else { return ''; } } }