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/genius/prive/formulaires/ |
<?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. * \***************************************************************************/ /** * Gestion du formulaire de traduction * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/actions'); include_spip('inc/editer'); /** * Charger les données de #FORMULAIRE_TRADUIRE * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de retour * @param bool $traduire * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array|bool * False si l'identifiant n'est pas numérique ou si l'objet n'a pas de langue * Contexte à transmettre au squelette du formulaire sinon */ function formulaires_traduire_charger_dist($objet, $id_objet, $retour = '', $traduire = true) { if (!intval($id_objet)) { return false; } $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, ''); // verifier que l'objet indique possede bien des champs id_trad et lang // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette if (!isset($valeurs['langue'])) { return false; } $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet); $valeurs['_langue'] = ''; $langue_parent = ''; $id_parent = ''; if (isset($valeurs['id_rubrique'])) { $id_parent = $valeurs['id_rubrique']; } if (isset($valeurs['id_parent'])) { $id_parent = $valeurs['id_parent']; } if ($id_parent) { $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)); } if (!$langue_parent) { $langue_parent = $GLOBALS['meta']['langue_site']; } if ( $valeurs['editable'] and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets'])) ) { $valeurs['_langue'] = $valeurs['langue']; } $valeurs['langue_parent'] = $langue_parent; $valeurs['_objet'] = $objet; $valeurs['_id_objet'] = $id_objet; $valeurs['changer_lang'] = ''; $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet); $valeurs['_traduire'] = ''; if (isset($valeurs['id_trad'])) { $valeurs['_traduire'] = ($traduire ? ' ' : ''); $valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond( $f = table_objet($objet) . '-trad', 'prive/objets/liste' ) ? $f : 'objets-trad'); // pour afficher la liste des trad sur la base de l'id_trad en base // independamment d'une saisie en cours sur id_trad $valeurs['_lister_id_trad'] = $valeurs['id_trad']; $valeurs['_id_parent'] = $id_parent; } $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null or _request('changer_id_trad') !== null)); $valeurs['_pipeline'] = ['traduire', ['type' => $objet, 'id' => $id_objet]]; return $valeurs; } /** * Vérifier les saisies des valeurs du #FORMULAIRE_TRADUIRE * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de retour * @param bool $traduire * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array * Erreurs des saisies */ function formulaires_traduire_verifier_dist($objet, $id_objet, $retour = '', $traduire = true) { $erreurs = []; if (null !== _request('changer_lang')) { $erreurs = formulaires_editer_objet_verifier($objet, $id_objet, ['changer_lang']); } // si id_trad fourni, verifier que cela ne conflicte pas avec un id_trad existant // et que ca reference bien un objet existant if ($id_trad = _request('id_trad')) { $table_objet_sql = table_objet_sql($objet); $_id_table_objet = id_table_objet($objet); if ( sql_getfetsel( 'id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet) ) ) { // ne devrait jamais arriver sauf concurence de saisie $erreurs['id_trad'] = _L('Une traduction est deja referencee'); } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) { $erreurs['id_trad'] = _L('Indiquez un contenu existant'); } } return $erreurs; } /** * Enregistrer en base les saisies du #FORMULAIRE_TRADUIRE * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de retour * @param bool $traduire * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array * Retour des traitements */ function formulaires_traduire_traiter_dist($objet, $id_objet, $retour = '', $traduire = true) { $res = []; if (!_request('annuler') and autoriser('changerlangue', $objet, $id_objet)) { // action/editer_xxx doit traiter la modif de changer_lang $res = formulaires_editer_objet_traiter($objet, $id_objet, 0, 0, $retour); } if (!_request('annuler') and autoriser('changertraduction', $objet, $id_objet)) { if ($id_trad = _request('id_trad') or _request('supprimer_trad')) { $referencer_traduction = charger_fonction('referencer_traduction', 'action'); $referencer_traduction($objet, $id_objet, intval($id_trad)); // 0 si supprimer_trad } elseif ( $new_id_trad = _request('changer_reference_trad') and $new_id_trad = array_keys($new_id_trad) and $new_id_trad = reset($new_id_trad) ) { $table_objet_sql = table_objet_sql($objet); $_id_table_objet = id_table_objet($objet); if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) { $referencer_traduction = charger_fonction('referencer_traduction', 'action'); $referencer_traduction($objet, $id_trad, $new_id_trad); } } } $res['editable'] = true; if (!isset($res['message_erreur'])) { set_request('annuler', 'annuler'); } // provoquer la fermeture du forumlaire return $res; }