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