[SPIP] ~v3.0.20-->v3.0.25
[lhc/web/clavette_www.git] / www / ecrire / inc / precharger_objet.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2016 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 include_spip('inc/autoriser'); // necessaire si appel de l'espace public
16
17
18
19 /**
20 * Retourne les valeurs a charger pour un formulaire d'edition d'un objet
21 * Lors d'une creation, certains champs peuvent être preremplis (c'est le cas des traductions)
22 *
23 * @param string $type Type d'objet (article,breve...)
24 * @param string|int $id_objet, Identifiant de l'objet, ou "new" pour une creation
25 * @param int $id_rubrique, identifiant eventuel de la rubrique parente
26 * @param int $lier_trad, identifiant eventuel de la traduction de reference
27 * @param string $champ_titre, nom de la colonne SQL de l'objet donnant le titre :
28 * pas ideal ? on devrait pouvoir le savoir
29 * dans la declaration de l'objet
30 * @return array couples cles / valeurs des champs du formulaire à charger.
31 **/
32 function precharger_objet($type, $id_objet, $id_rubrique=0, $lier_trad=0, $champ_titre = 'titre') {
33 global $connect_id_rubrique, $spip_lang;
34
35 $table = table_objet_sql($type);
36 $_id_objet = id_table_objet($table);
37
38 // si l'objet existe deja, on retourne simplement ses valeurs
39 if (is_numeric($id_objet))
40 return sql_fetsel("*", $table, "$_id_objet=$id_objet");
41
42 // ici, on demande une creation.
43 // on prerempli certains elements : les champs si traduction,
44 // les id_rubrique et id_secteur si l'objet a ces champs
45 $desc = lister_tables_objets_sql($table);
46 # il faudrait calculer $champ_titre ici
47 $is_rubrique = isset($desc['field']['id_rubrique']);
48 $is_secteur = isset($desc['field']['id_secteur']);
49
50 // si demande de traduction
51 // on recupere les valeurs de la traduction
52 if ($lier_trad){
53 if ($select = charger_fonction("precharger_traduction_" . $type,'inc',true))
54 $row = $select($id_objet, $id_rubrique, $lier_trad);
55 else
56 $row = precharger_traduction_objet($type, $id_objet, $id_rubrique, $lier_trad, $champ_titre);
57 } else {
58 $row[$champ_titre] = '';
59 if ($is_rubrique) {
60 $row['id_rubrique'] = $id_rubrique;
61 }
62 }
63
64 // calcul de la rubrique
65 # note : comment faire pour des traductions sur l'objet rubriques ?
66 if ($is_rubrique) {
67 // appel du script a la racine, faut choisir
68 // admin restreint ==> sa premiere rubrique
69 // autre ==> la derniere rubrique cree
70 if (!$row['id_rubrique']) {
71 if ($connect_id_rubrique)
72 $row['id_rubrique'] = $id_rubrique = current($connect_id_rubrique);
73 else {
74 $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "", "", "id_rubrique DESC", 1);
75 $row['id_rubrique'] = $id_rubrique = $row_rub['id_rubrique'];
76 }
77 if (!autoriser('creerarticledans','rubrique',$row['id_rubrique'] )){
78 // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
79 $res = sql_select("id_rubrique", "spip_rubriques", "id_parent=0");
80 while (!autoriser('creerarticledans','rubrique',$row['id_rubrique'] ) && $row_rub = sql_fetch($res)){
81 $row['id_rubrique'] = $row_rub['id_rubrique'];
82 }
83 }
84 }
85 }
86
87 // recuperer le secteur, pour affecter les bons champs extras
88 if ($id_rubrique and $is_secteur) {
89 if (!$row['id_secteur']) {
90 $row_rub = sql_getfetsel("id_secteur", "spip_rubriques", "id_rubrique=" . sql_quote($id_rubrique));
91 $row['id_secteur'] = $row_rub;
92 }
93 }
94
95 return $row;
96 }
97
98
99 /**
100 * Recupere les valeurs d'une traduction de reference pour la creation
101 * d'un objet (preremplissage du formulaire).
102 *
103 * @param string $type Type d'objet (article,breve...)
104 * @param string|int $id_objet, Identifiant de l'objet, ou "new" pour une creation
105 * @param int $id_rubrique, identifiant eventuel de la rubrique parente
106 * @param int $lier_trad, identifiant eventuel de la traduction de reference
107 * @param string $champ_titre, nom de la colonne SQL de l'objet donnant le titre
108 *
109 * @return array couples cles / valeurs des champs du formulaire à charger
110 **/
111 function precharger_traduction_objet($type, $id_objet, $id_rubrique=0, $lier_trad=0, $champ_titre = 'titre') {
112 $table = table_objet_sql($type);
113 $_id_objet = id_table_objet($table);
114
115 // Recuperer les donnees de l'objet original
116 $row = sql_fetsel("*", $table, "$_id_objet=$lier_trad");
117 if ($row) {
118 $row[$champ_titre] = filtrer_entites(_T('info_nouvelle_traduction')).' '.$row[$champ_titre];
119 } else {
120 $row = array();
121 }
122
123 // on met l'objet dans une rubrique si l'objet le peut
124 $desc = lister_tables_objets_sql($table);
125 $is_rubrique = isset($desc['field']['id_rubrique']);
126
127 if ($is_rubrique) {
128 if ($id_rubrique) {
129 $row['id_rubrique'] = $id_rubrique;
130 return $row;
131 }
132 $id_rubrique = $row['id_rubrique'];
133
134
135 // Regler la langue, si possible, sur celle du redacteur
136 // Cela implique souvent de choisir une rubrique ou un secteur
137 if (in_array($GLOBALS['spip_lang'],
138 explode(',', $GLOBALS['meta']['langues_multilingue']))) {
139
140 // Si le menu de langues est autorise sur l'objet,
141 // on peut changer la langue quelle que soit la rubrique
142 // donc on reste dans la meme rubrique
143 if (in_array($table, explode(',',$GLOBALS['meta']['multi_objets']))) {
144 $row['id_rubrique'] = $row['id_rubrique']; # explicite :-)
145
146 // Sinon, chercher la rubrique la plus adaptee pour
147 // accueillir l'objet dans la langue du traducteur
148 } elseif ($is_rubrique and $GLOBALS['meta']['multi_rubriques'] == 'oui') {
149 if ($GLOBALS['meta']['multi_secteurs'] == 'oui') {
150 $id_parent = 0;
151 } else {
152 // on cherche une rubrique soeur dans la bonne langue
153 $row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_rubrique");
154 $id_parent = $row_rub['id_parent'];
155 }
156
157 $row_rub = sql_fetsel("id_rubrique", "spip_rubriques", "lang='".$GLOBALS['spip_lang']."' AND id_parent=$id_parent");
158 if ($row_rub)
159 $row['id_rubrique'] = $row_rub['id_rubrique'];
160 }
161 }
162 }
163 return $row;
164 }
165
166
167
168 ?>