function template_compose($template, $template_vars)
{
    $args = array_slice(func_get_args(), 2);
    $content = template_render($template, $template_vars);
    while (!empty($args)) {
        $template = array_shift($args);
        $template_vars = empty($args) ? array() : array_shift($args);
        $content = array('content' => $content);
        $template_vars = array_merge($template_vars, $content);
        $content = template_render($template, $template_vars);
    }
    return $content;
}
Beispiel #2
0
function view_user_shifts()
{
    global $user, $privileges;
    global $ical_shifts;
    $ical_shifts = array();
    $days = sql_select_single_col("\n      SELECT DISTINCT DATE(FROM_UNIXTIME(`start`)) AS `id`, DATE(FROM_UNIXTIME(`start`)) AS `name` \n      FROM `Shifts` \n      ORDER BY `start`");
    if (count($days) == 0) {
        error(_("The administration has not configured any shifts yet."));
        redirect('?');
    }
    $rooms = sql_select("SELECT `RID` AS `id`, `Name` AS `name` FROM `Room` WHERE `show`='Y' ORDER BY `Name`");
    if (count($rooms) == 0) {
        error(_("The administration has not configured any rooms yet."));
        redirect('?');
    }
    if (in_array('user_shifts_admin', $privileges)) {
        $types = sql_select("SELECT `id`, `name` FROM `AngelTypes` ORDER BY `AngelTypes`.`name`");
    } else {
        $types = sql_select("SELECT `AngelTypes`.`id`, `AngelTypes`.`name`, (`AngelTypes`.`restricted`=0 OR (NOT `UserAngelTypes`.`confirm_user_id` IS NULL OR `UserAngelTypes`.`id` IS NULL)) as `enabled` FROM `AngelTypes` LEFT JOIN `UserAngelTypes` ON (`UserAngelTypes`.`angeltype_id`=`AngelTypes`.`id` AND `UserAngelTypes`.`user_id`='" . sql_escape($user['UID']) . "') ORDER BY `AngelTypes`.`name`");
    }
    if (empty($types)) {
        $types = sql_select("SELECT `id`, `name` FROM `AngelTypes` WHERE `restricted` = 0");
    }
    $filled = array(array('id' => '1', 'name' => _('occupied')), array('id' => '0', 'name' => _('free')));
    if (count($types) == 0) {
        error(_("The administration has not configured any angeltypes yet - or you are not subscribed to any angeltype."));
        redirect('?');
    }
    if (!isset($_SESSION['user_shifts'])) {
        $_SESSION['user_shifts'] = array();
    }
    if (!isset($_SESSION['user_shifts']['filled'])) {
        // User shift admins see free and occupied shifts by default
        $_SESSION['user_shifts']['filled'] = in_array('user_shifts_admin', $privileges) ? [0, 1] : [0];
    }
    foreach (array('rooms', 'types', 'filled') as $key) {
        if (isset($_REQUEST[$key])) {
            $filtered = array_filter($_REQUEST[$key], 'is_numeric');
            if (!empty($filtered)) {
                $_SESSION['user_shifts'][$key] = $filtered;
            }
            unset($filtered);
        }
        if (!isset($_SESSION['user_shifts'][$key])) {
            $_SESSION['user_shifts'][$key] = array_map('get_ids_from_array', ${$key});
        }
    }
    if (isset($_REQUEST['rooms'])) {
        if (isset($_REQUEST['new_style'])) {
            $_SESSION['user_shifts']['new_style'] = true;
        } else {
            $_SESSION['user_shifts']['new_style'] = false;
        }
    }
    if (!isset($_SESSION['user_shifts']['new_style'])) {
        $_SESSION['user_shifts']['new_style'] = true;
    }
    foreach (array('start', 'end') as $key) {
        if (isset($_REQUEST[$key . '_day']) && in_array($_REQUEST[$key . '_day'], $days)) {
            $_SESSION['user_shifts'][$key . '_day'] = $_REQUEST[$key . '_day'];
        }
        if (isset($_REQUEST[$key . '_time']) && preg_match('#^\\d{1,2}:\\d\\d$#', $_REQUEST[$key . '_time'])) {
            $_SESSION['user_shifts'][$key . '_time'] = $_REQUEST[$key . '_time'];
        }
        if (!isset($_SESSION['user_shifts'][$key . '_day'])) {
            $time = date('Y-m-d', time() + ($key == 'end' ? 24 * 60 * 60 : 0));
            $_SESSION['user_shifts'][$key . '_day'] = in_array($time, $days) ? $time : ($key == 'end' ? max($days) : min($days));
        }
        if (!isset($_SESSION['user_shifts'][$key . '_time'])) {
            $_SESSION['user_shifts'][$key . '_time'] = date('H:i');
        }
    }
    if ($_SESSION['user_shifts']['start_day'] > $_SESSION['user_shifts']['end_day']) {
        $_SESSION['user_shifts']['end_day'] = $_SESSION['user_shifts']['start_day'];
    }
    if ($_SESSION['user_shifts']['start_day'] == $_SESSION['user_shifts']['end_day'] && $_SESSION['user_shifts']['start_time'] >= $_SESSION['user_shifts']['end_time']) {
        $_SESSION['user_shifts']['end_time'] = '23:59';
    }
    if (isset($_SESSION['user_shifts']['start_day'])) {
        $starttime = DateTime::createFromFormat("Y-m-d H:i", $_SESSION['user_shifts']['start_day'] . $_SESSION['user_shifts']['start_time']);
        $starttime = $starttime->getTimestamp();
    } else {
        $starttime = now();
    }
    if (isset($_SESSION['user_shifts']['end_day'])) {
        $endtime = DateTime::createFromFormat("Y-m-d H:i", $_SESSION['user_shifts']['end_day'] . $_SESSION['user_shifts']['end_time']);
        $endtime = $endtime->getTimestamp();
    } else {
        $endtime = now() + 24 * 60 * 60;
    }
    if (!isset($_SESSION['user_shifts']['rooms']) || count($_SESSION['user_shifts']['rooms']) == 0) {
        $_SESSION['user_shifts']['rooms'] = array(0);
    }
    $SQL = "SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` as `room_name`, nat2.`special_needs` > 0 AS 'has_special_needs'\n  FROM `Shifts`\n  INNER JOIN `Room` USING (`RID`)\n  INNER JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`)\n  LEFT JOIN (SELECT COUNT(*) AS special_needs , nat3.`shift_id` FROM `NeededAngelTypes` AS nat3 WHERE `shift_id` IS NOT NULL GROUP BY nat3.`shift_id`) AS nat2 ON nat2.`shift_id` = `Shifts`.`SID`\n  INNER JOIN `NeededAngelTypes` AS nat ON nat.`count` != 0 AND nat.`angel_type_id` IN (" . implode(',', $_SESSION['user_shifts']['types']) . ") AND ((nat2.`special_needs` > 0 AND nat.`shift_id` = `Shifts`.`SID`) OR ((nat2.`special_needs` = 0 OR nat2.`special_needs` IS NULL) AND nat.`room_id` = `RID`))\n  LEFT JOIN (SELECT se.`SID`, se.`TID`, COUNT(*) as count FROM `ShiftEntry` AS se GROUP BY se.`SID`, se.`TID`) AS entries ON entries.`SID` = `Shifts`.`SID` AND entries.`TID` = nat.`angel_type_id`\n  WHERE `Shifts`.`RID` IN (" . implode(',', $_SESSION['user_shifts']['rooms']) . ")\n  AND `start` BETWEEN " . $starttime . " AND " . $endtime;
    if (count($_SESSION['user_shifts']['filled']) == 1) {
        if ($_SESSION['user_shifts']['filled'][0] == 0) {
            $SQL .= "\n      AND (nat.`count` > entries.`count` OR entries.`count` IS NULL OR EXISTS (SELECT `SID` FROM `ShiftEntry` WHERE `UID` = '" . sql_escape($user['UID']) . "' AND `ShiftEntry`.`SID` = `Shifts`.`SID`))";
        } elseif ($_SESSION['user_shifts']['filled'][0] == 1) {
            $SQL .= "\n    AND (nat.`count` <= entries.`count`  OR EXISTS (SELECT `SID` FROM `ShiftEntry` WHERE `UID` = '" . sql_escape($user['UID']) . "' AND `ShiftEntry`.`SID` = `Shifts`.`SID`))";
        }
    }
    $SQL .= "\n  ORDER BY `start`";
    $shifts = sql_select($SQL);
    $ownshifts_source = sql_select("\n      SELECT `ShiftTypes`.`name`, `Shifts`.* \n      FROM `Shifts` \n      INNER JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`)\n      INNER JOIN `ShiftEntry` ON (`Shifts`.`SID` = `ShiftEntry`.`SID` AND `ShiftEntry`.`UID` = '" . sql_escape($user['UID']) . "')\n      WHERE `Shifts`.`RID` IN (" . implode(',', $_SESSION['user_shifts']['rooms']) . ")\n      AND `start` BETWEEN " . $starttime . " AND " . $endtime);
    $ownshifts = array();
    foreach ($ownshifts_source as $ownshift) {
        $ownshifts[$ownshift['SID']] = $ownshift;
    }
    unset($ownshifts_source);
    $shifts_table = "";
    // qqqq
    /*
     * [0] => Array ( [SID] => 1 [start] => 1355958000 [end] => 1355961600 [RID] => 1 [name] => [URL] => [PSID] => [room_name] => test1 [has_special_needs] => 1 [is_full] => 0 )
     */
    if ($_SESSION['user_shifts']['new_style']) {
        $first = 15 * 60 * floor($starttime / (15 * 60));
        $maxshow = ceil(($endtime - $first) / (60 * 15));
        $block = array();
        $todo = array();
        $myrooms = $rooms;
        // delete un-selected rooms from array
        foreach ($myrooms as $k => $v) {
            if (array_search($v["id"], $_SESSION['user_shifts']['rooms']) === FALSE) {
                unset($myrooms[$k]);
            }
            // initialize $block array
            $block[$v["id"]] = array_fill(0, $maxshow, 0);
        }
        // calculate number of parallel shifts in each timeslot for each room
        foreach ($shifts as $k => $shift) {
            $rid = $shift["RID"];
            $blocks = ($shift["end"] - $shift["start"]) / (15 * 60);
            $firstblock = floor(($shift["start"] - $first) / (15 * 60));
            for ($i = $firstblock; $i < $blocks + $firstblock && $i < $maxshow; $i++) {
                $block[$rid][$i]++;
            }
            $shifts[$k]['own'] = in_array($shift['SID'], array_keys($ownshifts));
        }
        $shifts_table = '<div class="shifts-table"><table id="shifts" class="table scrollable"><thead><tr><th>-</th>';
        foreach ($myrooms as $key => $room) {
            $rid = $room["id"];
            if (array_sum($block[$rid]) == 0) {
                // do not display columns without entries
                unset($block[$rid]);
                unset($myrooms[$key]);
                continue;
            }
            $colspan = call_user_func_array('max', $block[$rid]);
            if ($colspan == 0) {
                $colspan = 1;
            }
            $todo[$rid] = array_fill(0, $maxshow, $colspan);
            $shifts_table .= "<th" . ($colspan > 1 ? ' colspan="' . $colspan . '"' : '') . ">" . Room_name_render(['RID' => $room['id'], 'Name' => $room['name']]) . "</th>\n";
        }
        unset($block, $blocks, $firstblock, $colspan, $key, $room);
        $shifts_table .= "</tr></thead><tbody>";
        for ($i = 0; $i < $maxshow; $i++) {
            $thistime = $first + $i * 15 * 60;
            if ($thistime % (24 * 60 * 60) == 23 * 60 * 60 && $endtime - $starttime > 24 * 60 * 60) {
                $shifts_table .= "<tr class=\"row-day\"><th class=\"row-header\">";
                $shifts_table .= date('y-m-d<b\\r />H:i', $thistime);
            } elseif ($thistime % (60 * 60) == 0) {
                $shifts_table .= "<tr class=\"row-hour\"><th>";
                $shifts_table .= date("H:i", $thistime);
            } else {
                $shifts_table .= "<tr><th>";
            }
            $shifts_table .= "</th>";
            foreach ($myrooms as $room) {
                $rid = $room["id"];
                foreach ($shifts as $shift) {
                    if ($shift["RID"] == $rid) {
                        if (floor($shift["start"] / (15 * 60)) == $thistime / (15 * 60)) {
                            $blocks = ($shift["end"] - $shift["start"]) / (15 * 60);
                            if ($blocks < 1) {
                                $blocks = 1;
                            }
                            $collides = in_array($shift['SID'], array_keys($ownshifts));
                            if (!$collides) {
                                foreach ($ownshifts as $ownshift) {
                                    if ($ownshift['start'] >= $shift['start'] && $ownshift['start'] < $shift['end'] || $ownshift['end'] > $shift['start'] && $ownshift['end'] <= $shift['end'] || $ownshift['start'] < $shift['start'] && $ownshift['end'] > $shift['end']) {
                                        $collides = true;
                                        break;
                                    }
                                }
                            }
                            // qqqqqq
                            $is_free = false;
                            $shifts_row = '';
                            if (in_array('admin_shifts', $privileges)) {
                                $shifts_row .= '<div class="pull-right">' . table_buttons(array(button(page_link_to('user_shifts') . '&edit_shift=' . $shift['SID'], glyph('edit'), 'btn-xs'), button(page_link_to('user_shifts') . '&delete_shift=' . $shift['SID'], glyph('trash'), 'btn-xs'))) . '</div>';
                            }
                            $shifts_row .= Room_name_render(['RID' => $room['id'], 'Name' => $room['name']]) . '<br />';
                            $shifts_row .= '<a href="' . shift_link($shift) . '">' . date('d.m. H:i', $shift['start']);
                            $shifts_row .= " &ndash; ";
                            $shifts_row .= date('H:i', $shift['end']);
                            $shifts_row .= "<br /><b>";
                            $shifts_row .= ShiftType($shift['shifttype_id'])['name'];
                            $shifts_row .= "</b><br />";
                            if ($shift['title'] != '') {
                                $shifts_row .= $shift['title'];
                                $shifts_row .= "<br />";
                            }
                            $shifts_row .= '</a>';
                            $shifts_row .= '<br />';
                            $query = "SELECT `NeededAngelTypes`.`count`, `AngelTypes`.`id`, `AngelTypes`.`restricted`, `UserAngelTypes`.`confirm_user_id`, `AngelTypes`.`name`, `UserAngelTypes`.`user_id`\n            FROM `NeededAngelTypes`\n            JOIN `AngelTypes` ON (`NeededAngelTypes`.`angel_type_id` = `AngelTypes`.`id`)\n            LEFT JOIN `UserAngelTypes` ON (`NeededAngelTypes`.`angel_type_id` = `UserAngelTypes`.`angeltype_id`AND `UserAngelTypes`.`user_id`='" . sql_escape($user['UID']) . "')\n            WHERE\n            `count` > 0\n            AND ";
                            if ($shift['has_special_needs']) {
                                $query .= "`shift_id` = '" . sql_escape($shift['SID']) . "'";
                            } else {
                                $query .= "`room_id` = '" . sql_escape($shift['RID']) . "'";
                            }
                            if (!empty($_SESSION['user_shifts']['types'])) {
                                $query .= " AND `angel_type_id` IN (" . implode(',', $_SESSION['user_shifts']['types']) . ") ";
                            }
                            $query .= " ORDER BY `AngelTypes`.`name`";
                            $angeltypes = sql_select($query);
                            if (count($angeltypes) > 0) {
                                foreach ($angeltypes as $angeltype) {
                                    $entries = sql_select("SELECT * FROM `ShiftEntry` JOIN `User` ON (`ShiftEntry`.`UID` = `User`.`UID`) WHERE `SID`='" . sql_escape($shift['SID']) . "' AND `TID`='" . sql_escape($angeltype['id']) . "' ORDER BY `Nick`");
                                    $entry_list = array();
                                    $freeloader = 0;
                                    foreach ($entries as $entry) {
                                        $style = '';
                                        if ($entry['freeloaded']) {
                                            $freeloader++;
                                            $style = " text-decoration: line-through;";
                                        }
                                        if (in_array('user_shifts_admin', $privileges)) {
                                            $entry_list[] = "<span style=\"{$style}\">" . User_Nick_render($entry) . ' ' . table_buttons(array(button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], glyph('trash'), 'btn-xs'))) . '</span>';
                                        } else {
                                            $entry_list[] = "<span style=\"{$style}\">" . User_Nick_render($entry) . "</span>";
                                        }
                                    }
                                    if ($angeltype['count'] - count($entries) - $freeloader > 0) {
                                        $inner_text = sprintf(ngettext("%d helper needed", "%d helpers needed", $angeltype['count'] - count($entries)), $angeltype['count'] - count($entries));
                                        // is the shift still running or alternatively is the user shift admin?
                                        $user_may_join_shift = true;
                                        // you cannot join if user alread joined a parallel or this shift
                                        $user_may_join_shift &= !$collides;
                                        // you cannot join if user is not of this angel type
                                        $user_may_join_shift &= isset($angeltype['user_id']);
                                        // you cannot join if you are not confirmed
                                        if ($angeltype['restricted'] == 1 && isset($angeltype['user_id'])) {
                                            $user_may_join_shift &= isset($angeltype['confirm_user_id']);
                                        }
                                        // you can only join if the shift is in future or running
                                        $user_may_join_shift &= time() < $shift['start'];
                                        // User shift admins may join anybody in every shift
                                        $user_may_join_shift |= in_array('user_shifts_admin', $privileges);
                                        if ($user_may_join_shift) {
                                            $entry_list[] = '<a href="' . page_link_to('user_shifts') . '&amp;shift_id=' . $shift['SID'] . '&amp;type_id=' . $angeltype['id'] . '">' . $inner_text . '</a> ' . button(page_link_to('user_shifts') . '&amp;shift_id=' . $shift['SID'] . '&amp;type_id=' . $angeltype['id'], _('Sign up'), 'btn-xs');
                                        } else {
                                            if (time() > $shift['start']) {
                                                $entry_list[] = $inner_text . ' (' . _('ended') . ')';
                                            } elseif ($angeltype['restricted'] == 1 && isset($angeltype['user_id']) && !isset($angeltype['confirm_user_id'])) {
                                                $entry_list[] = $inner_text . glyph('lock');
                                            } elseif ($angeltype['restricted'] == 1) {
                                                $entry_list[] = $inner_text;
                                            } elseif ($collides) {
                                                $entry_list[] = $inner_text;
                                            } else {
                                                $entry_list[] = $inner_text . '<br />' . button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], sprintf(_('Become %s'), $angeltype['name']), 'btn-xs');
                                            }
                                        }
                                        unset($inner_text);
                                        $is_free = true;
                                    }
                                    $shifts_row .= '<strong>' . AngelType_name_render($angeltype) . ':</strong> ';
                                    $shifts_row .= join(", ", $entry_list);
                                    $shifts_row .= '<br />';
                                }
                                if (in_array('user_shifts_admin', $privileges)) {
                                    $shifts_row .= ' ' . button(page_link_to('user_shifts') . '&amp;shift_id=' . $shift['SID'] . '&amp;type_id=' . $angeltype['id'], _("Add more angels"), 'btn-xs');
                                }
                            }
                            if ($shift['own'] && !in_array('user_shifts_admin', $privileges)) {
                                $class = 'own';
                            } elseif ($collides && !in_array('user_shifts_admin', $privileges)) {
                                $class = 'collides';
                            } elseif ($is_free) {
                                $class = 'free';
                            } else {
                                $class = 'occupied';
                            }
                            $shifts_table .= '<td rowspan="' . $blocks . '" class="' . $class . '">';
                            $shifts_table .= $shifts_row;
                            $shifts_table .= "</td>";
                            for ($j = 0; $j < $blocks && $i + $j < $maxshow; $j++) {
                                $todo[$rid][$i + $j]--;
                            }
                        }
                    }
                }
                // fill up row with empty <td>
                while ($todo[$rid][$i]-- > 0) {
                    $shifts_table .= '<td class="empty"></td>';
                }
            }
            $shifts_table .= "</tr>\n";
        }
        $shifts_table .= '</tbody></table></div>';
        // qqq
    } else {
        $shifts_table = array();
        foreach ($shifts as $shift) {
            $info = array();
            if ($_SESSION['user_shifts']['start_day'] != $_SESSION['user_shifts']['end_day']) {
                $info[] = date("Y-m-d", $shift['start']);
            }
            $info[] = date("H:i", $shift['start']) . ' - ' . date("H:i", $shift['end']);
            if (count($_SESSION['user_shifts']['rooms']) > 1) {
                $info[] = Room_name_render(['Name' => $shift['room_name'], 'RID' => $shift['RID']]);
            }
            $shift_row = array('info' => join('<br />', $info), 'entries' => '<a href="' . shift_link($shift) . '">' . $shift['name'] . '</a>' . ($shift['title'] ? '<br />' . $shift['title'] : ''));
            if (in_array('admin_shifts', $privileges)) {
                $shift_row['info'] .= ' ' . table_buttons(array(button(page_link_to('user_shifts') . '&edit_shift=' . $shift['SID'], glyph('edit'), 'btn-xs'), button(page_link_to('user_shifts') . '&delete_shift=' . $shift['SID'], glyph('trash'), 'btn-xs')));
            }
            $shift_row['entries'] .= '<br />';
            $is_free = false;
            $shift_has_special_needs = 0 < sql_num_query("SELECT `id` FROM `NeededAngelTypes` WHERE `shift_id` = " . $shift['SID']);
            $query = "SELECT `NeededAngelTypes`.`count`, `AngelTypes`.`id`, `AngelTypes`.`restricted`, `UserAngelTypes`.`confirm_user_id`, `AngelTypes`.`name`, `UserAngelTypes`.`user_id`\n    FROM `NeededAngelTypes`\n    JOIN `AngelTypes` ON (`NeededAngelTypes`.`angel_type_id` = `AngelTypes`.`id`)\n    LEFT JOIN `UserAngelTypes` ON (`NeededAngelTypes`.`angel_type_id` = `UserAngelTypes`.`angeltype_id`AND `UserAngelTypes`.`user_id`='" . sql_escape($user['UID']) . "')\n    WHERE ";
            if ($shift_has_special_needs) {
                $query .= "`shift_id` = '" . sql_escape($shift['SID']) . "'";
            } else {
                $query .= "`room_id` = '" . sql_escape($shift['RID']) . "'";
            }
            $query .= "               AND `count` > 0 ";
            if (!empty($_SESSION['user_shifts']['types'])) {
                $query .= "AND `angel_type_id` IN (" . implode(',', $_SESSION['user_shifts']['types']) . ") ";
            }
            $query .= "ORDER BY `AngelTypes`.`name`";
            $angeltypes = sql_select($query);
            if (count($angeltypes) > 0) {
                $my_shift = sql_num_query("SELECT * FROM `ShiftEntry` WHERE `SID`='" . sql_escape($shift['SID']) . "' AND `UID`='" . sql_escape($user['UID']) . "' LIMIT 1") > 0;
                foreach ($angeltypes as &$angeltype) {
                    $entries = sql_select("SELECT * FROM `ShiftEntry` JOIN `User` ON (`ShiftEntry`.`UID` = `User`.`UID`) WHERE `SID`='" . sql_escape($shift['SID']) . "' AND `TID`='" . sql_escape($angeltype['id']) . "' ORDER BY `Nick`");
                    $entry_list = array();
                    $entry_nicks = [];
                    $freeloader = 0;
                    foreach ($entries as $entry) {
                        if (in_array('user_shifts_admin', $privileges)) {
                            $member = User_Nick_render($entry) . ' ' . table_buttons(array(button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], glyph('trash'), 'btn-xs')));
                        } else {
                            $member = User_Nick_render($entry);
                        }
                        if ($entry['freeloaded']) {
                            $member = '<strike>' . $member . '</strike>';
                            $freeloader++;
                        }
                        $entry_list[] = $member;
                        $entry_nicks[] = $entry['Nick'];
                    }
                    $angeltype['taken'] = count($entries) - $freeloader;
                    $angeltype['angels'] = $entry_nicks;
                    // do we need more angles of this type?
                    if ($angeltype['count'] - count($entries) + $freeloader > 0) {
                        $inner_text = sprintf(ngettext("%d helper needed", "%d helpers needed", $angeltype['count'] - count($entries) + $freeloader), $angeltype['count'] - count($entries) + $freeloader);
                        // is the shift still running or alternatively is the user shift admin?
                        $user_may_join_shift = true;
                        /* you cannot join if user already joined this shift */
                        $user_may_join_shift &= !$my_shift;
                        // you cannot join if user is not of this angel type
                        $user_may_join_shift &= isset($angeltype['user_id']);
                        // you cannot join if you are not confirmed
                        if ($angeltype['restricted'] == 1 && isset($angeltype['user_id'])) {
                            $user_may_join_shift &= isset($angeltype['confirm_user_id']);
                        }
                        // you can only join if the shift is in future or running
                        $user_may_join_shift &= time() < $shift['start'];
                        // User shift admins may join anybody in every shift
                        $user_may_join_shift |= in_array('user_shifts_admin', $privileges);
                        if ($user_may_join_shift) {
                            $entry_list[] = '<a href="' . page_link_to('user_shifts') . '&amp;shift_id=' . $shift['SID'] . '&amp;type_id=' . $angeltype['id'] . '">' . $inner_text . ' &raquo;</a>';
                        } else {
                            if (time() > $shift['end']) {
                                $entry_list[] = $inner_text . ' (vorbei)';
                            } elseif ($angeltype['restricted'] == 1 && isset($angeltype['user_id']) && !isset($angeltype['confirm_user_id'])) {
                                $entry_list[] = $inner_text . glyph("lock");
                            } else {
                                $entry_list[] = $inner_text . ' <a href="' . page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'] . '">' . sprintf(_('Become %s'), $angeltype['name']) . '</a>';
                            }
                        }
                        unset($inner_text);
                        $is_free = true;
                    }
                    $shift_row['entries'] .= '<b>' . $angeltype['name'] . ':</b> ';
                    $shift_row['entries'] .= join(", ", $entry_list);
                    $shift_row['entries'] .= '<br />';
                }
                if (in_array('user_shifts_admin', $privileges)) {
                    $shift_row['entries'] .= '<a href="' . page_link_to('user_shifts') . '&amp;shift_id=' . $shift['SID'] . '&amp;type_id=' . $angeltype['id'] . '">' . _('Add more angels') . ' &raquo;</a>';
                }
                $shifts_table[] = $shift_row;
                $shift['angeltypes'] = $angeltypes;
                $ical_shifts[] = $shift;
            }
        }
        $shifts_table = table(array('info' => _("Time") . "/" . _("Room"), 'entries' => _("Entries")), $shifts_table);
    }
    if ($user['api_key'] == "") {
        User_reset_api_key($user, false);
    }
    return page(array('<div class="col-md-12">', msg(), template_render('../templates/user_shifts.html', array('title' => shifts_title(), 'room_select' => make_select($rooms, $_SESSION['user_shifts']['rooms'], "rooms", _("Rooms")), 'start_select' => html_select_key("start_day", "start_day", array_combine($days, $days), $_SESSION['user_shifts']['start_day']), 'start_time' => $_SESSION['user_shifts']['start_time'], 'end_select' => html_select_key("end_day", "end_day", array_combine($days, $days), $_SESSION['user_shifts']['end_day']), 'end_time' => $_SESSION['user_shifts']['end_time'], 'type_select' => make_select($types, $_SESSION['user_shifts']['types'], "types", _("Angeltypes") . '<sup>1</sup>'), 'filled_select' => make_select($filled, $_SESSION['user_shifts']['filled'], "filled", _("Occupancy")), 'task_notice' => '<sup>1</sup>' . _("The tasks shown here are influenced by the preferences you defined in your settings!") . " <a href=\"" . page_link_to('angeltypes') . '&action=about' . "\">" . _("Description of the jobs.") . "</a>", 'new_style_checkbox' => '<label><input type="checkbox" name="new_style" value="1" ' . ($_SESSION['user_shifts']['new_style'] ? ' checked' : '') . '> ' . _("Use new style if possible") . '</label>', 'shifts_table' => msg() . $shifts_table, 'ical_text' => '<h2>' . _("iCal export") . '</h2><p>' . sprintf(_("Export of shown shifts. <a href=\"%s\">iCal format</a> or <a href=\"%s\">JSON format</a> available (please keep secret, otherwise <a href=\"%s\">reset the api key</a>)."), page_link_to_absolute('ical') . '&key=' . $user['api_key'], page_link_to_absolute('shifts_json_export') . '&key=' . $user['api_key'], page_link_to('user_myshifts') . '&reset') . '</p>', 'filter' => _("Filter"))), '</div>'));
}
Beispiel #3
0
    } elseif ($p == "admin_export_users") {
        require_once realpath(__DIR__ . '/../includes/controller/export_users_controller.php');
        if (isset($_REQUEST['type'])) {
            $type = $_REQUEST['type'];
        } else {
            $ype = 'csv';
        }
        users_export_controller($type);
    } elseif ($p == "admin_log") {
        $title = admin_log_title();
        $content = admin_log();
    } elseif ($p == "credits") {
        require_once realpath(__DIR__ . '/../includes/pages/guest_credits.php');
        $title = credits_title();
        $content = guest_credits();
    } else {
        require_once realpath(__DIR__ . '/../includes/pages/guest_start.php');
        $content = guest_start();
    }
} else {
    // Wenn schon eingeloggt, keine-Berechtigung-Seite anzeigen
    if (isset($user)) {
        $title = _("No Access");
        $content = _("You don't have permission to view this page. You probably have to sign in or register in order to gain access!");
    } else {
        // Sonst zur Loginseite leiten
        redirect(page_link_to("login"));
    }
}
echo template_render('../templates/layout.html', array('theme' => isset($user) ? $user['color'] : $default_theme, 'title' => $title, 'atom_link' => $p == 'news' || $p == 'user_meetings' ? '<link href="' . page_link_to('atom') . ($p == 'user_meetings' ? '&amp;meetings=1' : '') . '&amp;key=' . $user['api_key'] . '" type="application/atom+xml" rel="alternate" title="Atom Feed">' : '', 'menu' => make_menu(), 'content' => msg() . $content, 'header_toolbar' => header_toolbar(), 'faq_url' => $faq_url, 'contact_email' => $contact_email, 'locale' => locale()));
Beispiel #4
0
    } elseif ($p == "imprint") {
        require_once realpath(__DIR__ . '/../includes/pages/guest_imprint.php');
        $title = credits_title();
        $content = guest_credits();
    } elseif ($p == "privacy") {
        require_once realpath(__DIR__ . '/../includes/pages/guest_privacy.php');
        $title = credits_title();
        $content = guest_credits();
    } elseif ($p === "dashboard") {
        require_once realpath(__DIR__ . '/../includes/pages/dashboard.php');
        $title = getDashboardTitle();
        $content = get_dashboard();
    } elseif ($p == "api_key") {
        require_once realpath(__DIR__ . '/../includes/controller/api_key.php');
        $content = getAPIKey();
    } else {
        require_once realpath(__DIR__ . '/../includes/pages/guest_start.php');
        $content = guest_start();
    }
} else {
    // Wenn schon eingeloggt, keine-Berechtigung-Seite anzeigen
    if (isset($user)) {
        $title = _("No Access");
        $content = _("You don't have permission to view this page. You probably have to sign in or register in order to gain access!");
    } else {
        // Sonst zur Loginseite leiten
        redirect(page_link_to("login"));
    }
}
echo template_render('../templates/layout.html', array('theme' => isset($user) ? $user['color'] : $default_theme, 'title' => $title, 'atom_link' => $p == 'news' || $p == 'user_meetings' ? '<link href="' . page_link_to('atom') . ($p == 'user_meetings' ? '&amp;meetings=1' : '') . '&amp;key=' . $user['api_key'] . '" type="application/atom+xml" rel="alternate" title="Atom Feed">' : '', 'menu' => make_menu(), 'content' => msg() . $content, 'privacy_note' => PN_ShowNotice(), 'header_toolbar' => header_toolbar(), 'faq_url' => $faq_url, 'locale' => locale(), 'selectAllText' => _('Select all'), 'filterPlaceholder' => _("Search"), 'allSelectedText' => _("All selected"), 'nSelectedText' => _("selected"), 'nonSelectedText' => _("None selected")));
Beispiel #5
0
function guest_credits()
{
    return template_render('../templates/guest_privacy.html', array());
}
Beispiel #6
0
function venue_box($post)
{
    template_render('venue_box', get_mysettings($post->ID));
}
Beispiel #7
0
function glue_response($req, $response)
{
    $template_vars = is_array($response) ? array_merge($req, $response) : array_merge($req, array('content' => $response));
    $headers = array_merge(array('content-type' => 'text/html'), response_headers($response));
    if (isset($template_vars['template'])) {
        list($handler, $template) = template_resolver($template_vars['template']);
        unset($template_vars['template']);
        //TODO: feels liks a ugly hack to assume func from template but works well for handler-less (template-only) routes
        if (!isset($template_vars['handler'])) {
            $template_vars['handler'] = $handler;
        }
        if (!isset($template_vars['func'])) {
            $template_vars['func'] = $template;
        }
        if (template_file_exists(handler_template($handler, $template))) {
            if (isset($template_vars['layout'])) {
                $layout = $template_vars['layout'];
                unset($template_vars['layout']);
                if (is_equal(false, $layout)) {
                    return response_(response_status_code($template_vars), $headers, template_render(handler_template($handler, $template), $template_vars));
                } else {
                    list($layout_handler, $layout_template) = template_resolver($layout);
                    return response_(response_status_code($template_vars), $headers, template_compose(handler_template($handler, $template), $template_vars, handler_template($layout_handler, $layout_template), $template_vars));
                }
            } else {
                return response_(response_status_code($template_vars), $headers, template_compose(handler_template($handler, $template), $template_vars, handler_layout($handler), $template_vars));
            }
        }
    }
    return _200_plain(print_r($response, true));
}
Beispiel #8
0
function dashboardView($viewData)
{
    return template_render('../templates/dashboard.html', $viewData);
}
Beispiel #9
0
<?php

/*
    Copyright 2009-2014 Edward L. Platt <*****@*****.**>
    
    This file is part of the Seltzer CRM Project
    install.php - Install the database

    Seltzer is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    any later version.

    Seltzer 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.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Seltzer.  If not, see <http://www.gnu.org/licenses/>.
*/
// Save path of directory containing index.php
$crm_root = dirname(__FILE__);
// Bootstrap the crm
require_once 'include/crm.inc.php';
$template_vars = array('path' => 'install');
print template_render('page', $template_vars);
Beispiel #10
0
/**
 * Creates a block as a kind of a service. A block needs a template based on its type and the
 * data to render into the block. Each Block has its own set of data.
 *
 * @param $viewData
 * @param $type
 *
 * @return mixed|string
 */
function block($viewData, $type)
{
    return template_render('../templates/block/' . $type . '.html', $viewData);
}
Beispiel #11
0
/**
 * Return the text of an email welcoming a new member.
 * @param $cid The contact id of the new member.
 * @param $confirm_url The url for the new user to confirm their email.
 */
function theme_member_welcome_email($cid, $confirm_url)
{
    $contact = crm_get_one('contact', array('cid' => $cid));
    $vars = array('type' => 'welcome', 'confirm_url' => $confirm_url, 'username' => $contact['user']['username']);
    return template_render('email', $vars);
}