View source
<?php
module_load_include('inc', 'availability_calendars', 'availability_calendars');
function availability_calendars_page_node_view($node, $view_mode) {
$settings = availability_calendars_get_settings($node);
if ($settings->nodeview === 1 && ($view_mode == 'full' || $view_mode == 'teaser' && $settings->showteaser == 1)) {
$settings->showeditlink = FALSE;
$year = date('Y');
$month = date('n');
$node->content['availability_calendars'] = array(
'#weight' => 1,
);
if ($settings->showkey) {
$node->content['availability_calendars']['key'] = array(
'#theme' => 'availability_calendars_key',
'#weight' => -1,
);
}
$node->content['availability_calendars']['calendar'] = array(
'#theme' => 'availability_calendars_node',
'#node' => $node,
'#year' => $year,
'#month' => $month,
'#settings' => $settings,
'#weight' => 1,
);
}
}
function theme_availability_calendars_node($variables) {
$node = $variables['node'];
$year =& $variables['year'];
$month =& $variables['month'];
$settings = $variables['settings'];
$output = '<div id="availability-calendar-' . $node->nid . '" class="availability-calendar clearfix">';
$monthsremaining = $settings->monthcount;
while ($monthsremaining > 0) {
$output .= theme('availability_calendars_month', $variables);
$monthsremaining--;
$month++;
if ($month > 12) {
$month = 1;
$year++;
}
}
$output .= '</div>';
return $output;
}
function theme_availability_calendars_month($variables) {
$node = $variables['node'];
$year = $variables['year'];
$month = sprintf('%02d', $variables['month']);
$settings = $variables['settings'];
$month_meta = availability_calendars_month_meta($year, $month, $settings);
$days = array(
13 => t('Mon'),
12 => t('Tue'),
11 => t('Wed'),
10 => t('Thu'),
9 => t('Fri'),
8 => t('Sat'),
7 => t('Sun'),
6 => t('Mon'),
5 => t('Tue'),
4 => t('Wed'),
3 => t('Thu'),
2 => t('Fri'),
1 => t('Sat'),
0 => t('Sun'),
);
$counter = -$month_meta['firstday'];
for ($j = 0; $j < $month_meta['weeksinmonth']; $j++) {
for ($i = 0; $i < 7; $i++) {
$counter++;
$week[$j][$i] = $counter;
if ($week[$j][$i] < 1 || $week[$j][$i] > $month_meta['daysinmonth']) {
$week[$j][$i] = "";
}
}
}
$month_title = format_date(mktime(12, 0, 0, $month, 1, $year), 'custom', 'F Y');
if ($settings->showeditlink && availability_calendars_can_edit($node)) {
$month_title .= ' ' . l(t('edit'), 'availability-calendars/' . $node->nid . '/' . date('Y/m', mktime(0, 0, 0, $month, 1, $year)) . '/edit', array(
'query' => array(
'destination' => 'node/' . $node->nid,
),
'attributes' => array(
'title' => t('Click to edit week notes and/or statuses per day'),
),
));
}
$headers = array();
if ($settings->showweeknotes) {
array_push($headers, array(
'data' => ' ',
'class' => array(
'calempty',
),
));
}
for ($i = $settings->startofweek + 7; $i > $settings->startofweek && $i <= 7 + $settings->startofweek; $i--) {
$day = $settings->firstletter == 0 ? $days[$i] : drupal_substr($days[$i], 0, 1);
array_push($headers, $day);
}
$notes = availability_calendars_get_node_notes($settings->calendar_id, $year, $month);
$states = availability_calendars_get_node_states($settings->calendar_id, $year, $month, $settings);
$today = date(AC_ISODATE);
$rows = array();
$cells = array();
foreach ($week as $key => $val) {
$weeknumber = $key + 1;
if ($settings->showweeknotes) {
$note = !empty($notes[$weeknumber]) ? '<div>' . filter_xss($notes[$weeknumber]) . '</div>' : '<div class="calweeknote-empty"></div>';
array_push($cells, array(
'data' => $note,
'header' => TRUE,
));
}
for ($i = 0; $i < 7; $i++) {
$day = $week[$key][$i];
if ($day) {
$daystamp = date(AC_ISODATE, mktime(0, 0, 0, $month, $day, $year));
$status = $states[$daystamp];
$classes = array();
if ($daystamp < $today) {
$classes[] = 'calpastdate';
if ($settings->hideold != 1) {
$classes[] = $status;
}
}
else {
if ($today == $daystamp) {
$classes[] = 'caltoday';
}
$classes[] = $status;
}
$day_cell = availability_calenders_day($day, $settings);
array_push($cells, array(
'data' => $day_cell,
'class' => $classes,
));
}
else {
array_push($cells, array(
'data' => '<div></div>',
'class' => array(
'calother',
),
));
}
}
array_push($rows, array(
'data' => $cells,
'class' => array(
'calweek',
),
));
$cells = array();
}
if ($weeknumber == 5) {
if ($settings->showweeknotes) {
$note = '<div class="calweeknote-empty"></div>';
array_push($cells, array(
'data' => $note,
'header' => TRUE,
));
}
for ($i = 0; $i < 7; $i++) {
array_push($cells, array(
'data' => '<div></div>',
'class' => array(
'calother',
),
));
}
array_push($rows, array(
'data' => $cells,
));
}
$output = theme('table', array(
'caption' => $month_title,
'header' => $headers,
'rows' => $rows,
'attributes' => array(
'id' => "cal-{$year}-{$month}-{$node->nid}",
'class' => array(
'cal',
'calmonth',
),
),
'sticky' => FALSE,
));
return '<div class="calmonth-wrapper">' . $output . '</div>';
}
function availability_calenders_day($day, $settings) {
if (!$settings->splitday) {
$result = "<div>{$day}</div>";
}
else {
$result = "<span><span>{$day}</span></span>";
}
return $result;
}
function theme_availability_calendars_key($variables) {
$caption = t('Availability');
$rows = array();
$states = availability_calendars_get_states();
foreach ($states as $class => $state) {
$rows[] = array(
array(
'data' => '<div>' . check_plain(t($state['label'])) . '</div>',
'class' => "{$class} keystatus",
),
);
}
$key = theme('table', array(
'caption' => $caption,
'rows' => $rows,
'attributes' => array(
'class' => array(
'cal',
'calkey',
),
),
'sticky' => FALSE,
));
return '<div class="calmonth-wrapper key-wrapper">' . $key . '</div>';
}