id = $id*1; $this->num_object = $num_object*1; $this->type_object = $type_object*1; $this->get_datas(); } public function get_datas() { if(!$this->id && $this->num_object && $this->type_object) { $query = "select id_authority, num_statut, authorities_statut_label, authorities_statut_class_html, thumbnail_url from authorities join authorities_statuts on authorities_statuts.id_authorities_statut = authorities.num_statut where num_object=".$this->num_object." and type_object=".$this->type_object; $result = pmb_mysql_query($query); if($result) { if(pmb_mysql_num_rows($result)) { $row = pmb_mysql_fetch_object($result); $this->id = $row->id_authority; $this->num_statut = $row->num_statut; $this->statut_label = $row->authorities_statut_label; $this->statut_class_html = $row->authorities_statut_class_html; $this->thumbnail_url = $row->thumbnail_url; } else { $query = "insert into authorities(id_authority, num_object, type_object) values (0, ".$this->num_object.", ".$this->type_object.")"; pmb_mysql_query($query); $this->id = pmb_mysql_insert_id(); $this->num_statut = 1; $this->statut_label = ''; $this->statut_class_html = 'statutnot1'; } } } else if ($this->id) { $query = "select num_object, type_object, num_statut, authorities_statut_label, authorities_statut_class_html, thumbnail_url from authorities join authorities_statuts on authorities_statuts.id_authorities_statut = authorities.num_statut where id_authority=".$this->id; $result = pmb_mysql_query($query); if($result && pmb_mysql_num_rows($result)) { $row = pmb_mysql_fetch_object($result); $this->num_object = $row->num_object; $this->type_object = $row->type_object; $this->num_statut = $row->num_statut; $this->statut_label = $row->authorities_statut_label; $this->statut_class_html = $row->authorities_statut_class_html; $this->thumbnail_url = $row->thumbnail_url; } } } public function get_id() { return $this->id; } public function get_num_object() { return $this->num_object; } public function get_num_statut() { return $this->num_statut; } public function get_statut_label() { return $this->statut_label; } public function get_statut_class_html() { return $this->statut_class_html; } public function get_display_statut_class_html() { global $charset, $base_path; return "id."'); z.style.display=''; \" onmouseout=\"z=document.getElementById('zoom_statut".$this->id."'); z.style.display='none'; \"> "; } public function set_num_statut($num_statut) { $num_statut += 0; if(!$num_statut){ $num_statut = 1; }else{ $query = "select id_authorities_statut from authorities_statuts where id_authorities_statut=".$num_statut; $result = pmb_mysql_query($query); if(!pmb_mysql_num_rows($result)){ $num_statut = 1; } } $this->num_statut = $num_statut; } public function update() { global $msg; if($this->num_object && $this->type_object) { $query = "update authorities set num_statut='".$this->num_statut."', thumbnail_url = '".addslashes($this->thumbnail_url)."' where num_object=".$this->num_object." and type_object=".$this->type_object; $result = pmb_mysql_query($query); if($result) { return true; } else { return false; } } } public function get_type_object() { return $this->type_object; } public function get_string_type_object() { if (!$this->string_type_object) { switch ($this->type_object) { case AUT_TABLE_AUTHORS : $this->string_type_object = 'author'; break; case AUT_TABLE_CATEG : $this->string_type_object = 'category'; break; case AUT_TABLE_PUBLISHERS : $this->string_type_object = 'publisher'; break; case AUT_TABLE_COLLECTIONS : $this->string_type_object = 'collection'; break; case AUT_TABLE_SUB_COLLECTIONS : $this->string_type_object = 'subcollection'; break; case AUT_TABLE_SERIES : $this->string_type_object = 'serie'; break; case AUT_TABLE_TITRES_UNIFORMES : $this->string_type_object = 'titre_uniforme'; break; case AUT_TABLE_INDEXINT : $this->string_type_object = 'indexint'; break; case AUT_TABLE_CONCEPT : $this->string_type_object = 'concept'; break; case AUT_TABLE_AUTHPERSO : $this->string_type_object = 'authperso'; break; } } return $this->string_type_object; } public function delete() { $query = "delete from authorities where num_object=".$this->num_object." and type_object=".$this->type_object; $result = pmb_mysql_query($query); if($result) { return true; } else { return false; } } public function get_object_instance($params = array()) { return authorities_collection::get_authority($this->get_string_type_object(), $this->num_object); } public function __get($name) { $return = $this->look_for_attribute_in_class($this, $name); if (!$return) { $return = $this->look_for_attribute_in_class($this->get_object_instance(), $name); } return $return; } public function lookup($name,$context) { $value = null; if(strpos($name,":authority.")!==false){ $property = str_replace(":authority.","",$name); $value = $this->generic_lookup($this, $property); if(!$value){ $value = $this->generic_lookup($this->get_object_instance(), $property); } } else if (strpos($name,":aut_link.")!==false){ $this->init_autlink_class(); $property = str_replace(":aut_link.","",$name); $value = $this->generic_lookup($this->autlink_class, $property); } else { $attributes = explode('.', $name); // On regarde si on a directement une instance d'objet, dans le cas des boucles for if (is_object($obj = $context->getVariable(substr($attributes[0], 1))) && (count($attributes) > 1)) { $value = $obj; $property = str_replace($attributes[0].'.', '', $name); $value = $this->generic_lookup($value, $property); } } if(!$value){ $value = null; } return $value; } private function generic_lookup($obj,$property){ $attributes = explode(".",$property); for($i=0 ; $ilook_for_attribute_in_class($obj, $attributes[$i]); } else{ $obj = null; break; } } return $obj; } private function look_for_attribute_in_class($class, $attribute, $parameters = array()) { if (is_object($class) && isset($class->{$attribute})) { return $class->{$attribute}; } else if (method_exists($class, $attribute)) { return call_user_func_array(array($class, $attribute), $parameters); } else if (method_exists($class, "get_".$attribute)) { return call_user_func_array(array($class, "get_".$attribute), $parameters); } else if (method_exists($class, "is_".$attribute)) { return call_user_func_array(array($class, "is_".$attribute), $parameters); } return null; } public function render($context=array(), $templates_folder = ''){ global $opac_authorities_templates_folder, $include_path; if (!$templates_folder) { $templates_folder = $opac_authorities_templates_folder; } if (!$templates_folder) { $templates_folder = "common"; } $template_path = $include_path.'/templates/authorities/'.$templates_folder."/".$this->get_string_type_object().'.html'; if (!file_exists($template_path)) { $template_path = $include_path.'/templates/authorities/common/'.$this->get_string_type_object().'.html'; } if (file_exists($include_path.'/templates/authorities/'.$templates_folder.'/'.$this->get_string_type_object().'_subst.html')) { $template_path = $include_path.'/templates/authorities/'.$templates_folder.'/'.$this->get_string_type_object().'_subst.html'; } if(file_exists($template_path)){ $h2o = new H2o($template_path); $h2o->set('authority', $this); $this->init_autlink_class(); $h2o->set('aut_link', $this->autlink_class); return $h2o->render($context); } return ''; } private function init_autlink_class(){ if(!$this->autlink_class){ if ($this->type_object == AUT_TABLE_AUTHPERSO) { $query = "select authperso_authority_authperso_num from authperso_authorities where id_authperso_authority= ".$this->num_object; $result = pmb_mysql_query($query); if($result && pmb_mysql_num_rows($result)){ $row = pmb_mysql_fetch_object($result); $this->autlink_class = new aut_link($row->authperso_authority_authperso_num+1000, $this->num_object); } } else { $this->autlink_class = new aut_link($this->type_object, $this->num_object); } } } public function get_indexing_concepts(){ $concepts_list = new skos_concepts_list(); switch($this->type_object){ case AUT_TABLE_AUTHORS : if ($concepts_list->set_concepts_from_object(TYPE_AUTHOR, $this->num_object)) { return $concepts_list->get_concepts(); } break; case AUT_TABLE_PUBLISHERS : if ($concepts_list->set_concepts_from_object(TYPE_PUBLISHER, $this->num_object)) { return $concepts_list->get_concepts(); } break; case AUT_TABLE_COLLECTIONS : if ($concepts_list->set_concepts_from_object(TYPE_COLLECTION, $this->num_object)) { return $concepts_list->get_concepts(); } break; case AUT_TABLE_SUB_COLLECTIONS : if ($concepts_list->set_concepts_from_object(TYPE_SUBCOLLECTION, $this->num_object)) { return $concepts_list->get_concepts(); } break; case AUT_TABLE_SERIES : if ($concepts_list->set_concepts_from_object(TYPE_SERIE, $this->num_object)) { return $concepts_list->get_concepts(); } break; case AUT_TABLE_INDEXINT : if ($concepts_list->set_concepts_from_object(TYPE_INDEXINT, $this->num_object)) { return $concepts_list->get_concepts(); } break; case AUT_TABLE_TITRES_UNIFORMES : if ($concepts_list->set_concepts_from_object(TYPE_TITRE_UNIFORME, $this->num_object)) { return $concepts_list->get_concepts(); } break; case AUT_TABLE_CATEG : if ($concepts_list->set_concepts_from_object(TYPE_CATEGORY, $this->num_object)) { return $concepts_list->get_concepts(); } break; case AUT_TABLE_AUTHPERSO : if ($concepts_list->set_concepts_from_object(TYPE_AUTHPERSO, $this->num_object)) { return $concepts_list->get_concepts(); } break; } return null; } public function get_type_label(){ if (!$this->type_label) { if ($this->get_type_object() != AUT_TABLE_AUTHPERSO) { $this->type_label = self::get_type_label_from_type_id($this->get_type_object()); }elseif($this->get_type_object() == AUT_TABLE_AUTHPERSO) { $auth_datas = $this->get_object_instance()->get_data(); $this->type_label = $auth_datas['authperso']['name']; } else { $auth_datas = $this->get_object_instance()->get_data(); $this->type_label = $auth_datas['name']; } } return $this->type_label; } public static function get_type_label_from_type_id($type_id) { global $msg; switch($type_id){ case AUT_TABLE_AUTHORS : return $msg['isbd_author']; case AUT_TABLE_PUBLISHERS : return $msg['isbd_editeur']; case AUT_TABLE_COLLECTIONS : return $msg['isbd_collection']; case AUT_TABLE_SUB_COLLECTIONS : return $msg['isbd_subcollection']; case AUT_TABLE_SERIES : return $msg['isbd_serie']; case AUT_TABLE_INDEXINT : return $msg['isbd_indexint']; case AUT_TABLE_TITRES_UNIFORMES : return $msg['isbd_titre_uniforme']; case AUT_TABLE_CATEG : return $msg['isbd_categories']; case AUT_TABLE_CONCEPT : return $msg['concept_menu']; } } /** * Retourne les paramètres persos * @return array */ public function get_p_perso() { if (!$this->p_perso) { $this->p_perso = array(); if($this->get_type_object() ){ $parametres_perso = new parametres_perso($this->get_prefix_for_pperso()); $ppersos = $parametres_perso->show_fields($this->num_object); if(isset($ppersos['FIELDS']) && is_array($ppersos['FIELDS'])){ foreach ($ppersos['FIELDS'] as $pperso) { if($pperso['OPAC_SHOW'] && $pperso['AFF']) { $this->p_perso[$pperso['NAME']] = $pperso; } } } } } return $this->p_perso; } public function get_prefix_for_pperso(){ switch($this->get_type_object()){ case AUT_TABLE_CATEG: return 'categ'; case AUT_TABLE_TITRES_UNIFORMES: return 'tu'; case AUT_TABLE_CONCEPT: return 'skos'; default : return $this->get_string_type_object(); } } public function get_audit_type() { if (!$this->audit_type) { switch ($this->type_object) { case AUT_TABLE_AUTHORS : $this->audit_type = AUDIT_AUTHOR; break; case AUT_TABLE_CATEG : $this->audit_type = AUDIT_CATEG; break; case AUT_TABLE_PUBLISHERS : $this->audit_type = AUDIT_PUBLISHER; break; case AUT_TABLE_COLLECTIONS : $this->audit_type = AUDIT_COLLECTION; break; case AUT_TABLE_SUB_COLLECTIONS : $this->audit_type = AUDIT_SUB_COLLECTION; break; case AUT_TABLE_SERIES : $this->audit_type = AUDIT_SERIE; break; case AUT_TABLE_TITRES_UNIFORMES : $this->audit_type = AUDIT_TITRE_UNIFORME; break; case AUT_TABLE_INDEXINT : $this->audit_type = AUDIT_INDEXINT; break; case AUT_TABLE_CONCEPT : $this->audit_type = AUDIT_CONCEPT; break; case AUT_TABLE_AUTHPERSO : $req="select authperso_authority_authperso_num from authperso_authorities,authperso where id_authperso=authperso_authority_authperso_num and id_authperso_authority=". $this->num_object; $res = pmb_mysql_query($req); if(($r=pmb_mysql_fetch_object($res))) { $this->audit_type=($r->authperso_authority_authperso_num + 1000); } break; } } return $this->audit_type; } public function get_special() { global $include_path; $special_file = $include_path.'/templates/authorities/special/authority_special.class.php'; if (file_exists($special_file)) { require_once($special_file); return new authority_special($this); } return null; } /** * Renvoie le tableau des identifiants de concepts composés utilisant cette autorité * @return array */ public function get_concepts_ids() { if (!isset($this->concepts_ids)) { $this->concepts_ids = array(); $vedette_composee_found = vedette_composee::get_vedettes_built_with_element($this->get_num_object(), $this->get_string_type_object()); foreach($vedette_composee_found as $vedette_id){ $this->concepts_ids[] = vedette_composee::get_object_id_from_vedette_id($vedette_id, TYPE_CONCEPT_PREFLABEL); } } return $this->concepts_ids; } public function get_thumbnail_url() { return $this->thumbnail_url; } public function set_thumbnail_url($thumbnail_url) { $uploaded_thumbnail_url = thumbnail::create($this->get_id(), 'authority'); if($uploaded_thumbnail_url) { $this->thumbnail_url = $uploaded_thumbnail_url; } else { $this->thumbnail_url = $thumbnail_url; } } public function get_thumbnail() { return thumbnail::get_image('', $this->thumbnail_url); } public function get_recordslist() { return $this->recordslist; } public function set_recordslist($recordslist) { $this->recordslist = $recordslist; } public function format_datas(){ $formatted_data = array( 'id' => $this->get_id(), 'num_object' => $this->get_num_object(), 'statut' => $this->get_statut_label(), 'thumbnail_url' => $this->get_thumbnail_url(), 'thumbnail' => $this->get_thumbnail() ); //CP $type_object = $this->get_string_type_object(); switch ($type_object) { case 'titre_uniforme' : $parametres_perso = new parametres_perso('tu'); break; case 'category' : $parametres_perso = new parametres_perso('categ'); break; case 'authperso' : $parametres_perso = new custom_parametres_perso("authperso","authperso", $this->get_object_instance()->info['authperso_num']); break; default : $parametres_perso = new parametres_perso($type_object); break; } $formatted_data['customs'] = $parametres_perso->get_out_values($this->get_num_object()); $skos_concept = new skos_concept($this->get_num_object()); $formatted_data['concepts'] = $skos_concept->format_datas(); //TODO Autorités liées //TODO Notices liées return $formatted_data; } public static function get_const_type_object($string_type_object) { switch ($string_type_object) { case 'author': case 'authors': return AUT_TABLE_AUTHORS; case 'category': case 'categories': return AUT_TABLE_CATEG; case 'publisher' : case 'publishers' : return AUT_TABLE_PUBLISHERS; case 'collection' : case 'collections' : return AUT_TABLE_COLLECTIONS; case 'subcollection' : case 'subcollections' : return AUT_TABLE_SUB_COLLECTIONS; case 'serie': case 'series': return AUT_TABLE_SERIES; case 'titre_uniforme' : case 'work' : case 'works' : return AUT_TABLE_TITRES_UNIFORMES; case 'indexint' : return AUT_TABLE_INDEXINT; case 'concept' : case 'concepts' : return AUT_TABLE_CONCEPT; case 'authperso' : return AUT_TABLE_AUTHPERSO; } } public function get_type_icon() { if (!isset($this->type_icon)) { $this->type_icon = get_url_icon('authorities/'.$this->get_string_type_object().'_icon.png'); } return $this->type_icon; } public function get_permalink() { return $this->get_object_instance()->get_permalink(); } public function get_entity_type(){ return 'authority'; } public function get_vedette_type(){ if (!$this->vedette_type) { switch ($this->type_object) { case AUT_TABLE_AUTHORS : $this->vedette_type = TYPE_AUTHOR; break; case AUT_TABLE_CATEG : $this->vedette_type = TYPE_CATEGORY; break; case AUT_TABLE_PUBLISHERS : $this->vedette_type = TYPE_PUBLISHER; break; case AUT_TABLE_COLLECTIONS : $this->vedette_type = TYPE_COLLECTION; break; case AUT_TABLE_SUB_COLLECTIONS : $this->vedette_type = TYPE_SUBCOLLECTION; break; case AUT_TABLE_SERIES : $this->vedette_type = TYPE_SERIE; break; case AUT_TABLE_TITRES_UNIFORMES : $this->vedette_type = TYPE_TITRE_UNIFORME; break; case AUT_TABLE_INDEXINT : $this->vedette_type = TYPE_INDEXINT; break; case AUT_TABLE_CONCEPT : $this->vedette_type = TYPE_CONCEPT_PREFLABEL; break; case AUT_TABLE_AUTHPERSO : $this->vedette_type = TYPE_AUTHPERSO; break; } } return $this->vedette_type; } }