Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • osian/sucs-site
  • kais58/sucs-site
  • imranh/sucs-site
  • foshjedi2004/sucs-site
  • gigosaurus/sucs-site
  • matstn/sucs-site
  • ripp_/sucs-site
  • eggnog/sucs-site
  • sucssite/sucs-site
  • elbows/sucs-site
  • realitykiller/sucs-site
  • crox/sucs-site
  • vectre/sucs-site
  • welshbyte/sucs-site
  • paperclipman/sucs-site
15 results
Show changes
Showing
with 3738 additions and 1327 deletions
...@@ -5,81 +5,81 @@ ...@@ -5,81 +5,81 @@
$permission = "html"; $permission = "html";
// Get the right filename... // Get the right filename...
$myfile = SUCS_BASEDIR."static".$path.$language['file'].".txt"; $myfile = $base . "static" . $path . $language['file'] . ".txt";
$secondaryfile = SUCS_BASEDIR."static".$path.$language['file']."-secondary.txt"; $secondaryfile = $base . "static" . $path . $language['file'] . "-secondary.txt";
if (!file_exists($myfile)) { if (!file_exists($myfile)) {
$myfile = SUCS_BASEDIR."static$path.txt"; $myfile = $base . "static$path.txt";
$secondaryfile = SUCS_BASEDIR."static$path-secondary.txt"; $secondaryfile = $base . "static$path-secondary.txt";
// If the file doesn't exist... // If the file doesn't exist...
if (!file_exists($myfile)) { if (!file_exists($myfile)) {
if (isset($session->groups[$permission]) && @$_REQUEST['action']=="create") { if (isset($session->groups[$permission]) && @$_REQUEST['action'] == "create") {
// ...and we have permission and have been asked to, create it // ...and we have permission and have been asked to, create it
$body = "foo"; $body = "foo";
} else { } else {
$redirect_path = $DB->GetOne("SELECT to_uri FROM redirect where from_uri=?", array("/".$pathlist[1])); $redirect_path = $DB->GetOne("SELECT to_uri FROM redirect where from_uri=?", array("/" . $pathlist[1]));
if (isset($_SERVER['HTTPS'])) $proto = "https://"; if (isset($_SERVER['HTTPS'])) $proto = "https://";
else $proto = "http://"; else $proto = "http://";
if ($redirect_path!="") { if ($redirect_path != "") {
$variables = ""; $variables = "";
for ($i=2;$i<count($pathlist);$i++) { for ($i = 2; $i < count($pathlist); $i++) {
$variables .= "/".$pathlist[$i]; $variables .= "/" . $pathlist[$i];
} }
$redirect_uri = $proto.$_SERVER['SERVER_NAME'].$redirect_path.$variables; $redirect_uri = $proto . $_SERVER['SERVER_NAME'] . $redirect_path . $variables;
if ($_SERVER['QUERY_STRING']!="") $redirect_uri.="?".$_SERVER['QUERY_STRING']; if ($_SERVER['QUERY_STRING'] != "") $redirect_uri .= "?" . $_SERVER['QUERY_STRING'];
header("HTTP/1.1 301 Moved Permanently"); header("HTTP/1.1 301 Moved Permanently");
header("Location: ".$redirect_uri); header("Location: " . $redirect_uri);
} else { } else {
// ...serve a 404 error // ...serve a 404 error
header("HTTP/1.1 404 Not Found"); header("HTTP/1.1 404 Not Found");
$body = @file_get_contents(SUCS_BASEDIR."static/404.txt"); $body = @file_get_contents($base . "static/404.txt");
$smarty->assign("pathlist", array("", "Error")); $smarty->assign("pathlist", array("", "Error"));
$title = "File not found"; $title = "File not found";
$smarty->assign("title", $title); $smarty->assign("title", $title);
$smarty->assign("body", $body); $smarty->assign("body", $body);
// Give those with permission the chance to create the page // Give those with permission the chance to create the page
if (isset($session->groups[$permission])) $smarty->assign("creatable", TRUE); if (isset($session->groups[$permission])) $smarty->assign("creatable", TRUE);
} }
return; return;
} }
} }
} }
// If we've got edit permission... // If we've got edit permission...
if (isset($session->groups[$permission])) { if (isset($session->groups[$permission])) {
switch (@$_REQUEST['action']) { switch (@$_REQUEST['action']) {
case "Save": case "Save":
// ...save the file // ...save the file
$savesuccess = @file_put_contents($myfile, $_REQUEST['body'], LOCK_EX); $savesuccess = @file_put_contents($myfile, $_REQUEST['body'], LOCK_EX);
if (!$savesuccess) trigger_error("Write failed", E_USER_ERROR); if (!$savesuccess) trigger_error("Write failed", E_USER_ERROR);
$id = $DB->GetOne("select id from static where path=?", array($path)); $id = $DB->GetOne("select id from static where path=?", array($path));
$record = array(); $record = array();
$record['summary'] = $_REQUEST['summary']; $record['summary'] = $_REQUEST['summary'];
$record['editor'] = $session->username; $record['editor'] = $session->username;
$record['path'] = $path; $record['path'] = $path;
if ($id>0) { if ($id > 0) {
$DB->AutoExecute("static", $record, 'UPDATE', "id = '".$id."'"); $DB->AutoExecute("static", $record, 'UPDATE', "id = '" . $id . "'");
} else { } else {
$DB->AutoExecute("static", $record, 'INSERT'); $DB->AutoExecute("static", $record, 'INSERT');
} }
// probably need some error-handling here... // probably need some error-handling here...
break; break;
case "Delete": case "Delete":
$deleted = unlink($myfile); $deleted = unlink($myfile);
break; break;
} }
} }
$title = end($pathlist); $title = end($pathlist);
if (file_exists($myfile)) { if (file_exists($myfile)) {
$body = file_get_contents($myfile); $body = file_get_contents($myfile);
$modified = date("r", filectime($myfile)); $modified = date("r", filectime($myfile));
$modifiedby = $DB->GetOne("select editor from static where path=?", array($path)); $modifiedby = $DB->GetOne("select editor from static where path=?", array($path));
} }
if (file_exists($secondaryfile)) { if (file_exists($secondaryfile)) {
$secondary = file_get_contents($secondaryfile); $secondary = file_get_contents($secondaryfile);
$smarty->assign("secondary", $secondary); $smarty->assign("secondary", $secondary);
} }
// include a widget for leaving feedback on this page if the user is logged in // include a widget for leaving feedback on this page if the user is logged in
...@@ -92,27 +92,27 @@ $smarty->assign("title", str_replace("_", " ", $title)); ...@@ -92,27 +92,27 @@ $smarty->assign("title", str_replace("_", " ", $title));
// Editing static pages - does the user have permission? // Editing static pages - does the user have permission?
if (isset($session->groups[$permission])) { if (isset($session->groups[$permission])) {
// display Edit link on page // display Edit link on page
$smarty->assign("editable", TRUE); $smarty->assign("editable", TRUE);
switch (@$_REQUEST['action']) { switch (@$_REQUEST['action']) {
// load the editing template // load the editing template
case "create": case "create":
if (!file_exists($myfile)) file_put_contents($myfile, "Page under construction\n", LOCK_EX); if (!file_exists($myfile)) file_put_contents($myfile, "Page under construction\n", LOCK_EX);
case "edit": case "edit":
$smarty->assign("editcontent", $body); $smarty->assign("editcontent", $body);
$record['summary'] = $DB->GetOne("select summary from static where path=?", array($path)); $record['summary'] = $DB->GetOne("select summary from static where path=?", array($path));
$smarty->assign("record", $record); $smarty->assign("record", $record);
$smarty->assign("action", "edit"); $smarty->assign("action", "edit");
$modified = NULL; $modified = NULL;
$body = $smarty->fetch('static_edit.tpl'); $body = $smarty->fetch('static_edit.tpl');
break; break;
case "delete-query": case "delete-query":
$body = $smarty->fetch('static_delete.tpl').$body; $body = $smarty->fetch('static_delete.tpl') . $body;
break; break;
case "Delete": case "Delete":
if ($deleted) $body = "File deleted"; if ($deleted) $body = "File deleted";
break; break;
} }
} }
$smarty->assign("body", $body); $smarty->assign("body", $body);
......
<?PHP <?php
/***
* SU Signup admin
* Allows us to search the SU api for a given student number and checks if they're a SUCS member.
* If they are - allows account renewal
* If not - allows signup to be bootstrapped as per susignup component
***/
// gib errars plox
//error_reporting(E_ALL);
//ini_set('display_errors', 1);
// include functions and shit we need
include("../lib/member_functions.php"); include("../lib/member_functions.php");
include("../lib/date.php"); include("../lib/date.php");
include("../suapi.inc.php"); include("../lib/suapiv2.php");
//Restrict access to staff. //Restrict access to staff.
$permission="sucsstaff"; $permission = "sucsstaff";
$apibaseurl="https://$suapi_user:$suapi_pass@su-api.sucs.org/memberships/Membership.asmx";
// if they have the right privs then lets do shit
if (isset($session->groups[$permission])) { if (isset($session->groups[$permission])) {
//Setup smarty magic, step 1 //Setup smarty magic, step 1
$smarty->assign("staff", TRUE); $smarty->assign("staff", TRUE);
if(!isset($_REQUEST['mode'])) { // if no mode has been requested then show options
$mode = 'menu'; if (!isset($_REQUEST['mode'])) {
} else { $mode = 'menu';
$mode = urldecode($_REQUEST['mode']); } else {
} $mode = urldecode($_REQUEST['mode']);
}
if ($mode == 'search') {
if (empty($_REQUEST['sid']) || empty($_REQUEST['snsubmit'])) { // We have a mode, lets try and work out wtf they want to do
$mode = 'error';
$smarty->assign("error_text", "Invalid search request"); // they have typed in a sid and want to bootstrap the signup processs
}else{ if ($mode == 'search') {
$pres=preg_match("/^[0-9]{6}$/",$_REQUEST['sid'],$sid); if (empty($_REQUEST['sid']) || empty($_REQUEST['snsubmit'])) {
if ($pres!=1) { $mode = 'error';
$mode = 'error'; $smarty->assign("error_text", "Invalid search request");
$smarty->assign("error_text", "Search term doesn't look like a valid student ID"); } else {
} else { $pres = preg_match("/^[0-9]{6}$/", $_REQUEST['sid'], $sid);
$url = "$apibaseurl/IsPersonMember?strCriteria=".$sid[0]."&GroupingId=6613"; if ($pres != 1) {
$apiReq = curl_init(); $mode = 'error';
curl_setopt($apiReq, CURLOPT_URL, $url); $smarty->assign("error_text", "Search term doesn't look like a valid student ID");
curl_setopt($apiReq, CURLOPT_RETURNTRANSFER, TRUE); } else {
// they have given us a valid sid lets check to see if they have paid
$apiResult = curl_exec($apiReq); $sid = $_REQUEST['sid'];
if ($apiResult === FALSE) {
$mode = 'error'; // make sure the user/admin/exec isn't an idiot
$smarty->assign("error_text", "An error occurred communicating with the SUSU API."); // check if they are already signed up and tell them so
}else { $tmpresult = $sucsDB->Execute("SELECT * FROM members WHERE sid=?", array($_REQUEST['sid']));
// Ostensibly we now have a valid search result from the SU - go to work if ($tmpresult->fields["sid"] == $sid && $tmpresult->fields["paid"] == paidUntil(time())) {
libxml_use_internal_errors(true); // let them know they are already signed up and renewed
$xml=simplexml_load_string($apiResult); $mode = 'error';
if (!$xml||isset($xml->head->title)) { message_flash("You are a numpty and have already signed up and paid for this year.");
$mode='error'; // else if check to see if they have signedup and paid for the new year but haven't renewed
$smarty->assign("error_text", "An error occurred communicating with the SUSU API"); } else if ($tmpresult->fields["sid"] == $sid && $tmpresult->fields["paid"] != paidUntil(time())) {
} else { // renew them!
$ismember = $xml[0]; $mode = 'error';
if ($ismember=="true") { renew_membership($tmpresult->fields["username"]);
//Yay, we have a student who has paid and needs to be signed up. // let them know that their account has been renewed
//Check they don't have a signup slip already message_flash("Your SUCS account has been renewed.");
$query = "SELECT transactionid, signupid FROM transactions WHERE cardNumber = ?;"; } else {
$qres = $sucsDB->Execute($query, $sid); if (check_su_sid($_REQUEST['sid'])) {
// lets make them a signup slip
if ($qres->RecordCount()==0) { $pass = make_password();
// No transaction, but might have unused signup slip. If so, retrieve values. $query = "INSERT INTO signup (password,sid,issuedby) VALUES ( ?, ?, ?) RETURNING id";
$query = "SELECT id, username, password FROM signup WHERE sid=?;"; $attribs[] = $pass;
$qres = $sucsDB->Execute($query, array($sid[0])); $attribs[] = $_REQUEST['sid'];
if ($qres && $qres->RecordCount() > 0) { $attribs[] = '99999'; //SUCS Magic internal use UID
if ($qres->RecordCount() > 1) {
$mode='error'; $id = $sucsDB->Execute($query, $attribs);
$smarty->assign("error_text", "Student has multiple signup slips in the DB. Bork! Bork! Bork!"); $id = $id->fields['id'];
} else if (!empty($qres->fields['username'])) { if (!$id) {
$mode='error'; $mode = "error";
$smarty->assign("error_text", "Student hasn't tried to use the SU signup component (No transaction in DB), but has a previously used Signup Slip with username ".$qres->fields['username'].".<br />Is this a renewal? If not, ask an admin to generate a new signup slip for this student"); $smarty->assign("error_text", "An error occurred generating a signup ID. Report the following message to the admins:<br /><pre>" . $sucsDB->ErrorMsg() . "</pre>");
//TODO: Add option to generate new signup slip? } else {
} else { $smarty->assign('slipid', $id);
$id = $qres->fields['id']; $smarty->assign('slippass', $pass);
$pass = $qres->fields['password']; $smarty->assign('sid', $_REQUEST['sid']);
} }
} else { } else {
$pass = make_password(); $mode = 'error';
$query = "INSERT INTO signup (password,sid,issuedby) VALUES ( ?, ?, ?) RETURNING id"; $smarty->assign("error_text", "Student does not appear to have paid. Extract fees");
$attribs[]=$pass; }
$attribs[]=$sid[0]; }
$attribs[]='99999'; //SUCS Magic internal use UID }
}
$id = $sucsDB->Execute($query,$attribs); // mass renewals page
$id = $id->fields['id']; } else if ($mode == 'renewals') {
if (!$id) {
$mode="error"; $matches = array();
$smarty->assign("error_text", "An error occurred generating a signup ID. Report the following message to the admins:<br /><pre>".$sucsDB->ErrorMsg()."</pre>"); $others = 0;
} else { $paidup = 0;
$smarty->assign('slipid', $id); foreach ($just_members as $sumem) {
$smarty->assign('slippass', $pass); $sucsmem = get_sucs_record($sumem['card_number']);
$smarty->assign('sid', $sid[0]); if ($sucsmem && $sucsmem['paid'] != paidUntil(time()) && $sucsmem['type'] == 1) {
} $matches[] = array($sumem['purchaser'], $sucsmem['realname'], $sumem['card_number'], $sucsmem['username'], $sucsmem['paid']);
} } else if ($sucsmem && $sucsmem['paid'] == paidUntil(time())) {
} else { $others++;
//Retrieve existing slip $paidup++;
$id = $qres->fields['signupid']; } else {
$tid = $qres->fields['transactionid']; $others++;
if (empty($id)) { }
$pass = make_password(); }
$query = "INSERT INTO signup (password,sid,issuedby) VALUES ( ?, ?, ?) RETURNING id"; $smarty->assign("matches", $matches);
$attribs[]=$pass; $smarty->assign("others", $others);
$attribs[]=$sid[0]; $smarty->assign("paidup", $paidup);
$attribs[]='99999'; //SUCS Magic internal use UID $smarty->assign("pending", $others - $paidup);
} else if ($mode == 'renewals2') {
$qres = $sucsDB->Execute($query,$attribs); $failures = array();
if (!$qres) { $successes = array();
$mode="error";
$smarty->assign("error_text", "An error occurred generating a signup ID. Report the following message to the admins:<br /><pre>".$sucsDB->ErrorMsg()."</pre>"); if (empty($_REQUEST['renew'])) {
} else { $mode = 'error';
$id = $qres->fields['id']; $smarty->assign("error_text", "Can't renew an empty list!");
$query = "UPDATE transactions SET signupid=? WHERE transactionid=?;"; } else {
$qres = $sucsDB->Execute($query, array($id, $tid)); foreach ($_REQUEST['renew'] as $user) {
$smarty->assign('slipid', $id); if (admin_renew_member($user, $session->username)) {
$smarty->assign('slippass', $pass); $successes[] = $user;
$smarty->assign('sid', $sid[0]); } else {
} $failures[] = $user;
}
}else { }
$query = "SELECT username, password FROM signup WHERE id=?;"; $smarty->assign("attempt", count($_REQUEST['renew']));
$qres = $sucsDB->Execute($query, array($id)); $smarty->assign("failures", count($failures));
if (!$qres) { $smarty->assign("failusers", $failures);
$mode="error"; $smarty->assign("successes", count($successes));
$smarty->assign("error_text", "The user appears to have generated a signup ID using the SU Signup system (Slip ID: ".$id."), but the password for that slip can't be retrieved.<br />Request assistance."); }
} else if ($qres->fields['username'] !== NULL) { } else if ($mode == 'list') {
$mode="error"; $matches = array();
$smarty->assign("error_text", "This user appears to have completed signup, with username <strong>".$qres->fields['username']."</strong><br />Check that this user exists, and offer to reset their password if necessary."); foreach ($just_members as $sumem) {
} $sucsmem = get_sucs_record($sumem['card_number']);
$pass = $qres->fields['password']; if ($sucsmem) {
$smarty->assign('slipid', $id); $matches[] = array($sumem['purchaser'], $sucsmem['realname'], $sumem['card_number'], $sucsmem['username'], $sucsmem['paid']);
$smarty->assign('slippass', $pass); } else {
$smarty->assign('sid', $sid[0]); $matches[] = array($sumem['purchaser'], "N/A", $sumem['card_number'], "N/A", "Not signed up");
} }
} }
function sortbypaid($a, $b)
if(!$mode=='error') { {
//Right, this should be the point where we hand off to signup //Lets us array sort by final column ('Paid')
$smarty->assign('slipid', $id); return ($a[4] < $b[4]) ? -1 : 1;
$smarty->assign('slippass', $pass); }
$smarty->assign('sid', $sid[0]);
} usort($matches, 'sortbypaid');
$smarty->assign("matches", $matches);
}else{ }
$mode='error'; $smarty->assign('renewables', get_renewable_members());
$smarty->assign("error_text", "Student does not appear to have paid. Extract fees");
}
}
}
}
}
} else if ($mode=="renew") {
if (empty($_REQUEST['member'])){
$mode='error';
$smarty->assign('error_text',"Can't renew a member without knowing their username!");
} else if (!isset($_REQUEST['renewconf'])) {
//Should be trying to renew $_REQUEST['member']
$username=urldecode($_REQUEST['member']);
$q = "SELECT username, typename, sid, paid, email FROM members, member_type WHERE username=?";
$res = $sucsDB->Execute($q,array($username));
if (!$res) {
$mode='error';
$smarty->assign('error_text', "A database error occurred while trying to retrieve member details");
} else if ($res->fields['paid'] == paidUntil(time())) {
$mode='error';
$smarty->assign('error_text', 'User appears to have been renewed already?');
} else {
$smarty->assign('renew_user', $username);
$smarty->assign('renew_paid', $res->fields['paid']);
$smarty->assign('renew_type', $res->fields['typename']);
$url = "$apibaseurl/IsPersonMember?strCriteria=".$res->fields['sid']."&GroupingId=6613";
$apiReq = curl_init();
curl_setopt($apiReq, CURLOPT_URL, $url);
curl_setopt($apiReq, CURLOPT_RETURNTRANSFER, TRUE);
$apiResult = curl_exec($apiReq);
libxml_use_internal_errors(true);
$xml=simplexml_load_string($apiResult);
if (!$xml || isset($xml->head->title)) {
$mode='error';
$smarty->assign("error_text", "An error occurred communicating with the SUSU API.");
} else {
$ismember = $xml[0];
$user = posix_getpwnam($session->username);
if ($ismember!="true") {
$mode='error';
$smarty->assign('error_text', 'Member does not appear to have paid via the SU system. Use the old renewals system if they have paid using some other method');;
} else {
if (renew_member($username, $user['uid'], $user['name'])) {
message_flash("Successfully renewed");
$mode='menu';
} else {
$mode='error';
$smarty->assign('error_text', 'An error occurred renewing account '.$username);
}
}
}
}
}
} else if ($mode == 'renewals') {
//Get list of members according to the SU
$url = "$apibaseurl/GetMemberListData?GroupingId=6613";
$apiReq = curl_init();
curl_setopt($apiReq, CURLOPT_URL, $url);
curl_setopt($apiReq, CURLOPT_RETURNTRANSFER, TRUE);
$apiResult = curl_exec($apiReq);
$sumembers = su_response_decode($apiResult);
if (!$sumembers) {
$mode ='error';
$smarty->assign("error_text", "An error occurred communicating with the SUSU API.");
} else {
$matches = array();
$others=0;
$paidup=0;
foreach ($sumembers as $sumem) {
$sucsmem = get_sucs_record($sumem['uni_card_number']);
if ($sucsmem && $sucsmem['paid'] != paidUntil(time()) && $sucsmem['type']==1) {
$matches[]=array($sumem['firstName']." ".$sumem['lastName'], $sucsmem['realname'], $sumem['uni_card_number'], $sucsmem['username'], $sucsmem['paid']);
} else if ($sucsmem && $sucsmem['paid'] == paidUntil(time())) {
$others++;
$paidup++;
} else {
$others++;
}
}
$smarty->assign("matches", $matches);
$smarty->assign("others", $others);
$smarty->assign("paidup", $paidup);
$smarty->assign("pending", $others - $paidup);
}
} else if ($mode == 'renewals2') {
$failures = array();
$successes = array();
if (empty($_REQUEST['renew'])) {
$mode='error';
$smarty->assign("error_text", "Can't renew an empty list!");
} else {
foreach($_REQUEST['renew'] as $user) {
$admin_user=posix_getpwnam($session->username);
if (renew_member($user, $admin_user['uid'], $admin_user['name'])) {
$successes[]=$user;
} else {
$failures[]=$user;
}
}
$smarty->assign("attempt", count($_REQUEST['renew']));
$smarty->assign("failures", count($failures));
$smarty->assign("failusers", $failures);
$smarty->assign("successes", count($successes));
}
} else if ($mode == 'list') {
//Get list of members according to the SU
$url="$apibaseurl/GetMemberListData?GroupingId=6613";
$apiReq = curl_init();
curl_setopt($apiReq, CURLOPT_URL, $url);
curl_setopt($apiReq, CURLOPT_RETURNTRANSFER, TRUE);
$apiResult = curl_exec($apiReq);
$sumembers = su_response_decode($apiResult);
if (!$sumembers) {
$mode='error';
$smarty->assign("error_text", "An error occurred communicating with the SUSU API.");
} else {
$matches = array();
foreach ($sumembers as $sumem) {
$sucsmem = get_sucs_record($sumem['uni_card_number']);
if ($sucsmem) {
$matches[]=array($sumem['firstName']." ".$sumem['lastName'], $sucsmem['realname'], $sumem['uni_card_number'], $sucsmem['username'], $sucsmem['paid']);
} else {
$matches[]=array($sumem['firstName']." ".$sumem['lastName'], "N/A", $sumem['uni_card_number'], "N/A", "Not signed up");
}
}
function sortbypaid($a, $b) {
//Lets us array sort by final column ('Paid')
return ($a[4] < $b[4]) ? -1 : 1;
}
usort($matches, 'sortbypaid');
$smarty->assign("matches", $matches);
}
}
$smarty->assign('renewables', get_renewable_members());
} }
...@@ -294,73 +150,46 @@ $body = $smarty->fetch("susignup-admin.tpl"); ...@@ -294,73 +150,46 @@ $body = $smarty->fetch("susignup-admin.tpl");
$smarty->assign('body', $body); $smarty->assign('body', $body);
$smarty->assign("extra_styles", array("$baseurl/css/susignup-admin.css")); $smarty->assign("extra_styles", array("$baseurl/css/susignup-admin.css"));
function su_response_decode($text) { function get_sucs_record($sid)
global $smarty; {
libxml_use_internal_errors(true); global $sucsDB;
$xml=simplexml_load_string($text);
if (!$xml || isset($xml->head->title)) {
return false;
} else {
return json_decode($xml[0],TRUE);
}
}
function get_sucs_record($sid) { $query = "SELECT * FROM members WHERE sid=?;";
global $sucsDB; $res = $sucsDB->Execute($query, array($sid));
if (!$res || $res->RecordCount() <> 1) {
$query = "SELECT * FROM members WHERE sid=?;"; return FALSE;
$res = $sucsDB->Execute($query, array($sid)); }
if (!$res || $res->RecordCount()<>1) { return $res->FetchRow();
return FALSE;
}
return $res->FetchRow();
} }
function get_renewable_members() { function get_renewable_members()
global $sucsDB; {
$q = "SELECT username, username||' ('||realname||')' AS display FROM members, member_type WHERE paid != ? AND type=1 AND type=member_type.id ORDER BY paid;"; global $sucsDB;
$r = $sucsDB->Execute($q, array(paidUntil(time()))); $q = "SELECT username, username||' ('||realname||')' AS display FROM members, member_type WHERE paid != ? AND type=1 AND type=member_type.id ORDER BY paid;";
if(!$r) { $r = $sucsDB->Execute($q, array(paidUntil(time())));
return FALSE; if (!$r) {
} return FALSE;
$retvals = array(); }
while ($rec=$r->FetchRow()) { $retvals = array();
$retvals[$rec['username']]=$rec['display']; while ($rec = $r->FetchRow()) {
} $retvals[$rec['username']] = $rec['display'];
return $retvals; }
return $retvals;
} }
function renew_member($renew_name, $admin_uid, $admin_name) { function admin_renew_member($renew_name, $admin_name)
global $sucsDB; {
global $sucsDB;
$q="UPDATE members SET paid=?, lastupdate=DEFAULT, lastedit=? WHERE username=?;"; renew_membership($renew_name);
$r=$sucsDB->Execute($q, array(paidUntil(time()), $admin_uid, $renew_name)); $q = "SELECT email, typename FROM members, member_type WHERE username=? AND type=member_type.id;";
if (!$r) { $r = $sucsDB->Execute($q, array($renew_name));
print $sucsDB->ErrorMsg(); $message = "Account Renewal notification\n\n";
return FALSE; $message .= "Account : " . $renew_name . "\n";
} else { $message .= "User Type : " . $r->fields['typename'] . "\n";
$q="SELECT email, typename FROM members, member_type WHERE username=? AND type=member_type.id;"; $message .= "Renewed by: " . $admin_name . "\n\n";
$r=$sucsDB->Execute($q, array($renew_name)); $message .= "**** Payment was made via the SU payments system ****\n";
$message .= "Regards\n The SU Renewals script";
$message = "Account Renewal notification\n\n"; mail("exec@sucs.org", "Account Renewal", $message);
$message .= "Account : ".$renew_name."\n"; return TRUE;
$message .= "User Type : ".$r->fields['typename']."\n";
$message .= "Renewed by: ".$admin_name."\n\n";
$message .= "**** Payment was made via the SU payments system ****\n";
$message .= "Regards\n The SU Renewals script";
mail("treasurer@sucs.org","Account Renewal",$message);
$message = "Your Swansea University Computer Society (SUCS) membership has been renewed\n\n";
$message .= "Username: ".$renew_name."\n";
$message .= "If you do not know or have forgotten your password, please email admin@sucs.org to arrange for it to be changed.\n\n";
$message .= "Regards\n The SUCS admin";
$header = "From: admin@sucs.org\r\n";
$header .= "Reply-To: admin@sucs.org";
// Personal account
mail($r->fields['email'],"SUCS account renewal",$message,$header);
// sucs account
mail($renew_name."@sucs.org","SUCS account renewal",$message,$header);
return TRUE;
}
} }
<?php <?php
//unique society identifier // gib errars plox
$GroupingID = "6613"; //error_reporting(E_ALL);
//ini_set('display_errors', 1);
// this is the php for sucs.org/susignup
// Include shit we need. like the renew_membership fucntion
include "../lib/member_functions.php"; include "../lib/member_functions.php";
include "../lib/date.php"; include "../lib/date.php";
include "../suapi.inc.php";
$error_email = "admin@sucs.org";
$mode = 'login';
//login
if(!empty($_REQUEST['sid'])&&!empty($_REQUEST['transactionID'])){
//set signup details
$sid = $_REQUEST['sid'];
$transactionID = $_REQUEST['transactionID'];
//set POST variables
$url = "https://$suapi_user:$suapi_pass@su-api.sucs.org/memberships/Membership.asmx/GetMemberByTransactionID";
$fields = array(
'transactionID'=>urlencode($transactionID),
'GroupingID'=>urlencode($GroupingID),
);
//url-ify the data for the POST
$field_string = "";
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
if(!$result){
$mode = "error";
$smarty->assign("error_text", "Invalid query returned");
} else {
libxml_use_internal_errors(true);
$xml=simplexml_load_string($result);
if (!$xml||isset($xml->head->title)) {
$mode='error';
$smarty->assign("error_text", "An error occurred communicating with the SUSU API");
} else{
$re1='.*?';
$re2='(\\{.*?\\})';
if ($c=preg_match_all ("/".$re1.$re2."/is", $result, $matches))
{
$json_string=$matches[1][0];
} else{
$mode = "error";
}
$array = json_decode($json_string,TRUE);
if($array['cardNumber'] == $sid && $sid != ""){
$mode = 'form';
// SET THIS FOR DEBUG MODE
// $sucsDB->debug = true;
$fullName = $array['firstName']." ".$array['lastName'];
$query = "INSERT INTO transactions (transactionID,fullName,emailAddress,cardNumber,personID) values(?, ?, ?, ?, ?)";
$attribs[] = $transactionID;
$attribs[] = $fullName;
$attribs[] = $array['emailAddress'];
$attribs[] = $array['cardNumber'];
$attribs[] = $array['personID'];
$valid = true; // include the suapiv2 stuff like check_su_sid_and_trans()
if(!$sucsDB->Execute($query,$attribs)) { include "../lib/suapiv2.php";
// We did this because Adodb ErrorNo command is broken
$query = "SELECT * FROM transactions WHERE transactionID = ?";
unset($attribs);
$attribs[]=$transactionID;
if($sucsDB->Execute($query,$attribs)) {
$query = "SELECT * FROM transactions WHERE transactionID = ?"; // since the rewrite by ~imranh this no longer sends out emails
$attribs= array(); // feel free to add it
$attribs[]=$transactionID; // Where do errors go?
$data = $sucsDB->GetAll($query,$attribs); $error_email = "admin@sucs.org";
if(is_array($data)&&sizeof($data)==1&&$data[0]['signupid']==NULL){
// As it stands this shouldn't happen but if it does, no reason not to let them carry on
$valid = true;
} elseif(is_array($data)&&sizeof($data)==1&&$data[0]['signupid']!=NULL) {
$query = "SELECT * FROM signup WHERE sid = ?";
unset($attribs);
$attribs[]=$sid;
$data = $sucsDB->Execute($query, $attribs);
if(!$data) {
mail(
$error_email,
"SUSignup Error",
"An error occured in the susignup system at stage 0\n Love the signup system.\n\nP.S. The Error is:\n ".$sucsDB->ErrorMsg(),
"From: \"SUCS Admin\" <admin@sucs.org>"
);
$valid=false;
} else if($data->fields['username']!=NULL){
$smarty->assign("username", $data->fields['username']);
$mode='numpty2';
// This happens if they already ahve a SUCS account and are trying to create a new signupid
$valid = false;
} else {
$smarty->assign("id", $data->fields['id']);
$smarty->assign("pass", $data->fields['password']);
$mode='numpty';
// If this happens they tried to get a new signupid/pass after already getting one, and should get weekly reminders about it
$valid = false;
}
} else {
$mode="error";
mail(
$error_email,
"SUSignup Error",
"An error occured in the susignup system at stage 1\n Love the signup system.\n\nP.S. The Error is:\n ".$sucsDB->ErrorMsg(),
"From: \"SUCS Admin\" <admin@sucs.org>"
);
$valid = false;
}
} else {
$mode="error";
mail(
$error_email,
"SUSignup Error",
"An error occured in the susignup system at stage 2\n Love the signup system.\n\nP.S. The Error is:\n ".$sucsDB->ErrorMsg(),
"From: \"SUCS Admin\" <admin@sucs.org>"
);
$valid = false;
}
}
if($valid)
{
unset($attribs);
unset($query);
$query = "SELECT * FROM members WHERE sid = ?";
$attribs[] = $sid;
unset($data);
$data = $sucsDB->Execute($query, $attribs);
if (!$data) {
$mode = "error";
$smarty->assign("error_text", "Error in internal database check");
} elseif ($data->RecordCount()==1) {
$mode = "renew";
$q="UPDATE members SET paid=?, lastupdate=DEFAULT, lastedit=? WHERE username=?;";
$r=$sucsDB->Execute($q, array(paidUntil(time()), '99999', $data->fields['username']));
if (!$r) {
mail(
$error_email,
"SUSignup Error",
"An error occured in the susignup system at stage 2.5\n Love the signup system.\n\nP.S. The Error is:\n ".$sucsDB->ErrorMsg(),
"From: \"SUCS Admin\" <admin@sucs.org>"
);
} else {
$q="SELECT email, typename FROM members, member_type WHERE username=? AND type=member_type.id;";
$r=$sucsDB->Execute($q, array($data->fields['username']));
$message = "Account Renewal notification\n\n";
$message .= "Account : ".$data->fields['username']."\n";
$message .= "User Type : ".$r->fields['typename']."\n";
$message .= "Renewed by: ".$data->fields['username'].".\n\n";
$message .= "**** Payment was made via the SU payments system ****\n";
$message .= "Regards\n The SU Renewals script";
mail("treasurer@sucs.org","Account Renewal",$message);
$message = "Your Swansea University Computer Society (SUCS) membership has been renewed\n\n"; // By default display a page asking for sid and transid
$message .= "Username: ".$renew_name."\n"; // this is called "login"
$message .= "If you do not know or have forgotten your password, please email admin@sucs.org to arrange for it to be changed.\n\n"; $mode = 'login';
$message .= "Regards\n The SUCS admin";
$header = "From: admin@sucs.org\r\n";
$header .= "Reply-To: admin@sucs.org";
// Personal account
mail($r->fields['email'],"SUCS account renewal",$message,$header);
// sucs account
mail($data->fields['username']."@sucs.org","SUCS account renewal",$message,$header);
unset($query);
unset($attribs);
$query = "UPDATE transactions set signupid=? WHERE transactionID=?";
$attribs[]="000";
$attribs[]=$transactionID;
$data = $sucsDB->Execute($query,$attribs);
if (!$data) {
$mode="error";
mail(
$error_email,
"SUSignup Error",
"An error occured in the susignup system at stage 2.6\n Love the signup system.\n\nP.S. The Error is:\n ".$sucsDB->ErrorMsg(),
"From: \"SUCS Admin\" <admin@sucs.org>"
);
}
}
} else {
$pass = make_password();
unset($query);
$query = "insert into signup (password,sid,issuedby) values( ?, ?, ?) returning id";
unset($attribs);
$attribs[]=$pass;
$attribs[]=$array['cardNumber'];
$attribs[]='99999';
$iddata = $sucsDB->Execute($query,$attribs); // if somone has post'd data to the page then do shit
$id = $iddata->fields['id']; if (!empty($_REQUEST['sid']) && !empty($_REQUEST['transactionID'])) {
if (!$iddata) {
$mode="error"; // stick the post'd data in a variable we can call easily
mail( $sid = $_REQUEST['sid'];
$error_email, $transactionID = $_REQUEST['transactionID'];
"SUSignup Error",
"An error occured in the susignup system at stage 3\n Love the signup system.\n\nP.S. The Error is:\n ".$sucsDB->ErrorMsg(), // check if the data posted is valid
"From: \"SUCS Admin\" <admin@sucs.org>" if (check_su_sid_and_trans($sid, $transactionID)) {
);
} else { // probe the db for some info thatwe want to use in the if statements below
$query = "update transactions set signupid=? WHERE transactionID=?"; $tmpresult = $sucsDB->Execute("SELECT * FROM members WHERE sid=?", array($sid));
unset($attribs); $signuptmpresult = $sucsDB->Execute("SELECT * FROM signup WHERE sid=?", array($sid));
$attribs[]=$id;
$attribs[]=$transactionID; // check to see if they are already a valid and paid member
if(!$sucsDB->Execute($query,$attribs)) { if ($tmpresult->fields["sid"] == $sid && $tmpresult->fields["paid"] == paidUntil(time())) {
$mode="error"; // let them know they are already signed up and renewed
mail( message_flash("You are a numpty and have already signed up and paid for this year.");
$error_email, // else if check to see if they have signedup and paid for the new year but haven't renewed
"SUSignup Error", } else if ($tmpresult->fields["sid"] == $sid && $tmpresult->fields["paid"] != paidUntil(time())) {
"An error occured in the susignup system at stage 4\n Love the signup system.\n\nP.S. The Error is:\n ".$sucsDB->ErrorMsg(), // renew them!
"From: \"SUCS Admin\" <admin@sucs.org>" renew_membership($tmpresult->fields["username"]);
); // let them know that their account has been renewed
print($sucsDB->ErrorMsg()); message_flash("Your SUCS account has been renewed.");
} else { // else if they aren't in the SUCS DB but have a signup slip, take them back to that part of signup
$smarty->assign("id", $id); } else if ($tmpresult->fields == false && $signuptmpresult->fields["sid"] == $sid && $signuptmpresult->fields["activated"] == NULL) {
$smarty->assign("pass", $pass); $mode = "form";
mail( $smarty->assign("id", $signuptmpresult->fields["id"]);
$array['emailAddress'].','.$sid.'@swansea.ac.uk', $smarty->assign("pass", $signuptmpresult->fields["password"]);
"SUCS Signup Information", $smarty->assign("sid", $signuptmpresult->fields["sid"]);
"Thankyou for joining Swansea University Computer Society, your signup details are below;\nSignupID: $id\nSignup Password: $pass\nIf you have successfully completed signup immediately then you can disregard this message.\n\nSUCS Admin Team.", // else if they aren't in the SUCS DB, then bootstrap signup process
"From: \"SUCS Admin\" <admin@sucs.org>" } else if ($tmpresult->fields == false) {
); $mode = "form";
} $pass = make_password();
} $iddata = $sucsDB->Execute("insert into signup (password,sid,issuedby) values( ?, ?, ?) returning id", array($pass, $sid, "99999"));
} $id = $iddata->fields['id'];
} $smarty->assign("id", $id);
} $smarty->assign("pass", $pass);
} $smarty->assign("sid", $sid);
} } else {
// they should never get here
die("You'll see this if there has been a database error. Someone probably knows and is trying to fix it. Sorry.");
}
} else {
trigger_error("That Student Number and Transaction ID combo are invalid.", E_USER_ERROR);
}
} }
$smarty->assign("mode", $mode); $smarty->assign("mode", $mode);
$output = $smarty->fetch("susignup.tpl"); $output = $smarty->fetch("susignup.tpl");
......
<?php <?php
$uritable="shorturi"; $uritable = "shorturi";
$chrs = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S' ,'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); $chrs = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$output = ""; $output = "";
function int_to_alph($int, $chrs) { function int_to_alph($int, $chrs)
$int = (int) $int; {
$base = (int) sizeof($chrs); $int = (int)$int;
$alph = ""; $base = (int)sizeof($chrs);
do { $alph = "";
$alph = $chrs[($int % $base)] . $alph; do {
} while($int = intval($int / $base)); $alph = $chrs[($int % $base)] . $alph;
return $alph; } while ($int = intval($int / $base));
return $alph;
} }
function alph_to_int($alph, $chrs) { function alph_to_int($alph, $chrs)
$base = sizeof($chrs); {
for($i = 0, $int = 0; $i < strlen($alph); $i++) { $base = sizeof($chrs);
$int += intval(array_search(substr($alph, strlen($alph) - $i - 1, 1), $chrs)) * pow($base, $i); for ($i = 0, $int = 0; $i < strlen($alph); $i++) {
} $int += intval(array_search(substr($alph, strlen($alph) - $i - 1, 1), $chrs)) * pow($base, $i);
return (int) $int; }
return (int)$int;
} }
if (isset($pathlist[3])) { if (isset($pathlist[3])) {
$url=$DB->GetOne("select url from $uritable where id='".alph_to_int($pathlist[3], $chrs)."'"); $url = $DB->GetOne("select url from $uritable where id='" . alph_to_int($pathlist[3], $chrs) . "'");
if ($url) { if ($url) {
header('Location: '.$url); header('Location: ' . $url);
} else { } else {
echo "URL not found"; echo "URL not found";
} }
} else { } else {
if ($session->loggedin) { if ($session->loggedin) {
if (@$_REQUEST['action']) { if (@$_REQUEST['action']) {
$shorturi=$DB->GetOne("select id from $uritable where url=?", array(@$_REQUEST['uri'])); $shorturi = $DB->GetOne("select id from $uritable where url=?", array(@$_REQUEST['uri']));
if (!$shorturi) { if (!$shorturi) {
$headers=get_headers($_REQUEST['uri'], 1); $headers = get_headers($_REQUEST['uri'], 1);
if ($headers) { if ($headers) {
if (preg_match("/ 4/", $headers[0])) { if (preg_match("/ 4/", $headers[0])) {
trigger_error("HTTP 4xx error detected - not creating ShortURI", E_USER_WARNING); trigger_error("HTTP 4xx error detected - not creating ShortURI", E_USER_WARNING);
} else { } else {
$record['url'] = @$_REQUEST['uri']; $record['url'] = @$_REQUEST['uri'];
$record['creator'] = $session->username; $record['creator'] = $session->username;
$record['created'] = "now"; $record['created'] = "now";
$DB->AutoExecute($uritable, $record, 'INSERT'); $DB->AutoExecute($uritable, $record, 'INSERT');
$shorturi=$DB->GetOne("select id from $uritable where url=?", array(@$_REQUEST['uri'])); $shorturi = $DB->GetOne("select id from $uritable where url=?", array(@$_REQUEST['uri']));
} }
} else { } else {
trigger_error("URI supplied is not valid", E_USER_WARNING); trigger_error("URI supplied is not valid", E_USER_WARNING);
} }
} }
if ($shorturi>0) $smarty->assign("uri", "http://".$_SERVER['SERVER_NAME']."/uri/".int_to_alph($shorturi, $chrs)); if ($shorturi > 0) $smarty->assign("uri", "http://" . $_SERVER['SERVER_NAME'] . "/uri/" . int_to_alph($shorturi, $chrs));
} }
} else { } else {
trigger_error("You are not logged in", E_USER_WARNING); trigger_error("You are not logged in", E_USER_WARNING);
} }
} }
$output = $smarty->fetch('uri.tpl'); $output = $smarty->fetch('uri.tpl');
......
Source diff could not be displayed: it is too large. Options to address this: view the blob.
DELETE FROM session;
ALTER TABLE session DROP COLUMN time;
ALTER TABLE session ADD COLUMN logintime timestamp(0) without time zone;
ALTER TABLE session ADD COLUMN lastseen timestamp(0) without time zone;
DELETE FROM menu WHERE title='Bananas';
<!DOCTYPE html>
<html lang="en">
<head>
<title>SUCS 3 Step Signup</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="plaster-files/css/3step.css">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
<body>
<div class="jumbotron jumbotron-fluid text-center">
<!--h1>Swansea University Computer Society</h1-->
<img src="https://sucs.org/~imranh/img/sucslogo_trans_white.png"/>
<!--p>1. Pay, 2. Create, 3. Enjoy</p-->
</div>
<div class="container text-center">
<div class="row d-flex justify-content-center">
<div class="col-8">
<div class="card mb-4">
<div class="card-body">
<h4 class="card-title">💳</h4>
<p class="card-text">1. Pay for membership</p>
<a href="https://sucs.org/join" target="_blank" rel="noopener noreferrer" class="btn btn-primary">Pay Online</a>
</div>
</div>
</div>
</div>
<div class="row d-flex justify-content-center">
<div class="col-8">
<div class="card mb-4">
<div class="card-body">
<h5 class="card-title">👤</h5>
<p class="card-text">2. Create your username</p>
<a href="https://sucs.org/susignup" target="_blank" rel="noopener noreferrer" class="btn btn-primary">Create Username</a>
</div>
</div>
</div>
</div>
<div class="row d-flex justify-content-center">
<div class="col-8">
<div class="card mb-4">
<div class="card-body">
<h5 class="card-title">💬</h5>
<p class="card-text">3. Join the conversation</p>
<a href="https://chat.sucs.org" target="_blank" rel="noopener noreferrer" class="btn btn-primary">Join Discord</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="sucs.org" />
<allow-access-from domain="www.sucs.org" />
<allow-access-from domain="www.swansea-union.co.uk" />
<allow-access-from domain="swansea-union.co.uk" />
<allow-access-from domain="stream.sucs.org" />
<allow-access-from domain="www.fomore.com" />
</cross-domain-policy>
.archivelink { .archivelink {
text-align: right; text-align: right;
} }
ul.blognav { ul.blognav {
text-align: left; text-align: left;
float: left; float: left;
width: 100%; width: 100%;
list-style-type: none; list-style-type: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
li.prev { li.prev {
float: left; float: left;
} }
li.next { li.next {
float: right; float: right;
} }
.errorinfo { .errorinfo {
color: red; color: red;
} }
#spinner { #spinner {
visibility: hidden; visibility: hidden;
margin-left: 4px; margin-left: 4px;
margin-right: 4px; margin-right: 4px;
} }
...@@ -2,95 +2,103 @@ ...@@ -2,95 +2,103 @@
================================================*/ ================================================*/
/* Default styling. Used when JavaScript is unsupported */ /* Default styling. Used when JavaScript is unsupported */
.cbb { .cbb {
padding: 5px 10px; padding: 5px 10px;
margin:1em 0; margin: 1em 0;
margin-left: 0.5em; margin-left: 0.5em;
margin-right: 0.5em; margin-right: 0.5em;
background:#e76808; background: #e76808;
font-size: 85%; font-size: 85%;
} }
.cbb h1 { .cbb h1 {
margin:0 -10px; margin: 0 -10px;
padding:0.3em 10px; padding: 0.3em 10px;
background:#efece6; background: #efece6;
font:bold 1.2em Arial, Helvetica, sans-serif; font: bold 1.2em Arial, Helvetica, sans-serif;
} }
div.cbb img.emblem, div.cb img.emblem { div.cbb img.emblem, div.cb img.emblem {
float: right; float: right;
position: relative; position: relative;
top: -1.5em; top: -1.5em;
} }
/* Insert the custom corners and borders for browsers with sufficient JavaScript support */ /* Insert the custom corners and borders for browsers with sufficient JavaScript support */
/* Two of the boxes are floated just for this demo. Adjust to your needs. */ /* Two of the boxes are floated just for this demo. Adjust to your needs. */
.cb { .cb {
margin:0.5em 0; margin: 0.5em 0;
font-size: 85%; font-size: 85%;
} }
.two { .two {
width:45%; width: 45%;
float:left; float: left;
} }
.three { .three {
width:45%; width: 45%;
float:right; float: right;
} }
/* Rules for the top corners and border */ /* Rules for the top corners and border */
.bt { .bt {
background:url('/images/box.png') no-repeat 100% 0; background: url('/images/box.png') no-repeat 100% 0;
margin:0 0 0 19px; margin: 0 0 0 19px;
height:18px; height: 18px;
} }
.bt div { .bt div {
height:18px; height: 18px;
width:19px; width: 19px;
position:relative; position: relative;
left:-19px; left: -19px;
background:url('/images/box.png') no-repeat 0 0; background: url('/images/box.png') no-repeat 0 0;
} }
/* Rules for the bottom corners and border */ /* Rules for the bottom corners and border */
.bb { .bb {
background:url('/images/box.png') no-repeat 100% 100%; background: url('/images/box.png') no-repeat 100% 100%;
margin:0 0 0 19px; margin: 0 0 0 19px;
height:18px; height: 18px;
} }
.bb div { .bb div {
height:18px; height: 18px;
width:19px; width: 19px;
position:relative; position: relative;
left:-19px; left: -19px;
background:url('/images/box.png') no-repeat 0 100%; background: url('/images/box.png') no-repeat 0 100%;
} }
/* Insert the left border */ /* Insert the left border */
.i1 { .i1 {
padding:0 0 0 12px; padding: 0 0 0 12px;
background:url('/images/borders.png') repeat-y 0 0; background: url('/images/borders.png') repeat-y 0 0;
height: 100%; height: 100%;
} }
/* Insert the right border */ /* Insert the right border */
.i2 { .i2 {
padding:0 12px 0 0; padding: 0 12px 0 0;
background:url('/images/borders.png') repeat-y 100% 0; background: url('/images/borders.png') repeat-y 100% 0;
} }
/* Wrapper for the content. Use it to set the background colour and insert some padding between the borders and the content. */ /* Wrapper for the content. Use it to set the background colour and insert some padding between the borders and the content. */
.i3 { .i3 {
background:#e76808; background: #e76808;
border:1px solid #e76808; border: 1px solid #e76808;
border-width:1px 0; border-width: 1px 0;
padding:0 10px; padding: 0 10px;
} }
.cbb h3, .cb h3 { .cbb h3, .cb h3 {
margin: 0; margin: 0;
color: #ffc62b; color: #ffc62b;
} }
.cbb p, .cb p, .cbb ul, .cb ul { .cbb p, .cb p, .cbb ul, .cb ul {
margin: 0; margin: 0;
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -98,15 +106,15 @@ div.cbb img.emblem, div.cb img.emblem { ...@@ -98,15 +106,15 @@ div.cbb img.emblem, div.cb img.emblem {
-------------------------------------------------- */ -------------------------------------------------- */
.cb a:link, .cbb a:link { .cb a:link, .cbb a:link {
color: #ffc62b; color: #ffc62b;
} }
.cb a:visited, .cbb a:visited { .cb a:visited, .cbb a:visited {
color: #a52f0f; color: #a52f0f;
} }
.cb a:active, .cbb a:active { .cb a:active, .cbb a:active {
color: #ffffff; color: #ffffff;
} }
.cb a:hover, .cbb a:hover { .cb a:hover, .cbb a:hover {
......
/* Serve gif images to IE/Win pre version 7 */ /* Serve gif images to IE/Win pre version 7 */
.i1, .i2 { .i1, .i2 {
background-image:url('/images/borders.gif'); background-image: url('/images/borders.gif');
} }
.bt, .bt div, .bb, .bb div { .bt, .bt div, .bb, .bb div {
background-image:url('/images/box.gif'); background-image: url('/images/box.gif');
} }
/* Set a height to fix up some rendering issues. */ /* Set a height to fix up some rendering issues. */
.i1, .i3 { .i1, .i3 {
height:1px; height: 1px;
} }
...@@ -3,130 +3,128 @@ ...@@ -3,130 +3,128 @@
-------------------------------------------------- */ -------------------------------------------------- */
body { body {
font-family: Arial, sans-serif; font-family: Arial, sans-serif;
} }
p { p {
line-height: 1.4em; line-height: 1.4em;
} }
form { form {
margin-top: 0; margin-top: 0;
margin-bottom: 1em; margin-bottom: 1em;
} }
img { img {
border: 0; border: 0;
} }
h1, h2, h3, h4, h5, h6 { h1, h2, h3, h4, h5, h6 {
text-align: left; text-align: left;
margin-bottom: 0; margin-bottom: 0;
} }
h2+p, h2+ul, h2+ol, h3+p, h3+ul, h3+ol, h4+p, h4+ul, h4+ol { h2 + p, h2 + ul, h2 + ol, h3 + p, h3 + ul, h3 + ol, h4 + p, h4 + ul, h4 + ol {
margin-top: 0; margin-top: 0;
} }
#project pre, #plan pre { #project pre, #plan pre {
margin: 0; margin: 0;
} }
dd { dd {
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
acronym, abbr { acronym, abbr {
text-transform: lowercase; text-transform: lowercase;
font-variant: small-caps; font-variant: small-caps;
} }
/* -------------------------------------------------- /* --------------------------------------------------
Branding Branding
-------------------------------------------------- */ -------------------------------------------------- */
#branding { #branding {
width: 100%; width: 100%;
height: 5.2em; height: 5.2em;
min-height: 76px; min-height: 76px;
overflow: hidden; overflow: hidden;
} }
#brandingC { #brandingC {
width: 100%; width: 100%;
height: 100%; height: 100%;
float: left; float: left;
} }
#logo { #logo {
float: left; float: left;
padding: 0.2em; padding: 0.2em;
min-width: 170px; min-width: 170px;
width: 17%; width: 17%;
} }
#title { #title {
float: left; float: left;
padding-left: 0.5em; padding-left: 0.5em;
} }
#title h1 { #title h1 {
margin-top: 0.4em; margin-top: 0.4em;
} }
#loginForm form { #loginForm form {
margin: 0; margin: 0;
} }
/* -------------------------------------------------- /* --------------------------------------------------
Columns Columns
-------------------------------------------------- */ -------------------------------------------------- */
#primaryC { #primaryC {
margin: 0.5em 0; margin: 0.5em 0;
text-align: justify; text-align: justify;
} }
#primaryC > *:first-child { #primaryC > *:first-child {
margin-top: 0; margin-top: 0;
padding-top: 0; padding-top: 0;
} }
.clear { .clear {
clear: both; clear: both;
height: 0; height: 0;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
/* -------------------------------------------------- /* --------------------------------------------------
Content box (e.g. for news items) Content box (e.g. for news items)
-------------------------------------------------- */ -------------------------------------------------- */
.box, .error { .box, .error {
margin: 0.5em 0; margin: 0.5em 0;
} }
.box div.boxcontent, .error div.errorcontent { .box div.boxcontent, .error div.errorcontent {
padding: 0 0.5em; padding: 0 0.5em;
} }
.box .boxhead h2, .box .boxhead h3, .box .boxfoot p, .error h3 { .box .boxhead h2, .box .boxhead h3, .box .boxfoot p, .error h3 {
margin: 0; margin: 0;
padding: 0 0.5em; padding: 0 0.5em;
} }
.box .boxfoot p { .box .boxfoot p {
text-align: right; text-align: right;
font-weight: bold; font-weight: bold;
font-size: 95%; font-size: 95%;
} }
.box div.boxcontent img.emblem { .box div.boxcontent img.emblem {
float: right; float: right;
position: relative; position: relative;
top: -1.5em; top: -1.5em;
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -134,29 +132,29 @@ acronym, abbr { ...@@ -134,29 +132,29 @@ acronym, abbr {
-------------------------------------------------- */ -------------------------------------------------- */
ol.roman { ol.roman {
list-style-type: lower-roman; list-style-type: lower-roman;
} }
dt { dt {
font-weight: bold; font-weight: bold;
} }
ul.boxes { ul.boxes {
display: inline; display: inline;
} }
ul.boxes li { ul.boxes li {
float: left; float: left;
display: inline; display: inline;
text-align: center; text-align: center;
margin-right: 1em; margin-right: 1em;
} }
dd#plan, dd#project { dd#plan, dd#project {
margin-left: 0; margin-left: 0;
word-wrap: break-word; word-wrap: break-word;
white-space: pre-wrap; white-space: pre-wrap;
font-family: monospace; font-family: monospace;
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -164,25 +162,25 @@ dd#plan, dd#project { ...@@ -164,25 +162,25 @@ dd#plan, dd#project {
-------------------------------------------------- */ -------------------------------------------------- */
table { table {
text-align: left; text-align: left;
} }
table.wide { table.wide {
width: 100%; width: 100%;
} }
table.border, table.border td, table.border th { table.border, table.border td, table.border th {
border: 1px solid #e76808; border: 1px solid #e76808;
border-collapse: collapse; border-collapse: collapse;
} }
table.border { table.border {
border-width: 2px; border-width: 2px;
} }
table.border td, table.border th { table.border td, table.border th {
padding: 0.2em; padding: 0.2em;
vertical-align: top; vertical-align: top;
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -190,23 +188,23 @@ table.border td, table.border th { ...@@ -190,23 +188,23 @@ table.border td, table.border th {
-------------------------------------------------- */ -------------------------------------------------- */
div.row { div.row {
clear: both; clear: both;
padding-top: 0.5em; padding-top: 0.5em;
} }
div.row label { div.row label {
float: left; float: left;
width: 20%; width: 20%;
text-align: right; text-align: right;
} }
div.row span.textinput { div.row span.textinput {
float: right; float: right;
width: 78%; width: 78%;
text-align: left; text-align: left;
} }
.note { .note {
color: #888888; color: #888888;
font-size: 80%; font-size: 80%;
} }
.downloads .screenshot { .downloads .screenshot {
padding: 0.4em; padding: 0.4em;
margin: 0.2em; margin: 0.2em;
float: right; float: right;
text-align: center; text-align: center;
} }
.downloads h3 { .downloads h3 {
margin: 0.5em 0 0.2em 0; margin: 0.5em 0 0.2em 0;
padding: 0 0 0.1em 0; padding: 0 0 0.1em 0;
border-bottom: 1px solid #ccc; border-bottom: 1px solid #ccc;
font-family: arial, verdana, sans-serif; font-family: arial, verdana, sans-serif;
font-weight: bold; font-weight: bold;
} }
.downloads .links { .downloads .links {
text-align: right; text-align: right;
font-size: 90%; font-size: 90%;
} }
...@@ -3,165 +3,168 @@ ...@@ -3,165 +3,168 @@
-------------------------------------------------- */ -------------------------------------------------- */
.cornerTopLeft { .cornerTopLeft {
height: 100%; height: 100%;
background: url('/images/left-top-corner.png') top left no-repeat; background: url('/images/left-top-corner.png') top left no-repeat;
} }
.cornerTopRight { .cornerTopRight {
height: 100%; height: 100%;
background: url('/images/right-top-corner.png') top right no-repeat; background: url('/images/right-top-corner.png') top right no-repeat;
} }
.cornerBottomLeft { .cornerBottomLeft {
height: 100%; height: 100%;
background: url('/images/left-bottom-corner.png') bottom left no-repeat; background: url('/images/left-bottom-corner.png') bottom left no-repeat;
} }
.cornerBottomRight { .cornerBottomRight {
height: 100%; height: 100%;
background: url('/images/right-bottom-corner.png') bottom right no-repeat; background: url('/images/right-bottom-corner.png') bottom right no-repeat;
} }
/* -------------------------------------------------- /* --------------------------------------------------
Menu Menu
-------------------------------------------------- */ -------------------------------------------------- */
#navigationC ul li a { #navigationC ul li a {
background: #e76808 url('/images/menu-top-right.png') no-repeat top right; background: #e76808 url('/images/menu-top-right.png') no-repeat top right;
} }
#navigationC ul ul li a span { #navigationC ul ul li a span {
background: url('/images/menu-bottom-right.png') no-repeat bottom right; background: url('/images/menu-bottom-right.png') no-repeat bottom right;
} }
#navigationC ul li a span { #navigationC ul li a span {
display: block; display: block;
background: url('/images/menu-bottom-right.png') no-repeat bottom right; background: url('/images/menu-bottom-right.png') no-repeat bottom right;
} }
/* -------------------------------------------------- /* --------------------------------------------------
Error box Error box
-------------------------------------------------- */ -------------------------------------------------- */
.error { .error {
margin-right: 0.5em; margin-right: 0.5em;
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
.error div.errorcontent { .error div.errorcontent {
background: #ffffff; background: #ffffff;
border: 2px solid #ff0000; border: 2px solid #ff0000;
} }
.error .errorhead h3 { .error .errorhead h3 {
color: #ffffff; color: #ffffff;
} }
.error .errorhead { .error .errorhead {
background: #ff0000 url('/images/menu-top-left.png') no-repeat top left; background: #ff0000 url('/images/menu-top-left.png') no-repeat top left;
} }
.errorbar, .navbar, .infobar { .errorbar, .navbar, .infobar {
margin: 0.5em 0 0 0; margin: 0.5em 0 0 0;
font-size: 80%; font-size: 80%;
} }
.errorbar { .errorbar {
background: #ff0000 url('/images/menu-top-left.png') no-repeat top left; background: #ff0000 url('/images/menu-top-left.png') no-repeat top left;
color: #ffffff; color: #ffffff;
margin-right: 0.5em; margin-right: 0.5em;
} }
.infobar { .infobar {
background: #e76808 url('/images/menu-top-left.png') no-repeat top left; background: #e76808 url('/images/menu-top-left.png') no-repeat top left;
color: #ffffff; color: #ffffff;
margin-right: 0.5em; margin-right: 0.5em;
} }
.infobar a { .infobar a {
color: #ffc62b; color: #ffc62b;
} }
.infobar a:active { .infobar a:active {
color: #ffffff; color: #ffffff;
} }
.navbar { .navbar {
background: #e76808 url('/images/menu-top-left.png') no-repeat top left; background: #e76808 url('/images/menu-top-left.png') no-repeat top left;
} }
.navbar a { .navbar a {
color: #ffc62b; color: #ffc62b;
font-weight: bold; font-weight: bold;
text-decoration: none; text-decoration: none;
} }
.errorbar div, .navbar div, .infobar div { .errorbar div, .navbar div, .infobar div {
background: url('/images/menu-top-right.png') no-repeat top right; background: url('/images/menu-top-right.png') no-repeat top right;
} }
.errorbar div div, .navbar div div, .infobar div div { .errorbar div div, .navbar div div, .infobar div div {
background: url('/images/menu-bottom-left.png') no-repeat bottom left; background: url('/images/menu-bottom-left.png') no-repeat bottom left;
} }
.errorbar div div div, .navbar div div div, .infobar div div div { .errorbar div div div, .navbar div div div, .infobar div div div {
background: url('/images/menu-bottom-right.png') no-repeat bottom right; background: url('/images/menu-bottom-right.png') no-repeat bottom right;
padding: 0.2em 0.5em; padding: 0.2em 0.5em;
} }
/* -------------------------------------------------- /* --------------------------------------------------
Content box (e.g. for news items) Content box (e.g. for news items)
-------------------------------------------------- */ -------------------------------------------------- */
.box .boxhead { .box .boxhead {
background: #e76808 url('/images/menu-top-left.png') no-repeat top left; background: #e76808 url('/images/menu-top-left.png') no-repeat top left;
} }
.box .hollowhead { .box .hollowhead {
background: #ffffff url('/images/border-bottom.png') repeat-x top; background: #ffffff url('/images/border-bottom.png') repeat-x top;
height: 5px; height: 5px;
margin: 0; margin: 0;
padding: 0; padding: 0;
border: none; border: none;
} }
.box .hollowhead div { .box .hollowhead div {
background: url('/images/border-top-left.png') no-repeat top left; background: url('/images/border-top-left.png') no-repeat top left;
height: 100%; height: 100%;
} }
.box .hollowhead div div { .box .hollowhead div div {
background: url('/images/border-top-right.png') no-repeat top right; background: url('/images/border-top-right.png') no-repeat top right;
height: 100%; height: 100%;
} }
.box .boxhead h2, .box .boxhead h3, .error .errorhead h3 { .box .boxhead h2, .box .boxhead h3, .error .errorhead h3 {
background: url('/images/menu-top-right.png') no-repeat top right; background: url('/images/menu-top-right.png') no-repeat top right;
} }
.box .boxfoot { .box .boxfoot {
background: #e76808 url('/images/menu-bottom-left.png') no-repeat bottom left; background: #e76808 url('/images/menu-bottom-left.png') no-repeat bottom left;
} }
.box .boxfoot p { .box .boxfoot p {
background: url('/images/menu-bottom-right.png') no-repeat bottom right; background: url('/images/menu-bottom-right.png') no-repeat bottom right;
} }
.box .hollowfoot { .box .hollowfoot {
background: #ffffff url('/images/border-bottom.png') repeat-x bottom; background: #ffffff url('/images/border-bottom.png') repeat-x bottom;
height: 5px; height: 5px;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.box .hollowfoot div { .box .hollowfoot div {
background: url('/images/border-bottom-left.png') no-repeat bottom left; background: url('/images/border-bottom-left.png') no-repeat bottom left;
height: 100%; height: 100%;
} }
.box .hollowfoot div div { .box .hollowfoot div div {
background: url('/images/border-bottom-right.png') no-repeat bottom right; background: url('/images/border-bottom-right.png') no-repeat bottom right;
height: 100%; height: 100%;
} }
/* -------------------------------------------------- /* --------------------------------------------------
Error box Error box
-------------------------------------------------- */ -------------------------------------------------- */
.error .errorhead { .error .errorhead {
background: #ff0000 url('/images/menu-top-left.png') no-repeat top left; background: #ff0000 url('/images/menu-top-left.png') no-repeat top left;
} }
div#searchbox { div#searchbox {
height: 5em; height: 5em;
} }
.buttons { .buttons {
padding-top: 5px; padding-top: 5px;
} }
\ No newline at end of file
...@@ -3,19 +3,19 @@ ...@@ -3,19 +3,19 @@
-------------------------------------------------- */ -------------------------------------------------- */
.cornerTopLeft { .cornerTopLeft {
background: url('/images/left-top-corner.gif') top left no-repeat; background: url('/images/left-top-corner.gif') top left no-repeat;
} }
.cornerTopRight { .cornerTopRight {
background: url('/images/right-top-corner.gif') top right no-repeat; background: url('/images/right-top-corner.gif') top right no-repeat;
} }
.cornerBottomLeft { .cornerBottomLeft {
background: url('/images/left-bottom-corner.gif') bottom left no-repeat; background: url('/images/left-bottom-corner.gif') bottom left no-repeat;
} }
.cornerBottomRight { .cornerBottomRight {
background: url('/images/right-bottom-corner.gif') bottom right no-repeat; background: url('/images/right-bottom-corner.gif') bottom right no-repeat;
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -23,43 +23,42 @@ ...@@ -23,43 +23,42 @@
-------------------------------------------------- */ -------------------------------------------------- */
#branding { #branding {
/* background: #ffc62b; /* background: #ffc62b;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='/images/orangefade.png'); */ filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='/images/orangefade.png'); */
} }
#loginForm { #loginForm {
margin-right: 0.5em; margin-right: 0.5em;
margin-bottom: 0.2em; margin-bottom: 0.2em;
} }
#brandingC { #brandingC {
background: transparent; background: transparent;
/* filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src='/images/bgfade.png'); */ /* filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop src='/images/bgfade.png'); */
} }
/* -------------------------------------------------- /* --------------------------------------------------
Menu Menu
-------------------------------------------------- */ -------------------------------------------------- */
#navigationC ul li { #navigationC ul li {
line-height: 0; line-height: 0;
} }
#navigationC ul li a { #navigationC ul li a {
background-image: url('/images/menu-top-right.gif'); background-image: url('/images/menu-top-right.gif');
} }
#navigationC ul ul li a { #navigationC ul ul li a {
background: #ffc62b url('/images/menu-top-right.gif') norepeat top right; background: #ffc62b url('/images/menu-top-right.gif') norepeat top right;
} }
#navigationC ul li a span { #navigationC ul li a span {
background-image: url('/images/menu-bottom-right.gif'); background-image: url('/images/menu-bottom-right.gif');
} }
#navigationC ul ul li a span { #navigationC ul ul li a span {
background-image: url('/images/menu-bottom-right.gif'); background-image: url('/images/menu-bottom-right.gif');
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -67,7 +66,7 @@ ...@@ -67,7 +66,7 @@
-------------------------------------------------- */ -------------------------------------------------- */
#search input.text { #search input.text {
width: 95%; width: 95%;
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -75,8 +74,8 @@ ...@@ -75,8 +74,8 @@
-------------------------------------------------- */ -------------------------------------------------- */
#footer { #footer {
/* background: #ffc62b; /* background: #ffc62b;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='/images/orangefade-bottom.png'); */ filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='/images/orangefade-bottom.png'); */
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -84,43 +83,43 @@ ...@@ -84,43 +83,43 @@
-------------------------------------------------- */ -------------------------------------------------- */
.box { .box {
line-height: 1.1; line-height: 1.1;
} }
.box .boxhead { .box .boxhead {
background: #e76808 url('/images/menu-top-left.gif') no-repeat top left; background: #e76808 url('/images/menu-top-left.gif') no-repeat top left;
} }
.box .hollowhead, .box .hollowfoot { .box .hollowhead, .box .hollowfoot {
font-size: 0; font-size: 0;
} }
.box .hollowhead div { .box .hollowhead div {
background: url('/images/border-top-left.gif') no-repeat top left; background: url('/images/border-top-left.gif') no-repeat top left;
} }
.box .hollowhead div div { .box .hollowhead div div {
background: url('/images/border-top-right.gif') no-repeat top right; background: url('/images/border-top-right.gif') no-repeat top right;
} }
.box .boxhead h2, .box .boxhead h3, .error .errorhead h3 { .box .boxhead h2, .box .boxhead h3, .error .errorhead h3 {
background: url('/images/menu-top-right.gif') no-repeat top right; background: url('/images/menu-top-right.gif') no-repeat top right;
} }
.box .boxfoot { .box .boxfoot {
background: #e76808 url('/images/menu-bottom-left.gif') no-repeat bottom left; background: #e76808 url('/images/menu-bottom-left.gif') no-repeat bottom left;
} }
.box .boxfoot p { .box .boxfoot p {
background: url('/images/menu-bottom-right.gif') no-repeat bottom right; background: url('/images/menu-bottom-right.gif') no-repeat bottom right;
} }
.box .hollowfoot div { .box .hollowfoot div {
background: url('/images/border-bottom-left.gif') no-repeat bottom left; background: url('/images/border-bottom-left.gif') no-repeat bottom left;
} }
.box .hollowfoot div div { .box .hollowfoot div div {
background: url('/images/border-bottom-right.gif') no-repeat bottom right; background: url('/images/border-bottom-right.gif') no-repeat bottom right;
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -128,21 +127,21 @@ ...@@ -128,21 +127,21 @@
-------------------------------------------------- */ -------------------------------------------------- */
.error .errorhead { .error .errorhead {
background: #ff0000 url('/images/menu-top-left.gif') no-repeat top left; background: #ff0000 url('/images/menu-top-left.gif') no-repeat top left;
} }
.errorbar { .errorbar {
background: #ff0000 url('/images/menu-top-left.gif') no-repeat top left; background: #ff0000 url('/images/menu-top-left.gif') no-repeat top left;
} }
.errorbar div { .errorbar div {
background: url('/images/menu-top-right.gif') no-repeat top right; background: url('/images/menu-top-right.gif') no-repeat top right;
} }
.errorbar div div { .errorbar div div {
background: url('/images/menu-bottom-left.gif') no-repeat bottom left; background: url('/images/menu-bottom-left.gif') no-repeat bottom left;
} }
.errorbar div div div { .errorbar div div div {
background: url('/images/menu-bottom-right.gif') no-repeat bottom right; background: url('/images/menu-bottom-right.gif') no-repeat bottom right;
} }
form { form {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
#navigationC ul li { #navigationC ul li {
line-height: 0; line-height: 0;
} }
#loginForm input.button { #loginForm input.button {
font-size: 80%; font-size: 80%;
} }
/* -------------------------------------------------- /* --------------------------------------------------
...@@ -16,11 +16,12 @@ form { ...@@ -16,11 +16,12 @@ form {
-------------------------------------------------- */ -------------------------------------------------- */
ol.roman { ol.roman {
list-style-type: i; list-style-type: i;
} }
/* -------------------------------------------------- /* --------------------------------------------------
Secondary content Secondary content
-------------------------------------------------- */ -------------------------------------------------- */
#secondary ul { #secondary ul {
margin-left: 2em; margin-left: 2em;
} }
\ No newline at end of file
li.column1 { li.column1 {
margin-left: 0em; margin-left: 0em;
} }
li.column2 { li.column2 {
margin-left: 10em; margin-left: 10em;
} }
div.memberlist ul li { div.memberlist ul li {
line-height: 1.2em; line-height: 1.2em;
} }
div.memberlist ul { div.memberlist ul {
margin-top: 0; margin-top: 0;
} }
ul.bananas { ul.bananas {
margin-left: 0; margin-left: 0;
padding-left: 0; padding-left: 0;
list-style: none; list-style: none;
} }
ul.bananas li { ul.bananas li {
margin-bottom: 0.5em; margin-bottom: 0.5em;
background-repeat: no-repeat; background-repeat: no-repeat;
padding-left: 30px; padding-left: 30px;
} }
ul.bananas li small { ul.bananas li small {
color: grey; color: grey;
} }
ul.bananas li.yellow1 { ul.bananas li.yellow1 {
background-image: url('/images/bananas/banana1.png'); background-image: url('/images/bananas/banana1.png');
background-position: 0.5em; background-position: 0.5em;
} }
ul.bananas li.yellow2 { ul.bananas li.yellow2 {
background-image: url('/images/bananas/banana2.png'); background-image: url('/images/bananas/banana2.png');
background-position: 0.2em; background-position: 0.2em;
} }
ul.bananas li.yellow3 { ul.bananas li.yellow3 {
background-position: 0; background-position: 0;
background-image: url('/images/bananas/banana3.png'); background-image: url('/images/bananas/banana3.png');
} }
ul.bananas li.green1 { ul.bananas li.green1 {
background-position: 0.5em; background-position: 0.5em;
background-image: url('/images/bananas/banana-g-1.png'); background-image: url('/images/bananas/banana-g-1.png');
} }
ul.bananas li.green2 { ul.bananas li.green2 {
background-position: 0.2em; background-position: 0.2em;
background-image: url('/images/bananas/banana-g-2.png'); background-image: url('/images/bananas/banana-g-2.png');
} }
ul.bananas li.green3 { ul.bananas li.green3 {
background-position: 0; background-position: 0;
background-image: url('/images/bananas/banana-g-3.png'); background-image: url('/images/bananas/banana-g-3.png');
} }
.date {background-color: #e0e0ff; } .date {
.time {background-color: #e0ffe0; } background-color: #e0e0ff;
.user {background-color: #ffe0e0; } }
.taglist {background-color: #ffffe0; }
.time {
background-color: #e0ffe0;
}
.user {
background-color: #ffe0e0;
}
.taglist {
background-color: #ffffe0;
}
/******************************************************************************** /********************************************************************************
* CodeHighlight Classes * CodeHighlight Classes
* Originally from the Wordpress Code Highlight Plugin * Originally from the Wordpress Code Highlight Plugin
...@@ -16,27 +15,82 @@ ...@@ -16,27 +15,82 @@
} }
/* .hl-surround, .hl-surround pre, .hl-surround span, */ /* .hl-surround, .hl-surround pre, .hl-surround span, */
.hl-main { font: normal 10pt 'Courier New', monospace;} .hl-main {
font: normal 10pt 'Courier New', monospace;
.hl-default { color: Black; } }
.hl-code { color: Black; }
.hl-brackets { color: Olive; } .hl-default {
.hl-comment { color: #ffa500; } /* Orange */ color: Black;
.hl-quotes { color: #8b0000; } /* Dark red */ }
.hl-string { color: Red; }
.hl-identifier { color: Blue; } .hl-code {
.hl-builtin { color: Teal; } color: Black;
.hl-reserved { color: Green; } }
.hl-inlinedoc { color: Blue; }
.hl-var { color: #00008b; } /* Dark blue */ .hl-brackets {
.hl-url { color: Blue; } color: Olive;
.hl-special { color: Navy; } }
.hl-number { color: Maroon; }
.hl-inlinetags { color: Blue; } .hl-comment {
.hl-main { background-color: transparent; } color: #ffa500;
}
.hl-main pre { margin: 0; padding: 0; }
/* Orange */
.hl-quotes {
color: #8b0000;
}
/* Dark red */
.hl-string {
color: Red;
}
.hl-identifier {
color: Blue;
}
.hl-builtin {
color: Teal;
}
.hl-reserved {
color: Green;
}
.hl-inlinedoc {
color: Blue;
}
.hl-var {
color: #00008b;
}
/* Dark blue */
.hl-url {
color: Blue;
}
.hl-special {
color: Navy;
}
.hl-number {
color: Maroon;
}
.hl-inlinetags {
color: Blue;
}
.hl-main {
background-color: transparent;
}
.hl-main pre {
margin: 0;
padding: 0;
}
div#displayCode * { div#displayCode * {
font: normal 10pt 'Courier New', monospace; font: normal 10pt 'Courier New', monospace;
} }