From 3ea63b0425499a316c75983bde060140f91c5132 Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@enhancesoft.com>
Date: Tue, 26 Nov 2013 03:51:00 +0000
Subject: [PATCH] Add ticket owner edit/manage

---
 include/ajax.tickets.php              | 52 +++++++++++++++++++
 include/staff/templates/user.tmpl.php | 75 +++++++++++++++++++++++++++
 scp/ajax.php                          |  2 +
 3 files changed, 129 insertions(+)
 create mode 100644 include/staff/templates/user.tmpl.php

diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php
index ef207f84d..aa4d99129 100644
--- a/include/ajax.tickets.php
+++ b/include/ajax.tickets.php
@@ -449,6 +449,58 @@ class TicketsAjaxAPI extends AjaxController {
         return $resp;
     }
 
+    function viewUser($tid) {
+        global $thisstaff;
+
+        if(!$thisstaff
+                || !($ticket=Ticket::lookup($tid))
+                || !$ticket->checkStaffAccess($thisstaff))
+            Http::response(404, 'No such ticket');
+
+
+        if(!($user = $ticket->getOwner()))
+            Http::response(404, 'Unknown user');
+
+
+        $info = array(
+                'title' => sprintf('Ticket #%s: %s', $ticket->getNumber(), $user->getName())
+                );
+
+        ob_start();
+        include(STAFFINC_DIR . 'templates/user.tmpl.php');
+        $resp = ob_get_contents();
+        ob_end_clean();
+        return $resp;
+
+    }
+
+    function updateUser($tid) {
+
+        global $thisstaff;
+
+        if(!$thisstaff
+                || !($ticket=Ticket::lookup($tid))
+                || !$ticket->checkStaffAccess($thisstaff)
+                || ! ($user = $ticket->getOwner()))
+            Http::response(404, 'No such ticket/user');
+
+        $errors = array();
+        if($user->updateInfo($_POST, $errors))
+             Http::response(201, $user->to_json());
+
+        $forms = $user->getForms();
+
+        $info = array(
+                'title' => sprintf('Ticket #%s: %s', $ticket->getNumber(), $user->getName())
+                );
+
+        ob_start();
+        include(STAFFINC_DIR . 'templates/user.tmpl.php');
+        $resp = ob_get_contents();
+        ob_end_clean();
+        return $resp;
+    }
+
     function changeUserForm($tid) {
         global $thisstaff;
 
diff --git a/include/staff/templates/user.tmpl.php b/include/staff/templates/user.tmpl.php
new file mode 100644
index 000000000..92bbe3754
--- /dev/null
+++ b/include/staff/templates/user.tmpl.php
@@ -0,0 +1,75 @@
+<?php
+if (!$info['title'])
+    $info['title'] = $user->getName();
+?>
+<h3><?php echo $info['title']; ?></h3>
+<b><a class="close" href="#"><i class="icon-remove-circle"></i></a></b>
+<hr/>
+<?php
+if ($info['error']) {
+    echo sprintf('<p id="msg_error">%s</p>', $info['error']);
+} elseif ($info['msg']) {
+    echo sprintf('<p id="msg_notice">%s</p>', $info['msg']);
+} ?>
+<div id="user-profile" style="display:<?php echo $forms ? 'none' : 'block'; ?>;margin:5px;">
+    <i class="icon-user icon-4x pull-left icon-border"></i>
+    <?php
+    if ($ticket) { ?>
+    <a class="action-button pull-right change-user" style="overflow:inherit"
+        href="#tickets/<?php echo $ticket->getId(); ?>/change-user" ><i class="icon-user"></i> Change User</a>
+    <?php
+    } ?>
+    <div><b><a href="#" id="edituser"><i class="icon-edit"></i>&nbsp;<?php
+    echo $user->getName(); ?></a></b></div>
+    <div>&lt;<?php echo $user->getEmail(); ?>&gt;</div>
+    <div><?php echo $user->getPhoneNumber(); ?></div>
+    <div class="clear"></div>
+    <hr>
+    <div class="faded">Last updated <b><?php echo Format::db_datetime($user->getUpdateDate()); ?> </b></div>
+</div>
+<div id="user-form" style="display:<?php echo $forms ? 'block' : 'none'; ?>;">
+<div><p id="msg_info"><i class="icon-info-sign"></i>&nbsp; Please note that updates will be reflected system-wide.</p></div>
+<?php
+$action = '#users/'.$user->getId();
+if ($ticket && $ticket->getOwnerId() == $user->getId())
+    $action = '#tickets/'.$ticket->getId().'/user';
+?>
+<form method="post" class="user" action="<?php echo $action; ?>">
+    <input type="hidden" name="uid" value="<?php echo $user->getId(); ?>" />
+    <table width="100%">
+    <?php
+        if (!$forms) $forms = $user->getForms();
+        foreach ($forms as $form)
+            $form->render();
+    ?>
+    </table>
+    <hr>
+    <p class="full-width">
+        <span class="buttons" style="float:left">
+            <input type="reset" value="Reset">
+            <input type="button" name="cancel" class="<?php echo $user ? 'cancel' : 'close' ?>"  value="Cancel">
+        </span>
+        <span class="buttons" style="float:right">
+            <input type="submit" value="Update User">
+        </span>
+     </p>
+</form>
+</div>
+<div class="clear"></div>
+<script type="text/javascript">
+$(function() {
+    $('a#edituser').click( function(e) {
+        e.preventDefault();
+        $('div#user-profile').hide();
+        $('div#user-form').fadeIn();
+        return false;
+     });
+
+    $(document).on('click', 'form.user input.cancel', function (e) {
+        e.preventDefault();
+        $('div#user-form').hide();
+        $('div#user-profile').fadeIn();
+        return false;
+     });
+});
+</script>
diff --git a/scp/ajax.php b/scp/ajax.php
index 82a2ce3ef..ddf0ab893 100644
--- a/scp/ajax.php
+++ b/scp/ajax.php
@@ -69,6 +69,8 @@ $dispatcher = patterns('',
     url('^/tickets/', patterns('ajax.tickets.php:TicketsAjaxAPI',
         url_get('^(?P<tid>\d+)/change-user$', 'changeUserForm'),
         url_post('^(?P<tid>\d+)/change-user$', 'changeUser'),
+        url_get('^(?P<tid>\d+)/user$', 'viewUser'),
+        url_post('^(?P<tid>\d+)/user$', 'updateUser'),
         url_get('^(?P<tid>\d+)/preview', 'previewTicket'),
         url_post('^(?P<tid>\d+)/lock', 'acquireLock'),
         url_post('^(?P<tid>\d+)/lock/(?P<id>\d+)/renew', 'renewLock'),
-- 
GitLab