From 4b80bc34ffb738ef3cd1a7944e8716d3e8140565 Mon Sep 17 00:00:00 2001 From: eric Date: Mon, 28 Jun 2004 19:37:02 +0000 Subject: re-working pkgsearch, NumVotes add to Packages table --- support/schema/aur-schema.sql | 2 + support/schema/gendummydata.py | 18 ++++- web/html/index.php | 7 +- web/html/pkgmgmnt.php | 8 +- web/html/pkgsearch.php | 116 +++++++++++++++++++++------ web/lib/aur.inc | 1 + web/lib/pkgs.inc | 176 ++++++++++++++++++++++------------------- 7 files changed, 216 insertions(+), 112 deletions(-) diff --git a/support/schema/aur-schema.sql b/support/schema/aur-schema.sql index 9c5d920..876cf28 100644 --- a/support/schema/aur-schema.sql +++ b/support/schema/aur-schema.sql @@ -110,6 +110,7 @@ CREATE TABLE Packages ( URL CHAR(255) NOT NULL DEFAULT "http://www.archlinux.org", Source CHAR(255) NOT NULL DEFAULT "/dev/null", LocationID TINYINT UNSIGNED NOT NULL, + NumVotes INTEGER UNSIGNED NOT NULL DEFAULT 0, OutOfDate TINYINT UNSIGNED DEFAULT 0, SubmittedTS BIGINT UNSIGNED NOT NULL, SubmitterUID INTEGER UNSIGNED NOT NULL DEFAULT 0, @@ -119,6 +120,7 @@ CREATE TABLE Packages ( INDEX (CategoryID), INDEX (LocationID), INDEX (OutOfDate), + INDEX (NumVotes), INDEX (SubmitterUID), INDEX (MaintainerUID), FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION, diff --git a/support/schema/gendummydata.py b/support/schema/gendummydata.py index 06513ef..7365296 100755 --- a/support/schema/gendummydata.py +++ b/support/schema/gendummydata.py @@ -15,12 +15,12 @@ DB_USER = "aur" DB_PASS = "aur" USER_ID = 5 # Users.ID of first user PKG_ID = 1 # Packages.ID of first package -MAX_USERS = 200 # how many users to 'register' +MAX_USERS = 1000 # how many users to 'register' MAX_DEVS = .1 # what percentage of MAX_USERS are Developers MAX_TUS = .2 # what percentage of MAX_USERS are Trusted Users MAX_PKGS = 2500 # how many packages to load PKG_FILES = (8, 30) # min/max number of files in a package -VOTING = (.3, .8) # percentage range for package voting +VOTING = (.1, .4) # percentage range for package voting RANDOM_PATHS = [ # random path locations for package files "/usr/bin", "/usr/lib", "/etc", "/etc/rc.d", "/usr/share", "/lib", "/var/spool", "/var/log", "/usr/sbin", "/opt", "/usr/X11R6/bin", @@ -299,22 +299,32 @@ if DBUG: print "." # Cast votes # +track_votes = {} if DBUG: print "Casting votes for packages.", count = 0 for u in user_keys: - num_votes = random.randrange(len(seen_pkgs)*VOTING[0], - len(seen_pkgs)*VOTING[1]) + num_votes = random.randrange(int(len(seen_pkgs)*VOTING[0]), + int(len(seen_pkgs)*VOTING[1])) pkgvote = {} for v in range(num_votes): pkg = random.randrange(0, len(seen_pkgs)) if not pkgvote.has_key(pkg): s = "INSERT INTO PackageVotes (UsersID, PackageID) VALUES (%d, %d);\n" % (seen_users[u], pkg) pkgvote[pkg] = 1 + if not track_votes.has_key(pkg): + track_votes[pkg] = 0 + track_votes[pkg] += 1 out.write(s) if count % 100 == 0: if DBUG: print ".", count += 1 +# Update statements for package votes +# +for p in track_votes.keys(): + s = "UPDATE Packages SET NumVotes = %d WHERE ID = %d;\n" % (track_votes[p], p) + out.write(s) + # close output file # out.write("\n") diff --git a/web/html/index.php b/web/html/index.php index 67ff657..64a1c2f 100644 --- a/web/html/index.php +++ b/web/html/index.php @@ -25,11 +25,14 @@ if (isset($_REQUEST["user"]) || isset($_REQUEST["pass"])) { $q.= "AND Passwd = '" . mysql_escape_string($_REQUEST["pass"]) . "'"; $result = db_query($q, $dbh); if (!$result) { - $login_error = __("Incorrect password for username, %s.", + $login_error = __("Error looking up username, %s.", array($_REQUEST["user"])); } else { $row = mysql_fetch_row($result); - if ($row[1]) { + if (empty($row)) { + $login_error = __("Incorrect password for username, %s.", + array($_REQUEST["user"])); + } elseif ($row[1]) { $login_error = __("Your account has been suspended."); } } diff --git a/web/html/pkgmgmnt.php b/web/html/pkgmgmnt.php index 5544016..98c8400 100644 --- a/web/html/pkgmgmnt.php +++ b/web/html/pkgmgmnt.php @@ -6,10 +6,12 @@ check_sid(); # see if they're still logged in html_header(); # print out the HTML header -# Any text you print out to the visitor, use the __() function -# for i18n support. See 'testpo.php' for more details. +# vistor has requested package management for a specific package +# +print __("Manage package ID: %s", array($_REQUEST["ID"])) . "
\n"; + +# NOTE: managing an orphaned package will automatically force adoption # -print __("Under construction...")."
\n"; html_footer("\$Id$"); diff --git a/web/html/pkgsearch.php b/web/html/pkgsearch.php index 9d4521c..64d229b 100644 --- a/web/html/pkgsearch.php +++ b/web/html/pkgsearch.php @@ -6,14 +6,6 @@ set_lang(); # this sets up the visitor's language check_sid(); # see if they're still logged in html_header(); # print out the HTML header -# TODO Maybe pkgsearch, pkgvote can be consolidated? This script can -# provide a search form. In the results, it can contain a checkbox -# for 'flag out of date', 'vote', 'details' link, and a link to 'pkgmgmnt'. -# -# the results page should have columns for, -# pkg name/ver, location, maintainer, description, O-O-D, Vote, details, mgmnt -# - # get login privileges # @@ -25,30 +17,110 @@ if (isset($_COOKIE["AURSID"])) { $atype = ""; } +# grab the list of Package IDs to be operated on +# +isset($_REQUEST["IDs"]) ? $ids = $_REQUEST["IDs"] : $ids = array(); + + +# determine what button the visitor clicked +# +if (isset($_REQUEST["do_Flag"])) { + if (!$atype) { + print __("You must be logged in before you can flag packages."); + print "
\n"; + + } else { + # Flag the packages in $ids array, and unflag any other + # packages listed in $_REQUEST["All_IDs"] + # + print "flagging
\n"; + + # After flagging, show the search page again (or maybe print out + # a message and give the user a link to resume where they were + # in the search + # + pkg_search_page($_COOKIE["AURSID"], $_REQUEST["L"], $_REQUEST["C"], + $_REQUEST["K"], $_REQUEST["SB"], $_REQUEST["M"], $_REQUEST["O"], + $_REQUEST["PP"]); + } + + +} elseif (isset($_REQUEST["do_Disown"])) { + if ($atype != "User" && $atype != "") { + print __("You do not have access to disown packages."); + print "
\n"; + + } else { + # Disown the packages in $ids array + # + print "disowning
\n"; + + # After disowning, show the search page again (or maybe print out + # a message and give the user a link to resume where they were + # in the search + # + pkg_search_page($_COOKIE["AURSID"], $_REQUEST["L"], $_REQUEST["C"], + $_REQUEST["K"], $_REQUEST["SB"], $_REQUEST["M"], $_REQUEST["O"], + $_REQUEST["PP"]); + } -if ($atype && $_REQUEST["Action"] == "Something") { - # do something based on what the user specifies - # -} elseif ($atype && $_REQUEST["Action"] == "SomethingElse") { - # do something else based on what the user specifies +} elseif (isset($_REQUEST["do_Adopt"])) { + if ($atype != "User" && $atype != "") { + print __("You do not have access to adopt packages."); + print "
\n"; + + } else { + # Adopt the packages in $ids array + # + print "adopting
\n"; + + # After adopting, show the search page again (or maybe print out + # a message and give the user a link to resume where they were + # in the search + # + pkg_search_page($_COOKIE["AURSID"], $_REQUEST["L"], $_REQUEST["C"], + $_REQUEST["K"], $_REQUEST["SB"], $_REQUEST["M"], $_REQUEST["O"], + $_REQUEST["PP"]); + } + + +} elseif (isset($_REQUEST["do_Vote"])) { + if (!$atype) { + print __("You must be logged in before you can vote for packages."); + print "
\n"; + + } else { + # vote on the packages in $ids array. 'unvote' for any packages + # listed in the $_REQUEST["All_IDs"] array. + # + print "adopting
\n"; + + # After voting, show the search page again (or maybe print out + # a message and give the user a link to resume where they were + # in the search + # + pkg_search_page($_COOKIE["AURSID"], $_REQUEST["L"], $_REQUEST["C"], + $_REQUEST["K"], $_REQUEST["SB"], $_REQUEST["M"], $_REQUEST["O"], + $_REQUEST["PP"]); + } + + +} elseif (isset($_REQUEST["do_Details"])) { + # give a link to 'manage', and another to return to search + # results. # + print "details for package
\n"; + -} elseif ($_REQUEST["Action"] == "SearchPkgs") { - # the visitor has requested search options and/or hit the less/more button +} else { + # do_More/do_Less/do_Search/do_MyPackages - just do a search # pkg_search_page($_COOKIE["AURSID"], $_REQUEST["L"], $_REQUEST["C"], $_REQUEST["K"], $_REQUEST["SB"], $_REQUEST["M"], $_REQUEST["O"], $_REQUEST["PP"]); -} else { - # do the default thing - give the user a search form that they - # can specify: location, category, maintainer, name, 'my pkgs' - # and display a list of packages based on no search options. - # - pkg_search_page($_COOKIE["AURSID"]); } - html_footer("\$Id$"); ?> diff --git a/web/lib/aur.inc b/web/lib/aur.inc index fd923c7..f97a131 100644 --- a/web/lib/aur.inc +++ b/web/lib/aur.inc @@ -296,6 +296,7 @@ function set_lang() { $row = mysql_fetch_array($result); $LANG = $row[0]; } + $update_cookie = 1; } else { $LANG = "en"; } diff --git a/web/lib/pkgs.inc b/web/lib/pkgs.inc index b4c4788..9fd70cb 100644 --- a/web/lib/pkgs.inc +++ b/web/lib/pkgs.inc @@ -35,7 +35,8 @@ function pkgLocations() { # display the search form in a boxSoft style # -function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { +function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25, + $D="") { # SID: session id cookie # L: PackageLocations.ID # C: PackageCategories.ID @@ -44,12 +45,15 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { # M: search "my packages" # O: Row offset # PP: Per page + # D: Direction to advance (Less/More) $locs = pkgLocations(); $cats = pkgCategories(); $devs = getDevelopers(); $tus = getTrustedUsers(); $dbh = db_connect(); + + if (!$PP) {$PP = 25;} if ($O) { $OFFSET = intval($O); } else { @@ -68,6 +72,17 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { # The search form # + print "SID=$SID, L=$L, C=$C, K=$K, SB=$SB, M=$M, O=$O, PP=$PP
\n"; + + print "
\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "
\n"; print "\n"; print "\n"; @@ -77,8 +92,6 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print "\n"; print "\n"; print " \n"; print "\n"; print "
\n"; - print "\n"; - print "\n"; print "\n"; print "\n"; @@ -154,12 +167,13 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print "\n"; print "\n"; if ($SID) { print "\n"; } @@ -167,61 +181,18 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print "\n"; print "
 \n"; - print " \n"; + print " \n"; print " \n"; - print " \n"; print "
\n"; - print "\n"; print "
\n"; print "
\n"; print "
\n"; - - # TODO need an "action" table in here like on /devel? It would - # allow the visitor to flag packages out-of-date, vote, adopt/disown? - # Probably need to think about the overall UI of this - the package - # name will be a link that goes to 'details'. There should also be - # a column for 'manage/edit' - - if ($SID) { - print "
\n"; - print "
\n"; - print "\n"; - print "\n"; - print " \n"; - print "\n"; - print "\n"; - print " \n"; - print "\n"; - print "
\n"; - print " ".__("Actions")."\n"; - print "
\n"; - print "\n"; - print "\n"; - print "\n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print "\n"; - print "
"; - print ""; - print ""; - print ""; - print "
\n"; - print "
\n"; - print "
\n"; - print "
\n"; - print "
\n"; - } - # query to pull out package info # - $q = "SELECT Packages.*, IF(ISNULL(PackageID), 0, COUNT(*)) AS Votes "; - $q.= "FROM Packages LEFT JOIN PackageVotes "; - $q.= "ON Packages.ID = PackageVotes.PackageID "; +# $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 "; $has_where = 0; if ($L) { $q.= "WHERE LocationID = ".intval($L)." "; @@ -256,7 +227,6 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { } } - $q.= "GROUP BY PackageID "; switch ($SB) { case 'c': $q.= "ORDER BY CategoryID ASC, Name ASC, LocationID ASC "; @@ -265,7 +235,7 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { $q.= "ORDER BY LocationID ASC, Name ASC, CategoryID ASC "; break; case 'v': - $q.= "ORDER BY Votes DESC, Name ASC, CategoryID ASC "; + $q.= "ORDER BY NumVotes DESC, Name ASC, CategoryID ASC "; break; default: $q.= "ORDER BY Name ASC, LocationID ASC, CategoryID ASC "; @@ -273,6 +243,8 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { } $q.= "LIMIT ".$OFFSET.", ".intval($PP); + print $q."
\n"; + $result = db_query($q, $dbh); if (!$result) { print __("No packages matched your search criteria."); @@ -281,6 +253,45 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print __("No packages matched your search criteria."); } else { + # TODO need an "action" table in here like on /devel? It would + # allow the visitor to flag packages out-of-date, vote, adopt/disown? + # Probably need to think about the overall UI of this - the package + # name will be a link that goes to 'details'. There should also be + # a column for 'manage/edit' + + if ($SID) { + print "
\n"; + print "\n"; + print "\n"; + print " \n"; + print "\n"; + print "\n"; + print " \n"; + print "\n"; + print "
\n"; + print " ".__("Actions")."\n"; + print "
\n"; + print "\n"; + print "\n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print "\n"; + print "
"; + print ""; + print ""; + print ""; + print "
\n"; + print "
\n"; + print "
\n"; + print "
\n"; + } + # print out package search results # print "
\n"; @@ -310,6 +321,10 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print " bottom'>".__("Description")."\n"; print " ".__("Maintainer")."\n"; + if ($SID) { + print " ".__("Manage")."\n"; + } print "\n"; for ($i=0; $row = mysql_fetch_assoc($result); $i++) { @@ -320,7 +335,12 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { if ($row["OutOfDate"]) { print ""; } - print ""; + print ""; + if ($i == 0) { + $all_ids = $row["ID"]; + } else { + $all_ids .= ":".$row["ID"]; + } if ($row["OutOfDate"]) { print ""; } @@ -330,21 +350,34 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print $locs[$row["LocationID"]]."\n"; print " "; print $cats[$row["CategoryID"]]."\n"; - print " "; - print $row["Name"]."-".$row["Version"]."\n"; + print " "; + $details_url = "".$row["Name"]; + $details_url.= "-".$row["Version"].""; + print $details_url."\n"; print " "; - print "   ".$row["Votes"]."\n"; + print "   ".$row["NumVotes"]."\n"; print " "; print $row["Description"]."\n"; print " "; + $not_managed = 0; if (isset($devs[$row["MaintainerUID"]])) { print $devs[$row["MaintainerUID"]]["Username"]; } elseif (isset($tus[$row["MaintainerUID"]])) { print $tus[$row["MaintainerUID"]]["Username"]; } else { print "None"; + $not_managed = 1; } print "\n"; + if ($myuid == $row["MaintainerUID"] || $not_managed) { + $manage_url = "Manage"; + print " "; + print $manage_url."\n"; + } else { + print " \n"; + } print "\n"; @@ -353,40 +386,20 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print " \n"; print "\n"; print "\n"; + print "\n"; - print "
\n"; print "\n"; print "\n"; print "
\n"; print " \n"; print " \n"; print " \n"; print " \n"; print " \n"; print "
"; - print "
\n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print "
\n"; print "
"; - print "
\n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print " \n"; - print "
\n"; print "
\n"; @@ -395,6 +408,7 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print "
\n"; print "
\n"; } + print "\n"; return; } -- cgit v1.2.3-70-g09d2