";
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 "";
print __("Go back to %hsearch results%h.",
array($url_data, ""));
print "";
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_real_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, DepCondition FROM PackageDepends, Packages ";
$q.= "WHERE PackageDepends.DepPkgID = Packages.ID ";
$q.= "AND PackageDepends.PackageID = ".mysql_real_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;
}
# reverse deps by tardo
#
function package_required($pkgid=0) {
$deps = array();
if ($pkgid) {
$dbh = db_connect();
$q = "SELECT PackageID, Name, DummyPkg from PackageDepends, Packages ";
$q.= "WHERE PackageDepends.PackageID = Packages.ID ";
$q.= "AND PackageDepends.DepPkgID = ";
$q.= mysql_real_escape_string($pkgid);
$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_real_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_real_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, UsersID, Comments, CommentTS ";
$q.= "FROM PackageComments, Users ";
$q.= "WHERE PackageComments.UsersID = Users.ID";
$q.= " AND PackageID = ".mysql_real_escape_string($pkgid);
$q.= " AND DelUsersID = 0"; # only display non-deleted comments
$q.= " ORDER BY CommentTS DESC";
$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_real_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_real_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
#
echo "
\n";
echo "
".__("Package Details")."
\n";
echo "
\n";
echo "
\n";
echo " ";
echo $row["Name"] . " " . $row["Version"]." |
\n";
echo " ";
echo "".$row["URL"]." |
\n";
echo " ".$row["Description"];
echo " |
\n";
echo " |
\n";
echo " ";
if ($row["Location"] == "unsupported" and (
uid_from_sid($SID) == $row["MaintainerUID"] or
(account_from_sid($SID) == "Developer" or
account_from_sid($SID) == "Trusted User"))) {
$edit_cat = "".$row["Category"]."";
$edit_cat .= " (";
$edit_cat .= __("change category").")";
} else {
$edit_cat = $row["Category"];
}
echo $row["Location"]." :: ".$edit_cat." |
\n";
echo " ".__("Maintainer").": ";
if ($row["MaintainerUID"]) {
$maintainer = username_from_id($row["MaintainerUID"]);
if ($SID) {
echo "";
echo $maintainer . " | ";
} else {
echo $maintainer . "";
}
} else {
$maintainer = "None";
echo $maintainer . "";
}
echo "
\n";
echo " ".__("Votes").": ";
echo $row["NumVotes"] . " |
\n";
# In case of wanting to put a custom message
$msg = __("unknown");
$license = $row["License"] == "" ? $msg : $row["License"];
echo " ".__("License").": ".$license;
echo " |
\n";
echo " |
\n";
# Print the timestamps for last updates
$updated_time = ($row["ModifiedTS"] == 0) ? "(unknown)" : gmdate("r", intval($row["ModifiedTS"]));
$submitted_time = ($row["SubmittedTS"] == 0) ? "(unknown)" : gmdate("r", intval($row["SubmittedTS"]));
echo " ";
echo __("Last Updated").": ".$updated_time." ";
echo __("First Submitted").": ".$submitted_time." |
\n";
echo " |
\n";
echo " ";
if ($row["LocationID"] == 2) {
$urlpath = URL_DIR.$row["Name"]."/".$row["Name"];
print "".__("Tarball")." :: ".__("Files")." :: PKGBUILD | ";
} elseif ($row["LocationID"] == 3) {
echo "CVS";
}
echo "
\n";
if ($row["LocationID"] == 2) {
echo " ";
if ($row["Safe"]) {
echo "".__("The above files have been verified (by %h%s%h) and are safe to use.", array("", username_from_id($row["VerifiedBy"]), ""))." | ";
} else {
echo "".__("Be careful! The above files may contain malicious code that can damage your system.")."";
}
echo "
\n";
}
if ($row["OutOfDate"] == 1) {
echo "\n";
echo "".__("This package has been flagged out of date.")." |
";
}
echo " |
\n";
echo " \n";
echo " \n";
echo " \n";
echo " ";
echo __("Dependencies")." | \n";
echo " ";
$deps = package_dependencies($row["ID"]); # $deps[0] = array('id','name', 'dummy');
while (list($k, $darr) = each($deps)) {
$url = "".$darr[1].$darr[3]." \n";
else echo "".$darr[1].$darr[3]." \n";
}
echo " | \n";
echo " | ";
# reverse-deps by tardo - could use some beautification
echo " ";
echo "";
echo "";
echo __("Required by")." | \n";
echo "";
$deps = package_required($row["ID"]);
while (list($k, $darr) = each($deps)) {
$url = "".$darr[1].$darr[3]." \n";
else print "".$darr[1].$darr[3]." \n";
}
echo " | \n";
echo " \n";
echo " | \n";
echo " \n";
echo " \n";
echo " ";
echo __("Sources")." | \n";
echo " ";
$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
echo "".$src." \n";
}
else
{
//It is presumably an internal source
if ($row["LocationID"] == 2) {
echo "".$src." \n";
} elseif ($row["LocationID"] == 3) {
echo "";
echo $src." \n";
}
}
}
echo " | \n";
echo " \n";
echo " | \n";
echo "
\n";
echo "
\n";
echo "
\n";
echo "
\n\n";
echo "
\n\n";
# Actions Bar
#
if ($SID) {
echo "\n";
echo "
".__("Actions")."
\n";
echo "
\n";
echo " \n";
echo "
\n";
echo "
\n";
echo "\n
\n\n";
}
# Comments
#
echo "\n";
echo "
".__("Comments")."
\n";
echo "
\n";
echo "
\n";
echo " \n";
echo " \n";
echo " \n";
echo " | \n";
echo "
\n";
$comments = package_comments($row["ID"]);
if (!empty($comments)) {
while (list($indx, $carr) = each($comments)) {
echo " \n";
echo " \n";
echo " \n";
echo " \n";
echo " ";
if (canDeleteComment($carr["ID"], account_from_sid($SID), $SID)) {
$durl = "";
echo $durl . " ";
}
if ($SID) {
echo __("Comment by: %h%s%h on %h%s%h",
array("",$carr["UserName"],"",
"",gmdate("Ymd [H:i:s]",$carr["CommentTS"]),""));
} else {
echo __("Comment by: %h%s%h on %h%s%h",
array("",$carr["UserName"],"",
"",gmdate("Ymd [H:i:s]",$carr["CommentTS"]),""));
}
echo " | \n";
echo " \n";
echo " \n";
echo " ";
echo "\n";
echo nl2br(htmlspecialchars($carr["Comments"]));
echo " | \n";
echo " \n";
echo " \n";
echo " | \n";
echo "
\n";
}
}
echo "
\n";
echo "
\n";
echo "
\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;
$_REQUEST["do_Orphans"] = 0;
$O = 0;
}
if ($_REQUEST["do_MyPackages"] && $_REQUEST["do_MyPackages"] != 1) {
# reset the offset to zero if they hit My Packages
#
$_REQUEST["do_Search"] = 0;
$_REQUEST["do_Orphans"] = 0;
$O = 0;
}
if ($_REQUEST["do_Orphans"] && $_REQUEST["do_Orphans"] != 1) {
# reset the offset to zero if they hit Orphans
#
$_REQUEST["do_Search"] = 0;
$_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
?>
\n"; echo nl2br(htmlspecialchars($carr["Comments"])); echo "