/**
  * Method to get the available options plugin item type. value & text
  *
  * @return    array    array associate value and text
  * @since       1.1.0
  */
 public static function extensions($excluded = array())
 {
     $options = array();
     if ($extensions = get_object_vars(FieldsandfiltersFactory::getExtensions()->getExtensions())) {
         while ($extension = array_shift($extensions)) {
             if (!in_array($extension->name, $excluded)) {
                 // load plugin language
                 if ($extension->name != FieldsandfiltersExtensions::EXTENSION_DEFAULT) {
                     $extensionName = 'plg_' . $extension->type . '_' . $extension->name;
                     KextensionsLanguage::load($extensionName, JPATH_ADMINISTRATOR);
                 } else {
                     $extensionName = $extension->type . '_' . $extension->name;
                 }
                 $options[] = JHtml::_('select.option', $extension->content_type_id, JText::_(strtoupper($extensionName)));
             }
         }
     }
     return $options;
 }
	<?php 
    $pluginType = current($pluginTypes);
    KextensionsLanguage::load('plg_' . $pluginType->type . '_' . $pluginType->name, JPATH_ADMINISTRATOR);
    $group = $pluginType->forms->get($nameGroup)->group;
    echo JHtml::_('bootstrap.addSlide', 'pluginTypes', JText::_($group->title), 'type' . $nameGroup);
    ?>
	<ul class="nav nav-tabs nav-stacked <?php 
    echo $option;
    ?>
">
		<?php 
    foreach ($pluginTypes as &$type) {
        ?>
			<?php 
        if ($pluginType != $type) {
            KextensionsLanguage::load('plg_' . $type->type . '_' . $type->name, JPATH_ADMINISTRATOR);
        }
        $form = $type->forms->get($nameGroup);
        $options = array('id' => $recordId, 'type' => $type->type, 'name' => $type->name, 'type_mode' => $nameGroup);
        ?>
			<li>
				<a class="choose_type" href="#" title="<?php 
        echo $this->escape($form->description);
        ?>
"
					onclick="javascript:setType('<?php 
        echo base64_encode(json_encode($options));
        ?>
')">
					<?php 
        if ($document->direction != 'rtl') {
 /**
  * @param    object $form A form object.
  * @param    mixed  $data The data expected for the form.
  *
  * @return    void
  * @since       1.1.0
  * @throws    Exception if there is an error in the form event.
  */
 protected function preprocessForm(JForm $form, $data, $group = 'content')
 {
     $data = $data instanceof JRegistry ? $data : new JRegistry($data);
     $fieldType = $data->get('type', $this->getState($this->getName() . '.type'));
     $typeMode = $data->get('type_mode', FieldsandfiltersModes::getModeName($data->get('mode', $this->getState($this->getName() . '.mode')), FieldsandfiltersModes::MODE_NAME_TYPE));
     try {
         if ($fieldType && $typeMode && ($type = FieldsandfiltersFactory::getTypes()->getTypes(true)->get($fieldType))) {
             $path = $type->forms->get($typeMode, new JObject())->get('path');
             $form::addFormPath($path);
             if (!$form->loadFile($typeMode, true, '/metadata/form/*')) {
                 throw new Exception(JText::_('JERROR_LOADFILE_FAILED'));
             }
             if ($layoutType = $data->get('params.type.' . $typeMode . '_layout', $this->getState($this->getName() . '.layoutType'))) {
                 $paths = array(JPath::clean(JPATH_PLUGINS . '/' . $type->type . '/' . $type->name . '/tmpl/' . $typeMode));
                 if (strpos($layoutType, ':') > 0 && strpos($layoutType, '_:') !== 0) {
                     list($template, $layoutType) = explode(':', $layoutType);
                     $paths[] = JPATH::clean(JPATH_SITE . '/templates/' . $template . '/html/plg_' . $type->type . '_' . $type->name . '/' . $typeMode);
                 }
                 $path = JPath::find($paths, $layoutType . '.xml');
                 if (is_file($path)) {
                     if (!$form->loadFile($path, true, '/form/*')) {
                         throw new Exception(JText::_('JERROR_LOADFILE_FAILED'));
                     }
                 }
             }
             // load plugin language
             KextensionsLanguage::load('plg_' . $type->type . '_' . $type->name, JPATH_ADMINISTRATOR);
         }
         $contentTypeId = $data->get('content_type_id', $this->getState($this->getName() . '.content_type_id'));
         $extensionForm = $data->get('extension_form', 'extension');
         // get extension type objet by type id or plugin type
         if ($contentTypeId && ($extension = FieldsandfiltersFactory::getExtensions()->getExtensionsByTypeID($contentTypeId, true, true)->get($contentTypeId))) {
             $path = $extension->forms->get($extensionForm, new JObject())->get('path');
             $form::addFormPath($path);
             if (!$form->loadFile($extensionForm, true, '/metadata/form/*')) {
                 throw new Exception(JText::_('JERROR_LOADFILE_FAILED'));
             }
             // load plugin language
             KextensionsLanguage::load('plg_' . $extension->type . '_' . $extension->name, JPATH_ADMINISTRATOR);
         }
     } catch (Exception $e) {
         $this->setError($e->getMessage());
         return;
     }
     // overwrite the mode default of the plugin type mode
     $form->setFieldAttribute('mode', 'default', FieldsandfiltersModes::getMode($form->getFieldAttribute('mode', 'value', 'field.text', 'properties')));
     // Trigger the default form events.
     parent::preprocessForm($form, $data, $group);
 }
 /**
  * @since       1.1.0
  */
 public function onFieldsandfiltersRequestJSON($context, JObject $data)
 {
     if ($context != 'com_fieldsandfilters.filters.content') {
         return;
     }
     $app = JFactory::getApplication();
     $jinput = $app->input;
     $document = JFactory::getDocument();
     $basePath = sprintf('%s/%s/%s/overrides', JPATH_PLUGINS, $this->_type, $this->_name);
     $contentPath = JPATH_SITE . '/components/com_content';
     $id = $jinput->get('id', 0, 'int');
     $context = $jinput->get('context');
     if (!in_array($context, $this->_contexts)) {
         return false;
     }
     // Load PluginExtensions Helper
     $extension = FieldsandfiltersFactory::getExtensions()->getExtensionsByName($this->_name)->get($this->_name);
     if ($context == $this->_contexts['category'] && !$id || !$extension) {
         return false;
     }
     list($option, $class) = explode('.', $context);
     // set new jinput values
     $jinput->set('option', $option);
     $jinput->set('view', $class);
     $jinput->set('id', $jinput->get('id', 0, 'int'));
     // Include dependancies
     JLoader::import('com_content.helpers.route', JPATH_SITE . '/components');
     JLoader::import('com_content.helpers.query', JPATH_SITE . '/components');
     // Get controller Instance
     if (!($controller = KextensionsController::getInstance(null, 'contentController', array('base_path' => $contentPath, 'view_path' => $basePath . '/views')))) {
         return false;
     }
     // add model path
     $prefix = get_class($this);
     $controller->addModelPath($basePath . '/models', $prefix . 'Model');
     if (!($model = $controller->getModel($class, $prefix . 'Model', array('ignore_request' => false, 'table_path' => JPATH_ADMINISTRATOR . '/components/' . $option . '/tables')))) {
         return false;
     }
     $fieldsandfilters = $jinput->get('fieldsandfilters', array(), 'array');
     if (!empty($fieldsandfilters)) {
         $extensionsParams = new JObject(array('plugin.value' => $this->params->get('comparison_between_filters')));
         if ($moduleID = $jinput->get('module', 0, 'int')) {
             $extensionsParams->set('module.id', $moduleID);
         }
         $betweenFilters = FieldsandfiltersExtensionsHelper::getParams('comparison_between_filters', $extensionsParams, 'OR');
         $extensionsParams->set('plugin.value', $this->params->get('comparison_between_values_filters'));
         $betweenValues = FieldsandfiltersExtensionsHelper::getParams('comparison_between_values_filters', $extensionsParams, 'OR');
         $itemsID = FieldsandfiltersFiltersHelper::getItemsIDByFilters($extension->content_type_id, $fieldsandfilters, $model->getState('filter.published'), $betweenFilters, $betweenValues);
     } else {
         $itemsID = FieldsandfiltersFiltersHelper::getSimpleItemsID(false);
     }
     // load view
     if (!($view = $controller->getView($class, 'html', $prefix . 'View', array('base_path' => $contentPath, 'layout' => $jinput->get('layout', 'default'))))) {
         return false;
     }
     // For joomla 2.5 && Key Reference
     if (!FieldsandfiltersFactory::isVersion()) {
         $view->addTemplatePath(JPATH_THEMES . '/' . $app->getTemplate() . '/html/com_content/' . $class);
     }
     // set module to view
     $view->setModel($model, true);
     $view->document = $document;
     // add helpers
     JHtml::addIncludePath(JPATH_SITE . '/components/com_content/helpers');
     JHtml::addIncludePath(JPATH_SITE . '/components/com_content/helpers/html');
     KextensionsLanguage::load($option);
     $emptyItemsID = $itemsID->get('empty', false);
     $model->setState('fieldsandfilters.itemsID', (array) $itemsID->get('itemsID'));
     $model->setState('fieldsandfilters.emptyItemsID', $emptyItemsID);
     if ($jinput->get('random', false) && KextensionsModule::getParams($jinput->get('module'))->get('show_random', 0) && JComponentHelper::getParams('com_fieldsandfilters')->get('random_type_filters') == 'selected') {
         $model->setState('fieldsandfilters.random.selected', true);
         $model->setState('fieldsandfilters.random.limit', JComponentHelper::getParams('com_fieldsandfilters')->get('random_items_limit_filters', 0));
     }
     if (!$emptyItemsID) {
         ob_start();
         $view->display();
         $body = ob_get_contents();
         ob_end_clean();
     } else {
         $this->loadLanguage();
         $variables = new JObject();
         $variables->type = $this->_type;
         $variables->name = $this->_name;
         $variables->params = $this->params;
         $variables->extension = $extension;
         $body = KextensionsPlugin::renderLayout($variables, FieldsandfiltersPlugin::getLayout($this->params, 'empty_layout', 'empty'));
     }
     $itemsID = $model->getState('fieldsandfilters.itemsID', array());
     $fieldsID = $jinput->get('fields', array(), 'array');
     if (!empty($itemsID) && !empty($fieldsID) && !$emptyItemsID) {
         // Load Filters Helper
         $counts = (array) FieldsandfiltersFiltersHelper::getFiltersValuesCount($extension->content_type_id, $fieldsID, $itemsID, $model->getState('filter.published'));
         $data->set('counts', $counts);
     } else {
         if ($emptyItemsID) {
             // [TODO] when is empty display all fields with 0 counts or display special buttons to reset filters
             $data->set('empty', $emptyItemsID);
         }
     }
     $document->setBuffer($body, array('type' => 'component', 'name' => 'fieldsandfilters', 'title' => null));
     if (!$emptyItemsID) {
         // [TODO] move to another place because we need this only once
         $script[] = 'jQuery(document).ready(function($) {';
         $script[] = '	$("' . $this->params->get('selector_pagination_filters', '.pagination') . '").fieldsandfilters("pagination"' . ($app->get('sef', 0) ? ',{pagination: "start"}' : '') . ');';
         $script[] = '});';
         $document->addScriptDeclaration(implode("\n", $script));
     }
 }
<?php

/**
 * @package     fieldsandfilters.plugin
 * @subpackage  fieldsandfilters_field_type.textarea
 * @copyright   Copyright (C) 2012 KES - Kulka Tomasz . All rights reserved.
 * @license     GNU General Public License version 3 or later; see License.txt
 * @author      KES - Kulka Tomasz <*****@*****.**> - http://www.kextensions.com
 */
defined('_JEXEC') or die;
if (JFactory::getConfig()->get('debug')) {
    KextensionsLanguage::load('com_fieldsandfilters');
    echo JText::sprintf('COM_FIELDSANDFILTERS_ERROR_LAYOUT_PLUGIN_NOT_EXISTS', $plugin->field->params->get('type.field_layout'), $plugin->type . '/' . $plugin->name . '/' . $plugin->field->name);
}
 /**
  * Method to get the field input markup.
  *
  * @return    string    The field input markup.
  * @since       1.2.0
  */
 protected function getInput()
 {
     // Initialise variables
     $value = '';
     $html = array();
     $size = !empty($this->size) ? ' size="' . $this->size . '"' : '';
     $class = !empty($this->class) ? ' class="' . $this->class . '"' : 'class="inputbox"';
     $recordId = (int) $this->form->getValue('id', 0);
     $typeExtension = 'extension';
     if ($extension = FieldsandfiltersFactory::getExtensions()->getExtensionsPivot('content_type_id', true)->get($this->value)) {
         // Load Extensions Helper
         KextensionsLanguage::load('plg_' . $extension->type . '_' . $extension->name, JPATH_ADMINISTRATOR);
         $extensionForm = $extension->forms->get($typeExtension, new JObject());
         if (isset($extensionForm->group->title)) {
             $value = JText::_($extensionForm->title) . ' [' . JText::_($extensionForm->group->title) . ']';
         } elseif (isset($extensionForm->title)) {
             $value = JText::_($extensionForm->title);
         }
     }
     // Load the javascript and css
     JHtml::_('behavior.framework');
     JHtml::_('behavior.modal');
     $query = array('option' => 'com_fieldsandfilters', 'view' => 'plugins', 'tmpl' => 'component', 'layout' => 'extensions', 'recordId' => $recordId);
     $link = JRoute::_('index.php?' . JURI::buildQuery($query));
     if (FieldsandfiltersFactory::isVersion()) {
         $html[] = '<span class="input-append">';
         $html[] = '	<input type="text" readonly="readonly" disabled="disabled" value="' . $value . '"' . $size . $class . ' />';
         $html[] = '	<a class="btn btn-primary" onclick="SqueezeBox.fromElement(this, {handler:\'iframe\', size: {x: 600, y: 450}, url:\'' . $link . '\'})">';
         $html[] = '		<i class="icon-list icon-white"></i>';
         $html[] = JText::_('JSELECT');
         $html[] = '	</a>';
         $html[] = '</span>';
         $html[] = '<input class="input-small" type="hidden" name="' . $this->name . '" value="' . htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') . '" />';
     } else {
         $html[] = '<input type="text" readonly="readonly" disabled="disabled" value="' . $value . '"' . $size . $class . ' />';
         $html[] = '<input type="button" value="' . JText::_('JSELECT') . '" onclick="SqueezeBox.fromElement(this, {handler:\'iframe\', size: {x: 600, y: 450}, url:\'' . $link . '\'})" />';
         $html[] = '<input type="hidden" name="' . $this->name . '" value="' . htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') . '" />';
     }
     return implode("\n", $html);
 }
 /**
  * Method to get the field input for module layouts.
  *
  * @return  string  The field input.
  *
  * @since   11.1
  */
 protected function getInput()
 {
     if ($this->pluginName) {
         $lang = JFactory::getLanguage();
         $extension = 'plg_' . $this->pluginType . '_' . $this->pluginName;
         // Load language file
         KextensionsLanguage::load($extension, JPATH_ADMINISTRATOR);
         // Get the database object and a new query object.
         $db = JFactory::getDbo();
         $query = $db->getQuery(true);
         // Build the query.
         $query->select(array($db->quoteName('element'), $db->quoteName('name')))->from($db->quoteName('#__extensions', 'e'))->where($db->quoteName('e.client_id') . ' = ' . 0)->where($db->quoteName('e.type') . ' = ' . $db->quote('template'))->where($db->quoteName('e.enabled') . ' = 1');
         // Set the query and load the templates.
         $templates = $db->setQuery($query)->loadObjectList('element');
         // Build the search paths for module layouts.
         $plugin_path = JPath::clean(JPATH_PLUGINS . "/{$this->pluginType}/{$this->pluginName}/tmpl/{$this->layoutFolder}");
         // Prepare array of component layouts
         $plugin_layouts = array();
         // Prepare the grouped list
         $groups = array();
         // Add the layout options from the module path.
         if (is_dir($plugin_path) && ($plugin_layouts = JFolder::files($plugin_path, '^[^_]*\\.php$'))) {
             // Create the group for the plgin
             $group = JHtml::_('select.option', $this->id, JText::_('COM_FIELDSANDFILTERS_OPTION_FROM_PLUGIN'));
             $group->items = array();
             foreach ($plugin_layouts as $file) {
                 // Add an option to the module group
                 $value = basename($file, '.php');
                 $text = $lang->hasKey($key = strtoupper($extension . '_LAYOUT_' . $value)) ? JText::_($key) : $value;
                 $group->items[] = JHtml::_('select.option', $value, $text);
             }
             $groups['_'] = $group;
         }
         // Loop on all templates
         if ($templates) {
             foreach ($templates as $template) {
                 // Load language file
                 KextensionsLanguage::load('tpl_' . $template->element, JPATH_SITE);
                 $template_path = JPath::clean(JPATH_SITE . "/templates/{$template->element}/html/{$extension}/{$this->layoutFolder}");
                 // Add the layout options from the template path.
                 if (is_dir($template_path) && ($files = JFolder::files($template_path, '^[^_]*\\.php$'))) {
                     foreach ($files as $i => $file) {
                         // Remove layout that already exist in component ones
                         if (in_array($file, $plugin_layouts)) {
                             unset($files[$i]);
                         }
                     }
                     if (count($files)) {
                         // Create the group for the template
                         $group = JHtml::_('select.option', $this->id . '_' . $template->element, JText::sprintf('JOPTION_FROM_TEMPLATE', $template->name));
                         $group->items = array();
                         foreach ($files as $file) {
                             // Add an option to the template group
                             $value = basename($file, '.php');
                             $text = $lang->hasKey($key = strtoupper('TPL_' . $template->element . '_' . $extension . '_LAYOUT_' . $value)) ? JText::_($key) : $value;
                             $group->items[] = JHtml::_('select.option', $template->element . ':' . $value, $text);
                         }
                         $groups[$template->element] = $group;
                     }
                 }
             }
         }
         // Compute attributes for the grouped list
         $attr = $this->size ? ' size="' . $this->size . '"' : '';
         // Add a grouped list
         return JHtml::_('select.groupedlist', $groups, $this->name, array('id' => $this->id, 'group.id' => 'id', 'list.attr' => $attr, 'list.select' => (array) $this->value));
         return implode($html);
     }
     return '';
 }