* @link http://www.nonumber.nl
* @copyright Copyright (C) 2010 NoNumber! All Rights Reserved
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
*/
// Ensure this file is being included by a parent file
defined( '_JEXEC' ) or die( 'Restricted access' );
/**
* Components Element
*/
class JElementComponents extends JElement
{
/**
* Element name
*
* @access protected
* @var string
*/
var $_name = 'Components';
function fetchElement( $name, $value, &$node, $control_name )
{
$frontend = $this->def( $node->attributes( 'frontend' ), 1 );
$admin = $this->def( $node->attributes( 'admin' ), 1 );
$show_content = $this->def( $node->attributes( 'show_content' ), 0 );
$components = JElementComponents::getComponents( $frontend, $admin, $show_content );
// place a dummy hidden checkbox item in the list, to be able to deselect all (and still have a default)
$list = "\n".'';
if ( count( $components ) ) {
foreach ( $components as $component ) {
if ( ! is_array( $value ) ) $value = explode( ',', $value );
$checked = ( in_array( $component->option, $value ) ) ? ' checked="checked"' : '';
$list .= "\n".'';
$list .= $component->name.'
';
}
} else {
$list .= JText::_( 'Component Not Found' );
}
return $list;
}
function getComponents( $frontend = 1, $admin = 1, $show_content = 0 )
{
$db =& JFactory::getDBO();
if ( !$frontend && !$admin ) {
$query = 'SELECT '.$db->NameQuote( 'option' ).', name'
.' FROM #__components'
.' WHERE enabled = 1'
.' AND parent = 0'
;
if ( !$show_content ) {
$query .= ' AND '.$db->NameQuote( 'option' ).' <> "com_content"';
}
$query .= ' ORDER BY name';
$db->setQuery( $query );
$components = $db->loadObjectList();
} else {
if ( $frontend ) {
// component subs
$query = 'SELECT parent'
.' FROM #__components'
.' WHERE enabled = 1'
.' AND parent != 0'
.' AND link != ""'
.' GROUP BY parent'
;
$db->setQuery( $query );
$subcomponents = $db->loadResultArray();
// main components
$query = 'SELECT id'
.' FROM #__components'
.' WHERE enabled = 1'
.' AND parent = 0'
.' AND ( link != ""'
;
if ( count( $subcomponents ) ) {
$query .= ' OR id IN ( '.implode( ',', $subcomponents ).' )';
}
$query .= ' )';
$query .= ' ORDER BY ordering, name';
$db->setQuery( $query );
$component_ids = $db->loadResultArray();
}
if ( $admin ) {
// component subs
$query = 'SELECT parent'
.' FROM #__components'
.' WHERE enabled = 1'
.' AND parent != 0'
.' AND admin_menu_link != ""'
;
$db->setQuery( $query );
$subcomponents = $db->loadResultArray();
$subcomponents = array_unique( $subcomponents );
// main components
$query = 'SELECT id'
.' FROM #__components'
.' WHERE enabled = 1'
.' AND parent = 0'
.' AND ( admin_menu_link != ""'
;
if ( count( $subcomponents ) ) {
$query .= ' OR id IN ( '.implode( ',', $subcomponents ).' )';
}
$query .= ' )';
$db->setQuery( $query );
if ( $frontend ) {
$component_ids = array_merge( $component_ids, $db->loadResultArray() );
} else {
$component_ids = $db->loadResultArray();
}
}
$component_ids = array_unique( $component_ids );
$query = 'SELECT '.$db->NameQuote( 'option' ).', name'
.' FROM #__components'
.' WHERE enabled = 1'
.' AND parent = 0'
;
if ( count( $component_ids ) ) {
$query .= ' AND id IN ( '.implode( ',', $component_ids ).' )';
}
if ( !$show_content ) {
$query .= ' AND '.$db->NameQuote( 'option' ).' <> "com_content"';
}
$query .= ' ORDER BY name';
$db->setQuery( $query );
$components = $db->loadObjectList();
}
return $components;
}
function getComponentsArray( $frontend = 1, $admin = 1, $show_content = 0 )
{
$components = JElementComponents::getComponents( $frontend, $admin, $show_content );
$components = array();
foreach ( $components as $component ) {
$components[] = $component->option;
}
return $components;
}
function def( $val, $default )
{
return ( $val == '' ) ? $default : $val;
}
}