/**
* Method to get the field option groups.
*
* @return array The field option objects as a nested array in groups.
*
* @since 4.0.0
* @throws \UnexpectedValueException
*/
protected function getGroups()
{
$db = Factory::getDbo();
$query = $db->getQuery(true);
// Select distinct stages for existing articles
$query->select(['DISTINCT ' . $db->quoteName('ws.id', 'workflow_stage_id'), $db->quoteName('ws.title', 'workflow_stage_title'), $db->quoteName('w.title', 'workflow_title'), $db->quoteName('w.id', 'workflow_id'), $db->quoteName('w.ordering', 'ordering'), $db->quoteName('ws.ordering', 'workflow_stage_ordering')])->from($db->quoteName('#__workflow_stages', 'ws'))->from($db->quoteName('#__workflows', 'w'))->where([$db->quoteName('ws.workflow_id') . ' = ' . $db->quoteName('w.id'), $db->quoteName('w.extension') . ' = :extension'])->bind(':extension', $this->extension)->order([$db->quoteName('w.ordering'), $db->quoteName('ws.ordering')]);
if ($this->activeonly) {
$query->from($db->quoteName('#__workflow_associations', 'wa'))->where([$db->quoteName('wa.stage_id') . ' = ' . $db->quoteName('ws.id'), $db->quoteName('wa.extension') . ' = :associationExtension'])->bind(':associationExtension', $this->extension);
}
$stages = $db->setQuery($query)->loadObjectList();
$workflowStages = array();
// Grouping the stages by workflow
foreach ($stages as $stage) {
// Using workflow ID to differentiate workflows having same title
$workflowStageKey = Text::_($stage->workflow_title) . ' (' . $stage->workflow_id . ')';
if (!\array_key_exists($workflowStageKey, $workflowStages)) {
$workflowStages[$workflowStageKey] = array();
}
$workflowStages[$workflowStageKey][] = HTMLHelper::_('select.option', $stage->workflow_stage_id, Text::_($stage->workflow_stage_title));
}
// Merge any additional options in the XML definition.
return array_merge(parent::getGroups(), $workflowStages);
}