opac_websubscribe_valid_limit = $opac_websubscribe_valid_limit; } return self::$emprunteurs_datas[$id_empr]; } static public function get_captcha($input_name = 'captcha_code') { global $base_path, $lang; $_SESSION['captcha_lang'] = $lang; //on envoie la lang de l'opac à securimage $options = array(); $options['input_name'] = $input_name; $options['securimage_path'] = $base_path . "/includes/securimage"; $options['disable_flash_fallback'] = false; //$options['refresh_alt_text'] = $msg['captcha_reload']; //$options['refresh_title_text'] = $msg['captcha_reload']; $options['input_text'] = ''; $options['show_text_input'] = 0; return '' . Securimage::getCaptchaHtml($options); } /** * Ré-initialisation du singleton emprunteur_datas * @param int $id_empr Identifiant de l'emprunteur * @return emprunteur_datas */ static public function init_emprunteur_datas($id_empr) { self::$emprunteurs_datas[$id_empr] = new emprunteur_datas($id_empr); return self::$emprunteurs_datas[$id_empr]; } static public function lookup($name, $object) { $return = null; // Si on le nom commence par empr. on va chercher les méthodes if (substr($name, 0, 6) == ":empr.") { $attributes = explode('.', $name); $id_empr = $object->getVariable('id_empr'); if(!$return) { // On va chercher dans emprunteur_display $return = static::look_for_attribute_in_class("emprunteur_display", $attributes[1], array($id_empr)); } if (!$return) { // On va chercher dans emprunteur_datas $emprunteur_datas = static::get_emprunteur_datas($id_empr); $return = static::look_for_attribute_in_class($emprunteur_datas, $attributes[1]); } // On regarde les attributs enfants recherchés if ($return && count($attributes) > 2) { for ($i = 2; $i < count($attributes); $i++) { // On regarde si c'est un tableau ou un objet if (is_array($return)) { $return = (isset($return[$attributes[$i]]) ? $return[$attributes[$i]] : ''); } else if (is_object($return)) { $return = static::look_for_attribute_in_class($return, $attributes[$i]); } else { $return = null; break; } } } } else { $attributes = explode('.', $name); // On regarde si on a directement une instance d'objet, dans le cas des boucles for if (is_object($obj = $object->getVariable(substr($attributes[0], 1))) && (count($attributes) > 1)) { $return = $obj; for ($i = 1; $i < count($attributes); $i++) { // On regarde si c'est un tableau ou un objet if (is_array($return)) { $return = $return[$attributes[$i]]; } else if (is_object($return)) { $return = static::look_for_attribute_in_class($return, $attributes[$i]); } else { $return = null; break; } } } } return $return; } static protected function look_for_attribute_in_class($class, $attribute, $parameters = array()) { if (method_exists($class, $attribute)) { return call_user_func_array(array($class, $attribute), $parameters); } if (method_exists($class, "get_".$attribute)) { return call_user_func_array(array($class, "get_".$attribute), $parameters); } if (method_exists($class, "is_".$attribute)) { return call_user_func_array(array($class, "is_".$attribute), $parameters); } if (is_object($class) && (isset($class->{$attribute}) || method_exists($class, '__get'))) { return $class->{$attribute}; } return null; } static private function render($id_empr, $tpl) { $h2o = new H2o($tpl); $h2o->addLookup("emprunteur_display::lookup"); $h2o->set(array( 'id_empr' => $id_empr, 'prefix_name' => (!empty($id_empr) ? "renewal_form_fields[empr_" : "subscribe_form_fields[empr_"), 'suffix_name' => (!empty($id_empr) ? "]" : "]"), )); return $h2o->render(); } static public function get_datas_from_post() { global $subscribe_form_fields, $opac_websubscribe_valid_limit, $f_login; $id_empr = null; self::$emprunteurs_datas[$id_empr] = new emprunteur_datas($id_empr); self::$emprunteurs_datas[$id_empr]->opac_websubscribe_valid_limit = $opac_websubscribe_valid_limit; self::$emprunteurs_datas[$id_empr]->captcha =self::get_captcha(); $form_fields = array(); foreach (self::$renewal_form_field as $field) { if ($field['display']) { if(!empty($subscribe_form_fields[$field['code']])) { if($field['code'] == 'empr_login' && !empty($f_login)) { $form_fields[$field['code']] = $f_login; } else { $form_fields[$field['code']] = $subscribe_form_fields[$field['code']]; } } } } self::$emprunteurs_datas[$id_empr]->emprunteur = $form_fields; return self::$emprunteurs_datas[$id_empr]->emprunteur; } /** * Retourne le template * @param string $template_name Nom du template : profil * @param string $django_directory Répertoire Django à utiliser (paramètre opac_empr_format_django_directory par défaut) * @return string Nom du template à appeler */ static public function get_template($template_name) { global $include_path; if (file_exists("$include_path/templates/empr/".$template_name."_subst.tpl.html")) { return "$include_path/templates/empr/".$template_name."_subst.tpl.html"; } if (file_exists("$include_path/templates/empr/".$template_name.".tpl.html")) { return "$include_path/templates/empr/".$template_name.".tpl.html"; } return "$include_path/templates/empr/profil.tpl.html"; } /** * Retourne l'affichage du profil d'un emprunteur * @param int $id_empr Identifiant de l'emprunteur * @param string $django_directory Répertoire Django à utiliser * @return string Code html d'affichage de l'emprunteur */ static public function get_display_profil($id_empr) { global $include_path; static::get_renewal_form_fields(); if (!empty($id_empr)){ static::get_emprunteur_datas($id_empr); } else { static::get_datas_from_post(); } $template_name = "profil"; if (empty($id_empr)) { $template_name = "subscribe"; } $template = static::get_template($template_name); return static::render($id_empr, $template); } /** * Retourne l'affichage du changement de mot de passe d'un emprunteur * * @param int $id_empr Identifiant de l'emprunteur * @return string Code html d'affichage de changement de mot de passe emprunteur */ static public function get_display_change_password($id_empr) { $template_name = "change_password"; if (empty($id_empr)) { $template_name = "subscribe"; } $template = static::get_template($template_name); return static::render($id_empr, $template); } /** * Retourne les contraintes d'affichage/modification des champs lecteurs pour le formulaire de renouvellement * @return array */ static public function get_renewal_form_fields() { if (!isset(self::$renewal_form_field)) { self::$renewal_form_field = array(); $query = "SELECT empr_renewal_form_field_code as code, empr_renewal_form_field_display as display, empr_renewal_form_field_mandatory as mandatory, empr_renewal_form_field_alterable as alterable, empr_renewal_form_field_explanation as explanation from empr_renewal_form_fields"; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)) { while($row = pmb_mysql_fetch_array($result, PMB_MYSQL_ASSOC)) { self::$renewal_form_field[$row['code']] = $row; } } } return self::$renewal_form_field; } static public function get_languages_selector($id_empr) { global $opac_show_languages, $include_path, $lang; $show_languages = $opac_show_languages[0]; if ($show_languages == 1) { static::get_emprunteur_datas($id_empr); static::get_renewal_form_fields(); $languages = explode(",",substr($opac_show_languages,2)) ; $langues = new XMLlist("$include_path/messages/languages.xml"); $langues->analyser(); $langs = array(); foreach ($languages as $language) { $langs[$language] = $langues->table[$language]; } if(empty(static::$emprunteurs_datas[$id_empr]->emprunteur['empr_lang'])) { static::$emprunteurs_datas[$id_empr]->emprunteur['empr_lang'] = $lang; } $selector = ''; foreach ($langs as $key => $l) { $selector.= ""; } return $selector; } else return "" ; } /** * Vérifie que le formulaire de renouvellement est configuré * @return bool */ static public function is_renewal_form_set() { global $empr_renewal_activate; if(!$empr_renewal_activate) return false; if(isset(static::$renewal_form_is_set)) { return static::$renewal_form_is_set; } $query = "select count(*) from empr_renewal_form_fields"; $result = pmb_mysql_query($query); if(pmb_mysql_result($result, 0, 0)) { static::$renewal_form_is_set = true; return true; } static::$renewal_form_is_set = false; return false; } }