blocks/minical.php
<?php
/*
* You may not change or alter any portion of this comment or credits
* of supporting developers from this source code or any supporting source code
* which is considered copyrighted (c) material of the original comment or credit authors.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
/**
* @copyright {@link https://xoops.org/ XOOPS Project}
* @license {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later}
* @package extcal
* @since
* @author XOOPS Development Team,
*/
use XoopsModules\Extcal\{Helper,
Time,
TableForm,
Form
};
global $xoopsUser;
require_once \dirname(__DIR__) . '/include/constantes.php';
//---------------------------------------------------------------------------
/**
* @param $options
*
* @return array|bool
*/
function bExtcalMinicalShow($options)
{
global $xoopsUser;
extcal_getDefautminicalOption($options);
// // require_once \dirname(__DIR__) . '/class/Config.php';
require_once _EXTCAL_PEAR_CALENDAR_ROOT . '/Util/Textual.php';
require_once _EXTCAL_PEAR_CALENDAR_ROOT . '/Month/Weeks.php';
require_once _EXTCAL_PEAR_CALENDAR_ROOT . '/Day.php';
// require_once CALENDAR_ROOT . 'Month/Weeks.php';
// require_once CALENDAR_ROOT . 'Day.php';
/** @var Helper $helper */
if (!class_exists(Helper::class)) {
return false;
}
$helper = Helper::getInstance();
$helper->loadLanguage('main');
// Retriving Image for block if enabled
if (isset($options[0]) && 1 == $options[0]) {
$imageHandler = xoops_getHandler('image');
$criteria = new \Criteria('imgcat_id', $options[1]);
$criteria->setSort('RAND()');
$criteria->setLimit($options[6]);
$images = $imageHandler->getObjects($criteria);
$slideShowParam = [
'images' => $images,
'frameHeight' => $options[3],
'frameWidth' => $options[2],
'transTime' => $options[4],
'pauseTime' => $options[5],
];
if (count($images) > 0) {
_makeXMLSlideshowConf($slideShowParam);
$imageParam = ['displayImage' => true];
} else {
$imageParam = ['displayImage' => false];
}
} else {
$imageParam = ['displayImage' => false];
}
$imageParam['frameHeight'] = $options[3];
$imageParam['frameWidth'] = $options[2];
$categoryHandler = $helper->getHandler(_EXTCAL_CLN_CAT);
$cats = $categoryHandler->getAllCatById($xoopsUser);
// $t = print_r($cats,true);
// echo "zzz<pre>{$t}</pre>";
$eventHandler = $helper->getHandler(_EXTCAL_CLN_EVENT);
$timeHandler = Time::getHandler();
// Retriving month and year value according to block options
//modif JJD
$offset = $helper->getConfig('offsetMinical');
$monthToShow = mktime(0, 0, 0, date('m') + $offset, date('d'), date('Y'));
$month = date('n', $monthToShow);
$year = date('Y', $monthToShow);
//----------------------------------------------------
$month += $options[7]; //ajout ou retrait du nombre de mois de décalage
if ($month < 1) {
$month = 12;
--$year;
} elseif ($month > 12) {
$month = 1;
++$year;
}
//----------------------------------------------------
// Saving display link preference
$displayLink = $options[8];
// Delete options to keep only categorie data
$tCatSelected = explode(',', $options[9]);
/***************************************************************/ // Retriving events and formatting them
//$events = $eventHandler->objectToArray($eventHandler->getEventCalendarMonth($month, $year, $tCatSelected));
if (true) {
$criteres = [
'periode' => _EXTCAL_EVENTS_MONTH,
'month' => $month,
'year' => $year,
'category' => $tCatSelected,
'externalKeys' => 'cat_id',
];
$events = $eventHandler->getEventsOnPeriode($criteres);
} else {
$events = [];
}
//Utility::echoArray($events, 'minical');
/***************************************************************/ //$eventHandler->formatEventDate($events, "l dS \of F Y h:i A");
// Calculating timestamp for the begin and the end of the month
$startMonth = mktime(0, 0, 0, $month, 1, $year);
$endMonth = mktime(23, 59, 59, $month + 1, 0, $year);
/*
* Adding all event occuring during this month to an array indexed by day number
*/
$eventsArray = [];
foreach ($events as $event) {
//echo "id->{$event['event_id']}<br>";
bExtcalMinicalAddEventToArray($event, $eventsArray, $timeHandler, $startMonth, $endMonth, $cats);
// if (!$event['event_isrecur']) {
// bExtcalMinicalAddEventToArray($event, $eventsArray, $timeHandler, $startMonth, $endMonth, $cats);
// } else {
//
// $recurEvents = $eventHandler->getRecurEventToDisplay($event, $startMonth, $endMonth);
// foreach ($recurEvents as $recurEvent)
// {
// bExtcalMinicalAddEventToArray($recurEvent, $eventsArray, $timeHandler, $startMonth, $endMonth, $cats);
// }
// }
}
//Utility::echoArray($eventsArray);
/*
* Making an array to create tabbed output on the template
*/
// Flag current day
$selectedDays = [
new Calendar_Day(
date('Y', xoops_getUserTimestamp(time(), $timeHandler->getUserTimeZone($GLOBALS['xoopsUser']))),
date('n', xoops_getUserTimestamp(time(), $timeHandler->getUserTimeZone($GLOBALS['xoopsUser']))),
date('j', xoops_getUserTimestamp(time(), $timeHandler->getUserTimeZone($GLOBALS['xoopsUser'])))
),
];
// Build calendar object
$monthCalObj = new Calendar_Month_Weeks($year, $month, $helper->getConfig('week_start_day'));
$monthCalObj->build();
$tableRows = [];
$rowId = 0;
$cellId = 0;
while (false !== ($weekCalObj = $monthCalObj->fetch())) {
$weekCalObj->build($selectedDays);
$tableRows[$rowId]['weekInfo'] = [
'week' => $weekCalObj->thisWeek('n_in_year'),
'day' => $weekCalObj->thisDay(),
'month' => $monthCalObj->thisMonth(),
'year' => $monthCalObj->thisYear(),
];
while (false !== ($dayCalObj = $weekCalObj->fetch())) {
$tableRows[$rowId]['week'][$cellId] = [
'isEmpty' => $dayCalObj->isEmpty(),
'number' => $dayCalObj->thisDay(),
'isSelected' => $dayCalObj->isSelected(),
];
$day = $dayCalObj->thisDay();
if (isset($eventsArray[$day]) && !$dayCalObj->isEmpty()) {
$tableRows[$rowId]['week'][$cellId]['haveEvents'] = true;
$tableRows[$rowId]['week'][$cellId]['color'] = $eventsArray[$day]['color'];
} else {
$tableRows[$rowId]['week'][$cellId]['haveEvents'] = false;
}
++$cellId;
}
$cellId = 0;
++$rowId;
}
// Retriving weekdayNames
//$loc_de = setlocale (LC_ALL, 'Fr');
$weekdayNames = Calendar_Util_Textual::weekdayNames('one');
//$weekdayNames=array('D','L','M','M','J','V','S');
// echo "<hr>L'identifiant de l'allemand sur ce système est '$loc_de'";
// echoArray($weekdayNames,true);
for ($i = 0; $i < $helper->getConfig('week_start_day'); ++$i) {
$weekdayName = array_shift($weekdayNames);
$weekdayNames[] = $weekdayName;
}
// Making navig data
$navig = [
'page' => $helper->getConfig('start_page'),
'uri' => 'year=' . $monthCalObj->thisYear() . '&month=' . $monthCalObj->thisMonth(),
'name' => $timeHandler->getFormatedDate($helper->getConfig('nav_date_month'), $monthCalObj->getTimestamp()),
];
$horloge = [];
$horloge['display'] = ('' != trim($options[10]));
$horloge['fullName'] = XOOPS_URL . _EXTCAL_PATH_HORLOGES . $options[11];
$horloge['width'] = $options[12] . 'px';
$horloge['height'] = $options[13] . 'px';
$ret = [
'imageParam' => $imageParam,
'displayLink' => $displayLink,
'submitText' => _MB_EXTCAL_SUBMIT_LINK_TEXT,
'tableRows' => $tableRows,
'weekdayNames' => $weekdayNames,
'navig' => $navig,
'horloge' => $horloge,
'bgColor' => $options[10],
];
// $t = print_r($horloge,true);
// echo "<pre>{$t}</pre>";
return $ret;
}
//---------------------------------------------------------------------------
/**
* @param $options
*
* @return string
*/
function bExtcalMinicalEdit($options)
{
// // require_once \dirname(__DIR__) . '/class/form/spin/formspin.php';
global $xoopsUser;
// $t = print_r(get_defined_vars(),true);
// // $t = print_r($options,true);
// echo "<pre>{$t}</pre>";
extcal_getDefautminicalOption($options);
$xfValue = [];
$form = new TableForm(_OPTIONS, '', '');
//$form->setExtra('enctype="multipart/form-data"');
//============================================================
$helper = Helper::getInstance();
$categoryHandler = $helper->getHandler(_EXTCAL_CLN_CAT);
$cats = $categoryHandler->getAllCat($xoopsUser, 'extcal_cat_view');
$imageCatHandler = xoops_getHandler('imagecategory');
//=====================================================================
$form->insertBreak('<div style="text-align: center;font-weight: bold;">' . _MB_EXTCAL_OPT_SLIDE_SHOW . '</div>', 'head');
$k = 0;
$xfValue[$k] = new \XoopsFormRadio(_MB_EXTCAL_DISPLAY_IMG, "options[{$k}]", $options[$k]);
$xfValue[$k]->addOption(1, _YES);
$xfValue[$k]->addOption(0, _NO);
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$imageCats = $imageCatHandler->getObjects();
$t = [];
$t[0] = _NONE;
foreach ($imageCats as $cat) {
$t[$cat->getVar('imgcat_id')] = $cat->getVar('imgcat_name');
}
$k = 1;
$xfValue[$k] = new \XoopsFormSelect(_MB_EXTCAL_IMG_CAT, "options[{$k}]", $options[$k], 1, false);
$xfValue[$k]->addOptionArray($t);
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 2;
$xfValue[$k] = new Form\Spin\FormSpin(_MB_EXTCAL_SS_WIDTH, "options[{$k}]", $options[$k], 100, 250, 1, 0, 8, _MB_EXTCAL_PX, $imgFolder = '');
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 3;
$xfValue[$k] = new Form\Spin\FormSpin(_MB_EXTCAL_SS_HEIGHT, "options[{$k}]", $options[$k], 100, 250, 1, 0, 8, _MB_EXTCAL_PX, $imgFolder = '');
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 4;
$xfValue[$k] = new Form\Spin\FormSpin(_MB_EXTCAL_SS_TRANS_TIME, "options[{$k}]", $options[$k], 0, 12, 1, 0, 8, _MB_EXTCAL_PX, $imgFolder = '');
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 5;
$xfValue[$k] = new Form\Spin\FormSpin(_MB_EXTCAL_SS_PAUSE_TIME, "options[{$k}]", $options[$k], 0, 12, 1, 0, 8, _MB_EXTCAL_PX, $imgFolder = '');
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 6;
$xfValue[$k] = new Form\Spin\FormSpin(_MB_EXTCAL_SS_NB_PHOTOS, "options[{$k}]", $options[$k], 0, 50, 1, 0, 8, _MB_EXTCAL_PX, $imgFolder = '');
$form->addElement($xfValue[$k], false);
//=====================================================================
$form->insertBreak('<div style="text-align: center;font-weight: bold;">' . _MB_EXTCAL_OPT_SHOW . '</div>', 'head');
$t = [
-1 => _MB_EXTCAL_PREVIEW,
0 => _MB_EXTCAL_CURRENT,
1 => _MB_EXTCAL_NEXT,
];
$k = 7;
$xfValue[$k] = new \XoopsFormSelect(_MB_EXTCAL_DISPLAY_MONTH, "options[{$k}]", $options[$k], 1, false);
$xfValue[$k]->addOptionArray($t);
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 8;
$xfValue[$k] = new \XoopsFormRadio(_MB_EXTCAL_DISPLAY_SUBMIT_LINK, "options[{$k}]", $options[$k]);
$xfValue[$k]->addOption(1, _YES);
$xfValue[$k]->addOption(0, _NO);
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
//for ($h=0;$h<8;++$h) array_shift($options);
$t = [];
foreach ($cats as $cat) {
$t[$cat->getVar('cat_id')] = $cat->getVar('cat_name');
}
//function XoopsFormSelect($caption, $name, $value = null, $size = 1, $multiple = false)
$k = 9;
$xfValue[$k] = new \XoopsFormSelect(_MB_EXTCAL_CAT_TO_USE, "options[{$k}]", explode(',', $options[$k]), 8, true);
$xfValue[$k]->setDescription(_MB_EXTCAL_CAT_TO_USE_DESC);
$xfValue[$k]->addOptionArray($t);
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 10;
$xfValue[$k] = new \XoopsFormColorPicker(_MB_EXTCAL_BGCOLOR, "options[{$k}]", $options[$k]);
$form->addElement($xfValue[$k], false);
//=====================================================================
$form->insertBreak('<div style="text-align: center;font-weight: bold;">' . _MB_EXTCAL_HORLOGE_OPT . '</div>', 'head');
//---------------------------------------------------------------------
$t = \XoopsLists::getFileListAsArray(XOOPS_ROOT_PATH . _EXTCAL_PATH_HORLOGES);
$t = array_merge([' ' => _NONE], $t);
$k = 11;
$xfValue[$k] = new \XoopsFormSelect(_MB_EXTCAL_HORLOGE, "options[{$k}]", $options[$k], 1, false);
$xfValue[$k]->addOptionArray($t);
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 12;
$xfValue[$k] = new Form\Spin\FormSpin(_MB_EXTCAL_WIDTH, "options[{$k}]", $options[$k], 50, 250, 1, 0, 8, _MB_EXTCAL_PX, $imgFolder = '');
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
$k = 13;
$xfValue[$k] = new Form\Spin\FormSpin(_MB_EXTCAL_HEIGHT, "options[{$k}]", $options[$k], 50, 250, 1, 0, 8, _MB_EXTCAL_PX, $imgFolder = '');
$form->addElement($xfValue[$k], false);
//---------------------------------------------------------------------
//=====================================================================
return $form->render();
/*
$t = [];
//while (list($key,$val) = each($xfValue)) {
foreach ($xfValue as $key => $val) {
$t[] = $val->render();
}
return implode("\n", $t);
return extcal_buildHtmlArray($xfValue, _OPTIONS);
*/
}
/**************************************************************************/
/**
* @param $options
*/
function _makeXMLSlideshowConf($options)
{
// create a new \XML document
$doc = new DomDocument('1.0');
$doc->formatOutput = true;
// create root node
$root = $doc->createElement('slideshow');
$root = $doc->appendChild($root);
// Create config node
$config = $doc->createElement('config');
$config = $root->appendChild($config);
// Add config param
$frameHeight = $doc->createElement('frameHeight');
$frameHeight = $config->appendChild($frameHeight);
$value = $doc->createTextNode($options['frameHeight']);
$frameHeight->appendChild($value);
$frameWidth = $doc->createElement('frameWidth');
$frameWidth = $config->appendChild($frameWidth);
$value = $doc->createTextNode($options['frameWidth']);
$frameWidth->appendChild($value);
$transTime = $doc->createElement('transTime');
$transTime = $config->appendChild($transTime);
$value = $doc->createTextNode($options['transTime']);
$transTime->appendChild($value);
$pauseTime = $doc->createElement('pauseTime');
$pauseTime = $config->appendChild($pauseTime);
$value = $doc->createTextNode($options['pauseTime']);
$pauseTime->appendChild($value);
// Add photos node
$photos = $doc->createElement('photos');
$photos = $root->appendChild($photos);
$tempPhoto = $doc->createElement('photo');
$tempSrc = $doc->createElement('src');
foreach ($options['images'] as $images) {
// $photo = $doc->createElement('photo');
$photo = clone $tempPhoto;
$photo = $photos->appendChild($photo);
// $src = $doc->createElement('src');
$src = clone $tempSrc;
$src = $photo->appendChild($src);
$value = $doc->createTextNode(XOOPS_URL . '/uploads/' . $images->getVar('image_name'));
$src->appendChild($value);
}
// get completed xml document
$xml_string = $doc->save(XOOPS_ROOT_PATH . '/cache/extcalSlideShowParam.xml');
}
/**************************************************************************/
/**
* @param array $event
* @param array $eventsArray
* @param Time $timeHandler
* @param $startMonth
* @param $endMonth
* @param $cats
*
* @return bool
*/
function bExtcalMinicalAddEventToArray($event, &$eventsArray, $timeHandler, $startMonth, $endMonth, $cats)
{
// Utility::echoArray($event);
// exit;
// $d1 = date("j, m, Y", $startMonth);
// $d2 = date("j, m, Y", $endMonth);
// echo "bExtcalMinicalAddEventToArray : {$d1} - {$d2}<br>";
// $d1 = date("j, m, Y", $event['event_start']);
// $d2 = date("j, m, Y", $event['event_end']);
// echo "bExtcalMinicalAddEventToArray : {$d1} - {$d2}<br>";
// $color = $cats[$event['cat_id']]['cat_color'];
// $weight = $cats[$event['cat_id']]['cat_weight'];
$color = $event['cat']['cat_color'];
$weight = $event['cat']['cat_weight'];
// Calculating the start and the end of the event
$startEvent = xoops_getUserTimestamp($event['event_start'], $timeHandler->getUserTimeZone($GLOBALS['xoopsUser']));
$endEvent = xoops_getUserTimestamp($event['event_end'], $timeHandler->getUserTimeZone($GLOBALS['xoopsUser']));
// Utility::echoTsu($event['event_start'],"event['event_start']");
// Utility::echoTsu($event['event_end'],"event['event_end']");
//---------------------------------------------------------------
if ($startEvent < $startMonth) {
$firstDay = 1;
} elseif ($startEvent > $endEvent) {
return false;
} else {
$firstDay = date('j', $startEvent);
}
if ($endEvent < $startMonth) {
return false;
} elseif ($endEvent > $endMonth) {
$lastDay = date('j', $endMonth);
} else {
$lastDay = date('j', $endEvent);
}
//echo "first dat - last day : {$firstDay} - {$lastDay}<br>";
//echo $event['event_id'] . '-' . $weight .'<br>';
$d = date('j', $event['event_start']);
if (isset($eventsArray[$d])) {
if ($weight > $eventsArray[$d]['weight']) {
$eventsArray[$d]['weight'] = $weight;
$eventsArray[$d]['color'] = $color;
}
} else {
$eventsArray[$d]['hasEvent'] = true;
$eventsArray[$d]['weight'] = $weight;
$eventsArray[$d]['color'] = $color;
}
/*
for ($i = $firstDay; $i <= $lastDay; ++$i) {
}
$eventsArray[$i]['hasEvent'] = true;
if (isset($eventsArray[$i]['weight'])) {
if ($weight > $eventsArray[$i]['weight']) {
$eventsArray[$i]['weight'] = $weight;
$eventsArray[$i]['color'] = $color;
}
} else {
$eventsArray[$i]['weight'] = $weight;
$eventsArray[$i]['color'] = $color;
}
}
*/
// $t = print_r($cats,true);
// echo "<pre>{$t}</pre><hr>";
//
// $t = print_r($eventsArray,true);
// echo "event id = {$event['event_id']} - weight = {$weight}<br>color = {$color}<br><pre>{$t}</pre><hr>";
}
/**
* @param $options
*/
function extcal_getDefautminicalOption(&$options)
{
// 0|0|150|225|1|3|10|0|1|1,2|| |120|120
for ($h = 0; $h <= 13; ++$h) {
if (!isset($options[$h])) {
switch ($h) {
case 0:
$options[$h] = '0';
break;
case 1:
$options[$h] = 0;
break;
case 2:
$options[$h] = '150';
break;
case 3:
$options[$h] = '255';
break;
case 4:
$options[$h] = '1';
break;
case 5:
$options[$h] = '3';
break;
case 6:
$options[$h] = '10';
break;
case 7:
$options[$h] = '0';
break;
case 8:
$options[$h] = '1';
break;
case 9:
$options[$h] = '1,2,3,4,5';
break;
case 10:
$options[$h] = '';
break;
case 11:
$options[$h] = '';
break;
case 12:
$options[$h] = 120;
break;
case 13:
$options[$h] = 120;
break;
}
}
}
}