<?php
/**
 * $Id: com_eventlist.php 52 2009-10-24 22:35:11Z guilleva $
 * $LastChangedDate: 2009-10-24 16:35:11 -0600 (Sat, 24 Oct 2009) $
 * $LastChangedBy: guilleva $
 * Xmap by Guillermo Vargas
 * a sitemap component for Joomla! CMS (http://www.joomla.org)
 * Author Website: http://joomla.vargas.co.cr
 * Project License: GNU/GPL http://www.gnu.org/copyleft/gpl.html
*/

/*
 * Handles EventList Category structure
 */
class xmap_com_eventlist
{
        /*
        * This function is called before a menu item is printed. We use it to set the
        * proper uniqueid for the item
        */
        function prepareMenuItem(&$node) {
                $link_query = parse_url( $node->link );
                parse_str( html_entity_decode($link_query['query']), $link_vars);
                $id = intval(xmap_com_eventlist::getParam($link_vars,'id',0));
                $view = xmap_com_eventlist::getParam($link_vars,'view',0);
                if ( !$id ) {
                        $menu =& JSite::getMenu();
                        $params = $menu->getParams($node->id);
                        $id = $params->get('id',0);
		}
		if ( $id ) {
                    if ( $view == 'details' ) {
                        $node->uid = 'com_eventliste'.$id;
                        $node->expandible = false;
                    } elseif ( $view == 'categoryevents'  ) {
                        $node->expandible = true;
                        $node->uid = 'com_eventlistc'.$id;
                    } elseif ( $view == 'venueevents'  ) {
                        $node->expandible = true;
                        $node->uid = 'com_eventlistv'.$id;
                    }
                } else {
                    $node->expandible = true;
                }
        }

	/*
	 * Return Category tree 
	 */
	function getTree( &$xmap, &$parent, $params )
	{
		$catid=0;
		$venid=0;
		$link_query = parse_url( $parent->link );
                parse_str( html_entity_decode($link_query['query']), $link_vars );
		$view = JArrayHelper::getValue($link_vars,'view','');

		if ( $view == 'categoryevents' ) {
	                $catid = intval(JArrayHelper::getValue($link_vars,'id',0));
		}elseif ( $view == 'venueevents' ) {
			$venid = intval(JArrayHelper::getValue($link_vars,'id',0));
		}elseif ( $view != 'venues' && $view != 'categories' ) {  //Do not expand other kind of menu items
			return true;
		}

		$include_events = JArrayHelper::getValue( $params, 'include_events',1,'' );
		$include_events = ( $include_events == 1
                                  || ( $include_events == 2 && $xmap->view == 'xml') 
                                  || ( $include_events == 3 && $xmap->view == 'html'));
		$params['include_events'] = $include_events;

		$priority = JArrayHelper::getValue($params,'cat_priority',$parent->priority,'');
		$changefreq = JArrayHelper::getValue($params,'cat_changefreq',$parent->changefreq,'');
		if ($priority  == '-1')
			$priority = $parent->priority;
		if ($changefreq  == '-1')
			$changefreq = $parent->changefreq;

		$params['cat_priority'] = $priority;
		$params['cat_changefreq'] = $changefreq;

		$priority = JArrayHelper::getValue($params,'venue_priority',$parent->priority,'');
		$changefreq = JArrayHelper::getValue($params,'venue_changefreq',$parent->changefreq,'');
		if ($priority  == '-1')
			$priority = $parent->priority;
		if ($changefreq  == '-1')
			$changefreq = $parent->changefreq;

		$params['venue_priority'] = $priority;
		$params['venue_changefreq'] = $changefreq;

		$priority = JArrayHelper::getValue($params,'event_priority',$parent->priority,'');
		$changefreq = JArrayHelper::getValue($params,'event_changefreq',$parent->changefreq,'');
		if ($priority  == '-1')
			$priority = $parent->priority;

		if ($changefreq  == '-1')
			$changefreq = $parent->changefreq;

		$params['event_priority'] = $priority;
		$params['event_changefreq'] = $changefreq;

		if ( $include_events ) {
			$params['limit'] = '';
			$params['days'] = '';
			$limit = JArrayHelper::getValue($params,'max_events','','');

			if ( intval($limit) )
				$params['limit'] = ' LIMIT '.$limit;

			$days = JArrayHelper::getValue($params,'max_age','','');
			if ( intval($days) )
				$params['days'] = ' AND filedate >= \''.date('Y-m-d H:m:s', ($xmap->now - ($days*86400)) ) ."' ";
		}

		switch ($view) {
			case 'categories':
			case 'categoriesdetailed':
			case 'categoryevents':
				xmap_com_eventlist::getCategoryTree( $xmap, $parent, $params, $catid );
				break;
			case 'venues':
			case 'venueevents':
				xmap_com_eventlist::getVenueTree( $xmap, $parent, $params, $venid );
				break;
		}
	}
	
	function getCategoryTree(&$xmap, &$parent, $params,$catid=0)
	{
		
		$db = &JFactory::getDBO();
		$gid = intval($xmap->gid);
		
		$query = "SELECT id , catname, alias"
				. "\nFROM #__eventlist_categories"
				. "\nWHERE published = 1 and parent_id=$catid"
				. "\nAND access <= $gid"
				. "\nORDER BY ordering";
		$db->setQuery($query);
		$cats = $db->loadObjectList();

	 	$xmap->changeLevel(1);
		foreach($cats as $cat)
		{
			$node = new stdclass;
			$node->id   = $parent->id;
			$node->uid   = $parent->uid.'c'.$cat->id;
		   	$node->name = $cat->catname;
			$node->link = 'index.php?option=com_eventlist&amp;view=categoryevents&amp;id='.$cat->id.':'.$cat->alias;
			$node->expandible = true;
			$xmap->printNode($node);
	    	}

		if ($params['include_events']) {
			$db->setQuery ("select `id`, `title`,`alias`,UNIX_TIMESTAMP(`created`) as `created`,UNIX_TIMESTAMP(`modified`) as `modified` from #__eventlist_events where catsid=$catid and `published` = '1' ".$params['days']." order by dates,times,enddates,endtimes " . $params['limit']);
			# echo $db->getQuery ();
			$rows = $db->loadObjectList();
			foreach ($rows as $event) {
				$node = new stdclass;
				$node->id   = $parent->id;
				$node->uid  = $parent->uid .'e'.$event->id;
				$node->name = $event->title;
				$node->modified = ($event->modified? $event->modified : $event->created);
				$node->link = 'index.php?option=com_eventlist&amp;view=details&amp;id='.$event->id.':'.$event->alias;
				$node->priority   = $params['event_priority'];
				$node->changefreq = $params['event_changefreq'];
				$node->expandible = false;
				$xmap->printNode($node);
			}
		}

		$xmap->changeLevel(-1);
		
	}

	function getVenueTree(&$xmap, &$parent, $params,$id=0)
	{
		
		$db = &JFactory::getDBO();
		$gid = intval($xmap->gid);

 		$xmap->changeLevel(1);
		if ( !$id ) {
			$query = "SELECT id , venue, alias"
				. "\nFROM #__eventlist_venues"
				. "\nWHERE published = 1"
				. "\nORDER BY ordering";
			$db->setQuery($query);
			$venues = $db->loadObjectList();

			foreach($venues as $venue)
			{
				$node = new stdclass;
				$node->id   = $parent->id;
				$node->uid   = $parent->uid.'v'.$venue->id;
		   		$node->name = $venue->venue;
				$node->link = 'index.php?option=com_eventlist&amp;view=venueevents&amp;id='.$venue->id.':'.$venue->alias;
				$node->expandible = true;
				if ( $xmap->printNode($node) ) {
					xmap_com_eventlist::getVenueTree($xmap, $parent,$params,$venue->id);
			}
	    	}
		} else {
			if ($params['include_events']) {
				$db->setQuery ("select `id`, `title`,`alias`,UNIX_TIMESTAMP(`created`) as `created`,UNIX_TIMESTAMP(`modified`) as `modified` from #__eventlist_events where catsid=$id and `published` = '1' ".$params['days']." order by dates,times,enddates,endtimes " . $params['limit']);
				$rows = $db->loadObjectList();
				foreach($rows as $event) {
					$node = new stdclass;
					$node->id   = $parent->id;
					$node->uid  = $parent->uid .'e'.$event->id;
					$node->name = $event->title;
					$node->modified = ($event->modified? $event->modified : $event->created);
					$node->link = 'index.php?option=com_eventlist&amp;view=details&amp;id='.$event->id.':'.$event->alias;
					$node->priority   = $params['event_priority'];
					$node->changefreq = $params['event_changefreq'];
					$node->expandible = false;
					$xmap->printNode($node);
				}
			}
		}

		$xmap->changeLevel(-1);
		
	}

        function &getParam($arr, $name, $def) {
                $var = JArrayHelper::getValue( $arr, $name, $def, '' );
                return $var;
        }
}
?>
