tra('Tracker Item Field'), 'documentation' => 'PluginTrackerItemField', 'description' => tra('Display or test the value of a tracker item field'), 'prefs' => [ 'wikiplugin_trackeritemfield', 'feature_trackers' ], 'body' => tr('Wiki text containing an %0{ELSE}%1 marker.', '', ''), 'iconname' => 'trackers', 'introduced' => 2, 'filter' => 'wikicontent', 'params' => [ 'trackerId' => [ 'required' => false, 'name' => tra('Tracker ID'), 'description' => tra('Numeric value representing the tracker ID.'), 'since' => '2.0', 'filter' => 'digits', 'default' => '', 'profile_reference' => 'tracker', ], 'itemId' => [ 'required' => false, 'name' => tra('Item ID'), 'description' => tra('Numeric value representing the item ID. Default is the user tracker item for the current user.'), 'since' => '2.0', 'filter' => 'digits', 'default' => '', 'profile_reference' => 'tracker_item', ], 'fieldId' => [ 'required' => false, 'name' => tra('Field ID'), 'description' => tra('Numeric value representing the field ID displayed or tested'), 'since' => '2.0', 'filter' => 'digits', 'default' => '', 'profile_reference' => 'tracker_field', 'parent' => 'input[name="params[trackerId]"]', 'parentkey' => 'tracker_id', ], 'fields' => [ 'required' => false, 'name' => tra('Fields'), 'description' => tra('Colon-separated list of field IDs. Default is all fields'), 'since' => '2.0', 'default' => '', 'filter' => 'text', 'separator' => ':', 'profile_reference' => 'tracker_field', 'parent' => 'input[name="params[trackerId]"]', 'parentkey' => 'tracker_id', ], 'list_mode' => [ 'required' => false, 'name' => tra('List Mode'), 'description' => tra('Set output format. Yes (y) displays tracker item field with truncated values (default); No (n) displays in tracker item field view; Comma Separated Values (csv) outputs without any HTML formatting.'), 'since' => '25.0', 'filter' => 'alpha', 'default' => 'y', 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Yes'), 'value' => 'y'], ['text' => tra('No'), 'value' => 'n'], ['text' => tra('Comma Separated Values'), 'value' => 'csv'] ] ], 'status' => [ 'required' => false, 'name' => tra('Status'), 'description' => tra('Status of the tracker item'), 'since' => '2.0', 'filter' => 'alpha', 'default' => '', 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Open'), 'value' => 'o'], ['text' => tra('Pending'), 'value' => 'p'], ['text' => tra('Closed'), 'value' => 'c'], ['text' => tra('Open & Pending'), 'value' => 'op'], ['text' => tra('Open & Closed'), 'value' => 'oc'], ['text' => tra('Pending & Closed'), 'value' => 'pc'], ['text' => tra('Open, Pending & Closed'), 'value' => 'opc'], ] ], 'test' => [ 'required' => false, 'name' => tra('Test'), 'description' => tr('Set to Yes (%01%1) to test whether a field is empty (if value parameter is empty) or has a value the same as the value parameter.', '', ''), 'since' => '2.0', 'default' => '', 'filter' => 'digits', 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Yes'), 'value' => 1], ['text' => tra('No'), 'value' => 0], ], ], 'value' => [ 'required' => false, 'name' => tra('Value'), 'description' => tra('Value to compare against.'), 'since' => '2.0', 'default' => '', 'filter' => 'text', ], ], ]; } function wikiplugin_trackeritemfield($data, $params) { global $userTracker, $group, $user, $tiki_p_admin_trackers, $prefs; static $memoItemId = 0; static $memoTrackerId = 0; static $memoStatus = 0; static $memoUserTracker = false; static $memoItemObject = null; $userlib = TikiLib::lib('user'); $tikilib = TikiLib::lib('tiki'); $smarty = TikiLib::lib('smarty'); $trklib = TikiLib::lib('trk'); extract($params, EXTR_SKIP); if (empty($itemId) && ! empty($_REQUEST['itemId'])) { if (! empty($trackerId)) { $info = $trklib->get_item_info($_REQUEST['itemId']); if (! empty($info) && $info['trackerId'] == $trackerId) { $itemId = $_REQUEST['itemId']; } } else { $itemId = $_REQUEST['itemId']; } } if (empty($itemId) && ! empty($trackerId) && ($tracker_info = $trklib->get_tracker($trackerId))) { if ($t = $trklib->get_tracker_options($trackerId)) { $tracker_info = array_merge($tracker_info, $t); } $itemId = $trklib->get_user_item($trackerId, $tracker_info); } if ((! empty($itemId) && $memoItemId == $itemId) || (empty($itemId) && ! empty($memoItemId) && ! empty($memoItemObject))) { $itemId = $memoItemId; if (empty($memoTrackerId)) { return tra('Incorrect param'); } $trackerId = $memoTrackerId; $itemObject = $memoItemObject; } else { if (! empty($trackerId) && ! empty($_REQUEST['view_user'])) { $itemId = $trklib->get_user_item($trackerId, $tracker_info, $_REQUEST['view_user']); } if (empty($trackerId) && empty($itemId) && ((isset($userTracker) && $userTracker == 'y') || (isset($prefs) && $prefs['userTracker'] == 'y')) && ! empty($group) && ($utid = $userlib->get_tracker_usergroup($user)) && $utid['usersTrackerId']) { $trackerId = $utid['usersTrackerId']; $itemId = $trklib->get_item_id($trackerId, $utid['usersFieldId'], $user); } elseif (empty($trackerId) && ! empty($itemId)) { $item = $trklib->get_tracker_item($itemId); $trackerId = $item['trackerId']; } if (empty($itemId) && empty($test) && empty($status)) {// need an item return tra('Incorrect param') . ': itemId'; } if (! empty($status) && ! $trklib->valid_status($status)) { return tra('Incorrect param') . ': status'; } $info = $trklib->get_tracker_item($itemId); if (! empty($info) && empty($trackerId)) { $trackerId = $info['trackerId']; } if (empty($info) && ! empty($test) && $test == 1) { // item not found, should still test if that is the function (as documented) if (! isset($data)) { $data = $dataelse = ''; } elseif (! empty($data) && strpos($data, '{ELSE}')) { $dataelse = substr($data, strpos($data, '{ELSE}') + 6); $data = substr($data, 0, strpos($data, '{ELSE}')); } else { $dataelse = ''; } if (empty($value)) { // testing if empty return $data; } else { // testing for something return $dataelse; } } elseif(empty($info)) { // item not found, nothing to show return ''; } $itemObject = Tracker_Item::fromInfo($info); if (! $itemObject->canView()) { return WikiParser_PluginOutput::error(tr('Permission denied'), tr('You are not allowed to view this item.')); } $memoStatus = $info['status']; $memoItemId = $itemId; $memoTrackerId = $info['trackerId']; $memoItemObject = $itemObject; if (isset($_REQUEST['itemId']) && $_REQUEST['itemId'] != $itemId) { $logslib = TikiLib::lib('logs'); $logslib->add_action('Viewed', $itemId, 'trackeritem', $_SERVER['REQUEST_URI'] . '&trackeritemfield'); } } if (! isset($data)) { $data = $dataelse = ''; } elseif (! empty($data) && strpos($data, '{ELSE}')) { $dataelse = substr($data, strpos($data, '{ELSE}') + 6); $data = substr($data, 0, strpos($data, '{ELSE}')); } else { $dataelse = ''; } if (! empty($status)) { if (! strstr($status, $memoStatus)) { return $dataelse; } } if (empty($itemId) && ! empty($test)) { return $dataelse; } elseif (empty($itemId)) { return tra('Incorrect param') . ': itemId'; } elseif (isset($fields)) { $all_fields = $trklib->list_tracker_fields($trackerId, 0, -1); $all_fields = $all_fields['data']; if (! empty($fields)) { foreach ($all_fields as $i => $fopt) { if (! in_array($fopt['fieldId'], $fields)) { unset($all_fields[$i]); } } if (empty($all_fields)) { return tra('Incorrect param'); } } $field_values = $trklib->get_item_fields($trackerId, $itemId, $all_fields, $itemUsers); foreach ($field_values as $field_value) { if (($field_value['type'] == 'p' && $field_value['options_array'][0] == 'password') || ($field_value['isHidden'] != 'n' && $field_value['isHidden'] != 'c')) { continue; } if (! $itemObject->canViewField($field_value['fieldId'])) { continue; } if (empty($field_value['value'])) { return $dataelse; } } } elseif (! empty($fieldId)) { if (! ($field = $trklib->get_tracker_field($fieldId))) { return tra('Incorrect param') . ': fieldId'; } if (! $itemObject->canViewField($fieldId)) { return WikiParser_PluginOutput::error(tr('Permission denied'), tr("You don't have permission to view this field.")); } if (empty($test)) { $test = false; } if (($val = $trklib->get_item_value($trackerId, $itemId, $fieldId)) !== false) { if ($test) { if (empty($value) && empty($val)) { return $data; } if (! empty($value) && $val == $value) { return $data; } return $dataelse; } else { $field['value'] = $val; if (empty($info)) { if (! empty($memoItemObject)) { $info = $memoItemObject->getData(); } else { $info = []; } } $handler = $trklib->get_field_handler($field, $info); $field = array_merge($field, $handler->getFieldData()); // some fields (such as DropDown and Category need this) $handler = $trklib->get_field_handler($field, $info); if (isset($params['list_mode']) && !empty($params['list_mode'])) { $list_mode = $params['list_mode']; $out = $handler->renderOutput(['list_mode' => $list_mode]); } else { $out = $handler->renderOutput(['list_mode' => 'y']); } return $out; } } elseif ($test) { // testing the value of a field that does not exist yet return $dataelse; } } return $data; }