diff --git a/include/class.ticket.php b/include/class.ticket.php index 6e7fac29cbbf32466bc29ae47777f1623c313734..15d99684210a7daa45d0b82c35d20b8ee1758937 100644 --- a/include/class.ticket.php +++ b/include/class.ticket.php @@ -220,7 +220,7 @@ implements RestrictedAccess, Threadable, Searchable { return true; $warning = null; - if ($this->getMissingRequiredFields()) { + if (self::getMissingRequiredFields($this)) { $warning = sprintf( __( '%1$s is missing data on %2$s one or more required fields %3$s and cannot be closed'), __('This ticket'), @@ -1018,17 +1018,31 @@ implements RestrictedAccess, Threadable, Searchable { } } - function getMissingRequiredFields() { + static function getMissingRequiredFields($ticket) { + // Check for fields disabled by Help Topic + $disabled = array(); + foreach ($ticket->entries as $entry) { + $extra = JsonDataParser::decode($entry->extra); + if (!empty($extra['disable'])) + $disabled[] = $extra['disable']; + } + $disabled = !empty($disabled) ? call_user_func_array('array_merge', $disabled) : NULL; - return $this->getDynamicFields(array( + $criteria = array( 'answers__field__flags__hasbit' => DynamicFormField::FLAG_ENABLED, 'answers__field__flags__hasbit' => DynamicFormField::FLAG_CLOSE_REQUIRED, 'answers__value__isnull' => true, - )); + ); + + // If there are disabled fields then exclude them + if ($disabled) + array_push($criteria, Q::not(array('answers__field__id__in' => $disabled))); + + return $ticket->getDynamicFields($criteria, $ticket); } function getMissingRequiredField() { - $fields = $this->getMissingRequiredFields(); + $fields = self::getMissingRequiredFields($this); return $fields ? $fields[0] : null; } diff --git a/include/staff/templates/status-options.tmpl.php b/include/staff/templates/status-options.tmpl.php index 1c9bad9e894146e8818a8b34b5fded288cbdda72..c8cff18a94cc8b06535f0ecd017a2b87df9fd841 100644 --- a/include/staff/templates/status-options.tmpl.php +++ b/include/staff/templates/status-options.tmpl.php @@ -15,7 +15,7 @@ $actions= array( $states = array('open'); if ($thisstaff->getRole($ticket ? $ticket->getDeptId() : null)->hasPerm(Ticket::PERM_CLOSE) - && (!$ticket || !$ticket->getMissingRequiredFields())) + && (!$ticket || !Ticket::getMissingRequiredFields($ticket))) $states = array_merge($states, array('closed')); $statusId = $ticket ? $ticket->getStatusId() : 0;