pkgfuncs.inc 14.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

# 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;
}

eric's avatar
eric committed
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# display package details
#
function package_details($id=0) {
	$q = "SELECT * FROM Packages WHERE ID = ".intval($_REQUEST["ID"]);
	$dbh = db_connect();
	$results = db_query($q, $dbh);
	if (!$results) {
		print __("Error retrieving package details.")."<br />\n";

	} else {
		$row = mysql_fetch_assoc($results);
		if (empty($row)) {
			print __("Package details could not be found.")."<br />\n";

		} else {

			# print out package details
			#
			print "<br />\n";
			print "<center>\n";
			print "<table cellspacing='3' class='boxSoft'>\n";
			print "<tr>\n";
			print "  <td class='boxSoftTitle' align='right'>";
			print "<span class='f3'>Package Details</span></td>\n";
			print "</tr>\n";
			print "<tr>\n";
			print "  <td class='boxSoft'>\n";
			print "<center>\n";
			print "<table>\n";
			print "<tr>\n";
			print "  <td colspan='2'><span class='f2'>NAME</span></td>\n";
			print "</tr>\n";

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

			print "</table>\n";
		}
	}
	return;
}


eric's avatar
eric committed
81
82
# display the search form in a boxSoft style
#
83
84
function pkg_search_page($SID="") {
	global $_REQUEST;
eric's avatar
eric committed
85
	global $pkgsearch_vars;
86
	# SID: session id cookie
eric's avatar
eric committed
87

eric's avatar
eric committed
88
89
	$locs = pkgLocations();
	$cats = pkgCategories();
90
91
92
	$devs = getDevelopers();
	$tus = getTrustedUsers();
	$dbh = db_connect();
eric's avatar
eric committed
93

94

95
96
97
	# determine paging variables
	#
	isset($_REQUEST["PP"]) ? $PP = intval($_REQUEST["PP"]) : $PP = 25;
eric's avatar
eric committed
98
99
	if ($PP < 25) {$PP = 25;}
	if ($PP > 100) {$PP = 100;}
100
101
102
103
104
	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
105
	}
106
107
	if ($O < 0) {
		$O = 0;
eric's avatar
eric committed
108
	}
eric's avatar
eric committed
109
110
111
112
113
	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
114

115

116
117
118
119
120
121
122
123
124
	# grab info for user if they're logged in
	#
	if ($SID) {
		$myuid = uid_from_sid($SID);
		$acct = account_from_sid($SID);
	}

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

eric's avatar
eric committed
128
129
130
131
	print "<center>\n";
	print "<table cellspacing='3' class='boxSoft'>\n";
	print "<tr>\n";
	print "  <td class='boxSoftTitle' align='right'>\n";
132
	print "    <span class='f3'>".__("Search Criteria")."</span>\n";
eric's avatar
eric committed
133
134
135
136
137
138
139
140
141
	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");
142
	print "</span></span><br />\n";
eric's avatar
eric committed
143
144
145
	print "  <select name='L'>\n";
	print "  <option value=0> ".__("Any")."\n";
	while (list($id, $loc) = each($locs)) {
eric's avatar
eric committed
146
		if (intval($_REQUEST["L"]) == $id) {
eric's avatar
eric committed
147
148
149
150
151
152
153
154
155
156
			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");
157
	print "</span></span><br />\n";
eric's avatar
eric committed
158
159
160
	print "  <select name='C'>\n";
	print "  <option value=0> ".__("Any")."\n";
	while (list($id, $cat) = each($cats)) {
eric's avatar
eric committed
161
		if (intval($_REQUEST["C"]) == $id) {
eric's avatar
eric committed
162
163
164
165
166
167
168
169
170
171
			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");
172
	print "</span></span><br />\n";
eric's avatar
eric committed
173
	print "  <input type='text' name='K' size='35'";
eric's avatar
eric committed
174
175
	$K = str_replace("\"", "", $_REQUEST["K"]); # TODO better testing for
                                              # SQL trickery...
176
	print " value=\"".stripslashes($K)."\" maxlength='35'>\n";
eric's avatar
eric committed
177
178
179
180
	print "</td>\n";

	print "<td align='right'>\n";
	print "  <span class='f5'><span class='blue'>".__("Sort by");
181
	print "</span></span><br />\n";
eric's avatar
eric committed
182
	print "  <select name='SB'>\n";
183
	print "  <option value=n";
184
	$_REQUEST["SB"] == "n" ? print " selected> " : print "> ";
185
	print __("Name")."\n";
eric's avatar
eric committed
186
	print "  <option value=c";
187
	$_REQUEST["SB"] == "c" ? print " selected> " : print "> ";
eric's avatar
eric committed
188
189
	print __("Category")."\n";
	print "  <option value=l";
190
	$_REQUEST["SB"] == "l" ? print " selected> " : print "> ";
eric's avatar
eric committed
191
	print __("Location")."\n";
192
	print "  <option value=v";
193
	$_REQUEST["SB"] == "v" ? print " selected> " : print "> ";
194
	print __("Votes")."\n";
eric's avatar
eric committed
195
196
197
198
199
	print "  </select>\n";
	print "</td>\n";

	print "<td align='right'>\n";
	print "  <span class='f5'><span class='blue'>".__("Per page");
200
	print "</span></span><br />\n";
eric's avatar
eric committed
201
202
	print "  <select name='PP'>\n";
	print "  <option value=25";
203
	$PP == 25 ? print " selected> 25\n" : print "> 25\n";
eric's avatar
eric committed
204
	print "  <option value=50";
205
	$PP == 50 ? print " selected> 50\n" : print "> 50\n";
eric's avatar
eric committed
206
	print "  <option value=75";
207
	$PP == 75 ? print " selected> 75\n" : print "> 75\n";
eric's avatar
eric committed
208
	print "  <option value=100";
209
	$PP == 100 ? print " selected> 100\n" : print "> 100\n";
eric's avatar
eric committed
210
211
212
213
	print "  </select>\n";
	print "</td>\n";

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

218
219
	if ($SID) {
		print "<td align='right' valign='bottom'>&nbsp;\n";
220
		print "  <input type='submit' class='button' name='do_MyPackages'";
221
222
223
224
	 	print "	value='".__("My Packages")."'>\n";
		print "</td>\n";
	}

eric's avatar
eric committed
225
226
	print "</tr>\n";
	print "</table>\n";
227
228
229
230
231
232
233
234
235

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

	# query to pull out package info
	#
236
237
238
239
#	$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 ";
240
	$has_where = 0;
eric's avatar
eric committed
241
242
	if (isset($_REQUEST["L"]) && intval($_REQUEST["L"])) {
		$q.= "WHERE LocationID = ".intval($_REQUEST["L"])." ";
243
244
		$has_where = 1;
	}
eric's avatar
eric committed
245
	if (isset($_REQUEST["C"]) && intval($_REQUEST["C"])) {
246
		if (!$has_where) {
eric's avatar
eric committed
247
			$q.= "WHERE CategoryID = ".intval($_REQUEST["C"])." ";
248
249
			$has_where = 1;
		} else {
eric's avatar
eric committed
250
			$q.= "AND CategoryID = ".intval($_REQUEST["C"])." ";
251
252
253
254
255
256
257
258
259
260
261
262
		}
	}
	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
263
	if (isset($_REQUEST["do_MyPackages"]) && $SID) {
eric's avatar
eric committed
264
265
266
		# list packages that the user is a AUR Maintainer of, or if it the
		# vistior is a registered user, if they are the Maintainer.
		#
267
268
		if ($myuid) {
			if (!$has_where) {
eric's avatar
eric committed
269
270
				$q.= "WHERE (AURMaintainerUID = ".$myuid." OR ";
				$q.= "MaintainerUID = " . $myuid.") ";
271
272
				$has_where = 1;
			} else {
eric's avatar
eric committed
273
274
				$q.= "AND (AURMaintainerUID = ".$myuid." OR ";
				$q.= "MaintainerUID = " . $myuid.") ";
275
276
277
			}
		}
	}
278

eric's avatar
eric committed
279
	switch ($_REQUEST["SB"]) {
280
		case 'c':
eric's avatar
eric committed
281
			$q.= "ORDER BY CategoryID DESC, Name ASC, LocationID ASC ";
282
283
			break;
		case 'l':
eric's avatar
eric committed
284
			$q.= "ORDER BY LocationID ASC, Name ASC, CategoryID DESC ";
285
			break;
286
		case 'v':
eric's avatar
eric committed
287
			$q.= "ORDER BY NumVotes DESC, Name ASC, CategoryID DESC ";
288
			break;
289
		default:
eric's avatar
eric committed
290
			$q.= "ORDER BY Name ASC, LocationID ASC, CategoryID DESC ";
291
292
			break;
	}
293
	$q.= "LIMIT ".$O.", ".$PP;
294
	print $q."<br />\n";
eric's avatar
eric committed
295
296
297
	print "<pre>\n";
	print_r($_REQUEST);
	print "</pre>\n";
298

299
300
	$result = db_query($q, $dbh);
	if (!$result) {
301
		print __("Error retrieving package list.");
302

eric's avatar
eric committed
303
304
305
306
	} elseif (!mysql_num_rows($result)) {
		print __("No packages matched your search criteria.");

	} else {
307
308

		if ($SID) {
eric's avatar
eric committed
309
310
			# The 'Actions' table
			#
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
			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";
		}

343
344
345
346
347
348
		# 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";
349
		print "    <span class='f3'>Package Listing</span>\n";
350
		print "  </td>\n";
351
352
		print "</tr>\n";
		print "<tr>\n";
353
		print "  <td class='boxSoft'>\n";
354
355
		print "<table width='100%' cellspacing='0' cellpadding='2'>\n";
		print "<tr>\n";
356
357
358
359
		if ($SID) {
			print "  <th style='border-bottom: #666 1px solid; vertical-align:";
			print " bottom'>&nbsp;</th>\n";
		}
360
361
362
363
364
365
366
367
368
369
370
371
		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";
372
373
374
375
		if ($SID) {
			print "  <th style='border-bottom: #666 1px solid; vertical-align:";
			print " bottom'><span class='f2'>".__("Manage")."</span></th>\n";
		}
376
		print "</tr>\n";
377

378
379
380
		for ($i=0; $row = mysql_fetch_assoc($result); $i++) {
			(($i % 2) == 0) ? $c = "data1" : $c = "data2";
			print "<tr>\n";
381
382
383
384
385
			if ($SID) {
				print "  <td class='".$c."'>";
				if ($row["OutOfDate"]) {
					print "<span style='background-color: red'>";
				}
386
387
388
389
390
391
				print "<input type='checkbox' name='IDs[]' value='".$row["ID"]."'>";
				if ($i == 0) {
					$all_ids = $row["ID"];
				} else {
					$all_ids .= ":".$row["ID"];
				}
392
393
394
395
396
				if ($row["OutOfDate"]) {
					print "</span>";
				}
				print "</td>\n";
			}
397
398
399
400
			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";
401
			print "  <td class='".$c."'><span class='f4'>";
eric's avatar
eric committed
402
403
404
405
406
407
408
409
410
411
412
413
			$details_url = "<a href='/pkgsearch.php?";
			$url_data = "do_Details=1&ID=";
			$url_data.= $row["ID"];
			while (list($k, $var) = each($pkgsearch_vars)) {
				# I'm never convinced how to do this encoding/decoding properly.
				# php.net recommends htmlentities(urlencode(data)), but that
				# doesn't work!
				#
				$url_data .= "&".$var."=".rawurlencode(stripslashes($_REQUEST[$var]));
			}
			$details_url.= $url_data;
			$details_url.= "'><span class='black'>".$row["Name"];
414
415
			$details_url.= "-".$row["Version"]."</span></a>";
			print $details_url."</span></td>\n";
416
			print "  <td class='".$c."'><span class='f5'><span class='blue'>";
417
			print "&nbsp;&nbsp;&nbsp;".$row["NumVotes"]."</span></span></td>\n";
418
419
420
			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'>";
421
			$not_managed = 0;
eric's avatar
eric committed
422
423
424
425
			if (isset($devs[$row["AURMaintainerUID"]])) {
				print $devs[$row["AURMaintainerUID"]]["Username"];
			} elseif (isset($tus[$row["AURMaintainerUID"]])) {
				print $tus[$row["AURMaintainerUID"]]["Username"];
426
427
			} else {
				print "None";
428
				$not_managed = 1;
429
430
			}
			print "</span></span></td>\n";
eric's avatar
eric committed
431
432
433
434
435
436
			if ($myuid == $row["AURMaintainerUID"] || $not_managed ||
					($myuid == $row["MaintainerUID"] && $not_managed)) {
				# Only allow TUs/Devs to manage packages, or if it is a regular
				# user and the package has not been adopted by a TU/Dev, then the
				# regular user (most likely the submitter) can manage it.
				#
437
438
439
440
441
442
443
				$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";
			}
444
445
446
447
448

			print "</tr>\n";

		}
		print "</table>\n";
eric's avatar
eric committed
449
450
451
		print "  </td>\n";
		print "</tr>\n";
		print "</table>\n";
452
		print "<input type='hidden' name='All_IDs' value='".$all_ids."'>\n";
453

eric's avatar
eric committed
454
455
456
457
458
459
		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'>";
460
		print "    <input type='submit' class='button' name='do_Less'";
eric's avatar
eric committed
461
462
463
		print " value='&lt;-- ".__("Less")."'>\n";
		print "    </td>\n";
		print "    <td align='right'>";
464
		print "    <input type='submit' class='button' name='do_More'";
eric's avatar
eric committed
465
466
467
468
		print " value='".__("More")." --&gt;'>\n";
		print "    </td>\n";
		print "  </tr>\n";
		print "  </table>\n";
469
470
471
472
473
		print "  </td>\n";
		print "</tr>\n";
		print "</table>\n";
		print "</center>\n";
	}
474
	print "</form>\n";
475

eric's avatar
eric committed
476
477
478
479
480
	return;
}

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