/src/lib/HTML/Template/Flexy/Plugin/Savant.php
PHP | 756 lines | 232 code | 99 blank | 425 comment | 34 complexity | d628c23b58bf5cc5a5696b3140ff58b9 MD5 | raw file
- <?php
- /**
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- *
- */
- class HTML_Template_Flexy_Plugin_Savant {
- /**
- * Output an HTML <a href="">...</a> tag.
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- *
- * @access public
- *
- * @param string $href The URL for the resulting <a href="">...</a> tag.
- *
- * @param string $text The text surrounded by the <a>...</a> tag set.
- *
- * @param string $extra Any "extra" HTML code to place within the <a>
- * opening tag.
- *
- * @return string
- */
-
-
-
- function ahref($href, $text, $extra = null)
- {
- $output = '<a href="' . $href . '"';
-
- if (! is_null($extra)) {
- $output .= ' ' . $extra;
- }
-
- $output .= '>' . $text . '</a>';
-
- return $output;
- }
-
- /**
- *
- * Output a single checkbox <input> element.
-
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $name The HTML "name=" value for the checkbox.
- *
- * @param mixed $value The value of the checkbox if checked.
- *
- * @param mixed $selected Check $value against this; if they match,
- * mark the checkbox as checked.
- *
- * @param string $set_unchecked If null, this will add no HTML to the
- * output. However, if set to any non-null value, the value will be
- * added as a hidden element before the checkbox so that if the
- * checkbox is unchecked, the hidden value will be returned instead
- * of the checked value.
- *
- * @param string $extra Any "extra" HTML code to place within the
- * checkbox element.
- *
- * @return string
- *
- */
- function checkbox(
- $name,
- $value,
- $selected = null,
- $set_unchecked = null,
- $extra = null)
- {
- $html = '';
-
- if (! is_null($set_unchecked)) {
- // this sets the unchecked value of the checkbox.
- $html .= "<input type=\"hidden\" ";
- $html .= "name=\"$name\" ";
- $html .= "value=\"$set_unchecked\" />\n";
- }
-
- $html .= "<input type=\"checkbox\" ";
- $html .= "name=\"$name\" ";
- $html .= "value=\"$value\"";
-
- if ($value == $selected) {
- $html .= " checked=\"checked\"";
- }
-
- $html .= " $extra />";
-
- return $html;
- }
-
- /**
- *
- * Output a set of checkbox <input>s.
- *
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $name The HTML "name=" value of all the checkbox
- * <input>s. The name will get [] appended to it to make it an array
- * when returned to the server.
- *
- * @param array $options An array of key-value pairs where the key is
- * the checkbox value and the value is the checkbox label.
- *
- * @param string $set_unchecked If null, this will add no HTML to the
- * output. However, if set to any non-null value, the value will be
- * added as a hidden element before every checkbox so that if the
- * checkbox is unchecked, the hidden value will be returned instead
- * of the checked value.
- *
- * @param string $sep The HTML text to place between every checkbox
- * in the set.
- *
- * @param string $extra Any "extra" HTML code to place within the
- * checkbox element.
- *
- * @return string
- *
- */
- function checkboxes(
-
- $name,
- $options,
- $selected = array(),
- $set_unchecked = null,
- $sep = "<br />\n",
- $extra = null)
- {
- // force $selected to be an array. this allows multi-checks to
- // have multiple checked boxes.
- settype($selected, 'array');
-
- // the text to be returned
- $html = '';
-
- if (is_array($options)) {
-
- // an iteration counter. we use this to track which array
- // elements are checked and which are unchecked.
- $i = 0;
-
- foreach ($options as $value => $label) {
-
- if (! is_null($set_unchecked)) {
- // this sets the unchecked value of the checkbox.
- $html .= "<input type=\"hidden\" ";
- $html .= "name=\"{$name}[$i]\" ";
- $html .= "value=\"$set_unchecked\" />\n";
- }
-
-
- $html .= "<input type=\"checkbox\" ";
- $html .= "name=\"{$name}[$i]\" ";
- $html .= "value=\"$value\"";
-
- if (in_array($value, $selected)) {
- $html .= " checked=\"checked\"";
- }
-
- if (! is_null($extra)) {
- $html .= " $extra";
- }
-
- $html .= " />$label$sep";
-
- $i++;
- }
- }
-
- return $html;
- }
-
-
- /**
- *
- * Cycle through a series of values based on an iteration number,
- * with optional group repetition.
- *
- * For example, if you have three values in a cycle (a, b, c) the iteration
- * returns look like this:
- *
- * 0 => a
- * 1 => b
- * 2 => c
- * 3 => a
- * 4 => b
- * 5 => c
- *
- * If you repeat each cycle value (a,b,c) 2 times on the iterations,
- * the returns look like this:
- *
- * 0 => a
- * 1 => a
- * 2 => b
- * 3 => b
- * 4 => c
- * 5 => c
- *
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param int $iteration The iteration number for the cycle.
- *
- * @param array $values The values to cycle through.
- *
- * @param int $repeat The number of times to repeat a cycle value.
- *
- * @return string
- *
- */
- function cycle($iteration, $values = null, $repeat = 1)
- {
- settype($values, 'array');
-
- // prevent divide-by-zero errors
- if ($repeat == 0) {
- $repeat = 1;
- }
-
- return $values[($iteration / $repeat) % count($values)];
- }
-
-
- /**
- *
- * Output a formatted date using strftime() conventions.
- *
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $datestring Any date-time string suitable for
- * strtotime().
- *
- * @param string $format The strftime() formatting string.
- *
- * @return string
- *
- */
- function dateformat($datestring, $format = false)
- {
- if ($format === false) {
- $format = isset($this->flexy->options['plugin.dateformat']) ?
- $this->flexy->options['plugin.dateformat'] : '%d %b %Y';
- }
- if (trim($datestring) == '') {
- return '';
- }
-
- $date = strtotime($datestring);
- if ($date > 1) {
- return strftime($format, $date);
- }
- require_once 'Date.php';
- $date = new Date($date);
- return $date->format($format);
-
- }
- /**
- *
- * Output a formatted number using number_format
- *
- *
- *
- * @param string $datestring Any date-time string suitable for
- * strtotime().
- *
- * @param string $format The strftime() formatting string.
- *
- * @return string
- *
- */
- function numberformat($number, $dec=false,$point=false,$thousands=false)
- {
- if (!strlen(trim($number))) {
- return;
- }
- // numberformat int decimals, string dec_point, string thousands_sep
- $dec = ($dec !== false) ? $dec : (
- isset($this->flexy->options['plugin.numberformat.decimals']) ?
- $this->flexy->options['plugin.numberformat.decimals'] : 2
- );
- $point = ($point !== false) ? $point : (
- isset($this->flexy->options['plugin.numberformat.point']) ?
- $this->flexy->options['plugin.numberformat.point'] : '.');
- $thousands = ($thousands !== false) ? $thousands : (
- isset($this->flexy->options['plugin.numberformat.thousands']) ?
- $this->flexy->options['plugin.numberformat.thousands'] : ',');
-
-
- return number_format($number,$dec,$point,$thousands);
- }
-
-
- /**
- *
- * Output an <image ... /> tag.
- *
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $src The image source as a relative or absolute HREF.
- *
- * @param string $link Providing a link will make the image clickable,
- * leading to the URL indicated by $link; defaults to null.
- *
- * @param string $alt Alternative descriptive text for the image;
- * defaults to the filename of the image.
- *
- * @param int $border The border width for the image; defaults to zero.
- *
- * @param int $width The displayed image width in pixels; defaults to
- * the width of the image.
- *
- * @param int $height The displayed image height in pixels; defaults to
- * the height of the image.
- *
- */
-
- function image(
- $src,
- $alt = null,
- $border = 0,
- $width = null,
- $height = null)
- {
- $size = '';
-
- // build the alt tag
- if (is_null($alt)) {
- $alt = basename($src);
- }
-
- $alt = ' alt="' . htmlentities($alt) . '"';
-
- // build the border tag
- $border = ' border="' . htmlentities($border) . '"';
-
- // get the width and height of the image
- if (is_null($width) && is_null($height)) {
-
- if (substr(strtolower($src), 0, 7) == 'http://' ||
- substr(strtolower($src), 0, 8) == 'https://') {
-
- // the image is not on the local filesystem
- $root = '';
-
- } else {
-
- // we need to set a base root path so we can find images on the
- // local file system
- $root = isset($GLOBALS['HTTP_SERVER_VARS']['DOCUMENT_ROOT'])
- ? $GLOBALS['HTTP_SERVER_VARS']['DOCUMENT_ROOT'] . '/'
- : '';
- }
-
- $info = @getimagesize($root . $src);
-
- $width = (is_null($width)) ? $info[0] : $width;
- $height = (is_null($height)) ? $info[1] : $height;
-
- unset($info);
- }
-
- // build the width tag
- if ($width > 0) {
- $size .= ' width="' . htmlentities($width) . '"';
- }
-
- // build the height tag
- if ($height > 0) {
- $size .= ' height="' . htmlentities($height) . '"';
- }
-
- // done!
- return '<img src="' . $src . '"' .
- $alt .
- $border .
- $size .
- ' />';
- }
-
-
- /**
- *
- * Output a single <input> element.
- *
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $type The HTML "type=" value (e.g., 'text',
- * 'hidden', 'password').
- *
- * @param string $name The HTML "name=" value.
- *
- * @param mixed $value The initial value of the input element.
- *
- * @param string $extra Any "extra" HTML code to place within the
- * checkbox element.
- *
- * @return string
- *
- */
-
- function input($type, $name, $value = '', $extra = '')
- {
- $output = "<input type=\"$type\" name=\"$name\" ";
- $output .= "value=\"$value\" $extra />";
- return $output;
- }
-
- /**
- *
- * Output a <script></script> link to a JavaScript file.
- *
- *
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $href The HREF leading to the JavaScript source
- * file.
- *
- * @return string
- *
- */
- function javascript($href)
- {
- return '<script language="javascript" type="text/javascript" src="' .
- $href . '"></script>';
- }
-
- /**
- *
- * Output a value using echo after processing with optional modifier
- * functions.
- *
- * Allows you to pass a space-separated list of value-manipulation
- * functions so that the value is "massaged" before output. For
- * example, if you want to strip slashes, force to lower case, and
- * convert to HTML entities (as for an input text box), you might do
- * this:
- *
- * $this->modify($value, 'stripslashes strtolower htmlentities');
- *
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $value The value to be printed.
- *
- * @param string $functions A space-separated list of
- * single-parameter functions to be applied to the $value before
- * printing.
- *
- * @return string
- *
- */
-
- function modify($value, $functions = null)
- {
- // is there a space-delimited function list?
- if (is_string($functions)) {
-
- // yes. split into an array of the
- // functions to be called.
- $list = explode(' ', $functions);
-
- // loop through the function list and
- // apply to the output in sequence.
- foreach ($list as $func) {
- if (!function_exists($func)) {
- continue;
- }
- // extend this..
- if (!in_array($func, array('htmlspecialchars','nl2br','urlencode'))) {
- continue;
- }
- $value = $func($value);
-
- }
- }
-
- return $value;
- }
-
-
- /**
- *
- * Output a series of HTML <option>s based on an associative array
- * where the key is the option value and the value is the option
- * label. You can pass a "selected" value as well to tell the
- * function which option value(s) should be marked as seleted.
- *
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param array $options An associative array of key-value pairs; the
- * key is the option value, the value is the option lable.
- *
- * @param mixed $selected A string or array that matches one or more
- * option values, to tell the function what options should be marked
- * as selected. Defaults to an empty array.
- *
- * @return string
- *
- */
- function options( $options, $selected = array(), $extra = null)
- {
- $html = '';
-
- // force $selected to be an array. this allows multi-selects to
- // have multiple selected options.
- settype($selected, 'array');
-
- // is $options an array?
- if (is_array($options)) {
-
- // loop through the options array
- foreach ($options as $value => $label) {
-
- $html .= '<option value="' . $value . '"';
- $html .= ' label="' . $label . '"';
-
- if (in_array($value, $selected)) {
- $html .= ' selected="selected"';
- }
-
- if (! is_null($extra)) {
- $html .= ' ' . $extra;
- }
-
- $html .= ">$label</option>\n";
- }
- }
-
- return $html;
- }
-
- /**
- *
- * Output a set of radio <input>s with the same name.
- *
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $name The HTML "name=" value of all the radio <input>s.
- *
- * @param array $options An array of key-value pairs where the key is the
- * radio button value and the value is the radio button label.
- *
- * $options = array (
- * 0 => 'zero',
- * 1 => 'one',
- * 2 => 'two'
- * );
- *
- * @param string $checked A comparison string; if any of the $option
- * element values and $checked are the same, that radio button will
- * be marked as "checked" (otherwise not).
- *
- * @param string $extra Any "extra" HTML code to place within the
- * <input /> element.
- *
- * @param string $sep The HTML text to place between every radio
- * button in the set.
- *
- * @return string
- *
- */
-
- function radios(
- $name,
- $options,
- $checked = null,
- $set_unchecked = null,
- $sep = "<br />\n",
- $extra = null)
- {
- $html = '';
-
- if (is_array($options)) {
-
- if (! is_null($set_unchecked)) {
- // this sets the unchecked value of the
- // radio button set.
- $html .= "<input type=\"hidden\" ";
- $html .= "name=\"$name\" ";
- $html .= "value=\"$set_unchecked\" />\n";
- }
-
- foreach ($options as $value => $label) {
- $html .= "<input type=\"radio\" ";
- $html .= "name=\"$name\" ";
- $html .= "value=\"$value\"";
-
- if ($value == $checked) {
- $html .= " checked=\"checked\"";
- }
- $html .= " $extra />$label$sep";
- }
- }
-
- return $html;
- }
-
- /**
- *
- * Output a <link ... /> to a CSS stylesheet.
- *
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $href The HREF leading to the stylesheet file.
- *
- * @return string
- *
- */
-
- function stylesheet($href)
- {
- return '<link rel="stylesheet" type="text/css" href="' .
- $href . '" />';
- }
-
-
-
- /**
- *
- * Output a single <textarea> element.
- *
- * @license http://www.gnu.org/copyleft/lesser.html LGPL
- *
- * @author Paul M. Jones <pmjones@ciaweb.net>
- *
- * @package Savant
- *
- * @version $Id: Savant.php,v 1.7 2005/05/14 03:39:11 alan_k Exp $
- *
- * @access public
- *
- * @param string $name The HTML "name=" value.
- *
- * @param string $text The initial value of the textarea element.
- *
- * @param int $tall How many rows tall should the area be?
- *
- * @param mixed $wide The many columns wide should the area be?
- *
- * @param string $extra Any "extra" HTML code to place within the
- * checkbox element.
- *
- * @return string
- *
- */
-
- function textarea($name, $text, $tall = 24, $wide = 80, $extra = '')
- {
- $output = "<textarea name=\"$name\" rows=\"$tall\" ";
- $output .= "cols=\"$wide\" $extra>$text</textarea>";
- return $output;
- }
- }