Add simple spambot barrier
[infodrom.org/www.zeitungsliste.de] / lib / search.inc
1 <?php
2
3 function search_zeitungen($keyword)
4 {
5   global $cfg;
6
7   $query = sprintf("SELECT id,name,city FROM zeitungen WHERE deleted IS false AND " .
8                    "( name ILIKE '%%%s%%' OR url ILIKE '%%%s%%' " .
9                    "OR city ILIKE '%%%s%%' OR description ILIKE '%%%s%%') " .
10                    "ORDER BY name",
11                    pg_escape_string($keyword), pg_escape_string($keyword),
12                    pg_escape_string($keyword), pg_escape_string($keyword));
13
14   if (($sth = db_query($query)) === false) return array();
15
16   if (pg_num_rows($sth) == 0) return array();
17
18   $ret = array();
19   for ($i=0; $i < pg_num_rows($sth); $i++) {
20     $row = pg_fetch_array($sth, $i);
21
22     $ret[] = sprintf('<a href="%szeitung/%d.html">%s</a>, %s',
23                      $cfg['basepath'], $row['id'], $row['name'], $row['city']);
24   }
25
26   return $ret;
27 }
28
29 function search_tags($keyword)
30 {
31   global $cfg;
32
33   $query = sprintf("SELECT tagname FROM tags WHERE " .
34                    "tagname ILIKE '%%%s%%' " .
35                    "ORDER BY lower(tagname)",
36                    pg_escape_string($keyword));
37
38   if (($sth = db_query($query)) === false) return array();
39
40   if (pg_num_rows($sth) == 0) return array();
41
42   $ret = array();
43   for ($i=0; $i < pg_num_rows($sth); $i++) {
44     $row = pg_fetch_array($sth, $i);
45
46     $ret[] = sprintf('Tag <a href="%stag/%s.html">%s</a>',
47                      $cfg['basepath'], urlencode($row['tagname']),
48                      $row['tagname']);
49   }
50
51   return $ret;
52 }
53
54 function search_topics($keyword)
55 {
56   global $cfg;
57
58   $query = sprintf("SELECT id,topic FROM topics WHERE " .
59                    "topic ILIKE '%%%s%%' ORDER BY topic",
60                    pg_escape_string($keyword));
61
62   if (($sth = db_query($query)) === false) return array();
63
64   if (pg_num_rows($sth) == 0) return array();
65
66   $ret = array();
67   for ($i=0; $i < pg_num_rows($sth); $i++) {
68     $row = pg_fetch_array($sth, $i);
69
70     $ret[] = sprintf('Diskussion <a href="%stopic/%d.html">%s</a>',
71                      $cfg['basepath'], $row['id'], 
72                      $row['topic']);
73   }
74
75   return $ret;
76 }
77
78 function process_search()
79 {
80   global $zlist;
81
82   if (!strlen($_POST['keyword']))
83     $ret = warning('Sie haben keinen Suchbegriff angegeben!');
84   else {
85     $results = array_merge(search_zeitungen($_POST['keyword']),
86                            search_tags($_POST['keyword']),
87                            search_topics($_POST['keyword']));
88
89     if (count($results)) {
90       $ret = '<ul class="gold">';
91       foreach ($results as $res) {
92         $ret .= '<li>' . $res;
93       }
94       $ret .= '</ul>';
95     } else {
96       $zlist['keyword'] = htmlspecialchars($_POST['keyword']);
97       $ret = information(sprintf('Keine Treffer für "%s" gefunden.', $zlist['keyword']));
98     }
99   }
100
101   return $ret;
102 }
103
104 function ajax_search_check()
105 {
106   $keyword = $_POST['keyword'];
107
108   $query = sprintf("SELECT count(*) FROM zeitungen WHERE deleted IS false AND " .
109                    "( name ILIKE '%%%s%%' OR url ILIKE '%%%s%%' " .
110                    "OR city ILIKE '%%%s%%' OR description ILIKE '%%%s%%') ",
111                    pg_escape_string($keyword), pg_escape_string($keyword),
112                    pg_escape_string($keyword), pg_escape_string($keyword));
113
114   if (($sth = db_query($query)) !== false) {
115     $row = pg_fetch_array($sth, 0);
116     if ($row[0] > 0)
117       return true;
118   }
119
120   $query = sprintf("SELECT count(*) FROM tags WHERE " .
121                    "tagname ILIKE '%%%s%%' ",
122                    pg_escape_string($keyword));
123
124   if (($sth = db_query($query)) !== false) {
125     $row = pg_fetch_array($sth, 0);
126     if ($row[0] > 0)
127       return true;
128   }
129
130   $query = sprintf("SELECT count(*) FROM topics WHERE " .
131                    "topic ILIKE '%%%s%%'",
132                    pg_escape_string($keyword));
133
134   if (($sth = db_query($query)) !== false) {
135     $row = pg_fetch_array($sth, 0);
136     if ($row[0] > 0)
137       return true;
138   }
139
140   return false;
141 }