示例#1
0
文件: SearchForm.php 项目: arhe/pwak
 /**
  * Ajoute un element de type creneau de date
  *
  * @access public
  * @param  $begin array pour construire le 1er widget de date
  * @param  $end array pour construire le 2nd widget de date
  * @param  $defaultValues array valeurs par defaut
  * @return void
  */
 public function addDate2DateElement($begin, $end, $defaultValues)
 {
     /*  Construction du formulaire  */
     // L'affichage depend de la langue du user connecte
     if (!isset($begin['Format']['language'])) {
         $begin['Format']['language'] = I18N::getLocaleCode(true);
     }
     if (!isset($begin['Format']['format'])) {
         $begin['Format']['format'] = I18N::getHTMLSelectDateFormat();
     }
     if (!isset($begin['Label'])) {
         $begin['Label'] = _('From');
     }
     if (!isset($begin['Format']['minYear'])) {
         $begin['Format']['minYear'] = date('Y') - 5;
     }
     if (!isset($begin['Format']['maxYear'])) {
         $begin['Format']['maxYear'] = date('Y') + 5;
     }
     /////
     if (!isset($end['Format']['language'])) {
         $end['Format']['language'] = I18N::getLocaleCode(true);
     }
     if (!isset($end['Format']['format'])) {
         $end['Format']['format'] = I18N::getHTMLSelectDateFormat();
     }
     if (!isset($end['Label'])) {
         $end['Label'] = _(' to ');
     }
     if (!isset($end['Format']['minYear'])) {
         $end['Format']['minYear'] = date('Y') - 5;
     }
     if (!isset($end['Format']['maxYear'])) {
         $end['Format']['maxYear'] = date('Y') + 5;
     }
     $addInstruction = "\$this->_form->addElement('date', \$begin['Name'], \$begin['Label'], \$begin['Format']);";
     $addInstruction .= "\$this->_form->addElement('date', \$end['Name'], \$end['Label'], \$end['Format']);";
     eval($addInstruction);
     // le type est dynamique, pour lier ensemble les 2 criteres begin et end
     $types = array_values($this->_elementsToDisplay);
     $nbTypeDate2Date = 0;
     for ($i = 0; $i < count($types); $i++) {
         if (!(false === strpos($types[$i], 'date2date'))) {
             $nbTypeDate2Date += 1;
         }
     }
     $Date2DateIndex = $nbTypeDate2Date / 2 + 1;
     $this->_elementsToDisplay[$begin['Name']] = 'date2date' . $Date2DateIndex;
     $this->_elementsToDisplay[$end['Name']] = 'date2date' . $Date2DateIndex;
     $Default = $this->getDefaultValues();
     // affiche le form avec les valeurs par defaut
     $this->setDefaultValues(array_merge($Default, $defaultValues));
     $smarty = $this->_smarty;
     $smarty->assign('DisplayDate' . $Date2DateIndex, 'none');
     /*  Traitement special pour les creneaux de date  */
     $FilterComponentArray = array();
     if (isset($_REQUEST['DateOrder' . $Date2DateIndex]) || isset($_SESSION['DateOrder' . $Date2DateIndex]) && (!isset($_REQUEST['formSubmitted']) && !$this->isFirstArrival())) {
         $FilterComponentArray = $this->getDate2DateFilterComponent($Date2DateIndex, $begin, $end);
     }
     // n'est pas vide si des creneaux de date
     $initFilterComponentArray = $this->_filterComponentArray;
     $this->_filterComponentArray = array_merge($initFilterComponentArray, $FilterComponentArray);
 }
示例#2
0
文件: Server.php 项目: arhe/pwak
 /**
  * Change ou défini la locale en session.
  *
  * @param array $array
  * @access public
  * @return string
  */
 protected function setLocale($method, $params)
 {
     $this->auth();
     $this->log('XmlRpcServer::setLocale called');
     I18N::setLocale($params[0]);
     $_SESSION['locale'] = $params[0];
     return I18N::getLocaleCode();
 }
示例#3
0
 /**
  * Retourne un objet HTML_QuickForm_Element construit avec les paramètres
  * passés.
  *
  * @access private
  * @param string $name le nom de l'attribut
  * @param string $ename le nom de l'élément de formulaire correspondant
  * @param string $type le type de l'attribut
  * @param string $label le label de l'élément de formulaire
  * @param array $opts un tableau d'options pour l'élément de formulaire
  * @param bool $req determine si l'élément est requis
  * @param bool $ipe determine si l'élément fkey doit être édité dans le form
  * @param bool $aeButton determine si l'élément fkey doit utiliser un bouton addedit
  * @return object HTML_QuickForm_Element
  */
 private function _createElement($name, $ename, $type, $label, $opts, $req, $ipe, $aeButton)
 {
     $ret = array();
     $opts['id'] = $ename;
     $labelWithSemiColon = $label . ': ';
     if ($type == Object::TYPE_FKEY) {
         // type fkey: on construit un select
         $objPropertiesArray = $this->object->getProperties();
         $className = $objPropertiesArray[$name];
         require_once MODELS_DIR . '/' . $className . '.php';
         $tmpobject = new $className();
         $getter = 'get' . $name . 'Id';
         $objID = $this->object->{$getter}();
         // denormalized forms
         if ($ipe) {
             $customFileName = CUSTOM_CONTROLLER_DIR . '/' . $className . 'AddEdit.php';
             if (file_exists(PROJECT_ROOT . '/' . LIB_DIR . '/' . $customFileName)) {
                 require_once $customFileName;
                 $class = $className . 'AddEdit';
             } else {
                 $class = 'GenericAddEdit';
             }
             $this->innerForm = new $class(array('clsname' => $className, 'id' => $objID, 'return_url' => $this->guessReturnURL(), 'profiles' => $this->profiles));
             $this->innerForm->parentForm = $this;
             $this->innerForm->initialize();
             $this->innerForm->render();
             $mapping = array_keys($tmpobject->getMapping());
             $this->form->addElement('hidden', $ename . '_ID', $objID);
             $ret[] = HTML_QuickForm::createElement('header', $ename, $label);
             foreach ($this->innerForm->formDefaults as $k => $v) {
                 $elt = $this->innerForm->form->getElement($k . '_Group');
                 if ($elt instanceof HTML_QuickForm_Element) {
                     $ret[] = $elt;
                 }
                 $elt = $this->innerForm->form->getElement($k);
                 if ($elt instanceof HTML_QuickForm_Element) {
                     $ret[] = $elt;
                 }
                 $this->formDefaults[$k] = $v;
             }
         } else {
             $toStringAttribute = call_user_func(array($tmpobject, 'getToStringAttribute'));
             $sortOrderField = is_array($toStringAttribute) ? $toStringAttribute[0] : $toStringAttribute;
             $fGetter = 'getFilterFor' . $name;
             $filter = method_exists($this, $fGetter) ? $this->{$fGetter}() : array();
             $arr = SearchTools::createArrayIDFromCollection($className, $filter, $req ? '' : MSG_SELECT_AN_ELEMENT, 'toString', array($sortOrderField => SORT_ASC));
             $ename .= '_ID';
             $opts['id'] = $ename;
             if ($aeButton && $this->action != self::FEATURE_VIEW) {
                 $opts['class'] = 'select_with_add_button';
                 $ret[] = HTML_QuickForm::createElement('select', $ename, $labelWithSemiColon, $arr, $opts);
                 $retURL = urlencode(sprintf('%s?action=%s&entity=%s&objID=%d', $_SERVER['PHP_SELF'], $this->action, $this->altname, $this->objID));
                 $url = sprintf('dispatcher.php?entity=%s&action=add&retURL=%s&fromEntity=%s', $className, $retURL, $this->clsname . ':' . $name);
                 $ret[] = HTML_QuickForm::createElement('button', 'addButton' . $name, A_ADD, 'id="addButton' . $name . '" class="button" onclick="' . 'this.form.redirectURL.value=\'' . $url . '\';' . 'this.form.fromAddButton.value=1;this.form.submit();"');
             } else {
                 $opts['class'] = 'select';
                 $ret[] = HTML_QuickForm::createElement('select', $ename, $labelWithSemiColon, $arr, $opts);
             }
         }
     } else {
         if ($type == Object::TYPE_CONST) {
             // type constante: on construit un select aussi
             $method = sprintf('get%sConstArray', $name);
             $arr = call_user_func(array($this->clsname, $method));
             $opts['class'] = 'select';
             $ret[] = HTML_QuickForm::createElement('select', $ename, $labelWithSemiColon, $arr, $opts);
         } else {
             if (in_array($type, array(Object::TYPE_DATE, Object::TYPE_DATETIME))) {
                 // type date ou datetime: un calendrier
                 require_once 'HTML/QuickForm/jscalendar.php';
                 $options = array('baseURL' => 'js/jscalendar/', 'styleCss' => JSCALENDAR_DEFAULT_CSS, 'language' => I18N::getLocaleCode(true), 'setup' => array('inputField' => $ename, 'button' => $ename . '_calendar_trigger', 'displayArea' => 'displayed' . $ename, 'ifFormat' => '%Y-%m-%d', 'daFormat' => '\'+Calendar._TT["DEF_DATE_FORMAT"]+\'' . ($type == Object::TYPE_DATETIME ? ' %H:%M' : ''), 'showsTime' => $type == Object::TYPE_DATETIME ? true : false, 'showOthers' => true));
                 $attributes = array('readonly' => 'readonly', 'class' => 'ReadOnlyField', 'rows' => 1, 'style' => 'width:30%;height:14px;', 'id' => 'displayed' . $ename);
                 $ret[] = HTML_QuickForm::createElement('hidden', $ename, null, array('id' => $ename));
                 // vu que jscalendar utilise innerhtml, on ne peut mettre ici un input text
                 // Du coup, ce 'bidouillage' avec un textarea
                 $ret[] = HTML_QuickForm::createElement('textarea', 'displayed' . $ename, null, $attributes);
                 /*$ret[] = HTML_QuickForm::createElement('static', 'displayed'.$ename, null,
                   '<span id="displayed'. $ename . '" name="displayed'. $ename . '" style="border: 1px dotted rgb(0, 0, 0); margin: 3px; padding: 3px; background-color: rgb(225, 232, 239); text-align: right;">toto</span>' );*/
                 $ret[] = HTML_QuickForm::createElement('button', $ename . '_calendar_trigger', '...', array('title' => _('Select a date'), 'id' => $ename . '_calendar_trigger', 'class' => 'button'));
                 $ret[] = HTML_QuickForm::createElement('jscalendar', $ename . '_calendar', null, $options);
             } else {
                 if ($type == Object::TYPE_TIME) {
                     $fmt = array('language' => I18N::getLocaleCode(true), 'format' => 'H:i');
                     $opts['class'] = 'datetime';
                     $ret[] = HTML_QuickForm::createElement('date', $ename, $labelWithSemiColon, $fmt, $opts);
                 } else {
                     if (in_array($type, array(Object::TYPE_TEXT, Object::TYPE_I18N_TEXT, Object::TYPE_LONGTEXT))) {
                         // type texte ou longtext: un textarea
                         $opts['rows'] = 10;
                         $opts['cols'] = 40;
                         $opts['class'] = 'textarea';
                         $ret[] = HTML_QuickForm::createElement('textarea', $ename, $labelWithSemiColon, $opts);
                     } else {
                         if ($type == Object::TYPE_BOOL) {
                             $opts['id'] = $ename . '_0';
                             $ret[] = HTML_QuickForm::createElement('radio', $ename, $labelWithSemiColon, A_YES, 1, $opts);
                             $opts['id'] = $ename . '_1';
                             $ret[] = HTML_QuickForm::createElement('radio', $ename, $labelWithSemiColon, A_NO, 0, $opts);
                         } else {
                             if ($type == Object::TYPE_PASSWORD) {
                                 $opts['value'] = "this.value='" . self::PW_NOCHG . "';";
                                 $ret[] = HTML_QuickForm::createElement('password', $ename, $labelWithSemiColon, $opts);
                                 $opts['id'] = $ename . '_Again';
                                 $label = $label . ' (' . _('confirm') . ')';
                                 $ret[] = HTML_QuickForm::createElement('password', $opts['id'], $labelWithSemiColon, $opts);
                             } elseif ($type == Object::TYPE_MANYTOMANY) {
                                 require_once 'HTML/QuickForm/advmultiselect.php';
                                 // type many2many: on construit deux selects avec advmultiselect
                                 $objPropertiesArray = $this->object->getProperties();
                                 $className = $this->links[$name]['linkClass'];
                                 //objPropertiesArray[$name];
                                 require_once MODELS_DIR . '/' . $className . '.php';
                                 $tmpobject = new $className();
                                 $toStringAttribute = call_user_func(array($tmpobject, 'getToStringAttribute'));
                                 $sortOrderField = is_array($toStringAttribute) ? $toStringAttribute[0] : $toStringAttribute;
                                 $toString = is_array($toStringAttribute) ? 'toString' : $toStringAttribute;
                                 $filterGetter = 'getFilterFor' . $name;
                                 if (method_exists($this, $filterGetter)) {
                                     $filter = $this->{$filterGetter}();
                                 } else {
                                     $filter = array();
                                 }
                                 $arr = SearchTools::createArrayIDFromCollection($className, $filter, '', $toString, array($sortOrderField => SORT_ASC));
                                 $opts['size'] = 8;
                                 $opts['style'] = 'width:100%;';
                                 $ret[] = HTML_QuickForm::createElement('advmultiselect', $ename, array($label, $label, ''), $arr, $opts);
                             } elseif (in_array($type, array(Object::TYPE_FILE, Object::TYPE_IMAGE, Object::TYPE_FILE_UPLOAD))) {
                                 $opts['class'] = 'textfield';
                                 $ret[] = HTML_QuickForm::createElement('file', $ename, $labelWithSemiColon, $opts);
                             } elseif ($type == Object::TYPE_HTML || $type == Object::TYPE_I18N_HTML) {
                                 // type html: un editeur wysiwyg
                                 // lib: HTML_QuickForm_Element_tinymce
                                 require_once 'HTML/QuickForm/tinymce.php';
                                 $options = array('baseURL' => 'js/tinymce/jscripts/tiny_mce/', 'configFile' => 'js/tinymce.inc.js');
                                 $opts['class'] = 'mceEditor';
                                 $ret[] = HTML_QuickForm::createElement('tinymce', $ename, $labelWithSemiColon, $options, $opts);
                             } elseif ($type == Object::TYPE_HEXACOLOR) {
                                 // type hexacolor: un colorpicker
                                 $this->addJSRequirements('js/colorpicker.js');
                                 require_once 'HTML/QuickForm/colorpicker.php';
                                 $ret[] = HTML_QuickForm::createElement('colorpicker', $ename, $labelWithSemiColon, array(), $opts);
                             } else {
                                 // les autres types sont des textfield
                                 $opts['class'] = 'textfield';
                                 $ret[] = HTML_QuickForm::createElement('text', $ename, $labelWithSemiColon, $opts);
                             }
                         }
                     }
                 }
             }
         }
     }
     if (!$ipe) {
         foreach ($ret as $elt) {
             if ($req) {
                 $elt->setAttribute('class', $elt->getAttribute('class') . ' required_element');
             }
         }
     }
     return $ret;
 }