From 79a8e3d6934fd246f0c6549eed352e1be96ee8c9 Mon Sep 17 00:00:00 2001
From: Tim Clark <eclipse@sucs,org>
Date: Thu, 12 Jun 2008 12:23:48 +0000
Subject: [PATCH] Adds the junk system

---
 components/junk.php | 147 ++++++++++++++++++++++++++++++++++++++++++++
 templates/junk.tpl  | 106 ++++++++++++++++++++++++++++++++
 2 files changed, 253 insertions(+)
 create mode 100644 components/junk.php
 create mode 100644 templates/junk.tpl

diff --git a/components/junk.php b/components/junk.php
new file mode 100644
index 0000000..28aa99a
--- /dev/null
+++ b/components/junk.php
@@ -0,0 +1,147 @@
+<?php
+
+// Set defaults
+$mode = "list";
+$admin = false;
+
+$admin_group="staff";
+
+$admin = isset($session->groups[$admin_group]);
+
+// If your an admin and the path ends in Edit/ then a number put it into edit mode
+// create canedit rules
+$canedit=isset($pathlist[($component[depth]/2)+1]);
+$canedit=$canedit && isset($pathlist[($component[depth]/2)+2]);
+$canedit=$canedit && $pathlist[($component[depth]/2)+1]=='Edit';
+$canedit=$canedit && is_numeric($pathlist[($component[depth]/2)+2]);
+$canedit=$canedit && $admin;
+// Apply canedit rules
+if ($canedit){
+	$id = $pathlist[($component[depth]/2)+2];
+	$items = $DB->GetAll("SELECT id, title, category, description, donated_by, status FROM inventory WHERE id=? AND requested_by IS NULL",$id);
+	if(sizeof($items) === 1){
+		$item = $items[0];
+		$smarty->assign("item", $item);
+		$mode = "edit";
+	}
+}
+
+// If your an admin and the path ends in Add put it into add mode
+// create canadd rules
+$canadd=isset($pathlist[($component[depth]/2)+1]);
+$canadd=$canadd && $pathlist[($component[depth]/2)+1]=='Add';
+$canadd=$canadd && $admin;
+// Apply canadd rules
+if ($canadd){$mode = "add";}
+
+
+// Process actions before retriving the data
+// List request data
+if ($session->loggedin && isset($_REQUEST['action'])) {
+	// Junk Requests
+        if ($_REQUEST['action'] == "Request") {
+		// Request Item if its available
+                $query = "UPDATE inventory SET requested_by=?, requested_on=now() WHERE id=? AND requested_by IS NULL";
+                $DB->Query($query, array($session->username, $_REQUEST['item']));
+        }
+	elseif ($_REQUEST['action'] == "Un-Request") {
+		// Un-Request Item
+		if ($admin){
+			// if your admin just do it
+			$query = "UPDATE inventory SET requested_by=null, requested_on=null WHERE id=?";
+                        $array = array($_REQUEST['item']);
+		}
+		else{
+			// if not admin check if you requested it first
+			$query = "UPDATE inventory SET requested_by=null, requested_on=null WHERE id=? AND requested_by=?";
+			$array = array($_REQUEST['item'], $session->username);
+		}
+		$DB->Query($query, $array);
+	}
+	elseif ($_REQUEST['action'] == "Take" && $admin){
+		// Take item, if your admin
+		$query = "UPDATE inventory SET taken_on=now() WHERE id=? AND requested_by IS NOT NULL";
+		$DB->Query($query, $_REQUEST['item']);
+	}
+	elseif ($_REQUEST['action'] == "Remove" && $admin){
+		// Remove item, if your admin and its been taken
+		$query = "DELETE FROM inventory WHERE id=? AND taken_on IS NOT NULL";
+		$DB->Query($query, $_REQUEST['item']);
+	}
+	elseif ($_REQUEST['action'] == "Not Junk" && $admin){
+		// Mark item as not junk if its not been requested and your admin
+		$query = "UPDATE inventory SET status='unknown' WHERE id=? AND requested_by IS NULL";
+		$DB->Query($query, $_REQUEST['item']);
+	}
+	elseif ($_REQUEST['action'] =="Junk" && $admin){
+		// Mark item as junk, if your admin
+		$query = "UPDATE inventory SET status='junk' WHERE id=?";
+                $DB->Query($query, $_REQUEST['item']);
+	}
+
+}
+// Update/Add item
+if ($session->loggedin && $admin && (isset($_REQUEST['update']) || isset($_REQUEST['add']))) {
+         // Update/Add item if title and category are filled in else error
+         if ($_REQUEST['title'] != "" && $_REQUEST['category'] != "") {
+		// if the description is blank, return null
+		if ($_REQUEST['description'] == ""){
+			$description = null;
+		}
+		else{
+			$description = $_REQUEST['description'];
+		}
+		// if the donated_by is blank, return null
+		if ($_REQUEST['donated_by'] == ""){
+                         $donated_by = null;
+                }
+                else{
+                        $donated_by = $_REQUEST['donated_by'];
+                }
+		// run the query
+		if(isset($_REQUEST['update'])){
+			$query = "UPDATE inventory SET title=?, category=?, description=?, donated_by=?, status=? WHERE id=?";
+			$array = array($_REQUEST['title'], $_REQUEST['category'], $description, $donated_by, $_REQUEST['status'], $_REQUEST['id']);
+			message_flash("Item Updated");
+		}
+		elseif(isset($_REQUEST['add'])){
+			$query = "INSERT INTO inventory (title, category, description, donated_by, status) VALUES (?, ?, ?, ?, ?)";
+			$array = array($_REQUEST['title'], $_REQUEST['category'], $description, $donated_by, $_REQUEST['status']);
+			message_flash("Item Added");
+		}
+		$DB->Query($query, $array);
+	 }
+	 else{
+		 trigger_error("Required field(s) missing", E_USER_WARNING);
+	 }
+}
+
+
+if ($mode == 'list'){
+	// Get junk from database, and give admin the full list
+	if ($admin == true){
+		$junk = $DB->GetAll("SELECT * FROM inventory ORDER BY category");
+	}
+	else{
+		$junk = $DB->GetAll("SELECT * FROM inventory WHERE status = 'junk' ORDER BY category");
+	}
+	$smarty->assign("junk", $junk);
+	
+	// Check there is some junk
+	if (sizeof($junk) < 1) {
+		$mode = "nojunk";
+	}
+}
+// Generate output
+
+$smarty->assign("statuses",array("unknown", "in use", "wanted", "junk"));
+$smarty->assign("componentpath", $baseurl . $component[path]);
+$smarty->assign("mode", $mode);
+$smarty->assign("admin", $admin);
+
+$output =  $smarty->fetch("junk.tpl");
+
+$smarty->assign("title", "Junk List");
+$smarty->assign("body", $output);
+
+?>
diff --git a/templates/junk.tpl b/templates/junk.tpl
new file mode 100644
index 0000000..16d5653
--- /dev/null
+++ b/templates/junk.tpl
@@ -0,0 +1,106 @@
+{if $mode == 'list'}
+{foreach name=junk from=$junk item=junk}
+<div class="box">
+	<div class="boxhead">
+		<h3>{$junk.title}</h3>
+	</div>
+	<div class="boxcontent">
+		<p>
+			<h3>{$junk.category}</h3>
+			{$junk.description}
+			{if $junk.donated_by != null}
+			<br /><strong>Donated by:</strong>{$junk.donated_by}
+			{/if}
+		{if $session->loggedin}
+		{if $admin || $junk.status=='junk'}
+		<form action="{$url}" method="POST">
+			<input type="hidden" name="item" value="{$junk.id}" />
+			{if $junk.status=='junk'}
+			{if $junk.requested_by==null}
+			<input type="submit" name="action" value="Request" />
+			{elseif ($junk.requested_by==$session->username || $admin) && $junk.taken_on==null}
+			<input type="submit" name="action" value="Un-Request" />
+			{/if}
+			{if $admin}
+			{if $junk.requested_by!=null && $junk.taken_on==null}
+			<input type="submit" name="action" value="Take" />
+			{elseif $junk.taken_on!=null}
+			<input type="submit" name="action" value="Remove" />
+			{elseif $junk.requested_by==null}
+			<input type="submit" name="action" value="Not Junk" />
+			{/if}
+			{/if}
+			{elseif $admin}
+			<input type="submit" name="action" value="Junk" />
+			{/if}
+		</form>
+		{/if}
+		{/if}
+		</p>
+		{if $admin && $junk.requested_by==null}
+			<div class="edit">
+				<a href="{$componentpath}/Edit/{$junk.id}">Edit</a>
+				<div class="clear"></div>
+			</div>
+		{/if}
+	</div>
+	<div class="boxfoot"><p>
+	{if $junk.status!='junk'}
+		Not Junk
+	{elseif $junk.requested_by==null}
+		Available
+	{elseif $junk.taken_on==null}
+		Requested by {$junk.requested_by} on {$junk.requested_on|date_format:"%e %b %Y"}
+	{else}
+		Taken by {$junk.requested_by} on {$junk.taken_on|date_format:"%e %b %Y"}
+	{/if}
+	</p></div>
+</div>
+{/foreach}
+{if $admin}
+	<div class="edit">
+	       <a href="{$componentpath}/Add">Add</a>
+	       <div class="clear"></div>
+	</div>
+{/if}
+{elseif ($mode == 'edit' || $mode == 'add') && $admin}
+<fieldset>	
+	<legend>{if $mode=='edit'}Edit{else}New{/if} Item</legend>
+	<form action="{$componentpath}" method="POST">
+	<input type="hidden" name="id" value="{$item.id}" />
+	<div class="row">
+		<label for="title">Title*</label>
+		<span class="textinput"><input type="text" name="title"{if $mode == 'edit'} value="{$item.title}"{/if} /></span>
+	</div>
+	<div class="row">
+		<label for="category">Category*</label>
+		<span class="textinput"><input type="text" name="category"{if $mode == 'edit'} value="{$item.category}"{/if} /></span>
+	</div>
+	<div class="row">
+		<label for="description">Description</label>
+		<span class="textinput"><textarea name="description" cols="25" rows="3">{if $mode == 'edit'}{$item.description}{/if}</textarea></span>
+	</div>
+	<div class="row">
+		<label for="donated_by">Donated by</label>
+		<span class="textinput"><input type="text" name="donated_by"{if $mode == 'edit'} value="{$item.donated_by}"{/if} /></span>
+	</div>
+	<div class="row">
+		<label for="status">Status</label>
+		<span class="textinput">
+			<select name="status">
+			{foreach name=statuses from=$statuses item=status}
+			<option{if ($status == $item.status) && ($mode == 'edit')} selected="selected"{/if}>{$status}</option>
+			{foreachelse}
+			<option>unknown</option>
+			{/foreach}
+			</select>
+		</span>
+	</div>
+	<div class="row">
+		<span class="textinput"><input type="submit" name="{if $mode == 'edit'}update{else}add{/if}" value="{if $mode == 'edit'}Update{else}Add{/if}"  /></span>
+	<div class="note row">* denotes require fields</div>
+	</div>
+	<div class="clear"></div>
+	</form>
+</fieldset>
+{/if}
-- 
GitLab