Server : Apache System : Linux webd348.cluster026.gra.hosting.ovh.net 5.15.148-ovh-vps-grsec-zfs-classid #1 SMP Thu Feb 8 09:41:04 UTC 2024 x86_64 User : hednacluml ( 122243) PHP Version : 8.3.9 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl Directory : /home/hednacluml/ecole/ecrire/inc/ |
<?php /***************************************************************************\ * SPIP, Système de publication pour l'internet * * * * Copyright © avec tendresse depuis 2001 * * Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribué sous licence GNU/GPL. * \***************************************************************************/ /** * Préchargement les formulaires d'édition d'objets, notament pour les traductions * * @package SPIP\Core\Objets **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/autoriser'); // necessaire si appel de l'espace public /** * Retourne les valeurs à charger pour un formulaire d'édition d'un objet * * Lors d'une création, certains champs peuvent être préremplis * (c'est le cas des traductions) * * @param string $type * Type d'objet (article, breve...) * @param string|int $id_objet * Identifiant de l'objet, ou "new" pour une création * @param int $id_rubrique * Identifiant éventuel de la rubrique parente * @param int $lier_trad * Identifiant éventuel de la traduction de référence * @param string $champ_titre * Nom de la colonne SQL de l'objet donnant le titre : pas vraiment idéal ! * On devrait pouvoir le savoir dans la déclaration de l'objet * @return array * Couples clés / valeurs des champs du formulaire à charger. **/ function precharger_objet($type, $id_objet, $id_rubrique = 0, $lier_trad = 0, $champ_titre = 'titre') { $row = []; $table = table_objet_sql($type); $_id_objet = id_table_objet($table); // si l'objet existe deja, on retourne simplement ses valeurs if (is_numeric($id_objet)) { return sql_fetsel('*', $table, "$_id_objet=" . intval($id_objet)); } // ici, on demande une creation. // on prerempli certains elements : les champs si traduction, // les id_rubrique et id_secteur si l'objet a ces champs $desc = lister_tables_objets_sql($table); # il faudrait calculer $champ_titre ici $is_rubrique = isset($desc['field']['id_rubrique']); $is_secteur = isset($desc['field']['id_secteur']); // si demande de traduction // on recupere les valeurs de la traduction if ($lier_trad) { if ($select = charger_fonction('precharger_traduction_' . $type, 'inc', true)) { $row = $select($id_objet, $id_rubrique, $lier_trad); } else { $row = precharger_traduction_objet($type, $id_objet, $id_rubrique, $lier_trad, $champ_titre); } } else { $row[$champ_titre] = ''; if ($is_rubrique) { $row['id_rubrique'] = $id_rubrique; } } // calcul de la rubrique # note : comment faire pour des traductions sur l'objet rubriques ? if ($is_rubrique) { // appel du script a la racine, faut choisir // admin restreint ==> sa premiere rubrique // autre ==> la derniere rubrique cree if (!$row['id_rubrique']) { if ($GLOBALS['connect_id_rubrique']) { $row['id_rubrique'] = $id_rubrique = current($GLOBALS['connect_id_rubrique']); } else { $row_rub = sql_fetsel('id_rubrique', 'spip_rubriques', '', '', 'id_rubrique DESC', 1); $row['id_rubrique'] = $id_rubrique = $row_rub['id_rubrique']; } if (!autoriser('creerarticledans', 'rubrique', $row['id_rubrique'])) { // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises $res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0'); while (!autoriser('creerarticledans', 'rubrique', $row['id_rubrique']) && $row_rub = sql_fetch($res)) { $row['id_rubrique'] = $row_rub['id_rubrique']; } } } } // recuperer le secteur, pour affecter les bons champs extras if ($id_rubrique and $is_secteur) { if (!$row['id_secteur']) { $row_rub = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . sql_quote($id_rubrique)); $row['id_secteur'] = $row_rub; } } return $row; } /** * Récupère les valeurs d'une traduction de référence pour la création * d'un objet (préremplissage du formulaire). * * @param string $type * Type d'objet (article, breve...) * @param string|int $id_objet * Identifiant de l'objet, ou "new" pour une création * @param int $id_rubrique * Identifiant éventuel de la rubrique parente * @param int $lier_trad * Identifiant éventuel de la traduction de référence * @param string $champ_titre * Nom de la colonne SQL de l'objet donnant le titre * @return array * Couples clés / valeurs des champs du formulaire à charger **/ function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_trad = 0, $champ_titre = 'titre') { $table = table_objet_sql($type); $_id_objet = id_table_objet($table); // Recuperer les donnees de l'objet original $row = sql_fetsel('*', $table, "$_id_objet=" . intval($lier_trad)); if ($row) { include_spip('inc/filtres'); $row[$champ_titre] = filtrer_entites(objet_T($type, 'info_nouvelle_traduction')) . ' ' . $row[$champ_titre]; } else { $row = []; } // on met l'objet dans une rubrique si l'objet le peut $desc = lister_tables_objets_sql($table); $is_rubrique = isset($desc['field']['id_rubrique']); if ($is_rubrique) { $langues_dispo = explode(',', $GLOBALS['meta']['langues_multilingue']); // si le redacteur utilise une autre langue que celle de la source, on suppose que c'est pour traduire dans sa langue if (in_array($GLOBALS['spip_lang'], $langues_dispo) and $GLOBALS['spip_lang'] !== $row['lang']) { $row['lang'] = $GLOBALS['spip_lang']; } // sinon si il y a seulement 2 langues dispos, on bascule sur l'"autre" elseif (count($langues_dispo) == 2) { $autre_langue = array_diff($langues_dispo, [$row['lang']]); if (count($autre_langue) == 1) { $row['lang'] = reset($autre_langue); } } else { $row['lang'] = 'en'; } if ($id_rubrique) { $row['id_rubrique'] = $id_rubrique; return $row; } $id_rubrique = $row['id_rubrique']; // Regler la langue, si possible, sur celle du redacteur // Cela implique souvent de choisir une rubrique ou un secteur if (in_array($GLOBALS['spip_lang'], $langues_dispo)) { // Si le menu de langues est autorise sur l'objet, // on peut changer la langue quelle que soit la rubrique // donc on reste dans la meme rubrique if (in_array($table, explode(',', $GLOBALS['meta']['multi_objets']))) { $row['id_rubrique'] = $row['id_rubrique']; # explicite :-) // Sinon, chercher la rubrique la plus adaptee pour // accueillir l'objet dans la langue du traducteur } elseif ($is_rubrique and $GLOBALS['meta']['multi_rubriques'] == 'oui') { if ($GLOBALS['meta']['multi_secteurs'] == 'oui') { $id_parent = 0; } else { // on cherche une rubrique soeur dans la bonne langue $row_rub = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); $id_parent = $row_rub['id_parent']; } $row_rub = sql_fetsel( 'id_rubrique', 'spip_rubriques', "lang='" . $GLOBALS['spip_lang'] . "' AND id_parent=" . intval($id_parent) ); if ($row_rub) { $row['id_rubrique'] = $row_rub['id_rubrique']; } } } } return $row; }