Another spider
[infodrom.org/www.zeitungsliste.de] / lib / core.inc
1 <?php
2
3 function db_connect()
4 {
5   global $cfg;
6
7   $dsn = "dbname=".$cfg['dbname'];
8   if (isset($cfg['dbhost'])) $dsn .= " host=".$cfg['dbhost'];
9   if (isset($cfg['dbport'])) $dsn .= " port=".$cfg['dbport'];
10   if (isset($cfg['dbuser'])) $dsn .= " user=".$cfg['dbuser'];
11   if (isset($cfg['dbpass'])) $dsn .= " password=".$cfg['dbpass'];
12
13   $dbh = pg_pconnect ($dsn)
14     or carp("Unable to connect to SQL server");
15   pg_exec ($dbh, "SET DateStyle='ISO'");
16
17   return $dbh;
18 }
19
20 function db_query($query)
21 {
22   global $cfg;
23
24   // error_log($query);
25   $sth = pg_exec ($cfg['dbh'], $query);
26
27   if ($sth === false) {
28     error_log ($query);
29     error_log (pg_last_error($cfg['dbh']));
30     return false;
31   }
32
33   return $sth;
34 }
35
36 function db_last_id($table, $column)
37 {
38   $query = sprintf ("SELECT currval('%s_%s_seq')", $table, $column);
39
40   $sth =  db_query ($query);
41
42   if (!$sth)
43     return false;
44
45   if (pg_num_rows($sth) == 0) {
46     error_log ("$query resulted in an empty set");
47     return false;
48   }
49
50   $row = pg_fetch_row($sth, 0);
51
52   return $row[0];
53 }
54
55 // preserve <p></p>, <b></b>, <em></em>, <br>, <a href></a>
56 function string_sanitise($text)
57 {
58   $ntext = preg_replace (array('/<a\s+href=["\']?([^>"\']*)["\']?>([^<]*)<\/a>/i'),
59                          array('[[$1][$2]]'),
60                          $text);
61
62   $ntext = htmlspecialchars($ntext, ENT_QUOTES);
63
64   $ntext = preg_replace(array('/&lt;(\/?(p|br|b|em))&gt;/i',
65                               '/\[\[([^\]]+)\]\[([^\]]+)\]\]/'),
66                         array('<$1>','<a href="$1">$2</a>'),
67                         $ntext);
68
69   return $ntext;
70 }
71
72 function basepath()
73 {
74   global $cfg;
75   global $_SERVER;
76
77   $pos = strpos(strtolower($cfg['home']), strtolower($_SERVER['SERVER_NAME']));
78   $base = substr($cfg['home'], $pos+strlen($_SERVER['SERVER_NAME']));
79
80   $pos = strpos($_SERVER['REQUEST_URI'], "?");
81   if ($pos === false)
82     $uri = $_SERVER['REQUEST_URI'];
83   else 
84     $uri = substr($_SERVER['REQUEST_URI'], 0, $pos);
85
86   if (strpos($uri, $base) === 0) {
87     $cfg['path'] = substr($uri, strlen($base));
88     $pos = strrpos($cfg['path'], '/');
89     if ($pos !== false) {
90       $cfg['dir'] = substr($cfg['path'], 0, $pos);
91     }
92     return str_repeat("../", substr_count($cfg['path'], "/"));
93   }
94 }
95
96 function logged_in()
97 {
98   global $_SESSION;
99
100   return isset($_SESSION['uid']);
101 }
102
103 function javascript_ok()
104 {
105   global $_SESSION;
106
107   if (!logged_in())
108     return true;
109
110   if ($_SESSION['javascript'] == true)
111     return true;
112
113   return false;
114 }
115
116 function is_spider()
117 {
118   global $_SERVER;
119   global $_SESSION;
120
121   if (isset($_SESSION['uid']))
122     if (isset($_SESSION['robot']))
123       return $_SESSION['robot'];
124
125   if (strpos($_SERVER['HTTP_USER_AGENT'], 'Yahoo! Slurp') !== false ||
126       strpos($_SERVER['HTTP_USER_AGENT'], 'Googlebot') !== false ||
127       strpos($_SERVER['HTTP_USER_AGENT'], 'Mediapartners-Google') !== false ||
128       strpos($_SERVER['HTTP_USER_AGENT'], 'VoilaBot') !== false ||
129       strpos($_SERVER['HTTP_USER_AGENT'], 'Gigabot/3.0') !== false ||
130       strpos($_SERVER['HTTP_USER_AGENT'], 'Speedy Spider') !== false ||
131       strpos($_SERVER['HTTP_USER_AGENT'], 'LinkWalker/2.0') !== false ||
132       strpos($_SERVER['HTTP_USER_AGENT'], 'proximic') !== false ||
133       strpos($_SERVER['HTTP_USER_AGENT'], 'Yeti/1.0') !== false ||
134       strpos($_SERVER['HTTP_USER_AGENT'], 'Eurobot/1.0') !== false ||
135       strpos($_SERVER['HTTP_USER_AGENT'], 'MnoGoSearch/') !== false ||
136       strpos($_SERVER['HTTP_USER_AGENT'], 'ia_archiver') !== false ||
137       strpos($_SERVER['HTTP_USER_AGENT'], 'Seekbot/1.0') !== false ||
138       strpos($_SERVER['HTTP_USER_AGENT'], 'MyEngines-Bot') !== false ||
139       strpos($_SERVER['HTTP_USER_AGENT'], 'larbin_') !== false ||
140       strpos($_SERVER['HTTP_USER_AGENT'], 'findlinks/1') !== false ||
141       strpos($_SERVER['HTTP_USER_AGENT'], 'holmes/3.12') !== false ||
142       strpos($_SERVER['HTTP_USER_AGENT'], 'NoteworthyBot/0.1') !== false ||
143       strpos($_SERVER['HTTP_USER_AGENT'], 'Eurosoft-Bot') !== false ||
144       strpos($_SERVER['HTTP_USER_AGENT'], 'msnbot') !== false ||
145       strpos($_SERVER['HTTP_USER_AGENT'], 'Twiceler-0.9') !== false ||
146       strpos($_SERVER['HTTP_USER_AGENT'], 'ScoutJet') !== false ||
147       strpos($_SERVER['HTTP_USER_AGENT'], 'penthesilea/0.3') !== false ||
148       strpos($_SERVER['HTTP_USER_AGENT'], 'Cityreview Robot') !== false) {
149     if (isset($_SESSION['uid']))
150       $_SESSION['robot'] = true;
151     return true;
152   }
153
154   if (isset($_SESSION['uid']))
155     $_SESSION['robot'] = false;
156   return false;
157 }
158
159 function format_info_bookmarks()
160 {
161   global $_SESSION;
162   global $cfg;
163
164   if (!isset($_SESSION['uid']))
165     return false;
166
167   $query = sprintf("SELECT zeitung,name FROM bookmarks " .
168                    "JOIN zeitungen ON zeitungen.id = zeitung " .
169                    "WHERE uid = %d " .
170                    "ORDER BY priority,name LIMIT 20",
171                    $_SESSION['uid']);
172
173   $sth = db_query($query);
174
175   if ($sth === false || pg_NumRows ($sth) == 0)
176     return false;
177
178   $ret = '<p><ul>';
179   for ($n=0; $n < pg_NumRows ($sth); $n++) {
180     $row = pg_fetch_array ($sth, $n);
181     $ret .= sprintf('<li><a href="%szeitung/%d.html">%s</a></li>',
182                     $cfg['basepath'], $row['zeitung'], $row['name']);
183   }
184   $ret .= '</ul></p>';
185
186   return $ret;
187 }
188
189 ?>