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 1922 additions and 2285 deletions
<?php
include_once("../lib/date.php");
// Config options
$inform="treasurer@sucs.org";
$permission="sucsstaff";
$inform = "treasurer@sucs.org";
$permission = "sucsstaff";
// Enable and disable database updating
$enable=TRUE;
$enable = TRUE;
// Set next payment date
$paydate = paidUntil(time());
......@@ -14,135 +14,129 @@ if (isset($session->groups[$permission])) {
$smarty->assign("staff", TRUE);
// $sucsDB->debug = true;
// handle updates
if(isset($_POST['uid']) && isset($_POST['lastupdate'])){
// handle updates
if (isset($_POST['uid']) && isset($_POST['lastupdate'])) {
// Check data hasn't changed and that nothing is broked
$query = "SELECT * FROM members WHERE uid=? AND lastupdate=?";
$array = array($_POST['uid'], $_POST['lastupdate']);
$data = $sucsDB->GetAll($query,$array);
$data = $sucsDB->GetAll($query, $array);
// If there is only one record then everything is fine
if(sizeof($data)==1){
if (sizeof($data) == 1) {
// get info on currently logged in user
$user = posix_getpwnam($session->username);
// Update record
$record = $data[0];
$query = "UPDATE members";
$query .= " SET paid = ?, lastupdate = DEFAULT, lastedit = ?";
$query .= " WHERE uid = ?";
$array = array($paydate,$user['uid'],$_POST['uid']);
if($enable){
$sucsDB->query($query,$array);
$query .= " SET paid = ?, lastupdate = DEFAULT, lastedit = ?";
$query .= " WHERE uid = ?";
$array = array($paydate, $user['uid'], $_POST['uid']);
if ($enable) {
$sucsDB->query($query, $array);
}
// emailing contact (tresurer)
$message = "Account renewal notification\n\n";
$message .= "Account : ".$record['username']."\n";
$message .= "User Type : ".$record['type']."\n";
$message .= "Renewed by: ".$user['name']."\n\n";
$message .= "Regards\n eclipse's script";
mail($inform,"Account Renewal",$message);
// emailing user
$message = "Your Swansea University Computer Society (SUCS) membership has been renewed\n\n";
$message .= "Username: ".$record['username']."\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($record['email'],"SUCS account renewal",$message,$header);
// sucs account
mail($record['username']."@sucs.org","SUCS account renewal",$message,$header);
message_flash("Renewed account for: ".htmlentities($record['username']));
}
else{
trigger_error("Number of recored returned: ".sizeof($data).". Expected: 1.", E_USER_ERROR);
$message = "Account renewal notification\n\n";
$message .= "Account : " . $record['username'] . "\n";
$message .= "User Type : " . $record['type'] . "\n";
$message .= "Renewed by: " . $user['name'] . "\n\n";
$message .= "Regards\n eclipse's script";
mail($inform, "Account Renewal", $message);
// emailing user
$message = "Your Swansea University Computer Society (SUCS) membership has been renewed\n\n";
$message .= "Username: " . $record['username'] . "\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($record['email'], "SUCS account renewal", $message, $header);
// sucs account
mail($record['username'] . "@sucs.org", "SUCS account renewal", $message, $header);
message_flash("Renewed account for: " . htmlentities($record['username']));
} else {
trigger_error("Number of recored returned: " . sizeof($data) . ". Expected: 1.", E_USER_ERROR);
}
}
// if sort is specified in GET
if(isset($_GET["sort"])){
$sortoptions = array("username","sid","realname");
if (isset($_GET["sort"])) {
$sortoptions = array("username", "sid", "realname");
// and is a valid option
if(in_array($_GET["sort"],$sortoptions,TRUE)){
if (in_array($_GET["sort"], $sortoptions, TRUE)) {
// use it
$sort=$_GET["sort"];
}
// else use username
else{
$sort='username';
$sort = $_GET["sort"];
} // else use username
else {
$sort = 'username';
}
$getsort=$sort;
}
//else use username
else{
$sort='username';
$getsort = $sort;
} //else use username
else {
$sort = 'username';
}
//Get members details
$query = "SELECT * FROM members, member_type";
$query .= " WHERE paid != ?";
$query .= " AND (type = 1 OR type = 2 OR type = 5)";
$query .= " AND type=member_type.id";
$query .= " ORDER BY paid,type,".$sort;
$array = array($paydate);
$data = $sucsDB->GetAll($query, $array);
$query .= " WHERE paid != ?";
$query .= " AND (type = 1 OR type = 2 OR type = 5)";
$query .= " AND type=member_type.id";
$query .= " ORDER BY paid,type," . $sort;
$array = array($paydate);
$data = $sucsDB->GetAll($query, $array);
$smarty->assign("members", $data);
// set refresh rate
$autorefresh=$_GET["autorefresh"];
// if autorefresh is not 'n'
if($autorefresh!="n"){
$autorefresh = $_GET["autorefresh"];
// if autorefresh is not 'n'
if ($autorefresh != "n") {
// and is a decimal value
if(ctype_digit($autorefresh)){
// use it
$refreshval=$autorefresh;
if (ctype_digit($autorefresh)) {
// use it
$refreshval = $autorefresh;
// set passthrough
$getrefresh=$refreshval;
}
else{
// If no valid value assigned, default to OFF
$refreshval="n";
}
$optrefresh=$refreshval;
$smarty->assign("refresh", $refreshval);
}
else{
$getrefresh = $refreshval;
} else {
// If no valid value assigned, default to OFF
$refreshval = "n";
}
$optrefresh = $refreshval;
$smarty->assign("refresh", $refreshval);
} else {
// set passthrough
$getrefresh='n';
$optrefresh='n';
$getrefresh = 'n';
$optrefresh = 'n';
}
// compile passthrough url
// sort
if(isset($getsort)){
$getout="?sort=".$getsort;
if (isset($getsort)) {
$getout = "?sort=" . $getsort;
}
// autorefresh
if(isset($getrefresh)){
if(isset($getout)){
$getout .= "&amp;autorefresh=".$getrefresh;
}
else{
$getout = "?autorefresh=".$getrefresh;
if (isset($getrefresh)) {
if (isset($getout)) {
$getout .= "&amp;autorefresh=" . $getrefresh;
} else {
$getout = "?autorefresh=" . $getrefresh;
}
}
// set smarty variables
$smarty->assign("self",$baseurl.$path.$getout);
$smarty->assign("optionrefresh",$optrefresh);
$smarty->assign("optionsort",$sort);
$smarty->assign("paydate",$paydate);
$smarty->assign("self", $baseurl . $path . $getout);
$smarty->assign("optionrefresh", $optrefresh);
$smarty->assign("optionsort", $sort);
$smarty->assign("paydate", $paydate);
}
$side = $smarty->fetch('membershiprenew-options.tpl');
$body = $smarty->fetch('membershiprenew.tpl');
$smarty->assign('secondary',$side);
$smarty->assign('secondary', $side);
$smarty->assign('title', "Renew Membership");
$smarty->assign('body', $body);
?>
<?php
function getPageID($name) {
global $DB;
$query=$DB->GetRow("select id from menu where title='".$name."'");
return (int)@$query['id'];
function getPageID($name)
{
global $DB;
$query = $DB->GetRow("select id from menu where title='" . $name . "'");
return (int)@$query['id'];
}
function translate($word) {
global $language, $DB;
function translate($word)
{
global $language, $DB;
if ($language['code']!="en") {
$query=$DB->GetRow("select title, title".$language['db']." from menu where title='".$word."'");
if ($query['title'.$language['db']]!="") return $query['title'.$language['db']];
else return $query['title'];
} else return $word;
if ($language['code'] != "en") {
$query = $DB->GetRow("select title, title" . $language['db'] . " from menu where title='" . $word . "'");
if ($query['title' . $language['db']] != "") return $query['title' . $language['db']];
else return $query['title'];
} else return $word;
}
function parseMenu($res) {
global $language;
function parseMenu($res)
{
global $language;
$menu = array();
$menu = array();
foreach ($res as $row) {
if ($language['code']!="en") {
if ($row['title'.$language['db']]!="") $title=$row['title'.$language['db']];
else $title=$row['title'];
$menu[$title] = $row['target'];
} else {
$menu[$row['title']] = $row['target'];
}
}
foreach ($res as $row) {
if ($language['code'] != "en") {
if ($row['title' . $language['db']] != "") $title = $row['title' . $language['db']];
else $title = $row['title'];
$menu[$title] = $row['target'];
} else {
$menu[$row['title']] = $row['target'];
}
}
return $menu;
return $menu;
}
if (isset($pathlist[1]))
$pagename = $pathlist[1]; else $pagename = "";
$pagename = $pathlist[1]; else $pagename = "";
// Menu stuff
$smarty->assign("select",$pagename);
$smarty->assign("select", $pagename);
if (isset($pathlist[2]))
$smarty->assign("subselect",$pathlist[2]);
$smarty->assign("subselect", $pathlist[2]);
else
$smarty->assign("subselect",$pagename);
$smarty->assign("subselect", $pagename);
$query = "select * from menu where parent is NULL and (permission is NULL";
$query = "select * from menu where parent is NULL and (permission is NULL";
// Temporary - all members should be members of the "users" group but aren't
if ($session->loggedin) $query .= " or permission='users'";
foreach ($session->groups as $group => $value) {
$query .= " or permission='$group'";
$query .= " or permission='$group'";
}
$query .= ") order by menuorder";
......@@ -62,7 +65,7 @@ $menu = parseMenu($res);
// this needs to choose the actual current one
// subpages/submenu items can have permissions attached to them as well!
$query2 = "select * from menu where parent=";
$query2 = "select * from menu where parent=";
$query2 .= "'";
$query2 .= getPageID($pagename);
$query2 .= "'";
......@@ -71,16 +74,16 @@ $query2 .= " and (permission is NULL";
if ($session->loggedin) $query2 .= " or permission='users'";
foreach ($session->groups as $group => $value) {
$query2 .= " or permission='$group'";
}
$query2 .= " or permission='$group'";
}
$query2 .= ") order by menuorder";
$res2 = $DB->GetAll($query2);
if (count($res2)>0) {
$submenu = parseMenu($res2);
$menu[translate($pagename)] = $submenu;
if (count($res2) > 0) {
$submenu = parseMenu($res2);
$menu[translate($pagename)] = $submenu;
}
$smarty->assign("menu",$menu);
$smarty->assign("menu", $menu);
?>
<?php
function parseIdleTime($idletime) {
$idlearray = preg_split("/[hms]/",$idletime);
if (strstr($idletime,'h')) {
$hours = $idlearray[0];
$minutes = $idlearray[1];
$seconds = 0;
} elseif (strstr($idletime,'m')) {
$hours = 0;
$minutes = $idlearray[0];
$seconds = $idlearray[1];
} else {
$hours = 0;
$minutes = 0;
$seconds = $idlearray[0];
}
return (intval($hours * 3600)) + (intval($minutes) * 60) + intval($seconds);
function parseIdleTime($idletime)
{
$idlearray = preg_split("/[hms]/", $idletime);
if (strstr($idletime, 'h')) {
$hours = $idlearray[0];
$minutes = $idlearray[1];
$seconds = 0;
} elseif (strstr($idletime, 'm')) {
$hours = 0;
$minutes = $idlearray[0];
$seconds = $idlearray[1];
} else {
$hours = 0;
$minutes = 0;
$seconds = $idlearray[0];
}
return (intval($hours * 3600)) + (intval($minutes) * 60) + intval($seconds);
}
function compare_idletime($a, $b) {
return strnatcmp($a['idleseconds'], $b['idleseconds']);
function compare_idletime($a, $b)
{
return strnatcmp($a['idleseconds'], $b['idleseconds']);
}
$mwpath = array_search("Milliways", $pathlist);
$newpath = $baseurl;
for($i=0;$i<=$mwpath;$i++) {
if ($i!=0) $newpath .= "/";
$newpath .= $pathlist[$i];
for ($i = 0; $i <= $mwpath; $i++) {
if ($i != 0) $newpath .= "/";
$newpath .= $pathlist[$i];
}
$smarty->assign("mwpath", $newpath);
$cal = cal_info(CAL_JULIAN);
if (strtolower($pathlist[$mwpath+1]) == "uri") {
$latest = FALSE;
$today = FALSE;
unset($search);
if (isset($pathlist[$mwpath+2])) {
if ($pathlist[$mwpath+2] == "search" && isset($pathlist[$mwpath+3])) {
$search = $pathlist[$mwpath+3];
} else {
$today = strtotime($pathlist[$mwpath+2]);
}
}
if ($today === FALSE && !isset($search)) {
$today = time();
$latest = TRUE;
}
$smarty->assign("extra_scripts", array(
'<meta name="ROBOTS" content="NOINDEX" />',
'<meta name="ROBOTS" content="NOFOLLOW" />'));
$mwdb = new PDO('sqlite:/var/lib/mw/mwuri.db');
$res = $mwdb->prepare("select distinct strftime('%Y',added) from mwuri");
$res->execute();
$yearlist = $res->fetchAll(PDO::FETCH_COLUMN,0);
$smarty->assign("yearlist",$yearlist);
$res= $mwdb->prepare("select distinct strftime('%m',added) from mwuri where strftime('%Y',added) = ?");
$res->execute(array(date("Y",$today)));
$mlist = $res->fetchAll(PDO::FETCH_COLUMN,0);
$monthlist = array();
foreach( $mlist as $m) {
$monthlist[$m] = $cal['abbrevmonths'][(int)$m];
}
$smarty->assign("monthlist",$monthlist);
$res= $mwdb->prepare("select distinct strftime('%d',added) from mwuri where strftime('%Y-%m',added) = ?");
$res->execute(array(date("Y-m",$today)));
$daylist = $res->fetchAll(PDO::FETCH_COLUMN,0);
$smarty->assign("daylist",$daylist);
if ($today === FALSE && isset($search)) {
// do a search
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwuri where title like ? or url like ? order by added desc");
$term = "%".$search."%";
$res->execute(array($term,$term));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
} else {
//standard date based lookup
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwuri where date(added,'localtime')=? order by added desc");
$res->execute(array(date("Y-m-d",$today)));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
if ($latest && count($data == 0)) {
$day = end($yearlist)."-".end($monthlist)."-".end($daylist);
$today = strtotime($day);
$res->execute(array(date("Y-m-d",$today)));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
}
}
foreach($data as $k => $row)
{
if ($row['tags']) {
$json = json_decode($row['tags'], TRUE);
if (is_array($json))
$data[$k]['taglist'] = $json[0]['top_tags'];
}
}
$smarty->assign("urilist", $data);
$smarty->assign("thisyear", date("Y",$today));
$smarty->assign("thismonth", date("m",$today));
$smarty->assign("thisday", date("d",$today));
$output = $smarty->fetch($base."templates/milliways_uri.tpl");
$smarty->assign("title", "Milliways URI");
$smarty->assign("body", $output);
$smarty->assign("extra_styles", "/css/milliways.css");
$smarty->assign("refresh", 120);
return;
if (strtolower($pathlist[$mwpath + 1]) == "uri") {
$latest = FALSE;
$today = FALSE;
unset($search);
if (isset($pathlist[$mwpath + 2])) {
if ($pathlist[$mwpath + 2] == "search" && isset($pathlist[$mwpath + 3])) {
$search = $pathlist[$mwpath + 3];
} else {
$today = strtotime($pathlist[$mwpath + 2]);
}
}
if ($today === FALSE && !isset($search)) {
$today = time();
$latest = TRUE;
}
$smarty->assign("extra_scripts", array(
'<meta name="ROBOTS" content="NOINDEX" />',
'<meta name="ROBOTS" content="NOFOLLOW" />'));
$mwdb = new PDO('sqlite:/var/lib/mw/mwuri.db');
$res = $mwdb->prepare("select distinct strftime('%Y',added) from mwuri");
$res->execute();
$yearlist = $res->fetchAll(PDO::FETCH_COLUMN, 0);
$smarty->assign("yearlist", $yearlist);
$res = $mwdb->prepare("select distinct strftime('%m',added) from mwuri where strftime('%Y',added) = ?");
$res->execute(array(date("Y", $today)));
$mlist = $res->fetchAll(PDO::FETCH_COLUMN, 0);
$monthlist = array();
foreach ($mlist as $m) {
$monthlist[$m] = $cal['abbrevmonths'][(int)$m];
}
$smarty->assign("monthlist", $monthlist);
$res = $mwdb->prepare("select distinct strftime('%d',added) from mwuri where strftime('%Y-%m',added) = ?");
$res->execute(array(date("Y-m", $today)));
$daylist = $res->fetchAll(PDO::FETCH_COLUMN, 0);
$smarty->assign("daylist", $daylist);
if ($today === FALSE && isset($search)) {
// do a search
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwuri where title like ? or url like ? order by added desc");
$term = "%" . $search . "%";
$res->execute(array($term, $term));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
} else {
//standard date based lookup
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwuri where date(added,'localtime')=? order by added desc");
$res->execute(array(date("Y-m-d", $today)));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
if ($latest && count($data == 0)) {
$day = end($yearlist) . "-" . end($monthlist) . "-" . end($daylist);
$today = strtotime($day);
$res->execute(array(date("Y-m-d", $today)));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
}
}
foreach ($data as $k => $row) {
if ($row['tags']) {
$json = json_decode($row['tags'], TRUE);
if (is_array($json))
$data[$k]['taglist'] = $json[0]['top_tags'];
}
}
$smarty->assign("urilist", $data);
$smarty->assign("thisyear", date("Y", $today));
$smarty->assign("thismonth", date("m", $today));
$smarty->assign("thisday", date("d", $today));
$output = $smarty->fetch($base . "templates/milliways_uri.tpl");
$smarty->assign("title", "Milliways URI");
$smarty->assign("body", $output);
$smarty->assign("extra_styles", "/css/milliways.css");
$smarty->assign("refresh", 120);
return;
}
if (strtolower($pathlist[$mwpath+1]) == "status") {
$today = FALSE;
$wantuser = FALSE;
if (isset($pathlist[$mwpath+2])) {
if ($pathlist[$mwpath+2] == "user" && isset($pathlist[$mwpath+3]))
$wantuser = $pathlist[$mwpath+3];
else
$today = strtotime($pathlist[$mwpath+2]);
}
if ($today === FALSE)
$today = time();
$smarty->assign("extra_scripts", array(
'<meta name="ROBOTS" content="NOINDEX" />',
'<meta name="ROBOTS" content="NOFOLLOW" />'));
$mwdb = new PDO('sqlite:/var/lib/mw/mwuri.db');
if ($wantuser !== FALSE) {
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwdoing where user=? order by added desc");
$res->execute(array($wantuser));
} else {
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwdoing where strftime('%Y-%m',added,'localtime')=? order by added desc");
$res->execute(array(date("Y-m",$today)));
}
//$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwdoing where date(added,'localtime')=? order by added desc");
//$res->execute(array(date("Y-m-d",$today)));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("statuslist", $data);
$res = $mwdb->prepare("select distinct strftime('%Y',added) from mwdoing");
$res->execute();
$yearlist = $res->fetchAll(PDO::FETCH_COLUMN,0);
$smarty->assign("yearlist",$yearlist);
$res= $mwdb->prepare("select distinct strftime('%m',added) from mwdoing where strftime('%Y',added) = ?");
$res->execute(array(date("Y",$today)));
$mlist = $res->fetchAll(PDO::FETCH_COLUMN,0);
$monthlist = array();
foreach( $mlist as $m) {
$monthlist[$m] = $cal['abbrevmonths'][(int)$m];
}
$smarty->assign("monthlist",$monthlist);
$res= $mwdb->prepare("select distinct strftime('%d',added) from mwdoing where strftime('%Y-%m',added) = ?");
$res->execute(array(date("Y-m",$today)));
$daylist = $res->fetchAll(PDO::FETCH_COLUMN,0);
$smarty->assign("daylist",$daylist);
$smarty->assign("thisyear", date("Y",$today));
$smarty->assign("thismonth", date("m",$today));
$smarty->assign("thisday", date("d",$today));
$output = $smarty->fetch($base."templates/milliways_status.tpl");
$smarty->assign("title", "Milliways Status");
$smarty->assign("body", $output);
$smarty->assign("extra_styles", "/css/milliways.css");
$smarty->assign("refresh", 120);
return;
if (strtolower($pathlist[$mwpath + 1]) == "status") {
$today = FALSE;
$wantuser = FALSE;
if (isset($pathlist[$mwpath + 2])) {
if ($pathlist[$mwpath + 2] == "user" && isset($pathlist[$mwpath + 3]))
$wantuser = $pathlist[$mwpath + 3];
else
$today = strtotime($pathlist[$mwpath + 2]);
}
if ($today === FALSE)
$today = time();
$smarty->assign("extra_scripts", array(
'<meta name="ROBOTS" content="NOINDEX" />',
'<meta name="ROBOTS" content="NOFOLLOW" />'));
$mwdb = new PDO('sqlite:/var/lib/mw/mwuri.db');
if ($wantuser !== FALSE) {
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwdoing where user=? order by added desc");
$res->execute(array($wantuser));
} else {
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwdoing where strftime('%Y-%m',added,'localtime')=? order by added desc");
$res->execute(array(date("Y-m", $today)));
}
//$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwdoing where date(added,'localtime')=? order by added desc");
//$res->execute(array(date("Y-m-d",$today)));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("statuslist", $data);
$res = $mwdb->prepare("select distinct strftime('%Y',added) from mwdoing");
$res->execute();
$yearlist = $res->fetchAll(PDO::FETCH_COLUMN, 0);
$smarty->assign("yearlist", $yearlist);
$res = $mwdb->prepare("select distinct strftime('%m',added) from mwdoing where strftime('%Y',added) = ?");
$res->execute(array(date("Y", $today)));
$mlist = $res->fetchAll(PDO::FETCH_COLUMN, 0);
$monthlist = array();
foreach ($mlist as $m) {
$monthlist[$m] = $cal['abbrevmonths'][(int)$m];
}
$smarty->assign("monthlist", $monthlist);
$res = $mwdb->prepare("select distinct strftime('%d',added) from mwdoing where strftime('%Y-%m',added) = ?");
$res->execute(array(date("Y-m", $today)));
$daylist = $res->fetchAll(PDO::FETCH_COLUMN, 0);
$smarty->assign("daylist", $daylist);
$smarty->assign("thisyear", date("Y", $today));
$smarty->assign("thismonth", date("m", $today));
$smarty->assign("thisday", date("d", $today));
$output = $smarty->fetch($base . "templates/milliways_status.tpl");
$smarty->assign("title", "Milliways Status");
$smarty->assign("body", $output);
$smarty->assign("extra_styles", "/css/milliways.css");
$smarty->assign("refresh", 120);
return;
}
if (strtolower($pathlist[$mwpath+1]) == "tag") {
$smarty->assign("extra_scripts", array(
'<meta name="ROBOTS" content="NOINDEX" />',
'<meta name="ROBOTS" content="NOFOLLOW" />'));
$mwdb = new PDO('sqlite:/var/lib/mw/mwuri.db');
if (isset($pathlist[$mwpath+2])) {
$res = $mwdb->prepare("select *, date(added) as day, substr(tag,2) as name from mwtag where tag=? order by added desc");
$res->execute(array('#'.$pathlist[$mwpath+2]));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("taglist", $data);
$output = $smarty->fetch($base."templates/milliways_tag.tpl");
} else {
$res = $mwdb->prepare("select distinct tag, substr(tag,2) as name, count(tag) as count from mwtag group by tag order by count(tag) desc limit 20");
$res->execute();
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("toplist", $data);
$res = $mwdb->prepare("select distinct tag, substr(tag,2) as name, count(tag) as count, max(added) as dated, date(max(added)) as day from mwtag group by tag order by max(added) desc limit 20");
$res->execute();
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("latestlist", $data);
$output = $smarty->fetch($base."templates/milliways_taglist.tpl");
}
$smarty->assign("title", "Milliways Tags");
$smarty->assign("body", $output);
$smarty->assign("extra_styles", "/css/milliways.css");
$smarty->assign("refresh", 120);
return;
if (strtolower($pathlist[$mwpath + 1]) == "tag") {
$smarty->assign("extra_scripts", array(
'<meta name="ROBOTS" content="NOINDEX" />',
'<meta name="ROBOTS" content="NOFOLLOW" />'));
$mwdb = new PDO('sqlite:/var/lib/mw/mwuri.db');
if (isset($pathlist[$mwpath + 2])) {
$res = $mwdb->prepare("select *, date(added) as day, substr(tag,2) as name from mwtag where tag=? order by added desc");
$res->execute(array('#' . $pathlist[$mwpath + 2]));
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("taglist", $data);
$output = $smarty->fetch($base . "templates/milliways_tag.tpl");
} else {
$res = $mwdb->prepare("select distinct tag, substr(tag,2) as name, count(tag) as count from mwtag group by tag order by count(tag) desc limit 20");
$res->execute();
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("toplist", $data);
$res = $mwdb->prepare("select distinct tag, substr(tag,2) as name, count(tag) as count, max(added) as dated, date(max(added)) as day from mwtag group by tag order by max(added) desc limit 20");
$res->execute();
$data = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("latestlist", $data);
$output = $smarty->fetch($base . "templates/milliways_taglist.tpl");
}
$smarty->assign("title", "Milliways Tags");
$smarty->assign("body", $output);
$smarty->assign("extra_styles", "/css/milliways.css");
$smarty->assign("refresh", 120);
return;
}
exec("/usr/bin/mw -who", $wholist, $ret);
......@@ -214,18 +215,18 @@ $people = array();
$idlers = array();
foreach ($wholist as $person) {
$pid = strtok($person, " ");
if ($pid == "" || $pid == "Name" || substr($pid,0,5)=="-----") continue;
if ($pid == "" || $pid == "Name" || substr($pid, 0, 5) == "-----") continue;
$person = array(
"username" => trim(substr($person, 1, 16)),
"idle" => trim(substr($person, 18, 6)),
"idleseconds" => parseIdleTime(trim(substr($person, 18, 6))),
"what" => substr($person,25));
if ($person['idleseconds'] > 10800) {
$idlers[] = $person;
} else {
$people[] = $person;
}
"username" => trim(substr($person, 1, 16)),
"idle" => trim(substr($person, 18, 6)),
"idleseconds" => parseIdleTime(trim(substr($person, 18, 6))),
"what" => substr($person, 25));
if ($person['idleseconds'] > 10800) {
$idlers[] = $person;
} else {
$people[] = $person;
}
}
usort($people, 'compare_idletime');
......@@ -238,9 +239,9 @@ $mwdb = new PDO('sqlite:/var/lib/mw/mwuri.db');
$res = $mwdb->prepare("select *, time(added,'localtime') as hour, date(added,'localtime') as day from mwuri order by added desc limit 5");
$res->execute();
$urilist = $res->fetchAll(PDO::FETCH_ASSOC);
foreach ($urilist as $k=>$v) {
if ($v['title'] == "") $urilist[$k]['title']=$v['url'];
$urilist[$k]['title']=filter_var(trim($urilist[$k]['title']),FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW);
foreach ($urilist as $k => $v) {
if ($v['title'] == "") $urilist[$k]['title'] = $v['url'];
$urilist[$k]['title'] = filter_var(trim($urilist[$k]['title']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW);
}
$smarty->assign("urilist", $urilist);
......@@ -249,11 +250,11 @@ $res->execute();
$taglist = $res->fetchAll(PDO::FETCH_ASSOC);
$smarty->assign("taglist", $taglist);
$smarty->assign("people",$people);
$smarty->assign("idlers",$idlers);
$output = $smarty->fetch($base."templates/milliways.tpl");
$smarty->assign("people", $people);
$smarty->assign("idlers", $idlers);
$output = $smarty->fetch($base . "templates/milliways.tpl");
$smarty->assign("title", "Milliways");
$smarty->assign("body", file_get_contents($base."static/fragments/Milliways.txt"));
$smarty->assign("body", file_get_contents($base . "static/fragments/Milliways.txt"));
$smarty->assign("secondary", $output);
$smarty->assign("refresh", 120);
?>
<?php
$motd_file = "/etc/motd";
function decode_entities($text, $quote_style = ENT_COMPAT) {
if (function_exists('html_entity_decode')) {
$text = html_entity_decode($text, $quote_style, 'ISO-8859-1'); // NOTE: UTF-8 does not work!
}
else {
$trans_tbl = get_html_translation_table(HTML_ENTITIES, $quote_style);
$trans_tbl = array_flip($trans_tbl);
$text = strtr($text, $trans_tbl);
}
$text = preg_replace('~&ndash\;~i', '-', $text);
$text = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $text);
$text = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $text);
return $text;
function decode_entities($text, $quote_style = ENT_COMPAT)
{
$text = html_entity_decode($text, $quote_style, 'ISO-8859-1'); // NOTE: UTF-8 does not work!
$text = preg_replace('~&ndash\;~i', '-', $text);
$text = preg_replace_callback('~&#x([0-9a-f]+);~i',
function ($matches) {
foreach ($matches as $match) {
return chr(hexdec($match));
}
},
$text);
$text = preg_replace_callback('~&#([0-9]+);~',
function ($matches) {
foreach ($matches as $match) {
return chr($match);
}
},
$text);
return $text;
}
//function to count and collect hyperlinks
$links_count = 0;
function linkcounter($uri) {
global $links_count, $uris;
$uris[++$links_count] = $uri;
return $links_count;
function linkcounter($uri)
{
global $links_count, $uris;
$uris[++$links_count] = $uri;
return $links_count;
}
$poemmode = 0;
$news = $DB->GetAll("SELECT * FROM news WHERE sticky=true AND expiry > now() ORDER BY date DESC");
if (count($news)<3) {
$news = $DB->GetAll("(SELECT * FROM news WHERE sticky=false AND expiry > now() ORDER by date DESC LIMIT ".(3-count($news)).") UNION SELECT * FROM news WHERE sticky=true AND expiry > now() ORDER BY date DESC");
if (count($news) < 3) {
$news = $DB->GetAll("(SELECT * FROM news WHERE sticky=false AND expiry > now() ORDER by date DESC LIMIT " . (3 - count($news)) . ") UNION SELECT * FROM news WHERE sticky=true AND expiry > now() ORDER BY date DESC");
}
if (count($news)<1) {
if (count($news) < 1) {
$news = $DB->GetAll("SELECT * FROM poems ORDER BY RANDOM() LIMIT 1");
$poemmode = 1;
}
$motd = "----------------------------- MESSAGE OF THE DAY ------------------------------\n\n";
for ($i=count($news)-1;$i>-1;$i--) {
$nitem = str_replace("\n", "", $news[$i]);
$nitem = str_replace("\r", "", $nitem);
$motd .= " ".$nitem['title']."\n";
$body = str_replace("</p>", "\n\n ", $nitem['body']);
$body = str_replace("<br />", "\n ", $body);
$body = str_replace("<li>", " * ", $body);
$body = str_replace("</li>", "\n ", $body);
$body = str_replace("&nbsp;", " ", $body);
$body = str_replace("&hellip;", "...", $body);
$body = str_replace("&apos;", "'", $body);
for ($i = count($news) - 1; $i > -1; $i--) {
$nitem = str_replace("\n", "", $news[$i]);
$nitem = str_replace("\r", "", $nitem);
$motd .= " " . $nitem['title'] . "\n";
$body = str_replace("</p>", "\n\n ", $nitem['body']);
$body = str_replace("<br />", "\n ", $body);
$body = str_replace("<li>", " * ", $body);
$body = str_replace("</li>", "\n ", $body);
$body = str_replace("&nbsp;", " ", $body);
$body = str_replace("&hellip;", "...", $body);
$body = str_replace("&apos;", "'", $body);
// remove hyperlinks, collect to display later
$body = preg_replace(":<a href=['\"](.+?)['\"].*?>(.*?)</a>:e", "'\\2['.linkcounter('\\1').']'", $body);
$body = strip_tags($body);
$body = decode_entities($body);
$body = wordwrap($body, 75, "\n ", 1);
$body = rtrim($body);
$motd .=" ".$body."\n";
if (isset($uris)) {
$footer = "----\n";
foreach ($uris as $urinum => $uri) {
$footer .= " [$urinum]: $uri\n";
//remove uri from list so it won't show up on the next post
unset($uris[$urinum]);
}
$motd .= " ".$footer;
}
$motd .= str_pad($nitem['author'], 78, " ", STR_PAD_LEFT)."\n";
$body = preg_replace_callback(":<a href=['\"](.+?)['\"].*?>(.*?)</a>:",
function ($matches) {
$i = linkcounter($matches[1]);
return $matches[0]."[".$i."]";
},
$body);
$body = strip_tags($body);
$body = decode_entities($body);
$body = wordwrap($body, 75, "\n ", 1);
$body = rtrim($body);
$motd .= " " . $body . "\n";
if (isset($uris)) {
$footer = "----\n";
foreach ($uris as $urinum => $uri) {
$footer .= " [$urinum]: $uri\n";
//remove uri from list so it won't show up on the next post
unset($uris[$urinum]);
}
$motd .= " " . $footer;
}
$motd .= str_pad($nitem['author'], 78, " ", STR_PAD_LEFT) . "\n";
if ($poemmode == 1 && $nitem['submitter'] != '') {
$motd .= str_pad("Submitted by ".$nitem['submitter'], 78, " ", STR_PAD_LEFT)."\n";
}
$motd .= "\n";
if ($poemmode == 1 && $nitem['submitter'] != '') {
$motd .= str_pad("Submitted by " . $nitem['submitter'], 78, " ", STR_PAD_LEFT) . "\n";
}
$motd .= "\n";
}
$motd .= "---------------------------- [ http://sucs.org/ ] -----------------------------\n";
//print($motd);
//if (time()-filemtime($motd_file) < 86000 && $poemmode == 1) { //86000 to allow a little slack depending on when cron runs
// print "MOTD too recent to replace with a poem!\n";
// print "MOTD too recent to replace with a poem!\n";
//} else {
file_put_contents($motd_file, $motd);
file_put_contents($motd_file, $motd);
//}
?>
?>
\ No newline at end of file
......@@ -4,11 +4,11 @@ require("/var/www/sucssite/htdocs/settings.php");
require("/usr/share/php/adodb/adodb.inc.php");
$dbname = 'sucssite';
$dbuser = 'apache';
$dbuser = 'sucs_site_user';
$DB = NewADOConnection('postgres8');
$DB->Connect('dbname='.$dbname.' user='.$dbuser);
$DB = NewADOConnection('postgres9');
$DB->Connect('dbname=' . $dbname . ' user=' . $dbuser);
$DB->SetCharSet('utf8');
$DB->SetFetchMode(ADODB_FETCH_ASSOC);
include($base."components/motd.php");
include($base . "components/motd.php");
<?
<?php
// guard against corrupt folder data
define("TOOBIG",102400);
define("TOOBIG", 102400);
function load_folders()
{
$f = fopen("/var/lib/mw/folders.bb", "r");
$folders = array();
while (!feof($f) && $fol=fread($f,64)) {
$data = unpack("Cstatus/A11name/A31topic/Cspare/Lfirst/Llast", $fol);
cleanup($data['name']);
cleanup($data['topic']);
if ($data['status'] & 0x01 && !($data['status']&0x20)) $folders[$data['name']] = $data;
}
fclose($f);
return $folders;
$f = fopen("/var/lib/mw/folders.bb", "r");
$folders = array();
while (!feof($f) && $fol = fread($f, 64)) {
$data = unpack("Cstatus/A11name/A31topic/Cspare/Lfirst/Llast", $fol);
cleanup($data['name']);
cleanup($data['topic']);
if ($data['status'] & 0x01 && !($data['status'] & 0x20)) $folders[$data['name']] = $data;
}
fclose($f);
return $folders;
}
function cleanup(&$foo)
{
$i=0;
$new = "";
while ($i < strlen($foo)) {
if ( ord($foo[$i]) == 0) break;
if (ctype_print($foo[$i]))
$new .= $foo[$i];
$i++;
}
$i = 0;
$new = "";
while ($i < strlen($foo)) {
if (ord($foo[$i]) == 0) break;
if (ctype_print($foo[$i]))
$new .= $foo[$i];
$i++;
}
// $foo = htmlentities($new);
$foo = $new;
$foo = $new;
}
function load_index($folname, $getbody=FALSE)
function load_index($folname, $getbody = FALSE)
{
$index = array();
$f = @fopen("/var/lib/mw/$folname.i", "r");
$body = @fopen("/var/lib/mw/$folname.t", "r");
if ($f === FALSE || $body === FALSE) return array();
while (!feof($f) && $fol=fread($f,128)) {
$data = unpack("Lref/Ldate/A17from/A41to/A41subject/c1spare/Ldatafield/Lsize/Cstatus/a3spare/Lreplyto/C4spare", $fol);
cleanup($data['subject']);
cleanup($data['to']);
cleanup($data['from']);
// not deleted, has data, and want it, so load the body
if (!( $data['status'] & 0x02)) {
if ($getbody && $data['size']>0 && $data['size'] < TOOBIG) {
fseek($body, $data['datafield']);
//$data['body'] = htmlentities(fread($body, $data['size']));
$data['body'] = fread($body, $data['size']);
}
$index[ $data['ref'] ] = $data;
}
}
fclose($f);
return $index;
$index = array();
$f = @fopen("/var/lib/mw/$folname.i", "r");
$body = @fopen("/var/lib/mw/$folname.t", "r");
if ($f === FALSE || $body === FALSE) return array();
while (!feof($f) && $fol = fread($f, 128)) {
$data = unpack("Lref/Ldate/A17from/A41to/A41subject/c1spare/Ldatafield/Lsize/Cstatus/a3spare/Lreplyto/C4spare", $fol);
cleanup($data['subject']);
cleanup($data['to']);
cleanup($data['from']);
// not deleted, has data, and want it, so load the body
if (!($data['status'] & 0x02)) {
if ($getbody && $data['size'] > 0 && $data['size'] < TOOBIG) {
fseek($body, $data['datafield']);
//$data['body'] = htmlentities(fread($body, $data['size']));
$data['body'] = fread($body, $data['size']);
}
$index[$data['ref']] = $data;
}
}
fclose($f);
return $index;
}
// Count how many articles are replies to this one
function count_sub(&$haystack, $ref)
{
$count = 0;
foreach($haystack as $k => $v)
{
if ($v['replyto'] == $ref) {
$count++;
$count += count_sub($haystack, $v['ref']);
}
}
return $count;
$count = 0;
foreach ($haystack as $k => $v) {
if ($v['replyto'] == $ref) {
$count++;
$count += count_sub($haystack, $v['ref']);
}
}
return $count;
}
function fetch_sub(&$all, $ref)
{
$sub = array();
foreach($all as $k => $v) {
if ($v['replyto'] == $ref) {
$sub[$k] = $v;
$sub = array_merge($sub, fetch_sub($all, $v['ref']));
}
}
return $sub;
$sub = array();
foreach ($all as $k => $v) {
if ($v['replyto'] == $ref) {
$sub[$k] = $v;
$sub = array_merge($sub, fetch_sub($all, $v['ref']));
}
}
return $sub;
}
function post_article($folder, $user, $replyto)
{
$folder = escapeshellarg($folder);
$f = popen("/usr/bin/mw -f $folder $user $replyto","w");
$to = strip_tags($_POST['to']);
$subject = strip_tags($_POST['subject']);
$body = strip_tags( $_POST['body']);
$to = preg_replace('/[^[:alnum:][:punct:][:space:]]*/','',trim($to));
$subject = preg_replace('/[^[:alnum:][:punct:][:space:]]*/','',trim($subject));
$body = preg_replace("/\n\\.\n","\n .\n/",$body);
$deb = fopen("/tmp/mwdebug.txt","w");
fwrite($deb, "folder: '$folder'\n");
fwrite($deb, "user: '$user'\n");
fwrite($deb, "replyto: '$replyto'\n");
fwrite($deb, "to: '$to'\n"); // Send to
fwrite($deb, "sub: '$subject'\n"); // subject
fwrite($deb,"body:\n$body\n.\n"); // end post
if ($replyto == 0) {
fwrite($f, "$to\n"); // Send to
fwrite($f, "$subject\n"); // subject
fwrite($f,"$body\n.\n"); // end post
} else {
fwrite($f, "$subject\n"); // subject
fwrite($f, "$to\n"); // send to
fwrite($f,"$body\n.\n"); // end post
}
$ret = pclose($f);
fwrite($deb, "Exit = ".($ret/256)."\n");
fclose($deb);
$folder = escapeshellarg($folder);
$f = popen("/usr/bin/mw -f $folder $user $replyto", "w");
$to = strip_tags($_POST['to']);
$subject = strip_tags($_POST['subject']);
$body = strip_tags($_POST['body']);
$to = preg_replace('/[^[:alnum:][:punct:][:space:]]*/', '', trim($to));
$subject = preg_replace('/[^[:alnum:][:punct:][:space:]]*/', '', trim($subject));
$body = preg_replace("/\n\\.\n", "\n .\n/", $body);
$deb = fopen("/tmp/mwdebug.txt", "w");
fwrite($deb, "folder: '$folder'\n");
fwrite($deb, "user: '$user'\n");
fwrite($deb, "replyto: '$replyto'\n");
fwrite($deb, "to: '$to'\n"); // Send to
fwrite($deb, "sub: '$subject'\n"); // subject
fwrite($deb, "body:\n$body\n.\n"); // end post
if ($replyto == 0) {
fwrite($f, "$to\n"); // Send to
fwrite($f, "$subject\n"); // subject
fwrite($f, "$body\n.\n"); // end post
} else {
fwrite($f, "$subject\n"); // subject
fwrite($f, "$to\n"); // send to
fwrite($f, "$body\n.\n"); // end post
}
$ret = pclose($f);
fwrite($deb, "Exit = " . ($ret / 256) . "\n");
fclose($deb);
}
if (!$session->loggedin) {
$smarty->assign("title", "Milliways");
$smarty->assign("body", "Sorry, you must be logged in for this feature");
return;
$smarty->assign("title", "Milliways");
$smarty->assign("body", "Sorry, you must be logged in for this feature");
return;
}
$folders = load_folders();
......@@ -134,92 +133,92 @@ $smarty->assign("extra_styles", array("/css/forum/SUCS.css"));
unset($mode);
$last = end($pathlist);
if ($last == "new" || $last == "reply") {
$mode = $last;
array_pop($pathlist);
$path = implode("/",$pathlist);
/* $smarty->assign("extra_scripts", array(
'<script language="javascript" type="text/javascript" src="/js/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>',
'<script language="javascript" type="text/javascript" src="/js/tiny_mce.js"></script>'
));
*/
$mode = $last;
array_pop($pathlist);
$path = implode("/", $pathlist);
/* $smarty->assign("extra_scripts", array(
'<script language="javascript" type="text/javascript" src="/js/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>',
'<script language="javascript" type="text/javascript" src="/js/tiny_mce.js"></script>'
));
*/
}
if ($last == "post") {
$mode = $last;
array_pop($pathlist);
$path = implode("/",$pathlist);
$mode = $last;
array_pop($pathlist);
$path = implode("/", $pathlist);
}
$smarty->assign("mode",$mode);
$smarty->assign("mode", $mode);
$shortpathlist = $pathlist;
array_pop($shortpathlist);
$shortpath = implode("/",$shortpathlist);
$smarty->assign("shortpath",$shortpath);
$shortpath = implode("/", $shortpathlist);
$smarty->assign("shortpath", $shortpath);
if (isset($pathlist[3])) {
$name = $pathlist[3];
if (isset($folders[$name])) {
$smarty->assign("folder", $folders[$name]['name']);
$all = load_index($name, TRUE);
// One specific article was mentioned
if (isset($pathlist[4])) {
$artno = (int)$pathlist[4];
if (isset($all[$artno])) {
if ($mode == "post") {
post_article($name, $session->username, $artno);
$all = load_index($name, TRUE);
}
$smarty->assign("title", "Milliways");
$smarty->assign_by_ref("message", $all[$artno]);
$sub = fetch_sub($all, $all[$artno]['ref']);
$smarty->assign_by_ref("articles", $sub);
$smarty->assign("howmany",count($sub));
$output = $smarty->fetch($base."templates/mw-article.tpl");
}
} else {
if ($mode == "post") {
post_article($name, $session->username, 0);
$all = load_index($name, TRUE);
}
// list all the articles in this folder
$top = array();
foreach ($all as $k => $v) {
if ($v['replyto'] == 0 ) {
$v['suball'] = fetch_sub($all,$v['ref']);
$v['sub'] = count($v['suball']);
$l = end($v['suball']);
$v['lastpost'] = $l['date'];
$v['lastfrom'] = $l['from'];
$top[$k]=$v;
}
}
$top = array_reverse($top);
$smarty->assign("title", htmlentities("Milliways - Folder $name"));
$smarty->assign_by_ref("articles", $top);
$output = $smarty->fetch($base."templates/mw-list.tpl");
}
} else {
$output = "Error, no such folder $name";
}
$smarty->assign("body", $output);
$name = $pathlist[3];
if (isset($folders[$name])) {
$smarty->assign("folder", $folders[$name]['name']);
$all = load_index($name, TRUE);
// One specific article was mentioned
if (isset($pathlist[4])) {
$artno = (int)$pathlist[4];
if (isset($all[$artno])) {
if ($mode == "post") {
post_article($name, $session->username, $artno);
$all = load_index($name, TRUE);
}
$smarty->assign("title", "Milliways");
$smarty->assign_by_ref("message", $all[$artno]);
$sub = fetch_sub($all, $all[$artno]['ref']);
$smarty->assign_by_ref("articles", $sub);
$smarty->assign("howmany", count($sub));
$output = $smarty->fetch($base . "templates/mw-article.tpl");
}
} else {
if ($mode == "post") {
post_article($name, $session->username, 0);
$all = load_index($name, TRUE);
}
// list all the articles in this folder
$top = array();
foreach ($all as $k => $v) {
if ($v['replyto'] == 0) {
$v['suball'] = fetch_sub($all, $v['ref']);
$v['sub'] = count($v['suball']);
$l = end($v['suball']);
$v['lastpost'] = $l['date'];
$v['lastfrom'] = $l['from'];
$top[$k] = $v;
}
}
$top = array_reverse($top);
$smarty->assign("title", htmlentities("Milliways - Folder $name"));
$smarty->assign_by_ref("articles", $top);
$output = $smarty->fetch($base . "templates/mw-list.tpl");
}
} else {
$output = "Error, no such folder $name";
}
$smarty->assign("body", $output);
} else {
// List all the folders
foreach($folders as $k => $v) {
$list = load_index($v['name']);
$topics = 0;
foreach ($list as $art) if ($art['replyto'] == 0) $topics++;
$folders[$k]['topics'] = $topics;
$lastone = end($list);
$folders[$k]['lastpost'] = $lastone['date'];
}
$smarty->assign("title", "Milliways - Topic List");
$output = $smarty->fetch($base."templates/mw-folders.tpl");
$smarty->assign("body", $output);
// List all the folders
foreach ($folders as $k => $v) {
$list = load_index($v['name']);
$topics = 0;
foreach ($list as $art) if ($art['replyto'] == 0) $topics++;
$folders[$k]['topics'] = $topics;
$lastone = end($list);
$folders[$k]['lastpost'] = $lastone['date'];
}
$smarty->assign("title", "Milliways - Topic List");
$output = $smarty->fetch($base . "templates/mw-folders.tpl");
$smarty->assign("body", $output);
}
?>
<?php
// Ensure we have a trailing slash so that relative links within the page work
if ($_SERVER['PATH_INFO']=="/News") header("Location: ".$baseurl."/News/");
if ($_SERVER['PATH_INFO'] == "/News") header("Location: " . $baseurl . "/News/");
// A user must be in the staff group in order to edit content in this component
$permission = "sucsstaff";
......@@ -8,39 +8,39 @@ $newstable = "news";
if (isset($session->groups[$permission])) {
// display Edit links on page
$smarty->assign("editable", TRUE);
switch (@$_REQUEST['action']) {
case "Save":
$record['title'] = $_REQUEST['edittitle'];
$record['body'] = $_REQUEST['body'];
if (isset($_REQUEST['sticky']))
$record['sticky'] = 't';
else
$record['sticky'] = 'f';
$smarty->assign("editable", TRUE);
switch (@$_REQUEST['action']) {
case "Save":
$record['title'] = $_REQUEST['edittitle'];
$record['body'] = $_REQUEST['body'];
if (isset($_REQUEST['sticky']))
$record['sticky'] = 't';
else
$record['sticky'] = 'f';
if ($_REQUEST['id']=="*") {
$record['author'] = $session->username;
$record['date'] = "now";
$DB->AutoExecute($newstable, $record, 'INSERT');
} else {
$DB->AutoExecute($newstable, $record, 'UPDATE', "id=".$DB->qstr($_REQUEST['id']));
}
include("motd.php");
if ($_REQUEST['id'] == "*") {
$record['author'] = $session->username;
$record['date'] = "now";
$DB->AutoExecute($newstable, $record, 'INSERT');
} else {
$DB->AutoExecute($newstable, $record, 'UPDATE', "id=" . $DB->qstr($_REQUEST['id']));
}
include("motd.php");
break;
case "Delete":
$deleted = $DB->Execute("DELETE FROM $newstable WHERE id=?", array($_REQUEST['id']));
include("motd.php");
break;
case "Expire":
$expired = $DB->Execute("UPDATE $newstable SET expiry=now() WHERE id=?", array($_REQUEST['id']));
include("motd.php");
break;
}
break;
case "Delete":
$deleted = $DB->Execute("DELETE FROM $newstable WHERE id=?", array($_REQUEST['id']));
include("motd.php");
break;
case "Expire":
$expired = $DB->Execute("UPDATE $newstable SET expiry=now() WHERE id=?", array($_REQUEST['id']));
include("motd.php");
break;
}
}
$query = "SELECT *, date_part('epoch', expiry) AS expirytime FROM news";
if (@$pathlist[2]!="") $query .= " WHERE title=".$DB->qstr($pathlist[2]);
if (@$pathlist[2] != "") $query .= " WHERE title=" . $DB->qstr($pathlist[2]);
$query .= " ORDER BY date DESC";
$smarty->assign("news", $DB->GetArray($query));
......@@ -50,25 +50,25 @@ $smarty->assign("title", "News");
if (isset($session->groups[$permission])) {
// Perform any requested actions
switch (@$_REQUEST['action']) {
case "create":
$news = array(array("id" => "*"));
$smarty->assign("news", $news);
case "edit":
$output = $smarty->fetch("news_edit.tpl");
$smarty->assign("action", "edit");
$smarty->assign("title", "Edit News");
break;
case "delete-query":
$output = $smarty->fetch('news_delete.tpl').$output;
break;
case "expire-query":
$output = $smarty->fetch('news_expire.tpl').$output;
break;
case "Delete":
if ($deleted) $output = "News item deleted";
break;
}
switch (@$_REQUEST['action']) {
case "create":
$news = array(array("id" => "*"));
$smarty->assign("news", $news);
case "edit":
$output = $smarty->fetch("news_edit.tpl");
$smarty->assign("action", "edit");
$smarty->assign("title", "Edit News");
break;
case "delete-query":
$output = $smarty->fetch('news_delete.tpl') . $output;
break;
case "expire-query":
$output = $smarty->fetch('news_expire.tpl') . $output;
break;
case "Delete":
if ($deleted) $output = "News item deleted";
break;
}
}
$smarty->assign("body", $output);
......
......@@ -5,208 +5,220 @@ require_once("../lib/validation.php");
require_once("Net/MAC.php");
include_once("../lib/date.php");
// password hash, renewal functions
include_once("../lib/member_functions.php");
// Some Constants
// These could possibly be moved somewhere saner?
define('GUESTNET_LOW','137.44.10.130'); // These could possibly be a set of ranges or a subnet which might be saner?
define('GUESTNET_HIGH','137.44.10.134'); // These could possibly be a set of ranges or a subnet which might be saner?
define('GUESTNET_LOW', '137.44.10.130'); // These could possibly be a set of ranges or a subnet which might be saner?
define('GUESTNET_HIGH', '137.44.10.134'); // These could possibly be a set of ranges or a subnet which might be saner?
// Helper Functions
// Could these be moved to some kind of library?
// Set next payment date
$paydate = "Sept. ".(academicYear(time())+1);
$paydate = "Sept. " . (academicYear(time()) + 1);
// function to change a user's password
function changePassword ($oldpass, $newpass1, $newpass2) {
global $session;
if ($newpass1 !== $newpass2) {
// new passwords do not match!
trigger_error("New passwords do not match", E_USER_WARNING);
return FALSE;
}
$reason = weakPassword($newpass1);
if ($reason !== FALSE) {
trigger_error("New password is weak: $reason", E_USER_WARNING);
return FALSE;
}
if (!($ldap = @ldap_connect("ldap://localhost"))) {
trigger_error("LDAP connect failed", E_USER_ERROR);
return FALSE;
}
if (!($ldapbind = ldap_bind($ldap, "uid=".$session->username.",ou=People,dc=sucs,dc=org",$oldpass))) {
trigger_error("Existing password incorrect", E_USER_WARNING);
ldap_close($ldap);
return FALSE;
}
// if everything looks OK, attempt to make the change
$success = ldap_mod_replace ($ldap, "uid=".$session->username.",ou=People,dc=sucs,dc=org",
array('userpassword' => "{SHA}".base64_encode(pack("H*", sha1($newpass1)))));
ldap_close($ldap);
return $success;
function changePassword($oldpass, $newpass1, $newpass2)
{
global $session;
if ($newpass1 !== $newpass2) {
// new passwords do not match!
trigger_error("New passwords do not match", E_USER_WARNING);
return FALSE;
}
$reason = weakPassword($newpass1);
if ($reason !== FALSE) {
trigger_error("New password is weak: $reason", E_USER_WARNING);
return FALSE;
}
if (!($ldap = @ldap_connect("ldap://localhost"))) {
trigger_error("LDAP connect failed", E_USER_ERROR);
return FALSE;
}
if (!($ldapbind = ldap_bind($ldap, "uid=" . $session->username . ",ou=People,dc=sucs,dc=org", $oldpass))) {
trigger_error("Existing password incorrect", E_USER_WARNING);
ldap_close($ldap);
return FALSE;
}
// if everything looks OK, attempt to make the change
$success = ldap_mod_replace($ldap, "uid=" . $session->username . ",ou=People,dc=sucs,dc=org",
array('userpassword' => "{CRYPT}" . cryptPassword($newpass1)));
ldap_close($ldap);
return $success;
}
// function to update contact details
function changeContactDetails($address, $phone, $externalEmail) {
global $sucsDB, $session, $error;
// Do some kind of checking here
// Check valid email (do we have a function for this?
if (!validEmail($externalEmail))
return FALSE; // Valid Email handles errors itself
// Check valid phone number (do we have a function for this?)
if (empty($phone) || (strlen($phone) < 6)) {
trigger_error("You must have a contact phone number!", E_USER_WARNING);
return FALSE;
}
// Update
if ($sucsDB->Execute('UPDATE members SET address = ?,phone = ?, email = ?, lastupdate = now(), lastedit = uid WHERE username = ?',
array($address, $phone, $externalEmail, $session->username)) === FALSE) {
trigger_error("There was an error updating your contact details. Please contact admin.", E_USER_ERROR);
return FALSE;
}
return TRUE;
function changeContactDetails($address, $phone, $externalEmail)
{
global $sucsDB, $session, $error;
// Do some kind of checking here
// Check valid email (do we have a function for this?
if (!validEmail($externalEmail))
return FALSE; // Valid Email handles errors itself
// Check valid phone number (do we have a function for this?)
if (empty($phone) || (strlen($phone) < 6)) {
trigger_error("You must have a contact phone number!", E_USER_WARNING);
return FALSE;
}
// Update
if ($sucsDB->Execute('UPDATE members SET address = ?,phone = ?, email = ?, lastupdate = now(), lastedit = uid WHERE username = ?',
array($address, $phone, $externalEmail, $session->username)) === FALSE
) {
trigger_error("There was an error updating your contact details. Please contact admin.", E_USER_ERROR);
return FALSE;
}
return TRUE;
}
function changeGuestnetDetails($wiredMAC) {
global $sucsDB, $session, $error;
// Get UID as we don't have it yet
if(($uid = $sucsDB->GetOne("SELECt uid FROM members WHERE username = ?", array($session->username))) === FALSE) {
trigger_error("There was an error updating your GuestNET MAC Address. Please contact admin. (UID)", E_USER_ERROR);
return FALSE;
}
// Replace the guestnet record with the one with the new mac
if (!$sucsDB->Replace('guestnet', array('mac' => "'$wiredMAC'", 'uid' => $uid), 'uid')) {
trigger_error("There was an error updating your GuestNET MAC Address. Please contact admin. (QUERY)", E_USER_ERROR);
return FALSE;
}
exec('/usr/local/bin/update-dhcpd', $placeholder, $returnVar);
if ($returnVar == 0) {
return TRUE;
// $message[] = 'GuestNet MAC Address updated. Please wait a minute or two for the changes to take effect.';
} else {
trigger_error("There was an error updating your GuestNet Mac Address. Please contact admin. (RETURNVAR)", E_USER_ERROR);
return FALSE;
}
function changeGuestnetDetails($wiredMAC)
{
global $sucsDB, $session, $error;
// Get UID as we don't have it yet
if (($uid = $sucsDB->GetOne("SELECt uid FROM members WHERE username = ?", array($session->username))) === FALSE) {
trigger_error("There was an error updating your GuestNET MAC Address. Please contact admin. (UID)", E_USER_ERROR);
return FALSE;
}
// Replace the guestnet record with the one with the new mac
if (!$sucsDB->Replace('guestnet', array('mac' => "'$wiredMAC'", 'uid' => $uid), 'uid')) {
trigger_error("There was an error updating your GuestNET MAC Address. Please contact admin. (QUERY)", E_USER_ERROR);
return FALSE;
}
exec('/usr/local/bin/update-dhcpd', $placeholder, $returnVar);
if ($returnVar == 0) {
return TRUE;
// $message[] = 'GuestNet MAC Address updated. Please wait a minute or two for the changes to take effect.';
} else {
trigger_error("There was an error updating your GuestNet Mac Address. Please contact admin. (RETURNVAR)", E_USER_ERROR);
return FALSE;
}
}
// Checks whether the given string mac address is valid
function isValidMACAddr($mac) {
function isValidMACAddr($mac)
{
if (Net_MAC::check($mac)) {
return TRUE;
}else{
} else {
return FALSE;
}
}
// Returns the users GuestNet MAC Address if they have one and false otherwise
function getGuestNetMAC() {
$ip = trim($_SERVER['REMOTE_ADDR']);
// Sanity Check ip?
// Check we are in the correct ip range (unregistered GuestNET addresses)
if (ip2long($ip) && (ip2long($ip) >= ip2long(GUESTNET_LOW)) && (ip2long($ip) <= ip2long(GUESTNET_HIGH))) {
exec("sudo /usr/local/sbin/gw-copy-arp.sh", $placeholder, $returnVar);
if ($returnVar == 0) {
$arpLines = file('/tmp/gwarp');
foreach ($arpLines as $arpLine) {
$arpFields = preg_split('/[\s\t\n]+/', $arpLine);
if ($arpFields[0] == $ip) {
// Perhaps do some checking on the mac here?
if (isValidMACAddr($arpFields[3]))
return $arpFields[3];
else
break;
}
}
}
// We didn't find their mac address :\
trigger_error("There was an error finding your MAC Address. Please contact admin.", E_USER_ERROR);
return FALSE;
} else {
return FALSE;
}
function getGuestNetMAC()
{
$ip = trim($_SERVER['REMOTE_ADDR']);
// Sanity Check ip?
// Check we are in the correct ip range (unregistered GuestNET addresses)
if (ip2long($ip) && (ip2long($ip) >= ip2long(GUESTNET_LOW)) && (ip2long($ip) <= ip2long(GUESTNET_HIGH))) {
exec("sudo /usr/local/sbin/gw-copy-arp.sh", $placeholder, $returnVar);
if ($returnVar == 0) {
$arpLines = file('/tmp/gwarp');
foreach ($arpLines as $arpLine) {
$arpFields = preg_split('/[\s\t\n]+/', $arpLine);
if ($arpFields[0] == $ip) {
// Perhaps do some checking on the mac here?
if (isValidMACAddr($arpFields[3]))
return $arpFields[3];
else
break;
}
}
}
// We didn't find their mac address :\
trigger_error("There was an error finding your MAC Address. Please contact admin.", E_USER_ERROR);
return FALSE;
} else {
return FALSE;
}
}
// Delete the user's hackergotchi file cause they've decided they're too embarrassed by it
function clearHackergotchi() {
global $session;
$imagefilepath = hackergotchiPath($session->username);
if (unlink(realpath($imagefilepath))) {
return true;
} else {
trigger_error("Unable to remove hackergotchi file", E_USER_ERROR);
return false;
}
function clearHackergotchi()
{
global $session;
$imagefilepath = hackergotchiPath($session->username);
if (unlink(realpath($imagefilepath))) {
return true;
} else {
trigger_error("Unable to remove hackergotchi file", E_USER_ERROR);
return false;
}
}
// construct the filesystem path to a user's hackergotchi picture
function hackergotchiPath($username) {
global $base;
$path = $base."htdocs/pictures/people/".$username.".png";
return $path;
function hackergotchiPath($username)
{
global $base;
$path = $base . "htdocs/pictures/people/" . $username . ".png";
return $path;
}
// Takes an entry from $_FILES and makes this the new hackergotchi
function updateHackergotchi($fileDetails) {
global $session;
if ( ((list($width, $height, $type, $attr) = @getimagesize($fileDetails['tmp_name'])) !== false)) {
if ($type != IMAGETYPE_PNG) {
trigger_error("Uploaded hackergotchi is not in PNG format. Please convert your image to PNG and try again.", E_USER_ERROR);
return FALSE;
} else if (($width > 128) || ($height > 128)) {
trigger_error("Uploaded hackergotchi is too large. Hackergotchis must be 128x128 pixels or smaller.", E_USER_ERROR);
return FALSE;
}
$imagefilepath = hackergotchiPath($session->username);
// Move uploaded hackergotchi into place
if( move_uploaded_file($fileDetails['tmp_name'], $imagefilepath) && chmod($imagefilepath, 0644) ) {
return TRUE;
}
}
// We should have returned True by now
trigger_error("There was an error updating your hackergotchi. Please contact admin.", E_USER_ERROR);
return FALSE;
function updateHackergotchi($fileDetails)
{
global $session;
if (((list($width, $height, $type, $attr) = @getimagesize($fileDetails['tmp_name'])) !== false)) {
if ($type != IMAGETYPE_PNG) {
trigger_error("Uploaded hackergotchi is not in PNG format. Please convert your image to PNG and try again.", E_USER_ERROR);
return FALSE;
} else if (($width > 128) || ($height > 128)) {
trigger_error("Uploaded hackergotchi is too large. Hackergotchis must be 128x128 pixels or smaller.", E_USER_ERROR);
return FALSE;
}
$imagefilepath = hackergotchiPath($session->username);
// Move uploaded hackergotchi into place
if (move_uploaded_file($fileDetails['tmp_name'], $imagefilepath) && chmod($imagefilepath, 0644)) {
return TRUE;
}
}
// We should have returned True by now
trigger_error("There was an error updating your hackergotchi. Please contact admin.", E_USER_ERROR);
return FALSE;
}
function updateRenew() {
global $sucsDB, $session, $error;
global $paydate;
if (!isset($_REQUEST['userid']) || !isset($_REQUEST['supass'])) {
trigger_error("Invalid renewal info", E_USER_ERROR);
return FALSE;
}
$userid = (int)$_REQUEST['userid'];
$pass = $_REQUEST['supass'];
$member = $sucsDB->GetRow("select * from members left join member_type on members.type=member_type.id where username='".$session->username."'");
$signup = $sucsDB->GetRow("select * from signup where id=?", array($userid));
if (!is_array($signup) || count($signup) < 1) {
trigger_error("Invalid renewal info", E_USER_ERROR);
return FALSE;
}
if ($signup['password'] != $pass) {
trigger_error("Invalid renewal info", E_USER_ERROR);
return FALSE;
}
if ($signup['activated'] != NULL) {
trigger_error("Signup slip already used", E_USER_ERROR);
return FALSE;
}
$sucsDB->Execute("update members set paid=?, lastupdate=DEFAULT, lastedit=uid where uid=?", array($paydate, $member['uid']));
$sucsDB->Execute("update signup set activated=NOW(), username=? where id=?", array($member['username'], $signup['id']));
return TRUE;
function updateRenew()
{
global $sucsDB, $session, $error;
global $paydate;
if (!isset($_REQUEST['userid']) || !isset($_REQUEST['supass'])) {
trigger_error("Invalid renewal info", E_USER_ERROR);
return FALSE;
}
$userid = (int)$_REQUEST['userid'];
$pass = $_REQUEST['supass'];
$member = $sucsDB->GetRow("select * from members left join member_type on members.type=member_type.id where username='" . $session->username . "'");
$signup = $sucsDB->GetRow("select * from signup where id=?", array($userid));
if (!is_array($signup) || count($signup) < 1) {
trigger_error("Invalid renewal info", E_USER_ERROR);
return FALSE;
}
if ($signup['password'] != $pass) {
trigger_error("Invalid renewal info", E_USER_ERROR);
return FALSE;
}
if ($signup['activated'] != NULL) {
trigger_error("Signup slip already used", E_USER_ERROR);
return FALSE;
}
renew_membership($member['username']);
$sucsDB->Execute("update signup set activated=NOW(), username=? where id=?", array($member['username'], $signup['id']));
return TRUE;
}
// Template Setup
......@@ -217,69 +229,69 @@ if ($session->loggedin === TRUE) {
// $sucsDB->debug = true;
$newGuestNetMAC = getGuestNetMAC();
// Handle Postbacks
if (isset($_POST['action'])) {
switch($_POST['action']) {
case 'changepass' :
if (changePassword($_POST['oldpass'], $_POST['newpass1'], $_POST['newpass2'])) {
message_flash('Password changed.');
} else {
// Should we log something here for bug trcaking use?
trigger_error("Password change failed.", E_USER_WARNING);
}
break;
case 'changecontact' :
if(changeContactDetails($_POST['address'], $_POST['phone'], $_POST['email'])) {
message_flash('Contact Details Updated.');
}
break;
case 'changeguestnet' :
if(changeGuestNetDetails($newGuestNetMAC)) {
message_flash('GuestNet Details Updated!');
}
break;
case 'updatehackergotchi' :
if (updateHackergotchi($_FILES['hackergotchi'])) {
message_flash('Hackergotchi Updated');
}
break;
case 'clearhackergotchi' :
if (clearHackergotchi()) {
message_flash('Hackergotchi Cleared');
}
break;
case 'renew' :
if (updateRenew()) {
message_flash('Account renewed');
}
break;
}
}
// Display Details
// Some checking could be done here to ensure we have a members record. Ideally we should
// be able to assume this though if they are logged in.
if (is_file($base."htdocs/pictures/people/".$session->username.".png")) $smarty->assign('hackergotchi', TRUE);
$member = $sucsDB->GetRow("select * from members left join member_type on members.type=member_type.id where username='".$session->username."'");
$smarty->assign('paydate', $paydate);
if(($currentGuestNetMAC = $sucsDB->GetOne('SELECT * FROM guestnet WHERE uid=?', array((int)$member['uid']))) !== FALSE) {
$smarty->assign('currentGuestNetMAC', $currentGuestNetMAC);
} else {
$smarty->assign('currentGuestNetMAC', '');
}
if (($newGuestNetMAC !== false) && ($newGuestNetMAC != $currentGuestNetMAC)) {
$smarty->assign('newGuestNetMAC', $newGuestNetMAC);
}
$smarty->assign('member', $member);
$newGuestNetMAC = getGuestNetMAC();
// Handle Postbacks
if (isset($_POST['action'])) {
switch ($_POST['action']) {
case 'changepass' :
if (changePassword($_POST['oldpass'], $_POST['newpass1'], $_POST['newpass2'])) {
message_flash('Password changed.');
} else {
// Should we log something here for bug trcaking use?
trigger_error("Password change failed.", E_USER_WARNING);
}
break;
case 'changecontact' :
if (changeContactDetails($_POST['address'], $_POST['phone'], $_POST['email'])) {
message_flash('Contact Details Updated.');
}
break;
case 'changeguestnet' :
if (changeGuestNetDetails($newGuestNetMAC)) {
message_flash('GuestNet Details Updated!');
}
break;
case 'updatehackergotchi' :
if (updateHackergotchi($_FILES['hackergotchi'])) {
message_flash('Hackergotchi Updated');
}
break;
case 'clearhackergotchi' :
if (clearHackergotchi()) {
message_flash('Hackergotchi Cleared');
}
break;
case 'renew' :
if (updateRenew()) {
message_flash('Account renewed');
}
break;
}
}
// Display Details
// Some checking could be done here to ensure we have a members record. Ideally we should
// be able to assume this though if they are logged in.
if (is_file($base . "htdocs/pictures/people/" . $session->username . ".png")) $smarty->assign('hackergotchi', TRUE);
$member = $sucsDB->GetRow("select * from members left join member_type on members.type=member_type.id where username='" . $session->username . "'");
$smarty->assign('paydate', $paydate);
if (($currentGuestNetMAC = $sucsDB->GetOne('SELECT * FROM guestnet WHERE uid=?', array((int)$member['uid']))) !== FALSE) {
$smarty->assign('currentGuestNetMAC', $currentGuestNetMAC);
} else {
$smarty->assign('currentGuestNetMAC', '');
}
if (($newGuestNetMAC !== false) && ($newGuestNetMAC != $currentGuestNetMAC)) {
$smarty->assign('newGuestNetMAC', $newGuestNetMAC);
}
$smarty->assign('member', $member);
}
......
<?php
$permission="html";
$permission = "html";
// Only html group members can use this page - horrible emergency bodge
if (isset($session->groups[$permission])) {
......@@ -10,28 +10,28 @@ if (isset($session->groups[$permission])) {
unset($output);
if (@$pathlist[3] == "Edit") {
if (isset($_REQUEST['mapid'])) {
$id = (int)$_REQUEST['mapid'];
$res = $DB->GetAll("SELECT * FROM pagemap where id=?", array($id));
if ($res && count($res) > 0) {
$smarty->assign("oldmap",$res[0]);
$output = $smarty->fetch($base."templates/pagemap_edit.tpl");
} else {
header("Location: /Admin/Pagemap");
exit;
}
} else {
header("Location: /Admin/Pagemap");
exit;
}
}
if (isset($_REQUEST['mapid'])) {
$id = (int)$_REQUEST['mapid'];
$res = $DB->GetAll("SELECT * FROM pagemap where id=?", array($id));
if ($res && count($res) > 0) {
$smarty->assign("oldmap", $res[0]);
$output = $smarty->fetch($base . "templates/pagemap_edit.tpl");
} else {
header("Location: /Admin/Pagemap");
exit;
}
} else {
header("Location: /Admin/Pagemap");
exit;
}
}
}
if (!isset($output)) {
$smarty->assign("map",$DB->GetAll("SELECT * FROM pagemap ORDER BY depth, path"));
$output = $smarty->fetch($base."templates/pagemap.tpl");
$smarty->assign("map", $DB->GetAll("SELECT * FROM pagemap ORDER BY depth, path"));
$output = $smarty->fetch($base . "templates/pagemap.tpl");
}
$smarty->assign("title", "Page Map");
$smarty->assign("body", $output);
......
......@@ -2,29 +2,29 @@
/**
* Notes :
* % Need to either a) install Text_Highlighter as a PEAR module properly or b) alter it so
* that it can be included properly without having a Text/ directory at the same level
* % Need to either a) install Text_Highlighter as a PEAR module properly or b) alter it so
* that it can be included properly without having a Text/ directory at the same level
* as the index file.
* % Needs some form of cron job or similar to remove old entries
* * This would seem preferable to running a delete query every page view
* * The retain_until field is there and set by the script so
* the framework is there for removal.
* * Rather than using a cron job this could be done using a simple timestamp stored in a php
* file which could be included (ie $timestamp = X, then include that and
* if($timestamp >= now()) { delete query }
* % Preventing XSS in User input needed
* * Should be handled by any User Auth
* % Needs Checking for Aeternus-Brand Stupidity
* * This would seem preferable to running a delete query every page view
* * The retain_until field is there and set by the script so
* the framework is there for removal.
* * Rather than using a cron job this could be done using a simple timestamp stored in a php
* file which could be included (ie $timestamp = X, then include that and
* if($timestamp >= now()) { delete query }
* % Preventing XSS in User input needed
* * Should be handled by any User Auth
* % Needs Checking for Aeternus-Brand Stupidity
* Fixed :
* % Problem with strtotime() not parsing PostGres timestamps
* set field type to timestamp(0) to remove fractional seconds
* % Added User Authentication using pwauth
* * Could still do with session handling
* % Frosty mentioned it wasn't using a monospace font
* * Simply made all text within the .hl-main block use the
* Courier New Monospace font
* * Could possibly offer the user more customisation in terms of
* how they want things displayed (necessary??)
* % Problem with strtotime() not parsing PostGres timestamps
* set field type to timestamp(0) to remove fractional seconds
* % Added User Authentication using pwauth
* * Could still do with session handling
* % Frosty mentioned it wasn't using a monospace font
* * Simply made all text within the .hl-main block use the
* Courier New Monospace font
* * Could possibly offer the user more customisation in terms of
* how they want things displayed (necessary??)
*/
......@@ -34,31 +34,31 @@
// Config
define('_LIST_LIMIT', 15);
// Defined so we can customise them to whatever we like
define('_BASE_PATH', 'https://'.$_SERVER['SERVER_NAME'].'/');
define('_BASE_PATH', 'https://' . $_SERVER['SERVER_NAME'] . '/');
define('_SCRIPT_NAME', 'PasteBin/');
define('_TABLE_NAME', 'pastebin');
$smarty->assign('urifragment', '/Tools/PasteBin/');
$pburi = 'https://'.$_SERVER['SERVER_NAME'].$baseurl;
$smarty->assign('uri', $pburi.'/pb/');
$pburi = 'https://' . $_SERVER['SERVER_NAME'] . $baseurl;
$smarty->assign('uri', $pburi . '/pb/');
// Init
$id = '';
if (is_numeric($pathlist[count($pathlist) - 1])) {
//$id = substr($_SERVER['PATH_INFO'],1);
//$id = preg_match('/[0-9]+/', $id)?$id:'';
$i = count($pathlist)-1;
$id = $pathlist[$i];
$id = preg_match('/[0-9]+/', $id)?$id:'';
} else if (is_numeric($pathlist[count($pathlist) - 2]) && (strtolower($pathlist[count($pathlist) - 1]) == 'plain') ) {
// Plain text
$no_template = true;
$id = $pathlist[count($pathlist) - 2];
$id = preg_match('/[0-9]+/', $id)?$id:'';
$code = $DB->GetOne('SELECT code FROM ' . _TABLE_NAME . ' WHERE id = ?', array($id));
header('Content-Type: text/plain');
print html_entity_decode($code, ENT_QUOTES,'UTF-8');
return; // Finish processing in this file
//$id = substr($_SERVER['PATH_INFO'],1);
//$id = preg_match('/[0-9]+/', $id)?$id:'';
$i = count($pathlist) - 1;
$id = $pathlist[$i];
$id = preg_match('/[0-9]+/', $id) ? $id : '';
} else if (is_numeric($pathlist[count($pathlist) - 2]) && (strtolower($pathlist[count($pathlist) - 1]) == 'plain')) {
// Plain text
$no_template = true;
$id = $pathlist[count($pathlist) - 2];
$id = preg_match('/[0-9]+/', $id) ? $id : '';
$code = $DB->GetOne('SELECT code FROM ' . _TABLE_NAME . ' WHERE id = ?', array($id));
header('Content-Type: text/plain');
print html_entity_decode($code, ENT_QUOTES, 'UTF-8');
return; // Finish processing in this file
}
$code = '';
$pblang = '';
......@@ -75,53 +75,48 @@ require_once '../lib/ArrayRenderer.php';
// Grabbed from blog.lib.php
// Returns a textual diff between two time stamps
function timeDiff($first, $second=0)
function timeDiff($first, $second = 0)
{
if($second == 0) {
$second = time();
}
$diff = max($first, $second) - min($first, $second);
if($diff>604800) {
$ret = round($diff/604800);
return $ret.(($ret>1)? _(" weeks") : _(" week"));
}
elseif($diff>86400) {
$ret = round($diff/86400);
return $ret.(($ret>1)? _(" days") : _(" day"));
}
elseif($diff>3600) {
$ret = round($diff/3600);
return $ret.(($ret>1)? _(" hours") : _(" hour"));
}
elseif($diff>60) {
$ret = round($diff/60);
return $ret.(($ret>1)? _(" minutes") : _(" minute"));
}
elseif($diff>0) {
return $diff.(($diff>1)? _(" seconds") : _(" second"));
}
else {
return "no time";
}
if ($second == 0) {
$second = time();
}
$diff = max($first, $second) - min($first, $second);
if ($diff > 604800) {
$ret = round($diff / 604800);
return $ret . (($ret > 1) ? _(" weeks") : _(" week"));
} elseif ($diff > 86400) {
$ret = round($diff / 86400);
return $ret . (($ret > 1) ? _(" days") : _(" day"));
} elseif ($diff > 3600) {
$ret = round($diff / 3600);
return $ret . (($ret > 1) ? _(" hours") : _(" hour"));
} elseif ($diff > 60) {
$ret = round($diff / 60);
return $ret . (($ret > 1) ? _(" minutes") : _(" minute"));
} elseif ($diff > 0) {
return $diff . (($diff > 1) ? _(" seconds") : _(" second"));
} else {
return "no time";
}
}
// Languages
$LANGUAGES = array (
'PHP' => 'PHP',
'CPP' => 'C/C++',
'DIFF' => 'Diff',
'DTD' => 'DTD',
'HTML' => 'HTML',
'JAVA' => 'Java',
'JAVASCRIPT' => 'Javascript',
'MYSQL' => 'MySQL',
'PERL' => 'Perl',
'PYTHON' => 'Python',
'RUBY' => 'Ruby',
'SQL' => 'SQL',
'XML' => 'XML'
$LANGUAGES = array(
'PHP' => 'PHP',
'CPP' => 'C/C++',
'DIFF' => 'Diff',
'DTD' => 'DTD',
'HTML' => 'HTML',
'JAVA' => 'Java',
'JAVASCRIPT' => 'Javascript',
'MYSQL' => 'MySQL',
'PERL' => 'Perl',
'PYTHON' => 'Python',
'RUBY' => 'Ruby',
'SQL' => 'SQL',
'XML' => 'XML'
);
// Remove Old Pastebin Entries
......@@ -132,108 +127,111 @@ $DB->Execute('DELETE FROM ' . _TABLE_NAME . ' WHERE retain_til < now()');
//removeMagicQuotes($_POST);
if (isset($_POST['code'])) {
$code = htmlentities($_POST['code'], ENT_QUOTES,'UTF-8');
if ( isset($_POST['language']) && isset($_POST['retain'])) {
// Add
$pblang = strtoupper($_POST['language']);
if (!isset($LANGUAGES[ $pblang ])) {
$pblang = 'NONE';
}
switch($_POST['retain'][0]) {
case 'month' :
$retain = 2592000;
$retainTil = date('Y/m/d H:i:s', time() + $retain);break;
case 'week' :
$retain = 604800;
$retainTil = date('Y/m/d H:i:s', time() + $retain);break;
case 'forever' :
$retain = null;
$retainTil = null;break;
case 'day' :
default :
$retain = 86400;
$retainTil = date('Y/m/d H:i:s', time() + $retain);
}
if (trim($code) == '') {
trigger_error('No Code Given', E_USER_NOTICE);
} else if (!$session->loggedin) {
trigger_error('You must be logged in to use this service.', E_USER_NOTICE);
} else {
// Additional user validation needed here
//$retainTil = date('Y/m/d H:i:s', time() + $retain);
$id = $DB->GetOne("SELECT nextval('pastebin_id_seq'::regclass)");
$DB->Execute(
'INSERT INTO ' . _TABLE_NAME . ' ( id, code, username, retain_til, language) ' .
'VALUES (?, ?, ?, ?, ?)',
array( $id, $code, $session->username, $retainTil, $pblang));
//bump user to uri of newly pasted item
header('Status: 303 See Other');
header("Location: $pburi/Tools/PasteBin/$id");
$userInfo = 'Created By ' . $session->username . ' at ' . date('Y/m/d H:i');
$smarty->assign('id', $id);
$smarty->assign('userInfo', $userInfo);
$smarty->assign('code', $code);
}
}
$code = htmlentities($_POST['code'], ENT_QUOTES, 'UTF-8');
if (isset($_POST['language']) && isset($_POST['retain'])) {
// Add
$pblang = strtoupper($_POST['language']);
if (!isset($LANGUAGES[$pblang])) {
$pblang = 'NONE';
}
switch ($_POST['retain'][0]) {
case 'month' :
$retain = 2592000;
$retainTil = date('Y/m/d H:i:s', time() + $retain);
break;
case 'week' :
$retain = 604800;
$retainTil = date('Y/m/d H:i:s', time() + $retain);
break;
case 'forever' :
$retain = null;
$retainTil = null;
break;
case 'day' :
default :
$retain = 86400;
$retainTil = date('Y/m/d H:i:s', time() + $retain);
}
if (trim($code) == '') {
trigger_error('No Code Given', E_USER_NOTICE);
} else if (!$session->loggedin) {
trigger_error('You must be logged in to use this service.', E_USER_NOTICE);
} else {
// Additional user validation needed here
//$retainTil = date('Y/m/d H:i:s', time() + $retain);
$id = $DB->GetOne("SELECT nextval('pastebin_id_seq'::regclass)");
$DB->Execute(
'INSERT INTO ' . _TABLE_NAME . ' ( id, code, username, retain_til, language) ' .
'VALUES (?, ?, ?, ?, ?)',
array($id, $code, $session->username, $retainTil, $pblang));
//bump user to uri of newly pasted item
header('Status: 303 See Other');
header("Location: $pburi/Tools/PasteBin/$id");
$userInfo = 'Created By ' . $session->username . ' at ' . date('Y/m/d H:i');
$smarty->assign('id', $id);
$smarty->assign('userInfo', $userInfo);
$smarty->assign('code', $code);
}
}
}
// List All Entries in order.
$pasteList = $DB->GetAll(
'SELECT id, username AS name, created AS time_diff FROM ' . _TABLE_NAME . ' ORDER BY created DESC LIMIT ' . _LIST_LIMIT );
for($i=0;$i< count($pasteList);$i++) {
$pasteList[$i]['time_diff'] = timeDiff(strtotime($pasteList[$i]['time_diff']));
$pasteList = $DB->GetAll(
'SELECT id, username AS name, created AS time_diff FROM ' . _TABLE_NAME . ' ORDER BY created DESC LIMIT ' . _LIST_LIMIT);
for ($i = 0; $i < count($pasteList); $i++) {
$pasteList[$i]['time_diff'] = timeDiff(strtotime($pasteList[$i]['time_diff']));
}
$smarty->assign('pasteList', $pasteList);
// Check for either display or form input
if (!empty($id) || !empty($code)) {
// Form
if (empty($code)) {
$result = $DB->GetRow('SELECT * FROM ' . _TABLE_NAME . ' WHERE id = ?', array($id));
//$query = db_query('SELECT * FROM ' . _TABLE_NAME . ' WHERE id = \'' . $id . '\'');
if (!empty($result) ) {
//$result = db_getrow($query);
$code = $result['code'];
$userInfo = 'Created By ' . $result['username'] . ' at ' . date('Y/m/d H:i', strtotime($result['created']));
$pblang = $result['language'];
// Smarty
$smarty->assign('id', $id);
$smarty->assign('code', $code);
$smarty->assign('userInfo', $userInfo);
} else {
// Error
trigger_error('Error - Code Piece not found for id - ' . $id, E_USER_WARNING);
}
}
// Check there hasn't been an error
// Code should have been set in the if statement above, this can not become
// an else
if (!empty($code)) {
// Highlight the code
if ($pblang == 'NONE') {
$pblang = 'HTML';
}
$renderer = new Text_Highlighter_Renderer_Array_dez();
$tmpobj = new Text_Highlighter;
$hl =& $tmpobj->factory($pblang);
$hl->setRenderer($renderer);
// Have to decode again here for the highlighting
// It might be a little better if we kept the unencoded version from above
$highlightedCode = $hl->highlight(html_entity_decode($code, ENT_QUOTES,'UTF-8'));
$smarty->assign('highlightedCode', $highlightedCode);
}
// Form
if (empty($code)) {
$result = $DB->GetRow('SELECT * FROM ' . _TABLE_NAME . ' WHERE id = ?', array($id));
//$query = db_query('SELECT * FROM ' . _TABLE_NAME . ' WHERE id = \'' . $id . '\'');
if (!empty($result)) {
//$result = db_getrow($query);
$code = $result['code'];
$userInfo = 'Created By ' . $result['username'] . ' at ' . date('Y/m/d H:i', strtotime($result['created']));
$pblang = $result['language'];
// Smarty
$smarty->assign('id', $id);
$smarty->assign('code', $code);
$smarty->assign('userInfo', $userInfo);
} else {
// Error
trigger_error('Error - Code Piece not found for id - ' . $id, E_USER_WARNING);
}
}
// Check there hasn't been an error
// Code should have been set in the if statement above, this can not become
// an else
if (!empty($code)) {
// Highlight the code
if ($pblang == 'NONE') {
$pblang = 'HTML';
}
$renderer = new Text_Highlighter_Renderer_Array_dez();
$tmpobj = new Text_Highlighter;
$hl =& $tmpobj->factory($pblang);
$hl->setRenderer($renderer);
// Have to decode again here for the highlighting
// It might be a little better if we kept the unencoded version from above
$highlightedCode = $hl->highlight(html_entity_decode($code, ENT_QUOTES, 'UTF-8'));
$smarty->assign('highlightedCode', $highlightedCode);
}
}
// Sort Out Languages
if(!empty($pblang) && $pblang != 'NONE') {
$smarty->assign('selectedLanguage', array('key' => $pblang, 'lang' => $LANGUAGES[$pblang]));
unset($LANGUAGES[$pblang]);
if (!empty($pblang) && $pblang != 'NONE') {
$smarty->assign('selectedLanguage', array('key' => $pblang, 'lang' => $LANGUAGES[$pblang]));
unset($LANGUAGES[$pblang]);
}
$smarty->assign('pasteLanguages', $LANGUAGES);
......@@ -243,5 +241,5 @@ $result = $smarty->fetch('pastebin.tpl');
$sidebar = $smarty->fetch('pastebin-sidebar.tpl');
$smarty->assign('title', 'PasteBin');
$smarty->assign('body', $result);
$smarty->assign('secondary',$sidebar);
$smarty->assign('secondary', $sidebar);
?>
<?
<?php
$res = $sucsDB->Execute("select username, sum(pages) as pages from printer where username != 'old' group by username order by sum(pages) desc");
$num = $res->RecordCount();
for ($i=0;$i<$num;$i++) {
$row[$i] = $res->FetchRow();
if ($i < 12)
{
$item[]=$row[$i]['username'];
$slice[]=$row[$i]['pages'];
}
else {
$otherSize += $row[$i]['pages'];
}
}
for ($i = 0; $i < $num; $i++) {
$row[$i] = $res->FetchRow();
if ($i < 12) {
$item[] = $row[$i]['username'];
$slice[] = $row[$i]['pages'];
} else {
$otherSize += $row[$i]['pages'];
}
}
// $itemName[]="Other";
// $sliceSize[]=$otherSize;
$slice = array_merge(array($otherSize),$slice);
$item = array_merge(array("Other"), $item);
$slice = array_merge(array($otherSize), $slice);
$item = array_merge(array("Other"), $item);
/* echo "<pre>";
print_r($slice);
print_r($item);*/
include("../../lib/pieChart.php");
piechart("Top 12, Users of Printing", $slice, $item,0)
include("../../lib/pieChart.php");
piechart("Top 12, Users of Printing", $slice, $item, 0)
?>
\ No newline at end of file
......@@ -4,39 +4,39 @@
* Ported from old site by tswsl1989
*
*/
$max=10; //Set this to number of users to display in chart
$max = 10; //Set this to number of users to display in chart
$timestamp = '2014-02-05 18:29:02+00'; //display printer stats since this time
$smarty->assign('title',"Printer Statistics");
$smarty->assign('title', "Printer Statistics");
// $out="<img src=\"/images/printer.graph.php\" alt=\"pie chart of top 12 printer users\"/>";
$table="<table border=1 cellpadding=3>\n<tr>\n<th>Username</th>\n<th>Pages</th>\n<th>Projected Monthly Usage</th>\n<th>Printed This Month</th>\n<th>What it would cost in the library</th></tr>\n";
$table = "<table border=1 cellpadding=3>\n<tr>\n<th>Username</th>\n<th>Pages</th>\n<th>Projected Monthly Usage</th>\n<th>Printed This Month</th>\n<th>What it would cost in the library</th></tr>\n";
//pull in all the current users (ie not old) who have printed stuff
$res = $sucsDB->Execute("select username, sum(pages) as pages from printer where username != 'old' AND start > '".$timestamp."' group by username order by sum(pages) desc");
$res = $sucsDB->Execute("select username, sum(pages) as pages from printer where username != 'old' AND start > '" . $timestamp . "' group by username order by sum(pages) desc");
$num = $res->RecordCount();
//for each row stuff the infomation into an array, then free up the database resorces
for ($i=0;$i<$num;$i++) {
$data[$i] = $res->FetchRow();
$data[$i]['month'] = 0;
for ($i = 0; $i < $num; $i++) {
$data[$i] = $res->FetchRow();
$data[$i]['month'] = 0;
}
$res->Close();
//get the second since epoch
$thisSecond = time();
//for each user who has printed stuff add the first printed time (since epoch) to the array
for ($i=0;$i<$num;$i++) {
$res = $sucsDB->Execute("select date_part('epoch',start) as first from printer where username ='".$data[$i]['username']."' order by start asc limit 1;");
$temp = $res->FetchRow();
$data[$i]['first'] = $temp['first'];
$res->Close();
for ($i = 0; $i < $num; $i++) {
$res = $sucsDB->Execute("select date_part('epoch',start) as first from printer where username ='" . $data[$i]['username'] . "' order by start asc limit 1;");
$temp = $res->FetchRow();
$data[$i]['first'] = $temp['first'];
$res->Close();
}
$res = $sucsDB->Execute("select username, pages, start from printer where username != 'old'");
$datesnum = $res->RecordCount();//for each row stuff the infomation into an array, then free up the database resorces
for ($i=0;$i<$datesnum;$i++) {
$dates[$i] = $res->FetchRow($res, $i);
for ($i = 0; $i < $datesnum; $i++) {
$dates[$i] = $res->FetchRow($res, $i);
}
$res->Close();
......@@ -44,50 +44,47 @@ $res->Close();
// get the current month
$theMonth = date("m");
$theYear = date("Y");
for ($i=0;$i<$datesnum;$i++) {
$userMonth = substr($dates[$i]['start'], 5, 2);
$userYear = substr($dates[$i]['start'], 0, 4);
if (($userMonth == $theMonth) && ($userYear == $theYear)) {
for ($j=0;$j<$num;$j++) {
if ($data[$j]['username'] == $dates[$i]['username']) {
$data[$j]['month'] += $dates[$i]['pages'];
}
}
}
for ($i = 0; $i < $datesnum; $i++) {
$userMonth = substr($dates[$i]['start'], 5, 2);
$userYear = substr($dates[$i]['start'], 0, 4);
if (($userMonth == $theMonth) && ($userYear == $theYear)) {
for ($j = 0; $j < $num; $j++) {
if ($data[$j]['username'] == $dates[$i]['username']) {
$data[$j]['month'] += $dates[$i]['pages'];
}
}
}
}
//start the total counter
$total = 0;
//for each user.. print a row in the table
for ($i=0;$i<$num;$i++) {
$table.="<tr align=\"center\">\n";
$table.="<td>{$data[$i]['username']}</td>\n";
$table.="<td>{$data[$i]['pages']}</td>\n";
//avg pages per month = seconds in a month / (now - first print) * pages
$crazyGuess = round((2629743.83/($thisSecond-$data[$i]['first']))*$data[$i]['pages']);
//if the user has only started printing in the last month its not sensible to give a guess of average useage
if ($thisSecond-$data[$i]['first'] <= 2629743.83) {
$table.="<td>Not enough data</td>\n";
}
//traffic lights for pinter useage, adjust values as required
elseif($crazyGuess <= 25) {
$table.="<td BGCOLOR=\"Green\">".$crazyGuess."</td>\n";
}
elseif($crazyGuess <= 33) {
$table.="<td BGCOLOR=\"Orange\">".$crazyGuess."</td>\n";
}
else{
$table.="<td BGCOLOR=\"Red\">".$crazyGuess."</td>\n";
}
if ($data[$i]['month'] >= 300) {
$table.="<td BGCOLOR=\"Red\">{$data[$i]['month']}</td>\n";
} else {
$table.="<td>{$data[$i]['month']}</td>\n";
}
$table.="<td>".sprintf("£ %01.2f",round(0.05*$data[$i]['pages'],2))."</td>\n";
//add this users useage to the total
$total += $data[$i]['pages'];
$table.="</tr>\n";
for ($i = 0; $i < $num; $i++) {
$table .= "<tr align=\"center\">\n";
$table .= "<td>{$data[$i]['username']}</td>\n";
$table .= "<td>{$data[$i]['pages']}</td>\n";
//avg pages per month = seconds in a month / (now - first print) * pages
$crazyGuess = round((2629743.83 / ($thisSecond - $data[$i]['first'])) * $data[$i]['pages']);
//if the user has only started printing in the last month its not sensible to give a guess of average useage
if ($thisSecond - $data[$i]['first'] <= 2629743.83) {
$table .= "<td>Not enough data</td>\n";
} //traffic lights for pinter useage, adjust values as required
elseif ($crazyGuess <= 25) {
$table .= "<td BGCOLOR=\"Green\">" . $crazyGuess . "</td>\n";
} elseif ($crazyGuess <= 33) {
$table .= "<td BGCOLOR=\"Orange\">" . $crazyGuess . "</td>\n";
} else {
$table .= "<td BGCOLOR=\"Red\">" . $crazyGuess . "</td>\n";
}
if ($data[$i]['month'] >= 300) {
$table .= "<td BGCOLOR=\"Red\">{$data[$i]['month']}</td>\n";
} else {
$table .= "<td>{$data[$i]['month']}</td>\n";
}
$table .= "<td>" . sprintf("£ %01.2f", round(0.05 * $data[$i]['pages'], 2)) . "</td>\n";
//add this users useage to the total
$total += $data[$i]['pages'];
$table .= "</tr>\n";
}
//get the first print date
......@@ -101,16 +98,16 @@ $res->Close();
//get the number of pages printed by "old" users and add it to the total
$res = $sucsDB->Execute("select sum(pages) as pages from printer where username = 'old' group by username order by sum(pages) desc");
$old = $res->FetchRow();
$old = $old[0];
$old = $old['pages'];
$res->Close();
$total += $old;
//Output two lines at the bottem of the table, one for "old" users and the other for the total
$table.="<tr align=\"center\">\n\t<th>Old Users</th>\n\t<th>$old</th>\n\t<th>n/a</th>\n</tr>";
$table.="<tr align=\"center\">\n\t<th>Total</th>\n\t<th>$total</th>\n\t<th>".round((2629743.83/($thisSecond-$date['first'][0]))*$total)."</th>\n</tr>";
$table.="</table>\n";
$table .= "<tr align=\"center\">\n\t<th>Old Users</th>\n\t<th>$old</th>\n\t<th>n/a</th>\n</tr>";
$table .= "<tr align=\"center\">\n\t<th>Total</th>\n\t<th>$total</th>\n\t<th>" . round((2629743.83 / ($thisSecond - $date['first'][0])) * $total) . "</th>\n</tr>";
$table .= "</table>\n";
//output the dates of the first and last prints recorded
$out.="<script type=\"text/javascript\" src=\"https://www.google.com/jsapi\"></script>
$out .= "<script type=\"text/javascript\" src=\"https://www.google.com/jsapi\"></script>
<script type=\"text/javascript\">
google.load(\"visualization\", \"1\", {packages:[\"corechart\"]});
google.setOnLoadCallback(drawChart);
......@@ -118,35 +115,35 @@ $out.="<script type=\"text/javascript\" src=\"https://www.google.com/jsapi\"></s
var data = new google.visualization.DataTable();
data.addColumn('string', 'User');
data.addColumn('number', 'Pages Printed');
data.addRows(".($max+2).");\n";
for( $i=0; $i<($max+1); $i++ ){
$out.="data.setValue(".($i).", 0, '".$data[$i]['username']."');\n";
$out.="data.setValue(".($i).", 1,".$data[$i]['pages'].");\n";
data.addRows(" . ($max + 2) . ");\n";
for ($i = 0; $i < ($max + 1); $i++) {
$out .= "data.setValue(" . ($i) . ", 0, '" . $data[$i]['username'] . "');\n";
$out .= "data.setValue(" . ($i) . ", 1," . $data[$i]['pages'] . ");\n";
}
$others=0;
for ( $i=$max; $i<count($data); $i++ ) {
$others+=$data[$i]['pages'];
$others = 0;
for ($i = $max; $i < count($data); $i++) {
$others += $data[$i]['pages'];
}
$out.="data.setValue(".($max+1).", 0, 'Others');\ndata.setValue(".($max+1).",1, $others);\n";
$out.="\t\tvar chart = new google.visualization.PieChart(document.getElementById('chart_div'));
$out .= "data.setValue(" . ($max + 1) . ", 0, 'Others');\ndata.setValue(" . ($max + 1) . ",1, $others);\n";
$out .= "\t\tvar chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, {width: 500, height: 360, backgroundColor: 'none', is3D: true, title: 'Printer Usage'});
}
</script>";
$out.="<div id=\"chart_div\" style=\"background: none;\"></div>";
$out.="<p>First Data - ".$date['first'][weekday].", ".$date['first'][mday]." ".$date['first'][month]." ".$date['first'][year].", at ".sprintf("%02d:%02d:%02d",$date['first'][hours],$date['first'][minutes],$date['first'][seconds])."<br />";
$out.="Last Data - ".$date['last'][weekday].", ".$date['last'][mday]." ".$date['last'][month]." ".$date['last'][year].", at ".sprintf("%02d:%02d:%02d",$date['last'][hours],$date['last'][minutes],$date['last'][seconds])."</p>";
$out .= "<div id=\"chart_div\" style=\"background: none;\"></div>";
$out .= "<p>First Data - " . $date['first'][weekday] . ", " . $date['first'][mday] . " " . $date['first'][month] . " " . $date['first'][year] . ", at " . sprintf("%02d:%02d:%02d", $date['first'][hours], $date['first'][minutes], $date['first'][seconds]) . "<br />";
$out .= "Last Data - " . $date['last'][weekday] . ", " . $date['last'][mday] . " " . $date['last'][month] . " " . $date['last'][year] . ", at " . sprintf("%02d:%02d:%02d", $date['last'][hours], $date['last'][minutes], $date['last'][seconds]) . "</p>";
//do some silly maths to work out lots of silly things
$paperarea = round(0.21*0.297*$total,3); //area of paper
$paperweight = round($paperarea*.08, 3); //how much that would weigh
$numtrees = round($paperweight/730.296, 6); //*very* roughly how many trees that would be
$cost = sprintf("£%01.2f",round(0.05*$total,2));
$out.="<p>That's ".$paperarea."m<sup>2</sup> of paper, weighing ".$paperweight."kg!<br>\n";
$out.="This is equivalent to approximately ".$numtrees." trees.<br>\n";
$out.="That would have cost our members a grand total of ".$cost." if it were printed in the library.. not bad for £5 each!";
$paperarea = round(0.21 * 0.297 * $total, 3); //area of paper
$paperweight = round($paperarea * .08, 3); //how much that would weigh
$numtrees = round($paperweight / 730.296, 6); //*very* roughly how many trees that would be
$cost = sprintf("£%01.2f", round(0.05 * $total, 2));
$out .= "<p>That's " . $paperarea . "m<sup>2</sup> of paper, weighing " . $paperweight . "kg!<br>\n";
$out .= "This is equivalent to approximately " . $numtrees . " trees.<br>\n";
$out .= "That would have cost our members a grand total of " . $cost . " if it were printed in the library.. not bad for £5 each!";
//done
$out.="<p>Note: The number of pages is the number spooled and may be more than the actual number printed</p>";
$out.=$table;
$out .= "<p>Note: The number of pages is the number spooled and may be more than the actual number printed</p>";
$out .= $table;
$sucsDB->Close();
$smarty->assign('body',$out);
$smarty->assign('body', $out);
?>
......@@ -4,39 +4,39 @@ $dirlist = scandir("/var/projects/trac");
$projects = array();
foreach ($dirlist as $file) {
if ($file[0]!=".") {
$object=array();
$object['filename'] = $file;
$ini_array = array();
$filepath = "/var/projects/trac/".$file."/conf/trac.ini";
// read trac.ini for this project
if (is_readable($filepath) && ($ini_data = file($filepath)) != FALSE) {
$projectsection = FALSE;
foreach ($ini_data as $ini_line) {
if (trim($ini_line) == "[project]") {
$projectsection = TRUE;
} else if ($projectsection && (1 == preg_match("/^\[.*\]$/", trim($ini_line)))) {
$projectsection = FALSE;
} else if ($projectsection) {
list($key, $value) = preg_split("/=/", $ini_line);
$ini_array[trim($key)] = trim($value);
}
}
// only list projects whose trac.ini sets public = true
if (isset($ini_array['public']) && ($ini_array['public'] == "true")) {
$object['name'] = $ini_array['name'];
if ($object['name']=="") $object['name'] = $file;
$object['descr'] = $ini_array['descr'];
$projects[$file]=$object;
}
}
}
if ($file[0] != ".") {
$object = array();
$object['filename'] = $file;
$ini_array = array();
$filepath = "/var/projects/trac/" . $file . "/conf/trac.ini";
// read trac.ini for this project
if (is_readable($filepath) && ($ini_data = file($filepath)) != FALSE) {
$projectsection = FALSE;
foreach ($ini_data as $ini_line) {
if (trim($ini_line) == "[project]") {
$projectsection = TRUE;
} else if ($projectsection && (1 == preg_match("/^\[.*\]$/", trim($ini_line)))) {
$projectsection = FALSE;
} else if ($projectsection) {
list($key, $value) = preg_split("/=/", $ini_line);
$ini_array[trim($key)] = trim($value);
}
}
// only list projects whose trac.ini sets public = true
if (isset($ini_array['public']) && ($ini_array['public'] == "true")) {
$object['name'] = $ini_array['name'];
if ($object['name'] == "") $object['name'] = $file;
$object['descr'] = $ini_array['descr'];
$projects[$file] = $object;
}
}
}
}
$smarty->assign("projects", $projects);
......
<?php
// Config options
$permission="sucsstaff";
$permission = "sucsstaff";
// TODO: DEV: UNSTICK THIS BEFORE DEPLOY
if (isset($session->groups[$permission])) {
$smarty->assign("staff",TRUE);
//get unused signup slips
$query = "SELECT signup.id, signup.sid, member_type.typename, members.username, signup.card";
$query .= " FROM signup LEFT JOIN member_type ON signup.type = member_type.id LEFT JOIN members ON signup.issuedby=members.uid";
$query .= " WHERE";
$query .= " signup.activated is NULL";
$query .= " or signup.username is NULL";
$query .= " ORDER BY signup.id";
$query .= ";";
$data = $sucsDB->GetAll($query);
// process responces
if(isset($_POST['command'])){
if($_POST['command']=='update'){
$changed = 0;
$upquery = "UPDATE signup";
$upquery .= " SET sid = ?";
$upquery .= " WHERE id = ?";
$upquery .= ";";
foreach($data as $value){
if(array_key_exists('sid:'.$value['id'],$_POST) && $_POST['sid:'.$value['id']]!=$value['sid']){
$uparray = array($_POST['sid:'.$value['id']],$value['id']);
$sucsDB->query($upquery,$uparray);
$changed++;
}
}
message_flash($changed." record(s) updated");
$smarty->assign("staff", TRUE);
//get unused signup slips
$query = "SELECT signup.id, signup.sid, member_type.typename, members.username, signup.card";
$query .= " FROM signup LEFT JOIN member_type ON signup.type = member_type.id LEFT JOIN members ON signup.issuedby=members.uid";
$query .= " WHERE";
$query .= " signup.activated is NULL";
$query .= " or signup.username is NULL";
$query .= " ORDER BY signup.id";
$query .= ";";
$data = $sucsDB->GetAll($query);
// process responces
if (isset($_POST['command'])) {
if ($_POST['command'] == 'update') {
$changed = 0;
$upquery = "UPDATE signup";
$upquery .= " SET sid = ?";
$upquery .= " WHERE id = ?";
$upquery .= ";";
foreach ($data as $value) {
if (array_key_exists('sid:' . $value['id'], $_POST) && $_POST['sid:' . $value['id']] != $value['sid']) {
$uparray = array($_POST['sid:' . $value['id']], $value['id']);
$sucsDB->query($upquery, $uparray);
$changed++;
}
}
$data = $sucsDB->GetAll($query);
//set smarty stuff
$smarty->assign("signups",$data);
$smarty->assign("self",$baseurl.$path.$getout);
}
message_flash($changed . " record(s) updated");
}
}
$data = $sucsDB->GetAll($query);
//set smarty stuff
$smarty->assign("signups", $data);
$smarty->assign("self", $baseurl . $path . $getout);
}
$body = $smarty->fetch("signup-admin.tpl");
$smarty->assign('title', "Signup Slip Admin");
......
This diff is collapsed.
This diff is collapsed.
......@@ -10,24 +10,24 @@ $conn = ldap_connect(_LDAP_SERVER);
$search = ldap_search($conn, _BASE_DN, 'uid=*', array('uid', 'cn', 'homedirectory'));
// Sort By Username
ldap_sort($conn, $search, 'uid');
// Produce an array of usernames
$usernames = array();
$entryHandler = ldap_first_entry($conn, $search);
while($entryHandler) {
$username = ldap_get_values($conn, $entryHandler, 'uid');
$fullname = ldap_get_values($conn, $entryHandler, 'cn');
$homedir = ldap_get_values($conn, $entryHandler, 'homedirectory');
$homedir = $homedir[0];
$homedirArray = explode('/', $homedir);
if (($homedirArray[2]=="society") && file_exists( "$homedir/public_html")) {
$usernames[] = array( "username" => $username[0], "fullname" => $fullname[0]);
}
$entryHandler = ldap_next_entry($conn, $entryHandler);
}
// Sort By Username
ldap_sort($conn, $search, 'uid');
// Produce an array of usernames
$usernames = array();
$entryHandler = ldap_first_entry($conn, $search);
while ($entryHandler) {
$username = ldap_get_values($conn, $entryHandler, 'uid');
$fullname = ldap_get_values($conn, $entryHandler, 'cn');
$homedir = ldap_get_values($conn, $entryHandler, 'homedirectory');
$homedir = $homedir[0];
$homedirArray = explode('/', $homedir);
if (($homedirArray[2] == "society") && file_exists("$homedir/public_html")) {
$usernames[] = array("username" => $username[0], "fullname" => $fullname[0]);
}
$entryHandler = ldap_next_entry($conn, $entryHandler);
}
$smarty->assign("societies", $usernames);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.