156 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |