pkgfuncs.inc 12.3 KB
Newer Older
eric's avatar
eric committed
1
<?
2
include_once("pkgfuncs_po.inc");
eric's avatar
eric committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# grab the current list of PackageCategories
#
function pkgCategories() {
	$cats = array();
	$dbh = db_connect();
	$q = "SELECT * FROM PackageCategories ";
	$q.= "ORDER BY Category ASC";
	$result = db_query($q, $dbh);
	if ($result) {
		while ($row = mysql_fetch_row($result)) {
			$cats[$row[0]] = $row[1];
		}
	}
	return $cats;
}

# grab the current list of PackageLocations
#
function pkgLocations() {
	$locs = array();
	$dbh = db_connect();
	$q = "SELECT * FROM PackageLocations ";
	$q.= "ORDER BY Location ASC";
	$result = db_query($q, $dbh);
	if ($result) {
		while ($row = mysql_fetch_row($result)) {
			$locs[$row[0]] = $row[1];
		}
	}
	return $locs;
}

# display the search form in a boxSoft style
#
38
39
function pkg_search_page($SID="") {
	global $_REQUEST;
40
	# SID: session id cookie
eric's avatar
eric committed
41

eric's avatar
eric committed
42
43
	$locs = pkgLocations();
	$cats = pkgCategories();
44
45
46
	$devs = getDevelopers();
	$tus = getTrustedUsers();
	$dbh = db_connect();
eric's avatar
eric committed
47

48

49
50
51
	# determine paging variables
	#
	isset($_REQUEST["PP"]) ? $PP = intval($_REQUEST["PP"]) : $PP = 25;
eric's avatar
eric committed
52
53
	if ($PP < 25) {$PP = 25;}
	if ($PP > 100) {$PP = 100;}
54
55
56
57
58
	isset($_REQUEST["O"]) ? $O = intval($_REQUEST["O"]) : $O = 0;
	if (isset($_REQUEST["do_More"])) {
		$O += $PP;
	} elseif (isset($_REQUEST["do_Less"])) {
		$O -= $PP;
eric's avatar
eric committed
59
	}
60
61
	if ($O < 0) {
		$O = 0;
eric's avatar
eric committed
62
	}
eric's avatar
eric committed
63
64
65
66
67
	if (isset($_REQUEST["do_Search"]) || isset($_REQUEST["do_MyPackages"])) {
		# reset the offset to zero if they hit Go/My Packages
		#
		$O = 0;
	}
eric's avatar
eric committed
68

69

70
71
72
73
74
75
76
77
78
	# grab info for user if they're logged in
	#
	if ($SID) {
		$myuid = uid_from_sid($SID);
		$acct = account_from_sid($SID);
	}

	# The search form
	#
79
	print "<form action='/pkgsearch.php' method='post'>\n";
80
	print "<input type='hidden' name='O' value='".$O."'>\n";
81

eric's avatar
eric committed
82
83
84
85
	print "<center>\n";
	print "<table cellspacing='3' class='boxSoft'>\n";
	print "<tr>\n";
	print "  <td class='boxSoftTitle' align='right'>\n";
86
	print "    <span class='f3'>".__("Search Criteria")."</span>\n";
eric's avatar
eric committed
87
88
89
90
91
92
93
94
95
	print "  </td>\n";
	print "</tr>\n";
	print "<tr>\n";
	print "  <td class='boxSoft'>\n";
	print "<table style='width: 100%' align='center'>\n";

	print "<tr>\n";
	print "<td align='right'>\n";
	print "  <span class='f5'><span class='blue'>".__("Location");
96
	print "</span></span><br />\n";
eric's avatar
eric committed
97
98
99
	print "  <select name='L'>\n";
	print "  <option value=0> ".__("Any")."\n";
	while (list($id, $loc) = each($locs)) {
eric's avatar
eric committed
100
		if (intval($_REQUEST["L"]) == $id) {
eric's avatar
eric committed
101
102
103
104
105
106
107
108
109
110
			print "  <option value=".$id." selected> ".$loc."\n";
		} else {
			print "  <option value=".$id."> ".$loc."\n";
		}
	}
	print "  </select>\n";
	print "</td>\n";

	print "<td align='right'>\n";
	print "  <span class='f5'><span class='blue'>".__("Category");
111
	print "</span></span><br />\n";
eric's avatar
eric committed
112
113
114
	print "  <select name='C'>\n";
	print "  <option value=0> ".__("Any")."\n";
	while (list($id, $cat) = each($cats)) {
eric's avatar
eric committed
115
		if (intval($_REQUEST["C"]) == $id) {
eric's avatar
eric committed
116
117
118
119
120
121
122
123
124
125
			print "  <option value=".$id." selected> ".$cat."\n";
		} else {
			print "  <option value=".$id."> ".$cat."\n";
		}
	}
	print "  </select>\n";
	print "</td>\n";

	print "<td align='right'>\n";
	print "  <span class='f5'><span class='blue'>".__("Keywords");
126
	print "</span></span><br />\n";
eric's avatar
eric committed
127
	print "  <input type='text' name='K' size='35'";
eric's avatar
eric committed
128
129
	$K = str_replace("\"", "", $_REQUEST["K"]); # TODO better testing for
                                              # SQL trickery...
130
	print " value=\"".stripslashes($K)."\" maxlength='35'>\n";
eric's avatar
eric committed
131
132
133
134
	print "</td>\n";

	print "<td align='right'>\n";
	print "  <span class='f5'><span class='blue'>".__("Sort by");
135
	print "</span></span><br />\n";
eric's avatar
eric committed
136
	print "  <select name='SB'>\n";
137
	print "  <option value=n";
138
	$_REQUEST["SB"] == "n" ? print " selected> " : print "> ";
139
	print __("Name")."\n";
eric's avatar
eric committed
140
	print "  <option value=c";
141
	$_REQUEST["SB"] == "c" ? print " selected> " : print "> ";
eric's avatar
eric committed
142
143
	print __("Category")."\n";
	print "  <option value=l";
144
	$_REQUEST["SB"] == "l" ? print " selected> " : print "> ";
eric's avatar
eric committed
145
	print __("Location")."\n";
146
	print "  <option value=v";
147
	$_REQUEST["SB"] == "v" ? print " selected> " : print "> ";
148
	print __("Votes")."\n";
eric's avatar
eric committed
149
150
151
152
153
	print "  </select>\n";
	print "</td>\n";

	print "<td align='right'>\n";
	print "  <span class='f5'><span class='blue'>".__("Per page");
154
	print "</span></span><br />\n";
eric's avatar
eric committed
155
156
	print "  <select name='PP'>\n";
	print "  <option value=25";
157
	$PP == 25 ? print " selected> 25\n" : print "> 25\n";
eric's avatar
eric committed
158
	print "  <option value=50";
159
	$PP == 50 ? print " selected> 50\n" : print "> 50\n";
eric's avatar
eric committed
160
	print "  <option value=75";
161
	$PP == 75 ? print " selected> 75\n" : print "> 75\n";
eric's avatar
eric committed
162
	print "  <option value=100";
163
	$PP == 100 ? print " selected> 100\n" : print "> 100\n";
eric's avatar
eric committed
164
165
166
167
	print "  </select>\n";
	print "</td>\n";

	print "<td align='right' valign='bottom'>&nbsp;\n";
168
169
	print "  <input type='submit' class='button' name='do_Search'";
	print " value='".__("Go")."'>\n";
eric's avatar
eric committed
170
171
	print "</td>\n";

172
173
	if ($SID) {
		print "<td align='right' valign='bottom'>&nbsp;\n";
174
		print "  <input type='submit' class='button' name='do_MyPackages'";
175
176
177
178
	 	print "	value='".__("My Packages")."'>\n";
		print "</td>\n";
	}

eric's avatar
eric committed
179
180
	print "</tr>\n";
	print "</table>\n";
181
182
183
184
185
186
187
188
189

	print "  </td>\n";
	print "</tr>\n";
	print "</table>\n";
	print "</center>\n";
	print "<br />\n";

	# query to pull out package info
	#
190
191
192
193
#	$q = "SELECT Packages.*, IF(ISNULL(PackageID), 0, COUNT(*)) AS Votes ";
#	$q.= "FROM Packages LEFT JOIN PackageVotes ";
#	$q.= "ON Packages.ID = PackageVotes.PackageID ";
	$q = "SELECT * FROM Packages ";
194
	$has_where = 0;
eric's avatar
eric committed
195
196
	if (isset($_REQUEST["L"]) && intval($_REQUEST["L"])) {
		$q.= "WHERE LocationID = ".intval($_REQUEST["L"])." ";
197
198
		$has_where = 1;
	}
eric's avatar
eric committed
199
	if (isset($_REQUEST["C"]) && intval($_REQUEST["C"])) {
200
		if (!$has_where) {
eric's avatar
eric committed
201
			$q.= "WHERE CategoryID = ".intval($_REQUEST["C"])." ";
202
203
			$has_where = 1;
		} else {
eric's avatar
eric committed
204
			$q.= "AND CategoryID = ".intval($_REQUEST["C"])." ";
205
206
207
208
209
210
211
212
213
214
215
216
		}
	}
	if ($K) {
		if (!$has_where) {
			$q.= "WHERE (Name LIKE '".mysql_escape_string($K)."%' OR ";
			$q.= "Description LIKE '%".mysql_escape_string($K)."%') ";
			$has_where = 1;
		} else {
			$q.= "AND (Name LIKE '".mysql_escape_string($K)."%' OR ";
			$q.= "Description LIKE '%".mysql_escape_string($K)."%') ";
		}
	}
eric's avatar
eric committed
217
	if (isset($_REQUEST["do_MyPackages"]) && $SID) {
218
219
220
221
222
223
224
225
226
		if ($myuid) {
			if (!$has_where) {
				$q.= "WHERE MaintainerUID = ".$myuid." ";
				$has_where = 1;
			} else {
				$q.= "AND MaintainerUID = ".$myuid." ";
			}
		}
	}
227

eric's avatar
eric committed
228
	switch ($_REQUEST["SB"]) {
229
		case 'c':
eric's avatar
eric committed
230
			$q.= "ORDER BY CategoryID DESC, Name ASC, LocationID ASC ";
231
232
			break;
		case 'l':
eric's avatar
eric committed
233
			$q.= "ORDER BY LocationID ASC, Name ASC, CategoryID DESC ";
234
			break;
235
		case 'v':
eric's avatar
eric committed
236
			$q.= "ORDER BY NumVotes DESC, Name ASC, CategoryID DESC ";
237
			break;
238
		default:
eric's avatar
eric committed
239
			$q.= "ORDER BY Name ASC, LocationID ASC, CategoryID DESC ";
240
241
			break;
	}
242
	$q.= "LIMIT ".$O.", ".$PP;
243
244
	print $q."<br />\n";

245
246
	$result = db_query($q, $dbh);
	if (!$result) {
247
		print __("Error retrieving package list.");
248

eric's avatar
eric committed
249
250
251
252
	} elseif (!mysql_num_rows($result)) {
		print __("No packages matched your search criteria.");

	} else {
253
254

		if ($SID) {
eric's avatar
eric committed
255
256
			# The 'Actions' table
			#
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
			print "<center>\n";
			print "<table cellspacing='3' class='boxSoft'>\n";
			print "<tr>\n";
			print "  <td class='boxSoftTitle' align='right'>\n";
			print "    <span class='f3'>".__("Actions")."</span>\n";
			print "  </td>\n";
			print "</tr>\n";
			print "<tr>\n";
			print "  <td class='boxSoft'>\n";
			print "<table style='width: 100%' align='center'>\n";
			print "<tr>\n";
			print "  <td align='center'>";
			print "<input type='submit' class='button' name='do_Flag'";
			print "	value='".__("Flag Out-of-date")."'></td>\n";
			print "  <td align='center'>";
			print "<input type='submit' class='button' name='do_Adopt'";
			print "	value='".__("Adopt Packages")."'></td>\n";
			print "  <td align='center'>";
			print "<input type='submit' class='button' name='do_Disown'";
			print "	value='".__("Disown Packages")."'></td>\n";
			print "  <td align='center'>";
			print "<input type='submit' class='button' name='do_Vote'";
			print "	value='".__("Vote")."'></td>\n";
			print "</tr>\n";
			print "</table>\n";
			print "  </td>\n";
			print "</tr>\n";
			print "</table>\n";
			print "</center>\n";
			print "<br />\n";
		}

289
290
291
292
293
294
		# print out package search results
		#
		print "<center>\n";
		print "<table cellspacing='3' class='boxSoft'>\n";
		print "<tr>\n";
		print "  <td class='boxSoftTitle' align='right'>\n";
295
		print "    <span class='f3'>Package Listing</span>\n";
296
		print "  </td>\n";
297
298
		print "</tr>\n";
		print "<tr>\n";
299
		print "  <td class='boxSoft'>\n";
300
301
		print "<table width='100%' cellspacing='0' cellpadding='2'>\n";
		print "<tr>\n";
302
303
304
305
		if ($SID) {
			print "  <th style='border-bottom: #666 1px solid; vertical-align:";
			print " bottom'>&nbsp;</th>\n";
		}
306
307
308
309
310
311
312
313
314
315
316
317
		print "  <th style='border-bottom: #666 1px solid; vertical-align:";
		print " bottom'><span class='f2'>".__("Location")."</span></th>\n";
		print "  <th style='border-bottom: #666 1px solid; vertical-align:";
		print " bottom'><span class='f2'>".__("Category")."</span></th>\n";
		print "  <th style='border-bottom: #666 1px solid; vertical-align:";
		print " bottom'><span class='f2'>".__("Name")."</span></th>\n";
		print "  <th style='border-bottom: #666 1px solid; vertical-align:";
		print " bottom'><span class='f2'>".__("Votes")."</span></th>\n";
		print "  <th style='border-bottom: #666 1px solid; vertical-align:";
		print " bottom'><span class='f2'>".__("Description")."</span></th>\n";
		print "  <th style='border-bottom: #666 1px solid; vertical-align:";
		print " bottom'><span class='f2'>".__("Maintainer")."</span></th>\n";
318
319
320
321
		if ($SID) {
			print "  <th style='border-bottom: #666 1px solid; vertical-align:";
			print " bottom'><span class='f2'>".__("Manage")."</span></th>\n";
		}
322
		print "</tr>\n";
323

324
325
326
		for ($i=0; $row = mysql_fetch_assoc($result); $i++) {
			(($i % 2) == 0) ? $c = "data1" : $c = "data2";
			print "<tr>\n";
327
328
329
330
331
			if ($SID) {
				print "  <td class='".$c."'>";
				if ($row["OutOfDate"]) {
					print "<span style='background-color: red'>";
				}
332
333
334
335
336
337
				print "<input type='checkbox' name='IDs[]' value='".$row["ID"]."'>";
				if ($i == 0) {
					$all_ids = $row["ID"];
				} else {
					$all_ids .= ":".$row["ID"];
				}
338
339
340
341
342
				if ($row["OutOfDate"]) {
					print "</span>";
				}
				print "</td>\n";
			}
343
344
345
346
			print "  <td class='".$c."'><span class='f5'><span class='blue'>";
			print $locs[$row["LocationID"]]."</span></span></td>\n";
			print "  <td class='".$c."'><span class='f5'><span class='blue'>";
			print $cats[$row["CategoryID"]]."</span></span></td>\n";
347
348
349
350
351
			print "  <td class='".$c."'><span class='f4'>";
			$details_url = "<a href='/pkgsearch.php?do_Details=1&ID=";
			$details_url.= $row["ID"]."'><span class='black'>".$row["Name"];
			$details_url.= "-".$row["Version"]."</span></a>";
			print $details_url."</span></td>\n";
352
			print "  <td class='".$c."'><span class='f5'><span class='blue'>";
353
			print "&nbsp;&nbsp;&nbsp;".$row["NumVotes"]."</span></span></td>\n";
354
355
356
			print "  <td class='".$c."'><span class='f4'><span class='blue'>";
			print $row["Description"]."</span></span></td>\n";
			print "  <td class='".$c."'><span class='f5'><span class='blue'>";
357
			$not_managed = 0;
358
359
360
361
362
363
			if (isset($devs[$row["MaintainerUID"]])) {
				print $devs[$row["MaintainerUID"]]["Username"];
			} elseif (isset($tus[$row["MaintainerUID"]])) {
				print $tus[$row["MaintainerUID"]]["Username"];
			} else {
				print "None";
364
				$not_managed = 1;
365
366
			}
			print "</span></span></td>\n";
367
368
369
370
371
372
373
374
			if ($myuid == $row["MaintainerUID"] || $not_managed) {
				$manage_url = "<a href='/pkgmgmnt.php?ID=";
				$manage_url.= $row["ID"]."'><span class='black'>Manage</span></a>";
				print "  <td class='".$c."'><span class='f4'>";
				print $manage_url."</span></td>\n";
			} else {
				print "<td class='".$c."'><span class='f4'>&nbsp;</span></td>\n";
			}
375
376
377
378
379

			print "</tr>\n";

		}
		print "</table>\n";
eric's avatar
eric committed
380
381
382
		print "  </td>\n";
		print "</tr>\n";
		print "</table>\n";
383
		print "<input type='hidden' name='All_IDs' value='".$all_ids."'>\n";
384

eric's avatar
eric committed
385
386
387
388
389
390
		print "<table width='90%' cellspacing='0' cellpadding='2'>\n";
		print "<tr>\n";
		print "  <td>\n";
		print "  <table border='0' cellpadding='0' cellspacing='0' width='100%'>\n";
		print "  <tr>\n";
		print "    <td align='left'>";
391
		print "    <input type='submit' class='button' name='do_Less'";
eric's avatar
eric committed
392
393
394
		print " value='&lt;-- ".__("Less")."'>\n";
		print "    </td>\n";
		print "    <td align='right'>";
395
		print "    <input type='submit' class='button' name='do_More'";
eric's avatar
eric committed
396
397
398
399
		print " value='".__("More")." --&gt;'>\n";
		print "    </td>\n";
		print "  </tr>\n";
		print "  </table>\n";
400
401
402
403
404
		print "  </td>\n";
		print "</tr>\n";
		print "</table>\n";
		print "</center>\n";
	}
405
	print "</form>\n";
406

eric's avatar
eric committed
407
408
409
410
411
	return;
}

# vim: ts=2 sw=2 noet ft=php
?>