New bot: Gaisbot
[infodrom.org/www.zeitungsliste.de] / lib / tags.inc
1 <?php
2
3 function format_tags($zid)
4 {
5   global $cfg;
6   global $_SESSION;
7
8   $query = 'SELECT id,tagname FROM tags ORDER BY lower(tagname)';
9   if (($sth = db_query($query)) === false) return;
10
11   $tags = array();
12   for ($i=0; $i < pg_num_rows ($sth); $i++) {
13     $row = pg_fetch_array ($sth, $i);
14     $tags[$row['id']] = $row['tagname'];
15   }
16
17   $query = sprintf('SELECT id,tagname FROM tags ' .
18                    'JOIN zeitung_tags ON id = tag ' .
19                    'WHERE zeitung = %d AND uid = %d ' .
20                    'ORDER BY lower(tagname)',
21                    $zid, $_SESSION['uid']);
22
23   if (($sth = db_query($query)) === false) return;
24
25   if (pg_num_rows($sth) > 0) {
26     $ret_mytags = '<p class="tagcloud">';
27     for ($i=0; $i < pg_num_rows ($sth); $i++) {
28       $row = pg_fetch_array ($sth, $i);
29       if (javascript_ok())
30         $link = sprintf('href="%stags.html" onclick="return tag_action(\'del\',%d,%d);"',
31                         $cfg['basepath'], $zid, $row['id']);
32       else
33         $link = sprintf('href="%stags.html?zeitung=%d&deltag=%d"',
34                         $cfg['basepath'], $zid, $row['id']);
35       $ret_mytags .= sprintf('<span class="tag1"><a %s>%s</a></span> ',
36                              $link, $row['tagname']);
37       unset($tags[$row['id']]);
38     }
39     $ret_mytags .= '</p>';
40   }
41
42   if (count($tags)) {
43     $ret_rest = '<p class="tagcloud">';
44     foreach ($tags as $id => $tagname) {
45       if (javascript_ok())
46         $link = sprintf('href="%stags.html" onclick="return tag_action(\'add\',%d,%d);"',
47                         $cfg['basepath'], $zid, $id);
48       else
49         $link = sprintf('href="%stags.html?zeitung=%d&deltag=%d"',
50                         $cfg['basepath'], $zid, $id);
51       $ret_rest .= sprintf('<span class="tag1"><a %s>%s</a></span> ',
52                            $link, $tagname);
53     }
54     $ret_rest .= '</p>';
55   }
56
57   return array($ret_mytags, $ret_rest);
58 }
59
60 function tag_add($zid, $tag, $uid)
61 {
62   $query = sprintf('INSERT INTO zeitung_tags (zeitung,tag,uid) ' .
63                    'VALUES (%d,%d,%d)', $zid, $tag, $uid);
64   db_query($query);
65 }
66
67 function tag_del($zid, $tag, $uid)
68 {
69   $query = sprintf('DELETE FROM zeitung_tags WHERE zeitung = %d ' .
70                    'AND tag = %d AND uid = %d', $zid, $tag, $uid);
71   db_query($query);
72 }
73
74 function tag_addnew($zid, $tag, $uid)
75 {
76   db_query('BEGIN TRANSACTION');
77
78   $query = sprintf("INSERT INTO tags (tagname) VALUES ('%s')",
79                    pg_escape_string($tag));
80
81   if (($sth = db_query($query)) === false) {
82     db_query('ROLLBACK');
83     return;
84   }
85
86   $id = db_last_id('tags', 'id');
87
88   tag_add($zid, $id, $uid);
89   db_query('COMMIT');
90 }
91
92 function tag_sanitise($tag)
93 {
94   return  str_replace(array('<', '>', '(', ')', '$', '/', '%', '\\', '#', ';', '&'), '', $tag);
95 }
96
97 function process_tags()
98 {
99   global $cfg;
100   global $zlist;
101   global $_SESSION;
102   global $_GET;
103   global $_POST;
104
105   if (isset($_GET['zeitung']) && is_numeric($_GET['zeitung']))
106     $zid = $_GET['zeitung'];
107   elseif (isset($_POST['zeitung']) && is_numeric($_POST['zeitung']))
108     $zid = $_POST['zeitung'];
109   else
110     return warning('Keine Zeitung oder Magazin gefunden!');
111
112   $try = format_newspaper($zid, true);
113   if ($try === false)
114     $ret .= warning('Keine Zeitung oder Magazin gefunden!');
115   else {
116     $ret .= $try;
117
118     if (!isset($_SESSION['uid']))
119       $ret .= warning('Sie sind nicht angemeldet.  Zum Hinzufügen von Tags ist das erforderlich.');
120     else {
121       if (isset($_GET['addtag']) && is_numeric($_GET['addtag'])) {
122         tag_add($zid, $_GET['addtag'], $_SESSION['uid']);
123         header(sprintf('Location: tags.html?zeitung=%d', $zid));
124       } elseif (isset($_GET['deltag']) && is_numeric($_GET['deltag'])) {
125         tag_del($zid, $_GET['deltag'], $_SESSION['uid']);
126         header(sprintf('Location: tags.html?zeitung=%d', $zid));
127       } elseif (isset($_POST['newtag'])) {
128         if (empty($_POST['newtag']))
129           $ret .= warning('Sie haben vergessen, ein Merkmal anzugeben!');
130         else {
131           tag_addnew($zid, tag_sanitise($_POST['newtag']), $_SESSION['uid']);
132           header(sprintf('Location: tags.html?zeitung=%d', $zid));
133         }
134       } else {
135
136         $ret .= sprintf('<p class="info"><img src="%stag.gif" width="27" height="25" alt="">&nbsp; ' .
137                         '<strong>Tags verwalten</strong></p>',
138                         $cfg['basepath']);
139
140         $tags = format_tags($zid);
141         $replace = array('zeitung' => $zid,
142                          'mytags'=> $tags[0],
143                          'tags' => $tags[1]);
144         $ret .= load_javascript('tags.js') . load_template('tags.html', $replace);
145       }
146     }
147   }
148
149   return $ret;
150 }
151
152 function ajax_tag_check()
153 {
154   global $_POST;
155   global $_SESSION;
156
157   if (!isset($_POST['zeitung']) || !is_numeric($_POST['zeitung']) ||
158       !isset($_POST['tag']) || !is_numeric($_POST['tag']) ||
159       !isset($_SESSION['uid']))
160     return false;
161
162   return true;
163 }
164
165 function ajax_tag_add()
166 {
167   global $_POST;
168   global $_SESSION;
169
170   if (!ajax_tag_check())
171     return false;
172
173   tag_add($_POST['zeitung'], $_POST['tag'], $_SESSION['uid']);
174
175   return format_tags($_POST['zeitung']);
176 }
177
178 function ajax_tag_del()
179 {
180   global $_POST;
181   global $_SESSION;
182
183   if (!ajax_tag_check())
184     return false;
185
186   tag_del($_POST['zeitung'], $_POST['tag'], $_SESSION['uid']);
187
188   return format_tags($_POST['zeitung']);
189 }
190
191 function ajax_tag_new()
192 {
193   global $_POST;
194   global $_SESSION;
195
196   if (!isset($_POST['zeitung']) || !is_numeric($_POST['zeitung']) ||
197       !isset($_POST['tag']) ||
198       !isset($_SESSION['uid']))
199     return false;
200
201   tag_addnew($_POST['zeitung'], tag_sanitise($_POST['tag']), $_SESSION['uid']);
202
203   return format_tags($_POST['zeitung']);
204 }
205
206 function ajax_tag_exists()
207 {
208   global $_POST;
209
210   if (!isset($_POST['tag']))
211     return true; // eigentlich false, aber da true=exists einen Fehler liefert...
212
213   $query = sprintf("SELECT id FROM tags WHERE lower(tagname) = lower('%s')",
214                    pg_escape_string(tag_sanitise($_POST['tag'])));
215
216   $sth = db_query($query);
217
218   if ($sth === false)
219     return true; // eigentlich false, aber da true=exists einen Fehler liefert...
220
221   if (pg_num_rows($sth) == 0)
222     return false;
223
224   return true;
225 }
226
227 ?>