示例#1
0
 /**
  * Class constructor
  *
  * Possible keys in $data array are:
  *  - 'messageProvider': an instance of a class implementing
  *    HTML_QuickForm2_MessageProvider interface, this will be used to get
  *    localized error messages. Default will be used if not given.
  *  - 'language': language to display error messages in, will be passed to
  *    message provider.
  *  - 'errorMessages': (DEPRECATED, use messageProvider) an array of error
  *    messages with the following format
  *    <pre>
  *      'language code 1' => array(
  *         UPLOAD_ERR_... => 'message',
  *         ...
  *         UPLOAD_ERR_... => 'message'
  *      ),
  *      ...
  *      'language code N' => array(
  *         ...
  *      )
  *    </pre>
  *    Note that error messages for UPLOAD_ERR_INI_SIZE and UPLOAD_ERR_FORM_SIZE
  *    may contain '%d' placeholders that will be automatically replaced by the
  *    appropriate size limits. Note also that you don't need to provide messages
  *    for every possible error code in the arrays, you may e.g. override just
  *    one error message for a particular language.
  *
  * @param    string  Element name
  * @param    mixed   Attributes (either a string or an array)
  * @param    array   Data used to set up error messages for PHP's file
  *                   upload errors.
  */
 public function __construct($name = null, $attributes = null, array $data = array())
 {
     // Using deprecated 'errorMessages' key, let's keep this separate to remove later
     if (isset($data['errorMessages'])) {
         HTML_QuickForm2_Loader::loadClass('HTML_QuickForm2_MessageProvider_Default');
         $this->messageProvider = HTML_QuickForm2_MessageProvider_Default::getInstance();
         // neither array_merge() nor array_merge_recursive will do
         foreach ($data['errorMessages'] as $lang => $ary) {
             foreach ($ary as $code => $message) {
                 $this->messageProvider->set(array('file', $code), $lang, $message);
             }
         }
     } elseif (isset($data['messageProvider'])) {
         if (!is_callable($data['messageProvider']) && !$data['messageProvider'] instanceof HTML_QuickForm2_MessageProvider) {
             throw new HTML_QuickForm2_InvalidArgumentException("messageProvider: expecting a callback or an implementation" . " of HTML_QuickForm2_MessageProvider");
         }
         $this->messageProvider = $data['messageProvider'];
     } else {
         HTML_QuickForm2_Loader::loadClass('HTML_QuickForm2_MessageProvider_Default');
         $this->messageProvider = HTML_QuickForm2_MessageProvider_Default::getInstance();
     }
     if (isset($data['language'])) {
         $this->language = $data['language'];
     }
     unset($data['messageProvider'], $data['errorMessages'], $data['language']);
     parent::__construct($name, $attributes, $data);
 }
示例#2
0
 /**
  * Class constructor
  *
  * The following keys may appear in $data array:
  * - 'messageProvider': a callback or an instance of a class implementing
  *   HTML_QuickForm2_MessageProvider interface, this will be used to get
  *   localized names of months and weekdays. Some of the default ones will
  *   be used if not given.
  * - 'language': date language, use 'locale' here to display month / weekday
  *   names according to the current locale.
  * - 'format': Format of the date, based on PHP's date() function.
  *   The following characters are currently recognised in format string:
  *   <pre>
  *       D => Short names of days
  *       l => Long names of days
  *       d => Day numbers
  *       M => Short names of months
  *       F => Long names of months
  *       m => Month numbers
  *       Y => Four digit year
  *       y => Two digit year
  *       h => 12 hour format
  *       H => 24 hour format
  *       i => Minutes
  *       s => Seconds
  *       a => am/pm
  *       A => AM/PM
  *   </pre>
  * - 'minYear': Minimum year in year select
  * - 'maxYear': Maximum year in year select
  * - 'addEmptyOption': Should an empty option be added to the top of
  *    each select box?
  * - 'emptyOptionValue': The value passed by the empty option.
  * - 'emptyOptionText': The text displayed for the empty option.
  * - 'optionIncrement': Step to increase the option values by (works for 'i' and 's')
  * - 'minHour': Minimum hour in hour select (only for 24 hour format!)
  * - 'maxHour': Maximum hour in hour select (only for 24 hour format!)
  * - 'minMonth': Minimum month in month select
  * - 'maxMonth': Maximum month in month select
  *
  * @param    string  Element name
  * @param    mixed   Attributes (either a string or an array)
  * @param    array   Element data (label, options and data used for element creation)
  */
 public function __construct($name = null, $attributes = null, array $data = array())
 {
     if (isset($data['messageProvider'])) {
         if (!is_callable($data['messageProvider']) && !$data['messageProvider'] instanceof HTML_QuickForm2_MessageProvider) {
             throw new HTML_QuickForm2_InvalidArgumentException("messageProvider: expecting a callback or an implementation" . " of HTML_QuickForm2_MessageProvider");
         }
         $this->messageProvider = $data['messageProvider'];
     } else {
         if (isset($data['language']) && 'locale' == $data['language']) {
             HTML_QuickForm2_Loader::loadClass('HTML_QuickForm2_MessageProvider_Strftime');
             $this->messageProvider = new HTML_QuickForm2_MessageProvider_Strftime();
         } else {
             HTML_QuickForm2_Loader::loadClass('HTML_QuickForm2_MessageProvider_Default');
             $this->messageProvider = HTML_QuickForm2_MessageProvider_Default::getInstance();
         }
     }
     if (isset($data['language'])) {
         $this->language = $data['language'];
     }
     unset($data['messageProvider'], $data['language']);
     // http://pear.php.net/bugs/bug.php?id=18171
     $this->data['maxYear'] = date('Y');
     parent::__construct($name, $attributes, $data);
     $backslash = false;
     $separators = array();
     $separator = '';
     for ($i = 0, $length = strlen($this->data['format']); $i < $length; $i++) {
         $sign = $this->data['format'][$i];
         if ($backslash) {
             $backslash = false;
             $separator .= $sign;
         } else {
             $loadSelect = true;
             switch ($sign) {
                 case 'D':
                     // Sunday is 0 like with 'w' in date()
                     $options = $this->messageProvider instanceof HTML_QuickForm2_MessageProvider ? $this->messageProvider->get(array('date', 'weekdays_short'), $this->language) : call_user_func($this->messageProvider, array('date', 'weekdays_short'), $this->language);
                     break;
                 case 'l':
                     $options = $this->messageProvider instanceof HTML_QuickForm2_MessageProvider ? $this->messageProvider->get(array('date', 'weekdays_long'), $this->language) : call_user_func($this->messageProvider, array('date', 'weekdays_long'), $this->language);
                     break;
                 case 'd':
                     $options = $this->createOptionList(1, 31);
                     break;
                 case 'M':
                 case 'm':
                 case 'F':
                     $options = $this->createOptionList($this->data['minMonth'], $this->data['maxMonth'], $this->data['minMonth'] > $this->data['maxMonth'] ? -1 : 1);
                     if ('M' == $sign || 'F' == $sign) {
                         $key = 'M' == $sign ? 'months_short' : 'months_long';
                         $names = $this->messageProvider instanceof HTML_QuickForm2_MessageProvider ? $this->messageProvider->get(array('date', $key), $this->language) : call_user_func($this->messageProvider, array('date', $key), $this->language);
                         foreach ($options as $k => &$v) {
                             $v = $names[$k - 1];
                         }
                     }
                     break;
                 case 'Y':
                     $options = $this->createOptionList($this->data['minYear'], $this->data['maxYear'], $this->data['minYear'] > $this->data['maxYear'] ? -1 : 1);
                     break;
                 case 'y':
                     $options = $this->createOptionList($this->data['minYear'], $this->data['maxYear'], $this->data['minYear'] > $this->data['maxYear'] ? -1 : 1);
                     array_walk($options, create_function('&$v,$k', '$v = substr($v,-2);'));
                     break;
                 case 'h':
                     $options = $this->createOptionList(1, 12);
                     break;
                 case 'g':
                     $options = $this->createOptionList(1, 12);
                     array_walk($options, create_function('&$v,$k', '$v = intval($v);'));
                     break;
                 case 'H':
                     $options = $this->createOptionList($this->data['minHour'], $this->data['maxHour'], $this->data['minHour'] > $this->data['maxHour'] ? -1 : 1);
                     break;
                 case 'i':
                     $options = $this->createOptionList(0, 59, $this->data['optionIncrement']['i']);
                     break;
                 case 's':
                     $options = $this->createOptionList(0, 59, $this->data['optionIncrement']['s']);
                     break;
                 case 'a':
                     $options = array('am' => 'am', 'pm' => 'pm');
                     break;
                 case 'A':
                     $options = array('AM' => 'AM', 'PM' => 'PM');
                     break;
                 case 'W':
                     $options = $this->createOptionList(1, 53);
                     break;
                 case '\\':
                     $backslash = true;
                     $loadSelect = false;
                     break;
                 default:
                     $separator .= ' ' == $sign ? '&nbsp;' : $sign;
                     $loadSelect = false;
             }
             if ($loadSelect) {
                 if (0 < count($this)) {
                     $separators[] = $separator;
                 }
                 $separator = '';
                 // Should we add an empty option to the top of the select?
                 if (!is_array($this->data['addEmptyOption']) && $this->data['addEmptyOption'] || is_array($this->data['addEmptyOption']) && !empty($this->data['addEmptyOption'][$sign])) {
                     // Using '+' array operator to preserve the keys
                     if (is_array($this->data['emptyOptionText']) && !empty($this->data['emptyOptionText'][$sign])) {
                         $options = array($this->data['emptyOptionValue'] => $this->data['emptyOptionText'][$sign]) + $options;
                     } else {
                         $options = array($this->data['emptyOptionValue'] => $this->data['emptyOptionText']) + $options;
                     }
                 }
                 $this->addSelect($sign, array('id' => self::generateId($this->getName() . "[{$sign}]")) + $this->getAttributes())->loadOptions($options);
             }
         }
     }
     $separators[] = $separator . ($backslash ? '\\' : '');
     $this->setSeparator($separators);
 }
 /**
  * Class constructor
  *
  * Possible keys in $data array are:
  *  - 'messageProvider': an instance of a class implementing
  *    HTML_QuickForm2_MessageProvider interface, this will be used to get
  *    localized error messages. Default will be used if not given.
  *  - 'language': language to display error messages in, will be passed to
  *    message provider.
  *
  * @param string       $name       Element name
  * @param string|array $attributes Attributes (either a string or an array)
  * @param array        $data       Data used to set up error messages for PHP's
  *                                 file upload errors.
  */
 public function __construct($name = null, $attributes = null, array $data = array())
 {
     if (isset($data['messageProvider'])) {
         if (!is_callable($data['messageProvider']) && !$data['messageProvider'] instanceof HTML_QuickForm2_MessageProvider) {
             throw new HTML_QuickForm2_InvalidArgumentException("messageProvider: expecting a callback or an implementation" . " of HTML_QuickForm2_MessageProvider");
         }
         $this->messageProvider = $data['messageProvider'];
     } else {
         HTML_QuickForm2_Loader::loadClass('HTML_QuickForm2_MessageProvider_Default');
         $this->messageProvider = HTML_QuickForm2_MessageProvider_Default::getInstance();
     }
     if (isset($data['language'])) {
         $this->language = $data['language'];
     }
     unset($data['messageProvider'], $data['language']);
     parent::__construct($name, $attributes, $data);
 }
示例#4
0
文件: Default.php 项目: grlf/eyedock
 /**
  * Returns Singleton instance
  *
  * @return HTML_QuickForm2_MessageProvider_Default
  */
 public static function getInstance()
 {
     if (empty(self::$instance)) {
         self::$instance = new self();
     }
     return self::$instance;
 }