function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $name = $this->getConfiguration('name'); $schema->addNew($permName, 'multi-id')->setLabel($name)->setReadOnly(true)->setRenderTransform(function ($value) { return implode(';', $value); })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); $schema->addNew($permName, 'multi-name')->setLabel($name)->setReadOnly(true)->setRenderTransform(function ($value, $extra) { if (is_string($value) && empty($value)) { // ItemsLists have no stored value, so when called from \Tracker\Tabular\Source\TrackerSourceEntry... // we have to: get a copy of this field $field = $this->getTrackerDefinition()->getFieldFromPermName($this->getConfiguration('permName')); // get a new handler for it $factory = $this->getTrackerDefinition()->getFieldFactory(); $handler = $factory->getHandler($field, ['itemId' => $extra['itemId']]); // for which we can then get the itemIds array of the "linked" items $value = $handler->getItemIds(); // and then get the labels from the id's we've now found as if they were the field's data } $labels = $this->getItemLabels($value, ['list_mode' => 'csv']); return implode(';', $labels); })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); return $schema; }
protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln('Importing tracker...'); $lib = \TikiLib::lib('tabular'); $info = $lib->getInfo($input->getArgument('tabularId')); $perms = \Perms::get('tabular', $info['tabularId']); if (!$info || !$perms->tabular_import) { throw new \Exception('Tracker Import: Tabular Format not found'); } $fileName = $input->getArgument('filename'); if (!file_exists($fileName)) { throw new \Exception('Tracker Import: File not found'); } // from \Services_Tracker_TabularController::getSchema TODO refactor? $tracker = \Tracker_Definition::get($info['trackerId']); if (!$tracker) { throw new \Exception('Tracker Import: Tracker not found'); } $schema = new \Tracker\Tabular\Schema($tracker); $schema->loadFormatDescriptor($info['format_descriptor']); $schema->loadFilterDescriptor($info['filter_descriptor']); $schema->validate(); if (!$schema->getPrimaryKey()) { throw new \Exception(tr('Primary Key required')); } // this will throw exceptions and not return if there's a problem $source = new \Tracker\Tabular\Source\CsvSource($schema, $fileName); $writer = new \Tracker\Tabular\Writer\TrackerWriter(); $writer->write($source); $output->writeln('Import done'); return 0; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $schema->addNew($permName, 'default')->setLabel($this->getConfiguration('name'))->setRenderTransform(function ($value) { return $value; })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $prepend = $this->getOption('prepend'); $append = $this->getOption('append'); $schema->addNew($permName, 'default')->setLabel($this->getConfiguration('name'))->setRenderTransform(function ($value) { return $value; }); $schema->addNew($permName, 'formatted')->setLabel($this->getConfiguration('name'))->addIncompatibility($permName, 'default')->setRenderTransform(function ($value) use($prepend, $append) { return $prepend . $value . $append; }); return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $smarty = TikiLib::lib('smarty'); $smarty->loadPlugin('smarty_modifier_escape'); $schema->addNew($permName, 'default')->setLabel($this->getConfiguration('name'))->setRenderTransform(function ($value) { return $value; }); $schema->addNew($permName, 'mailto')->setLabel($this->getConfiguration('name'))->setPlainReplacement('default')->setRenderTransform(function ($value) { $escape = smarty_modifier_escape($value); return "<a href=\"mailto:{$escape}\">{$escape}</a>"; }); return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $schema->addNew($permName, 'default')->setLabel($this->getConfiguration('name'))->setRenderTransform(function ($value) { return $value; }); return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $schema->addNew($permName, 'default')->setLabel($this->getConfiguration('name'))->setRenderTransform(function ($value) { return $value; })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); $prepend = $this->getOption('prepend'); $append = $this->getOption('append'); $schema->addNew($permName, 'formatted')->setLabel($this->getConfiguration('name'))->addIncompatibility($permName, 'default')->setRenderTransform(function ($value) use($prepend, $append) { return $prepend . $value . $append; })->setParseIntoTransform(function (&$info, $value) use($permName, $prepend, $append) { $value = substr($value, strlen($prepend), -strlen($append)); $info['fields'][$permName] = $value; }); return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $name = $this->getConfiguration('name'); $smarty = TikiLib::lib('smarty'); $smarty->loadPlugin('smarty_function_icon'); $schema->addNew($permName, 'y/n')->setLabel($name)->setRenderTransform(function ($value) { return $value; })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); $schema->addNew($permName, 'X')->setLabel($name)->addIncompatibility($permName, 'y/n')->setRenderTransform(function ($value) { return 'y' === $value ? 'X' : ''; })->setParseIntoTransform(function (&$info, $value) use($permName) { $value = trim($value); $info['fields'][$permName] = empty($value) ? 'n' : 'y'; }); $schema->addNew($permName, 'icon')->setLabel($name)->setPlainReplacement('X')->setRenderTransform(function ($value) use($smarty) { return 'y' === $value ? smarty_function_icon(['name' => 'success'], $smarty) : ''; }); return $schema; }
function getTabularSchema() { global $prefs; $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $baseKey = $this->getBaseKey(); $name = $this->getConfiguration('name'); $plain = function ($lang) { return function ($value, $extra) use($lang) { if (isset($extra['text'])) { $value = $extra['text']; } elseif ($lang && isset($value[$lang])) { $value = $lang; } return $value; }; }; $render = function ($lang) use($plain) { $f = $plain($lang); return function ($value, $extra) use($f) { $value = $f($value, $extra); return $this->attemptParse($value); }; }; if ('y' !== $this->getConfiguration('isMultilingual', 'n')) { $schema->addNew($permName, "default")->setLabel($name)->setReadOnly(true)->setPlainReplacement('default-raw')->addQuerySource('text', "{$baseKey}_raw")->setRenderTransform($render(null)); $schema->addNew($permName, 'default-raw')->setLabel($name)->addQuerySource('text', "{$baseKey}_raw")->setRenderTransform($plain(null))->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); } else { $lang = $prefs['language']; $schema->addNew($permName, "current")->setLabel($name)->setReadOnly(true)->setPlainReplacement('current-raw')->addQuerySource('text', "{$baseKey}_{$lang}_raw")->setRenderTransform($render($lang)); $schema->addNew($permName, 'current-raw')->setLabel(tr('%0 (%1)', $name, $lang))->setReadOnly(true)->addIncompatibility($permName, 'current')->addQuerySource('text', "{$baseKey}_{$lang}_raw")->setRenderTransform($plain($lang)); foreach ($prefs['available_languages'] as $lang) { $schema->addNew($permName, $lang)->setLabel($name)->setPlainReplacement("{$lang}-raw")->addQuerySource('text', "{$baseKey}_{$lang}_raw")->addIncompatibility($permName, 'current')->addIncompatibility($permName, 'current-raw')->setRenderTransform($render($lang)); $schema->addNew($permName, "{$lang}-raw")->setLabel(tr('%0 (%1)', $name, $lang))->addQuerySource('text', "{$baseKey}_{$lang}_raw")->addIncompatibility($permName, 'current')->addIncompatibility($permName, 'current-raw')->addIncompatibility($permName, $lang)->setRenderTransform($plain($lang))->setParseIntoTransform(function (&$info, $value) use($permName, $lang) { $info['fields'][$permName][$lang] = $value; }); } } return $schema; }
function getTabularSchema() { global $prefs; $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $baseKey = $this->getBaseKey(); $name = $this->getConfiguration('name'); $renderLink = function ($lang) { return function ($value, $extra) use($lang) { $smarty = TikiLib::lib('smarty'); $smarty->loadPlugin('smarty_function_object_link'); if (isset($extra['text'])) { $value = $extra['text']; } elseif ($lang && isset($value[$lang])) { $value = $lang; } if ($value) { return smarty_function_object_link(['type' => 'trackeritem', 'id' => $extra['itemId'], 'title' => $value], $smarty); } else { return ''; } }; }; if ('y' !== $this->getConfiguration('isMultilingual', 'n')) { $schema->addNew($permName, 'default')->setLabel($name)->setRenderTransform(function ($value) { return $value; })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); $schema->addNew($permName, 'link')->setLabel($name)->setPlainReplacement('default')->addQuerySource('itemId', 'object_id')->addIncompatibility($permName, 'default')->setRenderTransform($renderLink(null)); } else { $lang = $prefs['language']; $schema->addNew($permName, 'current')->setLabel(tr('%0 (%1)', $name, $lang))->setReadOnly(true)->addQuerySource('text', "{$baseKey}_{$lang}")->setRenderTransform(function ($value, $extra) use($lang) { if (isset($extra['text'])) { return $extra['text']; } elseif ($lang && isset($value[$lang])) { return $value[$lang]; } }); $schema->addNew($permName, "link-current")->setLabel($name)->setReadOnly(true)->setPlainReplacement($lang)->addQuerySource('itemId', 'object_id')->addQuerySource('text', "{$baseKey}_{$lang}")->setRenderTransform($renderLink($lang)); foreach ($prefs['available_languages'] as $lang) { $schema->addNew($permName, $lang)->setLabel(tr('%0 (%1)', $name, $lang))->addQuerySource('text', "{$baseKey}_{$lang}")->setRenderTransform(function ($value, $extra) use($lang) { if (isset($extra['text'])) { return $extra['text']; } elseif ($lang && isset($value[$lang])) { return $value[$lang]; } })->setParseIntoTransform(function (&$info, $value) use($permName, $lang) { $info['fields'][$permName][$lang] = $value; }); $schema->addNew($permName, "link-{$lang}")->setLabel($name)->setPlainReplacement($lang)->addQuerySource('itemId', 'object_id')->addQuerySource('text', "{$baseKey}_{$lang}")->addIncompatibility($permName, 'default')->addIncompatibility($permName, $lang)->setRenderTransform($renderLink($lang)); } } return $schema; }
function getTabularSchema() { $permName = $this->getConfiguration('permName'); $baseKey = $this->getBaseKey(); $name = $this->getConfiguration('name'); $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $schema->addNew($permName, 'userlink')->setLabel($name)->setPlainReplacement('username')->setRenderTransform(function ($value) { $smarty = TikiLib::lib('smarty'); $smarty->loadPlugin('smarty_modifier_userlink'); if ($value) { return smarty_modifier_userlink($value); } }); $schema->addNew($permName, 'realname')->setLabel($name)->setReadOnly(true)->setRenderTransform(function ($value) { $smarty = TikiLib::lib('smarty'); $smarty->loadPlugin('smarty_modifier_username'); if ($value) { return smarty_modifier_username($value, true, false, false); } }); $schema->addNew($permName, 'username-itemlink')->setLabel($name)->setPlainReplacement('username')->addQuerySource('itemId', 'object_id')->setRenderTransform(function ($value, $extra) { $smarty = TikiLib::lib('smarty'); $smarty->loadPlugin('smarty_function_object_link'); if ($value) { return smarty_function_object_link(['type' => 'trackeritem', 'id' => $extra['itemId'], 'title' => $value], $smarty); } }); $schema->addNew($permName, 'realname-itemlink')->setLabel($name)->setPlainReplacement('realname')->addQuerySource('itemId', 'object_id')->setRenderTransform(function ($value, $extra) { $smarty = TikiLib::lib('smarty'); $smarty->loadPlugin('smarty_function_object_link'); $smarty->loadPlugin('smarty_modifier_username'); if ($value) { return smarty_function_object_link(['type' => 'trackeritem', 'id' => $extra['itemId'], 'title' => smarty_modifier_username($value, true, false, false)], $smarty); } }); $schema->addNew($permName, 'username')->setLabel($name)->setRenderTransform(function ($value) { return $value; })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); return $schema; }
function getTabularSchema() { global $prefs; $permName = $this->getConfiguration('permName'); $type = $this->getOption('datetime'); $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $label = $this->getConfiguration('name'); $helper = new Tracker\Tabular\Schema\DateHelper($label); $helper->setupUnix($schema->addNew($permName, 'unix')); $tikidate = TikiLib::lib('tikidate'); if ($type == 'd') { $helper->setupFormat('Y-m-d', $schema->addNew($permName, 'yyyy-mm-dd')); $helper->setupFormat(str_replace($tikidate->search, $tikidate->replace, $prefs['short_date_format']), $schema->addNew($permName, 'short date format')); $helper->setupFormat(str_replace($tikidate->search, $tikidate->replace, $prefs['long_date_format']), $schema->addNew($permName, 'long date format')); } else { $helper->setupFormat('Y-m-d H:i:s', $schema->addNew($permName, 'yyyy-mm-dd hh:mm:ss')); $helper->setupFormat(str_replace($tikidate->search, $tikidate->replace, $prefs['short_date_format'] . ' ' . $prefs['short_time_format']), $schema->addNew($permName, 'short datetime format')); $helper->setupFormat(str_replace($tikidate->search, $tikidate->replace, $prefs['long_date_format'] . ' ' . $prefs['long_time_format']), $schema->addNew($permName, 'long datetime format')); } return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $name = $this->getConfiguration('name'); if (!$this->getOption('selectMultipleValues')) { // Cannot handle multiple values when exporting $schema->addNew($permName, 'id')->setLabel($name)->setRenderTransform(function ($value) { return $value; })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); $fullLookup = new Tracker\Tabular\Schema\CachedLookupHelper(); $fullLookup->setLookup(function ($value) { return $this->getItemLabel($value); }); $schema->addNew($permName, 'lookup')->setLabel($name)->setReadOnly(true)->addQuerySource('text', "tracker_field_{$permName}_text")->setRenderTransform(function ($value, $extra) use($fullLookup) { if (isset($extra['text'])) { return $extra['text']; } else { return $fullLookup->get($value); } }); if ($fieldId = $this->getOption('fieldId')) { $simpleField = Tracker\Tabular\Schema\CachedLookupHelper::fieldLookup($fieldId); $invertField = Tracker\Tabular\Schema\CachedLookupHelper::fieldInvert($fieldId); $schema->addNew($permName, 'lookup-simple')->setLabel($name)->addIncompatibility($permName, 'id')->addQuerySource('text', "tracker_field_{$permName}_text")->setRenderTransform(function ($value, $extra) use($simpleField) { if (isset($extra['text'])) { return $extra['text']; } else { return $simpleField->get($value); } })->setParseIntoTransform(function (&$info, $value) use($permName, $invertField) { if ($id = $invertField->get($value)) { $info['fields'][$permName] = $id; } }); } $schema->addNew($permName, 'name')->setLabel($name)->setReadOnly(true)->setRenderTransform(function ($value) { return $this->getItemLabel($value, ['list_mode' => 'csv']); }); } return $schema; }
private function getSchema(array $info) { $tracker = \Tracker_Definition::get($info['trackerId']); if (!$tracker) { throw new Services_Exception_NotFound(); } $schema = new \Tracker\Tabular\Schema($tracker); $schema->loadFormatDescriptor($info['format_descriptor']); $schema->loadFilterDescriptor($info['filter_descriptor']); return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $name = $this->getConfiguration('name'); $possibilities = $this->getPossibilities(); $invert = array_flip($possibilities); $schema->addNew($permName, 'code')->setLabel($name)->setRenderTransform(function ($value) { return $value; })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); $schema->addNew($permName, 'text')->setLabel($name)->addIncompatibility($permName, 'code')->addQuerySource('text', "tracker_field_{$permName}_text")->setRenderTransform(function ($value, $extra) use($possibilities) { if (isset($possibilities[$value])) { return $possibilities[$value]; } })->setParseIntoTransform(function (&$info, $value) use($permName, $invert) { if (isset($invert[$value])) { $info['fields'][$permName] = $invert[$value]; } }); return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $name = $this->getConfiguration('name'); $type = $this->getOption('inputtype'); $sourceCategories = $this->getApplicableCategories(); $applicable = $this->getIds($sourceCategories); $invert = array_flip(array_map(function ($item) { return $item['name']; }, $sourceCategories)); $matching = function ($extra) use($applicable) { static $lastId, $categories; if ($lastId == $extra['itemId']) { return $categories; } if (isset($extra['categories'])) { // Directly from search results $categories = array_intersect($extra['categories'], $applicable); } elseif (isset($extra['itemId'])) { // Not loaded, fetch list $categories = $this->getCategories($extra['itemId']); $categories = array_intersect($categories, $applicable); } else { $categories = []; } $lastId = $extra['itemId']; return $categories; }; if ($type == 'd' || $type == 'radio') { // Works for single selection only $schema->addNew($permName, 'id')->setLabel($name)->addQuerySource('itemId', 'object_id')->addQuerySource('categories', 'categories')->setRenderTransform(function ($value, $extra) use($matching) { $categories = $matching($extra); if (count($categories) > 1) { return '#invalid'; } else { return reset($categories); } })->setParseIntoTransform(function (&$info, $value) use($permName) { if ($value != '#invalid') { $info['fields'][$permName] = $value; } }); $schema->addNew($permName, 'name')->setLabel($name)->addIncompatibility($permName, 'id')->addQuerySource('itemId', 'object_id')->addQuerySource('categories', 'categories')->setRenderTransform(function ($value, $extra) use($matching, $sourceCategories) { $categories = $matching($extra); if (count($categories) > 1) { return '#invalid'; } else { $first = reset($categories); if (isset($sourceCategories[$first])) { return $sourceCategories[$first]['name']; } } })->setParseIntoTransform(function (&$info, $value) use($permName, $invert) { if (isset($invert[$value])) { $info['fields'][$permName] = $invert[$value]; } }); } else { // Handle multi-selection fields $schema->addNew($permName, 'multi-id')->setLabel($name)->addQuerySource('itemId', 'object_id')->addQuerySource('categories', 'categories')->setRenderTransform(function ($value, $extra) use($matching) { $categories = $matching($extra); return implode(';', $categories); })->setParseIntoTransform(function (&$info, $value) use($permName) { $values = explode(';', $value); $values = array_map('trim', $values); $info['fields'][$permName] = implode(',', array_filter($values)); }); $schema->addNew($permName, 'multi-name')->setLabel($name)->addIncompatibility($permName, 'multi-id')->addQuerySource('itemId', 'object_id')->addQuerySource('categories', 'categories')->setRenderTransform(function ($value, $extra) use($matching, $sourceCategories) { $categories = $matching($extra); $categories = array_map(function ($cat) use($sourceCategories) { if (isset($sourceCategories[$cat])) { return $sourceCategories[$cat]['name']; } }, $categories); return implode('; ', array_filter($categories)); })->setParseIntoTransform(function (&$info, $value) use($permName, $invert) { $values = explode(';', $value); $values = array_map('trim', $values); $values = array_map(function ($name) use($invert) { if (isset($invert[$name])) { return $invert[$name]; } }, $values); $info['fields'][$permName] = implode(',', array_filter($values)); }); } foreach ($sourceCategories as $cat) { $this->addCheckboxColumn($schema, $matching, $permName, $cat['categId'], $cat['name']); } return $schema; }
function getTabularSchema() { $schema = new Tracker\Tabular\Schema($this->getTrackerDefinition()); $permName = $this->getConfiguration('permName'); $name = $this->getConfiguration('name'); $possibilities = $this->getPossibilities(); $invert = array_flip($possibilities); $schema->addNew($permName, 'code')->setLabel($name)->setRenderTransform(function ($value) { return $value; })->setParseIntoTransform(function (&$info, $value) use($permName) { $info['fields'][$permName] = $value; }); $schema->addNew($permName, 'text')->setLabel($name)->addIncompatibility($permName, 'code')->setRenderTransform(function ($value) use($possibilities) { if (isset($possibilities[$value])) { return $possibilities[$value]; } })->setParseIntoTransform(function (&$info, $value) use($permName, $invert) { if (isset($invert[$value])) { $info['fields'][$permName] = $invert[$value]; } }); $schema->addNew($permName, 'flag')->setLabel($name)->setPlainReplacement('text')->setRenderTransform(function ($value) use($possibilities) { if (isset($possibilities[$value])) { return $this->renderImage($value, $possibilities[$value]); } }); $schema->addNew($permName, 'flag-and-text')->setLabel($name)->setPlainReplacement('text')->setRenderTransform(function ($value) use($possibilities) { if (isset($possibilities[$value])) { $label = $possibilities[$value]; return $this->renderImage($value, $label) . ' ' . smarty_modifier_escape($label); } }); return $schema; }