diff --git a/include/class.task.php b/include/class.task.php index 00c52c402252ee79d3015c906f51494b693e2f39..aaadd5337b04c07ee0f28994a12636f3788c66a7 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 e38786a2d681bdc3ac271bbe5c737b2e50e41dea..ce0971fdd2f4956dfeb68ca8db0515cb1e2e3e37 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 daf8cd0f3ae8488fc698126f102e71d06136e58a..0e8d7c83553c45f942be744b8d483a61d7f51b1f 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 7b7cee624b9832dfecb165b15dd3d50523c080b0..685661abf40a159172d4948ad8ea648ff8a75c88 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); } ?>