setDomain(5); } if ($gestion_acces_contribution_moderator_empr == 1) { $dom_6 = $ac->setDomain(6); } } //lors de la première instance de notre contribution, on renseigne les champs avec les valeurs par défaut $is_new = onto_common_uri::is_temp_uri($this->uri); if($is_new && !$this->is_draft){ $this->set_assertions($this->get_assertions_from_active_properties()); } else { $this->merge_datatypes(); } // On indique si c'est une contribution draft $contribution_draft = self::NOT_DRAFT; if ($is_new || (isset($this->is_draft) && $this->is_draft) ) { $contribution_draft = self::IS_DRAFT; } // $is_draft provient de l'item parent // permet de savoir si on affiche le bouton ou pas. if (isset($is_draft)) { if ($is_draft) { $contribution_draft = self::IS_DRAFT; }else { $contribution_draft = self::NOT_DRAFT; } } $temp_datatype_tab = $this->order_datatypes(); $end_form = ''; $form = ''; if(!$sub_form){ $form .= jscript_unload_question(); if ($scenario) { $contribution_area_scenario = new contribution_area_scenario($scenario,$area_id); $form .=" "; } if ($contribution_draft){ $message = ''; if ($this->is_draft){ $save_date = new DateTime(); $save_date->setTimestamp($this->get_last_edit()); $message = str_replace(["%d", "%h"], [$save_date->format('d/m/Y'), $save_date->format('H:i:s')], $msg['contribution_save_button_draft_time']); } //Chargement du script JS avec paramètre enregistrement automatique $form.= "
"; } $form.= '
'; $form.= '
'; $end_form .= "
"; } $comment = $this->contribution_area_form->get_comment(); if ($comment) { $comment = "
" . $comment . "
"; } $form.= $comment . $ontology_tpl['form_body']; $prefix_uri = ""; if (isset(explode('#',$this->uri)[1])) { if (!is_numeric((explode('#',$this->uri)[1]))) { $prefix_uri = strtolower(explode('#',$this->uri)[1]); } else { $prefix_uri = strtolower($sub."_".explode('#',$this->uri)[1]); } } $form=str_replace("!!uri!!",$this->uri,$form); $form=str_replace("!!prefix_uri!!",$prefix_uri,$form); $form=str_replace("!!onto_form_scripts!!",(!$sub_form ? $ontology_tpl['form_scripts'] : $ontology_tpl['form_scripts']), $form); $form=str_replace("!!caller!!",rawurlencode(onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name)), $form); $form=str_replace("!!onto_form_id!!",onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name) , $form); $form=str_replace("!!onto_form_action!!",$prefix_url."&action=".$action, $form); $form=str_replace("!!onto_form_title!!",htmlentities($this->contribution_area_form->get_name(),ENT_QUOTES,$charset) , $form); $linked_forms = array(); if ($this->contribution_area_form->get_linked_forms()) { $linked_forms = $this->contribution_area_form->get_linked_forms(); } $linked_scenarios = $this->contribution_area_form->get_linked_scenarios(); $content=''; $valid_js = ""; /*******TODO : modif temporaire***********/ $properties = $this->onto_class->get_properties(); $properties = array_merge($properties, $this->onto_class->get_properties_and_restrictions_from_sub_class_of()); $properties = array_unique($properties); sort($properties); /**************************************/ if(sizeof($properties)){ $index = 0; foreach($properties as $uri_property){ $property=$this->onto_class->get_property($uri_property); if((!$flag || (in_array($flag,$property->flags))) && isset($property->pmb_extended) && (!$property->is_undisplayed())){ $datatype_class_name=$this->resolve_datatype_class_name($property); $datatype_ui_class_name=$this->resolve_datatype_ui_class_name($datatype_class_name,$property,$this->onto_class->get_restriction($property->uri)); // On encapsule dans des divs movables pour l'édition de la grille de saisie $movable_div = $ontology_tpl['form_movable_div']; $movable_div = str_replace('!!movable_index!!', $index, $movable_div); $property = $this->format_property($property, $linked_forms, $contribution_draft, self::NOT_ENTITY, $linked_scenarios); //propriété obligatoire if (!empty($property->pmb_extended['mandatory'])) { $this->onto_class->get_restriction($property->uri)->set_min('1'); } //enregistrement de l'espace // if ($property->pmb_datatype == "http://www.pmbservices.fr/ontology#resource_selector") { // $property->pmb_extended['values_from_area'] = self::get_values_from_area($property->range[0]); // } //propriété cachée if (!empty($property->pmb_extended['hidden'])) { //propriété cachée $template = $this->get_property_hidden_template($property, $datatype_ui_class_name, $temp_datatype_tab); } else { $template = $this->get_property_template($property, $datatype_ui_class_name, $temp_datatype_tab, $flag); } $movable_div = str_replace('!!datatype_ui_form!!', $template, $movable_div); $movable_div = str_replace('!!data_pmb_uniqueid!!', $form_uri.'_'.$property->pmb_name, $movable_div); $content .= $movable_div; if($valid_js){ $valid_js.= ","; } $valid_js.= $datatype_ui_class_name::get_validation_js($this->uri,$property,$this->onto_class->get_restriction($property->uri),(isset($temp_datatype_tab[$property->uri]) ? $temp_datatype_tab[$property->uri][$datatype_ui_class_name] : null),onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name),$flag); $index++; } } } $content.= ""; $form=str_replace("!!onto_form_content!!",$content , $form); $scenario_uri = ''; if (isset($scenario)) { $form=str_replace("!!parent_scenario_uri!!",$scenario , $form); $scenario_uri = 'http://www.pmbservices.fr/ca/Scenario#'.$scenario; } else { $form=str_replace("!!parent_scenario_uri!!",'', $form); } $edition_granted = true; $validation_granted = true; if ($contributor) { //droit de modification / validation sur ce contributeur if (isset($dom_6)) { $edition_granted = ($dom_6->getRights($_SESSION['id_empr_session'],$contributor, 8) ? true : false); $validation_granted = ($dom_6->getRights($_SESSION['id_empr_session'],$contributor, 16) ? true : false); } } $form=str_replace("!!contributor!!",($contributor ? $contributor : $_SESSION['id_empr_session']), $form); //id de l'entité liée en base SQL if ($pmb_id) { $form=str_replace("!!onto_form_submit!!",'' , $form); } else { $button_class = "contribution_main_save_button"; if($sub_form) { $button_class = "contribution_save_button"; $submit_msg = $msg['onto_contribution_inter_submit_button']; }else { $submit_msg = $msg['onto_contribution_submit_button']; } $acces_right = ($is_new ? 4 : 8); if ($scenario_uri && isset($dom_5) && !$dom_5->getRights($_SESSION['id_empr_session'],onto_common_uri::get_id($scenario_uri), $acces_right)) { $edition_granted = false; } if ($edition_granted) { $form=str_replace("!!onto_form_submit!!",'' , $form); } else { $form=str_replace("!!onto_form_submit!!",'' , $form); } } if ($contribution_draft && isset($ontology_tpl['onto_contribution_save_button_draft'])){ $onto_contribution_save_button_draft = $ontology_tpl['onto_contribution_save_button_draft']; $onto_contribution_save_button_draft = str_replace("!!sub_params!!", $sub_form, $onto_contribution_save_button_draft); $form=str_replace("!!onto_form_save_draft!!",$onto_contribution_save_button_draft , $form); } else { $form=str_replace("!!onto_form_save_draft!!",'', $form); } //droit de validation if ($scenario_uri && isset($dom_5) && !$dom_5->getRights($_SESSION['id_empr_session'],onto_common_uri::get_id($scenario_uri), 16)) { $validation_granted = false; } if ($validation_granted) { $form=str_replace("!!onto_form_push!!",(!$sub_form ? '' : ''), $form); } else { $form=str_replace("!!onto_form_push!!","", $form); } //Suppression du bouton annuler pour les sous onglets if (!$sub_form) { $form=str_replace("!!onto_form_history!!",'' , $form); }else{ $form=str_replace("!!onto_form_history!!", '', $form); } if (!$is_new || $this->is_draft) { $script=" function confirmation_delete_".$this->get_id()."() { if (confirm('".$msg['onto_contribution_delete_confirm'] ."')) {"; if ($sub_form){ $script .=" require(['dojo/topic'], function(topic){ topic.publish('deleteContrib', 'deleteSubContrib', {id: '".$this->get_id()."', sub : '".$sub."'}); }); "; } else { $script .= " document.location = './index.php?lvl=contribution_area&sub=".$sub."&id=".$this->get_id()."&action=delete';"; } $script .=" } }"; $form=str_replace("!!onto_form_del_script!!",$edition_granted ? $script : "" , $form); $form=str_replace("!!onto_form_delete!!",$edition_granted ? 'get_id().'();\' value="'.htmlentities($msg['onto_contribution_delete_button'],ENT_QUOTES,$charset).'"/>' :'' , $form); } else { $form=str_replace("!!onto_form_del_script!!",'' , $form); $form=str_replace("!!onto_form_delete!!",'' , $form); } $form = str_replace('!!document_title!!', addslashes($this->onto_class->label), $form); $valid_js = "var ".$prefix_uri."_validations = [".$valid_js."];"; $form = str_replace("!!onto_datasource_validation!!", $valid_js, $form); $form = str_replace("!!onto_form_name!!", onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name), $form); $form = str_replace("!!caller_contribution!!", onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name), $form); $form .= $end_form; return $form; } // end of member function get_form /** * retourne le formulaire de contribution lié à l'item * @return contribution_area_form */ public function get_contribution_area_form() { return $this->contribution_area_form; } /** * * @param contribution_area_form $contribution_area_form * @return onto_contribution_item */ public function set_contribution_area_form($contribution_area_form) { $this->contribution_area_form = $contribution_area_form; return $this; } /** * Renvoie un tableau des déclarations associées à l'instance * * @return onto_assertion * @access public */ public function get_assertions_from_active_properties() { $assertions = array(); // On construit manuellement l'assertion type $assertions[] = new onto_assertion($this->uri, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", $this->onto_class->uri, "", array('type'=>"uri")); foreach($this->onto_class->get_properties() as $uri_property){ $property=$this->onto_class->get_property($uri_property); if ($property->pmb_extended) { if (onto_common_uri::is_temp_uri($this->uri) && isset($_SESSION['contribution_default_fields']) && !empty($_SESSION['contribution_default_fields'][$uri_property])) { $property->pmb_extended['default_value'] = $_SESSION['contribution_default_fields'][$uri_property]; } /* @var $datatype onto_common_datatype */ $datatype_class_name=$this->resolve_datatype_class_name($property); if(!empty($property->pmb_extended['default_value']) && count($property->pmb_extended['default_value'])) { foreach ($property->pmb_extended['default_value'] as $bnode => $bnode_value) { $value_properties = array(); if (!empty($bnode_value['lang'])) { $value_properties["lang"] = $bnode_value['lang']; } if (!empty($bnode_value['display_label'])) { $value_properties["display_label"] = encoding_normalize::utf8_decode($bnode_value['display_label']); } if (!empty($bnode_value['assertions'])) { $value_properties["assertions"] = array(); foreach($bnode_value['assertions'] as $prop => $value) { $value_properties["assertions"][] = new onto_assertion($bnode_value['value'], $prop, $value); } } $range = $this->onto_class->get_property_range($uri_property); if (empty($bnode_value['type']) && !empty($range)) { // on prend le premier range par défaut $bnode_value['type'] = $range[0]; } if (!empty($range) && $bnode_value['type'] != $range[0]) { // le type ne correspond pas avec les donner dans le store. $bnode_value['type'] = $range[0]; } if (empty($bnode_value['value'])) { $bnode_value['value'] = ""; } $datatype = new $datatype_class_name($bnode_value['value'], $bnode_value['type'], $value_properties); $assertions[] = new onto_assertion($this->uri, $property->uri, $datatype->get_raw_value(), $datatype->get_value_type(), $datatype->get_value_properties()); } } if($this->onto_class->get_property($property->uri)->inverse_of){ $assertions[] = new onto_assertion($datatype->get_raw_value(), $this->onto_class->get_property($property->uri)->inverse_of->uri, $this->uri, $this->onto_class->uri); } } } unset($_SESSION['contribution_default_fields']); return $assertions; } // end of member function get_assertions /** * Renvoie un tableau des déclarations associées à l'instance * * @return onto_assertion * @access public */ public function get_assertions() { global $form_id, $form_uri, $sub, $sub_form, $parent_scenario_uri, $contributor, $is_draft; global $identifier; //$assertions = parent::get_assertions(); $assertions = array(); // On construit manuellement l'assertion type $assertions[] = new onto_assertion($this->uri, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", $this->onto_class->uri, "", array('type'=>"uri")); foreach ($this->datatypes as $property => $datatypes) { /* @var $datatype onto_common_datatype */ foreach ($datatypes as $datatype) { if(get_class($datatype) == 'onto_common_datatype_merge_properties'){ $class = new onto_common_class($datatype->get_value_type(),$this->onto_class->get_ontology()); $class->set_pmb_name(explode('#', $datatype->get_value_type())[1]); $sub_item = new onto_common_item($class, $datatype->get_value()); $sub_item->get_values_from_form(); if(onto_common_uri::is_temp_uri($sub_item->get_uri())){ $sub_item->replace_temp_uri(); } if($sub_item->check_values()){ $assertions = array_merge($assertions, $sub_item->get_assertions()); $assertions[] = new onto_assertion($this->uri, $property, $sub_item->get_uri(), $datatype->get_value_type(), $datatype->get_value_properties()); } }else{ $assertions[] = new onto_assertion($this->uri, $property, $datatype->get_raw_value(), $datatype->get_value_type(), $datatype->get_value_properties()); if($this->onto_class->get_property($property)->inverse_of){ $assertions[] = new onto_assertion($datatype->get_raw_value(), $this->onto_class->get_property($property)->inverse_of->uri, $this->uri, $this->onto_class->uri); } } } } //on ajoute le sub if ($sub) { $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#sub", $sub, "", array('type'=>"literal")); } //on ajoute l'id du formulaire en cours if ($form_id) { $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#form_id", $form_id, "", array('type'=>"literal")); } //on ajoute l'uri du formulaire en cours if ($form_uri) { $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#form_uri", $form_uri, "", array('type'=>"literal")); } // On ajoute le contributeur if ($contributor) { $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#has_contributor", $contributor, "", array('type'=>"literal")); } // On ajoute le sub_form if ($sub_form) { $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#sub_form", $sub_form, "", array('type'=>"literal")); } // uri du scenario if ($parent_scenario_uri) { $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#parent_scenario_uri", $parent_scenario_uri, "", array('type'=>"literal")); } // Contribution brouillon if ($is_draft) { $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#is_draft", $is_draft, "", array('type'=>"literal")); if (empty($this->draft_identifier)) { // On créer un identifient unique $this->draft_identifier = "0.".round(microtime(true)*10000); } $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#draft_identifier", $this->draft_identifier, "", array('type'=>"literal")); } //timestamp $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#last_edit", time(), "", array('type'=>"literal")); //on ajoute l'identifier if ($identifier) { $assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#identifier", $identifier, "", array('type'=>"literal")); } return $assertions; } /** * Instancie les datatypes à partir des triplets du store * * @param onto_assertion assertions Tableau des déclarations à associer à l'instance * @return void * @access public */ public function set_assertions($assertions) { $temp_dataype = $this->datatypes; $this->datatypes = []; /* @var $assertion onto_assertion */ foreach ($assertions as $assertion) { $range = $this->onto_class->get_property_range($assertion->get_predicate()); if (count($range) && (in_array($assertion->get_object_type(), $range) || $assertion->get_object_type() == "http://www.w3.org/2000/01/rdf-schema#range" || $assertion->get_object_type() == "merge_properties") ) { $property = $this->onto_class->get_property($assertion->get_predicate()); $datatype_class_name=$this->resolve_datatype_class_name($property); $datatype_ui_class_name=$this->resolve_datatype_ui_class_name($datatype_class_name,$property,$this->onto_class->get_restriction($assertion->get_predicate())); $datatype=new $datatype_class_name($assertion->get_object(), $assertion->get_object_type(), $assertion->get_object_properties()); $datatype->set_datatype_ui_class_name($datatype_ui_class_name,$this->onto_class->get_restriction($assertion->get_predicate())); $this->datatypes[$assertion->get_predicate()][]=$datatype; } else { if ($assertion->get_predicate() == "http://www.pmbservices.fr/ontology#draft_identifier") { $this->draft_identifier = $assertion->get_object(); } if ($assertion->get_predicate() == "http://www.pmbservices.fr/ontology#last_edit") { $this->last_edit = $assertion->get_object(); } if ($assertion->get_predicate() == "http://www.pmbservices.fr/ontology#is_draft") { $this->is_draft= ($assertion->get_object() ? true : false) ; } } } if (empty($this->datatypes)) { // si on n'a rien mis dans $this->datatypes on récupère les anciens. $this->datatypes = $temp_dataype; } return true; } // end of member function set_assertions /** * Instancie les datatypes à partir des données postées du formulaire * * @return void * @access public */ public function get_values_from_form() { $this->datatypes = array(); $prefix = onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name); if(sizeof($this->onto_class->get_properties())){ foreach($this->onto_class->get_properties() as $uri_property){ $property=$this->onto_class->get_property($uri_property); $datatype_class_name = $this->resolve_datatype_class_name($property); $this->datatypes = array_merge($this->datatypes, $datatype_class_name::get_values_from_form($prefix, $property, $this->uri)); } } foreach($this->onto_class->get_properties_and_restrictions_from_sub_class_of() as $uri_property){ $property=$this->onto_class->get_property($uri_property); $datatype_class_name = $this->resolve_datatype_class_name($property); $this->datatypes = array_merge($this->datatypes, $datatype_class_name::get_values_from_form($prefix, $property, $this->uri)); } foreach ($this->datatypes as $uri_property => $datatype) { if (!in_array($uri_property,$this->onto_class->get_properties())) { $this->onto_class->set_property($this->onto_class->get_property($uri_property)); } } $this->onto_class->get_restrictions(); return $this->datatypes; } // end of member function get_values_from_form private function merge_datatypes() { $datatypes = $this->datatypes; $this->datatypes = []; $this->set_assertions($this->get_assertions_from_active_properties()); if(!empty($datatypes)) { foreach ($datatypes as $uri => $values) { $this->datatypes[$uri] = $values; } } } public function get_label($uri_property){ global $lang, $msg; if (!is_array($uri_property)) { $label = parent::get_label($uri_property); if (empty($label)){ $label = $msg['contribution_draft_name']; } return $label; } $values = []; foreach ($uri_property as $uri) { if (!empty($this->datatypes[$uri])) { $values = array_merge($values, $this->datatypes[$uri]); } } $label = ""; $default_label = ""; if(count($values) == 1){ $label = $values[0]->get_value(); }else if(count($values) > 1){ foreach($values as $value){ if ($label) { $label .= ", "; } if ($default_label) { $default_label .= ", "; } if($value->offsetget_value_property("lang") == ""){ $default_label .= $value->get_value(); } if(!$default_label){ $default_label .= $value->get_value(); } if($value->offsetget_value_property("lang") == substr($lang,0,2)){ $label .= $value->get_value(); } } if(!$label) $label = $default_label; } if (empty($label)){ if ($this->isbd){ return $this->isbd; } $label = $msg['contribution_draft_name']; } return $label; } /** * methode appelee apres la sauvegarde l'item */ public function post_save() { $this->update_isbd(); } private function update_isbd() { global $include_path; $isbd = ""; $type = $this->get_onto_class_pmb_name(); $template_path = ""; $store = new contribution_area_store(); switch (true) { case file_exists("$include_path/templates/contribution_area/isbd/".$type."_subst.html") : $template_path = "$include_path/templates/contribution_area/isbd/".$type."_subst.html"; break; case file_exists("$include_path/templates/contribution_area/isbd/".$type.".html") : $template_path = "$include_path/templates/contribution_area/isbd/".$type.".html"; break; case (strpos($type, "authperso") == 0 && file_exists("$include_path/templates/contribution_area/isbd/authperso_subst.html")) : $template_path = "$include_path/templates/contribution_area/isbd/authperso_subst.html"; break; case (strpos($type, "authperso") == 0 && file_exists("$include_path/templates/contribution_area/isbd/authperso.html")) : $template_path = "$include_path/templates/contribution_area/isbd/authperso.html"; break; case file_exists("$include_path/templates/contribution_area/isbd/gabarit.html") : $template_path = "$include_path/templates/contribution_area/isbd/gabarit.html"; break; } if($template_path) { $contribution = new contribution_area_item($this->uri); $h2o = H2o_collection::get_instance($template_path); $isbd = $h2o->render(['contribution' => $contribution]); } else { $isbd = contribution_area_forms_controller::get_display_label($this->uri); } //delete / insert $query = "delete { <".$this->uri."> pmb:isbd ?o }"; $store->get_datastore()->query($query); $query = "insert into { <".$this->uri."> pmb:isbd '".addslashes($isbd)."' }"; $store->get_datastore()->query($query); //Traitement particulier pour les authperso if(strpos($this->uri,'authperso') !== false){ $query = "delete { <".$this->uri."> pmb:displayLabel ?o }"; $store->get_datastore()->query($query); $query = "insert into { <".$this->uri."> pmb:displayLabel '".addslashes($isbd)."' }"; $store->get_datastore()->query($query); } $this->isbd = $isbd; } public function get_draft_identifier() { return $this->draft_identifier; } public function get_last_edit() { return $this->last_edit; } /** * Suppression d'une fichier liée au document numérique * Le pmb_name doit être égal à "docnum" * * @return boolean */ public function remove_file_uploads() { if ($this->item->onto_class->pmb_name != "docnum") { return FALSE; } $file_name = ""; $upload_directory = 0; $success = FALSE; $docnum_files = $this->datatypes["http://www.pmbservices.fr/ontology#docnum_file"] ?? array(); if (!empty($docnum_files) && !empty($docnum_files[0])) { $file_name = $docnum_files[0]->get_value(); } $upload_directories = $this->datatypes["http://www.pmbservices.fr/ontology#upload_directory"] ?? array(); if (!empty($upload_directories) && !empty($upload_directories[0])) { $upload_directory = $upload_directories[0]->get_value(); } if (!empty($file_name) && !empty($upload_directory)) { $upload_folder = new upload_folder($upload_directory); $repertoire_path = $upload_folder->repertoire_path; if (substr($repertoire_path, -1) != "/") { $repertoire_path .= "/"; } $file_path = $repertoire_path.explnum::clean_explnum_file_name($file_name); /** * On vérifie si le fichier existe et que l'on a bien les autorisations nécessaires * pour modifier/supprimer un fichier. */ if (is_file($file_path) && is_writable($file_path)) { $success = unlink($file_path); } } return $success; } /** * Retourne le formulaire pour une entité du fond * * @param string $prefix_url Préfixe de l'url de soumission du formulaire * @param string $flag Nom du flag à utiliser pour limiter aux champs concernés * @param string $action * @return string */ public function get_form_entity(string $prefix_url = "", string $flag = "", string $action = "save") { global $ontology_tpl, $sub_form, $sub, $contributor, $charset, $form_uri, $msg, $lvl_redirect, $sub_tab; global $scenario_uri, $create_entity; //gestion des droits global $gestion_acces_active, $gestion_acces_empr_contribution_scenario; if ($gestion_acces_active == 1) { $ac = new acces(); if ($gestion_acces_empr_contribution_scenario == 1) { $dom_5 = $ac->setDomain(5); } } // Si on a aucun identifier en edition on fait la redirection if (empty($this->identifier) && !$create_entity) { $template = $msg['empr_contribution_area_unauthorized']; if (!$sub_tab) { $template .=''; } return $template; } $form = ""; $end_form = ""; $this->merge_datatypes(); $temp_datatype_tab = $this->order_datatypes(); if(!$sub_form){ $form .= jscript_unload_question(); $form.= '
'; $form.= '
'; $end_form .= "
"; } // Commentaire du formulaire : $comment = $this->contribution_area_form->get_comment(); if ($comment) { $form .= "
" . $comment . "
"; } // Contenu du formulaire : $form .= $ontology_tpl['form_body']; if (!is_numeric((explode('#',$this->uri)[1]))) { $prefix_uri = explode('#',$this->uri)[1]; } else { $prefix_uri = $sub."_".explode('#',$this->uri)[1]; } $form = str_replace("!!uri!!",$this->uri,$form); $form = str_replace("!!prefix_uri!!",$prefix_uri,$form); $form = str_replace("!!onto_form_scripts!!",(!$sub_form ? $ontology_tpl['form_scripts'] : $ontology_tpl['form_scripts']), $form); $form = str_replace("!!caller!!",rawurlencode(onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name)), $form); $form = str_replace("!!onto_form_id!!",onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name) , $form); $form = str_replace("!!onto_form_action!!",$prefix_url."&action=".$action, $form); $form = str_replace("!!onto_form_title!!",htmlentities($this->contribution_area_form->get_name(),ENT_QUOTES,$charset) , $form); $linked_forms = array(); if ($this->contribution_area_form->get_linked_forms()) { $linked_forms = $this->contribution_area_form->get_linked_forms(); } $content=''; $valid_js = ""; $properties = array(); $properties = $this->onto_class->get_properties(); $properties = array_merge($properties, $this->onto_class->get_properties_and_restrictions_from_sub_class_of()); $properties = array_unique($properties); sort($properties); if(sizeof($properties)){ $index = 0; foreach($properties as $uri_property){ $property = $this->onto_class->get_property($uri_property); $datatype_class_name=$this->resolve_datatype_class_name($property); $datatype_ui_class_name=$this->resolve_datatype_ui_class_name($datatype_class_name,$property,$this->onto_class->get_restriction($property->uri)); // On encapsule dans des divs movables pour l'édition de la grille de saisie $movable_div = $ontology_tpl['form_movable_div']; $movable_div = str_replace('!!movable_index!!', $index, $movable_div); if((!$flag || (in_array($flag,$property->flags))) && isset($property->pmb_extended) && (!$property->is_undisplayed())){ $property = $this->format_property($property, $linked_forms, self::NOT_DRAFT, self::IS_ENTITY); //propriété obligatoire if (!empty($property->pmb_extended['mandatory'])) { $this->onto_class->get_restriction($property->uri)->set_min('1'); } if (!empty($property->pmb_extended['hidden'])) { //propriété cachée $template = $this->get_property_hidden_template($property, $datatype_ui_class_name, $temp_datatype_tab); } else { $template = $this->get_property_template($property, $datatype_ui_class_name, $temp_datatype_tab, $flag); } $movable_div = str_replace('!!datatype_ui_form!!', $template, $movable_div); $movable_div = str_replace('!!data_pmb_uniqueid!!', $form_uri.'_'.$property->pmb_name, $movable_div); $content .= $movable_div; if($valid_js){ $valid_js.= ","; } $valid_js.= $datatype_ui_class_name::get_validation_js($this->uri,$property,$this->onto_class->get_restriction($property->uri),(isset($temp_datatype_tab[$property->uri]) ? $temp_datatype_tab[$property->uri][$datatype_ui_class_name] : null),onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name),$flag); $index++; } elseif (!empty($temp_datatype_tab[$uri_property]) && !empty($datatype_ui_class_name) && !empty($temp_datatype_tab[$uri_property][$datatype_ui_class_name])) { if (!empty($temp_datatype_tab[$uri_property][$datatype_ui_class_name][0])) { $values = $temp_datatype_tab[$uri_property][$datatype_ui_class_name][0]->get_value(); if (!empty($values)) { $movable_div = str_replace('!!datatype_ui_form!!', $datatype_ui_class_name::get_hidden_fields($property, $temp_datatype_tab[$property->uri][$datatype_ui_class_name], onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name)), $movable_div); $movable_div = str_replace('!!data_pmb_uniqueid!!', $form_uri.'_'.$property->pmb_name, $movable_div); $content .= $movable_div; if($valid_js){ $valid_js.= ","; } $valid_js.= $datatype_ui_class_name::get_validation_js($this->uri,$property,$this->onto_class->get_restriction($property->uri),(isset($temp_datatype_tab[$property->uri]) ? $temp_datatype_tab[$property->uri][$datatype_ui_class_name] : null),onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name),$flag); $index++; } } } } } $content.= ""; if ($this->identifier) { $content.= ""; } if ($create_entity) { $content.= ""; } $form = str_replace("!!onto_form_content!!", $content, $form); $form = str_replace("!!parent_scenario_uri!!", '', $form); $form = str_replace("!!contributor!!",($contributor ? $contributor : $_SESSION['id_empr_session']), $form); // Bouton proposer (save) : $form = str_replace("!!onto_form_submit!!", '', $form); // Bouton enregistrer (draft) : $form = str_replace("!!onto_form_save_draft!!", '', $form); // Bouton valider (push) : // Droit de validation sur cette contribution $validation_granted = true; if ($scenario_uri && isset($dom_5) && !$dom_5->getRights($_SESSION['id_empr_session'],onto_common_uri::get_id($scenario_uri), 16)) { $validation_granted = false; } $button = ""; if ($validation_granted) { if ($sub_form) { $button = ''; } else { $button = ''; } } $form = str_replace("!!onto_form_push!!", $button, $form); // Bouton annuler $button = ""; if (!$sub_form) { $button = ''; } $form = str_replace("!!onto_form_history!!", $button, $form); // Bouton supprimer : $form = str_replace("!!onto_form_del_script!!", '', $form); $form = str_replace("!!onto_form_delete!!", '', $form); $form = str_replace('!!document_title!!', addslashes($this->onto_class->label), $form); $form = str_replace("!!onto_datasource_validation!!", "var ".$prefix_uri."_validations = [".$valid_js."];", $form); $form = str_replace("!!onto_form_name!!", onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name), $form); $form .= $end_form; return $form; } /** * Retourne une property formater avec les données dans linked_forms et des paramètre is_draft et is_entity * * @param onto_common_property $property * @param array $linked_forms * @param bool $is_draft * @param bool $is_entity * @return onto_common_property */ private function format_property($property, $linked_forms = array(), bool $is_draft = self::NOT_DRAFT, bool $is_entity = self::NOT_ENTITY, $linked_scenarios = array()) { global $area_id; $property->is_entity = $is_entity; $property->is_draft = $is_draft; //gestion des scenarios liés $property->has_multiple_scenarios = false; $property->linked_scenarios = array(); //gestion des formulaires liés $property->has_linked_form = false; $property->linked_forms = array(); foreach($linked_scenarios as $scenario_id => $linked_scenario) { if ($linked_scenario['propertyPmbName'] == $property->pmb_name) { if (!in_array($scenario_id, $property->linked_scenarios)) { $property->linked_scenarios[] = $scenario_id; } } } for($i = 0; $i < count($linked_forms); $i++) { //recherche du formulaire lié if ($linked_forms[$i]['propertyPmbName'] == $property->pmb_name) { $form_key = count($property->linked_forms); $property->has_linked_form = true; $property->linked_forms[$form_key] = array(); $property->linked_forms[$form_key]['attachment_id'] = $linked_forms[$i]['attachmentId']; $property->linked_forms[$form_key]['area_id'] = $area_id; //id_du formulaire dans la base relationnelle $property->linked_forms[$form_key]['form_id'] = $linked_forms[$i]['formId']; //id du formulaire dans le store $property->linked_forms[$form_key]['form_id_store'] = $linked_forms[$i]['id']; //uri du formulaire dans le store $property->linked_forms[$form_key]['form_uri'] = $linked_forms[$i]['uri']; //type du formulaire $property->linked_forms[$form_key]['form_type'] = $linked_forms[$i]['entityType']; //titre du formulaire $property->linked_forms[$form_key]['form_title'] = $linked_forms[$i]['name']; //URI du scénario parent $property->linked_forms[$form_key]['scenario_uri'] = $linked_forms[$i]['scenarioUri']; $property->linked_forms[$form_key]['scenario_id'] = $linked_forms[$i]['scenarioId']; if (!in_array($linked_forms[$i]['scenarioId'], $property->linked_scenarios)) { $property->linked_scenarios[] = $linked_forms[$i]['scenarioId']; } } } if (count($property->linked_scenarios) > 1) { $property->has_multiple_scenarios = true; } //on modifie la propiété avec le paramétrage du formulaire if (!empty($property->pmb_extended['label'])) { $property->pmb_extended['label'] = onto_common_ui::get_message($property->pmb_extended['label']); $property->label = $property->pmb_extended['label']; } if (!empty($property->pmb_extended['default_value'])) { $property->default_value = array(); foreach ($property->pmb_extended['default_value'] as $value) { if($value && is_array($value)){ $property->default_value[] = !empty($value['value']) ? $value['value'] : []; } } } return $property; } public function get_property_hidden_template($property, $datatype_ui_class_name, $temp_datatype_tab) { if (!empty($datatype_ui_class_name)) { $tmp_class = ''; if (!empty($temp_datatype_tab[$property->uri][$datatype_ui_class_name])) { $tmp_class = $temp_datatype_tab[$property->uri][$datatype_ui_class_name]; } return $datatype_ui_class_name::get_hidden_fields($property, $tmp_class, onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name)); } return ''; } public function get_property_template($property, $datatype_ui_class_name, $temp_datatype_tab, $flag) { global $ontology_tpl, $charset; $datatype_ui_form = ""; if (!empty($datatype_ui_class_name)) { $datatype_ui_form = $datatype_ui_class_name::get_form($this->uri, $property, $this->onto_class->get_restriction($property->uri), (isset($temp_datatype_tab[$property->uri]) ? $temp_datatype_tab[$property->uri][$datatype_ui_class_name] : null), onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name),$flag); $form_row_content_tooltip = ''; if (!empty($property->pmb_extended['tooltip'])) { $property->pmb_extended['tooltip'] = onto_common_ui::get_message($property->pmb_extended['tooltip']); $form_row_content_tooltip = $ontology_tpl['form_row_content_tooltip']; $form_row_content_tooltip = str_replace('!!form_row_content_tooltip_content!!', htmlentities($property->pmb_extended['tooltip'], ENT_QUOTES, $charset), $form_row_content_tooltip); $form_row_content_tooltip = str_replace('!!onto_row_id!!', onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name).'_'.$property->pmb_name, $form_row_content_tooltip); } $datatype_ui_form = str_replace('!!form_row_content_tooltip!!', $form_row_content_tooltip, $datatype_ui_form); $mandatory_sign = ''; $mandatory_class = ''; if (!empty($property->pmb_extended['mandatory'])) { $mandatory_sign = $ontology_tpl['form_row_content_mandatory_sign']; $mandatory_class = 'mandatory-contribution-field'; } $datatype_ui_form = str_replace('!!form_row_content_mandatory_sign!!', $mandatory_sign, $datatype_ui_form); $datatype_ui_form = str_replace('!!form_row_content_mandatory_class!!', $mandatory_class, $datatype_ui_form); $comment = ''; if (!empty($property->pmb_extended['comment'])) { $property->pmb_extended['comment'] = onto_common_ui::get_message($property->pmb_extended['comment']); $comment = ''.nl2br(htmlentities($property->pmb_extended['comment'], ENT_QUOTES, $charset)).''; } $datatype_ui_form = str_replace('!!form_row_content_comment!!', $comment, $datatype_ui_form); } return $datatype_ui_form; } public function set_identifier($id) { $this->identifier = $id; } } // end of onto_contribution_item