xx{$evtT}", $evt['tit'], "{$evt['tit']}", "{$evt['tit']}", $evt['una'], $age, "
", ""]; //html code
return str_replace($keys,$html,$head);
}
function showEvents($date) { //show events in calendar
global $calID, $evtList, $evtHead, $evtBody, $futEvts, $evtWin, $rxULink, $rxIMGTags;
$now = date('Y-m-dH:i');
foreach ($evtList[$date] as $evt) {
if ($futEvts and $evt['eti'] and $date.$evt['eti'] < $now) { continue; } //future events only
$chBox = $evt['cbx'] ? checkBox($evt,$date) : '';
if ($evtWin) {
$onClick = " onclick='".($evt['mayE'] ? 'editE' : 'showE')."({$evt['eid']},`{$date}`,`{$calID}`);'"; //view or post/edit
} else {
$onClick = '';
}
echo "
\n";
if (strpos($evtBody,'4') === false and preg_match($rxIMGTags,$evt['tx2'],$img)) { //image found in field tx2
$image = preg_match($rxULink,$evt['tx2'],$url) ? "
{$img[0]}" : $img[0];
echo "
{$image}\n";
}
if (strpos($evtBody,'5') === false and preg_match($rxIMGTags,$evt['tx3'],$img)) { //image found in field tx3
$image = preg_match($rxULink,$evt['tx3'],$url) ? "
{$img[0]}" : $img[0];
echo "
{$image}\n";
}
$eHead = makeEvtHead($evtHead,$evt,$date); //make event head
echo "
{$chBox}{$eHead}
\n";
echo "
".makeE($evt,$evtBody,'br',"
")."
\n";
echo "
\n";
}
}
function calcFTDate($date,$from) { //compute From / To date
global $futEvts;
if ($futEvts and $from) { //future events only
$dStamp = time(); //from date is today
} else {
$date = str_replace(' ','',$date);
if (preg_match('~^\d{2,4}[\./-]\d{2}[\./-]\d{2}$~i',$date,$match)) { //fixed date
$dStamp = mktime(12,0,0,(INT)substr($date,5,2),(INT)substr($date,8,2),(INT)substr($date,0,4)); //current Unix time
} elseif (preg_match('~^(DAY|WEEK|MONTH|YEAR)([+-]\d{1,4})?$~i',$date,$match)) { //parse date
$mult = !empty($match[2]) ? intval($match[2]) : 0;
switch (strtoupper($match[1])) { //compute date
case 'DAY':
$dStamp = time() + ($mult * 86400); //time first day
break;
case 'WEEK':
$wkDay = ($from ? 0 : 6) - date('w');
$dStamp = time() + ($set['weekStart'] + $wkDay * 86400) + ($mult * 604800); //time first day
break;
case 'MONTH':
$month = date('n') + $mult + ($from ? 0 : 1);
$day = $from ? 1 : 0;
$dStamp = mktime(12,0,0,$month,$day,date('Y')); //time first day of from month / last day of till month
break;
case 'YEAR':
$dStamp = $from ? mktime(12,0,0,1,1,date('Y') + $mult) : mktime(12,0,0,1,0,date('Y') + $mult + 1); //time first day of from year : last day of till year (next year -1 day)
}
} else {
echo 'Error in $date'; exit;
}
}
return date('Y-m-d', $dStamp);
}
function makeDate($date) { //format dates
global $months, $months_m, $wkDays, $wkDays_l, $dFormat;
$m = intval(substr($date, 5, 2));
$d = ltrim(substr($date, 8, 2),"0");
$n = date("N", strtotime($date));
$nDate = '';
$dElms = ['W' => $wkDays[$n], 'w' => $wkDays_l[$n], 'M' => $months[$m - 1], 'm' => $months_m[$m - 1], 'd' => $d, '/' => "
"]; //possible date elements
foreach(str_split($dFormat) as $c) {
$nDate .= !empty($dElms[$c]) ? $dElms[$c] : $c;
}
return $nDate;
}
function intersect($str1,$str2) {
if ($str1 == '0') { return $str2; }
return implode(',',array_intersect(explode(',',$str1),explode(',',$str2)));
}
/***** MAIN PROGRAM *****/
//error_reporting(E_ERROR); //errors only
error_reporting(E_ALL); //errors, warnings and notices - test line
require './lcconfig.php'; //calendar config data
require './common/toolbox.php'; //tools
require './common/toolboxd.php'; //database tools
require './common/retrieve.php'; //retrieve function
//init
$calPath = rtrim(dirname($_SERVER["PHP_SELF"]),'/').'/';
session_set_cookie_params(1440,$calPath); //set cookie path
//load display configuration
if (isset($_GET['cnf'])) { //sanitize GET params
$cnf = sanitize($_GET['cnf']);
}
if (!empty($cnf) and file_exists("./configs/{$cnf}.cnf")) { //specified
include "./configs/{$cnf}.cnf";
} elseif (file_exists("./configs/".basename(__FILE__,'.php').".cnf")) { //default
include "./configs/".basename(__FILE__,'.php').".cnf";
}
if (empty($calID)) { $calID = $dbDef; } //select calendar
$dbH = dbConnect($calID); //connect to database
$set = getSettings(); //get settings from db
date_default_timezone_set($set['timeZone']); //set time zone
header("Cache-control: private"); //proxies: don't cache
if ($calName == '*') { $calName = $set['calendarTitle']; }
require './lang/ai-'.strtolower($set['language']).'.php'; //get ai texts
session_name('PHPSESSID'); //session cookie name
session_start();
//get user ID
$opt = loadLastSel(); //load uID, if saved - default: public user
$uID = substr($opt['uI'],1);
$msg = $un_em = ''; //init
if (!empty($_POST['logX'])) { //log-in mode
$logX = $_POST['logX'][0];
$un_em = sanitize($_POST['un_em'] ?? '');
$pword = sanitize($_POST['pword'] ?? '');
if ($logX == 'w') { //login form
$msg = $logMsg;
} elseif ($logX == 'o') { //log out button pressed
$uID = 1; //public user
$opt['uI'] = '01';
saveLastSel($opt);
} elseif ($logX == 'i') { //logging in: validate form
if (!$un_em) { $msg = $ax['log_no_un_em']; goto end; }
if (!$pword) { $msg = $ax['log_no_pw']; goto end; }
$md5Pw = md5($pword);
$stH = stPrep("SELECT `ID` FROM `users` WHERE (`name` = ? OR `email` = ?) AND (`password` = ? OR `tPassword` = ?) AND `status` >= 0");
stExec($stH,[$un_em,$un_em,$md5Pw,$md5Pw]);
$row = $stH->fetch(PDO::FETCH_ASSOC); //fetch user details
$stH = null;
if (!$row) { $msg = $ax['log_un_em_pw_invalid']; goto end; }
$uID = $row['ID'];
$opt['uI'] = $opt['uI'][0].strval($uID); //preserve bake/eat digit
saveLastSel($opt);
end: //watch out for the T-rex
}
}
//get user credentials
$stH = dbQuery("SELECT u.`ID`, u.`name`, u.`language`, g.`ID` as gID, g.`privs`, g.`vCatIDs` as vCats, g.`eCatIDs` as eCats FROM `users` AS u INNER JOIN `groups` AS g ON g.`ID` = u.`groupID` WHERE u.`ID` = {$uID}");
$usr = $stH->fetch(PDO::FETCH_ASSOC); //user & group data
$stH = null;
require './lang/ui-'.strtolower($usr['language'] ?: $set['language']).'.php'; //get ui texts
if (!$msg and !$usr['privs']) {
$msg = $logMsg; //login form
}
$evtList = []; //init
if (!$msg) { //read access: get events
if ($usr['privs'] > 1) { $_SESSION[$calID]['uid'] = $uID; } //uid for index.php when editE
$fDate = calcFTDate($fromDate,true); //compute from date
$tDate = calcFTDate($tillDate,false); //compute till date
//set filters
$cats = str_replace(' ','',$cats); //remove spaces
if (isset($_GET['cats'])) {
$getCats = sanitize($_GET['cats']);
}
if (!empty($getCats)) {
$urlCats = preg_replace_callback('~(,?)([^,]+)(,?)~', function ($m) { return $m[1].intval($m[2]).$m[3]; }, $getCats); //sanitize
$cats = intersect($cats,$urlCats); //intersection of $cats and URL cats
}
$usr['vCats'] = intersect($usr['vCats'],$cats);
$filter = ($users == 'own') ? " AND e.`userID` = {$uID}" : ($users ? " AND e.`userID` IN ({$users})" : '');
$filter .= ($groups == 'own') ? " AND g.`ID` = {$usr['gID']}" : ($groups ? " AND g.`ID` IN ({$groups})" : '');
if ($scats) { $filter .= " AND e.`scatID` IN ({$scats})"; }
if ($venue) { $filter .= " AND e.`venue` LIKE '%{$venue}%'"; }
if ($filter) { $filter = substr($filter,5); }
retrieve($fDate,$tDate,'',$filter); //retrieve events
if ($sortD) { krsort ($evtList); }
}
?>
\n";
echo "\n";
echo "";
$calTop = ($calName or $login) ? (int)$MOUTR + (int)$HHEAD : (int)$MOUTR;
$hdrMarginV = (int)$MOUTR + 4;
$hdrMarginH = (int)$MOUTR + (int)$MINNR + (int)$WBORD;
echo "
\n";
//display calendar
if ($login and !$msg) { //display login/out button
echo "\n";
}
if ($calName) {
echo "{$calName}
\n";
}
echo "\n";
if ($msg) { //login form
echo "
{$msg}
\n";
echo "
\n";
} else { //show events
$evts1x = []; //init
if ($evtList) {
foreach ($evtList as $cDate => &$events) { //loop thru dates
foreach ($events as $k => $evt) { //loop thru events
if (($evt['r_t'] and $recOnce) or ($evt['mde'] and $mulOnce)) { //remove recurring and/or multi-day event multiples
if (in_array($evt['eid'],$evts1x)) {
unset($events[$k]);
} else {
$evts1x[] = $evt['eid'];
}
}
}
if (empty($events)) { continue; } //no events left for this date
if ($evtWin and $usr['privs'] > 1) {
$onclick = " onclick='newE(`{$cDate}`);' title='{$xx['vws_add_event']}'";
} else {
$onclick = '';
}
echo "
".makeDate($cDate)."
\n";
showEvents($cDate); //show events for this date
if (--$maxDays == 0) { break; }
}
} else {
echo "
{$noEvents}
\n";
}
}
echo "
\n";
?>