<?php
/**
 * @version		2.7.x
 * @package		K2
 * @author		JoomlaWorks http://www.joomlaworks.net
 * @copyright	Copyright (c) 2006 - 2016 JoomlaWorks Ltd. All rights reserved.
 * @license		GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
 */

// Check to ensure this file is within the rest of the framework
defined('JPATH_BASE') or die();

require_once (JPATH_ADMINISTRATOR.'/components/com_k2/elements/base.php');

class K2ElementMenuItem extends K2Element
{

    function fetchElement($name, $value, &$node, $control_name)
    {
        $db = JFactory::getDBO();

        // load the list of menu types
        // TODO: move query to model
        $query = 'SELECT menutype, title'.' FROM #__menu_types'.' ORDER BY title';
        $db->setQuery($query);
        $menuTypes = $db->loadObjectList();

        $where = '';
        if ($state = $node->attributes('state'))
        {
            $where .= ' AND published = '.(int)$state;
        }

        // load the list of menu items
        // TODO: move query to model
        if (K2_JVERSION != '15')
        {
            $query = 'SELECT id, parent_id, title, menutype, type, published'.' FROM #__menu'.$where.' ORDER BY menutype, parent_id, ordering';
        }
        else
        {
            $query = 'SELECT id, parent, name, menutype, type, published'.' FROM #__menu'.$where.' ORDER BY menutype, parent, ordering';

        }

        $db->setQuery($query);
        $menuItems = $db->loadObjectList();

        // establish the hierarchy of the menu
        // TODO: use node model
        $children = array();

        if ($menuItems)
        {
            // first pass - collect children
            foreach ($menuItems as $v)
            {
                if (K2_JVERSION != '15')
                {
                    $v->parent = $v->parent_id;
                    $v->name = $v->title;
                }
                $pt = $v->parent;
                $list = @$children[$pt] ? $children[$pt] : array();
                array_push($list, $v);
                $children[$pt] = $list;
            }
        }

        // second pass - get an indent list of the items
        $list = JHTML::_('menu.treerecurse', 0, '', array(), $children, 9999, 0, 0);

        foreach ($list as $item)
        {
            $item->treename = JString::str_ireplace('&#160;', ' -', $item->treename);
            $mitems[] = JHTML::_('select.option', $item->id, '   '.$item->treename);
        }

        // assemble into menutype groups
        $n = count($list);
        $groupedList = array();
        foreach ($list as $k => $v)
        {
            $groupedList[$v->menutype][] = &$list[$k];
        }

        // assemble menu items to the array
        $options = array();
        $options[] = JHTML::_('select.option', '', '- '.JText::_('K2_SELECT_MENU_ITEM').' -');

        foreach ($menuTypes as $type)
        {
            if ($type != '')
            {
                $options[] = JHTML::_('select.option', '0', '&nbsp;', 'value', 'text', true);
                $options[] = JHTML::_('select.option', $type->menutype, $type->title.' - '.JText::_('K2_TOP'), 'value', 'text', true);
            }
            if (isset($groupedList[$type->menutype]))
            {
                $n = count($groupedList[$type->menutype]);
                for ($i = 0; $i < $n; $i++)
                {
                    $item = &$groupedList[$type->menutype][$i];

                    //If menutype is changed but item is not saved yet, use the new type in the list
                    if (JRequest::getString('option', '', 'get') == 'com_menus')
                    {
                        $currentItemArray = JRequest::getVar('cid', array(0), '', 'array');
                        $currentItemId = (int)$currentItemArray[0];
                        $currentItemType = JRequest::getString('type', $item->type, 'get');
                        if ($currentItemId == $item->id && $currentItemType != $item->type)
                        {
                            $item->type = $currentItemType;
                        }
                    }

                    $disable = @strpos($node->attributes('disable'), $item->type) !== false ? true : false;

                    if ($item->published == 0)
                        $item->treename .= ' [**'.JText::_('K2_UNPUBLISHED').'**]';
                    if ($item->published == -2)
                        $item->treename .= ' [**'.JText::_('K2_TRASHED').'**]';

                    $options[] = JHTML::_('select.option', $item->id, $item->treename, 'value', 'text', $disable);

                }
            }
        }

        if (K2_JVERSION != '15')
        {
            $fieldName = $name;
        }
        else
        {
            $fieldName = $control_name.'['.$name.']';
        }

        return JHTML::_('select.genericlist', $options, $fieldName, 'class="inputbox"', 'value', 'text', $value, $control_name.$name);
    }

}

class JFormFieldMenuItem extends K2ElementMenuItem
{
    var $type = 'MenuItem';
}

class JElementMenuItem extends K2ElementMenuItem
{
    var $_name = 'MenuItem';
}
