/** * 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') { $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}={$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; }
function inc_precharger_traduction_article_dist($id_article, $id_rubrique = 0, $lier_trad = 0) { return precharger_traduction_objet('article', $id_article, $id_rubrique, $lier_trad, 'titre'); }