function display($entry, $handle, $id = "NULL", $localid = "NULL") { if (is_numeric($id)) { $entry = $entry[$id]; } $handle = dealWithDeprecatedFrameworkHandles($handle); if (!($formhandle = getFormHandleFromEntry($entry, $handle))) { return ""; } // return nothing if handle is not part of entry $GLOBALS['formulize_mostRecentLocalId'] = array(); foreach ($entry[$formhandle] as $lid => $elements) { if ($localid == "NULL" or $lid == $localid) { if (is_array($elements[$handle])) { foreach ($elements[$handle] as $value) { $foundValues[] = $value; $GLOBALS['formulize_mostRecentLocalId'][] = $lid; } } else { // the handle is for metadata, all other fields will be arrays in the dataset return $elements[$handle]; } } } if (count($foundValues) == 1) { $GLOBALS['formulize_mostRecentLocalId'] = $GLOBALS['formulize_mostRecentLocalId'][0]; return $foundValues[0]; } else { return $foundValues; } }
function displayCalendar($formframes, $mainforms = "", $viewHandles, $dateHandles, $filters, $viewPrefixes, $scopes, $hidden, $type = "month", $start = "", $multiPageData = "") { global $xoopsDB, $xoopsUser; global $xoopsTpl; // Set some required variables $mid = getFormulizeModId(); for ($i = 0; $i < count($formframes); $i++) { unset($fid); unset($frid); if ($mainforms[$i]) { list($fid, $frid) = getFormFramework($formframes[$i], $mainforms[$i]); } else { list($fid, $frid) = getFormFramework($formframes[$i]); } $fids[] = $fid; $frids[] = $frid; } $gperm_handler =& xoops_gethandler('groupperm'); $member_handler =& xoops_gethandler('member'); $groups = $xoopsUser ? $xoopsUser->getGroups() : array(0 => XOOPS_GROUP_ANONYMOUS); $uid = $xoopsUser ? $xoopsUser->getVar('uid') : 0; foreach ($fids as $thisFid) { // check that the user is allowed to see all the fids if (!($scheck = security_check($thisFid, "", $uid, "", $groups, $mid, $gperm_handler))) { print "<p>" . _NO_PERM . "</p>"; return; } } $currentURL = getCurrentURL(); // get the current view, ie: the month if ($_POST['calview']) { // if we're recieving a view from a form submission... $settings['calview'] = $_POST['calview']; } else { if (!$start) { // nothing passed from form, and no default value specified, so use current date $today = getDate(); if ($today['mon'] < 10) { $today['mon'] = "0" . $today['mon']; } $settings['calview'] = $today['year'] . "-" . $today['mon']; } else { $settings['calview'] = $start; } } $settings['calfrid'] = $_POST['calfrid']; $settings['calfid'] = $_POST['calfid']; $settings['calhidden'] = $hidden; // check to see if a switch to a form has been requested $settings['ventry'] = $_POST['ventry']; if ($settings['ventry']) { if ($_POST['ventry'] == "addnew") { $this_ent = ""; $dateOverride = $_POST['adddate']; } elseif ($_POST['ventry'] == "proxy") { // support for proxies not currently written $this_ent = "proxy"; } else { $this_ent = $_POST['ventry']; } if ($_POST['calfrid']) { if (isset($multiPageData[$_POST['calfid']])) { if (is_numeric($multiPageData[$_POST['calfid']])) { // numeric value indicates a screen id $screenData = readScreenId($multiPageData[$_POST['calfid']], $_POST['calfid']); if (is_array($screenData)) { $multiPageData = $screenData; } } include_once XOOPS_ROOT_PATH . "/modules/formulize/include/formdisplaypages.php"; displayFormPages($_POST['calfrid'], $this_ent, $_POST['calfid'], $multiPageData[$_POST['calfid']]['pages'], $multiPageData[$_POST['calfid']]['conditions'], $multiPageData[$_POST['calfid']]['introtext'], $multiPageData[$_POST['calfid']]['thankstext'], $currentURL, _formulize_CAL_RETURNFROMMULTI, $settings, $dateOverride, $multiPageData[$_POST['calfid']]['printall']); } else { displayForm($_POST['calfrid'], $this_ent, $_POST['calfid'], $currentURL, "", $settings, "", $dateOverride, 1, 1); // first "" is the done text, second is the onetoonetitles, last two 1s are the overrides for multi form behaviour } return; } else { if (isset($multiPageData[$_POST['calfid']])) { if (is_numeric($multiPageData[$_POST['calfid']])) { // numeric value indicates a screen id $screenData = readScreenId($multiPageData[$_POST['calfid']], $_POST['calfid']); if (is_array($screenData)) { $multiPageData = $screenData; } } include_once XOOPS_ROOT_PATH . "/modules/formulize/include/formdisplaypages.php"; displayFormPages($_POST['calfid'], $this_ent, "", $multiPageData[$_POST['calfid']]['pages'], $multiPageData[$_POST['calfid']]['conditions'], $multiPageData[$_POST['calfid']]['introtext'], $multiPageData[$_POST['calfid']]['thankstext'], $currentURL, _formulize_CAL_RETURNFROMMULTI, $settings, $dateOverride, $multiPageData[$_POST['calfid']]['printall']); } else { displayForm($_POST['calfid'], $this_ent, "", $currentURL, "", $settings, "", $dateOverride, 1, 1); // "" is the done text } return; } } // handle deletion if requested, added sept 18 2005 if ($_POST['delentry']) { deleteEntry($_POST['delentry'], $_POST['delfrid'], $_POST['delfid'], $gperm_handler, $member_handler, $mid); } // get the data for all the fids // 1. convert the scopes for each one // 2. do the extraction (filter by calview) include_once XOOPS_ROOT_PATH . "/modules/formulize/include/extract.php"; for ($i = 0; $i < count($fids); $i++) { $scope = ""; if ($scopes[$i]) { list($scope, $throwAwayCurrentView) = buildScope($scopes[$i], $member_handler, $gperm_handler, $uid, $groups, $fids[$i], $mid); } if (is_array($dateHandles[$i])) { $dateField = $dateHandles[$i][0]; $dateField2 = $dateHandles[$i][1]; } else { $dateField = $dateHandles[$i]; $dateField2 = ""; } if (!$frids[$i]) { $filterDH = $dateField; $filterDH2 = $dateField2; } else { $filterDH = $dateField; $filterDH2 = $dateField2; } // new, complex filter format is: // $filter[0][0] -- andor setting for filter 0 // $filter[0][1] -- filter for filter 0 $filter = array(); $filter[0][0] = "OR"; $filter[0][1] = $filterDH . "/**/" . $settings['calview']; if ($filterDH2) { $filter[0][1] .= "][" . $filterDH2 . "/**/" . $settings['calview']; } if ($filters[$i]) { $filter[1][0] = "AND"; $filter[1][1] = $filters[$i]; } $data[$i] = getData($frids[$i], $fids[$i], $filter, "AND", $scope); $data[$i] = resultSort($data[$i], $dateField); } // need the formatting magic to go here, to whip it all into a nice calendar // basic display of data is below // demonstrates linking to a form for updating/viewing that entry // demonstrates altering the calview setting to change months // need to do something a little more complex for adding a new entry, since we have to know for which fid/frid pair the add operation is being requested. // probably best to leave out adding for now and leave it as a future feature. It can always be custom added within a pageworks page if necessary for a particular calendar $rights = $gperm_handler->checkRight("add_own_entry", $fid, $groups, $mid); // information to pass to the template global $calendarData; // initialize language constants global $arrayMonthNames; global $arrayWeekNames; global $dateMonthStartDay; $arrayMonthNames = array(_formulize_CAL_MONTH_01, _formulize_CAL_MONTH_02, _formulize_CAL_MONTH_03, _formulize_CAL_MONTH_04, _formulize_CAL_MONTH_05, _formulize_CAL_MONTH_06, _formulize_CAL_MONTH_07, _formulize_CAL_MONTH_08, _formulize_CAL_MONTH_09, _formulize_CAL_MONTH_10, _formulize_CAL_MONTH_11, _formulize_CAL_MONTH_12); if ($type == "mini_month") { $arrayWeekNames = array(_formulize_CAL_WEEK_1_3ABRV, _formulize_CAL_WEEK_2_3ABRV, _formulize_CAL_WEEK_3_3ABRV, _formulize_CAL_WEEK_4_3ABRV, _formulize_CAL_WEEK_5_3ABRV, _formulize_CAL_WEEK_6_3ABRV, _formulize_CAL_WEEK_7_3ABRV); } else { $arrayWeekNames = array(_formulize_CAL_WEEK_1, _formulize_CAL_WEEK_2, _formulize_CAL_WEEK_3, _formulize_CAL_WEEK_4, _formulize_CAL_WEEK_5, _formulize_CAL_WEEK_6, _formulize_CAL_WEEK_7); } // convert string date into parts $arrayDate = getdate(strtotime($settings['calview'] . "-01")); $dateMonth = $arrayDate["mon"]; $dateDay = $arrayDate["mday"]; $dateYear = $arrayDate["year"]; // get the number of days in the month. $dateMonthDays = days_in_month($dateMonth, $dateYear); // get the month's first week start day. $dateMonthStartDay = $arrayDate["wday"]; // get the number of weeks. $dateMonthWeeks = week_in_month($dateMonthDays) + 1; // intialize MONTH template information // each cell is an array: // [0] - is control information, where each entry is an array: // [0] - day number // [1] - send date // [1] - is an array containing all items, where each item is also an array: // [0] - $ids[0] // [1] - $frids[$i] // [2] - $fids[$i] // [3] - $textToDisplay // [4] - true/false based on user's right to delete this item (based on either delete own, or delete others permission) if ($type == "month" || $type == "mini_month" || $type == "micro_month") { // initialize grid: convert the data set into a grid of 7 columns for // days and a row for each week $displayDay = ""; for ($intWeeks = 0; $intWeeks < $dateMonthWeeks; $intWeeks++) { $calendarData[$intWeeks] = array(); for ($intDays = 0; $intDays < 7; $intDays++) { // check to see if the processing day is the start day. if ($intWeeks == 0 && $displayDay == "") { if ($intDays == $dateMonthStartDay) { $displayDay = 1; } } else { if ($displayDay != "") { $displayDay++; if ($displayDay > $dateMonthDays) { $displayDay = ""; } } } $calendarData[$intWeeks][$intDays] = array(); $calendarData[$intWeeks][$intDays][0][0] = $displayDay; $calendarData[$intWeeks][$intDays][0][1] = $dateYear . "-" . $dateMonth . "-" . ($displayDay < 10 ? "0" . $displayDay : $displayDay); //$calendarData[$intWeeks][$intDays][1] = array(); } } // Initialize template variables $xoopsTpl->assign('previousMonth', $dateMonth - 1 < 1 ? $dateYear - 1 . "-12" : $dateYear . "-" . ($dateMonth - 1 < 10 ? "0" . ($dateMonth - 1) : $dateMonth - 1)); $xoopsTpl->assign('nextMonth', $dateMonth + 1 > 12 ? $dateYear + 1 . "-01" : $dateYear . "-" . ($dateMonth + 1 < 10 ? "0" . ($dateMonth + 1) : $dateMonth + 1)); $monthSelector = array(); $numberOfMonths = count($arrayMonthNames); for ($intMonth = 0; $intMonth < $numberOfMonths; $intMonth++) { $monthName = $arrayMonthNames[$intMonth]; $monthSelector[$intMonth + 1 < 10 ? "0" . ($intMonth + 1) : $intMonth + 1] = $monthName; } $xoopsTpl->assign('monthSelector', $monthSelector); $yearSelector = array(); $startYear = $dateYear - 4; $endYear = $dateYear + 3; for ($intYear = $startYear; $intYear <= $endYear; $intYear++) { $yearSelector[] = $intYear; } $xoopsTpl->assign('yearSelector', $yearSelector); } // process data set(s) for ($i = 0; $i < count($data); $i++) { foreach ($data[$i] as $id => $entry) { if (!$frids[$i]) { if (is_array($viewHandles[$i])) { $formhandle = getFormHandleFromEntry($entry, $viewHandles[$i][0]); } else { $formhandle = getFormHandleFromEntry($entry, $viewHandles[$i]); } } else { $formhandle = $mainforms[$i]; } $ids = internalRecordIds($entry, $formhandle); if (is_array($viewHandles[$i])) { $needsep = 0; // make sure that no data is keep from previous processing $textToDisplay = ""; foreach ($viewHandles[$i] as $thisVH) { if ($needsep) { $textToDisplay .= ", "; } $needsep = 1; $textToDisplay .= display($entry, $thisVH); } } else { $textToDisplay = display($entry, $viewHandles[$i]); } if ($viewPrefixes[$i]) { $textToDisplay = $viewPrefixes[$i] . $textToDisplay; } $calendarDataItem = array(); $calendarDataItem[0] = $ids[0]; $calendarDataItem[1] = $frids[$i]; $calendarDataItem[2] = $fids[$i]; $calendarDataItem[3] = $textToDisplay; $calendarDataItem[4] = ($i == 0 and formulizePermHandler::user_can_delete_entry($fids[$i], display($entry, "uid"), $ids[0])); if ($type == "month" || $type == "mini_month" || $type == "micro_month") { if (is_array($dateHandles[$i])) { $startValue = display($entry, $dateHandles[$i][0]); $endValue = display($entry, $dateHandles[$i][1]); if ($startValue && $endValue) { $startDate = strtotime($startValue); $endDate = strtotime($endValue); for ($x = $startDate; $x <= $endDate; $x = $x + 86400) { $arrayDate = getdate($x); if ($arrayDate["mon"] == $dateMonth) { $calendarData = assignItem($arrayDate, $calendarDataItem, $calendarData); } } } else { if ($startValue) { $startDate = strtotime($startValue); $arrayDate = getdate($startDate); $calendarData = assignItem($arrayDate, $calendarDataItem, $calendarData); } else { $endDate = strtotime($endValue); $arrayDate = getdate($endDate); $calendarData = assignItem($arrayDate, $calendarDataItem, $calendarData); } } } else { $currentDate = display($entry, $dateHandles[$i]); $arrayDate = getdate(strtotime($currentDate)); $calendarData = assignItem($arrayDate, $calendarDataItem, $calendarData); } } } } // Initialize common template variables $xoopsTpl->assign('cal_type', $type); $xoopsTpl->assign('rights', $rights); $xoopsTpl->assign('frids', $frids[0]); $xoopsTpl->assign('fids', $fids[0]); $xoopsTpl->assign('addItem', _formulize_CAL_ADD_ITEM); $xoopsTpl->assign('rowStyleEven', true); $xoopsTpl->assign('MonthNames', $arrayMonthNames); $xoopsTpl->assign('WeekNames', $arrayWeekNames); $xoopsTpl->assign('dateMonthZeroIndex', $dateMonth - 1); $xoopsTpl->assign('dateMonth', $dateMonth); $xoopsTpl->assign('dateYear', $dateYear); $xoopsTpl->assign('currentURL', $currentURL); $xoopsTpl->assign('hidden', $hidden); $xoopsTpl->assign('calview', $settings['calview']); $xoopsTpl->assign('calendarData', $calendarData); $xoopsTpl->assign('delete', _formulize_DELETE); $xoopsTpl->assign('delconf', _formulize_DELCONF); // force template to be drawn $xoopsTpl->display("db:calendar_" . $type . ".html"); }