Mise en route du suivi.
[aidenligne_francais_universite.git] / ecrire / inc / article_select.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
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 // Recupere les donnees d'un article pour composer un formulaire d'edition
16 // (utilise par exec/article_edit)
17 // id_article = numero d'article existant
18 // id_rubrique = ou veut-on l'installer (pas obligatoire)
19 // lier_trad = l'associer a l'article numero $lier_trad
20 // new=oui = article a creer si on valide le formulaire
21 // http://doc.spip.org/@article_select
22 function article_select($id_article, $id_rubrique=0, $lier_trad=0, $id_version=0) {
23 global $connect_id_auteur, $connect_id_rubrique, $spip_lang;
24
25 include_spip('inc/auth'); // pour auteurs_article si espace public
26
27 if (is_numeric($id_article)) {
28
29 if (!autoriser('modifier','article',$id_article))
30 return array();
31
32 // marquer le fait que l'article est ouvert en edition par toto a telle date
33 // une alerte sera donnee aux autres redacteurs sur exec=articles
34 if ($GLOBALS['meta']['articles_modif'] != 'non') {
35 include_spip('inc/drapeau_edition');
36 signale_edition ($id_article, $GLOBALS['auteur_session'], 'article');
37 }
38 $row = spip_fetch_array(spip_query("SELECT * FROM spip_articles WHERE id_article=$id_article"));
39 // si une ancienne revision est demandee, la charger
40 // en lieu et place de l'actuelle ; attention les champs
41 // qui etaient vides ne sont pas vide's. Ca permet de conserver
42 // des complements ajoutes "orthogonalement", et ca fait un code
43 // plus generique.
44 if ($id_version) {
45 include_spip('inc/revisions');
46 if ($textes = recuperer_version($id_article, $id_version)) {
47 foreach ($textes as $champ => $contenu)
48 $row[$champ] = $contenu;
49 }
50 }
51 return $row;
52 }
53 // id_article non numerique, c'est une demande de creation.
54 // Si c'est une demande de nouvelle traduction, init specifique
55 if ($lier_trad)
56 $row = article_select_trad($lier_trad);
57 else {
58 $row['titre'] = filtrer_entites(_T('info_nouvel_article'));
59 $row['onfocus'] = " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
60 $row['id_rubrique'] = $id_rubrique;
61 }
62
63 // appel du script a la racine, faut choisir
64 // admin restreint ==> sa premiere rubrique
65 // autre ==> la derniere rubrique cree
66 if (!$row['id_rubrique']) {
67 if ($connect_id_rubrique)
68 $row['id_rubrique'] = $id_rubrique = $connect_id_rubrique[0];
69 else {
70 $row_rub = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques ORDER BY id_rubrique DESC LIMIT 1"));
71 $row['id_rubrique'] = $id_rubrique = $row_rub['id_rubrique'];
72 }
73 if (!autoriser('creerarticledans','rubrique',$row['id_rubrique'] )){
74 // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
75 $res = spip_query("SELECT id_rubrique FROM spip_rubriques WHERE id_parent=0");
76 while (!autoriser('creerarticledans','rubrique',$row['id_rubrique'] ) && $row_rub = spip_fetch_array($res)){
77 $row['id_rubrique'] = $row_rub['id_rubrique'];
78 }
79 }
80 }
81
82 // recuperer le secteur, pour affecter les bons champs extras
83 if (!$row['id_secteur']) {
84 $row_rub = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
85 $row['id_secteur'] = $row_rub['id_secteur'];
86 }
87
88 return $row;
89 }
90
91 //
92 // Si un article est demande en creation (new=oui) avec un lien de trad,
93 // on initialise les donnees de maniere specifique
94 //
95 // http://doc.spip.org/@article_select_trad
96 function article_select_trad($lier_trad) {
97 // Recuperer les donnees de l'article original
98 $result = spip_query("SELECT * FROM spip_articles WHERE id_article=$lier_trad");
99 if ($row = spip_fetch_array($result)) {
100 $row['titre'] = filtrer_entites(_T('info_nouvelle_traduction')).' '.$row["titre"];
101 $id_rubrique = $row['id_rubrique'];
102 }
103
104 // Regler la langue, si possible, sur celle du redacteur
105 // Cela implique souvent de choisir une rubrique ou un secteur
106 if (in_array($GLOBALS['spip_lang'],
107 explode(',', $GLOBALS['meta']['langues_multilingue']))) {
108 // Si le menu de langues est autorise sur les articles,
109 // on peut changer la langue quelle que soit la rubrique
110 // donc on reste dans la meme rubrique
111 if ($GLOBALS['meta']['multi_articles'] == 'oui') {
112 $row['id_rubrique'] = $row['id_rubrique']; # explicite :-)
113 }
114 else if ($GLOBALS['meta']['multi_rubriques'] == 'oui') {
115 // Sinon, chercher la rubrique la plus adaptee pour
116 // accueillir l'article dans la langue du traducteur
117 if ($GLOBALS['meta']['multi_secteurs'] == 'oui') {
118 $id_parent = 0;
119 } else {
120 // on cherche une rubrique soeur dans la bonne langue
121 $row_rub = spip_fetch_array(spip_query("SELECT id_parent FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
122
123 $id_parent = $row_rub['id_parent'];
124 }
125 $row_rub = spip_fetch_array(spip_query("SELECT id_rubrique FROM spip_rubriques WHERE lang='".$GLOBALS['spip_lang']."' AND id_parent=$id_parent"));
126 if ($row_rub)
127 $row['id_rubrique'] = $row_rub['id_rubrique'];
128 }
129 }
130
131 return $row;
132 }
133
134 ?>