Skip to content
This repository has been archived by the owner on Apr 24, 2019. It is now read-only.

Commit

Permalink
Beginning to reintegrate Tickets functionality.
Browse files Browse the repository at this point in the history
  • Loading branch information
Tyler Hall committed May 5, 2011
1 parent 4e7e661 commit eabe804
Show file tree
Hide file tree
Showing 11 changed files with 729 additions and 7 deletions.
2 changes: 1 addition & 1 deletion feedback-view.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
<li><a href="feedback.php?type=support">Support Questions</a></li>
<li><a href="feedback.php?type=bug">Bug Reports</a></li>
<li><a href="feedback.php?type=feature">Feature Requests</a></li>
<li class="active"><a href="feedback-view.php?id=<?PHP echo $f->id; ?>">Ticket #<?PHP echo $f->id; ?></a></li>
<li class="active"><a href="feedback-view.php?id=<?PHP echo $f->id; ?>">Feedback #<?PHP echo $f->id; ?></a></li>
</ul>
<div class="clear"></div>
</div>
Expand Down
5 changes: 3 additions & 2 deletions inc/nav.inc.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?PHP
if(rand(1,30) == 1)
include 'tweet-cron.php';
// if(rand(1,30) == 1)
// include 'tweet-cron.php';

$db = Database::getDatabase();
$feedback_count = $db->getValue("SELECT COUNT(*) FROM shine_feedback WHERE new = 1");
Expand All @@ -12,6 +12,7 @@
<li<?PHP if($nav == 'orders') : ?> class="active"<?PHP endif; ?>><a href="orders.php">Orders</a></li>
<li<?PHP if($nav == 'activations') : ?> class="active"<?PHP endif; ?>><a href="activations.php">Activations</a></li>
<li<?PHP if($nav == 'feedback') : ?> class="active"<?PHP endif; ?>><a href="feedback.php">Feedback (<?PHP echo $feedback_count; ?>)</a></li>
<li<?PHP if($nav == 'tickets') : ?> class="active"<?PHP endif; ?>><a href="tickets.php">Tickets</a></li>
<li<?PHP if($nav == 'tweets') : ?> class="active"<?PHP endif; ?>><a href="tweets.php">Tweets (<?PHP echo $tweet_count; ?>)</a></li>
<li<?PHP if($nav == 'stats') : ?> class="active"<?PHP endif; ?>><a href="stats.php">Sparkle Stats</a></li>
</ul>
Expand Down
60 changes: 56 additions & 4 deletions includes/class.objects.php
Original file line number Diff line number Diff line change
Expand Up @@ -316,16 +316,68 @@ public function __construct($id = null)

class Milestone extends DBObject
{
public function __construct($id = null)
function __construct($id = null)
{
parent::__construct('shine_milestone', array('app_id', 'title', 'dt_due', 'description', 'status'), $id);
parent::__construct('shine_milestones', array('app_id', 'title', 'dt_due', 'description', 'status'), $id);
}

function percent()
{
$db = Database::getDatabase();
$complete = $db->getValue("SELECT COUNT(*) FROM shine_tickets WHERE status IN ('resolved', 'invalid') AND milestone_id = '{$this->id}'");
$total = $db->getValue("SELECT COUNT(*) FROM shine_tickets WHERE status <> 'hold' AND milestone_id = '{$this->id}'");
if($total == 0)
return 0;
else
return round($complete / $total * 100);
}
}

class TicketHistory extends DBObject
{
public function __construct($id = null)
function __construct($id = null)
{
parent::__construct('shine_milestone', array('dt', 'ticket_id', 'app_id', 'user_id', 'status_from', 'status_to', 'milestone_from_id', 'milestone_to_id', 'comment'), $id);
parent::__construct('shine_ticket_history', array('dt', 'ticket_id', 'app_id', 'user_id', 'user_from', 'user_to', 'status_from', 'status_to', 'milestone_from_id', 'milestone_to_id', 'comment'), $id);
}

function changes()
{
$users = DBObject::glob('user', 'SELECT * FROM shine_users');
$milestones = DBObject::glob('milestone', "SELECT * FROM shine_milestones WHERE app_id = '{$this->app_id}'");

$changes = array();
if($this->user_from != $this->user_to)
{
$from = isset($users[$this->user_from]) ? $users[$this->user_from]->username : null;
$to = isset($users[$this->user_to]) ? $users[$this->user_to]->username : null;

if($from && $to)
$changes[] = "Reassigned to <span class='noun'>$to</span> from <span class='noun'>$from</span>";
elseif($to)
$changes[] = "Assigned to <span class='noun'>$to</span>";
elseif($from)
$changes[] = "No longer assigned to <span class='noun'>$from</span>";
}


if($this->milestone_from_id != $this->milestone_to_id)
{
$from = isset($milestones[$this->milestone_from_id]) ? $milestones[$this->milestone_from_id]->title : null;
$to = isset($milestones[$this->milestone_to_id]) ? $milestones[$this->milestone_to_id]->title : null;

if($from && $to)
$changes[] = "Milestone changed from <span class='noun'>$from</span> to <span class='noun'>$to</span>";
elseif($to)
$changes[] = "Milestone changed to <span class='noun'>$to</span>";
elseif($from)
$changes[] = "Removed from the <span class='noun'>$from</span> milestone";
}

if($this->status_from != $this->status_to)
{
$changes[] = "Status changed from <span class='noun'>" . ucwords($this->status_from) . "</span> to <span class='noun'>" . ucwords($this->status_to) . "</span>";
}

return $changes;
}
}
43 changes: 43 additions & 0 deletions tickets-app-summary.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?PHP
require 'includes/master.inc.php';
$Auth->requireAdmin('login.php');
$nav = 'tickets';

$app = new Application($_GET['id']);
if(!$app->ok()) redirect('tickets.php');
?>
<?PHP include('inc/header.inc.php'); ?>

<div id="bd">
<div id="yui-main">
<div class="yui-b"><div class="yui-g">

<div class="block tabs spaces">
<div class="hd">
<h2><?PHP echo $a->name; ?> Ticket Summary</h2>
<ul>
<li class="active"><a href="tickets-app-summary.php?id=<?PHP echo $app->id; ?>"><?PHP echo $app->name; ?> Summary</a></li>
<li><a href="tickets-tickets.php?app_id=<?PHP echo $app->id; ?>">Tickets</a></li>
<li><a href="tickets-milestones.php?app_id=<?PHP echo $app->id; ?>">Milestones</a></li>
</ul>
<div class="clear"></div>
</div>
<div class="bd">

</div>
</div>

</div></div>
</div>
<div id="sidebar" class="yui-b">
<div class="block">
<div class="hd"><h3>Create a New Item</h3></div>
<div class="bd">
<p class="text-center"><a href="tickets-new.php?app_id=<?PHP echo $app->id; ?>" class="big-button">New Ticket</a></p>
<p class="text-center"><a href="tickets-milestone-new.php?app_id=<?PHP echo $app->id; ?>" class="big-button">New Milestone</a></p>
</div>
</div>
</div>
</div>

<?PHP include('inc/footer.inc.php'); ?>
83 changes: 83 additions & 0 deletions tickets-milestone-new.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?PHP
require 'includes/master.inc.php';
$Auth->requireAdmin('login.php');
$nav = 'tickets';

$app = new Application($_GET['app_id']);
if(!$app->ok()) redirect('tickets.php');

if(isset($_POST['btnNew']))
{
if($Error->ok())
{
$m = new Milestone();
$m->app_id = $app->id;
$m->title = trim($_POST['title']);
$m->description = $_POST['description'];
$m->status = 'open';
$m->dt_due = dater($_POST['due']);

if(strlen($m->title) == 0)
$m->title = 'Untitled Milestone';

$m->insert();
redirect('tickets-milestones.php?app_id=' . $app->id);
}
else
{
$title = $_POST['title'];
$description = $_POST['description'];
$due = $_POST['due'];
}
}
else
{
$title = '';
$description = '';
$due = '';
}
?>
<?PHP include('inc/header.inc.php'); ?>

<div id="bd">
<div id="yui-main">
<div class="yui-b"><div class="yui-g">

<div class="block tabs spaces">
<div class="hd">
<h2><?PHP echo $a->name; ?> Ticket Summary</h2>
<ul>
<li><a href="tickets-app-summary.php?id=<?PHP echo $app->id; ?>"><?PHP echo $app->name; ?> Summary</a></li>
<li><a href="tickets-tickets.php?app_id=<?PHP echo $app->id; ?>">Tickets</a></li>
<li class="active"><a href="tickets-milestones.php?app_id=<?PHP echo $app->id; ?>">Milestones</a></li>
</ul>
<div class="clear"></div>
</div>
<div class="bd">
<form action="tickets-milestone-new.php?app_id=<?PHP echo $app->id;?>" method="post">
<p><label for="title">Title</label> <input type="text" name="title" id="title" value="<?PHP echo $title;?>" class="text"></p>
<p><label for="description">Description</label><br><textarea name="description" id="description" class="text"><?PHP echo $description ?></textarea><span class="info">Markdown is allowed</span></p>
<p><label for="due">Due Date:</label> <input type="text" name="due" id="due" value="<?PHP echo $due;?>" class="text"></p>
<p><input type="submit" name="btnNew" value="Create Milestone" id="btnNew"></p>
</form>
</div>
</div>

</div></div>
</div>
<div id="sidebar" class="yui-b">
<div class="block">
<div class="hd"><h3>Create a New Item</h3></div>
<div class="bd">
<p class="text-center"><a href="tickets-new.php?app_id=<?PHP echo $app->id; ?>" class="big-button">New Ticket</a></p>
<p class="text-center"><a href="tickets-milestone-new.php?app_id=<?PHP echo $app->id; ?>" class="big-button">New Milestone</a></p>
</div>
</div>
</div>
</div>
<script type="text/javascript" charset="utf-8">
window.onload = function() {
document.getElementById('title').focus();
}
</script>
<?PHP include('inc/footer.inc.php'); ?>
84 changes: 84 additions & 0 deletions tickets-milestone.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<?PHP
require 'includes/master.inc.php';
$Auth->requireAdmin('login.php');
$nav = 'tickets';

$m = new Milestone($_GET['id']);
if(!$m->ok()) redirect('tickets.php');
$app = new Application($m->app_id);
if(!$app->ok()) redirect('tickets.php');

if(isset($_POST['btnUpdate']))
{
if($Error->ok())
{
$m->app_id = $app->id;
$m->title = trim($_POST['title']);
$m->description = $_POST['description'];
$m->status = 'open';
$m->dt_due = dater($_POST['due']);

if(strlen($m->title) == 0)
$m->title = 'Untitled Milestone';

$m->insert();
redirect('tickets-milestones.php?app_id=' . $app->id);
}
else
{
$title = $_POST['title'];
$description = $_POST['description'];
$due = $_POST['due'];
}
}
else
{
$title = $m->title;
$description = $m->description;
$due = dater($m->dt_due, 'Y-m-d');
}
?>
<?PHP include('inc/header.inc.php'); ?>

<div id="bd">
<div id="yui-main">
<div class="yui-b"><div class="yui-g">

<div class="block tabs spaces">
<div class="hd">
<h2><?PHP echo $a->name; ?> Ticket Summary</h2>
<ul>
<li><a href="tickets-app-summary.php?id=<?PHP echo $app->id; ?>"><?PHP echo $app->name; ?> Summary</a></li>
<li><a href="tickets-tickets.php?app_id=<?PHP echo $app->id; ?>">Tickets</a></li>
<li class="active"><a href="tickets-milestones.php?app_id=<?PHP echo $app->id; ?>">Milestones</a></li>
</ul>
<div class="clear"></div>
</div>
<div class="bd">
<form action="tickets-milestone.php?id=<?PHP echo $m->id;?>" method="post">
<p><label for="title">Title</label> <input type="text" name="title" id="title" value="<?PHP echo $title;?>" class="text"></p>
<p><label for="description">Description</label><br><textarea name="description" id="description" class="text"><?PHP echo $description ?></textarea><span class="info">Markdown is allowed</span></p>
<p><label for="due">Due Date:</label> <input type="text" name="due" id="due" value="<?PHP echo $due;?>" class="text"></p>
<p><input type="submit" name="btnUpdate" value="Update Milestone" id="btnUpdate"></p>
</form>
</div>
</div>

</div></div>
</div>
<div id="sidebar" class="yui-b">
<div class="block">
<div class="hd"><h3>Create a New Item</h3></div>
<div class="bd">
<p class="text-center"><a href="tickets-new.php?app_id=<?PHP echo $app->id; ?>" class="big-button">New Ticket</a></p>
<p class="text-center"><a href="tickets-milestone-new.php?app_id=<?PHP echo $app->id; ?>" class="big-button">New Milestone</a></p>
</div>
</div>
</div>
</div>
<script type="text/javascript" charset="utf-8">
window.onload = function() {
document.getElementById('title').focus();
}
</script>
<?PHP include('inc/footer.inc.php'); ?>
62 changes: 62 additions & 0 deletions tickets-milestones.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?PHP
require 'includes/master.inc.php';
$Auth->requireAdmin('login.php');
$nav = 'tickets';

$app = new Application($_GET['app_id']);
if(!$app->ok()) redirect('tickets.php');

$milestones = DBObject::glob('milestone', "SELECT * FROM shine_milestones WHERE app_id = '{$app->id}' ORDER BY dt_due ASC");
?>
<?PHP include('inc/header.inc.php'); ?>

<div id="bd">
<div id="yui-main">
<div class="yui-b"><div class="yui-g">

<div class="block tabs spaces">
<div class="hd">
<h2><?PHP echo $a->name; ?> Ticket Summary</h2>
<ul>
<li><a href="tickets-app-summary.php?id=<?PHP echo $app->id; ?>"><?PHP echo $app->name; ?> Summary</a></li>
<li><a href="tickets-tickets.php?app_id=<?PHP echo $app->id; ?>">Tickets</a></li>
<li class="active"><a href="tickets-milestones.php?app_id=<?PHP echo $app->id; ?>">Milestones</a></li>
</ul>
<div class="clear"></div>
</div>
<div class="bd">
<table>
<thead>
<tr>
<td>Title</td>
<td>Due</td>
<td>Progres</td>
</tr>
</thead>
<tbody>
<?PHP foreach($milestones as $m): ?>
<tr>
<td><a href="tickets-milestone.php?id=<?PHP echo $m->id; ?>"><?PHP echo $m->title; ?></a></td>
<td><?PHP echo dater($m->dt_due, 'F j'); ?></td>
<td><span class="pbar"><span class="inner" style="width:<?PHP echo $m->percent(); ?>%;"></span><span class="percent"><?PHP echo $m->percent(); ?>%</span></span></td>
</tr>
<?PHP endforeach; ?>
</tbody>
</table>
</div>
</div>

</div></div>
</div>
<div id="sidebar" class="yui-b">
<div class="block">
<div class="hd"><h3>Create a New Item</h3></div>
<div class="bd">
<p class="text-center"><a href="tickets-new.php?app_id=<?PHP echo $app->id; ?>" class="big-button">New Ticket</a></p>
<p class="text-center"><a href="tickets-milestone-new.php?app_id=<?PHP echo $app->id; ?>" class="big-button">New Milestone</a></p>
</div>
</div>
</div>
</div>

<?PHP include('inc/footer.inc.php'); ?>
Loading

0 comments on commit eabe804

Please sign in to comment.