| Current Path : /var/www/components/com_roksprocket/fields/ |
| Current File : /var/www/components/com_roksprocket/fields/filters.php |
<?php
/**
* @version $Id: filters.php 14427 2013-10-10 21:29:18Z btowles $
* @author RocketTheme http://www.rockettheme.com
* @copyright Copyright (C) 2007 - 2020 RocketTheme, LLC
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
*/
defined('JPATH_BASE') or die;
jimport('joomla.form.formfield');
class JFormFieldFilters extends JFormField
{
protected $type = 'Filters';
protected static $base_js_loaded = false;
protected $filter;
public function __construct($form = null)
{
parent::__construct($form);
}
protected function getInput()
{
$container = RokCommon_Service::getContainer();
$empty_button_text = rc__('Create New Filter');
if (isset($this->element['filterfileparam'])){
$filter_filename = $container->getParameter(($this->element['filterfileparam']));
}
else if ($this->element['filterfile']) {
$filter_filename = (string)$this->element['filterfile'];
}
$filter_file = $container[(string)$this->element['filterlocationparam']] . '/' . $filter_filename;
if (!file_exists($filter_file)) {
throw new RokSprocket_Exception(rc__('Unable to find filter file %s', $filter_file));
}
$xmlfile = simplexml_load_file($filter_file);
$this->filter = new RokCommon_Filter($xmlfile);
if (isset($this->element['emptybuttontext']))
{
$empty_button_text = rc__((string)$this->element['emptybuttontext']);
}
if(!self::$base_js_loaded)
{
RokCommon_Header::addInlineScript('
var RokSprocketFilters = {
filters: {},
template: \'<li><span data-filter-container="true"></span> <span class="controls"> <i class="icon tool minus" data-filter-action="removeRow"></i> <i class="icon tool plus" data-filter-action="addRow"></i></span></li>\'
};
');
self::$base_js_loaded = true;
}
$html = array();
/*
After everything fine, i'll handle via js and domready the call to filters ajax model
Something along these lines:
model: 'Filters',
action: 'getData',
params: JSON.encoded(
[{
id1: {pathrefs: .., file: ..}
}],
[{
id2: {pathrefs: .., file: ..}
}],
[{
id3: {pathrefs: .., file: ..}
}],
...
)
*/
/* // OLD Script
RokCommon_Header::addInlineScript('
window.addEvent(\'load\', function(){
RokSprocket.filters.addDataSet(\'' . $this->id . '\', {
pathsref: \''. (string)$this->element['filterlocationparam'] .'\',
file: \'' . (string)$this->element['filterfile'] .'\',
template: \'<li><span data-filter-container="true"></span> <span class="controls"> <i class="icon tool minus" data-filter-action="removeRow"></i> <i class="icon tool plus" data-filter-action="addRow"></i></span></li>\'
});
});
');*/
RokCommon_Header::addInlineScript("
RokSprocketFilters.filters['".$this->id."'] = {
pathsref: '". (string)$this->element['filterlocationparam'] . "',
file: '" . $filter_filename ."'
}");
$classes = explode(' ', $this->element['class']);
$classes[] = 'roksprocket-filters';
if (!is_array($this->value)) $classes[] = 'empty';
$classes = implode(' ', $classes);
$html[] = '<ul class="' . $classes . '" data-filter="' . $this->id . '" data-filter-name="' . $this->name . '">';
$html[] = ' <li class="create-new"><div class="btn btn-primary" data-filter-action="addRow">'.$empty_button_text.'</div></li>';
if (is_array($this->value)) {
foreach ($this->value as $rownum => $row) {
$firstRow = ($rownum == 1) ? ' class="first"' : '';
RokCommon_Utils_ArrayHelper::fromObject($row);
$html[] = ' <li data-row="true"' . $firstRow . '><span data-filter-container="true">' . $this->filter->renderLine($row, $this->name . '[' . $rownum . ']') . '</span><span class="controls"><i data-filter-action="removeRow" class="icon tool minus"></i><i data-filter-action="addRow" class="icon tool plus"></i></span></li>';
}
}
$html[] = ' </ul>';
if ($this->element['notice'] && strlen($this->element['notice'])) $html[] = '<div data-cookie="'.$this->id.'" class="roksprocket-filters-description alert alert-info"><a class="close" data-dismiss="alert">×</a>' . JText::_($this->element['notice']) . '</div>';
return implode("\n", $html);
}
protected function getLabel()
{
$label = $this->type;
if (isset($this->element['label']) && !empty($this->element['label']))
{
$label = rc__((string)$this->element['label']);
$description = rc__((string)$this->element['description']);
return '<label class="sprocket-tip" title="'.$description.'">'.$label.'</label>';
} else {
return;
}
}
protected function getTitle()
{
return $this->getLabel();
}
protected function getJSON()
{
return $this->filter->getJSON();
}
}