protected function getOptions()
{
$db = $this->form->getContainer()->platform->getDbo();
// Check for client_ids override
if ($this->client_ids !== null) {
$client_ids = $this->client_ids;
} else {
$client_ids = $this->element['client_ids'];
}
$client_ids = explode(',', $client_ids);
// Calculate client_ids where clause
foreach ($client_ids as &$client_id) {
$client_id = (int) trim($client_id);
$client_id = $db->q($client_id);
}
$query = $db->getQuery(true)->select(array($db->qn('name'), $db->qn('element'), $db->qn('client_id'), $db->qn('manifest_cache')))->from($db->qn('#__extensions'))->where($db->qn('type') . ' = ' . $db->q('component'))->where($db->qn('client_id') . ' IN (' . implode(',', $client_ids) . ')');
$components = $db->setQuery($query)->loadObjectList('element');
// Convert to array of objects, so we can use sortObjects()
// Also translate component names with JText::_()
$aComponents = array();
$user = $this->form->getContainer()->platform->getUser();
foreach ($components as $component) {
// Don't show components in the list where the user doesn't have access for
// TODO: perhaps add an option for this
if (!$user->authorise('core.manage', $component->element)) {
continue;
}
$oData = (object) array('value' => $component->element, 'text' => $this->translate($component, 'component'));
$aComponents[$component->element] = $oData;
}
// Reorder the components array, because the alphabetical
// ordering changed due to the JText::_() translation
uasort($aComponents, function ($a, $b) {
return strcasecmp($a->text, $b->text);
});
return $aComponents;
}