Simple is_admin()
[infodrom.org/www.zeitungsliste.de] / lib / zeitung.inc
1 <?php
2
3 function zeitung_load($zid)
4 {
5   $query = sprintf('SELECT id,name,url,city,description FROM zeitungen ' .
6                    'WHERE deleted IS false AND id = %d', $zid);
7
8   if (($sth = db_query($query)) === false) return false;
9
10   return pg_fetch_array($sth, 0);
11 }
12
13 function zeitung_delete($zid)
14 {
15   $query = sprintf('UPDATE zeitungen SET deleted = true WHERE id = %d', $zid);
16
17   if (db_query($query) === false) return false;
18
19   logbook('zeitungen', $zid, 'deleted', 'false', 'true');
20
21   return true;
22 }
23
24 function zeitung_check_url($url, $zid=false)
25 {
26   $query = sprintf("SELECT name FROM zeitungen WHERE lower(url) = lower('%s')",
27                    pg_escape_string($url));
28
29   if ($zid !== false)
30     $query .= sprintf(' AND id <> %d', $zid);
31
32   if (($sth = db_query($query)) === false) return false;
33
34   if (pg_num_rows($sth) == 0) return false;
35
36   $row = pg_fetch_array($sth, 0);
37
38   return $row['name'];
39 }
40
41 function zeitung_check_data()
42 {
43   global $_POST;
44
45   if (empty($_POST['name']) ||
46       empty($_POST['city']) ||
47       empty($_POST['url']) ||
48       empty($_POST['description']))
49     return 'Sie müssen alle Pflichtfelder ausfüllen! Siehe Beschreibung unten.';
50
51   $_POST['url'] = fix_url($_POST['url']);
52   if (!is_valid_url($_POST['url']))
53     return 'Die angegebene Homepage ist ungültig!';
54
55   if ($_POST['city'] == 'Deutschland (Stadt)')
56     return 'Sie haben keinen Erscheinungsort angegeben!';
57
58   if (isset($_POST['zeitung']))
59     $try = zeitung_check_url($_POST['url'], $_POST['zeitung']);
60   else
61     $try = zeitung_check_url($_POST['url']);
62   if ($try !== false)
63     return 'Die angegebene URL ist bereits als "'.$try.'" gespeichert.';
64
65   return true;
66 }
67
68 function zeitung_reportnew($id)
69 {
70   global $_SESSION;
71   global $_SERVER;
72   global $_POST;
73   global $cfg;
74
75   $url = sprintf('%szeitung/%d.html', $cfg['home'], $id);
76   $subject = 'Neue Zeitung '.$_POST['name'];
77
78
79   $body = "Folgende Zeitung wurde neu im System aufgenommen:\n\n";
80
81   $body .= "Zeitung    : " . $_POST['name'] . "\n"
82           ."URL        : " . $_POST['url'] . "\n"
83           ."Ort        : " . $_POST['city'] . "\n"
84           ."Description: " . $_POST['description'] . "\n"
85           ."\n"
86           ."Nickname: " . $_SESSION['nickname'] . "\n"
87           ."Realname: " . $_SESSION['realname'] . "\n"
88           ."E-Mail  : " . $_SESSION['email'] . "\n"
89           ."\n"
90           ."HTTP_USER_AGENT: " . $_SERVER['HTTP_USER_AGENT'] . "\n"
91           ."REMOTE_ADDR    : " . $_SERVER['REMOTE_ADDR'] . "\n";
92
93   $body .= "\n" . $url . "\n";
94
95   return sendmail($cfg['mailto'], '', $subject, $body);
96 }
97
98 function zeitung_update($zid)
99 {
100   global $_POST;
101
102   $query = sprintf("UPDATE zeitungen SET name='%s',city='%s',url='%s',description='%s' " .
103                    'WHERE id = %d',
104                    pg_escape_string(htmlspecialchars(trim($_POST['name']))),
105                    pg_escape_string(htmlspecialchars(trim($_POST['city']))),
106                    pg_escape_string(htmlspecialchars(trim($_POST['url']))),
107                    pg_escape_string(htmlspecialchars(trim($_POST['description']))),
108                    $zid);
109
110   $old = zeitung_load($zid);
111
112   if (db_query($query) === false) return false;
113
114   foreach (array('name','city','url','description') as $col) {
115     if ($old[$col] != $_POST[$col])
116       logbook('zeitungen', $zid, $col, $old[$col], htmlspecialchars(trim($_POST[$col])));
117   }
118
119   return true;
120 }
121
122 function zeitung_insert()
123 {
124   global $_POST;
125
126   // Bei Problemen das Feld 'deleted' wieder rausnehmen und manuell approven
127   $query = sprintf("INSERT INTO zeitungen (name,city,url,description,deleted,changed) " .
128                    "VALUES ('%s','%s','%s','%s',false,now())",
129                    pg_escape_string(htmlspecialchars(trim($_POST['name']))),
130                    pg_escape_string(htmlspecialchars(trim($_POST['city']))),
131                    pg_escape_string(htmlspecialchars(trim($_POST['url']))),
132                    pg_escape_string(htmlspecialchars(trim($_POST['description']))));
133
134   if (db_query($query) === false) return false;
135
136   $id = db_last_id('zeitungen', 'id');
137
138   logbook('zeitungen', $id, 'name', '', htmlspecialchars(trim(trim($_POST['name']))));
139
140   zeitung_reportnew($id);
141
142   return $id;
143 }
144
145 function process_edit()
146 {
147   global $_SESSION;
148   global $_SERVER;
149   global $_POST;
150   global $_GET;
151   global $zlist;
152
153   if (isset($_GET['zeitung']) && is_numeric($_GET['zeitung']))
154     $zid = $_GET['zeitung'];
155   elseif (isset($_POST['zeitung']) && is_numeric($_POST['zeitung']))
156     $zid = $_POST['zeitung'];
157   else
158     return warning('Keine Zeitung oder Magazin gefunden!');
159
160   $ok = false;
161   $try = format_newspaper($zid, 1);
162   if ($try === false)
163     $ret .= warning('Keine Zeitung oder Magazin gefunden!');
164   else {
165     $ret .= $try;
166
167     if (!isset($_SESSION['uid']))
168       $ret .= warning('Sie sind nicht angemeldet.  Zum Bearbeiten von Zeitungen ist das erforderlich.');
169     else {
170       if ($_SERVER['REQUEST_METHOD'] == 'POST') {
171         if (isset($_POST['delete'])) {
172           zeitung_delete($zid);
173           $ret .= information('Die Zeitung wurde gelöscht.');
174           $ok = true;
175         } else {
176           $try = zeitung_check_data();
177           if ($try !== true) {
178             $ret .= warning($try);
179             $replace = array('id' => $zid,
180                              'name' => htmlspecialchars($_POST['name']),
181                              'city' => htmlspecialchars($_POST['city']),
182                              'url' => htmlspecialchars($_POST['url']),
183                              'description' => htmlspecialchars($_POST['description']));
184           } else {
185             zeitung_update($zid);
186             $ret .= information('Die Zeitung wurde aktualisiert.');
187             $ok = true;
188             $zlist['redirect'] = sprintf('zeitung/%d.html', $zid);
189           }
190         }
191       } else
192         $replace = zeitung_load($zid);
193       if (!$ok)
194         $ret .= load_template('zeitung.html', $replace);
195     }
196   }
197
198   return $ret;
199 }
200
201 function process_new()
202 {
203   global $_SESSION;
204   global $_SERVER;
205   global $_POST;
206   global $_GET;
207   global $zlist;
208
209   $ok = false;
210   if (!isset($_SESSION['uid']))
211     $ret .= warning('Sie sind nicht angemeldet.  Zum Hinzufügen von Zeitungen ist das erforderlich.');
212   else {
213     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
214       $try = zeitung_check_data();
215       if ($try !== true) {
216         $ret .= warning($try);
217         $replace = array('name' => htmlspecialchars($_POST['name']),
218                          'city' => htmlspecialchars($_POST['city']),
219                          'url' => htmlspecialchars($_POST['url']),
220                          'description' => htmlspecialchars($_POST['description']));
221       } else {
222         $zid = zeitung_insert();
223         if ($zid === false) {
224           $ret .= warning('Es ist ein Datenbankfehler aufgetreten.');
225           $ok = true;
226         } else {
227           $ret .= information('Die Zeitung wurde hinzugefügt.');
228           $zlist['redirect'] = sprintf('zeitung/%d.html', $zid);
229           $ok = true;
230         }
231       }
232     } else
233       $replace = array('city' => 'Deutschland (Stadt)');
234     if (!$ok)
235       $ret .= load_javascript('zeitung.js') . load_template('zeitung_new.html', $replace);
236   }
237
238   return $ret;
239 }
240
241 function ajax_zeitung_check_url()
242 {
243   global $_POST;
244
245   if (empty($_POST['url'])) return false;
246
247   return zeitung_check_url($_POST['url']);
248 }
249
250 ?>