function wp_fixture_tracker_math($data, $params) { $table = new FixtureTable($data); $trackerId = $params->trackerId->int(); $tracker = Tracker_Definition::get($trackerId); if (!$tracker) { return '__' . tr('Tracker not found.') . '__'; } $smarty = TikiLib::lib('smarty'); $smarty->loadPlugin('smarty_modifier_sefurl'); $url = smarty_modifier_sefurl($trackerId, 'tracker'); $table->setTitle(tr('Tracker Math for [%0|%1]', $url, $tracker->getConfiguration('name'))); $factory = new Tracker_Field_Factory($tracker); $checks = array(); $headings = $table->getHeadings(); foreach ($headings as $key => $heading) { $permName = rtrim($heading, '?'); if (!($field = $tracker->getFieldFromPermName($permName))) { return '__' . tr('Tracker Field not found: %0', $permName) . '__'; } if ($permName != $heading) { $checks[$key] = $factory->getHandler($field); if (!$checks[$key] instanceof Tracker_Field_Math) { return '__' . tr('Field is not a math field: %0', $permName) . '__'; } } } foreach ($table as $row) { $variableNames = array_map('rtrim', $headings, array_fill(0, count($headings), '?')); $variables = array_combine($variableNames, $row); foreach ($checks as $key => $field) { $out = $field->handleFinalSave($variables); if ($out == $row[$key]) { $table->setValue($key, $out, 'green'); } else { $table->setValue($key, tr("%0 (expect: %1)", $out, $row[$key]), 'red'); } } } return $table; }
/** * Get inputs for tracker item, useful for building interface for interacting with trackers * * @param int $itemId, 0 for new item * @param bool $includeJs injects header js for item into field value * @return array $fields array of fields just like that found in query, but the value of each field being the input */ private function getInputsForItem($itemId = 0, $includeJs = true) { $headerlib = TikiLib::lib("header"); $itemId = (int) $itemId; if ($includeJs == true) { $headerlibClone = clone $headerlib; } $trackerId = $this->trackerId(); if ($trackerId < 1) { return array(); } $trackerDefinition = Tracker_Definition::get($trackerId); $fields = array(); $fieldFactory = new Tracker_Field_Factory($trackerDefinition); $itemData = TikiLib::lib("trk")->get_tracker_item($itemId); foreach ($trackerDefinition->getFields() as $field) { $fieldKey = $this->byName == true ? $field['name'] : $field['fieldId']; if ($includeJs == true) { $headerlib->clear_js(); } $field['ins_id'] = "ins_" . $field['fieldId']; if ($itemId == 0 && isset($this->inputDefaults)) { $field['value'] = $this->inputDefaults[$fieldKey]; } $fieldHandler = $fieldFactory->getHandler($field, $itemData); $fieldInput = $fieldHandler->renderInput(); if ($includeJs == true) { $fieldInput = $fieldInput . $headerlib->output_js(); } $fields[$fieldKey] = $fieldInput; } if ($includeJs == true) { //restore the header to the way it was originally $headerlib = $headerlibClone; } return $fields; }