freeloader feature
This commit is contained in:
parent
2c41fcdc09
commit
c589219a96
|
@ -26,6 +26,9 @@ define('MIN_PASSWORD_LENGTH', 8);
|
||||||
// Wenn Engel beim Registrieren oder in ihrem Profil eine T-Shirt Größe angeben sollen, auf true setzen:
|
// Wenn Engel beim Registrieren oder in ihrem Profil eine T-Shirt Größe angeben sollen, auf true setzen:
|
||||||
$enable_tshirt_size = true;
|
$enable_tshirt_size = true;
|
||||||
|
|
||||||
|
// Number of shifts to freeload until angel is locked for shift signup.
|
||||||
|
$max_freeloadable_shifts = 2;
|
||||||
|
|
||||||
// local timezone
|
// local timezone
|
||||||
date_default_timezone_set("Europe/Berlin");
|
date_default_timezone_set("Europe/Berlin");
|
||||||
|
|
||||||
|
@ -34,13 +37,13 @@ $PentabarfXMLhost = "cccv.pentabarf.org";
|
||||||
$PentabarfXMLpath = "Xcal/conference/";
|
$PentabarfXMLpath = "Xcal/conference/";
|
||||||
$PentabarfXMLEventID = "31";
|
$PentabarfXMLEventID = "31";
|
||||||
|
|
||||||
// multiply "night shifts" (start or end between 2 and 6 exclusive) by 2
|
// multiply "night shifts" and freeloaded shifts (start or end between 2 and 6 exclusive) by 2
|
||||||
$shift_sum_formula = "SUM(
|
$shift_sum_formula = "SUM(
|
||||||
(1+(
|
(1+(
|
||||||
(HOUR(FROM_UNIXTIME(`Shifts`.`end`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < 6)
|
(HOUR(FROM_UNIXTIME(`Shifts`.`end`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) < 6)
|
||||||
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < 6)
|
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) > 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`start`)) < 6)
|
||||||
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) <= 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) >= 6)
|
OR (HOUR(FROM_UNIXTIME(`Shifts`.`start`)) <= 2 AND HOUR(FROM_UNIXTIME(`Shifts`.`end`)) >= 6)
|
||||||
))*(`Shifts`.`end` - `Shifts`.`start`)
|
))*(`Shifts`.`end` - `Shifts`.`start`)*(-2 * `ShiftEntry`.`freeloaded`)
|
||||||
)";
|
)";
|
||||||
|
|
||||||
// weigh every shift the same
|
// weigh every shift the same
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
/* freeloader */
|
||||||
|
ALTER TABLE `ShiftEntry` ADD `freeloaded` BOOLEAN NOT NULL, ADD INDEX ( `freeloaded` );
|
||||||
|
ALTER TABLE `ShiftEntry` ADD `freeload_comment` TEXT NULL DEFAULT NULL;
|
||||||
|
|
||||||
/* password recovery */
|
/* password recovery */
|
||||||
ALTER TABLE `User` ADD `password_recovery_token` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `Passwort` ,
|
ALTER TABLE `User` ADD `password_recovery_token` VARCHAR( 32 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `Passwort` ,
|
||||||
ADD INDEX ( `password_recovery_token` );
|
ADD INDEX ( `password_recovery_token` );
|
||||||
|
|
|
@ -14,4 +14,14 @@ function ShiftEntries_by_shift_and_angeltype($shift_id, $angeltype_id) {
|
||||||
");
|
");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all freeloaded shifts for given user.
|
||||||
|
*/
|
||||||
|
function ShiftEntries_freeloaded_by_user($user) {
|
||||||
|
return sql_select("SELECT *
|
||||||
|
FROM `ShiftEntry`
|
||||||
|
WHERE `freeloaded` = 1
|
||||||
|
AND `UID`=" . sql_escape($user['UID']));
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -39,7 +39,7 @@ function admin_arrive() {
|
||||||
foreach ($users as $usr) {
|
foreach ($users as $usr) {
|
||||||
if (count($tokens) > 0) {
|
if (count($tokens) > 0) {
|
||||||
$match = false;
|
$match = false;
|
||||||
$index = join("", $usr);
|
$index = join(" ", $usr);
|
||||||
foreach ($tokens as $t)
|
foreach ($tokens as $t)
|
||||||
if (stristr($index, trim($t))) {
|
if (stristr($index, trim($t))) {
|
||||||
$match = true;
|
$match = true;
|
||||||
|
|
|
@ -26,20 +26,45 @@ function user_myshifts() {
|
||||||
return template_render('../templates/user_myshifts_reset.html', array());
|
return template_render('../templates/user_myshifts_reset.html', array());
|
||||||
} elseif (isset($_REQUEST['edit']) && preg_match("/^[0-9]*$/", $_REQUEST['edit'])) {
|
} elseif (isset($_REQUEST['edit']) && preg_match("/^[0-9]*$/", $_REQUEST['edit'])) {
|
||||||
$id = $_REQUEST['edit'];
|
$id = $_REQUEST['edit'];
|
||||||
$shift = sql_select("SELECT `ShiftEntry`.`Comment`, `ShiftEntry`.`UID`, `Shifts`.*, `Room`.`Name`, `AngelTypes`.`name` as `angel_type` FROM `ShiftEntry` JOIN `AngelTypes` ON (`ShiftEntry`.`TID` = `AngelTypes`.`id`) JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `ShiftEntry`.`id`=" . sql_escape($id) . " AND `UID`=" . sql_escape($shifts_user['UID']) . " LIMIT 1");
|
$shift = sql_select("SELECT
|
||||||
|
`ShiftEntry`.`freeloaded`,
|
||||||
|
`ShiftEntry`.`freeload_comment`,
|
||||||
|
`ShiftEntry`.`Comment`,
|
||||||
|
`ShiftEntry`.`UID`,
|
||||||
|
`Shifts`.*,
|
||||||
|
`Room`.`Name`,
|
||||||
|
`AngelTypes`.`name` as `angel_type`
|
||||||
|
FROM `ShiftEntry`
|
||||||
|
JOIN `AngelTypes` ON (`ShiftEntry`.`TID` = `AngelTypes`.`id`)
|
||||||
|
JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`)
|
||||||
|
JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`)
|
||||||
|
WHERE `ShiftEntry`.`id`=" . sql_escape($id) . "
|
||||||
|
AND `UID`=" . sql_escape($shifts_user['UID']) . " LIMIT 1");
|
||||||
if (count($shift) > 0) {
|
if (count($shift) > 0) {
|
||||||
$shift = $shift[0];
|
$shift = $shift[0];
|
||||||
|
|
||||||
if (isset($_REQUEST['submit'])) {
|
if (isset($_REQUEST['submit'])) {
|
||||||
|
$freeloaded = $shift['freeloaded'];
|
||||||
|
$freeload_comment = $shift['freeload_comment'];
|
||||||
|
if (in_array("user_shifts_admin", $privileges)) {
|
||||||
|
$freeloaded = isset($_REQUEST['freeloaded']);
|
||||||
|
$freeload_comment = strip_request_item_nl('freeload_comment');
|
||||||
|
}
|
||||||
|
|
||||||
$comment = strip_request_item_nl('comment');
|
$comment = strip_request_item_nl('comment');
|
||||||
$user_source = User($shift['UID']);
|
$user_source = User($shift['UID']);
|
||||||
sql_query("UPDATE `ShiftEntry` SET `Comment`='" . sql_escape($comment) . "' WHERE `id`=" . sql_escape($id) . " LIMIT 1");
|
sql_query("UPDATE `ShiftEntry` SET
|
||||||
|
`Comment`='" . sql_escape($comment) . "',
|
||||||
|
`freeloaded`=" . sql_escape($freeloaded ? 1 : 0) . ",
|
||||||
|
`freeload_comment`='" . sql_escape($freeload_comment) . "'
|
||||||
|
WHERE `id`=" . sql_escape($id) . "
|
||||||
|
LIMIT 1");
|
||||||
engelsystem_log("Updated " . User_Nick_render($user_source) . "'s shift " . $shift['name'] . " from " . date("y-m-d H:i", $shift['start']) . " to " . date("y-m-d H:i", $shift['end']) . " with comment " . $comment);
|
engelsystem_log("Updated " . User_Nick_render($user_source) . "'s shift " . $shift['name'] . " from " . date("y-m-d H:i", $shift['start']) . " to " . date("y-m-d H:i", $shift['end']) . " with comment " . $comment);
|
||||||
success(_("Shift saved."));
|
success(_("Shift saved."));
|
||||||
redirect(page_link_to('user_myshifts'));
|
redirect(page_link_to('user_myshifts'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ShiftEntry_edit_view(User_Nick_render($shifts_user), date("Y-m-d H:i", $shift['start']) . ', ' . shift_length($shift), $shift['Name'], $shift['name'], $shift['angel_type'], $shift['Comment']);
|
return ShiftEntry_edit_view(User_Nick_render($shifts_user), date("Y-m-d H:i", $shift['start']) . ', ' . shift_length($shift), $shift['Name'], $shift['name'], $shift['angel_type'], $shift['Comment'], $shift['freeloaded'], $shift['freeload_comment'], in_array("user_shifts_admin", $privileges));
|
||||||
} else
|
} else
|
||||||
redirect(page_link_to('user_myshifts'));
|
redirect(page_link_to('user_myshifts'));
|
||||||
} elseif (isset($_REQUEST['cancel']) && preg_match("/^[0-9]*$/", $_REQUEST['cancel'])) {
|
} elseif (isset($_REQUEST['cancel']) && preg_match("/^[0-9]*$/", $_REQUEST['cancel'])) {
|
||||||
|
@ -51,7 +76,7 @@ function user_myshifts() {
|
||||||
sql_query("DELETE FROM `ShiftEntry` WHERE `id`=" . sql_escape($id) . " LIMIT 1");
|
sql_query("DELETE FROM `ShiftEntry` WHERE `id`=" . sql_escape($id) . " LIMIT 1");
|
||||||
$msg .= success(_("You have been signed off from the shift."), true);
|
$msg .= success(_("You have been signed off from the shift."), true);
|
||||||
} else
|
} else
|
||||||
$msg .= error(_("It's too late to sign yourself off the shift. If neccessary, as the dispatcher to do so."), true);
|
$msg .= error(_("It's too late to sign yourself off the shift. If neccessary, ask the dispatcher to do so."), true);
|
||||||
} else
|
} else
|
||||||
redirect(page_link_to('user_myshifts'));
|
redirect(page_link_to('user_myshifts'));
|
||||||
}
|
}
|
||||||
|
@ -66,13 +91,17 @@ function user_myshifts() {
|
||||||
foreach ($needed_angel_types_source as $needed_angel_type) {
|
foreach ($needed_angel_types_source as $needed_angel_type) {
|
||||||
$shift_info .= '<br><b>' . $needed_angel_type['name'] . ':</b> ';
|
$shift_info .= '<br><b>' . $needed_angel_type['name'] . ':</b> ';
|
||||||
|
|
||||||
$users_source = sql_select("SELECT `User`.* FROM `ShiftEntry` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . " AND `ShiftEntry`.`TID`=" . sql_escape($needed_angel_type['id']));
|
$users_source = sql_select("SELECT `ShiftEntry`.`freeloaded`, `User`.* FROM `ShiftEntry` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . " AND `ShiftEntry`.`TID`=" . sql_escape($needed_angel_type['id']));
|
||||||
$shift_entries = array();
|
$shift_entries = array();
|
||||||
foreach ($users_source as $user_source) {
|
foreach ($users_source as $user_source) {
|
||||||
if ($user['UID'] == $user_source['UID'])
|
if ($user['UID'] == $user_source['UID'])
|
||||||
$shift_entries[] = '<b>' . $user_source['Nick'] . '</b>';
|
$member = '<b>' . $user_source['Nick'] . '</b>';
|
||||||
else
|
else
|
||||||
$shift_entries[] = User_Nick_render($user_source);
|
$member = User_Nick_render($user_source);
|
||||||
|
if ($user_source['freeloaded'])
|
||||||
|
$member = '<strike>' . $member . '</strike>';
|
||||||
|
|
||||||
|
$shift_entries[] = $member;
|
||||||
}
|
}
|
||||||
$shift_info .= join(", ", $shift_entries);
|
$shift_info .= join(", ", $shift_entries);
|
||||||
}
|
}
|
||||||
|
@ -85,13 +114,23 @@ function user_myshifts() {
|
||||||
'comment' => $shift['Comment']
|
'comment' => $shift['Comment']
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if ($shift['freeloaded']) {
|
||||||
|
if (in_array("user_shifts_admin", $privileges))
|
||||||
|
$myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . ': ' . $shift['freeload_comment'] . '</p>';
|
||||||
|
else
|
||||||
|
$myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . '</p>';
|
||||||
|
}
|
||||||
|
|
||||||
$myshift['actions'] = "";
|
$myshift['actions'] = "";
|
||||||
if ($id == $user['UID'])
|
if ($id == $user['UID'])
|
||||||
$myshift['actions'] .= img_button(page_link_to('user_myshifts') . '&edit=' . $shift['id'], 'pencil', _("edit"));
|
$myshift['actions'] .= img_button(page_link_to('user_myshifts') . '&edit=' . $shift['id'], 'pencil', _("edit"));
|
||||||
if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges))
|
if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges))
|
||||||
$myshift['actions'] .= img_button(page_link_to('user_myshifts') . (($id != $user['UID']) ? '&id=' . $id : '') . '&cancel=' . $shift['id'], 'cross', _("sign off"));
|
$myshift['actions'] .= img_button(page_link_to('user_myshifts') . (($id != $user['UID']) ? '&id=' . $id : '') . '&cancel=' . $shift['id'], 'cross', _("sign off"));
|
||||||
|
|
||||||
$timesum += $shift['end'] - $shift['start'];
|
if ($shift['freeloaded'])
|
||||||
|
$timesum += - 2 * ($shift['end'] - $shift['start']);
|
||||||
|
else
|
||||||
|
$timesum += $shift['end'] - $shift['start'];
|
||||||
$myshifts_table[] = $myshift;
|
$myshifts_table[] = $myshift;
|
||||||
}
|
}
|
||||||
if (count($myshifts_table) > 0)
|
if (count($myshifts_table) > 0)
|
||||||
|
|
|
@ -4,9 +4,12 @@ function shifts_title() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function user_shifts() {
|
function user_shifts() {
|
||||||
global $user, $privileges;
|
global $user, $privileges, $max_freeloadable_shifts;
|
||||||
|
|
||||||
// Löschen einzelner Schicht-Einträge (Also Belegung einer Schicht von Engeln) durch Admins
|
if (count(ShiftEntries_freeloaded_by_user($user)) >= $max_freeloadable_shifts)
|
||||||
|
redirect(page_link_to('user_myshifts'));
|
||||||
|
|
||||||
|
// Löschen einzelner Schicht-Einträge (Also Belegung einer Schicht von Engeln) durch Admins
|
||||||
if (isset($_REQUEST['entry_id']) && in_array('user_shifts_admin', $privileges)) {
|
if (isset($_REQUEST['entry_id']) && in_array('user_shifts_admin', $privileges)) {
|
||||||
if (isset($_REQUEST['entry_id']) && test_request_int('entry_id'))
|
if (isset($_REQUEST['entry_id']) && test_request_int('entry_id'))
|
||||||
$entry_id = $_REQUEST['entry_id'];
|
$entry_id = $_REQUEST['entry_id'];
|
||||||
|
@ -23,7 +26,7 @@ function user_shifts() {
|
||||||
} else
|
} else
|
||||||
error(_("Entry not found."));
|
error(_("Entry not found."));
|
||||||
redirect(page_link_to('user_shifts'));
|
redirect(page_link_to('user_shifts'));
|
||||||
} // Schicht bearbeiten
|
} // Schicht bearbeiten
|
||||||
elseif (isset($_REQUEST['edit_shift']) && in_array('admin_shifts', $privileges)) {
|
elseif (isset($_REQUEST['edit_shift']) && in_array('admin_shifts', $privileges)) {
|
||||||
$msg = "";
|
$msg = "";
|
||||||
$ok = true;
|
$ok = true;
|
||||||
|
@ -144,19 +147,19 @@ function user_shifts() {
|
||||||
}
|
}
|
||||||
|
|
||||||
return page(array(
|
return page(array(
|
||||||
msg(),
|
msg(),
|
||||||
'<noscript>' . info(_("This page is much more comfortable with javascript."), true) . '</noscript>',
|
'<noscript>' . info(_("This page is much more comfortable with javascript."), true) . '</noscript>',
|
||||||
form(array(
|
form(array(
|
||||||
form_text('name', _("Name/Description:"), $name),
|
form_text('name', _("Name/Description:"), $name),
|
||||||
form_select('rid', _("Room:"), $room_array, $rid),
|
form_select('rid', _("Room:"), $room_array, $rid),
|
||||||
form_text('start', _("Start:"), date("Y-m-d H:i", $start)),
|
form_text('start', _("Start:"), date("Y-m-d H:i", $start)),
|
||||||
form_text('end', _("End:"), date("Y-m-d H:i", $end)),
|
form_text('end', _("End:"), date("Y-m-d H:i", $end)),
|
||||||
'<h2>' . _("Needed angels") . '</h2>',
|
'<h2>' . _("Needed angels") . '</h2>',
|
||||||
$angel_types,
|
$angel_types,
|
||||||
form_submit('submit', _("Save"))
|
form_submit('submit', _("Save"))
|
||||||
))
|
))
|
||||||
));
|
));
|
||||||
} // Schicht komplett löschen (nur für admins/user mit user_shifts_admin privileg)
|
} // Schicht komplett löschen (nur für admins/user mit user_shifts_admin privileg)
|
||||||
elseif (isset($_REQUEST['delete_shift']) && in_array('user_shifts_admin', $privileges)) {
|
elseif (isset($_REQUEST['delete_shift']) && in_array('user_shifts_admin', $privileges)) {
|
||||||
if (isset($_REQUEST['delete_shift']) && preg_match("/^[0-9]*$/", $_REQUEST['delete_shift']))
|
if (isset($_REQUEST['delete_shift']) && preg_match("/^[0-9]*$/", $_REQUEST['delete_shift']))
|
||||||
$shift_id = $_REQUEST['delete_shift'];
|
$shift_id = $_REQUEST['delete_shift'];
|
||||||
|
@ -180,8 +183,8 @@ function user_shifts() {
|
||||||
}
|
}
|
||||||
|
|
||||||
return page(array(
|
return page(array(
|
||||||
error(sprintf(_("Do you want to delete the shift %s from %s to %s?"), $shift['name'], date("Y-m-d H:i", $shift['start']), date("H:i", $shift['end'])), true),
|
error(sprintf(_("Do you want to delete the shift %s from %s to %s?"), $shift['name'], date("Y-m-d H:i", $shift['start']), date("H:i", $shift['end'])), true),
|
||||||
'<a class="button" href="?p=user_shifts&delete_shift=' . $shift_id . '&delete">' . _("delete") . '</a>'
|
'<a class="button" href="?p=user_shifts&delete_shift=' . $shift_id . '&delete">' . _("delete") . '</a>'
|
||||||
));
|
));
|
||||||
} elseif (isset($_REQUEST['shift_id'])) {
|
} elseif (isset($_REQUEST['shift_id'])) {
|
||||||
if (isset($_REQUEST['shift_id']) && preg_match("/^[0-9]*$/", $_REQUEST['shift_id']))
|
if (isset($_REQUEST['shift_id']) && preg_match("/^[0-9]*$/", $_REQUEST['shift_id']))
|
||||||
|
@ -239,8 +242,21 @@ function user_shifts() {
|
||||||
if (sql_num_query("SELECT * FROM `ShiftEntry` WHERE `SID`='" . sql_escape($shift['SID']) . "' AND `UID` = '" . sql_escape($user_id) . "'"))
|
if (sql_num_query("SELECT * FROM `ShiftEntry` WHERE `SID`='" . sql_escape($shift['SID']) . "' AND `UID` = '" . sql_escape($user_id) . "'"))
|
||||||
return error("This angel does already have an entry for this shift.", true);
|
return error("This angel does already have an entry for this shift.", true);
|
||||||
|
|
||||||
|
$freeloaded = $shift['freeloaded'];
|
||||||
|
$freeload_comment = $shift['freeload_comment'];
|
||||||
|
if (in_array("user_shifts_admin", $privileges)) {
|
||||||
|
$freeloaded = isset($_REQUEST['freeloaded']);
|
||||||
|
$freeload_comment = strip_request_item_nl('freeload_comment');
|
||||||
|
}
|
||||||
|
|
||||||
$comment = strip_request_item_nl('comment');
|
$comment = strip_request_item_nl('comment');
|
||||||
sql_query("INSERT INTO `ShiftEntry` SET `Comment`='" . sql_escape($comment) . "', `UID`=" . sql_escape($user_id) . ", `TID`=" . sql_escape($selected_type_id) . ", `SID`=" . sql_escape($shift_id));
|
sql_query("INSERT INTO `ShiftEntry` SET
|
||||||
|
`Comment`='" . sql_escape($comment) . "',
|
||||||
|
`freeloaded`=" . sql_escape($freeloaded ? 1 : 0) . ",
|
||||||
|
`freeload_comment`='" . sql_escape($freeload_comment) . "',
|
||||||
|
`UID`=" . sql_escape($user_id) . ",
|
||||||
|
`TID`=" . sql_escape($selected_type_id) . ",
|
||||||
|
`SID`=" . sql_escape($shift_id));
|
||||||
if ($type['restricted'] == 0 && sql_num_query("SELECT * FROM `UserAngelTypes` INNER JOIN `AngelTypes` ON `AngelTypes`.`id` = `UserAngelTypes`.`angeltype_id` WHERE `angeltype_id` = '" . sql_escape($selected_type_id) . "' AND `user_id` = '" . sql_escape($user_id) . "' ") == 0)
|
if ($type['restricted'] == 0 && sql_num_query("SELECT * FROM `UserAngelTypes` INNER JOIN `AngelTypes` ON `AngelTypes`.`id` = `UserAngelTypes`.`angeltype_id` WHERE `angeltype_id` = '" . sql_escape($selected_type_id) . "' AND `user_id` = '" . sql_escape($user_id) . "' ") == 0)
|
||||||
sql_query("INSERT INTO `UserAngelTypes` (`user_id`, `angeltype_id`) VALUES ('" . sql_escape($user_id) . "', '" . sql_escape($selected_type_id) . "')");
|
sql_query("INSERT INTO `UserAngelTypes` (`user_id`, `angeltype_id`) VALUES ('" . sql_escape($user_id) . "', '" . sql_escape($selected_type_id) . "')");
|
||||||
|
|
||||||
|
@ -251,10 +267,11 @@ function user_shifts() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array('user_shifts_admin', $privileges)) {
|
if (in_array('user_shifts_admin', $privileges)) {
|
||||||
$users = sql_select("SELECT * FROM `User` ORDER BY `Nick`");
|
$users = sql_select("SELECT *, (SELECT count(*) FROM `ShiftEntry` WHERE `freeloaded`=1 AND `ShiftEntry`.`UID`=`User`.`UID`) AS `freeloaded` FROM `User` ORDER BY `Nick`");
|
||||||
$users_select = array();
|
$users_select = array();
|
||||||
|
|
||||||
foreach ($users as $usr)
|
foreach ($users as $usr)
|
||||||
$users_select[$usr['UID']] = $usr['Nick'];
|
$users_select[$usr['UID']] = $usr['Nick'] . ($usr['freeloaded'] == 0 ? "" : " (" . _("Freeloader") . ")");
|
||||||
$user_text = html_select_key('user_id', 'user_id', $users_select, $user['UID']);
|
$user_text = html_select_key('user_id', 'user_id', $users_select, $user['UID']);
|
||||||
|
|
||||||
$angeltypes_source = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`");
|
$angeltypes_source = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`");
|
||||||
|
@ -267,7 +284,7 @@ function user_shifts() {
|
||||||
$angeltyppe_select = $type['name'];
|
$angeltyppe_select = $type['name'];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ShiftEntry_edit_view(date("Y-m-d H:i", $shift['start']) . ' – ' . date('Y-m-d H:i', $shift['end']) . ' (' . shift_length($shift) . ')', $shift['name'], $shift['Name'], $user_text, $angeltyppe_select, "");
|
return ShiftEntry_edit_view(date("Y-m-d H:i", $shift['start']) . ' – ' . date('Y-m-d H:i', $shift['end']) . ' (' . shift_length($shift) . ')', $shift['name'], $shift['Name'], $user_text, $angeltyppe_select, "", false, null, in_array('user_shifts_admin', $privileges));
|
||||||
} else {
|
} else {
|
||||||
return view_user_shifts();
|
return view_user_shifts();
|
||||||
}
|
}
|
||||||
|
@ -350,17 +367,17 @@ function view_user_shifts() {
|
||||||
if ($_SESSION['user_shifts']['start_day'] == $_SESSION['user_shifts']['end_day'] && $_SESSION['user_shifts']['start_time'] >= $_SESSION['user_shifts']['end_time'])
|
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';
|
$_SESSION['user_shifts']['end_time'] = '23:59';
|
||||||
|
|
||||||
if(isset($_SESSION['user_shifts']['start_day'])) {
|
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 = DateTime::createFromFormat("Y-m-d H:i", $_SESSION['user_shifts']['start_day'] . $_SESSION['user_shifts']['start_time']);
|
||||||
$starttime = $starttime->getTimestamp();
|
$starttime = $starttime->getTimestamp();
|
||||||
} else
|
} else
|
||||||
$starttime = now();
|
$starttime = now();
|
||||||
|
|
||||||
if(isset($_SESSION['user_shifts']['end_day'])) {
|
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 = DateTime::createFromFormat("Y-m-d H:i", $_SESSION['user_shifts']['end_day'] . $_SESSION['user_shifts']['end_time']);
|
||||||
$endtime = $endtime->getTimestamp();
|
$endtime = $endtime->getTimestamp();
|
||||||
} else
|
} else
|
||||||
$endtime = now() + 24*60*60;
|
$endtime = now() + 24 * 60 * 60;
|
||||||
|
|
||||||
if (! isset($_SESSION['user_shifts']['rooms']) || count($_SESSION['user_shifts']['rooms']) == 0)
|
if (! isset($_SESSION['user_shifts']['rooms']) || count($_SESSION['user_shifts']['rooms']) == 0)
|
||||||
$_SESSION['user_shifts']['rooms'] = array(
|
$_SESSION['user_shifts']['rooms'] = array(
|
||||||
|
@ -495,17 +512,22 @@ function view_user_shifts() {
|
||||||
foreach ($angeltypes as $angeltype) {
|
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`");
|
$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_list = array();
|
||||||
|
$freeloader = 0;
|
||||||
foreach ($entries as $entry) {
|
foreach ($entries as $entry) {
|
||||||
if ($entry['Gekommen'] == 1)
|
if ($entry['Gekommen'] == 1)
|
||||||
$style = "font-weight:bold;";
|
$style = "font-weight:bold;";
|
||||||
else
|
else
|
||||||
$style = "font-weight:normal;";
|
$style = "font-weight:normal;";
|
||||||
|
if ($entry['freeloaded']) {
|
||||||
|
$freeloader ++;
|
||||||
|
$style .= " text-decoration: line-through;";
|
||||||
|
}
|
||||||
if (in_array('user_shifts_admin', $privileges))
|
if (in_array('user_shifts_admin', $privileges))
|
||||||
$entry_list[] = "<span style=\"$style\">" . User_Nick_render($entry) . ' ' . img_button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], 'bin', _("delete")) . '</span>';
|
$entry_list[] = "<span style=\"$style\">" . User_Nick_render($entry) . ' ' . img_button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], 'bin', _("delete")) . '</span>';
|
||||||
else
|
else
|
||||||
$entry_list[] = "<span style=\"$style\">" . User_Nick_render($entry) . "</span>";
|
$entry_list[] = "<span style=\"$style\">" . User_Nick_render($entry) . "</span>";
|
||||||
}
|
}
|
||||||
if ($angeltype['count'] - count($entries) > 0) {
|
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));
|
$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?
|
// is the shift still running or alternatively is the user shift admin?
|
||||||
$user_may_join_shift = true;
|
$user_may_join_shift = true;
|
||||||
|
@ -547,7 +569,7 @@ function view_user_shifts() {
|
||||||
$shifts_row .= '<br />';
|
$shifts_row .= '<br />';
|
||||||
}
|
}
|
||||||
if (in_array('user_shifts_admin', $privileges)) {
|
if (in_array('user_shifts_admin', $privileges)) {
|
||||||
$shifts_row .= '<a href="' . page_link_to('user_shifts') . '&shift_id=' . $shift['SID'] . '&type_id=' . $angeltype['id'] . '">' . _("Add more angels") .' »</a>';
|
$shifts_row .= '<a href="' . page_link_to('user_shifts') . '&shift_id=' . $shift['SID'] . '&type_id=' . $angeltype['id'] . '">' . _("Add more angels") . ' »</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($shift['own'] && ! in_array('user_shifts_admin', $privileges))
|
if ($shift['own'] && ! in_array('user_shifts_admin', $privileges))
|
||||||
|
@ -619,19 +641,26 @@ function view_user_shifts() {
|
||||||
$angeltypes = sql_select($query);
|
$angeltypes = sql_select($query);
|
||||||
if (count($angeltypes) > 0) {
|
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;
|
$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) {
|
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`");
|
$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_list = array();
|
||||||
|
$freeloader = 0;
|
||||||
foreach ($entries as $entry) {
|
foreach ($entries as $entry) {
|
||||||
if (in_array('user_shifts_admin', $privileges))
|
if (in_array('user_shifts_admin', $privileges))
|
||||||
$entry_list[] = User_Nick_render($entry) . ' ' . img_button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], 'bin', _("delete"));
|
$member = User_Nick_render($entry) . ' ' . img_button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], 'bin', _("delete"));
|
||||||
else
|
else
|
||||||
$entry_list[] = User_Nick_render($entry);
|
$member = User_Nick_render($entry);
|
||||||
|
if ($entry['freeloaded']) {
|
||||||
|
$member = '<strike>' . $member . '</strike>';
|
||||||
|
$freeloader ++;
|
||||||
|
}
|
||||||
|
$entry_list[] = $member;
|
||||||
}
|
}
|
||||||
$angeltype['taken'] = count($entries);
|
$angeltype['taken'] = count($entries) - $freeloader;
|
||||||
// do we need more angles of this type?
|
// do we need more angles of this type?
|
||||||
if ($angeltype['count'] - count($entries) > 0) {
|
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));
|
$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?
|
// is the shift still running or alternatively is the user shift admin?
|
||||||
$user_may_join_shift = true;
|
$user_may_join_shift = true;
|
||||||
|
|
||||||
|
@ -701,7 +730,7 @@ function view_user_shifts() {
|
||||||
'new_style_checkbox' => '<label><input type="checkbox" name="new_style" value="1" ' . ($_SESSION['user_shifts']['new_style'] ? ' checked' : '') . '> ' . _("Use new style if possible") . '</label>',
|
'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' => $shifts_table,
|
'shifts_table' => $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>',
|
'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")
|
'filter' => _("Filter")
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,15 @@
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function ShiftEntry_edit_view($angel, $date, $location, $title, $type, $comment) {
|
function ShiftEntry_edit_view($angel, $date, $location, $title, $type, $comment, $freeloaded, $freeload_comment, $user_admin_shifts = false) {
|
||||||
|
if ($user_admin_shifts) {
|
||||||
|
$freeload_form = array(
|
||||||
|
form_checkbox('freeloaded', _("Freeloaded"), $freeloaded),
|
||||||
|
form_textarea('freeload_comment', _("Freeload comment (Only for shift coordination):"), $freeload_comment)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$freeload_form = $freeloaded ? "" : "";
|
||||||
|
}
|
||||||
return page(array(
|
return page(array(
|
||||||
form(array(
|
form(array(
|
||||||
form_info(_("Angel:"), $angel),
|
form_info(_("Angel:"), $angel),
|
||||||
|
@ -20,6 +28,7 @@ function ShiftEntry_edit_view($angel, $date, $location, $title, $type, $comment)
|
||||||
form_info(_("Title:"), $title),
|
form_info(_("Title:"), $title),
|
||||||
form_info(_("Type:"), $type),
|
form_info(_("Type:"), $type),
|
||||||
form_textarea('comment', _("Comment (for your eyes only):"), $comment),
|
form_textarea('comment', _("Comment (for your eyes only):"), $comment),
|
||||||
|
join("", $freeload_form),
|
||||||
form_submit('submit', _("Save"))
|
form_submit('submit', _("Save"))
|
||||||
))
|
))
|
||||||
));
|
));
|
||||||
|
|
|
@ -196,6 +196,10 @@ if (isset($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && (i
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($user)) {
|
if (isset($user)) {
|
||||||
|
$freeloaded_shifts_count = count(ShiftEntries_freeloaded_by_user($user));
|
||||||
|
if($freeloaded_shifts_count >= $max_freeloadable_shifts)
|
||||||
|
$content = error(sprintf(_("You freeloaded %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $freeloaded_shifts_count), true) . $content;
|
||||||
|
|
||||||
// Hinweis für ungelesene Nachrichten
|
// Hinweis für ungelesene Nachrichten
|
||||||
if ($p != "user_messages")
|
if ($p != "user_messages")
|
||||||
$content = user_unread_messages() . $content;
|
$content = user_unread_messages() . $content;
|
||||||
|
|
Loading…
Reference in New Issue