[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / ecrire / action / editer_auteurs.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
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
16 // http://doc.spip.org/@action_editer_auteurs_dist
17 function action_editer_auteurs_dist() {
18
19 $securiser_action = charger_fonction('securiser_action', 'inc');
20 $arg = $securiser_action();
21 $redirect = urldecode(_request('redirect'));
22 if ($script = _request('script'))
23 $redirect = parametre_url($redirect,'script',$script,'&');
24 if ($titre = _request('titre'))
25 $redirect = parametre_url($redirect,'titre',$titre,'&');
26
27 if (preg_match(",^\W*(\d+)\W(\w*)\W-(\d+)$,", $arg, $r)) {
28 supprimer_auteur_et_rediriger($r[2], $r[1], $r[3], parametre_url($redirect,'type',$r[2],'&'));
29 }
30 elseif (preg_match(",^\W*(\d+)\W(\w*)\W(\d+)$,", $arg, $r)) {
31 ajouter_auteur_et_rediriger($r[2], $r[1], $r[3], parametre_url($redirect,'type',$r[2],'&'));
32 }
33 elseif (preg_match(",^\W*(\d+)\W(\w*)$,", $arg, $r)) {
34 list(,$id, $type) = $r;
35 $idom = "auteur_$type" . "_$id" . '_new';
36 $nouv_auteur = intval(_request($idom));
37 if ($nouv_auteur) {
38 ajouter_auteur_et_rediriger($type, $id, $nouv_auteur, parametre_url($redirect,'type',$type,'&'));
39 } else if ($cherche = _request('cherche_auteur')) {
40 if ($p = strpos($redirect, '#')) {
41 $ancre = substr($redirect,$p);
42 $redirect = substr($redirect,0,$p);
43 } else $ancre ='';
44 $redirect = parametre_url($redirect,'type',$type,'&');
45 $res = rechercher_auteurs($cherche);
46 $n = count($res);
47
48 if ($n == 1)
49 # Bingo. Signaler le choix fait.
50 ajouter_auteur_et_rediriger($type, $id, $res[0], "$redirect&ids=" . $res[0] . "&cherche_auteur=" . rawurlencode($cherche) . $ancre);
51 # Trop vague. Le signaler.
52 elseif ($n > 16)
53 redirige_par_entete("$redirect&cherche_auteur=$cherche&ids=-1" . $ancre);
54 elseif (!$n)
55 # Recherche vide (mais faite). Le signaler
56 redirige_par_entete("$redirect&cherche_auteur=$cherche&ids=" . $ancre);
57 else
58 # renvoyer un formulaire de choix
59 redirige_par_entete("$redirect&cherche_auteur=$cherche&ids=" . join(',',$res) . $ancre);
60
61 } else redirige_par_entete("$redirect&ids=-1");
62 } else spip_log("action_editer_auteur: $arg pas compris");
63 }
64
65 // http://doc.spip.org/@supprimer_auteur_et_rediriger
66 function supprimer_auteur_et_rediriger($type, $id, $id_auteur, $redirect)
67 {
68 $jointure = table_jointure('auteur', $type);
69 if (preg_match(',^[a-z]*$,',$type)){
70 sql_delete("spip_{$jointure}", "id_auteur=".sql_quote($id_auteur)." AND id_{$type}=".sql_quote($id));
71
72 // Notifications, gestion des revisions, reindexation...
73 pipeline('post_edition',
74 array(
75 'args' => array(
76 'operation' => 'supprimer_auteur',
77 'table' => table_objet_sql($type),
78 'id_objet' => $id
79 ),
80 'data' => null
81 )
82 );
83 }
84
85 if ($redirect) redirige_par_entete($redirect);
86 }
87
88 // http://doc.spip.org/@ajouter_auteur_et_rediriger
89 function ajouter_auteur_et_rediriger($type, $id, $id_auteur, $redirect)
90 {
91 $jointure = table_jointure('auteur', $type);
92 if (preg_match(',^[a-z]*$,',$type)){
93 $res = sql_fetsel("id_$type", "spip_{$jointure}", "id_auteur=" . sql_quote($id_auteur) . " AND id_{$type}=" . $id);
94 if (!$res) {
95 sql_insertq("spip_{$jointure}",
96 array('id_auteur' => $id_auteur,
97 "id_$type" => $id));
98 }
99 // Notifications, gestion des revisions, reindexation...
100 pipeline('post_edition',
101 array(
102 'args' => array(
103 'operation' => 'ajouter_auteur',
104 'table' => table_objet_sql($type),
105 'id_objet' => $id
106 ),
107 'data' => null
108 )
109 );
110 }
111
112 if ($redirect) redirige_par_entete($redirect);
113 }
114
115 // http://doc.spip.org/@rechercher_auteurs
116 function rechercher_auteurs($cherche_auteur)
117 {
118 include_spip('inc/mots');
119 include_spip('inc/charsets'); // pour tranlitteration
120 $result = sql_select("id_auteur, nom", "spip_auteurs");
121 $table_auteurs = array();
122 $table_ids = array();
123 while ($row = sql_fetch($result)) {
124 $table_auteurs[] = $row["nom"];
125 $table_ids[] = $row["id_auteur"];
126 }
127 return mots_ressemblants($cherche_auteur, $table_auteurs, $table_ids);
128 }
129
130 ?>