From 62fe9038d7ec43fe67f772e4378f6e3909827ce8 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Fri, 25 Apr 2014 14:25:40 -0500 Subject: [PATCH] Add form management for users --- include/ajax.users.php | 43 +++++++++++++++++++++++++++++++++ include/class.dynamic_forms.php | 5 ++++ include/class.user.php | 8 ++++++ include/staff/user-view.inc.php | 10 +++++--- scp/ajax.php | 4 ++- 5 files changed, 65 insertions(+), 5 deletions(-) diff --git a/include/ajax.users.php b/include/ajax.users.php index a978c7054..97b9ae7dc 100644 --- a/include/ajax.users.php +++ b/include/ajax.users.php @@ -383,5 +383,48 @@ class UsersAjaxAPI extends AjaxController { return $ajax->createNote('U'.$id); } + function manageForms($user_id) { + $forms = DynamicFormEntry::forUser($user_id); + $info = array('action' => '#users/'.Format::htmlchars($user_id).'/forms/manage'); + include(STAFFINC_DIR . 'templates/form-manage.tmpl.php'); + } + + function updateForms($user_id) { + global $thisstaff; + + if (!$thisstaff) + Http::response(403, "Login required"); + elseif (!($user = User::lookup($user_id))) + Http::response(404, "No such user"); + elseif (!isset($_POST['forms'])) + Http::response(422, "Send updated forms list"); + + // Add new forms + $forms = DynamicFormEntry::forUser($user_id); + foreach ($_POST['forms'] as $sort => $id) { + $found = false; + foreach ($forms as $e) { + if ($e->get('form_id') == $id) { + $e->set('sort', $sort); + $e->save(); + $found = true; + break; + } + } + // New form added + if (!$found && ($new = DynamicForm::lookup($id))) { + $user->addForm($new, $sort); + } + } + + // Deleted forms + foreach ($forms as $idx => $e) { + if (!in_array($e->get('form_id'), $_POST['forms'])) + $e->delete(); + } + + Http::response(201, 'Successfully managed'); + } + } ?> diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php index d26cfb484..97348ff2c 100644 --- a/include/class.dynamic_forms.php +++ b/include/class.dynamic_forms.php @@ -615,6 +615,11 @@ class DynamicFormEntry extends VerySimpleModel { $this->object_id = $object_id; } + function forUser($user_id) { + return DynamicFormEntry::objects() + ->filter(array('object_id'=>$user_id, 'object_type'=>'U')); + } + function forOrganization($org_id) { return DynamicFormEntry::objects() ->filter(array('object_id'=>$org_id, 'object_type'=>'O')); diff --git a/include/class.user.php b/include/class.user.php index 89a35ab46..098e5611b 100644 --- a/include/class.user.php +++ b/include/class.user.php @@ -230,6 +230,14 @@ class User extends UserModel { return $this->created; } + function addForm($form, $sort=1) { + $form = $form->instanciate(); + $form->set('sort', $sort); + $form->set('object_type', 'U'); + $form->set('object_id', $this->getId()); + $form->save(); + } + function to_json() { $info = array( diff --git a/include/staff/user-view.inc.php b/include/staff/user-view.inc.php index 4b267a9cc..8e6514447 100644 --- a/include/staff/user-view.inc.php +++ b/include/staff/user-view.inc.php @@ -13,14 +13,10 @@ $org = $user->getOrganization(); title="Reload"><i class="icon-refresh"></i> <?php echo $user->getName(); ?></a></h2> </td> <td width="50%" class="right_align has_bottom_border"> - <?php - if ($account) { ?> <span class="action-button" data-dropdown="#action-dropdown-more"> <span ><i class="icon-cog"></i> More</span> <i class="icon-caret-down"></i> </span> - <?php - } ?> <a id="user-delete" class="action-button user-action" href="#users/<?php echo $user->getId(); ?>/delete"><i class="icon-trash"></i> Delete User</a> <?php @@ -53,6 +49,12 @@ $org = $user->getOrganization(); <?php } ?> + <li><a href="#ajax.php/users/<?php echo $user->getId(); + ?>/forms/manage" onclick="javascript: + $.dialog($(this).attr('href').substr(1), 201); + return false" + ><i class="icon-paste"></i> Manage Forms</a></li> + </ul> </div> </td> diff --git a/scp/ajax.php b/scp/ajax.php index 98dd7f132..75a3c4ac6 100644 --- a/scp/ajax.php +++ b/scp/ajax.php @@ -91,7 +91,9 @@ $dispatcher = patterns('', url_get('^/(?P<id>\d+)/org(?:/(?P<orgid>\d+))?$', 'updateOrg'), url_post('^/(?P<id>\d+)/org$', 'updateOrg'), url_get('^/staff$', 'searchStaff'), - url_post('^/(?P<id>\d+)/note$', 'createNote') + url_post('^/(?P<id>\d+)/note$', 'createNote'), + url_get('^/(?P<id>\d+)/forms/manage$', 'manageForms'), + url_post('^/(?P<id>\d+)/forms/manage$', 'updateForms') )), url('^/orgs', patterns('ajax.orgs.php:OrgsAjaxAPI', url_get('^$', 'search'), -- GitLab