summaryrefslogtreecommitdiffstats
path: root/web/html
diff options
context:
space:
mode:
Diffstat (limited to 'web/html')
-rw-r--r--web/html/account.php57
-rw-r--r--web/html/addvote.php83
-rw-r--r--web/html/css/arch.css424
-rw-r--r--web/html/css/archweb.css1052
-rw-r--r--web/html/css/aur.css4
-rw-r--r--web/html/css/containers.css188
-rw-r--r--web/html/css/fonts.css115
-rw-r--r--web/html/index.php165
-rw-r--r--web/html/login.php55
-rw-r--r--web/html/logout.php11
-rw-r--r--web/html/packages.php20
-rw-r--r--web/html/passreset.php122
-rw-r--r--web/html/pkgsubmit.php169
-rw-r--r--web/html/rpc.php11
-rw-r--r--web/html/rss.php8
-rw-r--r--web/html/tu.php99
-rw-r--r--web/html/voters.php43
17 files changed, 1460 insertions, 1166 deletions
diff --git a/web/html/account.php b/web/html/account.php
index 5a0ef50..b0906d9 100644
--- a/web/html/account.php
+++ b/web/html/account.php
@@ -12,9 +12,8 @@ html_header(__('Accounts'));
# Main page processing here
#
-echo "<div class=\"pgbox\">\n";
-echo " <div class=\"pgboxtitle\"><span class=\"f3\">".__("Accounts")."</span></div>\n";
-echo " <div class=\"pgboxbody\">\n";
+echo "<div class=\"box\">\n";
+echo " <h2>".__("Accounts")."</h2>\n";
$action = in_request("Action");
@@ -33,7 +32,8 @@ if (isset($_COOKIE["AURSID"])) {
#
search_results_page($atype, in_request("O"), in_request("SB"),
in_request("U"), in_request("T"), in_request("S"),
- in_request("E"), in_request("R"), in_request("I"));
+ in_request("E"), in_request("R"), in_request("I"),
+ in_request("K"));
} else {
# a non-privileged user is trying to access the search page
@@ -44,17 +44,10 @@ if (isset($_COOKIE["AURSID"])) {
} elseif ($action == "DisplayAccount") {
# the user has clicked 'edit', display the account details in a form
#
- $q = "SELECT Users.*, AccountTypes.AccountType ";
- $q.= "FROM Users, AccountTypes ";
- $q.= "WHERE AccountTypes.ID = Users.AccountTypeID ";
- $q.= "AND Users.ID = ".intval(in_request("ID"));
- $result = db_query($q, $dbh);
- if (!mysql_num_rows($result)) {
+ $row = account_details(in_request("ID"), in_request("U"));
+ if (empty($row)) {
print __("Could not retrieve information for the specified user.");
-
} else {
- $row = mysql_fetch_assoc($result);
-
# double check to make sure logged in user can edit this account
#
if ($atype == "User" || ($atype == "Trusted User" && $row["AccountType"] == "Developer")) {
@@ -64,27 +57,20 @@ if (isset($_COOKIE["AURSID"])) {
display_account_form($atype, "UpdateAccount", $row["Username"],
$row["AccountType"], $row["Suspended"], $row["Email"],
"", "", $row["RealName"], $row["LangPreference"],
- $row["IRCNick"], $row["ID"]);
+ $row["IRCNick"], $row["PGPKey"], $row["ID"]);
}
}
} elseif ($action == "AccountInfo") {
# no editing, just looking up user info
#
- $q = "SELECT Users.*, AccountTypes.AccountType ";
- $q.= "FROM Users, AccountTypes ";
- $q.= "WHERE AccountTypes.ID = Users.AccountTypeID ";
- $q.= "AND Users.ID = ".intval(in_request("ID"));
- $result = db_query($q, $dbh);
- if (!mysql_num_rows($result)) {
+ $row = account_details(in_request("ID"), in_request("U"));
+ if (empty($row)) {
print __("Could not retrieve information for the specified user.");
} else {
- $row = mysql_fetch_assoc($result);
- display_account_info($row["Username"],
- $row["AccountType"], $row["Email"], $row["RealName"],
- $row["IRCNick"]);
+ include("account_details.php");
}
-
+
} elseif ($action == "UpdateAccount") {
# user is submitting their modifications to an existing account
#
@@ -93,10 +79,8 @@ if (isset($_COOKIE["AURSID"])) {
in_request("U"), in_request("T"), in_request("S"),
in_request("E"), in_request("P"), in_request("C"),
in_request("R"), in_request("L"), in_request("I"),
- in_request("ID"));
+ in_request("K"), in_request("ID"));
}
-
-
} else {
if ($atype == "Trusted User" || $atype == "Developer") {
# display the search page if they're a TU/dev
@@ -108,18 +92,10 @@ if (isset($_COOKIE["AURSID"])) {
# A normal user, give them the ability to edit
# their own account
#
- $q = "SELECT Users.*, AccountTypes.AccountType ";
- $q.= "FROM Users, AccountTypes, Sessions ";
- $q.= "WHERE AccountTypes.ID = Users.AccountTypeID ";
- $q.= "AND Users.ID = Sessions.UsersID ";
- $q.= "AND Sessions.SessionID = '";
- $q.= db_escape_string($_COOKIE["AURSID"])."'";
- $result = db_query($q, $dbh);
- if (!mysql_num_rows($result)) {
+ $row = own_account_details($_COOKIE["AURSID"]);
+ if (empty($row)) {
print __("Could not retrieve information for the specified user.");
-
} else {
- $row = mysql_fetch_assoc($result);
# don't need to check if they have permissions, this is a
# normal user editing themselves.
#
@@ -129,7 +105,7 @@ if (isset($_COOKIE["AURSID"])) {
display_account_form($atype, "UpdateAccount", $row["Username"],
$row["AccountType"], $row["Suspended"], $row["Email"],
"", "", $row["RealName"], $row["LangPreference"],
- $row["IRCNick"], $row["ID"]);
+ $row["IRCNick"], $row["PGPKey"], $row["ID"]);
}
}
}
@@ -145,7 +121,7 @@ if (isset($_COOKIE["AURSID"])) {
process_account_form("","new", "NewAccount",
in_request("U"), 1, 0, in_request("E"),
in_request("P"), in_request("C"), in_request("R"),
- in_request("L"), in_request("I"));
+ in_request("L"), in_request("I"), in_request("K"));
} else {
# display the account request form
@@ -155,7 +131,6 @@ if (isset($_COOKIE["AURSID"])) {
}
}
-echo " </div>";
echo "</div>";
html_footer(AUR_VERSION);
diff --git a/web/html/addvote.php b/web/html/addvote.php
index a5ec4a1..d3bd7d4 100644
--- a/web/html/addvote.php
+++ b/web/html/addvote.php
@@ -5,16 +5,19 @@ set_include_path(get_include_path() . PATH_SEPARATOR . '../lib');
include_once("aur.inc.php");
set_lang();
check_sid();
-html_header();
+
+$title = __("Add Proposal");
+
+html_header($title);
if (isset($_COOKIE["AURSID"])) {
$atype = account_from_sid($_COOKIE["AURSID"]);
+ $uid = uid_from_sid($_COOKIE["AURSID"]);
} else {
$atype = "";
}
-if ($atype == "Trusted User" OR $atype == "Developer") {
- $dbh = db_connect();
+if ($atype == "Trusted User" || $atype == "Developer") {
if (!empty($_POST['addVote']) && !check_token()) {
$error = __("Invalid token for user action.");
@@ -24,29 +27,11 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
$error = "";
if (!empty($_POST['user'])) {
- $qcheck = "SELECT * FROM Users WHERE Username = '" . db_escape_string($_POST['user']) . "'";
- $result = db_query($qcheck, $dbh);
- if ($result) {
- $check = mysql_num_rows($result);
- }
- else {
- $check = 0;
- }
-
- if ($check == 0) {
+ if (!valid_user($_POST['user'])) {
$error.= __("Username does not exist.");
} else {
- $qcheck = "SELECT * FROM TU_VoteInfo WHERE User = '" . db_escape_string($_POST['user']) . "'";
- $qcheck.= " AND End > UNIX_TIMESTAMP()";
- $result = db_query($qcheck, $dbh);
- if ($result) {
- $check = mysql_num_rows($result);
- }
- else {
- $check = 0;
- }
- if ($check != 0) {
+ if (open_user_proposals($_POST['user'])) {
$error.= __("%s already has proposal running for them.", htmlentities($_POST['user']));
}
}
@@ -70,13 +55,8 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
}
if (!empty($_POST['addVote']) && empty($error)) {
- $q = "INSERT INTO TU_VoteInfo (Agenda, User, Submitted, End, SubmitterID) VALUES ";
- $q.= "('" . db_escape_string($_POST['agenda']) . "', ";
- $q.= "'" . db_escape_string($_POST['user']) . "', ";
- $q.= "UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + " . db_escape_string($len);
- $q.= ", " . uid_from_sid($_COOKIE["AURSID"]) . ")";
+ add_tu_proposal($_POST['agenda'], $_POST['user'], $len, $uid);
- db_query($q, $dbh);
print "<p class=\"pkgoutput\">" . __("New proposal submitted.") . "</p>\n";
} else {
?>
@@ -85,29 +65,28 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
<p style="color: red;" class="pkgoutput"><?php print $error ?></p>
<?php endif; ?>
-<div class="pgbox">
-<div class="pgboxtitle"><?php print __("Submit a proposal to vote on.") ?></div>
-<div class="pgboxbody">
-<form action='addvote.php' method='post'>
-<p>
-<b><?php print __('Applicant/TU') ?></b>
-<input type='text' name='user' value='<?php if (!empty($_POST['user'])) { print htmlentities($_POST['user'], ENT_QUOTES); } ?>' />
-<?php print __("(empty if not applicable)") ?>
-</p>
-<p>
-<b><?php print __('Length in days') ?></b>
-<input type='text' name='length' value='<?php if (!empty($_POST['length'])) { print htmlentities($_POST['length'], ENT_QUOTES); } ?>' />
-<?php print __("(defaults to 7 if empty)") ?>
-</p>
-<p>
-<b><?php print __('Proposal') ?></b><br />
-<textarea name='agenda' rows='25' cols='80'><?php if (!empty($_POST['agenda'])) { print htmlentities($_POST['agenda']); } ?></textarea><br />
-<input type='hidden' name='addVote' value='1' />
-<input type='hidden' name='token' value='<?php print htmlspecialchars($_COOKIE['AURSID']) ?>' />
-<input type='submit' class='button' value='<?php print __('Submit'); ?>' />
-</p>
-</form>
-</div>
+<div class="box">
+ <h2><?php print __("Submit a proposal to vote on.") ?></h2>
+
+ <form action="addvote.php" method="post">
+ <p>
+ <b><?php print __("Applicant/TU") ?></b>
+ <input type="text" name="user" value="<?php if (!empty($_POST['user'])) { print htmlentities($_POST['user'], ENT_QUOTES); } ?>" />
+ <?php print __("(empty if not applicable)") ?>
+ </p>
+ <p>
+ <b><?php print __("Length in days") ?></b>
+ <input type="text" name="length" value="<?php if (!empty($_POST['length'])) { print htmlentities($_POST['length'], ENT_QUOTES); } ?>" />
+ <?php print __("(defaults to 7 if empty)") ?>
+ </p>
+ <p>
+ <b><?php print __("Proposal") ?></b><br />
+ <textarea name="agenda" rows="15" cols="80"><?php if (!empty($_POST['agenda'])) { print htmlentities($_POST['agenda']); } ?></textarea><br />
+ <input type="hidden" name="addVote" value="1" />
+ <input type="hidden" name="token" value="<?php print htmlspecialchars($_COOKIE['AURSID']) ?>" />
+ <input type="submit" class="button" value="<?php print __("Submit"); ?>" />
+ </p>
+ </form>
</div>
<?php
}
diff --git a/web/html/css/arch.css b/web/html/css/arch.css
deleted file mode 100644
index eec02ee..0000000
--- a/web/html/css/arch.css
+++ /dev/null
@@ -1,424 +0,0 @@
-* { margin: 0; padding: 0; }
-* ul { padding: 20px; }
-body {
- min-width: 600px;
- background-color: white;
- color: #555;
- font-family: "DejaVu Sans", sans-serif;
- font-size: 12px;
-}
-/* Divs */
-#title {
- display: block;
- position: relative;
- height: 123px;
-}
-#main_nav,
-#sub_nav {
- list-style: none;
- font-size: 13px;
- line-height: 26px;
- padding: 0 32px;
-}
-#main_nav {
- background-color: #333;
- text-align: right;
-}
-#sub_nav {
- min-width: 700px;
- background-color: #1793d1;
- text-align: right;
-}
-#main_nav a.selected {
- background-color: #1793d1;
-}
-#sub_nav a.selected {
- background-color: #333;
-}
-#main_nav a,
-#sub_nav a {
- padding: 5px 9px;
- line-height: 26px;
- color: #fff;
- font-weight: bold;
- text-decoration: none;
-}
-#main_nav a:hover {
- background-color: #1793d1;
-}
-#sub_nav a:hover {
- background-color: #333;
-}
-#lang_sub {
- display: block;
- font-size: 10pt;
- text-align: right;
- margin-bottom: 40px;
- margin-right: 35px;
- margin-left: 35px;
-}
-#lang_sub ul {
- list-style: none;
- padding: 0px;
-}
-#lang_sub ul a {
- text-decoration: none;
-}
-#lang_sub ul a:hover {
- text-decoration: underline;
-}
-#lang_sub ul li {
- display: inline;
- padding-right: 1px;
-}
-#login_bar {
- display: block;
- margin-bottom: 10px;
-}
-#login_bar input {
- margin-right: 5px;
-}
-#login_bar .button {
- margin: 2px;
-}
-#updates {
- font-size: small;
- /*position: relative;*/
- top: 0px;
- background-color: #e7f0f6;
- border: 1px solid #92cbe8;
- padding: 10px;
-}
-#logo {
- z-index: 1;
- position: relative;
- top: 10px;
- left: 25px;
- width: 350px;
-}
-#logo h1#archtitle {
- background: transparent url("../images/titlelogo.png") no-repeat top left;
- margin: 0px;
- padding: 0px;
-}
-#logo h1#archtitle a {
- color: transparent;
- display: block;
- width: 350px;
- height: 103px;
-}
-.clear {
- clear: both;
- margin: 0px;
- padding: 0px;
-}
-.right {
- float: right;
- width: 320px;
- padding: 0px 10px 10px 0px;
-}
-.left {
- padding: 10px;
- margin-right: 360px;
-}
-.left p {
- padding-bottom: 10px;
-}
-.box {
- padding: 10px;
-}
-.greybox {
- padding: 10px;
- background-color: #f6f3dd;
- border: 1px solid #d9d6c2;
-}
-div.listing {
- padding-right: 10px;
-}
-.error {
- color: #dd0000;
- font-size: small;
-}
-.foot {
- clear: both;
- text-align: center;
- font-size: 0.75em;
-}
-#search {
- float: right;
- position: relative;
- top: -2em;
- font-size: 0.8em;
-}
-#search input {
- background-color: #f6f3dd;
- border: 1px solid #d9d6c2;
-}
-.smalltext {
- text-align: right;
- font-size: x-small;
-}
-/* Headers */
-h2 {
- margin: 20px 0px 10px 0px;
-}
-h2.title {
- border-bottom: 1px solid #46494d;
-}
-h3 {
- margin-bottom: 10px;
-}
-h3.title {
- text-align: right;
- border-bottom: 1px solid #46494d;
-}
-h4.title {
- border-bottom: 1px solid #46494d;
-}
-h4.news {
- border-bottom: 1px dotted #0771a6;
- margin-bottom: .25em;
- padding-bottom: .2em;
-}
-div.listing h4 {
- color: #fff;
- background-color: #0771a6;
- padding: 3px;
-}
-/* Paragraphs, Anchors, Images */
-p {
- padding-bottom: 20px;
-}
-p.news {
- font-size: small;
-}
-a {
- color: #0771a6;
-}
-a:hover {
- color: #333;
-}
-#about {
- position: relative;
- top: -9px;
-}
-ol {
- padding-left: 45px;
-}
-ul.small {
- list-style: none;
- font-size: x-small;
-}
-ul.links {
- list-style: none;
- font-size: small;
- padding: 0px 0px 20px 20px;
-}
-img {
- border: none;
-}
-hr {
- border: none;
- border-top: 1px solid #46494d;
-}
-.greybox input,
-button,
-textarea,
-select {
- background-color: #e1e3e6;
- border: 1px solid #8faecd;
-}
-.box input, button {
- padding: 2px;
- background-color: #c1c3f6;
- font-size: x-small;
- border: 1px solid #8faecd;
-}
-button#f_trigger {
- background-color: #e1e3e6;
-}
-/* Table stuff */
-table.center {
- margin-left: auto;
- margin-right: auto;
-}
-table.results {
- padding: 0px;
- border-collapse: collapse;
-}
-.results th {
- background-color: #e1e3e6;
- border-bottom: 1px solid #46494d;
- border-top: 1px solid #46494d;
- padding: 0px 5px 0px 0px;
-}
-.results th>a {
- text-decoration: none;
- color: #46494d;
-}
-.results td {
- padding-right: 5px;
- vertical-align: top;
- font-size: 0.8em;
-}
-.listing th {
- font-size: small;
- vertical-align: top;
- padding: 2px;
-}
-.listing td {
- font-size: small;
- padding: 2px;
-}
-blockquote.code {
- background-color: #f3f3f3;
- border: 1px solid #ccc;
- margin-left: auto;
- margin-right: auto;
- white-space: nowrap;
- padding: 5px;
- font-family: "DejaVu Sans Mono", "Bitstream Vera Sans Mono", Courier, "Courier New", Monospace;
- color: #333;
- font-size: .95em;
-}
-.pkg_search_results_footer {
- overflow: auto;
-}
-.pkg_search_results_footer .legend_and_actions {
- float: left;
-}
-.pkg_search_results_footer .legend {
- margin-bottom: 3px;
-}
-.pkg_search_results_footer .page_links {
- float: right;
- margin: 0 0;
- padding: 0 0;
-}
-
-
-/* AUR Styles */
-.pgbox {
- margin: 0 25px;
- margin-bottom: 1%;
- background-color: #fff;
- border: 2px solid #ddd;
- padding: 3px;
-}
-.frontpgboxbody {
- padding: 10px;
-}
-.frontpgboxbody > table {
- width: 100%;
-}
-.pgboxtitle {
- border: 2px solid #ddd;
- border-top: 1px solid #fff;
- border-left: 1px solid #fff;
- background-color: #f1f2f4;
- padding: 2px 10px 2px 10px;
-}
-.pgboxbody,
-.pgboxbody-comment {
- padding: 10px;
-}
-.pgboxbody input {
- margin-right: 10px;
-}
-.pgboxbody-comment > table {
- border-collapse: separate;
- border-spacing: 0px 15px;
-}
-
-#advanced-search li {
- font-size: 11px;
- list-style: none;
- display: inline;
- padding-right: 15px;
- text-decoration: none;
-}
-
-.page_nav {
- margin: 5px 0;
-}
-.page_nav .page_num {
- border: 1px solid #ddd;
- padding: 2px;
- color: #0771a6;
-}
-.page_nav .page_num:hover {
- border: 1px solid #8faecd;
- color: #333;
-}
-.page_nav .page_sel {
- border: 1px solid #8faecd;
- padding: 2px;
- color: #333;
- font-weight: bold;
-}
-
-.comment-header {
- background-color: #f1f2f4;
- color: #888;
- font-size: 14px;
- font-weight: bold;
- margin-left: 5px;
- margin-top: 5px;
- padding: 2px;
-}
-
-.comment-body {
- margin-left: 5px;
- padding: 2px;
- font-family: monospace;
-}
-
-.pkgoutput {
- margin: 0 25px;
- font-size: 18px;
- font-weight: bold;
-}
-
-div.version {
- font-weight:bold;
- font-size:14px;
- text-align:right;
-}
-
-
-
-
-/**
- *
- * =============== Language-specific declarations ======================
- *
- * (e.g. right-to-left texts for Hebrew)
- *
- * */
-
-
-/**
- * RIGHT - TO - LEFT
- *
- * Too add a language, just add it's language code to all
- * :lang()-pseudo-classes, delimited by a hyphen ("-").
- * */
-
-body:lang(he) {
- direction: rtl;
-}
-th:lang(he) {
- text-align: right;
-}
-#lang_sub:lang(he) {
- text-align: left;
-}
-.pkg_search_results_footer:lang(he) .legend_and_actions {
- float: right;
-}
-.pkg_search_results_footer:lang(he) .page_links {
- float: left;
-}
-div.version:lang(he) {
- text-align: left;
-}
diff --git a/web/html/css/archweb.css b/web/html/css/archweb.css
new file mode 100644
index 0000000..cafae77
--- /dev/null
+++ b/web/html/css/archweb.css
@@ -0,0 +1,1052 @@
+/*
+ * ARCH LINUX DJANGO (MAIN SITE)
+ *
+ * Font sizing based on 16px browser defaults (use em):
+ * 14px = 0.875em
+ * 13px = 0.812em
+ * 12px = 0.75em
+ * 11px = 0.6875em
+ *
+ */
+
+/* import the global navbar stylesheet */
+@import url('archnavbar/archnavbar.css');
+
+/* simple reset */
+* {
+ margin: 0;
+ padding: 0;
+ line-height: 1.4;
+}
+
+/* general styling */
+body {
+ min-width: 650px;
+ background: #f6f9fc;
+ color: #222;
+ font: normal 100% sans-serif;
+ text-align: center;
+}
+
+p {
+ margin: .33em 0 1em;
+}
+
+ol,
+ul {
+ margin-bottom: 1em;
+ padding-left: 2em;
+}
+
+ ul {
+ list-style: square;
+ }
+
+code {
+ font: 1.2em monospace;
+ background: #ffd;
+ padding: 0.15em 0.25em;
+}
+
+pre {
+ font: 1.2em monospace;
+ border: 1px solid #bdb;
+ background: #dfd;
+ padding: 0.5em;
+ margin: 1em;
+}
+
+ pre code {
+ display: block;
+ background: none;
+ }
+
+blockquote {
+ margin: 1.5em 2em;
+}
+
+input {
+ vertical-align: middle;
+}
+
+select[multiple] {
+ padding: 1px 0;
+}
+
+ select[multiple] option {
+ padding: 0 0.5em 0 0.3em;
+ }
+
+input[type=submit] {
+ padding: 0 0.6em;
+}
+
+.clear {
+ clear: both;
+}
+
+.hide {
+ display: none;
+}
+
+hr {
+ border: none;
+ border-top: 1px solid #888;
+}
+
+img {
+ border: 0;
+}
+
+/* scale fonts down to a sane default (16 * .812 = 13px) */
+#content {
+ font-size: 0.812em;
+}
+
+/* link style */
+a {
+ text-decoration: none;
+}
+
+ a:link,
+ th a:visited {
+ color: #07b;
+ }
+
+ a:visited {
+ color: #666;
+ }
+
+ a:hover {
+ text-decoration: underline;
+ color: #666;
+ }
+
+ a:active {
+ color: #e90;
+ }
+
+/* special anchor elements */
+a.headerlink {
+ visibility: hidden;
+ padding-left: 0.5em;
+}
+
+h3:hover > a.headerlink {
+ visibility: visible;
+}
+
+/* headings */
+h2 {
+ font-size: 1.5em;
+ margin-bottom: 0.5em;
+ border-bottom: 1px solid #888;
+}
+
+h3 {
+ font-size: 1.25em;
+ margin-top: .5em;
+}
+
+h4 {
+ font-size: 1.15em;
+ margin-top: 1em;
+}
+
+h5 {
+ font-size: 1em;
+ margin-top: 1em;
+}
+
+/* general layout */
+div#content {
+ width: 95%;
+ margin: 0 auto;
+ text-align: left;
+}
+
+div#content-left-wrapper {
+ float: left;
+ width: 100%; /* req to keep content above sidebar in source code */
+}
+
+div#content-left {
+ margin: 0 340px 0 0;
+}
+
+div#content-right {
+ float: left;
+ width: 300px;
+ margin-left: -300px;
+}
+
+div.box {
+ margin-bottom: 1.5em;
+ padding: 0.65em;
+ background: #ecf2f5;
+ border: 1px solid #bcd;
+}
+
+div#footer {
+ clear: both;
+ margin: 2em 0 1em;
+}
+
+ div#footer p {
+ margin: 0;
+ text-align: center;
+ font-size: 0.85em;
+ }
+
+/* alignment */
+div.center,
+table.center,
+img.center {
+ width: auto;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+p.center,
+td.center,
+th.center {
+ text-align: center;
+}
+
+/* table generics */
+table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+ table .wrap {
+ white-space: normal;
+ }
+
+th,
+td {
+ white-space: nowrap;
+ text-align: left;
+}
+
+ th {
+ vertical-align: middle;
+ font-weight: bold;
+ }
+
+ td {
+ vertical-align: top;
+ }
+
+/* table pretty styles */
+table.pretty1 {
+ width: auto;
+ margin-top: 0.25em;
+ margin-bottom: 0.5em;
+ border-collapse: collapse;
+ border: 1px solid #bcd;
+}
+
+ table.pretty1 th {
+ padding: 0.35em;
+ background: #e4eeff;
+ border: 1px solid #bcd;
+ }
+
+ table.pretty1 td {
+ padding: 0.35em;
+ border: 1px dotted #bcd;
+ }
+
+table.pretty2 {
+ width: auto;
+ margin-top: 0.25em;
+ margin-bottom: 0.5em;
+ border-collapse: collapse;
+ border: 1px solid #bbb;
+}
+
+ table.pretty2 th {
+ padding: 0.35em;
+ background: #eee;
+ border: 1px solid #bbb;
+ }
+
+ /* additional styles for JS sorting */
+ table.pretty2 th.header {
+ padding-right: 20px;
+ background-image: url(nosort.gif);
+ background-repeat: no-repeat;
+ background-position: center right;
+ cursor: pointer;
+ }
+
+ table.pretty2 th.headerSortDown {
+ background-image: url(desc.gif);
+ }
+
+ table.pretty2 th.headerSortUp {
+ background-image: url(asc.gif);
+ }
+
+ table.pretty2 td {
+ padding: 0.35em;
+ border: 1px dotted #bbb;
+ }
+
+/* definition lists */
+dl {
+ clear: both;
+}
+
+ dl dt,
+ dl dd {
+ margin-bottom: 4px;
+ padding: 8px 0px 4px;
+ font-weight: bold;
+ border-top: 1px dotted #bbb;
+ }
+
+ dl dt {
+ color: #333;
+ float:left;
+ padding-right:15px;
+ }
+
+/* forms and input styling */
+form p {
+ margin: 0.5em 0;
+}
+
+fieldset {
+ border: 0;
+}
+
+label {
+ width: 12em;
+ vertical-align: top;
+ display: inline-block;
+ font-weight: bold;
+}
+
+input[type=text],
+input[type=password],
+textarea {
+ padding: 0.10em;
+}
+
+form.general-form label,
+form.general-form .form-help {
+ width: 10em;
+ vertical-align: top;
+ display: inline-block;
+}
+
+form.general-form input[type=text],
+form.general-form textarea {
+ width: 45%;
+}
+
+/* archdev navbar */
+div#archdev-navbar {
+ margin: 1.5em 0;
+}
+
+ div#archdev-navbar ul {
+ list-style: none;
+ margin: -0.5em 0;
+ padding: 0;
+ }
+
+ div#archdev-navbar li {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ font-size: 0.9em;
+ }
+
+ div#archdev-navbar li a {
+ padding: 0 0.5em;
+ color: #07b;
+ }
+
+/* error/info messages (x pkg is already flagged out-of-date, etc) */
+#sys-message {
+ width: 35em;
+ text-align: center;
+ margin: 1em auto;
+ padding: 0.5em;
+ background: #fff;
+ border: 1px solid #f00;
+}
+
+ #sys-message p {
+ margin: 0;
+ }
+
+ul.errorlist {
+ color: red;
+}
+
+/**
+ * PAGE SPECIFIC STYLES
+ */
+
+/* home: introduction */
+#intro p.readmore {
+ margin: -0.5em 0 0 0;
+ font-size: .9em;
+ text-align: right;
+}
+
+/* home: news */
+#news {
+ margin-top: 1.5em;
+}
+
+ #news h3 {
+ float: left;
+ padding-bottom: .5em
+ }
+
+ #news div {
+ margin-bottom: 1em;
+ }
+
+ #news div p {
+ margin-bottom: 0.5em;
+ }
+
+ #news .more {
+ font-weight: normal;
+ }
+
+ #news .rss-icon {
+ float: right;
+ margin-top: 1em;
+ }
+
+ #news h4 {
+ clear: both;
+ font-size: 1em;
+ margin-top: 1.5em;
+ border-bottom: 1px dotted #bbb;
+ }
+
+ #news .timestamp {
+ float: right;
+ font-size: 0.85em;
+ margin: -1.8em 0.5em 0 0;
+ }
+
+/* home: arrowed headings */
+#news h3 a {
+ display: block;
+ background: #1794D1;
+ font-size: 15px;
+ padding: 2px 10px;
+ color: white;
+}
+
+ #news a:active {
+ color: white;
+ }
+
+h3 span.arrow {
+ display: block;
+ width: 0px;
+ height: 0px;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-top: 6px solid #1794D1;
+ margin: 0 auto;
+ font-size: 0px;
+ line-height: 0px;
+}
+
+/* home: pkgsearch box */
+#pkgsearch {
+ padding: 1em 0.75em;
+ background: #3ad;
+ color: #fff;
+ border: 1px solid #08b;
+}
+
+ #pkgsearch label {
+ width: auto;
+ padding: 0.1em 0;
+ }
+
+ #pkgsearch input {
+ width: 10em;
+ float: right;
+ font-size: 1em;
+ color: #000;
+ background: #fff;
+ border: 1px solid #09c;
+ }
+
+/* home: recent pkg updates */
+#pkg-updates h3 {
+ margin: 0 0 0.3em;
+}
+
+ #pkg-updates .more {
+ font-weight: normal;
+ }
+
+ #pkg-updates .rss-icon {
+ float: right;
+ margin: -2em 0 0 0;
+ }
+
+ #pkg-updates table {
+ margin: 0;
+ }
+
+ #pkg-updates td.pkg-name {
+ white-space: normal;
+ }
+
+ #pkg-updates td.pkg-arch {
+ text-align: right;
+ }
+
+ #pkg-updates span.testing {
+ font-style: italic;
+ }
+
+ #pkg-updates span.staging {
+ font-style: italic;
+ color: #ff8040;
+ }
+
+/* home: sidebar navigation */
+div#nav-sidebar ul {
+ list-style: none;
+ margin: 0.5em 0 0.5em 1em;
+ padding: 0;
+}
+
+/* home: sponsor banners */
+div#arch-sponsors img {
+ padding: 0.3em 0;
+}
+
+/* home: sidebar components (navlist, sponsors, pkgsearch, etc) */
+div.widget {
+ margin-bottom: 1.5em;
+}
+
+/* feeds page */
+#rss-feeds .rss {
+ padding-right: 20px;
+ background: url(rss.png) top right no-repeat;
+}
+
+/* artwork: logo images */
+#artwork img.inverted {
+ background: #333;
+ padding: 0;
+}
+
+#artwork div.imagelist img {
+ display: inline;
+ margin: 0.75em;
+}
+
+/* news: article list */
+.news-nav {
+ float: right;
+ margin-top: -2.2em;
+}
+
+ .news-nav .prev,
+ .news-nav .next {
+ margin: 0 1em;
+ }
+
+/* news: article pages */
+div.news-article .article-info {
+ margin: 0;
+ color: #999;
+}
+
+/* news: add/edit article */
+form#newsform {
+ width: 60em;
+}
+
+ form#newsform input[type=text],
+ form#newsform textarea {
+ width: 75%;
+ }
+
+/* donate: donor list */
+div#donor-list ul {
+ width: 100%;
+}
+ /* max 4 columns, but possibly fewer if screen size doesn't allow for more */
+ div#donor-list li {
+ float: left;
+ width: 25%;
+ min-width: 20em;
+ }
+
+/* download page */
+#arch-downloads h3 {
+ border-bottom: 1px dotted #bbb;
+}
+
+table#download-torrents .cpu-arch {
+ text-align: center;
+}
+
+/* pkglists/devlists */
+table.results {
+ font-size: 0.846em;
+ border-top: 1px dotted #999;
+ border-bottom: 1px dotted #999;
+}
+
+ table.results th {
+ padding: 0.5em 1em 0.25em 0.25em;
+ border-bottom: 1px solid #999;
+ white-space: nowrap;
+ background-color:#fff;
+ }
+
+ /* additional styles for JS sorting */
+ table.results th.header {
+ padding-right: 20px;
+ background-image: url(nosort.gif);
+ background-repeat: no-repeat;
+ background-position: center right;
+ cursor: pointer;
+ }
+
+ table.results th.headerSortDown {
+ background-color: #e4eeff;
+ background-image: url(desc.gif);
+ }
+
+ table.results th.headerSortUp {
+ background-color: #e4eeff;
+ background-image: url(asc.gif);
+ }
+
+ table.results td {
+ padding: .3em 1em .3em 3px;
+ }
+
+ table.results tr.odd {
+ background: #fff;
+ }
+
+ table.results tr.even {
+ background: #e4eeff;
+ }
+
+ table.results .flagged {
+ color: red;
+ }
+
+/* pkglist: layout */
+div#pkglist-about {
+ margin-top: 1.5em;
+}
+
+/* pkglist: results navigation */
+.pkglist-stats {
+ font-size: 0.85em;
+}
+
+#pkglist-results .pkglist-nav {
+ float: right;
+ margin-top: -2.2em;
+}
+
+.pkglist-nav .prev {
+ margin-right: 1em;
+}
+
+.pkglist-nav .next {
+ margin-right: 1em;
+}
+
+/* search fields and other filter selections */
+.filter-criteria {
+ margin-bottom: 1em;
+}
+
+.filter-criteria h3 {
+ font-size: 1em;
+ margin-top: 0;
+}
+
+.filter-criteria div {
+ float: left;
+ margin-right: 1.65em;
+ font-size: 0.85em;
+}
+
+.filter-criteria legend {
+ display: none;
+}
+
+.filter-criteria label {
+ width: auto;
+ display: block;
+ font-weight: normal;
+}
+
+/* pkgdetails: details links that float on the right */
+#pkgdetails #detailslinks {
+ float: right;
+}
+
+ #pkgdetails #detailslinks h4 {
+ margin-top: 0;
+ margin-bottom: 0.25em;
+ }
+
+ #pkgdetails #detailslinks ul {
+ list-style: none;
+ padding: 0;
+ margin-bottom: 0;
+ font-size: 0.846em;
+ }
+
+ #pkgdetails #detailslinks > div {
+ padding: 0.5em;
+ margin-bottom: 1em;
+ background: #eee;
+ border: 1px solid #bbb;
+ }
+
+#pkgdetails #actionlist .flagged {
+ color: red;
+ font-size: 0.9em;
+ font-style: italic;
+}
+
+/* pkgdetails: pkg info */
+#pkgdetails #pkginfo {
+ width: auto;
+}
+
+ #pkgdetails #pkginfo td {
+ padding: 0.25em 0 0.25em 1.5em;
+ }
+
+ #pkgdetails #pkginfo .userdata {
+ font-size: 0.85em;
+ padding: 0.5em;
+ }
+
+/* pkgdetails: flag package */
+form#flag-pkg-form label {
+ width: 10em;
+}
+
+form#flag-pkg-form textarea,
+form#flag-pkg-form input[type=text] {
+ width: 45%;
+}
+
+/* pkgdetails: deps, required by and file lists */
+#pkgdetails #metadata {
+ clear: both;
+}
+
+#pkgdetails #metadata h3 {
+ background: #555;
+ color: #fff;
+ font-size: 1em;
+ margin-bottom: 0.5em;
+ padding: 0.2em 0.35em;
+}
+
+#pkgdetails #metadata ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#pkgdetails #metadata li {
+ padding-left: 0.5em;
+}
+
+#pkgdetails #metadata p {
+ padding-left: 0.5em;
+}
+
+#pkgdetails #metadata .message {
+ font-style: italic;
+}
+
+#pkgdetails #metadata br {
+ clear: both;
+}
+
+#pkgdetails #pkgdeps {
+ float: left;
+ width: 48%;
+ margin-right: 2%;
+}
+
+#pkgdetails #metadata .virtual-dep,
+#pkgdetails #metadata .testing-dep,
+#pkgdetails #metadata .opt-dep,
+#pkgdetails #metadata .dep-desc {
+ font-style: italic;
+}
+#pkgdetails #pkgreqs {
+ float: left;
+ width: 50%;
+}
+
+#pkgdetails #pkgfiles {
+ clear: left;
+ padding-top: 1em;
+}
+
+ #pkgdetails #pkgfiles li.d {
+ color: #666;
+ }
+
+ #pkgdetails #pkgfiles li.f {
+ }
+
+/* mirror stuff */
+table td.country {
+ white-space: normal;
+}
+
+form#list-generator div ul {
+ list-style: none;
+ display: inline;
+ padding-left: 0;
+}
+
+ form#list-generator div ul li {
+ display: inline;
+ }
+
+/* dev/TU biographies */
+div#arch-bio-toc {
+ width: 75%;
+ margin: 0 auto;
+ text-align: center;
+}
+
+ div#arch-bio-toc a {
+ white-space: nowrap;
+ }
+
+table.arch-bio-entry {
+ width: 75%;
+ min-width: 640px;
+ margin: 0 auto;
+}
+
+ table.arch-bio-entry td.pic {
+ vertical-align: top;
+ padding-right: 15px;
+ padding-top: 2.25em;
+ }
+
+ table.arch-bio-entry td.pic img {
+ padding: 4px;
+ border: 1px solid #ccc;
+ }
+
+ table.arch-bio-entry td h3 {
+ border-bottom: 1px dotted #ccc;
+ margin-bottom: 0.5em;
+ }
+
+ table.arch-bio-entry table.bio {
+ margin-bottom: 2em;
+ }
+
+ table.arch-bio-entry table.bio th {
+ color: #666;
+ font-weight: normal;
+ text-align: right;
+ padding-right: 0.5em;
+ vertical-align: top;
+ white-space: nowrap;
+ }
+
+ table.arch-bio-entry table.bio td {
+ width: 100%;
+ padding-bottom: 0.25em;
+ }
+
+/* dev: login/out */
+table#dev-login {
+ width: auto;
+}
+
+/* dev dashboard: flagged packages */
+form#dash-pkg-notify {
+ text-align: right;
+ padding: 1em 0 0;
+ margin-top: 1em;
+ font-size: 0.85em;
+ border-top: 1px dotted #bbb;
+}
+
+ form#dash-pkg-notify label {
+ width: auto;
+ font-weight: normal;
+ }
+
+ form#dash-pkg-notify input {
+ vertical-align: middle;
+ margin: 0 0.25em;
+ }
+
+ form#dash-pkg-notify input[type=submit] {
+ margin-top: -0.25em;
+ }
+
+ form#dash-pkg-notify p {
+ margin: 0;
+ }
+
+table.dash-stats .key {
+ width: 50%;
+}
+
+/* dev dashboard: admin actions (add news items, todo list, etc) */
+ul.admin-actions {
+ float: right;
+ list-style: none;
+ margin-top: -2.5em;
+}
+
+ ul.admin-actions li {
+ display: inline;
+ padding-left: 1.5em;
+ }
+
+/* todo lists (public and private) */
+.todo-table .complete {
+ color: green;
+}
+
+.todo-table .incomplete {
+ color: red;
+}
+.todo-info {
+ margin: 0; color: #999;
+}
+
+.todo-list h4 {
+ margin-top: 0;
+ margin-bottom: 0.4em;
+}
+
+/* dev: signoff page */
+#dev-signoffs tr:hover {
+ background: #ffd;
+}
+
+ul.signoff-list {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.signoff-yes {
+ color: green;
+ font-weight: bold;
+}
+
+.signoff-no {
+ color: red;
+}
+
+.signoff-bad {
+ color: darkorange;
+}
+
+.signoff-disabled {
+ color: gray;
+}
+
+/* iso testing feedback form */
+#releng-feedback label {
+ width: auto;
+ display: inline;
+ font-weight: normal;
+}
+
+#releng-feedback ul {
+ padding-left: 1em;
+}
+
+#releng-feedback li {
+ list-style: none;
+}
+
+#releng-feedback ul+.helptext {
+ position: relative; top: -0.9em;
+}
+
+#releng-result .success-yes {
+ color: green;
+}
+
+#releng-result .success-no {
+ color: red;
+}
+
+#key-status .signed-yes {
+ color: green;
+}
+
+#key-status .signed-no {
+ color: red;
+}
+
+/* highlight current website in the navbar */
+#archnavbar.anb-home ul li#anb-home a,
+#archnavbar.anb-packages ul li#anb-packages a,
+#archnavbar.anb-download ul li#anb-download a {
+ color: white !important;
+}
+
+/* visualizations page */
+.visualize-buttons {
+ margin: 0.5em 0.33em;
+}
+
+ .visualize-buttons button.active {
+ depressed: true;
+ }
+
+.visualize-chart {
+ position: relative;
+ height: 500px;
+ margin: 0.33em;
+}
+
+#visualize-archrepo .treemap-cell {
+ border: solid 1px white;
+ overflow: hidden;
+ position: absolute;
+}
+
+ #visualize-archrepo .treemap-cell span {
+ padding: 3px;
+ font-size: 0.85em;
+ line-height: 1em;
+ }
+
+#visualize-keys svg {
+ width: 100%;
+ height: 100%;
+}
diff --git a/web/html/css/aur.css b/web/html/css/aur.css
new file mode 100644
index 0000000..741446e
--- /dev/null
+++ b/web/html/css/aur.css
@@ -0,0 +1,4 @@
+/* AUR-specific customizations to "archweb.css". */
+#lang_sub {
+ float: right;
+}
diff --git a/web/html/css/containers.css b/web/html/css/containers.css
deleted file mode 100644
index 237950f..0000000
--- a/web/html/css/containers.css
+++ /dev/null
@@ -1,188 +0,0 @@
-body,table,td,img {
- border: none;
- margin: 0;
- padding: 0;
-}
-/* Main Wrapper Data Format */
-td.preHeader {
- background-color: #000;
- border-bottom: 1px solid #455471;
- height: 16px;
- text-align: right;
-}
-td.headerFill {
- background-color: #6c83b0;
- border-bottom: 1px solid #000;
-}
-td.headerDisplay {
- background-color: #6c83b0;
- padding-left: 16px;
-}
-td.mainLinks {
- background-color: #eee;
- border-bottom: 1px solid #000;
- height: 22px;
- padding-left: 12px;
-}
-td.sideBar {
- background-color: #fff;
- text-align: center;
- vertical-align: top;
- width: 150px;
-}
-td.sideBarGrey {
- background-color: #eee;
- border-bottom: 1px solid #000;
- vertical-align: top;
- width: 150px;
-}
-td.sideBarSmall {
- background-color: #6c83b0;
- border-bottom: 1px solid #000;
- height: 16px;
- text-align: right;
- width: 150px;
-}
-td.sideBarSmallHeader {
- background-color: #6c83b0;
- vertical-align: top;
- height: 16px;
- padding-top: 1px;
- padding-bottom: 2px;
- text-align: right;
- width: 150px;
-}
-td.subLinks {
- background-color: #ffe4e8;
- border-right: 1px solid #000;
- color: #787878;
- padding-left: 12px;
- height: 19px;
-}
-td.contentDisplay {
- background-color: #fff;
- border: 1px solid #000;
- border-top: none;
- text-align: center;
- vertical-align: top;
- padding: 10px;
-}
-td.footerDisplay {
- background-color: #eee;
- border-bottom: 1px solid #000;
- text-align: center;
-}
-/* Containers Used Globally */
-table.boxSoft {
- width: 90%;
- background-color: #ddd;
-}
-td.boxSoft {
- background-color: #fff;
- padding: 2px;
-}
-td.boxSoftColumn {
- padding-left: 16px;
- padding-right: 16px;
- text-align: justify;
- vertical-align: top;
- text-indent: 20px;
-}
-td.div {
- background-color: #eee;
- width: 3px;
-}
-.boxSoftTitle {
- border-bottom: 1px solid #fff;
- border-top: 1px solid #fff;
- background-color: #f1f2f4;
- padding: 1px 0 0 3px;
-}
-table.boxSoftSmall {
- width: 94px;
- background-color: #ddd;
-}
-td.boxSoftSmall {
- background-color: #fff;
- text-align: center;
- padding-top: 2px;
- padding-bottom: 2px;
-}
-td.boxSoftSmallTitle {
- border-bottom: 1px solid #ccc;
- background-color: #f1f2f4;
- padding-left: 10px;
-}
-/* ss = small space */
-td.ss {
- padding-left: 6px;
- vertical-align: top;
-}
-td.display {
- border-bottom: 1px solid #000;
- padding-bottom: 6px;
-}
-td.features {
- padding: 4px;
- text-align: justify;
- vertical-align:top;
-}
-td.formLeft {
- padding: 6px;
- vertical-align: top;
-}
-td.data1 {
- background-color: #eee;
- vertical-align: top;
- padding-left: .3em;
-}
-td.data2 {
- background-color: #ddd;
- vertical-align: top;
- padding-left: .3em;
-}
-.outofdate {
- background-color: #faa;
- padding-left: .3em;
-}
-.legend span {
- padding: 1px;
- margin-left: .3em;
- border: solid 1px #888;
-}
-td.text {
- color: #000;
- font-size: 12px;
-}
-th {
- text-align: left;
-}
-th.header {
- border-bottom: #666 1px solid;
- vertical-align: bottom;
-}
-fieldset {
- border: none;
-}
-input,
-textarea,
-select {
- background-color: #6c83b0;
- font-family: monospace;
- font-size: 12px;
- background-color: #ccc;
- border: #000 1px solid;
- color: #111;
-}
-input.button {
- background-color: #fff;
- color: #6c83b0;
- border: 1px solid #6c83b0;
- font-size: 12px;
- padding: 2px 8px;
-}
-input[type=image] {
- border: 0;
- background: none;
-}
-
diff --git a/web/html/css/fonts.css b/web/html/css/fonts.css
deleted file mode 100644
index 9dea935..0000000
--- a/web/html/css/fonts.css
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Standard Fonts */
-span /* Applicable by default in all fonts */
-{
- color: #555;
- font-family: Bitstream Vera Sans, Lucida Grande, Arial, sans-serif;
-}
-span.f1 /* Important */
-{
- font-size: 20px;
- letter-spacing: 1px;
-}
-span.f2 /* Title */
-{
- font-size: 14px;
- color: #6c83b0;
- font-weight: bold;
-}
-span.f3 /* Sub Title */
-{
- color: #888;
- font-size: 14px;
- font-weight: bold;
- padding-right: 2px;
-}
-span.f4 /* Content Text */
-{
- color: #444;
- font-size: 12px;
-}
-span.f5 /* Content Small */
-{
- color: #333;
- font-size: 11px;
-}
-span.f6 /* Red Message */
-{
- color: #b06d6e;
- font-size: 14px;
- font-weight: bold;
-}
-span.f7 /* Green Message */
-{
- color: #6db06d;
- font-size: 14px;
- font-weight: bold;
-}
-span.f8 /* Internal Sources in Package Details */
-{
- color: #888;
- font-size: 12px;
- font-weight: bold;
-}
-span.fix /* Monospace fixed-font */
-{
- color: #000;
- font-family: monospace, fixed, terminal;
- font-size: 12px;
-}
-span.error /* Content Text */
-{
- color: #900;
- font-size: 12px;
-}
-span.warning /* Content Text */
-{
- color: #c0c000;
- font-size: 12px;
-}
-/* Font Attribute Change (#6c83b0)*/
-.blue { color: #6c83b0; }
-.white { color: #fff; }
-.black { color: #000; }
-.green { color: #6db06d; }
-/* Better contrast on out-of-date rows (FS#20514) */
-.outofdate .blue { color: #444; }
-.link
-{
- color: #6c83b0;
- font-weight: bold;
-}
-/* Misc (c9d1e2) */
-span.preHeader
-{
- color: #c9d1e2;
- font-weight: bold;
- font-size: 11px;
- padding-right: 8px;
- word-spacing: 8px;
-}
-span.sideBarSmallHeader
-{
- color: #fff;
- font-weight: bold;
- font-size: 11px;
- padding-right: 8px;
-}
-a {
- color: #0771a6;
- text-decoration: none;
- font-weight: bold;
-}
-a:hover {
- color: #333;
- text-decoration: none;
- font-weight: bold;
-}
-h1, h2, h3, h4 {
- font-size: 16pt;
-}
-
-.important {
- font-weight: bold;
- color: #f00;
-}
-
diff --git a/web/html/index.php b/web/html/index.php
index ffc5f00..48f5e00 100644
--- a/web/html/index.php
+++ b/web/html/index.php
@@ -10,75 +10,114 @@ include_once('stats.inc.php');
html_header( __("Home") );
-include('pkg_search_form.php');
-
$dbh = db_connect();
?>
-<div class="pgbox">
-<div class="pgboxtitle">
-<span class="f3">AUR <?php print __("Home"); ?></span>
+<div id="content-left-wrapper">
+ <div id="content-left">
+ <div id="intro" class="box">
+ <h2>AUR <?php print __("Home"); ?></h2>
+ <p>
+ <?php
+ echo __(
+ 'Welcome to the AUR! Please read the %sAUR User Guidelines%s and %sAUR TU Guidelines%s for more information.',
+ '<a href="http://wiki.archlinux.org/index.php/AUR_User_Guidelines">',
+ '</a>',
+ '<a href="http://wiki.archlinux.org/index.php/AUR_Trusted_User_Guidelines">',
+ '</a>'
+ );
+ ?>
+ </p>
+ <p>
+ <?php
+ echo __(
+ 'Contributed PKGBUILDs %smust%s conform to the %sArch Packaging Standards%s otherwise they will be deleted!',
+ '<b>', '</b>',
+ '<a href="http://wiki.archlinux.org/index.php/Arch_Packaging_Standards">',
+ '</a>'
+ );
+ ?>
+ </p>
+ <p>
+ <?php echo __('Remember to vote for your favourite packages!'); ?>
+ <?php echo __('Some packages may be provided as binaries in [community].'); ?>
+ </p>
+ <p>
+ <h4><?php echo __('Discussion') ?></h4>
+ <?php
+ echo __(
+ 'General discussion regarding the Arch User Repository (AUR) and Trusted User structure takes place on %saur-general%s. This list can be used for package orphan requests, merge requests, and deletion requests. For discussion relating to the development of the AUR, use the %saur-dev%s mailing list.',
+ '<a href="http://mailman.archlinux.org/mailman/listinfo/aur-general">',
+ '</a>',
+ '<a href="http://mailman.archlinux.org/mailman/listinfo/aur-dev">',
+ '</a>'
+ );
+ ?>
+ </p>
+ <h4><?php echo __('Bug Reporting') ?></h4>
+ <?php
+ echo __(
+ 'If you find a bug in the AUR, please fill out a bug report on our %sbug tracker%s. Use the tracker to report bugs in the AUR %sonly%s. To report packaging bugs contact the package maintainer or leave a comment on the appropriate package page.',
+ '<a href="https://bugs.archlinux.org/index.php?project=2">',
+ '</a>',
+ '<strong>',
+ '</strong>'
+ );
+ ?>
+ </p>
+
+ <div class="important">
+ <b><?php echo __('DISCLAIMER') ?> :</b>
+ <br />
+ <?php echo __('Unsupported packages are user produced content. Any use of the provided files is at your own risk.'); ?>
+ </div>
+ </div>
+ <?php if (!empty($_COOKIE["AURSID"])): ?>
+ <div id="pkg-updates" class="widget box">
+ <table>
+ <tr>
+ <td class="pkg-name">
+ <?php
+ $userid = uid_from_sid($_COOKIE["AURSID"]);
+ user_table($userid, $dbh);
+ ?>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <?php endif; ?>
+ </div>
</div>
-<div class="frontpgboxbody">
-<p>
-
-<?php
-echo __(
- 'Welcome to the AUR! Please read the %hAUR User Guidelines%h and %hAUR TU Guidelines%h for more information.',
- '<a href="http://wiki.archlinux.org/index.php/AUR_User_Guidelines">',
- '</a>',
- '<a href="http://wiki.archlinux.org/index.php/AUR_Trusted_User_Guidelines">',
- '</a>'
- );
-?>
-
-<br />
+<div id="content-right">
+ <div id="pkgsearch" class="widget">
+ <form id="pkgsearch-form" method="get" action="packages.php">
+ <fieldset>
+ <label for="pkgsearch-field">Package Search:</label>
+ <input type="hidden" name="O" value="0" />
+ <input type="text" name="K" size="30" value="<?php if (isset($_REQUEST["K"])) { print stripslashes(trim(htmlspecialchars($_REQUEST["K"], ENT_QUOTES))); } ?>" maxlength="35" />
+ </fieldset>
+ </form>
+ </div>
+ <div id="pkg-updates" class="widget box">
+ <table>
+ <tr>
+ <td class="pkg-name">
+ <?php updates_table($dbh); ?>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <div id="pkg-updates" class="widget box">
+ <table>
+ <tr>
+ <td class="pkg-name">
+ <?php general_stats_table($dbh); ?>
+ </td>
+ </tr>
+ </table>
+ </div>
-<?php
-echo __(
- 'Contributed PKGBUILDs %hmust%h conform to the %hArch Packaging Standards%h otherwise they will be deleted!',
- '<b>', '</b>',
- '<a href="http://wiki.archlinux.org/index.php/Arch_Packaging_Standards">',
- '</a>'
- );
-?>
-
-</p>
-<p>
-<?php echo __('Remember to vote for your favourite packages!'); ?>
-<br />
-<?php echo __('Some packages may be provided as binaries in [community].'); ?>
-</p>
-<table border='0' cellpadding='0' cellspacing='3' width='90%'>
-<tr>
-<td class='boxSoft' valign='top'>
-<?php updates_table($dbh); ?>
-</td>
-<td class='boxSoft' valign='top'>
-<?php
-if (!empty($_COOKIE["AURSID"])) {
- $user = username_from_sid($_COOKIE["AURSID"]);
- user_table($user, $dbh);
- echo '<br />';
-}
-
-general_stats_table($dbh);
-?>
-
-</td>
-</tr>
-</table>
-
-<br />
-<div class="important"><?php
-echo __('DISCLAIMER') . ':<br />';
-echo __('Unsupported packages are user produced content. Any use of the provided files is at your own risk.');
-?></div>
-
-</div>
</div>
-
<?php
html_footer(AUR_VERSION);
-
diff --git a/web/html/login.php b/web/html/login.php
new file mode 100644
index 0000000..7f4f342
--- /dev/null
+++ b/web/html/login.php
@@ -0,0 +1,55 @@
+<?php
+set_include_path(get_include_path() . PATH_SEPARATOR . '../lib');
+
+include_once("aur.inc.php");
+set_lang();
+check_sid();
+
+if (!$DISABLE_HTTP_LOGIN || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'])) {
+ $login = try_login();
+ $login_error = $login['error'];
+}
+
+html_header('AUR ' . __("Login"));
+?>
+<div id="dev-login" class="box">
+ <h2>AUR <?php echo __('Login') ?></h2>
+ <?php if (isset($_COOKIE["AURSID"])): ?>
+ <p>
+ <?php echo __("Logged-in as: %s", '<strong>' . username_from_sid($_COOKIE["AURSID"]) . '</strong>'); ?>
+ <a href="logout.php">[<?php print __("Logout"); ?>]</a>
+ </p>
+ <?php elseif (!$DISABLE_HTTP_LOGIN || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'])): ?>
+ <form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES) ?>">
+ <fieldset>
+ <legend><?php echo __('Enter login credentials') ?></legend>
+ <?php if (!empty($login_error)): ?>
+ <ul class="errorlist"><li><?php echo $login_error ?></li></ul>
+ <?php endif; ?>
+ <p>
+ <label for="id_username"><?php print __('Username') . ':'; ?></label>
+ <input id="id_username" type="text" name="user" size="30" maxlength="<?php print USERNAME_MAX_LEN; ?>" value="<?php if (isset($_POST['user'])) { print htmlspecialchars($_POST['user'], ENT_QUOTES); } ?>" />
+ </p>
+ <p>
+ <label for="id_password"><?php print __('Password') . ':'; ?></label>
+ <input id="id_password" type="password" name="passwd" size="30" maxlength="<?php print PASSWD_MAX_LEN; ?>" />
+ </p>
+ <p>
+ <input type="checkbox" name="remember_me" id="id_remember_me" />
+ <label for="id_remember_me"><?php print __("Remember me"); ?></label>
+ </p>
+ <p>
+ <input type="submit" class="button" value="<?php print __("Login"); ?>" />
+ <a href="passreset.php">[<?php echo __('Forgot Password') ?>]</a>
+ </p>
+ </fieldset>
+ </form>
+ <?php else: ?>
+ <p>
+ <?php printf(__("HTTP login is disabled. Please %sswitch to HTTPs%s if you want to login."),
+ '<a href="' . $AUR_LOCATION . htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES) . '">', '</a>'); ?>
+ </p>
+ <?php endif; ?>
+</div>
+<?php
+html_footer(AUR_VERSION);
diff --git a/web/html/logout.php b/web/html/logout.php
index 45ab564..fe8ffb0 100644
--- a/web/html/logout.php
+++ b/web/html/logout.php
@@ -10,16 +10,15 @@ include_once("acctfuncs.inc.php"); # access AUR common functions
# sending any HTML output.
#
if (isset($_COOKIE["AURSID"])) {
- $dbh = db_connect();
- $q = "DELETE FROM Sessions WHERE SessionID = '";
- $q.= db_escape_string($_COOKIE["AURSID"]) . "'";
- db_query($q, $dbh);
+ if (!$dbh) {
+ $dbh = db_connect();
+ }
+ delete_session_id($_COOKIE["AURSID"], $dbh);
# setting expiration to 1 means '1 second after midnight January 1, 1970'
setcookie("AURSID", "", 1, "/", null, !empty($_SERVER['HTTPS']), true);
unset($_COOKIE['AURSID']);
+ clear_expired_sessions($dbh);
}
-clear_expired_sessions();
-
header('Location: index.php');
diff --git a/web/html/packages.php b/web/html/packages.php
index 7f31d3d..ec76e41 100644
--- a/web/html/packages.php
+++ b/web/html/packages.php
@@ -10,6 +10,8 @@ check_sid(); # see if they're still logged in
# Set the title to the current query if required
if (isset($_GET['ID']) && ($pkgname = pkgname_from_id($_GET['ID']))) {
$title = $pkgname;
+} else if (isset($_GET['N'])) {
+ $title = $pkgname = $_GET['N'];
} else if (!empty($_GET['K'])) {
$title = __("Search Criteria") . ": " . $_GET['K'];
} else {
@@ -89,16 +91,24 @@ html_header($title);
<?php
if (isset($_GET['ID'])) {
+ $pkgid = intval($_GET['ID']);
+} else if (isset($_GET['N'])) {
+ $pkgid = pkgid_from_name($_GET['N']);
+} else {
+ unset($pkgid);
+}
+
+if (isset($pkgid)) {
include('pkg_search_form.php');
- if (!$_GET['ID'] = intval($_GET['ID'])) {
- print __("Error trying to retrieve package details.")."<br />\n";
- } else {
+ if ($pkgid) {
if (isset($_COOKIE["AURSID"])) {
- package_details($_GET['ID'], $_COOKIE["AURSID"]);
+ package_details($pkgid, $_COOKIE["AURSID"]);
}
else {
- package_details($_GET['ID'], null);
+ package_details($pkgid, null);
}
+ } else {
+ print __("Error trying to retrieve package details.")."<br />\n";
}
} else {
if (!isset($_GET['K']) && !isset($_GET['SB'])) {
diff --git a/web/html/passreset.php b/web/html/passreset.php
index 97fbebb..cb88e5a 100644
--- a/web/html/passreset.php
+++ b/web/html/passreset.php
@@ -30,25 +30,10 @@ if (isset($_GET['resetkey'], $_POST['email'], $_POST['password'], $_POST['confir
}
if (empty($error)) {
- $dbh = db_connect();
$salt = generate_salt();
$hash = salted_hash($password, $salt);
- # The query below won't affect any records unless the ResetKey
- # and Email combination is correct and ResetKey is nonempty
- $q = "UPDATE Users
- SET Passwd = '$hash',
- Salt = '$salt',
- ResetKey = ''
- WHERE ResetKey != ''
- AND ResetKey = '".db_escape_string($resetkey)."'
- AND Email = '".db_escape_string($email)."'";
- $result = db_query($q, $dbh);
- if (!mysql_affected_rows($dbh)) {
- $error = __('Invalid e-mail and reset key combination.');
- } else {
- header('Location: passreset.php?step=complete');
- exit();
- }
+
+ $error = password_reset($hash, $salt, $resetkey, $email);
}
} elseif (isset($_POST['email'])) {
$email = $_POST['email'];
@@ -56,22 +41,18 @@ if (isset($_GET['resetkey'], $_POST['email'], $_POST['password'], $_POST['confir
if ($uid != NULL && $uid != 'None') {
# We (ab)use new_sid() to get a random 32 characters long string
$resetkey = new_sid();
- $dbh = db_connect();
- $q = "UPDATE Users
- SET ResetKey = '" . $resetkey . "'
- WHERE ID = " . $uid;
- db_query($q, $dbh);
+ create_resetkey($resetkey, $uid);
# Send email with confirmation link
$body = __('A password reset request was submitted for the account '.
'associated with your e-mail address. If you wish to reset '.
'your password follow the link below, otherwise ignore '.
'this message and nothing will happen.').
"\n\n".
- 'https://aur.archlinux.org/passreset.php?'.
+ "{$AUR_LOCATION}/passreset.php?".
"resetkey={$resetkey}";
$body = wordwrap($body, 70);
- $headers = "To: {$email}\nReply-to: nobody@archlinux.org\nFrom:aur-notify@archlinux.org\nX-Mailer: PHP\nX-MimeOLE: Produced By AUR";
- @mail(' ', 'AUR Password Reset', $body, $headers);
+ $headers = "Reply-to: nobody@archlinux.org\nFrom:aur-notify@archlinux.org\nX-Mailer: PHP\nX-MimeOLE: Produced By AUR";
+ @mail($email, 'AUR Password Reset', $body, $headers);
}
header('Location: passreset.php?step=confirm');
@@ -84,54 +65,49 @@ html_header(__("Password Reset"));
?>
-<div class="pgbox">
- <div class="pgboxtitle">
- <span class="f3"><?php print __("Password Reset"); ?></span>
- </div>
- <div class="pgboxbody">
- <?php
- if ($error) {
- echo '<p><span class="error">'.$error.'</span></p>';
- }
- ?>
- <?php
- if ($step == 'confirm') {
- echo __('Check your e-mail for the confirmation link.');
- } elseif ($step == 'complete') {
- echo __('Your password has been reset successfully.');
- } elseif (isset($_GET['resetkey'])) {
- ?>
- <form action="" method="post">
- <table>
- <tr>
- <td><?php echo __("Confirm your e-mail address:"); ?></td>
- <td><input type="text" name="email" size="30" maxlength="64" /></td>
- </tr>
- <tr>
- <td><?php echo __("Enter your new password:"); ?></td>
- <td><input type="password" name="password" size="30" maxlength="32" /></td>
- </tr>
- <tr>
- <td><?php echo __("Confirm your new password:"); ?></td>
- <td><input type="password" name="confirm" size="30" maxlength="32" /></td>
- </tr>
- </table>
- <br />
- <input type="submit" class="button" value="<?php echo __('Continue') ?>" />
- </form>
- <?php
- } else {
- ?>
- <p><?php echo __('If you have forgotten the e-mail address you used to register, please send a message to the %haur-general%h mailing list.',
- '<a href="http://mailman.archlinux.org/mailman/listinfo/aur-general">',
- '</a>'); ?></p>
- <form action="" method="post">
- <p><?php echo __("Enter your e-mail address:"); ?>
- <input type="text" name="email" size="30" maxlength="64" /></p>
- <input type="submit" class="button" value="<?php echo __('Continue') ?>" />
- </form>
- <?php } ?>
- </div>
+<div class="box">
+ <h2><?php print __("Password Reset"); ?></h2>
+
+ <?php if ($error): ?>
+ <p><span class="error"><?php echo $error ?></span></p>
+ <?php endif;?>
+ <?php
+ if ($step == 'confirm') {
+ echo __('Check your e-mail for the confirmation link.');
+ } elseif ($step == 'complete') {
+ echo __('Your password has been reset successfully.');
+ } elseif (isset($_GET['resetkey'])) {
+ ?>
+ <form action="" method="post">
+ <table>
+ <tr>
+ <td><?php echo __("Confirm your e-mail address:"); ?></td>
+ <td><input type="text" name="email" size="30" maxlength="64" /></td>
+ </tr>
+ <tr>
+ <td><?php echo __("Enter your new password:"); ?></td>
+ <td><input type="password" name="password" size="30" maxlength="32" /></td>
+ </tr>
+ <tr>
+ <td><?php echo __("Confirm your new password:"); ?></td>
+ <td><input type="password" name="confirm" size="30" maxlength="32" /></td>
+ </tr>
+ </table>
+ <br />
+ <input type="submit" class="button" value="<?php echo __('Continue') ?>" />
+ </form>
+ <?php
+ } else {
+ ?>
+ <p><?php echo __('If you have forgotten the e-mail address you used to register, please send a message to the %saur-general%s mailing list.',
+ '<a href="http://mailman.archlinux.org/mailman/listinfo/aur-general">',
+ '</a>'); ?></p>
+ <form action="" method="post">
+ <p><?php echo __("Enter your e-mail address:"); ?>
+ <input type="text" name="email" size="30" maxlength="64" /></p>
+ <input type="submit" class="button" value="<?php echo __('Continue') ?>" />
+ </form>
+ <?php } ?>
</div>
<?php
diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
index c566cb4..65e2f6d 100644
--- a/web/html/pkgsubmit.php
+++ b/web/html/pkgsubmit.php
@@ -33,10 +33,23 @@ if ($uid):
}
# Before processing, make sure we even have a file
- if (!$error) {
- if ($_FILES['pfile']['size'] == 0){
+ switch($_FILES['pfile']['error']) {
+ case UPLOAD_ERR_INI_SIZE:
+ $maxsize = ini_get('upload_max_filesize');
+ $error = __("Error - Uploaded file larger than maximum allowed size (%s)", $maxsize);
+ break;
+ case UPLOAD_ERR_PARTIAL:
+ $error = __("Error - File partially uploaded");
+ break;
+ case UPLOAD_ERR_NO_FILE:
$error = __("Error - No file uploaded");
- }
+ break;
+ case UPLOAD_ERR_NO_TMP_DIR:
+ $error = __("Error - Could not locate temporary upload folder");
+ break;
+ case UPLOAD_ERR_CANT_WRITE:
+ $error = __("Error - File could not be written");
+ break;
}
# Check whether the file is gzip'ed
@@ -72,23 +85,25 @@ if ($uid):
$pkgbuild_raw = '';
$dircount = 0;
foreach ($tar->listContent() as $tar_file) {
- if (preg_match('/^[^\/]+\/PKGBUILD$/', $tar_file['filename'])) {
- $pkgbuild_raw = $tar->extractInString($tar_file['filename']);
+ if ($tar_file['typeflag'] == 0) {
+ if (strchr($tar_file['filename'], '/') === false) {
+ $error = __("Error - source tarball may not contain files outside a directory.");
+ break;
+ }
+ elseif (substr($tar_file['filename'], -9) == '/PKGBUILD') {
+ $pkgbuild_raw = $tar->extractInString($tar_file['filename']);
+ }
}
- elseif (preg_match('/^[^\/]+\/$/', $tar_file['filename'])) {
- if (++$dircount > 1) {
+ elseif ($tar_file['typeflag'] == 5) {
+ if (substr_count($tar_file['filename'], "/") > 1) {
+ $error = __("Error - source tarball may not contain nested subdirectories.");
+ break;
+ }
+ elseif (++$dircount > 1) {
$error = __("Error - source tarball may not contain more than one directory.");
break;
}
}
- elseif (preg_match('/^[^\/]+$/', $tar_file['filename'])) {
- $error = __("Error - source tarball may not contain files outside a directory.");
- break;
- }
- elseif (preg_match('/^[^\/]+\/[^\/]+\//', $tar_file['filename'])) {
- $error = __("Error - source tarball may not contain nested subdirectories.");
- break;
- }
}
if (!$error && empty($pkgbuild_raw)) {
@@ -280,7 +295,7 @@ if ($uid):
$error = __( "Could not create directory %s.", $incoming_pkgdir);
}
} else {
- $error = __( "You are not allowed to overwrite the %h%s%h package.", "<b>", $pkg_name, "</b>");
+ $error = __( "You are not allowed to overwrite the %s%s%s package.", "<b>", $pkg_name, "</b>");
}
if (!$error) {
@@ -304,13 +319,10 @@ if ($uid):
# Update the backend database
if (!$error) {
-
$dbh = db_connect();
- db_query("BEGIN", $dbh);
+ begin_atomic_commit($dbh);
- $q = "SELECT * FROM Packages WHERE Name = '" . db_escape_string($new_pkgbuild['pkgname']) . "'";
- $result = db_query($q, $dbh);
- $pdata = mysql_fetch_assoc($result);
+ $pdata = pkgdetails_by_pkgname($new_pkgbuild['pkgname'], $dbh);
if (isset($new_pkgbuild['epoch']) && (int)$new_pkgbuild['epoch'] > 0) {
$pkg_version = sprintf('%d:%s-%s', $new_pkgbuild['epoch'], $new_pkgbuild['pkgver'], $new_pkgbuild['pkgrel']);
@@ -337,46 +349,20 @@ if ($uid):
$packageID = $pdata["ID"];
# Flush out old data that will be replaced with new data
- $q = "DELETE FROM PackageDepends WHERE PackageID = " . $packageID;
- db_query($q, $dbh);
- $q = "DELETE FROM PackageSources WHERE PackageID = " . $packageID;
- db_query($q, $dbh);
+ remove_pkg_deps($packageID, $dbh);
+ remove_pkg_sources($packageID, $dbh);
# If a new category was chosen, change it to that
if ($category_id > 1) {
- $q = sprintf( "UPDATE Packages SET CategoryID = %d WHERE ID = %d",
- $category_id,
- $packageID);
-
- db_query($q, $dbh);
+ update_pkg_category($packageID, $category_id);
}
# Update package data
- $q = sprintf("UPDATE Packages SET ModifiedTS = UNIX_TIMESTAMP(), Name = '%s', Version = '%s', License = '%s', Description = '%s', URL = '%s', OutOfDateTS = NULL, MaintainerUID = %d WHERE ID = %d",
- db_escape_string($new_pkgbuild['pkgname']),
- db_escape_string($pkg_version),
- db_escape_string($new_pkgbuild['license']),
- db_escape_string($new_pkgbuild['pkgdesc']),
- db_escape_string($new_pkgbuild['url']),
- $uid,
- $packageID);
-
- db_query($q, $dbh);
-
+ update_pkgdetails($packageID, $new_pkgbuild['pkgname'], $new_pkgbuild['license'], $pkg_version, "", $new_pkgbuild['pkgdesc'], $new_pkgbuild['url'], "", $uid, $dbh);
} else {
# This is a brand new package
- $q = sprintf("INSERT INTO Packages (Name, License, Version, CategoryID, Description, URL, SubmittedTS, ModifiedTS, SubmitterUID, MaintainerUID) VALUES ('%s', '%s', '%s', %d, '%s', '%s', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), %d, %d)",
- db_escape_string($new_pkgbuild['pkgname']),
- db_escape_string($new_pkgbuild['license']),
- db_escape_string($pkg_version),
- $category_id,
- db_escape_string($new_pkgbuild['pkgdesc']),
- db_escape_string($new_pkgbuild['url']),
- $uid,
- $uid);
-
- db_query($q, $dbh);
- $packageID = mysql_insert_id($dbh);
+ new_pkgdetails($new_pkgbuild['pkgname'], $new_pkgbuild['license'], $pkg_version, $category_id, $new_pkgbuild['pkgdesc'], $new_pkgbuild['url'], $uid, $dbh);
+ $packageID = last_insert_id($dbh);
}
@@ -393,23 +379,15 @@ if ($uid):
else if ($deppkgname == "#") {
break;
}
-
- $q = sprintf("INSERT INTO PackageDepends (PackageID, DepName, DepCondition) VALUES (%d, '%s', '%s')",
- $packageID,
- db_escape_string($deppkgname),
- db_escape_string($depcondition));
-
- db_query($q, $dbh);
+ add_pkg_dep($packageID, $deppkgname, $depcondition, $dbh);
}
}
# Insert sources
- $sources = explode(" ", $new_pkgbuild['source']);
- foreach ($sources as $src) {
- if ($src != "" ) {
- $q = "INSERT INTO PackageSources (PackageID, Source) VALUES (";
- $q .= $packageID . ", '" . db_escape_string($src) . "')";
- db_query($q, $dbh);
+ if (!empty($new_pkgbuild['source'])) {
+ $sources = explode(" ", $new_pkgbuild['source']);
+ foreach ($sources as $src) {
+ add_pkg_src($packageID, $src, $dbh);
}
}
@@ -420,7 +398,7 @@ if ($uid):
}
# Entire package creation process is atomic
- db_query("COMMIT", $dbh);
+ end_atomic_commit($dbh);
header('Location: packages.php?ID=' . $packageID);
}
@@ -438,11 +416,8 @@ html_header("Submit");
<p class="pkgoutput"><?php print $error ?></p>
<?php endif; ?>
-<div class="pgbox">
- <div class="pgboxtitle">
- <span class="f3"><?php print __("Submit"); ?></span>
- </div>
- <div class="pgboxbody">
+<div class="box">
+ <h2><?php echo __("Submit"); ?></h2>
<p><?php echo __("Upload your source packages here. Create source packages with `makepkg --source`.") ?></p>
<?php
@@ -454,39 +429,36 @@ html_header("Submit");
$pkg_categories = pkgCategories();
?>
-<form action='pkgsubmit.php' method='post' enctype='multipart/form-data'>
- <div> <input type='hidden' name='pkgsubmit' value='1' />
- <input type='hidden' name='token' value='<?php print htmlspecialchars($_COOKIE['AURSID']) ?>' /> </div>
- <table border='0' cellspacing='5'>
- <tr>
- <td class='f4' align='right'><?php print __("Package Category"); ?>:</td>
- <td class='f4' align='left'>
- <select name='category'>
- <option value='1'><?php print __("Select Category"); ?></option>
+<form action="pkgsubmit.php" method="post" enctype="multipart/form-data">
+ <fieldset>
+ <div>
+ <input type="hidden" name="pkgsubmit" value="1" />
+ <input type="hidden" name="token" value="<?php print htmlspecialchars($_COOKIE['AURSID']) ?>" /> </div>
+ </div>
+ <p>
+ <label for="id_category"><?php print __("Package Category"); ?>:</label>
+ <select id="id_category" name="category">
+ <option value="1"><?php print __("Select Category"); ?></option>
<?php
foreach ($pkg_categories as $num => $cat):
- print "<option value='" . $num . "'";
+ print '<option value="' . $num . '"';
if (isset($_POST['category']) && $_POST['category'] == $cat):
- print " selected='selected'";
+ print ' selected="selected"';
endif;
- print ">" . $cat . "</option>";
+ print '>' . $cat . '</option>';
endforeach;
?>
</select>
- </td>
- </tr>
- <tr>
- <td class='f4' align='right'><?php print __("Upload package file"); ?>:</td>
- <td class='f4' align='left'>
- <input type='file' name='pfile' size='30' />
- </td>
- </tr>
- <tr>
- <td align='left'>
- <input class='button' type='submit' value='<?php print __("Upload"); ?>' />
- </td>
- </tr>
- </table>
+ </p>
+ <p>
+ <label for="id_file"><?php print __("Upload package file"); ?>:</label>
+ <input id="id_file" type="file" name="pfile" size='30' />
+ </p>
+ <p>
+ <label></label>
+ <input class="button" type="submit" value="<?php print __("Upload"); ?>" />
+ </p>
+ </fieldset>
</form>
<?php
@@ -511,7 +483,6 @@ else:
endif;
?>
- </div>
</div>
<?php
diff --git a/web/html/rpc.php b/web/html/rpc.php
index ee7cda3..415dcb8 100644
--- a/web/html/rpc.php
+++ b/web/html/rpc.php
@@ -18,7 +18,7 @@ else {
// here.
?>
<html><body>
-<p>The methods currently allowed are:</p>
+<h2>Allowed methods</h2>
<ul>
<li><tt>search</tt></li>
<li><tt>info</tt></li>
@@ -29,7 +29,14 @@ else {
<pre>type=<em>methodname</em>&amp;arg=<em>data</em></pre>
<p>Where <em>methodname</em> is the name of an allowed method, and <em>data</em> is the argument to the call.</p>
<p>If you need jsonp type callback specification, you can provide an additional variable <em>callback</em>.</p>
-<p>Example URL: <tt>http://aur-url/rpc.php?type=search&amp;arg=foobar&amp;callback=jsonp1192244621103</tt></p>
+<h2>Examples</h2>
+<dl>
+ <dt><tt>search</tt></dt><dd><tt>http://aur-url/rpc.php?type=search&amp;arg=foobar</tt></li></dd>
+ <dt><tt>info</tt></dt><dd><tt>http://aur-url/rpc.php?type=info&amp;arg=foobar</tt></dd>
+ <dt><tt>multiinfo</tt></dt><dd><tt>http://aur-url/rpc.php?type=multiinfo&amp;arg[]=foo&amp;arg[]=bar</tt></dd>
+ <dt><tt>msearch</tt></dt><dd><tt>http://aur-url/rpc.php?type=msearch&amp;arg=john</tt></li></dd>
+ <dt>Callback</dt><dd><tt>http://aur-url/rpc.php?type=search&amp;arg=foobar&amp;callback=jsonp1192244621103</tt></dd>
+</dl>
</body></html>
<?php
// close if statement
diff --git a/web/html/rss.php b/web/html/rss.php
index c7de4c6..6f057bf 100644
--- a/web/html/rss.php
+++ b/web/html/rss.php
@@ -37,13 +37,9 @@ $image->description = "AUR Newest Packages Feed";
$rss->image = $image;
#Get the latest packages and add items for them
-$dbh = db_connect();
-$q = "SELECT * FROM Packages ";
-$q.= "ORDER BY SubmittedTS DESC ";
-$q.= "LIMIT 20";
-$result = db_query($q, $dbh);
+$packages = latest_pkgs(20);
-while ($row = mysql_fetch_assoc($result)) {
+while (list($indx, $row) = each($packages)) {
$item = new FeedItem();
$item->title = $row["Name"];
$item->link = "{$protocol}://{$host}/packages.php?ID={$row["ID"]}";
diff --git a/web/html/tu.php b/web/html/tu.php
index 59cac1a..8619903 100644
--- a/web/html/tu.php
+++ b/web/html/tu.php
@@ -5,7 +5,10 @@ set_include_path(get_include_path() . PATH_SEPARATOR . '../lib');
include_once("aur.inc.php");
set_lang();
check_sid();
-html_header();
+
+$title = __("Trusted User");
+
+html_header($title);
# Default votes per page
$pp = 10;
@@ -16,49 +19,22 @@ if (isset($_COOKIE["AURSID"])) {
$atype = account_from_sid($_COOKIE["AURSID"]);
}
-if ($atype == "Trusted User" OR $atype == "Developer") {
+if ($atype == "Trusted User" || $atype == "Developer") {
if (isset($_GET['id'])) {
if (is_numeric($_GET['id'])) {
-
- $q = "SELECT * FROM TU_VoteInfo ";
- $q.= "WHERE ID = " . $_GET['id'];
-
- $dbh = db_connect();
- $results = db_query($q, $dbh);
- $row = mysql_fetch_assoc($results);
+ $row = vote_details($_GET['id']);
if (empty($row)) {
print __("Could not retrieve proposal details.");
} else {
$isrunning = $row['End'] > time() ? 1 : 0;
- $qvoted = "SELECT * FROM TU_Votes WHERE ";
- $qvoted.= "VoteID = " . $row['ID'] . " AND ";
- $qvoted.= "UserID = " . uid_from_sid($_COOKIE["AURSID"]);
- $result = db_query($qvoted, $dbh);
- if ($result) {
- $hasvoted = mysql_num_rows($result);
- }
- else {
- $hasvoted = 0;
- }
-
# List voters of a proposal.
- $qwhoVoted = "SELECT tv.UserID,U.Username
- FROM TU_Votes tv, Users U
- WHERE tv.VoteID = {$row['ID']}
- AND tv.UserID = U.ID
- ORDER BY Username";
- $result = db_query($qwhoVoted,$dbh);
- if (mysql_num_rows($result) > 0) {
- $whovoted = '';
- while ($who = mysql_fetch_assoc($result)) {
- $whovoted.= '<a href="account.php?Action=AccountInfo&amp;ID='.$who['UserID'].'">'.$who['Username'].'</a> ';
- }
- }
+ $whovoted = voter_list($row['ID']);
$canvote = 1;
+ $hasvoted = 0;
$errorvote = "";
if ($isrunning == 0) {
$canvote = 0;
@@ -66,8 +42,9 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
} else if ($row['User'] == username_from_sid($_COOKIE["AURSID"])) {
$canvote = 0;
$errorvote = __("You cannot vote in an proposal about you.");
- } else if ($hasvoted != 0) {
+ } else if (tu_voted($row['ID'], uid_from_sid($_COOKIE["AURSID"]))) {
$canvote = 0;
+ $hasvoted = 1;
$errorvote = __("You've already voted for this proposal.");
}
@@ -81,25 +58,18 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
$myvote = "Abstain";
}
- $qvote = "UPDATE TU_VoteInfo SET " . $myvote . " = " . ($row[$myvote] + 1) . " WHERE ID = " . $row['ID'];
- db_query($qvote, $dbh);
- $qvote = "INSERT INTO TU_Votes (VoteID, UserID) VALUES (" . $row['ID'] . ", " . uid_from_sid($_COOKIE["AURSID"]) . ")";
- db_query($qvote, $dbh);
+ cast_proposal_vote($row['ID'], uid_from_sid($_COOKIE["AURSID"]), $myvote, $row[$myvote] + 1);
# Can't vote anymore
#
$canvote = 0;
$errorvote = __("You've already voted for this proposal.");
- # Update if they voted
- $result = db_query($qvoted, $dbh);
- if ($result) {
- $hasvoted = mysql_num_rows($result);
- }
- $results = db_query($q, $dbh);
- if ($results) {
- $row = mysql_fetch_assoc($results);
+ # Update if they voted
+ if (tu_voted($row['ID'], uid_from_sid($_COOKIE["AURSID"]))) {
+ $hasvoted = 1;
}
+ $row = vote_details($_GET['id']);
}
}
include("tu_details.php");
@@ -109,8 +79,6 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
}
} else {
- $dbh = db_connect();
-
$limit = $pp;
if (isset($_GET['off']))
$offset = $_GET['off'];
@@ -120,7 +88,7 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
else
$by = 'desc';
- if (!empty($offset) AND is_numeric($offset)) {
+ if (!empty($offset) && is_numeric($offset)) {
if ($offset >= 1) {
$off = $offset;
} else {
@@ -134,34 +102,33 @@ if ($atype == "Trusted User" OR $atype == "Developer") {
$lim = ($limit > 0) ? " LIMIT $limit OFFSET $off" : "";
$by_next = ($by == 'desc') ? 'asc' : 'desc';
- $q = "SELECT * FROM TU_VoteInfo WHERE End > " . time() . " ORDER BY Submitted " . $order;
- $result = db_query($q, $dbh);
-
+ $result = current_proposal_list($order);
$type = __("Current Votes");
include("tu_list.php");
?>
<?php
- $q = "SELECT * FROM TU_VoteInfo WHERE End < " . time() . " ORDER BY Submitted " . $order . $lim;
- $result = db_query($q, $dbh);
+ $result = past_proposal_list($order, $lim);
$type = __("Past Votes");
include("tu_list.php");
- $qnext = "SELECT ID FROM TU_VoteInfo";
- $nextresult = db_query($qnext, $dbh);
+ $nextresult = proposal_count();
?>
-<div class="pgbox">
-<p><a href='addvote.php'><?php print __("Add Proposal") ?></a></p>
-
- <?php if (mysql_num_rows($result)) { $by = htmlentities($by, ENT_QUOTES); ?>
- <?php if ($off != 0) { $back = (($off - $limit) <= 0) ? 0 : $off - $limit; ?>
- <a href='tu.php?off=<?php print $back ?>&amp;by=<?php print $by ?>'><?php print __("Back") ?></a>
- <?php } ?>
- <?php if (($off + $limit) < mysql_num_rows($nextresult)) { $forw = $off + $limit; ?>
- <a href='tu.php?off=<?php print $forw ?>&amp;by=<?php print $by ?>'><?php print __("Next") ?></a>
- <?php } ?>
- <?php } ?>
+<div class="box">
+ <p><a href="addvote.php"><?php print __("Add Proposal") ?></a></p>
+
+ <?php if ($result):
+ $by = htmlentities($by, ENT_QUOTES); ?>
+ <?php if ($off != 0):
+ $back = (($off - $limit) <= 0) ? 0 : $off - $limit; ?>
+ <a href='tu.php?off=<?php print $back ?>&amp;by=<?php print $by ?>'><?php print __("Back") ?></a>
+ <?php endif; ?>
+ <?php if (($off + $limit) < $nextresult):
+ $forw = $off + $limit; ?>
+ <a href="tu.php?off=<?php print $forw ?>&amp;by=<?php print $by ?>"><?php print __("Next") ?></a>
+ <?php endif; ?>
+ <?php endif; ?>
</div>
<?php
}
diff --git a/web/html/voters.php b/web/html/voters.php
index 02abe29..231e323 100644
--- a/web/html/voters.php
+++ b/web/html/voters.php
@@ -3,38 +3,29 @@ set_include_path(get_include_path() . PATH_SEPARATOR . '../lib');
include('aur.inc.php');
include('pkgfuncs.inc.php');
-function getvotes($pkgid) {
- $dbh = db_connect();
- $pkgid = db_escape_string($pkgid);
-
- $result = db_query("SELECT UsersID,Username FROM PackageVotes LEFT JOIN Users on (UsersID = ID) WHERE PackageID = $pkgid ORDER BY Username", $dbh);
- return $result;
-}
-
$SID = $_COOKIE['AURSID'];
$pkgid = intval($_GET['ID']);
$votes = getvotes($pkgid);
-$account = account_from_sid($SID);
+$atype = account_from_sid($SID);
-if ($account == 'Trusted User' || $account == 'Developer') {
-?>
-<html>
-<body>
-<h3><?php echo account_from_sid($SID) ?></h3>
-<h2>Votes for <a href="packages.php?ID=<?php echo $pkgid ?>"><?php echo pkgname_from_id($pkgid) ?></a></h2>
-<?php
- while ($row = mysql_fetch_assoc($votes)) {
- $uid = $row['UsersID'];
- $username = $row['Username'];
+html_header(__("Voters"));
+
+if ($atype == 'Trusted User' || $atype== 'Developer'):
?>
-<a href="account.php?Action=AccountInfo&amp;ID=<?php echo $uid ?>">
-<?php echo htmlspecialchars($username) ?></a><br />
+
+<div class="box">
+ <h2>Votes for <a href="packages.php?ID=<?php echo $pkgid ?>"><?php echo pkgname_from_id($pkgid) ?></a></h2>
+ <div class="boxbody">
+
<?php
- }
-?>
-</body>
-</html>
+ while (list($indx, $row) = each($votes)): ?>
+ <a href="account.php?Action=AccountInfo&amp;ID=<?php echo $row['UsersID'] ?>"><?php echo htmlspecialchars($row['Username']) ?></a><br />
+ <?php endwhile; ?>
+ </div>
+</div>
+
<?php
-}
+endif;
+html_footer(AUR_VERSION);