include_once("pkgfuncs_po.inc");
# define variables used during pkgsearch
#
$pkgsearch_vars = array("O", "L", "C", "K", "SB", "PP", "do_MyPackages");
# print out the 'return to package details' link
#
function pkgdetails_link($id=0) {
$url_data = "";
print __("Go back to %hpackage details view%h.",
array($url_data, ""));
print "\n
\n";
return;
}
# print out the 'return to search results' link
#
function pkgsearch_results_link() {
global $_REQUEST;
global $pkgsearch_vars;
$url_data = "";
print __("Go back to %hsearch results%h.",
array($url_data, ""));
print "\n
\n";
return;
}
# Make sure this visitor can delete the requested package comment
# They can delete if they were the comment submitter, or if they are a TU/Dev
#
function canDeleteComment($comment_id=0, $atype="", $SID="") {
if ($atype == "Trusted User" || $atype == "Developer") {
# A TU/Dev can delete any comment
#
return TRUE;
}
$uid = uid_from_sid($SID);
$dbh = db_connect();
$q = "SELECT COUNT(ID) AS CNT ";
$q.= "FROM PackageComments ";
$q.= "WHERE ID = " . intval($comment_id);
$q.= " AND UsersID = " . $uid;
$result = db_query($q, $dbh);
if ($result != NULL) {
$row = mysql_fetch_assoc($result);
if ($row['CNT'] > 0) {
return TRUE;
}
}
return FALSE;
}
# see if this Users.ID can manage the package
#
function canManagePackage($uid=0,$AURMUID=0, $MUID=0, $SUID=0, $managed=0) {
if (!$uid) {return 0;}
# The uid of the TU/Dev that manages the package
#
if ($uid == $AURMUID) {return 1;}
# If the package isn't maintained by a TU/Dev, is this the user-maintainer?
#
if ($uid == $MUID && !$managed) {return 1;}
# If the package isn't maintained by a TU/Dev, is this the user-submitter?
#
if ($uid == $SUID && !$managed) {return 1;}
# otherwise, no right to manage this package
#
return 0;
}
# grab the current list of PackageCategories
#
function pkgCategories() {
$cats = array();
$dbh = db_connect();
$q = "SELECT * FROM PackageCategories WHERE ID != 1 ";
$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 WHERE ID != 1 ";
$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;
}
# check to see if the package name exists
#
function package_exists($name="") {
if (!$name) {return NULL;}
$dbh = db_connect();
$q = "SELECT ID FROM Packages ";
$q.= "WHERE Name = '".mysql_escape_string($name)."' ";
$q.= "AND DummyPkg = 0";
$result = db_query($q, $dbh);
if (!$result) {return NULL;}
$row = mysql_fetch_row($result);
return $row[0];
}
# grab package dependencies
#
function package_dependencies($pkgid=0) {
$deps = array();
if ($pkgid) {
$dbh = db_connect();
$q = "SELECT DepPkgID, Name, DummyPkg FROM PackageDepends, Packages ";
$q.= "WHERE PackageDepends.DepPkgID = Packages.ID ";
$q.= "AND PackageDepends.PackageID = ".mysql_escape_string($pkgid);
$q.= " ORDER BY Name";
$result = db_query($q, $dbh);
if (!$result) {return array();}
while ($row = mysql_fetch_row($result)) {
$deps[] = $row;
}
}
return $deps;
}
# create a dummy package and return it's Packages.ID if it already exists,
# return the existing ID
#
function create_dummy($pname="", $sid="") {
if ($pname && $sid) {
$uid = uid_from_sid($sid);
if (!$uid) {return NULL;}
$dbh = db_connect();
$q = "SELECT ID FROM Packages WHERE Name = '";
$q.= mysql_escape_string($pname)."'";
$result = db_query($q, $dbh);
if (!mysql_num_rows($result)) {
# Insert the dummy
#
$q = "INSERT INTO Packages (Name, Description, URL, SubmittedTS, ";
$q.= "SubmitterUID, DummyPkg) VALUES ('";
$q.= mysql_escape_string($pname)."', 'A dummy package', '/#', ";
$q.= "UNIX_TIMESTAMP(), ".$uid.", 1)";
$result = db_query($q, $dbh);
if (!$result) {
return NULL;
}
return mysql_insert_id($dbh);
} else {
$data = mysql_fetch_row($result);
return $data[0];
}
}
return NULL;
}
# grab package comments
#
function package_comments($pkgid=0) {
$comments = array();
if ($pkgid) {
$dbh = db_connect();
$q = "SELECT PackageComments.ID, UserName, Comments, CommentTS ";
$q.= "FROM PackageComments, Users ";
$q.= "WHERE PackageComments.UsersID = Users.ID";
$q.= " AND PackageID = ".mysql_escape_string($pkgid);
$q.= " AND DelUsersID = 0"; # only display non-deleted comments
$q.= " ORDER BY CommentTS ASC";
$result = db_query($q, $dbh);
if (!$result) {return array();}
while ($row = mysql_fetch_assoc($result)) {
$comments[] = $row;
}
}
return $comments;
}
# grab package sources
#
function package_sources($pkgid=0) {
$sources = array();
if ($pkgid) {
$dbh = db_connect();
$q = "SELECT Source FROM PackageSources ";
$q.= "WHERE PackageID = ".mysql_escape_string($pkgid);
$q.= " ORDER BY Source";
$result = db_query($q, $dbh);
if (!$result) {return array();}
while ($row = mysql_fetch_row($result)) {
$sources[] = $row[0];
}
}
return $sources;
}
# grab array of Package.IDs that I've voted for: $pkgs[1234] = 1, ...
#
function pkgvotes_from_sid($sid="") {
$pkgs = array();
if (!$sid) {return $pkgs;}
$dbh = db_connect();
$q = "SELECT PackageID ";
$q.= "FROM PackageVotes, Users, Sessions ";
$q.= "WHERE Users.ID = Sessions.UsersID ";
$q.= "AND Users.ID = PackageVotes.UsersID ";
$q.= "AND Sessions.SessionID = '".mysql_escape_string($sid)."'";
$result = db_query($q, $dbh);
if ($result) {
while ($row = mysql_fetch_row($result)) {
$pkgs[$row[0]] = 1;
}
}
return $pkgs;
}
# display package details
#
function package_details($id=0, $SID="") {
global $_REQUEST;
global $pkgsearch_vars;
$q = "SELECT Packages.*,Location,Category ";
$q.= "FROM Packages,PackageLocations,PackageCategories ";
$q.= "WHERE Packages.LocationID = PackageLocations.ID ";
$q.= "AND Packages.CategoryID = PackageCategories.ID ";
$q.= "AND Packages.ID = ".intval($_REQUEST["ID"]);
$dbh = db_connect();
$results = db_query($q, $dbh);
if (!$results) {
print __("Error retrieving package details.")."
\n";
} else {
$row = mysql_fetch_assoc($results);
if (empty($row)) {
print __("Package details could not be found.")."
\n";
} else {
# print out package details
#
print "
\n";
print "
\n";
print "\n";
print "\n";
print " ";
print "".__("Package Details")." | \n";
print "
\n";
print "\n";
print " \n";
print "\n";
print "\n";
print "\n";
print " ";
print $row["Name"] . " " . $row["Version"]." | \n";
print " \n";
print "\n";
print " ";
print "".$row["URL"]." | \n";
print " \n";
print "\n";
print " ".$row["Description"];
print " | \n";
print " \n";
print "\n";
print " ![](/images/pad.gif) | ";
print " \n";
print "\n";
print " ";
if ($row["Location"] == "unsupported") {
$edit_cat = "".$row["Category"]."";
$edit_cat .= " (";
$edit_cat .= __("change category").")";
} else {
$edit_cat = $row["Category"];
}
print $row["Location"]." :: ".$edit_cat." | ";
print " \n";
print "\n";
print " ".__("Maintainer").": ";
if ($row["AURMaintainerUID"]) {
$maintainer = username_from_id($row["AURMaintainerUID"]);
} elseif ($row["MaintainerUID"]) {
$maintainer = username_from_id($row["MaintainerUID"]);
} else {
$maintainer = "None";
}
print $maintainer . " | ";
print " \n";
print "\n";
print " ![](/images/pad.gif) | ";
print " \n";
print "\n";
print " ";
if ($row["LocationID"] == 2) {
print "Tarball :: Files | ";
} elseif ($row["LocationID"] == 3) {
print "CVS";
}
print " \n";
print "\n";
print " ![](/images/pad.gif) | ";
print " \n";
print "\n";
print " ";
print "";
print "";
print __("Dependencies")." | \n";
print "";
$deps = package_dependencies($row["ID"]); # $deps[0] = array('id','name', 'dummy');
while (list($k, $darr) = each($deps)) {
$url = "".$darr[1]." \n";
else print "".$darr[1]." \n";
}
print " | \n";
print " | ";
print " ";
print "";
print "";
print __("Sources")." | \n";
print "";
$sources = package_sources($row["ID"]); # $sources[0] = 'src';
while (list($k, $src) = each($sources)) {
$parsed_url = parse_url($src);
if ($parsed_url['scheme'])
{
//It is an external source
print "".$src." \n";
}
else
{
//It is presumably an internal source
if ($row["LocationID"] == 2) {
print "".$src." \n";
} elseif ($row["LocationID"] == 3) {
print "";
print $src." \n";
}
}
}
print " | \n";
print " | ";
print " \n";
# Display package comments
#
$comments = package_comments($row["ID"]);
if (!empty($comments)) {
while (list($indx, $carr) = each($comments)) {
print "\n";
print " ";
print "![](/images/pad.gif) | \n";
print "\n";
print " ";
print "";
print "";
if (canDeleteComment($carr["ID"], account_from_sid($SID), $SID)) {
$durl = " ";
}
print $durl . " ";
print __("Comment by: %h%s%h on %h%s%h",
array("",$carr["UserName"],"",
"",date("Ymd [H:i:s]",$carr["CommentTS"]),""));
print "";
print " | ";
print "\n";
print str_replace("\n", " ", str_replace('"',""", htmlspecialchars(strip_tags(stripslashes($carr["Comments"])))));
print " \n";
print " | \n";
print " \n";
print " | \n";
print " \n";
}
}
print "\n";
print " ";
print " | \n";
print "\n";
print " ";
print "\n";
print " | ";
if ($SID) {
print " | \n";
}
print " \n";
print " \n";
print "\n";
print " | \n";
print "
\n";
print "
\n";
}
}
return;
}
# display the search form in a boxSoft style
#
function pkg_search_page($SID="") {
global $_REQUEST;
global $pkgsearch_vars;
# SID: session id cookie
$locs = pkgLocations();
$cats = pkgCategories();
$devs = getDevelopers();
$tus = getTrustedUsers();
$users = getUsers();
$dbh = db_connect();
# determine paging variables
#
$_REQUEST["PP"] ? $PP = intval($_REQUEST["PP"]) : $PP = 25;
if ($PP < 25) {$PP = 25;}
if ($PP > 100) {$PP = 100;}
$_REQUEST["O"] ? $O = intval($_REQUEST["O"]) : $O = 0;
if ($_REQUEST["do_More"]) {
$O += $PP;
} elseif ($_REQUEST["do_Less"]) {
$O -= $PP;
}
if ($O < 0) {
$O = 0;
}
if ($_REQUEST["do_Search"] && $_REQUEST["do_Search"] != 1) {
# reset the offset to zero if they hit Go
#
$_REQUEST["do_MyPackages"] = 0;
$O = 0;
}
$_REQUEST["O"] = $O; # so that pkg_search_results() works
# grab info for user if they're logged in
#
if ($SID) {
$myuid = uid_from_sid($SID);
$acct = account_from_sid($SID);
$my_votes = pkgvotes_from_sid($SID);
}
# The search form
#
print "\n";
return;
}
# vim: ts=2 sw=2 noet ft=php
?>