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); } } ?> <?php echo $set['calendarTitle']; ?> \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
{$xx['log_in']}
{$ax['log_un_or_em']}


{$ax['log_pw']}


\n"; if ($usr['privs']) { echo " \n"; } echo "
\n
\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"; ?>