/** * Construit le bouton submit avec l'aide du helper de vue de Zend * @brief construit et décore un bouton submit * @author francoisespinet * @param Zend_Form_Element_Submit $oElement */ protected function buildSubmit(Zend_Form_Element_Submit $oElement) { //on ajoute la classe bouton au classes déjaprésentes $sClass = $oElement->getAttrib('class'); $oElement->setAttrib('class', Projet_DataHelper::concatMots($sClass, trim(CSS_BUTTON))); // $oButton = new Symbol_Button('', $oElement->getValue()); // $oButton->setData($oElement->renderViewHelper()); // return $oButton->render(); return $oElement->renderViewHelper(); }
/** @brief calcul automatique du nom de la resource associé à la route * * Si la resource a été spécifié dans le navigation, le calcul n'est pas effectué * Utilisation de Projet_DataHelper::resource pour calculer le nom de la ressource. * * !! La route doit avoir la méthode getDefaults * * @see Projet_DataHelper::resource * @return le nom de la ressource, ou null, si la page n'a pas de route */ public function getResource() { if ($this->_resource) { // si la ressource a été définie explicitement on la renvoie return $this->_resource; } elseif ($this->_route) { $oRoute = Zend_Controller_Front::getInstance()->getRouter()->getRoute($this->_route); // la route doit avoir la méthode getDefaults $aDefaults = $oRoute->getDefaults(); // on suppose que le tableau defaults comprend le module, controller, action return $this->_resource = Projet_DataHelper::resource($aDefaults['module'], $aDefaults['controller'], $aDefaults['action']); } else { return null; } }
public function preDispatch(Zend_Controller_Request_Abstract $request) { /* // qu'on puisse tester directement le profil // Le profil est sauvegardé alors en session if ($request->getParam(IDENTITE_ID_PROFIL) && APP_ENV != 'production') { $nRole = $request->getParam(IDENTITE_ID_PROFIL); Projet_Acl_Acl::setDefaultRole($nRole); Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole($nRole); $oIdent[IDENTITE_ID_PROFIL] = $nRole; $this->_auth->getStorage()->write($oIdent); } else */ # if (is_array($oIdent) && array_key_exists(IDENTITE_ID_PROFIL, $oIdent)) { # $nRole = $oIdent[IDENTITE_ID_PROFIL]; # } else { # $nRole = 2; # } // On intercepte le nom de la ressource (controller) et du privilège demandé (action). $sModule = $request->getModuleName(); $sController = $request->getControllerName(); $sAction = $request->getActionName(); // La ressource n'existe pas. // commenté car la ressource est créé automatiquement si on ne l'a pas déclaré dans acl.ini # if (!$this->_acl->has($sResource)) { # $this->_controller->gotoSimple(self::FAIL_ACL_ACTION, self::FAIL_ACL_CONTROLLER, self::FAIL_ACL_MODULE, array("messageWarn" => 1)); # } // TODO: vérifier qu'on est pas sur la route d'authentification // Le profil utilisé n'existe pas ou n'est pas reconnu par l'application. # if (!$this->_acl->hasRole($nRole) ) { # $this->_controller->gotoRouteAndExit(array("messageWarn" => 2), self::FAIL_AUTH_ROUTE); # } # if (!$sModule || !$sController || !$sAction) { # return; # $this->_controller->gotoRouteAndExit(array("messageWarn" => 4), self::FAIL_ROUTE); # } // La ressource demandée n'est pas accessible pour ce role avec ces privilèges. if (!Projet_Acl_Acl::defaultIsAllowed(Projet_DataHelper::resource($sModule, $sController, $sAction))) { // si requête ajax if ($request->isXmlHttpRequest()) { die(Projet_DataHelper::translate(self::CLE_FAIL_ACL)); } Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->setNamespace('warning')->addMessage(self::CLE_FAIL_ACL); $this->_controller->gotoRouteAndExit(array(), self::FAIL_ACL_ROUTE); } }
/** * @brief Construit une liste d'élement de boites à cocher * * !! ne construit pas les fioritures autour de la liste * * @see Projet_Form_Decorator_Abstract::render_element() * @author francoisespinet * @version 12 mars 2012 - 15:15:09 * */ public function render($sContent) { $oElement = $this->getElement(); //le nom du champ $sName = $oElement->getName(); //indexe pour savoir quelle box est traitée $i = 0; //differentes box à construire $aOptions = $oElement->getMultiOptions(); if (count($aOptions) == 0) { return $sContent . Projet_DataHelper::translate('message.noChoix.short'); } //le nombre de box à construire $nBoxes = count($aOptions); //les box qui doivent être cochées $aActive = $oElement->getValue(); //création de la table pour l'alignement $sTable = "<table cellspacing=2px align=left id=MultiCheckBox-{$sName} class='MultiCheckBox'>"; //Creation de la première ligne pour initialisation $oRow = new Projet_Xml('tr'); //parcours des boites a cocher demandées foreach ($aOptions as $iValue => $sOption) { $i++; //traitement de la ième box //création de la cellule $sCell = "<td>"; //on construit l'input (la boite à cocher), on lui met un id pour la reconnaitre $oInput = new Projet_Xml('input', array('name' => $sName . "[]", 'type' => 'checkbox', 'value' => $iValue, 'id' => $sName . "-" . $iValue)); //si elle doit être cochée, on la coche if ($aActive !== null && in_array($iValue, $aActive)) { $oInput->setAttr('checked', 'checked'); } //on construit le label $oLabel = new Projet_Xml('label', array('for' => $sName . "[]"), $sOption); //on ajoute le tout à la cellule courante $sCell .= $oInput->render() . $oLabel->render() . "</td>"; //$oLabel->append($oInput); //$sCell .= $oLabel->render(); /* Paramètre d'auto formattage, sauf si spécifié différement, il est true par default * si on demamde un 'boxinline' alors les éléments seront rendus en ligne, de sorte à prendre le moins de place verticalement * si on ne le demande pas, les éléments seront rendus en colone, de sorte à minimiser l'espace horizontal */ if ($this->autoFormatList) { if ($oElement->getInline()) { if ($i % self::NUMBER_COLS == 0 || $nBoxes < self::NUMBER_COLS || $i == $nBoxes) { //si on est au nombre de colones requis, alors on pass à une autre ligne en ajoutant l'actuelle à la table $oRow->addData($sCell); $sTable .= $oRow->render(); $oRow = new Projet_Xml('tr'); } else { //sinon on ajoute une cellule $oRow->append($sCell); } } elseif (!$oElement->getInline()) { if ($i % ($nBoxes % self::NUMBER_LIGNES + 1) == 0 || $nBoxes < self::NUMBER_LIGNES || $i == $nBoxes) { /* * Le nombre de lignes est limité pour des raisons esthétiques (colone trop longues) * aussi le nombre de colones est-il calculé pour remplir le tableau * Le comportement est le même de précedement */ $oRow->append($sCell); $sTable .= $oRow->render(); $oRow = new Projet_Xml('tr'); } else { $oRow->append($sCell); } } } //on réinitialise la cellule $sCell = ''; } $sTable .= "</table>"; //on ajoute un span pour que les élément encapsulants soient de la bonne taille $oSpan = new Projet_Xml('span', array(), $sTable); $oSpan->setAttrs(array('style' => 'display:inline-block')); //on renvoie le tout return $sContent . $oSpan->render(); }
/** @brief ajoute les clés de language en javascript pour traduire le dataTable */ protected function appendTranslate() { $this->view->headScript()->appendFile(SCRIPTS_PATH . '/projet/dataTable/language-' . Projet_DataHelper::getLocation() . '.js'); }
/** @brief Formatage d'un champ DATETIME. * Méthode permettant de générer une chaîne formatée pour enregistrer un datetime en base de données. * @li Prend en charge la localisation de l'interface de l'utilisateur courante. * @param string $pDatetime : chaîne de caractères représentant un DATETIME. */ public function PDO_datetimeFormat($pDatetime = null) { // Récupération de la date selon l'interface utilisateur $oDate = new Zend_Date($pDatetime, null, Projet_DataHelper::getLocation()); // Formatage en fonction de l'adapter de la base de données if (strtoupper(APP_PDO_ADAPTER) == "PDO_OCI") { // Formatage exploitable avec PDO_OCI $sFormat = new Zend_Db_Expr("TO_TIMESTAMP('" . $oDate->toString(self::DATETIME_FORMAT, null, 'fr') . "', 'YYYY-MM-DD HH24:MI:SS')"); } else { // Formatage exploitable avec PDO_MYSQL $sFormat = new Zend_Db_Expr("DATE_FORMAT('" . $oDate->toString(self::DATETIME_FORMAT, null, 'fr') . "', '%Y%m%d%H%i%s')"); } // Renvoi du format DATETIME return $sFormat; }