diff --git a/include/ajax.orgs.php b/include/ajax.orgs.php index 3b187b18d8c5256cd9183dd986ad5239f52097d9..7737f57c11fd6780efc82602379a4734f8dc88a9 100644 --- a/include/ajax.orgs.php +++ b/include/ajax.orgs.php @@ -252,5 +252,48 @@ class OrgsAjaxAPI extends AjaxController { return $resp; } + + function manageForms($org_id) { + $forms = DynamicFormEntry::forOrganization($org_id); + $info = array('action' => '#orgs/'.Format::htmlchars($org_id).'/forms/manage'); + include(STAFFINC_DIR . 'templates/form-manage.tmpl.php'); + } + + function updateForms($org_id) { + global $thisstaff; + + if (!$thisstaff) + Http::response(403, "Login required"); + elseif (!($org = Organization::lookup($org_id))) + Http::response(404, "No such ticket"); + elseif (!isset($_POST['forms'])) + Http::response(422, "Send updated forms list"); + + // Add new forms + $forms = DynamicFormEntry::forOrganization($org_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))) { + $org->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/ajax.tickets.php b/include/ajax.tickets.php index 75e43fc4c7f29c018fdfa7abfab1f865d7260c4e..016882de13a4599bbf5976ed940c7b28d2fd73cc 100644 --- a/include/ajax.tickets.php +++ b/include/ajax.tickets.php @@ -613,6 +613,8 @@ class TicketsAjaxAPI extends AjaxController { } function manageForms($ticket_id) { + $forms = DynamicFormEntry::forTicket($ticket_id); + $info = array('action' => '#tickets/'.Format::htmlchars($ticket_id).'/forms/manage'); include(STAFFINC_DIR . 'templates/form-manage.tmpl.php'); } diff --git a/include/class.organization.php b/include/class.organization.php index 3801bba3a423067dcf32bbf0c64dd92d352776c0..81937964e55c75302872cf1b20ac72c1915a3d4f 100644 --- a/include/class.organization.php +++ b/include/class.organization.php @@ -185,6 +185,14 @@ class Organization extends OrganizationModel { } } + function addForm($form, $sort=1) { + $form = $form->instanciate(); + $form->set('sort', $sort); + $form->set('object_type', 'O'); + $form->set('object_id', $this->getId()); + $form->save(); + } + function to_json() { $info = array( diff --git a/include/staff/org-view.inc.php b/include/staff/org-view.inc.php index e866e4b5cdbd1b648691b82b05dd76050b10d904..c19a42efa3bfd114d5aa01a174a2cc9bec87d52b 100644 --- a/include/staff/org-view.inc.php +++ b/include/staff/org-view.inc.php @@ -9,8 +9,21 @@ if(!defined('OSTSCPINC') || !$thisstaff || !is_object($org)) die('Invalid path') title="Reload"><i class="icon-refresh"></i> <?php echo $org->getName(); ?></a></h2> </td> <td width="50%" class="right_align has_bottom_border"> + <span class="action-button" data-dropdown="#action-dropdown-more"> + <span ><i class="icon-cog"></i> More</span> + <i class="icon-caret-down"></i> + </span> <a id="org-delete" class="action-button org-action" href="#orgs/<?php echo $org->getId(); ?>/delete"><i class="icon-trash"></i> Delete Organization</a> + <div id="action-dropdown-more" class="action-dropdown anchor-right"> + <ul> + <li><a href="#ajax.php/orgs/<?php echo $org->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> </tr> </table> @@ -55,6 +68,8 @@ if(!defined('OSTSCPINC') || !$thisstaff || !is_object($org)) die('Invalid path') class="icon-list-alt"></i> Tickets</a></li> <li><a id="notes_tab" href="#notes"><i class="icon-pushpin"></i> Notes</a></li> + <li><a id="forms_tab" href="#fields"><i + class="icon-paste"></i> Fields</a></li> </ul> <div class="tab_content" id="users"> <?php @@ -66,6 +81,13 @@ include STAFFINC_DIR . 'templates/users.tmpl.php'; include STAFFINC_DIR . 'templates/tickets.tmpl.php'; ?> </div> +<div class="tab_content" id="fields" style="display:none"> + <table class="form_table" width="940" border="0" cellspacing="0" cellpadding="2"> +<?php foreach ($org->getDynamicData() as $form) { + $form->render(true, false, array('mode'=>'edit','width'=>160,'entry'=>$form)); +} ?> + </table> +</div> <div class="tab_content" id="notes" style="display:none"> <?php diff --git a/include/staff/templates/form-manage.tmpl.php b/include/staff/templates/form-manage.tmpl.php index 5e59011df9c12931f013395dbaa11920e0a1214f..52f670e91f42b9b3b848b3c1d0da36d763212434 100644 --- a/include/staff/templates/form-manage.tmpl.php +++ b/include/staff/templates/form-manage.tmpl.php @@ -5,11 +5,11 @@ Sort the forms on this ticket by click and dragging on them. Use the box below the forms list to add new forms to the ticket. <br/> <br/> -<form method="post" action="#tickets/<?php echo $ticket_id; ?>/forms/manage"> +<form method="post" action="<?php echo $info['action']; ?>"> <div id="ticket-entries"> <?php $current_list = array(); -foreach (DynamicFormEntry::forTicket($ticket_id) as $e) { ?> +foreach ($forms as $e) { ?> <div class="sortable-row-item" data-id="<?php echo $e->get('id'); ?>"> <input type="hidden" name="forms[]" value="<?php echo $e->get('form_id'); ?>" /> <i class="icon-reorder"></i> <?php echo $e->getForm()->getTitle(); diff --git a/scp/ajax.php b/scp/ajax.php index 2dd902087939a1c2f77240388d428ac3b6ad6878..98dd7f132fa0c6a9830cc1e0db203dfce6645b89 100644 --- a/scp/ajax.php +++ b/scp/ajax.php @@ -112,7 +112,9 @@ $dispatcher = patterns('', url('^/(?P<id>\d+)/import-users$', 'importUsers'), url_get('^/(?P<id>\d+)/delete$', 'delete'), url_delete('^/(?P<id>\d+)/delete$', 'delete'), - 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('^/tickets/', patterns('ajax.tickets.php:TicketsAjaxAPI', url_get('^(?P<tid>\d+)/change-user$', 'changeUserForm'),