uri)) {
$this->set_assertions($this->get_assertions_from_active_properties());
}
$this->merge_datatypes();
$temp_datatype_tab = $this->order_datatypes();
$form = $ontology_tpl['form_body_grid'];
$form = str_replace("!!onto_form_scripts!!", $ontology_tpl['form_scripts'], $form);
$form = str_replace("!!return_url!!", $prefix_url . ($action ? "&action=" . $action : ""), $form);
if (isset($this->contribution_area_form)) {
$form = str_replace("!!onto_form_title!!", htmlentities($this->contribution_area_form->get_name(), ENT_QUOTES, $charset), $form);
} else {
$form = str_replace("!!onto_form_title!!", htmlentities($msg ["admin_contribution_area_form_type"] . " : " . $this->onto_class->label, ENT_QUOTES, $charset), $form);
}
$content = '';
$index = 0;
$properties = $this->onto_class->get_properties();
$properties_sub_class = $this->onto_class->get_properties_and_restrictions_from_sub_class_of();
foreach ($properties_sub_class as $property_sub_class) {
if (!in_array($property_sub_class, $properties)) {
$properties[] = $property_sub_class;
}
}
sort($properties);
foreach ($properties as $uri_property) {
$property = $this->onto_class->get_property($uri_property);
if ((empty($flag) || (in_array($flag, $property->flags))) && isset($property->pmb_extended)) {
$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);
$movable_div = str_replace('!!movable_property_label!!', htmlentities($property->label, ENT_QUOTES, $charset), $movable_div);
// On modifie la propiété avec le paramétrage du formulaire
if (!empty($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 (is_object($value) && isset($value->value)) {
$property->default_value[] = $value->value;
}
if (is_array($value) && isset($value['value'])) {
$property->default_value[] = $value['value'];
}
}
}
// Propriété obligatoire
if (!empty($property->pmb_extended['mandatory'])) {
$this->onto_class->get_restriction($property->uri)->set_min('1');
}
$property_data = array();
if (!empty($temp_datatype_tab[$property->uri])) {
$property_data = $temp_datatype_tab[$property->uri][$datatype_ui_class_name];
}
// Propriété cachée
if (!empty($property->pmb_extended['hidden'])) {
$movable_div = str_replace('!!datatype_ui_form!!', $datatype_ui_class_name::get_hidden_fields($this->uri, $property, $this->onto_class->get_restriction($property->uri), $property_data, onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name), $flag), $movable_div);
} else {
$movable_div = str_replace('!!datatype_ui_form!!', $datatype_ui_class_name::get_form($this->uri, $property, $this->onto_class->get_restriction($property->uri), $property_data, onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name), $flag), $movable_div);
}
$content .= $movable_div;
$index++;
}
}
if (!is_numeric((explode('#', $this->uri)[1]))) {
$prefix_uri = explode('#', $this->uri)[1];
} else {
$prefix_uri = $sub."_".explode('#', $this->uri)[1];
}
$content .= '';
$form = str_replace("!!onto_form_content!!", $content, $form);
$form = str_replace("!!onto_form_save!!", '', $form);
$form = str_replace("!!onto_form_back!!", '', $form);
$form = str_replace("!!onto_form_del_script!!", '', $form);
$form = str_replace("!!onto_datasource_validation!!", '', $form);
$form = str_replace("!!form_id!!", $this->contribution_area_form->get_id(), $form);
$form = str_replace("!!form_type!!", $this->contribution_area_form->get_type(), $form);
$form .= '';
return $form;
} // end of member function get_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;
}
/**
*
* @return contribution_area_form
*/
public function get_contribution_area_form() {
return $this->contribution_area_form;
}
/**
* 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) {
/* @var $datatype onto_common_datatype */
$datatype_class_name = $this->resolve_datatype_class_name ( $property );
if (count ( $property->pmb_extended ['default_value'] )) {
foreach ( $property->pmb_extended ['default_value'] as $bnode => $bnode_value ) {
$value_properties = array();
if ($bnode_value['lang']) {
$value_properties["lang"] = $bnode_value['lang'];
}
if ($bnode_value['display_label']) {
$value_properties["display_label"] = encoding_normalize::utf8_decode($bnode_value['display_label']);
}
if (!$bnode_value['type']) {
//on prend le premier range par défaut
$bnode_value['type'] = $this->onto_class->get_property_range($uri_property)[0];
}
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);
}
}
$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 );
}
}
}
return $assertions;
} // end of member function get_assertions
/**
* Appel les fonctions static get_form et articule le formulaire de l'item courant
*
* on itère sur les propriétés de l'onto_class, on envoi aussi le datatype si présent
*
* @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
*
* @return string
* @access public
*/
public function get_form($prefix_url = "", $flag = "", $action = "save") {
global $msg, $charset, $ontology_tpl, $area_id, $sub_form, $form_id, $sub, $scenario, $pmb_id, $contributor;
global $ontology_contribution_tpl;
// lors de la première instance de notre contribution, on renseigne les champs avec les valeurs par défaut
$this->merge_datatypes();
$temp_datatype_tab = $this->order_datatypes ();
$end_form = '';
$form = '';
if (!$sub_form) {
$form .= '
';
$form .= '
';
$end_form .= "
";
}
$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!!", $ontology_contribution_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 = "";
/**
* *****TODO : modif temporaire**********
*/
$properties = $this->onto_class->get_properties ();
$properties = array_merge($properties, $this->onto_class->get_properties_and_restrictions_from_sub_class_of());
sort($properties);
/**
* ***********************************
*/
if (!empty($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 );
$movable_div = str_replace ( '!!movable_property_label!!', htmlentities ( $property->label, ENT_QUOTES, $charset ), $movable_div );
// gestion des formulaires liés
$property->has_linked_form = false;
$property->linked_form = array ();
for($i=0; $ipmb_name) {
$property->has_linked_form = true;
$property->linked_form['attachment_id'] = $linked_forms[$i]['id'];
// id_du formulaire dans la base relationnelle
$property->linked_form['form_id'] = $linked_forms[$i]['formId'];
// id du formulaire dans le store
$property->linked_form['form_id_store'] = $linked_forms[$i]['id'];
// uri du formulaire dans le store
$property->linked_form['form_uri'] = $linked_forms[$i]['uri'];
if ($area_id) {
// id de l'espace
$property->linked_form['area_id'] = $area_id;
}
// type du formulaire
$property->linked_form['form_type'] = $linked_forms[$i]['entityType'];
// titre du formulaire
$property->linked_form['form_title'] = $linked_forms[$i]['name'];
// URI du scénario parent
$property->linked_form['scenario_uri'] = $linked_forms[$i]['scenarioUri'];
}
// recherche du formulaire lié
// if ($linked_forms[$i]['propertyPmbName'] == $property->pmb_name) {
// $property->has_linked_form = true;
// $property_linked_form = array();
// $property_linked_form['attachment_id'] = $linked_forms[$i]['id'];
// id_du formulaire dans la base relationnelle
// $property_linked_form['form_id'] = $linked_forms[$i]['formId'];
// id du formulaire dans le store
// $property_linked_form['form_id_store'] = $linked_forms[$i]['id'];
// uri du formulaire dans le store
// $property_linked_form['form_uri'] = $linked_forms[$i]['uri'];
// if ($area_id) {
// id de l'espace
// $property_linked_form['area_id'] = $area_id;
// }else {
// $property_linked_form['area_id'] = "";
// }
// type du formulaire
// $property_linked_form['form_type'] = $linked_forms[$i]['entityType'];
// //titre du formulaire
// $property_linked_form['form_title'] = $linked_forms[$i]['name'];
// URI du scénario parent
// $property_linked_form['scenario_uri'] = $linked_forms[$i]['scenarioUri'];
// $property->linked_form[] = $property_linked_form;
// }
}
// on modifie la propiété avec le paramétrage du formulaire
if (!empty($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 $key => $value ) {
//$property->default_value[] = $value["value"];
if($value && is_array($value)){
$property->default_value[] = $value['value'];
}
}
}
// 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]);
// }
$property_data = array();
if (!empty($temp_datatype_tab[$property->uri])) {
$property_data = $temp_datatype_tab[$property->uri][$datatype_ui_class_name];
}
// propriété cachée
if (!empty($property->pmb_extended['hidden'])) {
$movable_div = str_replace('!!datatype_ui_form!!', $datatype_ui_class_name::get_hidden_fields($this->uri, $property, $this->onto_class->get_restriction($property->uri), $property_data, onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name)), $movable_div);
} else {
$movable_div = str_replace('!!datatype_ui_form!!', $datatype_ui_class_name::get_form($this->uri, $property, $this->onto_class->get_restriction($property->uri), $property_data, onto_common_uri::get_name_from_uri($this->uri, $this->onto_class->pmb_name), $flag), $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 ), $property_data, 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 );
}
$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 {
if ($sub_form) {
$submit_msg = $msg ['onto_contribution_inter_submit_button'];
} else {
$submit_msg = $msg ['onto_contribution_submit_button'];
}
$form = str_replace ( "!!onto_form_submit!!", '', $form );
}
$form = str_replace ( "!!onto_form_push!!", (!$sub_form ? '' : ''), $form );
$form = str_replace ( "!!onto_form_history!!", '', $form );
$script = "
function confirmation_delete() {
if (confirm('" . $msg ['onto_contribution_delete_confirm'] . "')) {
document.location = './catalog.php?categ=contribution_area&sub=" . $sub . "&id=" . $this->get_id () . "&action=delete';
}
}";
$form = str_replace ( "!!onto_form_del_script!!", $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 .= $end_form;
return $form;
} // end of member function get_form
/**
* 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;
$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"));
}
//timestamp
$assertions[] = new onto_assertion($this->uri, "http://www.pmbservices.fr/ontology#last_edit", time(), "", array('type'=>"literal"));
return $assertions;
}
private function merge_datatypes() {
$datatypes = $this->datatypes;
$this->datatypes = [];
$this->set_assertions($this->get_assertions_from_active_properties());
foreach ($datatypes as $uri => $values) {
$this->datatypes[$uri] = $values;
}
}
public function get_label($uri_property){
global $lang;
if (!is_array($uri_property)) {
return parent::get_label($uri_property);
}
$values = [];
foreach ($uri_property as $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;
}
return $label;
}
/**
* 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) {
/* @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;
}
}
return true;
} // end of member function set_assertions
/**
* 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;
}
} // end of onto_common_item