From e5c28b1fb8ebffdef26cf23defc80638a8080eba Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@osticket.com> Date: Mon, 3 Aug 2015 19:17:05 +0000 Subject: [PATCH] Get Dynamic Fields Implement generic get dynamic fields lookup routines --- include/class.task.php | 21 ++++++++----- include/class.ticket.php | 31 +++++++++++-------- .../templates/dynamic-field-config.tmpl.php | 9 +++--- include/staff/ticket-view.inc.php | 3 +- 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/include/class.task.php b/include/class.task.php index 00c52c402..aaadd5337 100644 --- a/include/class.task.php +++ b/include/class.task.php @@ -356,18 +356,23 @@ class Task extends TaskModel implements RestrictedAccess, Threadable { return $this->lastrespondent; } - function getMissingRequiredFields() { + function getDynamicFields($criteria=array()) { + $fields = DynamicFormField::objects()->filter(array( - 'id__in' => $this->entries - ->filter(array( - 'answers__field__flags__hasbit' => DynamicFormField::FLAG_CLOSE_REQUIRED, - 'answers__value__isnull' => true, - )) - ->values_flat('answers__field_id') - )); + 'id__in' => $this->entries + ->filter($criteria) + ->values_flat('answers__field_id'))); return ($fields && count($fields)) ? $fields : array(); + } + + function getMissingRequiredFields() { + return $this->getDynamicFields(array( + 'answers__field__flags__hasbit' => DynamicFormField::FLAG_ENABLED, + 'answers__field__flags__hasbit' => DynamicFormField::FLAG_CLOSE_REQUIRED, + 'answers__value__isnull' => true, + )); } function getParticipants() { diff --git a/include/class.ticket.php b/include/class.ticket.php index e38786a2d..ce0971fdd 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -86,6 +86,7 @@ class TicketModel extends VerySimpleModel { "'T'" => 'DynamicFormEntry.object_type', 'ticket_id' => 'DynamicFormEntry.object_id', ), + 'list' => true, ), ) ); @@ -817,6 +818,16 @@ implements RestrictedAccess, Threadable { return $this->recipients; } + function getDynamicFields($criteria=array()) { + + $fields = DynamicFormField::objects()->filter(array( + 'id__in' => $this->entries + ->filter($criteria) + ->values_flat('answers__field_id'))); + + return ($fields && count($fields)) ? $fields : array(); + } + function hasClientEditableFields() { $forms = DynamicFormEntry::forTicket($this->getId()); foreach ($forms as $form) { @@ -828,23 +839,17 @@ implements RestrictedAccess, Threadable { } function getMissingRequiredFields() { - $returnArray = array(); - $forms=DynamicFormEntry::forTicket($this->getId()); - foreach ($forms as $form) { - foreach ($form->getFields() as $field) { - if ($field->isRequiredForClose()) { - if (!$field->answer || !$field->answer->get('value')) { - array_push($returnArray, $field->getLocal('label')); - } - } - } - } - return $returnArray; + + return $this->getDynamicFields(array( + 'answers__field__flags__hasbit' => DynamicFormField::FLAG_ENABLED, + 'answers__field__flags__hasbit' => DynamicFormField::FLAG_CLOSE_REQUIRED, + 'answers__value__isnull' => true, + )); } function getMissingRequiredField() { $fields = $this->getMissingRequiredFields(); - return $fields[0]; + return $fields ? $fields[0] : null; } function addCollaborator($user, $vars, &$errors, $event=true) { diff --git a/include/staff/templates/dynamic-field-config.tmpl.php b/include/staff/templates/dynamic-field-config.tmpl.php index daf8cd0f3..0e8d7c835 100644 --- a/include/staff/templates/dynamic-field-config.tmpl.php +++ b/include/staff/templates/dynamic-field-config.tmpl.php @@ -99,17 +99,18 @@ <hr class="faded"/> <div class="span4"> - <div style="margin-bottom:5px"><strong>Data Integrity</strong> + <div style="margin-bottom:5px"><strong><?php __('Data Integrity'); + ?></strong> <i class="help-tip icon-question-sign" - data-title="<?php echo __('Required to close a case'); ?>" - data-content="<?php echo __('Optionally, this field can prevent closing a case until it has valid data.'); ?>"></i> + data-title="<?php echo __('Required to close a thread'); ?>" + data-content="<?php echo __('Optionally, this field can prevent closing a thread until it has valid data.'); ?>"></i> </div> </div> <div class="span6"> <input type="checkbox" name="flags[]" value="<?php echo DynamicFormField::FLAG_CLOSE_REQUIRED; ?>" <?php if ($field->hasFlag(DynamicFormField::FLAG_CLOSE_REQUIRED)) echo 'checked="checked"'; - ?>> <?php echo __('Required data to close'); ?><br/> + ?>> <?php echo __('Require entry to close a thread'); ?><br/> </div> <?php } ?> <?php } ?> diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php index 7b7cee624..685661abf 100644 --- a/include/staff/ticket-view.inc.php +++ b/include/staff/ticket-view.inc.php @@ -622,8 +622,7 @@ $tcount = $ticket->getThreadEntries($types)->count(); <?php $outstanding = false; if ($role->hasPerm(TicketModel::PERM_CLOSE) - && ($warning=$ticket->isCloseable()) - && $warning !==true) { + && is_string($warning=$ticket->isCloseable())) { $outstanding = true; echo sprintf('<div class="warning-banner">%s</div>', $warning); } ?> -- GitLab