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