<?php
/**
* @package RSForm! Pro
* @copyright (C) 2007-2019 www.rsjoomla.com
* @license GPL, http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Language\Language;
class RSFormProCalendar
{
protected $calendar;
protected $className;
protected $type;
public function __construct($type = 'YUICalendar') {
require_once JPATH_ADMINISTRATOR.'/components/com_rsform/helpers/calendars/'.strtolower($type).'.php';
$this->className = 'RSFormPro'.ucfirst($type);
$this->calendar = new $this->className();
$this->type = $type;
}
public static function getInstance($type = 'YUICalendar') {
static $calendar = array();
if (!isset($calendar[$type])) {
$calendar[$type] = new RSFormProCalendar($type);
}
return $calendar[$type];
}
public function setCalendar($config) {
$this->calendar->setCalendarOptions($config);
}
public function printInlineScript($formId)
{
// load the files necessary for the calendar
$this->calendar->loadFiles();
$calendarOptions = $this->calendar->getCalendarOptions();
$script = '';
if (isset($calendarOptions[$formId]))
{
foreach ($calendarOptions[$formId] as $calendarId => $calendarConfigs)
{
$configs = array();
foreach ($calendarConfigs as $type => $value)
{
if ($type == 'extra')
{
$configs[] = "extra: {".implode(',', $value)."}";
}
else
{
$configs[] = json_encode($type).':'.json_encode($value);
}
}
$configs = implode(', ',$configs);
$script .= "RSFormPro.{$this->type}.setCalendar({$formId}, '{$calendarId}', {{$configs}});\n";
}
$script .= $this->calendar->printInlineScript($formId);
}
return $script;
}
// DateTime::createFromFormat() doesn't support locale so we need to workaround
public static function fixValue($value, $format)
{
$english = Language::getInstance('en-GB');
$english->load('com_rsform', JPATH_SITE);
// l (lowercase 'L') A full textual representation of the day of the week Sunday through Saturday
if (strpos($format, 'l') !== false)
{
for ($i = 0; $i <= 6; $i++)
{
$from = Text::_('RSFP_CALENDAR_WEEKDAYS_LONG_' . $i);
$to = $english->_('RSFP_CALENDAR_WEEKDAYS_LONG_' . $i);
if ($from !== $to)
{
$value = preg_replace('/\b' . preg_quote($from) . '\b/u', $to, $value);
}
}
}
// D A textual representation of a day, three letters Mon through Sun
if (strpos($format, 'D') !== false)
{
for ($i = 0; $i <= 6; $i++)
{
$from = Text::_('RSFP_CALENDAR_WEEKDAYS_MEDIUM_' . $i);
$to = $english->_('RSFP_CALENDAR_WEEKDAYS_MEDIUM_' . $i);
if ($from !== $to)
{
$value = preg_replace('/\b' . preg_quote($from) . '\b/u', $to, $value);
}
}
}
// F A full textual representation of a month, such as January or March January through December
if (strpos($format, 'F') !== false)
{
for ($i = 1; $i <= 12; $i++)
{
$from = Text::_('RSFP_CALENDAR_MONTHS_LONG_' . $i);
$to = $english->_('RSFP_CALENDAR_MONTHS_LONG_' . $i);
if ($from !== $to)
{
$value = preg_replace('/\b' . preg_quote($from) . '\b/u', $to, $value);
}
}
}
// M A short textual representation of a month, three letters Jan through Dec
if (strpos($format, 'M') !== false)
{
for ($i = 1; $i <= 12; $i++)
{
$from = Text::_('RSFP_CALENDAR_MONTHS_SHORT_' . $i);
$to = $english->_('RSFP_CALENDAR_MONTHS_SHORT_' . $i);
if ($from !== $to)
{
$value = preg_replace('/\b' . preg_quote($from) . '\b/u', $to, $value);
}
}
}
return $value;
}
public function getPosition($formId, $componentId)
{
return $this->calendar->getPosition($formId, $componentId);
}
}