Files
2024-12-31 11:07:09 +01:00

156 lines
4.0 KiB
PHP

<?php
/**
* @author Tassos.gr <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
defined('_JEXEC') or die('Restricted access');
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
require_once JPATH_PLUGINS . '/system/nrframework/helpers/groupfield.php';
class JFormFieldNRK2 extends NRFormGroupField
{
public $type = 'K2';
/**
* Pagetypes options
*
* @var array
*/
public $pagetype_options = array(
'itemlist_category' => 'NR_ASSIGN_K2_CATEGORY_OPTION',
'item_item' => 'NR_ASSIGN_K2_ITEM_OPTION',
'item_itemform' => 'NR_ASSIGN_K2_ITEM_FORM_OPTION',
'latest_latest' => 'NR_ASSIGN_K2_LATEST_OPTION',
'itemlist_tag' => 'NR_ASSIGN_K2_TAG_OPTION',
'itemlist_user' => 'NR_ASSIGN_K2_USER_PAGE_OPTION'
);
public function getItems()
{
$query = $this->db->getQuery(true);
$query
->select('i.id, i.title as name, i.language, c.name as cat, i.published')
->from('#__k2_items as i')
->join('LEFT', '#__k2_categories AS c ON c.id = i.catid')
->order('i.title, i.ordering, i.id');
$this->db->setQuery($query);
$list = $this->db->loadObjectList();
return $this->getOptionsByList($list, array('language', 'cat', 'id'));
}
public function getPagetypes()
{
asort($this->pagetype_options);
foreach ($this->pagetype_options as $key => $option)
{
$options[] = HTMLHelper::_('select.option', $key, Text::_($option));
}
return $options;
}
public function getTags()
{
$query = $this->db->getQuery(true);
$query
->select('t.id, t.name')
->from('#__k2_tags as t')
->order('t.id');
$this->db->setQuery($query);
$list = $this->db->loadObjectList();
return $this->getOptionsByList($list);
}
public function getCategories()
{
$query = $this->db->getQuery(true);
$query
->select('c.id, c.name, c.parent, c.published, c.language')
->from('#__k2_categories as c')
->where('c.trash = 0')
->where('c.id != c.parent')
->order('c.ordering');
$this->db->setQuery($query);
$cats = $this->db->loadObjectList();
$options = [];
// get category levels
foreach ($cats as $c)
{
$level = 0;
$parent_id = (int)$c->parent;
while ($parent_id)
{
$level++;
$parent_id = $this->getNextParentId($cats, $parent_id);
}
$c->level = $level;
$options[] = $c;
}
// sort options
$options = $this->sortTreeSelectOptions($options);
return $this->getOptionsByList($options, array('language'));
}
/**
* Sorts treeselect options
*
* @param array $options
* @param int $parent_id
*
* @return array
*/
protected function sortTreeSelectOptions($options, $parent_id = 0)
{
if (empty($options))
{
return [];
}
$result = [];
$sub_options = array_filter($options, function($option) use($parent_id)
{
return $option->parent == $parent_id;
});
foreach ($sub_options as $option)
{
$result[] = $option;
$result = array_merge($result, $this->sortTreeSelectOptions($options, $option->id));
}
return $result;
}
/**
* Returns the next parent id
* Helper method for getCategories
*
* @return int
*/
protected function getNextParentId($categories, $current_pid)
{
foreach($categories as $c)
{
if ((int)$c->id === $current_pid)
{
return (int)$c->parent;
}
}
}
}