function action_list_fields($input) { global $prefs; $trackerId = $input->trackerId->int(); $perms = Perms::get('tracker', $trackerId); if (!$perms->view_trackers) { throw new Services_Exception_Denied(tr("You don't have permission to view the tracker")); } $definition = Tracker_Definition::get($trackerId); if (!$definition) { throw new Services_Exception_NotFound(); } $fields = $definition->getFields(); $types = $this->utilities->getFieldTypes(); $typesDisabled = array(); if ($perms->admin_trackers) { $typesDisabled = $this->utilities->getFieldTypesDisabled(); } $missing = array(); $duplicates = array(); foreach ($fields as $field) { if (!array_key_exists($field['type'], $types) && !in_array($field['type'], $missing)) { $missing[] = $field['type']; } if ($prefs['unified_engine'] === 'elastic') { $tracker_fields = TikiLib::lib('tiki')->table('tiki_tracker_fields'); $dupeFields = $tracker_fields->fetchAll(array('fieldId', 'trackerId', 'name', 'permName', 'type'), array('fieldId' => $tracker_fields->not($field['fieldId']), 'type' => $tracker_fields->not($field['type']), 'permName' => $field['permName'])); if ($dupeFields) { foreach ($dupeFields as &$df) { $df['message'] = tr('Warning: There is a conflict in permanent names, which can cause indexing errors.') . '<br><a href="tiki-admin_tracker_fields.php?trackerId=' . $df['trackerId'] . '">' . tr('Field #%0 "%1" of type "%2" also found in tracker #%3 with perm name %4', $df['fieldId'], $df['name'], $types[$df['type']]['name'], $df['trackerId'], $df['permName']) . '</a>'; } $duplicates[$field['fieldId']] = $dupeFields; } } } if (!empty($missing)) { TikiLib::lib('errorreport')->report(tr('Warning: Required field types not enabled: %0', implode(', ', $missing))); } return array('fields' => $fields, 'types' => $types, 'typesDisabled' => $typesDisabled, 'duplicates' => $duplicates); }