Your IP : 216.73.216.85


Current Path : /home/smartconb/www/armencom33/modules/mod_dpcalendar_map/src/Dispatcher/
Upload File :
Current File : /home/smartconb/www/armencom33/modules/mod_dpcalendar_map/src/Dispatcher/Dispatcher.php

<?php
/**
 * @package   DPCalendar
 * @copyright Copyright (C) 2014 Digital Peak GmbH. <https://www.digital-peak.com>
 * @license   https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
 */

namespace DigitalPeak\Module\Map\Site\Dispatcher;

\defined('_JEXEC') or die();

use DigitalPeak\Component\DPCalendar\Administrator\Extension\DPCalendarComponent;
use DigitalPeak\Component\DPCalendar\Administrator\Helper\DateHelper;
use DigitalPeak\Component\DPCalendar\Administrator\HTML\Document\HtmlDocument;
use DigitalPeak\Component\DPCalendar\Administrator\Router\Router;
use DigitalPeak\Component\DPCalendar\Administrator\Translator\Translator;
use DigitalPeak\Component\DPCalendar\Site\Model\EventsModel;
use DigitalPeak\Component\DPCalendar\Site\View\CalendarViewTrait;
use Joomla\CMS\Application\CMSWebApplicationInterface;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Dispatcher\AbstractModuleDispatcher;
use Joomla\CMS\Form\Form;
use Joomla\Registry\Registry;

class Dispatcher extends AbstractModuleDispatcher
{
	use CalendarViewTrait;

	public Form $filterForm;

	public array $activeFilters;

	protected Registry $params;

	/** @var Registry $state */
	protected $state;

	protected function getLayoutData()
	{
		$data = parent::getLayoutData();
		if ($data === false) {
			return $data;
		}

		$app = $data['app'];
		if (!$app instanceof CMSWebApplicationInterface) {
			return $data;
		}

		/** @var Registry $params */
		$params = $data['params'];

		// Helpers
		$document   = new HtmlDocument();
		$translator = new Translator();
		$dateHelper = new DateHelper();
		$dateHelper->setTranslator($translator);

		$layoutHelper = $app->bootComponent('dpcalendar')->getMVCFactory()->createModel('Layout', 'Administrator');
		$router       = new Router();

		$cParams      = clone ComponentHelper::getParams('com_dpcalendar');
		$moduleParams = $cParams->merge($params);
		$this->params = $moduleParams;

		// The display data
		$data = array_merge($data, [
			'document'     => $document,
			'layoutHelper' => $layoutHelper,
			'dateHelper'   => $dateHelper,
			'translator'   => $translator,
			'router'       => $router,
			'input'        => $app->getInput(),
			'params'       => $moduleParams,
			'format'       => $params->get('date_format', 'd.m.Y')
		]);

		$app->getLanguage()->load('com_dpcalendar', JPATH_ADMINISTRATOR . '/components/com_dpcalendar');
		$app->getLanguage()->load('com_dpcalendar', JPATH_SITE . '/components/com_dpcalendar');

		// Get the calendars and their children
		$model = $app->bootComponent('dpcalendar')->getMVCFactory()->createModel('Calendar', 'Site', ['name' => 'map.module.' . $this->module->id]);
		$model->getState();
		$model->setState('filter.parentIds', $params->get('ids', '-1'));

		// The calendar ids
		$data['calendars'] = $model->getItems();
		foreach ($data['calendars'] as $calendar) {
			$this->fillCalendar($calendar);
		}

		Form::addFormPath(JPATH_ADMINISTRATOR . '/components/com_dpcalendar/forms');
		$this->state = $model->getState();

		$this->filterForm = $model->getFilterForm();

		$this->activeFilters = [];

		$moduleParams->set('form_state', $moduleParams->get('map_filter_form', 2));
		$moduleParams->set('map_module_filter_form_hidden_fields', $moduleParams->get('map_filter_form_hidden_fields', []));
		$moduleParams->set('map_module_view_radius', $moduleParams->get('radius', 20));
		$moduleParams->set('map_module_view_length_type', $moduleParams->get('length-type', 'm'));

		$this->prepareForm($data['calendars']);

		if (!$this->filterForm->getValue('radius', 'filter')) {
			$this->filterForm->setValue('radius', 'filter', $params->get('radius', 20));
		}

		if (!$this->filterForm->getValue('length-type', 'filter')) {
			$this->filterForm->setValue('length-type', 'filter', $params->get('length-type', 'm'));
		}

		$data['form']   = $this->filterForm;
		$data['user']   = $app->getIdentity();
		$data['action'] = 'index.php?option=com_dpcalendar&view=map&layout=events&format=raw&module_id=' . $this->module->id;

		$data['displayData'] = $data;

		return $data;
	}

	protected function getName(): string
	{
		return 'map_module';
	}

	protected function getDPCalendar(): DPCalendarComponent
	{
		return $this->app->bootComponent('dpcalendar');
	}

	/**
	 * Dummy implementation for view getModel proxy functions.
	 */
	protected function getModel(): ?EventsModel
	{
		return null;
	}
}