diff options
-rw-r--r-- | support/schema/aur-schema.sql | 2 | ||||
-rwxr-xr-x | support/schema/gendummydata.py | 18 | ||||
-rw-r--r-- | web/html/index.php | 7 | ||||
-rw-r--r-- | web/html/pkgmgmnt.php | 8 | ||||
-rw-r--r-- | web/html/pkgsearch.php | 116 | ||||
-rw-r--r-- | web/lib/aur.inc | 1 | ||||
-rw-r--r-- | 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"])) . "<br />\n"; + +# NOTE: managing an orphaned package will automatically force adoption # -print __("Under construction...")."<br />\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 "<br />\n"; + + } else { + # Flag the packages in $ids array, and unflag any other + # packages listed in $_REQUEST["All_IDs"] + # + print "flagging<br />\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 "<br />\n"; + + } else { + # Disown the packages in $ids array + # + print "disowning<br />\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 "<br />\n"; + + } else { + # Adopt the packages in $ids array + # + print "adopting<br />\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 "<br />\n"; + + } else { + # vote on the packages in $ids array. 'unvote' for any packages + # listed in the $_REQUEST["All_IDs"] array. + # + print "adopting<br />\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<br />\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<br />\n"; + + print "<form action='/pkgsearch.php' method='post'>\n"; + print "<input type='hidden' name='O' value='".($OFFSET+intval($PP))."'>\n"; + print "<input type='hidden' name='L' value='".$L."'>\n"; + print "<input type='hidden' name='M' value='".$M."'>\n"; + print "<input type='hidden' name='C' value='".$C."'>\n"; + print "<input type='hidden' name='K' value='".$K."'>\n"; + print "<input type='hidden' name='SB' value='".$SB."'>\n"; + print "<input type='hidden' name='PP' value='".$PP."'>\n"; + print "<center>\n"; print "<table cellspacing='3' class='boxSoft'>\n"; print "<tr>\n"; @@ -77,8 +92,6 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print "</tr>\n"; print "<tr>\n"; print " <td class='boxSoft'>\n"; - print "<form action='/pkgsearch.php' method='post'>\n"; - print "<input type='hidden' name='Action' value='SearchPkgs'>\n"; print "<table style='width: 100%' align='center'>\n"; print "<tr>\n"; @@ -154,12 +167,13 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print "</td>\n"; print "<td align='right' valign='bottom'> \n"; - print " <input type='submit' class='button' value='".__("Go")."'>\n"; + print " <input type='submit' class='button' name='do_Search'"; + print " value='".__("Go")."'>\n"; print "</td>\n"; if ($SID) { print "<td align='right' valign='bottom'> \n"; - print " <input type='submit' class='button' name='M'"; + print " <input type='submit' class='button' name='do_MyPackages'"; print " value='".__("My Packages")."'>\n"; print "</td>\n"; } @@ -167,61 +181,18 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print "</tr>\n"; print "</table>\n"; - print "</form>\n"; print " </td>\n"; print "</tr>\n"; print "</table>\n"; print "</center>\n"; print "<br />\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 "<center>\n"; - print "<form action='/pkgsearch.php' method='post'>\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 "<input type='hidden' name='Action' value='DoSomething'>\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_Disown'"; - print " value='".__("Disown Packages")."'></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_Vote'"; - print " value='".__("Vote")."'></td>\n"; - print "</tr>\n"; - print "</table>\n"; - print " </td>\n"; - print "</tr>\n"; - print "</table>\n"; - print "</form>\n"; - print "</center>\n"; - print "<br />\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."<br />\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 "<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"; + } + # print out package search results # print "<center>\n"; @@ -310,6 +321,10 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { 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"; + if ($SID) { + print " <th style='border-bottom: #666 1px solid; vertical-align:"; + print " bottom'><span class='f2'>".__("Manage")."</span></th>\n"; + } print "</tr>\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 "<span style='background-color: red'>"; } - print "<input type='checkbox' name='PIDs[]' value='".$row["ID"]."'>"; + print "<input type='checkbox' name='IDs[]' value='".$row["ID"]."'>"; + if ($i == 0) { + $all_ids = $row["ID"]; + } else { + $all_ids .= ":".$row["ID"]; + } if ($row["OutOfDate"]) { print "</span>"; } @@ -330,21 +350,34 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { 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"; - print " <td class='".$c."'><span class='f4'><span class='blue'>"; - print $row["Name"]."-".$row["Version"]."</span></span></td>\n"; + 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"; print " <td class='".$c."'><span class='f5'><span class='blue'>"; - print " ".$row["Votes"]."</span></span></td>\n"; + print " ".$row["NumVotes"]."</span></span></td>\n"; 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'>"; + $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 "</span></span></td>\n"; + 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'> </span></td>\n"; + } print "</tr>\n"; @@ -353,40 +386,20 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print " </td>\n"; print "</tr>\n"; print "</table>\n"; + print "<input type='hidden' name='All_IDs' value='".$all_ids."'>\n"; - print "<br />\n"; 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'>"; - print " <form action='/pkgsearch.php' method='post'>\n"; - print " <input type='hidden' name='Action' value='SearchPkgs'>\n"; - print " <input type='hidden' name='O' value='".($OFFSET-intval($PP))."'>\n"; - print " <input type='hidden' name='L' value='".$L."'>\n"; - print " <input type='hidden' name='M' value='".$M."'>\n"; - print " <input type='hidden' name='C' value='".$C."'>\n"; - print " <input type='hidden' name='K' value='".$K."'>\n"; - print " <input type='hidden' name='SB' value='".$SB."'>\n"; - print " <input type='hidden' name='PP' value='".$PP."'>\n"; - print " <input type='submit' class='button'"; + print " <input type='submit' class='button' name='do_Less'"; print " value='<-- ".__("Less")."'>\n"; - print " </form>\n"; print " </td>\n"; print " <td align='right'>"; - print " <form action='/pkgsearch.php' method='post'>\n"; - print " <input type='hidden' name='Action' value='SearchPkgs'>\n"; - print " <input type='hidden' name='O' value='".($OFFSET+intval($PP))."'>\n"; - print " <input type='hidden' name='L' value='".$L."'>\n"; - print " <input type='hidden' name='M' value='".$M."'>\n"; - print " <input type='hidden' name='C' value='".$C."'>\n"; - print " <input type='hidden' name='K' value='".$K."'>\n"; - print " <input type='hidden' name='SB' value='".$SB."'>\n"; - print " <input type='hidden' name='PP' value='".$PP."'>\n"; - print " <input type='submit' class='button'"; + print " <input type='submit' class='button' name='do_More'"; print " value='".__("More")." -->'>\n"; - print " </form>\n"; print " </td>\n"; print " </tr>\n"; print " </table>\n"; @@ -395,6 +408,7 @@ function pkg_search_page($SID="",$L="",$C="",$K="",$SB="",$M=0,$O=0,$PP=25) { print "</table>\n"; print "</center>\n"; } + print "</form>\n"; return; } |