array('available_fields', 'subdivisions', 'separator')) */ private static $configs = array(); public function __construct($id = 0, $config_filename = "rameau"){ $this->id=$id+0; if($this->id){ $this->read(); } else { $this->config_filename = $config_filename; $this->set_config(); } } /** * Renvoie la liste des subdivisions * * @return Array() * @access public */ public function get_subdivisions(){ return self::$configs[$this->config_filename]['subdivisions']; } /** * Renvoie la liste des champs disponibles à l'ajout dans une vedette composée * * @return Array() * @access public */ public function get_available_fields(){ return self::$configs[$this->config_filename]['available_fields']; } /** * Renvoie les informations sur le champ visé * en fonction du num * * @return Array() * @access public */ public function get_at_available_field_num($num){ foreach(self::$configs[$this->config_filename]['available_fields'] as $key=>$field){ if($field['num']==$num){ return $field; } } } /** * Renvoie les informations sur le champ visé * en fonction du label * * @return Array() * @access public */ public function get_at_available_field_class_name($class_name, $id_authperso_authority=0){ $id_authperso=0; if($class_name=='vedette_authpersos' && $id_authperso_authority){ $req="select authperso_authority_authperso_num from authperso_authorities,authperso where id_authperso=authperso_authority_authperso_num and id_authperso_authority=". $id_authperso_authority; $res = pmb_mysql_query($req); if(($r=pmb_mysql_fetch_object($res))) { $id_authperso=$r->authperso_authority_authperso_num; } } foreach(self::$configs[$this->config_filename]['available_fields'] as $key=>$field){ if($field['class_name']==$class_name){ if($id_authperso){ if($field['num']==($id_authperso+1000)){ return $field; } }else { return $field; } } } } /** * Renvoie les informations sur le champ visé * en fonction du type * * @return Array() * @access public */ public function get_at_available_field_type($type){ foreach(self::$configs[$this->config_filename]['available_fields'] as $key=>$field){ if($field['type']==$type){ return $field; } } } /** * Ajoute un élément dans le tableau de gestion des éléments * * @param vedette_element vedette_element élément à ajouter * @param string subdivision Subdivision à laquelle ajouter l'ordre * @param int position Position dans la subdivision * * @return void * @access public */ public function add_element($vedette_element,$subdivision,$position){ if(!$vedette_element || !$subdivision){ return false; } $this->vedette_elements[$subdivision][$position]=$vedette_element; return true; } /** * Retourne les éléments présents dans une subdivision * * @param string $subdivision * @return array [position]vedette_element */ public function get_at_elements_subdivision($subdivision){ $at_elements_subdivision = ''; if(isset($this->vedette_elements[$subdivision])) { $at_elements_subdivision = $this->vedette_elements[$subdivision]; } return $at_elements_subdivision; } /** * Renvoie les informations d'une subdivision en fonction de son code * @param string $code Code de la subdivision * @return array Informations de la subdivision */ public function get_at_subdivision_code($code) { foreach (self::$configs[$this->config_filename]['subdivisions'] as $subdivision) { if ($subdivision["code"] == $code) { return $subdivision; } } return array(); } /** * Retourne les éléments * * @return array [subdivision][position]vedette_element */ public function get_elements(){ return $this->vedette_elements; } /** * Renvoie le nombre d'éléments dans la subdivision * * @return int * @access public */ public function get_nb_elements_subdivision($subdivision){ return count($this->vedette_elements[$subdivision]); } /** * remonte les données de la base de données * * @return void * @access public */ public function read(){ global $base_path; global $class_path; global $include_path; global $javascript_path; global $styles_path; if(!$this->id){ return false; } $query = "select label, grammar from vedette where id_vedette = ".$this->id; $result = pmb_mysql_query($query); if ($result && pmb_mysql_num_rows($result)) { if ($vedette = pmb_mysql_fetch_object($result)) { $this->label = $vedette->label; $this->config_filename = $vedette->grammar; } } $this->set_config(); $query='select object_type, object_id, subdivision, position, num_available_field from vedette_object where num_vedette = '.$this->id.' order by position'; $result=pmb_mysql_query($query); if(!pmb_mysql_error() && pmb_mysql_num_rows($result)){ while($element_from_database=pmb_mysql_fetch_object($result)){ if ($element_from_database->object_id) { $field=$this->get_at_available_field_num($element_from_database->num_available_field); $vedette_element_class_name=$field['class_name']; if(!$vedette_element_class_name || !file_exists($class_path."/vedette/".$vedette_element_class_name.".class.php")) continue; require_once($class_path."/vedette/".$vedette_element_class_name.".class.php"); if (empty($field['params'])) { $field['params'] = array(); } $element = new $vedette_element_class_name($field["num"], $element_from_database->object_id, '', $field['params']); $this->add_element($element, $element_from_database->subdivision, $element_from_database->position); } } } } /** * Enregistre une vedette composée * * @return void * @access public */ public function save(){ if ($this->check_value()) { if($this->id){ $query='DELETE FROM vedette_object WHERE num_vedette='.$this->id; pmb_mysql_query($query); $query='UPDATE vedette set label = "'.addslashes($this->label).'" where id_vedette = '.$this->id; pmb_mysql_query($query); }else{ $query='INSERT INTO vedette (label, grammar) values ("'.addslashes($this->label).'", "'.$this->config_filename.'")'; pmb_mysql_query($query); $this->id=pmb_mysql_insert_id(); } foreach ($this->vedette_elements as $subdivision=>$elements){ foreach ($elements as $position=>$element){ $query = 'INSERT INTO vedette_object (object_type, object_id, num_vedette, subdivision, position, num_available_field) values ('.$element->get_type().', '.$element->get_db_id().', '.$this->id.', "'.$subdivision.'", '.$position.', '.$element->get_num_available_field().')'; pmb_mysql_query($query); } } return $this->id; } return 0; } public static function replace($object_type, $id, $by){ $responsabilities = array(); $query = 'select distinct link.num_object as reponsability_num, type_object as reponsability_type from vedette_object as obj, vedette_link as link WHERE obj.num_vedette=link.num_vedette and obj.object_type="'.$object_type.'" and obj.object_id='.$id; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ while($r = pmb_mysql_fetch_object($result)){ $responsabilities[]=array( 'type' => $r->reponsability_type, 'id' => $r->reponsability_num ); } } $query = 'UPDATE vedette_object SET object_id="'.$by.'" WHERE object_type="'.$object_type.'" and object_id='.$id; pmb_mysql_query($query); $query = 'select num_vedette from vedette_object WHERE object_type="'.$object_type.'" and object_id='.$by; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ while($r = pmb_mysql_fetch_object($result)){ $vedette_id = $r->num_vedette; $vedette = new vedette_composee($vedette_id); if ($vedette->update_label()) { $query = "update vedette set label = '".addslashes($vedette->get_label())."' where id_vedette = ".$vedette->get_id(); pmb_mysql_query($query); vedette_link::update_objects_linked_with_vedette($vedette); } } } foreach ($responsabilities as $responsability ){ switch($responsability['type']){ case TYPE_NOTICE_RESPONSABILITY_PRINCIPAL: case TYPE_NOTICE_RESPONSABILITY_AUTRE: case TYPE_NOTICE_RESPONSABILITY_SECONDAIRE: $query='select responsability_notice from responsability WHERE id_responsability='.$responsability['id']; $result=pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ $r=pmb_mysql_fetch_object($result); notice::majNoticesTotal($r->responsability_notice); } break; case TYPE_TU_RESPONSABILITY: case TYPE_TU_RESPONSABILITY_INTERPRETER: $query='select responsability_tu_num from responsability_tu WHERE id_responsability_tu='.$responsability['id']; $result=pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ $r=pmb_mysql_fetch_object($result); titre_uniforme::update_index($r->responsability_tu_num); } break; case TYPE_CONCEPT_PREFLABEL: //réindexation des notices indexés avec le concepts $query = "select num_object from index_concept where type_object = 1 and num_concept = ".$responsability['id']; $result = pmb_mysql_query($query); if($result && pmb_mysql_num_rows($result)){ while($row = pmb_mysql_fetch_object($result)){ indexation_stack::push($row->num_object, TYPE_NOTICE, "concept"); //---------------------INI 13/04/2002 LLIUREX Temp solution to fix a bug in indexation----------------------- notice::majNoticesMotsGlobalIndex($row->num_object,"concept"); //---------------------FIN 13/04/2022------------------------------------------------------------------------------------------------ } } break; } } } /** * Supprime les données de la base de données * * @return void * @access public */ public function delete(){ if(!$this->id){ return false; } $query='DELETE FROM vedette_object WHERE num_vedette='.$this->id; pmb_mysql_query($query); $query='DELETE FROM vedette WHERE id_vedette='.$this->id; pmb_mysql_query($query); $query='DELETE FROM vedette_link WHERE num_vedette='.$this->id; pmb_mysql_query($query); return true; } /** * Lecture de la configuration xml */ private function set_config(){ global $include_path,$base_path,$charset; if (!isset(self::$configs[$this->config_filename])) { self::$configs[$this->config_filename] = array(); if(file_exists($include_path.'/vedette/'.$this->config_filename.'_subst.xml')){ $xmlFile = $include_path.'/vedette/'.$this->config_filename.'_subst.xml'; }elseif(file_exists($include_path.'/vedette/'.$this->config_filename.'.xml')){ $xmlFile =$include_path.'/vedette/'.$this->config_filename.'.xml'; }else{ //pas de fichier à analyser return false; } $fileInfo = pathinfo($xmlFile); $tempFile = $base_path."/temp/XML".preg_replace("/[^a-z0-9]/i","",$fileInfo['dirname'].$fileInfo['filename'].$charset).".tmp"; if (!file_exists($tempFile) || filemtime($xmlFile) > filemtime($tempFile)) { //Le fichier XML original a-t-il été modifié ultérieurement ? //on va re-générer le pseudo-cache if(file_exists($tempFile)){ unlink($tempFile); } //Parse le fichier dans un tableau $fp=fopen($xmlFile,"r") or die("Can't find XML file $xmlFile"); $xml=fread($fp,filesize($xmlFile)); fclose($fp); $xml_2_analyze=_parser_text_no_function_($xml, 'COMPOSED_HEADINGS'); self::$configs[$this->config_filename]['available_fields'] = array_map("self::clean_read_xml", $xml_2_analyze['AVAILABLE_FIELDS'][0]['FIELD']); self::$configs[$this->config_filename]['subdivisions'] = array_map("self::clean_read_xml", $xml_2_analyze['HEADING'][0]['SUBDIVISION']); self::$configs[$this->config_filename]['separator'] = $xml_2_analyze['SEPARATOR'][0]['value']; // On interprète les paramètres éventuels foreach(self::$configs[$this->config_filename]['available_fields'] as &$available_field) { if (!empty($available_field['params'])) { $available_field['params'] = encoding_normalize::json_decode($available_field['params'], true); } } $tmp = fopen($tempFile, "wb"); fwrite($tmp,serialize(self::$configs[$this->config_filename])); fclose($tmp); } else if (file_exists($tempFile)){ $tmp = fopen($tempFile, "r"); self::$configs[$this->config_filename] = unserialize(fread($tmp,filesize($tempFile))); fclose($tmp); } $this->build_authpersos(); $this->build_ontologies(); $this->set_default_fields(); } return true; } private static function clean_read_xml($array){ $return=array(); foreach ($array as $key=>$val){ if($val){ $return[strtolower($key)]=$val; } } return $return; } /** * Retourne le label de la vedette composée */ public function get_label() { return $this->label; } /** * Retourne l'identifiant de la vedette composée */ public function get_id() { return $this->id; } /** * renseigne l'identifiant de la vedette composée */ public function set_id($id) { $this->id = $id*1; return; } /** * Retourne le separateur du label de la vedette composée */ public function get_separator() { return self::$configs[$this->config_filename]['separator']; } /** * Vérifie la validité de la vedette composée */ protected function check_value() { foreach (self::$configs[$this->config_filename]['subdivisions'] as $subdivision) { $nb_elements = 0; if (isset($this->vedette_elements[$subdivision["code"]]) && count($this->vedette_elements[$subdivision["code"]])) { foreach ($this->vedette_elements[$subdivision["code"]] as $element) { if ($element->get_id() && $element->get_isbd()) { $nb_elements++; } } } if (isset($subdivision["min"]) && $subdivision["min"] && ($subdivision["min"] > $nb_elements)) { return false; } if (isset($subdivision["max"]) && $subdivision["max"] && ($subdivision["max"] < $nb_elements)) { return false; } } return true; } /** * Setter du label * @param string $label */ public function set_label($label) { $this->label = $label; } /** * Vide le tableau des éléments */ public function reset_elements() { $this->vedette_elements = array(); } /** * Met à jour les vedettes contenant l'élément * @param int $element_id Identifiant en base de l'élément * @param string $element_type Type de l'élément */ public static function update_vedettes_built_with_element($element_id, $element_type) { $vedettes_id = self::get_vedettes_built_with_element($element_id, $element_type); foreach ($vedettes_id as $vedette_id) { $vedette = new vedette_composee($vedette_id); if ($vedette->update_label()) { $query = "update vedette set label = '".addslashes($vedette->get_label())."' where id_vedette = ".$vedette->get_id(); pmb_mysql_query($query); vedette_link::update_objects_linked_with_vedette($vedette); } } } public static function get_vedettes_display($vedettes_id) { $diplay = ''; foreach ($vedettes_id as $vedette_id) { $responsabilities = array(); $query = 'select distinct link.num_object as reponsability_num, type_object as reponsability_type from vedette_link as link WHERE link.num_vedette='.$vedette_id; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ while($r = pmb_mysql_fetch_object($result)){ $responsabilities[] = array( 'type' => $r->reponsability_type, 'id' => $r->reponsability_num ); } } $vedette = new vedette_composee($vedette_id); $diplay.= $vedette->get_label() .'
'; foreach ($responsabilities as $responsability ){ switch($responsability['type']){ case TYPE_NOTICE_RESPONSABILITY_PRINCIPAL: case TYPE_NOTICE_RESPONSABILITY_AUTRE: case TYPE_NOTICE_RESPONSABILITY_SECONDAIRE: $query = 'select responsability_notice from responsability WHERE id_responsability='.$responsability['id']; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ $r = pmb_mysql_fetch_object($result); $diplay.= notice::get_notice_view_link($r->responsability_notice)."
"; } break; case TYPE_TU_RESPONSABILITY: case TYPE_TU_RESPONSABILITY_INTERPRETER: $query = 'select responsability_tu_num from responsability_tu WHERE id_responsability_tu='.$responsability['id']; $result = pmb_mysql_query($query); if(pmb_mysql_num_rows($result)){ $r = pmb_mysql_fetch_object($result); $tu = new titre_uniforme($r->responsability_tu_num); $diplay.= "".$tu->get_isbd()."
"; } break; case TYPE_CONCEPT_PREFLABEL: //notices indexés avec le concepts $query = "select num_object from index_concept where type_object = 1 and num_concept = ".$responsability['id']; $result = pmb_mysql_query($query); if($result && pmb_mysql_num_rows($result)){ while($row = pmb_mysql_fetch_object($result)){ $diplay.= notice::get_notice_view_link($r->num_object)."
"; } } break; } } } return $diplay; } /** * Supprime un élement dans les vedettes et met à jour le label des vedettes concernées * @param int $element_id Identifiant en base de l'élément * @param int $element_type Type de l'élément */ public static function delete_element_and_update_vedettes_built_with_element($element_id, $element_type) { $element_id = intval($element_id); $element_type = intval($element_type); $query = "SELECT num_vedette FROM vedette_object WHERE object_type = $element_type and object_id = $element_id"; $result = pmb_mysql_query($query); if (pmb_mysql_num_rows($result)) { $query = "DELETE FROM vedette_object WHERE object_type = $element_type and object_id = $element_id"; pmb_mysql_query($query); while ($row = pmb_mysql_fetch_assoc($result)) { $vedette = new vedette_composee($row["num_vedette"]); $vedette->update_label(); $query = "update vedette set label = '".$vedette->get_label()."' where id_vedette = ".$vedette->get_id(); pmb_mysql_query($query); vedette_link::update_objects_linked_with_vedette($vedette); } } } public static function get_element_type_num_from_type_str($vedette,$element_type) { // On récupère l'identifiant lié au type d'élément $element_type_num=0; if($element_type>1000){ // authperso $element_type_num = $element_type; }else{ foreach($vedette->get_available_fields() as $key=>$field){ if($field["type"] == $element_type){ $element_type_num = $field["num"]; break; } } } return $element_type_num; } /** * Retourne un tableau des identifiants des vedettes contenant l'élément * @param int $element_id Identifiant en base de l'élément * @param string $element_type Type de l'élément * * @return array Tableau des identifiants des vedettes */ public static function get_vedettes_built_with_element($element_id, $element_type) { $vedettes_id = array(); $grammars = vedette_grammars::get_grammars(); foreach ($grammars as $grammar) { // On va chercher en base les vedettes contenant cet élément $query = "select distinct num_vedette from vedette_object inner join vedette on num_vedette = id_vedette where object_id = ".$element_id." and object_type = ".$element_type." and grammar = '".$grammar."'"; $result = pmb_mysql_query($query); if ($result && pmb_mysql_num_rows($result)) { while ($row = pmb_mysql_fetch_object($result)) { $vedettes_id[] = $row->num_vedette; } } } return $vedettes_id; } /** * Retourne un tableau des identifiants des vedettes contenant les éléments passés en paramètres * @param int $elements Tableau des identifiants en base des éléments * @param string $grammar Grammaire de l'élément à récupérer * @param boolean $exact_match Spécifie si on veut retourner les vedettes composées uniquement des éléments transmis * @return array Tableau des identifiants des vedettes retrouvées */ public static function get_vedettes_built_with_elements($elements, $grammar = "", $exact_match = false) { $vedettes_id = array(); $grammars = array(); if($grammar){ $grammars[] = $grammar; }else{ $grammars = vedette_grammars::get_grammars(); } foreach($grammars as $grammar){ $subquery = ''; foreach($elements as $element){ // On va chercher en base les vedettes contenant cet élément $query = "select distinct num_vedette from vedette_object inner join vedette on num_vedette = id_vedette where object_id = ".$element['id']." and object_type = ".$element['type']." and grammar = '".$grammar."'"; if ($subquery) { $query.= " and num_vedette in (".$subquery.")"; } $subquery = $query; } $result = pmb_mysql_query($query); if (pmb_mysql_num_rows($result)) { while ($row = pmb_mysql_fetch_assoc($result)) { $vedettes_id[] = $row['num_vedette']; } } } if (count($vedettes_id) && $exact_match) { $query = 'select num_vedette from vedette_object where num_vedette in ('.implode(',', $vedettes_id).') group by num_vedette having count(*) = '.count($elements); $vedettes_id = array(); $result = pmb_mysql_query($query); if (pmb_mysql_num_rows($result)) { while ($row = pmb_mysql_fetch_assoc($result)) { $vedettes_id[] = $row['num_vedette']; } } } return $vedettes_id; } /** * Recalcule le label de la vedette * @return boolean True si le libellé est modifié, false sinon */ public function update_label() { // On trie le tableau des éléments $this->sort_vedette_elements(); $label = ""; foreach ($this->vedette_elements as $subdivision=>$elements){ /* @var $element vedette_element */ foreach ($elements as $position=>$element){ if ($label) $label .= self::$configs[$this->config_filename]['separator']; $label .= $element->get_isbd(); } } if ($this->label != $label) { $this->label = $label; return true; } return false; } /** * Trie le tableau des éléments selon l'ordre des subdivisions */ private function sort_vedette_elements() { $sort_array = array(); // On crée un tableau contenant les ordres foreach ($this->vedette_elements as $subdivision_code => $elements) { $subdivision = $this->get_at_subdivision_code($subdivision_code); $sort_array[] = $subdivision["order"]; } // On trie le tableau des vedettes par rapport au tableau des ordres array_multisort($sort_array, $this->vedette_elements, SORT_NUMERIC); } protected function build_authpersos(){ $authorities = array(); for($i=0 ; $iconfig_filename]['available_fields']) ; $i++){ if(self::$configs[$this->config_filename]['available_fields'][$i]['type'] == 'authperso'){ $infos = self::$configs[$this->config_filename]['available_fields'][$i]; unset(self::$configs[$this->config_filename]['available_fields'][$i]); $authpersos=authpersos::get_instance(); foreach($authpersos->info as $authority){ $authorities[] = array( 'num' => (string)($infos['num']+$authority['id']), 'name' => $authority['name'], 'class_name' => "vedette_authpersos", 'type' => "authperso".$authority['id'], 'params' => array( 'id_authority'=> $authority['id'], 'label' => $authority['name'] ) ); } break; } } self::$configs[$this->config_filename]['available_fields']=array_merge(self::$configs[$this->config_filename]['available_fields'],$authorities); } protected function build_ontologies(){ $ontologies = array(); for($i=0 ; $iconfig_filename]['available_fields']) ; $i++){ if(self::$configs[$this->config_filename]['available_fields'][$i]['type'] == 'ontologie'){ $infos = self::$configs[$this->config_filename]['available_fields'][$i]; unset(self::$configs[$this->config_filename]['available_fields'][$i]); $tmp = new ontologies(); $ontos = $tmp->looking_for_use_in_concepts(); foreach($ontos as $onto){ $ontologies[] = array( 'num' => (string)($infos['num']+$onto['id']), 'name' => $onto['name'], 'class_name' => "vedette_ontologies", 'type' => "ontology".$onto['id'], 'params' => array( 'num' => (string)($infos['num']+$onto['id']), 'id_ontology'=> $onto['ontology_id'], 'label' => $onto['name'], 'pmbname' => $onto['pmbname'] ) ); } break; } } self::$configs[$this->config_filename]['available_fields']=array_merge(self::$configs[$this->config_filename]['available_fields'],$ontologies); } /** * Retourne l'identifiant de la vedette liée à un objet * @param int $object_id Identifiant de l'objet * @param int $object_type Type de l'objet * @return int Identifiant de la vedette liée */ public static function get_vedette_id_from_object($object_id, $object_type) { $object_id += 0; if ($object_id) { $query = "select num_vedette from vedette_link where num_object = ".$object_id." and type_object = ".$object_type; $result = pmb_mysql_query($query); if ($result && pmb_mysql_num_rows($result)) { if ($row = pmb_mysql_fetch_object($result)) { return $row->num_vedette; } } } return 0; } /** * Retourne l'identifiant de l'objet lié à la vedette * @param int $object_id Identifiant de la vedette * @param int $object_type Type de l'objet * @return int Identifiant de l'objet lié */ public static function get_object_id_from_vedette_id($vedette_id, $object_type) { $query = "select num_object from vedette_link where num_vedette = ".$vedette_id." and type_object = ".$object_type; $result = pmb_mysql_query($query); if ($result && pmb_mysql_num_rows($result)) { if ($row = pmb_mysql_fetch_object($result)) { return $row->num_object; } } return 0; } public function get_subdivision_name_by_code($code) { global $msg; foreach (self::$configs[$this->config_filename]['subdivisions'] as $subdivision) { if ($subdivision["code"] == $code) { if (substr($subdivision['name'], 0, 4) == "msg:") { if ($msg[substr($subdivision['name'], 4)]) { return $msg[substr($subdivision['name'], 4)]; } else { return substr($subdivision['name'], 4); } } else if ($subdivision['name']) { return $subdivision['name']; } else { return $subdivision['code']; } } } return ""; } public function get_config_filename() { return $this->config_filename; } protected function set_default_fields() { global $class_path; foreach (self::$configs[$this->config_filename]['subdivisions'] as $subdivision) { if (empty($subdivision['default_fields'])) { continue; } $default_fields_num = explode(',', $subdivision['default_fields']); foreach ($default_fields_num as $i => $default_field_num) { $default_field = $this->get_at_available_field_num($default_field_num); require_once($class_path."/vedette/".$default_field['class_name'].".class.php"); if (empty($default_field['params'])) { $default_field['params'] = array(); } $element = new $default_field['class_name']($default_field["num"], 0, '', $default_field['params']); $this->add_element($element, $subdivision['code'], $i); } } } /** * Méthode remplissant la vedette via les données enregistrées * * @param object|string $formated_value */ public function feed($qualification) { global $base_path, $class_path; $this->label = ''; if (!empty($qualification->apercu_vedette)) { $this->label = $qualification->apercu_vedette; } if (!empty($qualification->elements)) { foreach ($qualification->elements as $role => $elements) { foreach ($elements as $position => $element) { $field = $this->get_at_available_field_num($element->available_field_num); $vedette_element_class_name = $field['class_name']; if (empty($vedette_element_class_name) || !file_exists("$class_path/vedette/$vedette_element_class_name.class.php")) { continue; } require_once "$class_path/vedette/$vedette_element_class_name.class.php"; if (empty($field['params'])) { $field['params'] = []; } $element = new $vedette_element_class_name($field['num'], $element->id, '', $field['params']); $this->add_element($element, $role, $position); } } } } }