diff --git a/db/install.sql b/db/install.sql index 1176d9fc..5c612d54 100644 --- a/db/install.sql +++ b/db/install.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Host: localhost --- Erstellungszeit: 07. Dez 2014 um 20:31 +-- Erstellungszeit: 25. Dez 2014 um 22:28 -- Server Version: 5.6.12 -- PHP-Version: 5.5.3 @@ -11,6 +11,12 @@ SET FOREIGN_KEY_CHECKS=0; SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; +-- +-- Datenbank: `engelsystem` +-- +CREATE DATABASE IF NOT EXISTS `engelsystem` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +USE `engelsystem`; + -- -------------------------------------------------------- -- @@ -47,6 +53,14 @@ CREATE TABLE IF NOT EXISTS `Counter` ( PRIMARY KEY (`URL`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Counter der Seiten'; +-- +-- Daten für Tabelle `Counter` +-- + +INSERT INTO `Counter` (`URL`, `Anz`) VALUES +('login', 2), +('news', 1); + -- -------------------------------------------------------- -- @@ -61,7 +75,7 @@ CREATE TABLE IF NOT EXISTS `GroupPrivileges` ( PRIMARY KEY (`id`), KEY `group_id` (`group_id`,`privilege_id`), KEY `privilege_id` (`privilege_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=257 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=258 ; -- -- Daten für Tabelle `GroupPrivileges` @@ -82,6 +96,7 @@ INSERT INTO `GroupPrivileges` (`id`, `group_id`, `privilege_id`) VALUES (213, -5, 28), (206, -5, 31), (215, -5, 33), +(257, -5, 38), (219, -4, 14), (221, -4, 25), (220, -4, 33), @@ -240,7 +255,7 @@ CREATE TABLE IF NOT EXISTS `Privileges` ( `desc` varchar(1024) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=38 ; +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=39 ; -- -- Daten für Tabelle `Privileges` @@ -282,7 +297,8 @@ INSERT INTO `Privileges` (`id`, `name`, `desc`) VALUES (34, 'atom', ' Atom news export'), (35, 'shifts_json_export', 'Export shifts in JSON format'), (36, 'angeltypes', 'View angeltypes'), -(37, 'user_angeltypes', 'Join angeltypes.'); +(37, 'user_angeltypes', 'Join angeltypes.'), +(38, 'shifttypes', 'Administrate shift types'); -- -------------------------------------------------------- @@ -351,19 +367,37 @@ CREATE TABLE IF NOT EXISTS `ShiftEntry` ( DROP TABLE IF EXISTS `Shifts`; CREATE TABLE IF NOT EXISTS `Shifts` ( `SID` int(11) NOT NULL AUTO_INCREMENT, + `title` text, + `shifttype_id` int(11) NOT NULL, `start` int(11) NOT NULL, `end` int(11) NOT NULL, `RID` int(11) NOT NULL DEFAULT '0', - `name` varchar(1024) DEFAULT NULL, `URL` text, `PSID` int(11) DEFAULT NULL, PRIMARY KEY (`SID`), UNIQUE KEY `PSID` (`PSID`), - KEY `RID` (`RID`) + KEY `RID` (`RID`), + KEY `shifttype_id` (`shifttype_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=191 ; -- -------------------------------------------------------- +-- +-- Tabellenstruktur für Tabelle `ShiftTypes` +-- + +DROP TABLE IF EXISTS `ShiftTypes`; +CREATE TABLE IF NOT EXISTS `ShiftTypes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `angeltype_id` int(11) DEFAULT NULL, + `description` text NOT NULL, + PRIMARY KEY (`id`), + KEY `angeltype_id` (`angeltype_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + -- -- Tabellenstruktur für Tabelle `User` -- @@ -410,7 +444,7 @@ CREATE TABLE IF NOT EXISTS `User` ( -- INSERT INTO `User` (`UID`, `Nick`, `Name`, `Vorname`, `Alter`, `Telefon`, `DECT`, `Handy`, `email`, `email_shiftinfo`, `jabber`, `Size`, `Passwort`, `password_recovery_token`, `Gekommen`, `Aktiv`, `force_active`, `Tshirt`, `color`, `Sprache`, `Avatar`, `Menu`, `lastLogIn`, `CreateDate`, `Art`, `kommentar`, `Hometown`, `api_key`) VALUES -(1, 'admin', 'Gates', 'Bill', 42, '', '-', '', 'admin@example.com', 0, '', 'XL', '$6$rounds=5000$hjXbIhoRTH3vKiRa$Wl2P2iI5T9iRR.HHu/YFHswBW0WVn0yxCfCiX0Keco9OdIoDK6bIAADswP6KvMCJSwTGdV8PgA8g8Xfw5l8BD1', NULL, 1, 0, 1, 0, 2, 'de_DE.UTF-8', 115, 'L', 1417980341, '0000-00-00 00:00:00', '', '', '', '038850abdd1feb264406be3ffa746235'); +(1, 'admin', 'Gates', 'Bill', 42, '', '-', '', 'admin@example.com', 0, '', 'XL', '$6$rounds=5000$hjXbIhoRTH3vKiRa$Wl2P2iI5T9iRR.HHu/YFHswBW0WVn0yxCfCiX0Keco9OdIoDK6bIAADswP6KvMCJSwTGdV8PgA8g8Xfw5l8BD1', NULL, 1, 0, 1, 0, 2, 'de_DE.UTF-8', 115, 'L', 1419542882, '0000-00-00 00:00:00', '', '', '', '038850abdd1feb264406be3ffa746235'); -- -------------------------------------------------------- @@ -524,7 +558,14 @@ ALTER TABLE `ShiftEntry` -- Constraints der Tabelle `Shifts` -- ALTER TABLE `Shifts` - ADD CONSTRAINT `shifts_ibfk_1` FOREIGN KEY (`RID`) REFERENCES `Room` (`RID`) ON DELETE CASCADE ON UPDATE CASCADE; + ADD CONSTRAINT `shifts_ibfk_1` FOREIGN KEY (`RID`) REFERENCES `Room` (`RID`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `shifts_ibfk_2` FOREIGN KEY (`shifttype_id`) REFERENCES `ShiftTypes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- +-- Constraints der Tabelle `ShiftTypes` +-- +ALTER TABLE `ShiftTypes` + ADD CONSTRAINT `shifttypes_ibfk_1` FOREIGN KEY (`angeltype_id`) REFERENCES `AngelTypes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- -- Constraints der Tabelle `UserAngelTypes` diff --git a/db/update.sql b/db/update.sql index 7caf7223..681d2a7c 100644 --- a/db/update.sql +++ b/db/update.sql @@ -1,3 +1,24 @@ +/* introduce shift types */ +CREATE TABLE IF NOT EXISTS `ShiftTypes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `angeltype_id` int(11) DEFAULT NULL, + `description` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; +ALTER TABLE `ShiftTypes` ADD INDEX ( `angeltype_id` ); +ALTER TABLE `ShiftTypes` ADD FOREIGN KEY ( `angeltype_id` ) REFERENCES `engelsystem`.`AngelTypes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; +INSERT INTO `engelsystem`.`Privileges` (`id`, `name`, `desc`) VALUES (NULL , 'shifttypes', 'Administrate shift types'); +INSERT INTO `GroupPrivileges` SET `group_id`=-5, `privilege_id`=(SELECT `id` FROM `Privileges` WHERE `name`='shifttypes'); + +ALTER TABLE `Shifts` ADD `shifttype_id` INT NOT NULL AFTER `SID`, ADD INDEX ( `shifttype_id` ); +UPDATE `Shifts` SET `name`='' WHERE `name` IS NULL; +INSERT INTO `ShiftTypes` SELECT DISTINCT NULL , `name` , NULL , '' FROM `Shifts`; +UPDATE `Shifts` SET `shifttype_id`=(SELECT `id` FROM `ShiftTypes` WHERE `ShiftTypes`.`name`=`Shifts`.`name`); +ALTER TABLE `Shifts` ADD `title` TEXT NULL AFTER `SID`; +ALTER TABLE `Shifts` ADD FOREIGN KEY ( `shifttype_id` ) REFERENCES `engelsystem`.`ShiftTypes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `Shifts` DROP `name`; + /* cleanup */ ALTER TABLE `User` DROP `ICQ` ; diff --git a/includes/controller/rooms_controller.php b/includes/controller/rooms_controller.php new file mode 100644 index 00000000..5d55e1b7 --- /dev/null +++ b/includes/controller/rooms_controller.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/includes/controller/shifts_controller.php b/includes/controller/shifts_controller.php index 868e903b..90753217 100644 --- a/includes/controller/shifts_controller.php +++ b/includes/controller/shifts_controller.php @@ -1,5 +1,96 @@ 0) + redirect(shift_link($upcoming_shifts[0])); + + redirect(page_link_to('user_shifts')); +} + /** * Export all shifts using api-key. */ @@ -48,7 +139,14 @@ function shifts_json_export_controller() { require_once realpath(__DIR__ . '/../pages/user_shifts.php'); view_user_shifts(); } else { - $ical_shifts = sql_select("SELECT `Shifts`.*, `Room`.`Name` as `room_name` FROM `ShiftEntry` INNER JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) INNER JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `UID`=" . sql_escape($user['UID']) . " ORDER BY `start`"); + $ical_shifts = sql_select(" + SELECT `ShiftTypes`.`name`, `Shifts`.*, `Room`.`Name` as `room_name` + FROM `ShiftEntry` + INNER JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) + INNER JOIN `ShiftTypes` ON (`Shifts`.`shifttype_id`=`ShiftTypes`.`id`) + INNER JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) + WHERE `UID`=" . sql_escape($user['UID']) . " + ORDER BY `start`"); } header("Content-Type: application/json; charset=utf-8"); diff --git a/includes/controller/shifttypes_controller.php b/includes/controller/shifttypes_controller.php new file mode 100644 index 00000000..443ce470 --- /dev/null +++ b/includes/controller/shifttypes_controller.php @@ -0,0 +1,167 @@ + \ No newline at end of file diff --git a/includes/controller/users_controller.php b/includes/controller/users_controller.php index 2bccc609..3a23835c 100644 --- a/includes/controller/users_controller.php +++ b/includes/controller/users_controller.php @@ -5,13 +5,13 @@ */ function users_controller() { global $privileges, $user; - + if (! isset($user)) redirect(page_link_to('')); - + if (! isset($_REQUEST['action'])) $_REQUEST['action'] = 'list'; - + switch ($_REQUEST['action']) { default: case 'list': @@ -27,16 +27,17 @@ function users_controller() { function user_controller() { global $privileges, $user; - + if (isset($_REQUEST['user_id'])) { $user_source = User($_REQUEST['user_id']); } else $user_source = $user; - + $admin_user_privilege = in_array('admin_user', $privileges); - + $shifts = Shifts_by_user($user_source); foreach ($shifts as &$shift) { + // TODO: Move queries to model $shift['needed_angeltypes'] = sql_select("SELECT DISTINCT `AngelTypes`.* FROM `ShiftEntry` JOIN `AngelTypes` ON `ShiftEntry`.`TID`=`AngelTypes`.`id` WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . " ORDER BY `AngelTypes`.`name`"); foreach ($shift['needed_angeltypes'] as &$needed_angeltype) { $needed_angeltype['users'] = sql_select(" @@ -47,13 +48,13 @@ function user_controller() { AND `ShiftEntry`.`TID`=" . sql_escape($needed_angeltype['id'])); } } - + if ($user_source['api_key'] == "") User_reset_api_key($user_source, false); - + return array( $user_source['Nick'], - User_view($user_source, $admin_user_privilege, User_is_freeloader($user_source), User_angeltypes($user_source), User_groups($user_source), $shifts, $user['UID'] == $user_source['UID']) + User_view($user_source, $admin_user_privilege, User_is_freeloader($user_source), User_angeltypes($user_source), User_groups($user_source), $shifts, $user['UID'] == $user_source['UID']) ); } @@ -62,24 +63,24 @@ function user_controller() { */ function users_list_controller() { global $privileges; - + if (! in_array('admin_user', $privileges)) redirect(page_link_to('')); - + $order_by = 'Nick'; if (isset($_REQUEST['OrderBy']) && in_array($_REQUEST['OrderBy'], User_sortable_columns())) $order_by = $_REQUEST['OrderBy']; - + $users = Users($order_by); if ($users === false) engelsystem_error('Unable to load users.'); - + foreach ($users as &$user) $user['freeloads'] = count(ShiftEntries_freeloaded_by_user($user)); - + return array( _('All users'), - Users_view($users, $order_by, User_arrived_count(), User_active_count(), User_force_active_count(), ShiftEntries_freeleaded_count(), User_tshirts_count()) + Users_view($users, $order_by, User_arrived_count(), User_active_count(), User_force_active_count(), ShiftEntries_freeleaded_count(), User_tshirts_count()) ); } @@ -96,10 +97,10 @@ function user_password_recovery_controller() { error(_("Token is not correct.")); redirect(page_link_to('login')); } - + if (isset($_REQUEST['submit'])) { $ok = true; - + if (isset($_REQUEST['password']) && strlen($_REQUEST['password']) >= MIN_PASSWORD_LENGTH) { if ($_REQUEST['password'] != $_REQUEST['password2']) { $ok = false; @@ -109,22 +110,22 @@ function user_password_recovery_controller() { $ok = false; error(_("Your password is to short (please use at least 6 characters).")); } - + if ($ok) { $result = set_password($user_source['UID'], $_REQUEST['password']); if ($result === false) engelsystem_error(_("Password could not be updated.")); - + success(_("Password saved.")); redirect(page_link_to('login')); } } - + return User_password_set_view(); } else { if (isset($_REQUEST['submit'])) { $ok = true; - + if (isset($_REQUEST['email']) && strlen(strip_request_item('email')) > 0) { $email = strip_request_item('email'); if (check_email($email)) { @@ -143,7 +144,7 @@ function user_password_recovery_controller() { $ok = false; error(_("Please enter your e-mail.")); } - + if ($ok) { $token = User_generate_password_recovery_token($user_source); if ($token === false) @@ -151,12 +152,12 @@ function user_password_recovery_controller() { $result = engelsystem_email_to_user($user_source, _("Password recovery"), sprintf(_("Please visit %s to recover your password."), page_link_to_absolute('user_password_recovery') . '&token=' . $token)); if ($result === false) engelsystem_error("Unable to send password recovery email."); - + success(_("We sent an email containing your password recovery link.")); redirect(page_link_to('login')); } } - + return User_password_recovery_view(); } } diff --git a/includes/mailer/shifts_mailer.php b/includes/mailer/shifts_mailer.php index 16b0db65..fb234aab 100644 --- a/includes/mailer/shifts_mailer.php +++ b/includes/mailer/shifts_mailer.php @@ -11,7 +11,12 @@ function mail_shift_change($old_shift, $new_shift) { $message .= "\n"; if ($old_shift["name"] != $new_shift["name"]) { - $message .= sprintf(_("* Shift Name changed from %s to %s"), $old_shift["name"], $new_shift["name"]) . "\n"; + $message .= sprintf(_("* Shift type changed from %s to %s"), $old_shift["name"], $new_shift["name"]) . "\n"; + $noticable_changes = true; + } + + if ($old_shift["title"] != $new_shift["title"]) { + $message .= sprintf(_("* Shift title changed from %s to %s"), $old_shift["title"], $new_shift["title"]) . "\n"; $noticable_changes = true; } @@ -39,6 +44,7 @@ function mail_shift_change($old_shift, $new_shift) { $message .= _("The updated Shift:") . "\n"; $message .= $new_shift["name"] . "\n"; + $message .= $new_shift["title"] . "\n"; $message .= date("y-m-d H:i", $new_shift["start"]) . " - " . date("H:i", $new_shift["end"]) . "\n"; $message .= $new_room["Name"] . "\n"; @@ -54,6 +60,7 @@ function mail_shift_delete($shift) { $message = _("A Shift you are registered on was deleted:") . "\n"; $message .= $shift["name"] . "\n"; + $message .= $new_shift["title"] . "\n"; $message .= date("y-m-d H:i", $shift["start"]) . " - " . date("H:i", $shift["end"]) . "\n"; $message .= $room["Name"] . "\n"; @@ -68,6 +75,7 @@ function mail_shift_assign($user, $shift) { $message = _("You have been assigned to a Shift:") . "\n"; $message .= $shift["name"] . "\n"; + $message .= $shift["title"] . "\n"; $message .= date("y-m-d H:i", $shift["start"]) . " - " . date("H:i", $shift["end"]) . "\n"; $message .= $room["Name"] . "\n"; @@ -81,6 +89,7 @@ function mail_shift_removed($user, $shift) { $message = _("You have been removed from a Shift:") . "\n"; $message .= $shift["name"] . "\n"; + $message .= $shift["title"] . "\n"; $message .= date("y-m-d H:i", $shift["start"]) . " - " . date("H:i", $shift["end"]) . "\n"; $message .= $room["Name"] . "\n"; diff --git a/includes/model/ShiftEntry_model.php b/includes/model/ShiftEntry_model.php index e1f0cd2e..5129f15a 100644 --- a/includes/model/ShiftEntry_model.php +++ b/includes/model/ShiftEntry_model.php @@ -76,7 +76,8 @@ function ShiftEntries_upcoming_for_user($user) { return sql_select(" SELECT * FROM `ShiftEntry` - JOIN `Shifts` ON `Shifts`.`SID`=`ShiftEntry`.`SID` + JOIN `Shifts` ON (`Shifts`.`SID` = `ShiftEntry`.`SID`) + JOIN `ShiftTypes` ON `ShiftTypes`.`id` = `Shifts`.`shifttype_id` WHERE `ShiftEntry`.`UID`=" . sql_escape($user['UID']) . " AND `Shifts`.`end` > " . sql_escape(time()) . " ORDER BY `Shifts`.`end` diff --git a/includes/model/ShiftTypes_model.php b/includes/model/ShiftTypes_model.php new file mode 100644 index 00000000..7b502585 --- /dev/null +++ b/includes/model/ShiftTypes_model.php @@ -0,0 +1,66 @@ + \ No newline at end of file diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php index 8530a0c8..37c772bf 100644 --- a/includes/model/Shifts_model.php +++ b/includes/model/Shifts_model.php @@ -1,5 +1,74 @@ $shifts + */ +function Shift_collides($shift, $shifts) { + foreach ($shifts as $other_shift) + if ($shift['SID'] != $other_shift['SID']) + if (! ($shift['start'] >= $other_shift['end'] || $shift['end'] <= $other_shift['start'])) + return true; + return false; +} + +/** + * Check if an angel can sign up for given shift. + * + * @param Shift $shift + * @param AngelType $angeltype + * @param array $user_shifts + */ +function Shift_signup_allowed($shift, $angeltype, $user_angeltype = null, $user_shifts = null) { + global $user, $privileges; + + if ($user_shifts == null) { + $user_shifts = Shifts_by_user($user); + if ($user_shifts === false) + engelsystem_error('Unable to load users shifts.'); + } + + $collides = Shift_collides($shift, $user_shifts); + + if ($user_angeltype == null) { + $user_angeltype = UserAngelType_by_User_and_AngelType($user, $angeltype); + if ($user_angeltype === false) + engelsystem_error('Unable to load user angeltype.'); + } + + $signed_up = false; + foreach ($user_shifts as $user_shift) + if ($user_shift['SID'] == $shift['SID']) { + $signed_up = true; + break; + } + + // 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 you already singed up for this shift + $user_may_join_shift &= ! $signed_up; + + // you cannot join if user is not of this angel type + $user_may_join_shift &= $user_angeltype != null; + + // you cannot join if you are not confirmed + if ($angeltype['restricted'] == 1 && $user_angeltype != null) + $user_may_join_shift &= isset($user_angeltype['confirm_user_id']); + + // you can only join if the shift is in future + $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); + + return $user_may_join_shift; +} + /** * Delete a shift by its external id. */ @@ -12,7 +81,7 @@ function Shift_delete_by_psid($shift_psid) { */ function Shift_delete($shift_id) { mail_shift_delete(Shift($shift_id)); - + return sql_query("DELETE FROM `Shifts` WHERE `SID`=" . sql_escape($shift_id)); } @@ -20,14 +89,15 @@ function Shift_delete($shift_id) { * Update a shift. */ function Shift_update($shift) { - $old_shift = Shift($shift['SID']); + $shift['name'] = ShiftType($shift['shifttype_id'])['name']; mail_shift_change(Shift($shift['SID']), $shift); - + return sql_query("UPDATE `Shifts` SET + `shifttype_id`=" . sql_escape($shift['shifttype_id']) . ", `start`=" . sql_escape($shift['start']) . ", `end`=" . sql_escape($shift['end']) . ", `RID`=" . sql_escape($shift['RID']) . ", - `name`=" . sql_null($shift['name']) . ", + `title`=" . sql_null($shift['title']) . ", `URL`=" . sql_null($shift['URL']) . ", `PSID`=" . sql_null($shift['PSID']) . " WHERE `SID`=" . sql_escape($shift['SID'])); @@ -42,7 +112,7 @@ function Shift_update_by_psid($shift) { return false; if (count($shift_source) == 0) return null; - $shift['SID'] = $shift_source['SID']; + $shift['SID'] = $shift_source[0]['SID']; return Shift_update($shift); } @@ -53,10 +123,11 @@ function Shift_update_by_psid($shift) { */ function Shift_create($shift) { $result = sql_query("INSERT INTO `Shifts` SET + `shifttype_id`=" . sql_escape($shift['shifttype_id']) . ", `start`=" . sql_escape($shift['start']) . ", `end`=" . sql_escape($shift['end']) . ", `RID`=" . sql_escape($shift['RID']) . ", - `name`=" . sql_null($shift['name']) . ", + `title`=" . sql_null($shift['title']) . ", `URL`=" . sql_null($shift['URL']) . ", `PSID`=" . sql_null($shift['PSID'])); if ($result === false) @@ -69,9 +140,10 @@ function Shift_create($shift) { */ function Shifts_by_user($user) { return sql_select(" - SELECT * + SELECT `ShiftTypes`.`id` as `shifttype_id`, `ShiftTypes`.`name`, `ShiftEntry`.*, `Shifts`.*, `Room`.* FROM `ShiftEntry` JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) + JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `UID`=" . sql_escape($user['UID']) . " ORDER BY `start` @@ -130,8 +202,12 @@ function Shifts_filtered() { * ID */ function Shift($id) { - $shifts_source = sql_select("SELECT * FROM `Shifts` WHERE `SID`=" . sql_escape($id) . " LIMIT 1"); - $shiftsEntry_source = sql_select("SELECT `TID` , `UID` , `freeloaded` FROM `ShiftEntry` WHERE `SID`=" . sql_escape($id)); + $shifts_source = sql_select(" + SELECT `Shifts`.*, `ShiftTypes`.`name` + FROM `Shifts` + JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) + WHERE `SID`=" . sql_escape($id)); + $shiftsEntry_source = sql_select("SELECT `id`, `TID` , `UID` , `freeloaded` FROM `ShiftEntry` WHERE `SID`=" . sql_escape($id)); if ($shifts_source === false) return false; @@ -139,6 +215,7 @@ function Shift($id) { $result = $shifts_source[0]; $result['ShiftEntry'] = $shiftsEntry_source; + $result['NeedAngels'] = []; $temp = NeededAngelTypes_by_shift($id); foreach ($temp as $e) { @@ -160,8 +237,9 @@ function Shift($id) { */ function Shifts() { $shifts_source = sql_select(" - SELECT `Shifts`.*, `Room`.`RID`, `Room`.`Name` as `room_name` + SELECT `ShiftTypes`.`name`, `Shifts`.*, `Room`.`RID`, `Room`.`Name` as `room_name` FROM `Shifts` + JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) JOIN `Room` ON `Room`.`RID` = `Shifts`.`RID` "); if ($shifts_source === false) diff --git a/includes/pages/admin_active.php b/includes/pages/admin_active.php index 58c36f5d..08c436fc 100644 --- a/includes/pages/admin_active.php +++ b/includes/pages/admin_active.php @@ -32,7 +32,14 @@ function admin_active() { $limit = " LIMIT " . $count; if (isset($_REQUEST['ack'])) { sql_query("UPDATE `User` SET `Aktiv` = 0 WHERE `Tshirt` = 0"); - $users = sql_select("SELECT `User`.*, COUNT(`ShiftEntry`.`id`) as `shift_count`, ${shift_sum_formula} as `shift_length` FROM `User` LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` LEFT JOIN `Shifts` ON `ShiftEntry`.`SID` = `Shifts`.`SID` WHERE `User`.`Gekommen` = 1 AND `User`.`force_active`=0 GROUP BY `User`.`UID` ORDER BY `force_active` DESC, `shift_length` DESC" . $limit); + $users = sql_select(" + SELECT `User`.*, COUNT(`ShiftEntry`.`id`) as `shift_count`, ${shift_sum_formula} as `shift_length` + FROM `User` + LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` + LEFT JOIN `Shifts` ON `ShiftEntry`.`SID` = `Shifts`.`SID` + WHERE `User`.`Gekommen` = 1 AND `User`.`force_active`=0 + GROUP BY `User`.`UID` + ORDER BY `force_active` DESC, `shift_length` DESC" . $limit); $user_nicks = array(); foreach ($users as $usr) { sql_query("UPDATE `User` SET `Aktiv` = 1 WHERE `UID`=" . sql_escape($usr['UID'])); @@ -85,7 +92,13 @@ function admin_active() { $msg = error(_("Angel not found."), true); } - $users = sql_select("SELECT `User`.*, COUNT(`ShiftEntry`.`id`) as `shift_count`, ${shift_sum_formula} as `shift_length` FROM `User` LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` LEFT JOIN `Shifts` ON `ShiftEntry`.`SID` = `Shifts`.`SID` WHERE `User`.`Gekommen` = 1 GROUP BY `User`.`UID` ORDER BY `force_active` DESC, `shift_length` DESC" . $limit); + $users = sql_select(" + SELECT `User`.*, COUNT(`ShiftEntry`.`id`) as `shift_count`, ${shift_sum_formula} as `shift_length` + FROM `User` LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` + LEFT JOIN `Shifts` ON `ShiftEntry`.`SID` = `Shifts`.`SID` + WHERE `User`.`Gekommen` = 1 + GROUP BY `User`.`UID` + ORDER BY `force_active` DESC, `shift_length` DESC" . $limit); $matched_users = array(); if ($search == "") diff --git a/includes/pages/admin_free.php b/includes/pages/admin_free.php index 13d4f795..b56da4d1 100644 --- a/includes/pages/admin_free.php +++ b/includes/pages/admin_free.php @@ -27,7 +27,15 @@ function admin_free() { foreach ($angel_types_source as $angel_type) $angel_types[$angel_type['id']] = $angel_type['name']; - $users = sql_select("SELECT `User`.* FROM `User` ${angeltypesearch} LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` LEFT JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID` AND `Shifts`.`start` < " . sql_escape(time()) . " AND `Shifts`.`end` > " . sql_escape(time()) . ") WHERE `User`.`Gekommen` = 1 AND `Shifts`.`SID` IS NULL GROUP BY `User`.`UID` ORDER BY `Nick`"); + $users = sql_select(" + SELECT `User`.* + FROM `User` + ${angeltypesearch} + LEFT JOIN `ShiftEntry` ON `User`.`UID` = `ShiftEntry`.`UID` + LEFT JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID` AND `Shifts`.`start` < " . sql_escape(time()) . " AND `Shifts`.`end` > " . sql_escape(time()) . ") + WHERE `User`.`Gekommen` = 1 AND `Shifts`.`SID` IS NULL + GROUP BY `User`.`UID` + ORDER BY `Nick`"); $free_users_table = array(); if ($search == "") diff --git a/includes/pages/admin_import.php b/includes/pages/admin_import.php index 120ab91b..786ea08b 100644 --- a/includes/pages/admin_import.php +++ b/includes/pages/admin_import.php @@ -10,104 +10,156 @@ function admin_import() { $html = ""; $step = "input"; - if (isset($_REQUEST['step'])) + if (isset($_REQUEST['step']) && in_array($step, [ + 'input', + 'check', + 'import' + ])) $step = $_REQUEST['step']; - $html .= '

'; - $html .= $step == "input" ? '1. Input' : '1. Input'; - $html .= ' » '; - $html .= $step == "check" ? '2. Validate' : '2. Validate'; - $html .= ' » '; - $html .= $step == "import" ? '3. Import' : '3. Import'; - $html .= '

'; + if ($test_handle = fopen('../import/tmp', 'w')) { + fclose($test_handle); + unlink('../import/tmp'); + } else { + error(_('Webserver has no write-permission on import directory.')); + } $import_file = '../import/import_' . $user['UID'] . '.xml'; + $shifttype_id = null; + + $shifttypes_source = ShiftTypes(); + if ($shifttypes_source === false) + engelsystem_error('Unable to load shifttypes.'); + $shifttypes = []; + foreach ($shifttypes_source as $shifttype) + $shifttypes[$shifttype['id']] = $shifttype['name']; switch ($step) { - case "input": + case 'input': $ok = false; - if ($test_handle = fopen('../import/tmp', 'w')) { - fclose($test_handle); - unlink('../import/tmp'); - } else { - error("Webserver has no write-permission on import directory."); - } if (isset($_REQUEST['submit'])) { $ok = true; + + if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) + $shifttype_id = $_REQUEST['shifttype_id']; + else { + $ok = false; + error(_('Please select a shift type.')); + } + if (isset($_FILES['xcal_file']) && ($_FILES['xcal_file']['error'] == 0)) { if (move_uploaded_file($_FILES['xcal_file']['tmp_name'], $import_file)) { libxml_use_internal_errors(true); if (simplexml_load_file($import_file) === false) { $ok = false; - error("No valid xml/xcal file provided."); + error(_('No valid xml/xcal file provided.')); unlink($import_file); } } else { $ok = false; - error("File upload went wrong."); + error(_('File upload went wrong.')); } } else { $ok = false; - error("Please provide some data."); + error(_('Please provide some data.')); } } - if ($ok) - redirect(page_link_to('admin_import') . "&step=check"); - else { - $html .= form(array( - form_info('', _("This import will create/update/delete rooms and shifts by given FRAB-export file. The needed file format is xcal.")), - form_file('xcal_file', _("xcal-File (.xcal)")), - form_submit('submit', _("Import")) - )); + if ($ok) { + redirect(page_link_to('admin_import') . "&step=check&shifttype_id=" . $shifttype_id); + } else { + $html .= div('well well-sm text-center', [ + _('File Upload') . mute(glyph('arrow-right')) . mute(_('Validation')) . mute(glyph('arrow-right')) . mute(_('Import')) + ]) . div('row', [ + div('col-md-offset-3 col-md-6', [ + form(array( + form_info('', _("This import will create/update/delete rooms and shifts by given FRAB-export file. The needed file format is xcal.")), + form_select('shifttype_id', _('Shifttype'), $shifttypes, $shifttype_id), + form_file('xcal_file', _("xcal-File (.xcal)")), + form_submit('submit', _("Import")) + )) + ]) + ]); } break; - case "check": - if (! file_exists($import_file)) + case 'check': + if (! file_exists($import_file)) { + error(_('Missing import file.')); redirect(page_link_to('admin_import')); + } + + if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) + $shifttype_id = $_REQUEST['shifttype_id']; + else { + error(_('Please select a shift type.')); + redirect(page_link_to('admin_import')); + } list($rooms_new, $rooms_deleted) = prepare_rooms($import_file); - list($events_new, $events_updated, $events_deleted) = prepare_events($import_file); + list($events_new, $events_updated, $events_deleted) = prepare_events($import_file, $shifttype_id); - $html .= form(array( - '

' . _("Rooms to create") . '

', - table(_("Name"), $rooms_new), - '

' . _("Rooms to delete") . '

', - table(_("Name"), $rooms_deleted), + $html .= div('well well-sm text-center', [ + '' . _('File Upload') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . _('Validation') . mute(glyph('arrow-right')) . mute(_('Import')) + ]) . form([ + div('row', [ + div('col-sm-6', [ + '

' . _("Rooms to create") . '

', + table(_("Name"), $rooms_new) + ]), + div('col-sm-6', [ + '

' . _("Rooms to delete") . '

', + table(_("Name"), $rooms_deleted) + ]) + ]), '

' . _("Shifts to create") . '

', table(array( 'day' => _("Day"), 'start' => _("Start"), 'end' => _("End"), - 'name' => _("Name"), + 'shifttype' => _('Shift type'), + 'title' => _("Title"), 'room' => _("Room") - ), shifts_printable($events_new)), + ), shifts_printable($events_new, $shifttypes)), '

' . _("Shifts to update") . '

', table(array( 'day' => _("Day"), 'start' => _("Start"), 'end' => _("End"), - 'name' => _("Name"), + 'shifttype' => _('Shift type'), + 'title' => _("Title"), 'room' => _("Room") - ), shifts_printable($events_updated)), + ), shifts_printable($events_updated, $shifttypes)), '

' . _("Shifts to delete") . '

', table(array( 'day' => _("Day"), 'start' => _("Start"), 'end' => _("End"), - 'name' => _("Name"), + 'shifttype' => _('Shift type'), + 'title' => _("Title"), 'room' => _("Room") - ), shifts_printable($events_deleted)), + ), shifts_printable($events_deleted, $shifttypes)), form_submit('submit', _("Import")) - ), page_link_to('admin_import') . '&step=import'); + ], page_link_to('admin_import') . '&step=import&shifttype_id=' . $shifttype_id); break; - case "import": + case 'import': + if (! file_exists($import_file)) { + error(_('Missing import file.')); + redirect(page_link_to('admin_import')); + } + if (! file_exists($import_file)) redirect(page_link_to('admin_import')); + if (isset($_REQUEST['shifttype_id']) && isset($shifttypes[$_REQUEST['shifttype_id']])) + $shifttype_id = $_REQUEST['shifttype_id']; + else { + error(_('Please select a shift type.')); + redirect(page_link_to('admin_import')); + } + list($rooms_new, $rooms_deleted) = prepare_rooms($import_file); foreach ($rooms_new as $room) { sql_query("INSERT INTO `Room` SET `Name`='" . sql_escape($room) . "', `FromPentabarf`='Y', `Show`='Y'"); @@ -116,7 +168,7 @@ function admin_import() { foreach ($rooms_deleted as $room) sql_query("DELETE FROM `Room` WHERE `Name`='" . sql_escape($room) . "' LIMIT 1"); - list($events_new, $events_updated, $events_deleted) = prepare_events($import_file); + list($events_new, $events_updated, $events_deleted) = prepare_events($import_file, $shifttype_id); foreach ($events_new as $event) { $result = Shift_create($event); if ($result === false) @@ -139,13 +191,18 @@ function admin_import() { unlink($import_file); - $html .= success(_("It's done!"), true); + $html .= div('well well-sm text-center', [ + '' . _('File Upload') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . '' . _('Validation') . glyph('ok-circle') . '' . mute(glyph('arrow-right')) . '' . _('Import') . glyph('ok-circle') . '' + ]) . success(_("It's done!"), true); break; default: redirect(page_link_to('admin_import')); } - return $html; + return page_with_title(admin_import_title(), [ + msg(), + $html + ]); } function prepare_rooms($file) { @@ -179,7 +236,7 @@ function prepare_rooms($file) { ); } -function prepare_events($file) { +function prepare_events($file, $shifttype_id) { global $rooms_import; $data = read_xml($file); @@ -195,10 +252,11 @@ function prepare_events($file) { $event_id = trim($event_pb->{ 'event-id' }); $shifts_pb[$event_id] = array( + 'shifttype_id' => $shifttype_id, 'start' => DateTime::createFromFormat("Ymd\THis", $event->dtstart)->getTimestamp(), 'end' => DateTime::createFromFormat("Ymd\THis", $event->dtend)->getTimestamp(), 'RID' => $rooms_import[trim($event->location)], - 'name' => trim($event->summary), + 'title' => trim($event->summary), 'URL' => trim($event->url), 'PSID' => $event_id ); @@ -209,14 +267,14 @@ function prepare_events($file) { foreach ($shifts as $shift) $shifts_db[$shift['PSID']] = $shift; - $shifts_new = array(); - $shifts_updated = array(); + $shifts_new = []; + $shifts_updated = []; foreach ($shifts_pb as $shift) if (! isset($shifts_db[$shift['PSID']])) $shifts_new[] = $shift; else { $tmp = $shifts_db[$shift['PSID']]; - if ($shift['name'] != $tmp['name'] || $shift['start'] != $tmp['start'] || $shift['end'] != $tmp['end'] || $shift['RID'] != $tmp['RID'] || $shift['URL'] != $tmp['URL']) + if ($shift['shifttype_id'] != $tmp['shifttype_id'] || $shift['title'] != $tmp['title'] || $shift['start'] != $tmp['start'] || $shift['end'] != $tmp['end'] || $shift['RID'] != $tmp['RID'] || $shift['URL'] != $tmp['URL']) $shifts_updated[] = $shift; } @@ -239,7 +297,7 @@ function read_xml($file) { return $xml_import; } -function shifts_printable($shifts) { +function shifts_printable($shifts, $shifttypes) { global $rooms_import; $rooms = array_flip($rooms_import); @@ -250,7 +308,11 @@ function shifts_printable($shifts) { $shifts_printable[] = array( 'day' => date("l, Y-m-d", $shift['start']), 'start' => date("H:i", $shift['start']), - 'name' => shorten($shift['name']), + 'shifttype' => ShiftType_name_render([ + 'id' => $shift['shifttype_id'], + 'name' => $shifttypes[$shift['shifttype_id']] + ]), + 'title' => shorten($shift['title']), 'end' => date("H:i", $shift['end']), 'room' => $rooms[$shift['RID']] ); diff --git a/includes/pages/admin_log.php b/includes/pages/admin_log.php index 70b74d17..70da62fd 100644 --- a/includes/pages/admin_log.php +++ b/includes/pages/admin_log.php @@ -22,8 +22,8 @@ function admin_log() { return page_with_title(admin_log_title(), array( msg(), form(array( - form_text('keyword', _("Suche"), $filter), - form_submit(_("Suche"), "Go") + form_text('keyword', _("Search"), $filter), + form_submit(_("Search"), "Go") )), table(array( 'date' => "Time", diff --git a/includes/pages/admin_shifts.php b/includes/pages/admin_shifts.php index 69166380..733144b3 100644 --- a/includes/pages/admin_shifts.php +++ b/includes/pages/admin_shifts.php @@ -6,9 +6,8 @@ function admin_shifts_title() { // Assistent zum Anlegen mehrerer neuer Schichten function admin_shifts() { - $msg = ""; $ok = true; - + $rid = 0; $start = DateTime::createFromFormat("Y-m-d H:i", date("Y-m-d") . " 00:00")->getTimestamp(); $end = $start + 24 * 60 * 60; @@ -16,52 +15,75 @@ function admin_shifts() { $angelmode = 'manually'; $length = ''; $change_hours = array(); - $name = ""; - + $title = ""; + $shifttype_id = null; + // Locations laden (auch unsichtbare - fuer Erzengel ist das ok) $rooms = sql_select("SELECT * FROM `Room` ORDER BY `Name`"); $room_array = array(); foreach ($rooms as $room) $room_array[$room['RID']] = $room['Name']; - + // Engeltypen laden $types = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`"); $needed_angel_types = array(); foreach ($types as $type) $needed_angel_types[$type['id']] = 0; - + + // Load shift types + $shifttypes_source = ShiftTypes(); + if ($shifttypes_source === false) + engelsystem_error('Unable to load shift types.'); + $shifttypes = []; + foreach ($shifttypes_source as $shifttype) + $shifttypes[$shifttype['id']] = $shifttype['name']; + if (isset($_REQUEST['preview']) || isset($_REQUEST['back'])) { + if (isset($_REQUEST['shifttype_id'])) { + $shifttype = ShiftType($_REQUEST['shifttype_id']); + if ($shifttype === false) + engelsystem_error('Unable to load shift type.'); + if ($shifttype == null) { + $ok = false; + error(_('Please select a shift type.')); + } else + $shifttype_id = $_REQUEST['shifttype_id']; + } else { + $ok = false; + error(_('Please select a shift type.')); + } + // Name/Bezeichnung der Schicht, darf leer sein - $name = strip_request_item('name'); - + $title = strip_request_item('title'); + // Auswahl der sichtbaren Locations für die Schichten if (isset($_REQUEST['rid']) && preg_match("/^[0-9]+$/", $_REQUEST['rid']) && isset($room_array[$_REQUEST['rid']])) $rid = $_REQUEST['rid']; else { $ok = false; $rid = $rooms[0]['RID']; - $msg .= error("Wähle bitte einen Raum aus.", true); + error(_('Please select a location.')); } - + if (isset($_REQUEST['start']) && $tmp = DateTime::createFromFormat("Y-m-d H:i", trim($_REQUEST['start']))) $start = $tmp->getTimestamp(); else { $ok = false; - $msg .= error("Bitte gib einen Startzeitpunkt für die Schichten an.", true); + error(_('Please select a start time.')); } - + if (isset($_REQUEST['end']) && $tmp = DateTime::createFromFormat("Y-m-d H:i", trim($_REQUEST['end']))) $end = $tmp->getTimestamp(); else { $ok = false; - $msg .= error("Bitte gib einen Endzeitpunkt für die Schichten an.", true); + error(_('Please select an end time.')); } - + if ($start >= $end) { $ok = false; - $msg .= error("Das Ende muss nach dem Startzeitpunkt liegen!", true); + error(_('The shifts end has to be after its start.')); } - + if (isset($_REQUEST['mode'])) { if ($_REQUEST['mode'] == 'single') { $mode = 'single'; @@ -71,7 +93,7 @@ function admin_shifts() { $length = trim($_REQUEST['length']); } else { $ok = false; - $msg .= error("Bitte gib eine Schichtlänge in Minuten an.", true); + error(_('Please enter a shift duration in minutes.')); } } elseif ($_REQUEST['mode'] == 'variable') { if (isset($_REQUEST['change_hours']) && preg_match("/^([0-9]{2}(,|$))/", trim(str_replace(" ", "", $_REQUEST['change_hours'])))) { @@ -79,14 +101,14 @@ function admin_shifts() { $change_hours = array_map('trim', explode(",", $_REQUEST['change_hours'])); } else { $ok = false; - $msg .= error("Bitte gib die Schichtwechsel-Stunden kommagetrennt ein.", true); + error(_('Please split the shift-change hours by colons.')); } } } else { $ok = false; - $msg .= error("Bitte wähle einen Modus.", true); + error(_('Please select a mode.')); } - + if (isset($_REQUEST['angelmode'])) { if ($_REQUEST['angelmode'] == 'location') { $angelmode = 'location'; @@ -97,26 +119,26 @@ function admin_shifts() { $needed_angel_types[$type['id']] = trim($_REQUEST['type_' . $type['id']]); } else { $ok = false; - $msg .= error("Bitte überprüfe die Eingaben für die benötigten Engel des Typs " . $type['name'] . ".", true); + error(sprintf(_('Please check the needed angels for team %s.'), $type['name'])); } } if (array_sum($needed_angel_types) == 0) { $ok = false; - $msg .= error("Es werden 0 Engel benötigt. Bitte wähle benötigte Engel.", true); + error(_('There are 0 angels needed. Please enter the amounts of needed angels.')); } } else { $ok = false; - $msg .= error("Bitte Wähle einen Modus für die benötigten Engel.", true); + error(_('Please select a mode for needed angels.')); } } else { $ok = false; - $msg .= error("Bitte wähle benötigte Engel.", true); + error(_('Please select needed angels.')); } - + // Beim Zurück-Knopf das Formular zeigen if (isset($_REQUEST['back'])) $ok = false; - + // Alle Eingaben in Ordnung if ($ok) { if ($angelmode == 'location') { @@ -131,25 +153,27 @@ function admin_shifts() { 'start' => $start, 'end' => $end, 'RID' => $rid, - 'name' => $name + 'title' => $title, + 'shifttype_id' => $shifttype_id ); } elseif ($mode == 'multi') { $shift_start = $start; do { $shift_end = $shift_start + $length * 60; - + if ($shift_end > $end) $shift_end = $end; if ($shift_start >= $shift_end) break; - + $shifts[] = array( 'start' => $shift_start, 'end' => $shift_end, 'RID' => $rid, - 'name' => $name + 'title' => $title, + 'shifttype_id' => $shifttype_id ); - + $shift_start = $shift_end; } while ($shift_end < $end); } elseif ($mode == 'variable') { @@ -167,53 +191,56 @@ function admin_shifts() { } else break; } - + $shift_start = $start; do { $day = DateTime::createFromFormat("Y-m-d H:i", date("Y-m-d", $shift_start) . " 00:00")->getTimestamp(); $shift_end = $day + $change_hours[$change_index] * 60 * 60; - + if ($shift_end > $end) $shift_end = $end; if ($shift_start >= $shift_end) $shift_end += 24 * 60 * 60; - + $shifts[] = array( 'start' => $shift_start, 'end' => $shift_end, 'RID' => $rid, - 'name' => $name + 'name' => $title, + 'shifttype_id' => $shifttype_id ); - + $shift_start = $shift_end; $change_index = ($change_index + count($change_hours) - 1) % count($change_hours); } while ($shift_end < $end); } - + $shifts_table = array(); foreach ($shifts as $shift) { - $shifts_table_entry = array( - 'timeslot' => ' ' . date("Y-m-d H:i", $shift['start']) . ' - ' . date("H:i", $shift['end']) . '
' . $room_array[$shift['RID']], - 'entries' => $shift['name'] - ); - foreach ($types as $type) { + $shifts_table_entry = [ + 'timeslot' => ' ' . date("Y-m-d H:i", $shift['start']) . ' - ' . date("H:i", $shift['end']) . '
' . Room_name_render(Room($shift['RID'])), + 'title' => ShiftType_name_render(ShiftType($shifttype_id)) . ($shift['title'] ? '
' . $shift['title'] : ''), + 'needed_angels' => '' + ]; + foreach ($types as $type) if (isset($needed_angel_types[$type['id']]) && $needed_angel_types[$type['id']] > 0) - $shifts_table_entry['entries'] .= '
' . $type['name'] . ': ' . $needed_angel_types[$type['id']] . ' missing'; - } + $shifts_table_entry['needed_angels'] .= '' . AngelType_name_render($type) . ': ' . $needed_angel_types[$type['id']] . '
'; + $shifts_table[] = $shifts_table_entry; } - + // Fürs Anlegen zwischenspeichern: $_SESSION['admin_shifts_shifts'] = $shifts; $_SESSION['admin_shifts_types'] = $needed_angel_types; - + $hidden_types = ""; foreach ($needed_angel_types as $type_id => $count) $hidden_types .= form_hidden('type_' . $type_id, $count); return page_with_title(_("Preview"), array( form(array( $hidden_types, - form_hidden('name', $name), + form_hidden('shifttype_id', $shifttype_id), + form_hidden('title', $title), form_hidden('rid', $rid), form_hidden('start', date("Y-m-d H:i", $start)), form_hidden('end', date("Y-m-d H:i", $end)), @@ -223,24 +250,25 @@ function admin_shifts() { form_hidden('angelmode', $angelmode), form_submit('back', _("back")), table(array( - 'timeslot' => _("Timeslot"), - 'entries' => _("Entries") + 'timeslot' => _('Time and location'), + 'title' => _('Type and title'), + 'needed_angels' => _('Needed angels') ), $shifts_table), - form_submit('submit', _("Save")) - )) + form_submit('submit', _("Save")) + )) )); } } elseif (isset($_REQUEST['submit'])) { if (! is_array($_SESSION['admin_shifts_shifts']) || ! is_array($_SESSION['admin_shifts_types'])) redirect(page_link_to('admin_shifts')); - + foreach ($_SESSION['admin_shifts_shifts'] as $shift) { $shift['URL'] = null; $shift['PSID'] = null; $shift_id = Shift_create($shift); if ($shift_id === false) engelsystem_error('Unable to create shift.'); - + engelsystem_log("Shift created: " . $shift['name'] . " from " . date("Y-m-d H:i", $shift['start']) . " to " . date("Y-m-d H:i", $shift['end'])); $needed_angel_types_info = array(); foreach ($_SESSION['admin_shifts_types'] as $type_id => $count) { @@ -251,27 +279,27 @@ function admin_shifts() { } } } - + engelsystem_log("Shift needs following angel types: " . join(", ", $needed_angel_types_info)); - $msg = success("Schichten angelegt.", true); + success("Schichten angelegt."); + redirect(page_link_to('admin_shifts')); } else { unset($_SESSION['admin_shifts_shifts']); unset($_SESSION['admin_shifts_types']); } - + if (! isset($_REQUEST['rid'])) $_REQUEST['rid'] = null; $room_select = html_select_key('rid', 'rid', $room_array, $_REQUEST['rid']); $angel_types = ""; foreach ($types as $type) $angel_types .= form_spinner('type_' . $type['id'], $type['name'], $needed_angel_types[$type['id']]); - + return page_with_title(admin_shifts_title(), array( msg(), - $msg, form(array( - form_text('name', _("Name"), $name), - // TODO: form_textarea('description', _("Description"), ''), + form_select('shifttype_id', _('Shifttype'), $shifttypes, $shifttype_id), + form_text('title', _("Title"), $title), form_select('rid', _("Room"), $room_array, $_REQUEST['rid']), '
', '
', @@ -291,8 +319,8 @@ function admin_shifts() { $angel_types, '
', '
', - form_submit('preview', _("Preview")) - )) + form_submit('preview', _("Preview")) + )) )); } ?> diff --git a/includes/pages/guest_login.php b/includes/pages/guest_login.php index 3d8b5381..fc375092 100644 --- a/includes/pages/guest_login.php +++ b/includes/pages/guest_login.php @@ -293,9 +293,9 @@ function guest_login() { form_text('nick', _("Nick"), $nick), form_password('password', _("Password")), form_submit('submit', _("Login")), - form_info("", buttons(array( + buttons(array( button(page_link_to('user_password_recovery'), _("I forgot my password")) - ))), + )), info(_("Please note: You have to activate cookies!"), true) )), '', diff --git a/includes/pages/user_ical.php b/includes/pages/user_ical.php index 911f48aa..ba832842 100644 --- a/includes/pages/user_ical.php +++ b/includes/pages/user_ical.php @@ -22,7 +22,14 @@ function user_ical() { require_once realpath(__DIR__ . '/user_shifts.php'); view_user_shifts(); } else { - $ical_shifts = sql_select("SELECT `Shifts`.*, `Room`.`Name` as `room_name` FROM `ShiftEntry` INNER JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) INNER JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `UID`=" . sql_escape($user['UID']) . " ORDER BY `start`"); + $ical_shifts = sql_select(" + SELECT `ShiftTypes`.`name`, `Shifts`.*, `Room`.`Name` as `room_name` + FROM `ShiftEntry` + INNER JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) + JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) + INNER JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) + WHERE `UID`=" . sql_escape($user['UID']) . " + ORDER BY `start`"); } header("Content-Type: text/calendar; charset=utf-8"); diff --git a/includes/pages/user_myshifts.php b/includes/pages/user_myshifts.php index 6fe9afa2..e557054d 100644 --- a/includes/pages/user_myshifts.php +++ b/includes/pages/user_myshifts.php @@ -35,12 +35,14 @@ function user_myshifts() { `ShiftEntry`.`freeload_comment`, `ShiftEntry`.`Comment`, `ShiftEntry`.`UID`, + `ShiftTypes`.`name`, `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 `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `ShiftEntry`.`id`=" . sql_escape($id) . " AND `UID`=" . sql_escape($shifts_user['UID']) . " LIMIT 1"); @@ -76,7 +78,11 @@ function user_myshifts() { redirect(page_link_to('user_myshifts')); } elseif (isset($_REQUEST['cancel']) && preg_match("/^[0-9]*$/", $_REQUEST['cancel'])) { $id = $_REQUEST['cancel']; - $shift = sql_select("SELECT `Shifts`.`start` FROM `Shifts` INNER JOIN `ShiftEntry` USING (`SID`) WHERE `ShiftEntry`.`id`=" . sql_escape($id) . " AND `UID`=" . sql_escape($shifts_user['UID']) . " LIMIT 1"); + $shift = sql_select(" + SELECT `Shifts`.`start` + FROM `Shifts` + INNER JOIN `ShiftEntry` USING (`SID`) + WHERE `ShiftEntry`.`id`=" . sql_escape($id) . " AND `UID`=" . sql_escape($shifts_user['UID'])); if (count($shift) > 0) { $shift = $shift[0]; if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges)) { diff --git a/includes/pages/user_shifts.php b/includes/pages/user_shifts.php index bfcf6152..603ca993 100644 --- a/includes/pages/user_shifts.php +++ b/includes/pages/user_shifts.php @@ -6,25 +6,39 @@ function shifts_title() { function user_shifts() { global $user, $privileges, $max_freeloadable_shifts; - + if (User_is_freeloader($user)) redirect(page_link_to('user_myshifts')); - + + // Locations laden + $rooms = sql_select("SELECT * FROM `Room` WHERE `show`='Y' ORDER BY `Name`"); + $room_array = array(); + foreach ($rooms as $room) + $room_array[$room['RID']] = $room['Name']; + // 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']) && test_request_int('entry_id')) $entry_id = $_REQUEST['entry_id']; else redirect(page_link_to('user_shifts')); - - $shift_entry_source = sql_select("SELECT `User`.`Nick`, `ShiftEntry`.`Comment`, `ShiftEntry`.`UID`, `Shifts`.*, `Room`.`Name`, `AngelTypes`.`name` as `angel_type` FROM `ShiftEntry` JOIN `User` ON (`User`.`UID`=`ShiftEntry`.`UID`) 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($entry_id) . " LIMIT 1"); + + $shift_entry_source = sql_select(" + SELECT `User`.`Nick`, `ShiftEntry`.`Comment`, `ShiftEntry`.`UID`, `ShiftTypes`.`name`, `Shifts`.*, `Room`.`Name`, `AngelTypes`.`name` as `angel_type` + FROM `ShiftEntry` + JOIN `User` ON (`User`.`UID`=`ShiftEntry`.`UID`) + JOIN `AngelTypes` ON (`ShiftEntry`.`TID` = `AngelTypes`.`id`) + JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) + JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) + JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) + WHERE `ShiftEntry`.`id`=" . sql_escape($entry_id)); if (count($shift_entry_source) > 0) { $shift_entry_source = $shift_entry_source[0]; - + $result = ShiftEntry_delete($entry_id); if ($result === false) engelsystem_error('Unable to delete shift entry.'); - + engelsystem_log("Deleted " . User_Nick_render($shift_entry_source) . "'s shift: " . $shift_entry_source['name'] . " at " . $shift_entry_source['Name'] . " from " . date("y-m-d H:i", $shift_entry_source['start']) . " to " . date("y-m-d H:i", $shift_entry_source['end']) . " as " . $shift_entry_source['angel_type']); success(_("Shift entry deleted.")); } else @@ -34,28 +48,22 @@ function user_shifts() { elseif (isset($_REQUEST['edit_shift']) && in_array('admin_shifts', $privileges)) { $msg = ""; $ok = true; - + if (isset($_REQUEST['edit_shift']) && test_request_int('edit_shift')) $shift_id = $_REQUEST['edit_shift']; else redirect(page_link_to('user_shifts')); - - /* - * if (sql_num_query("SELECT * FROM `ShiftEntry` WHERE `SID`=" . sql_escape($shift_id) . " LIMIT 1") > 0) { error("Du kannst nur Schichten bearbeiten, bei denen niemand eingetragen ist."); redirect(page_link_to('user_shift')); } - */ - - $shift = sql_select("SELECT * FROM `Shifts` JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `SID`=" . sql_escape($shift_id) . " LIMIT 1"); + + $shift = sql_select(" + SELECT `ShiftTypes`.`name`, `Shifts`.*, `Room`.* FROM `Shifts` + JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) + JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) + WHERE `SID`=" . sql_escape($shift_id)); if (count($shift) == 0) redirect(page_link_to('user_shifts')); $shift = $shift[0]; - - // Locations laden - $rooms = sql_select("SELECT * FROM `Room` WHERE `show`='Y' ORDER BY `Name`"); - $room_array = array(); - foreach ($rooms as $room) - $room_array[$room['RID']] = $room['Name']; - - // Engeltypen laden + + // Engeltypen laden $types = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`"); $angel_types = array(); $needed_angel_types = array(); @@ -63,30 +71,30 @@ function user_shifts() { $angel_types[$type['id']] = $type; $needed_angel_types[$type['id']] = 0; } - + // Benötigte Engeltypen vom Raum $needed_angel_types_source = sql_select("SELECT `AngelTypes`.*, `NeededAngelTypes`.`count` FROM `AngelTypes` LEFT JOIN `NeededAngelTypes` ON (`NeededAngelTypes`.`angel_type_id` = `AngelTypes`.`id` AND `NeededAngelTypes`.`room_id`=" . sql_escape($shift['RID']) . ") ORDER BY `AngelTypes`.`name`"); foreach ($needed_angel_types_source as $type) { if ($type['count'] != "") $needed_angel_types[$type['id']] = $type['count']; } - + // Benötigte Engeltypen von der Schicht $needed_angel_types_source = sql_select("SELECT `AngelTypes`.*, `NeededAngelTypes`.`count` FROM `AngelTypes` LEFT JOIN `NeededAngelTypes` ON (`NeededAngelTypes`.`angel_type_id` = `AngelTypes`.`id` AND `NeededAngelTypes`.`shift_id`=" . sql_escape($shift_id) . ") ORDER BY `AngelTypes`.`name`"); foreach ($needed_angel_types_source as $type) { if ($type['count'] != "") $needed_angel_types[$type['id']] = $type['count']; } - + $name = $shift['name']; $rid = $shift['RID']; $start = $shift['start']; $end = $shift['end']; - + if (isset($_REQUEST['submit'])) { // Name/Bezeichnung der Schicht, darf leer sein $name = strip_request_item('name'); - + // Auswahl der sichtbaren Locations für die Schichten if (isset($_REQUEST['rid']) && preg_match("/^[0-9]+$/", $_REQUEST['rid']) && isset($room_array[$_REQUEST['rid']])) $rid = $_REQUEST['rid']; @@ -95,26 +103,26 @@ function user_shifts() { $rid = $rooms[0]['RID']; $msg .= error(_("Please select a room."), true); } - + if (isset($_REQUEST['start']) && $tmp = DateTime::createFromFormat("Y-m-d H:i", trim($_REQUEST['start']))) $start = $tmp->getTimestamp(); else { $ok = false; $msg .= error(_("Please enter a valid starting time for the shifts."), true); } - + if (isset($_REQUEST['end']) && $tmp = DateTime::createFromFormat("Y-m-d H:i", trim($_REQUEST['end']))) $end = $tmp->getTimestamp(); else { $ok = false; $msg .= error(_("Please enter a valid ending time for the shifts."), true); } - + if ($start >= $end) { $ok = false; $msg .= error(_("The ending time has to be after the starting time."), true); } - + foreach ($needed_angel_types_source as $type) { if (isset($_REQUEST['type_' . $type['id']]) && preg_match("/^[0-9]+$/", trim($_REQUEST['type_' . $type['id']]))) { $needed_angel_types[$type['id']] = trim($_REQUEST['type_' . $type['id']]); @@ -123,7 +131,7 @@ function user_shifts() { $msg .= error(sprintf(_("Please check your input for needed angels of type %s."), $type['name']), true); } } - + if ($ok) { $shift['name'] = $name; $shift['RID'] = $rid; @@ -138,19 +146,19 @@ function user_shifts() { sql_query("INSERT INTO `NeededAngelTypes` SET `shift_id`=" . sql_escape($shift_id) . ", `angel_type_id`=" . sql_escape($type_id) . ", `count`=" . sql_escape($count)); $needed_angel_types_info[] = $angel_types[$type_id]['name'] . ": " . $count; } - + engelsystem_log("Updated shift '" . $name . "' from " . date("y-m-d H:i", $start) . " to " . date("y-m-d H:i", $end) . " with angel types " . join(", ", $needed_angel_types_info)); success(_("Shift updated.")); - redirect(page_link_to('user_shifts')); + redirect(shift_link($shift_id)); } } - + $room_select = html_select_key('rid', 'rid', $room_array, $rid); - + $angel_types = ""; foreach ($types as $type) $angel_types .= form_spinner('type_' . $type['id'], $type['name'], $needed_angel_types[$type['id']]); - + return page_with_title(shifts_title(), array( msg(), '', @@ -161,8 +169,8 @@ function user_shifts() { form_text('end', _("End:"), date("Y-m-d H:i", $end)), '

' . _("Needed angels") . '

', $angel_types, - form_submit('submit', _("Save")) - )) + form_submit('submit', _("Save")) + )) )); } // 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)) { @@ -170,64 +178,72 @@ function user_shifts() { $shift_id = $_REQUEST['delete_shift']; else redirect(page_link_to('user_shifts')); - - $shift = sql_select("SELECT * FROM `Shifts` JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `SID`=" . sql_escape($shift_id) . " LIMIT 1"); - if (count($shift) == 0) + + $shift = Shift($shift_id); + if ($shift === false) + engelsystem_error('Unable to load shift.'); + if ($shift == null) redirect(page_link_to('user_shifts')); - $shift = $shift[0]; - - // Schicht löschen bestätigt + + // Schicht löschen bestätigt if (isset($_REQUEST['delete'])) { $result = Shift_delete($shift_id); if ($result === false) engelsystem_error('Unable to delete shift.'); - + engelsystem_log("Deleted shift " . $shift['name'] . " from " . date("y-m-d H:i", $shift['start']) . " to " . date("y-m-d H:i", $shift['end'])); success(_("Shift deleted.")); redirect(page_link_to('user_shifts')); } - + return page_with_title(shifts_title(), 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), - '' . _("delete") . '' + '' . _("delete") . '' )); } elseif (isset($_REQUEST['shift_id'])) { if (isset($_REQUEST['shift_id']) && preg_match("/^[0-9]*$/", $_REQUEST['shift_id'])) $shift_id = $_REQUEST['shift_id']; else redirect(page_link_to('user_shifts')); - - $shift = sql_select("SELECT * FROM `Shifts` JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `SID`=" . sql_escape($shift_id) . " LIMIT 1"); - if (count($shift) == 0) + + $shift = Shift($shift_id); + $room; + $shift['Name'] = $room_array[$shift['RID']]; + if ($shift === false) + engelsystem_error('Unable to load shift.'); + if ($shift == null) redirect(page_link_to('user_shifts')); - $shift = $shift[0]; - + if (isset($_REQUEST['type_id']) && preg_match("/^[0-9]*$/", $_REQUEST['type_id'])) $type_id = $_REQUEST['type_id']; else redirect(page_link_to('user_shifts')); - + // Schicht läuft schon, Eintragen für Engel nicht mehr möglich if (! in_array('user_shifts_admin', $privileges) && time() > $shift['start']) { error(_("This shift is running now or ended already. Please contact a dispatcher to join the shift.")); - redirect(page_link_to('user_shifts')); + redirect(shift_link($shift)); } - + // Another shift the user is signed up for collides with this one - if (! in_array('user_shifts_admin', $privileges) && sql_num_query("SELECT `Shifts`.`SID` FROM `Shifts` INNER JOIN `ShiftEntry` ON (`Shifts`.`SID` = `ShiftEntry`.`SID` AND `ShiftEntry`.`UID` = " . sql_escape($user['UID']) . ") WHERE `start` < '" . sql_escape($shift['end']) . "' AND `end` > '" . sql_escape($shift['start']) . "'") > 0) { + if (! in_array('user_shifts_admin', $privileges) && sql_num_query(" + SELECT `Shifts`.`SID` + FROM `Shifts` + INNER JOIN `ShiftEntry` ON (`Shifts`.`SID` = `ShiftEntry`.`SID` AND `ShiftEntry`.`UID` = " . sql_escape($user['UID']) . ") + WHERE `start` < '" . sql_escape($shift['end']) . "' AND `end` > '" . sql_escape($shift['start']) . "'") > 0) { error(_("You already subscribed to shift in the same timeslot. Please contact a dispatcher to join the shift.")); - redirect(page_link_to('user_shifts')); + redirect(shift_link($shift)); } - + if (in_array('user_shifts_admin', $privileges)) $type = sql_select("SELECT * FROM `AngelTypes` WHERE `id`=" . sql_escape($type_id) . " LIMIT 1"); else $type = sql_select("SELECT * FROM `UserAngelTypes` JOIN `AngelTypes` ON (`UserAngelTypes`.`angeltype_id` = `AngelTypes`.`id`) WHERE `AngelTypes`.`id` = " . sql_escape($type_id) . " AND (`AngelTypes`.`restricted` = 0 OR (`UserAngelTypes`.`user_id` = " . sql_escape($user['UID']) . " AND NOT `UserAngelTypes`.`confirm_user_id` IS NULL)) LIMIT 1"); - + if (count($type) == 0) redirect(page_link_to('user_shifts')); $type = $type[0]; - + if (isset($_REQUEST['submit'])) { $selected_type_id = $type_id; if (in_array('user_shifts_admin', $privileges)) { @@ -235,25 +251,25 @@ function user_shifts() { $user_id = $_REQUEST['user_id']; else $user_id = $user['UID']; - + if (sql_num_query("SELECT * FROM `User` WHERE `UID`=" . sql_escape($user_id) . " LIMIT 1") == 0) redirect(page_link_to('user_shifts')); - + if (isset($_REQUEST['angeltype_id']) && test_request_int('angeltype_id') && sql_num_query("SELECT * FROM `AngelTypes` WHERE `id`=" . sql_escape($_REQUEST['angeltype_id']) . " LIMIT 1") > 0) $selected_type_id = $_REQUEST['angeltype_id']; } else $user_id = $user['UID']; - + 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); - + $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'); $result = ShiftEntry_create(array( 'SID' => $shift_id, @@ -261,28 +277,28 @@ function user_shifts() { 'UID' => $user_id, 'Comment' => $comment, 'freeloaded' => $freeloaded, - 'freeload_comment' => $freeload_comment + 'freeload_comment' => $freeload_comment )); if ($result === false) engelsystem_error('Unable to create shift entry.'); - + 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) . "')"); - + $user_source = User($user_id); engelsystem_log("User " . User_Nick_render($user_source) . " signed up for shift " . $shift['name'] . " from " . date("y-m-d H:i", $shift['start']) . " to " . date("y-m-d H:i", $shift['end'])); success(_("You are subscribed. Thank you!") . ' ' . _("My shifts") . ' »'); - redirect(page_link_to('user_shifts')); + redirect(shift_link($shift)); } - + if (in_array('user_shifts_admin', $privileges)) { $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(); - + foreach ($users as $usr) $users_select[$usr['UID']] = $usr['Nick'] . ($usr['freeloaded'] == 0 ? "" : " (" . _("Freeloader") . ")"); $user_text = html_select_key('user_id', 'user_id', $users_select, $user['UID']); - + $angeltypes_source = sql_select("SELECT * FROM `AngelTypes` ORDER BY `name`"); $angeltypes = array(); foreach ($angeltypes_source as $angeltype) @@ -292,7 +308,7 @@ function user_shifts() { $user_text = User_Nick_render($user); $angeltyppe_select = $type['name']; } - + return ShiftEntry_edit_view($user_text, date("Y-m-d H:i", $shift['start']) . ' – ' . date('Y-m-d H:i', $shift['end']) . ' (' . shift_length($shift) . ')', $shift['Name'], $shift['name'], $angeltyppe_select, "", false, null, in_array('user_shifts_admin', $privileges)); } else { return view_user_shifts(); @@ -302,22 +318,25 @@ function user_shifts() { function view_user_shifts() { global $user, $privileges; global $ical_shifts; - + $ical_shifts = array(); - $days = sql_select_single_col("SELECT DISTINCT DATE(FROM_UNIXTIME(`start`)) AS `id`, DATE(FROM_UNIXTIME(`start`)) AS `name` FROM `Shifts` ORDER BY `start`"); - + $days = sql_select_single_col(" + SELECT DISTINCT DATE(FROM_UNIXTIME(`start`)) AS `id`, DATE(FROM_UNIXTIME(`start`)) AS `name` + FROM `Shifts` + 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 @@ -327,32 +346,32 @@ function view_user_shifts() { $filled = array( array( 'id' => '1', - 'name' => _('occupied') + 'name' => _('occupied') ), array( 'id' => '0', - 'name' => _('free') - ) + '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'])) { $_SESSION['user_shifts']['filled'] = array( - 0 + 0 ); } - + foreach (array( 'rooms', 'types', - 'filled' + 'filled' ) as $key) { if (isset($_REQUEST[$key])) { $filtered = array_filter($_REQUEST[$key], 'is_numeric'); @@ -363,7 +382,7 @@ function view_user_shifts() { 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; @@ -374,7 +393,7 @@ function view_user_shifts() { $_SESSION['user_shifts']['new_style'] = true; foreach (array( 'start', - 'end' + 'end' ) as $key) { if (isset($_REQUEST[$key . '_day']) && in_array($_REQUEST[$key . '_day'], $days)) $_SESSION['user_shifts'][$key . '_day'] = $_REQUEST[$key . '_day']; @@ -391,52 +410,59 @@ function view_user_shifts() { $_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 + 0 ); - - $SQL = "SELECT DISTINCT `Shifts`.*, `Room`.`Name` as `room_name`, nat2.`special_needs` > 0 AS 'has_special_needs' + + $SQL = "SELECT DISTINCT `Shifts`.*, `ShiftTypes`.`name`, `Room`.`Name` as `room_name`, nat2.`special_needs` > 0 AS 'has_special_needs' FROM `Shifts` INNER JOIN `Room` USING (`RID`) + INNER JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) 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` 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`)) 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` WHERE `Shifts`.`RID` IN (" . implode(',', $_SESSION['user_shifts']['rooms']) . ") AND `start` BETWEEN " . $starttime . " AND " . $endtime; - + if (count($_SESSION['user_shifts']['filled']) == 1) { if ($_SESSION['user_shifts']['filled'][0] == 0) $SQL .= " - 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`))"; + 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 .= " - AND (nat.`count` <= entries.`count` OR EXISTS (SELECT `SID` FROM `ShiftEntry` WHERE `UID` = " .sql_escape($user['UID']) . " AND `ShiftEntry`.`SID` = `Shifts`.`SID`))"; + AND (nat.`count` <= entries.`count` OR EXISTS (SELECT `SID` FROM `ShiftEntry` WHERE `UID` = " . sql_escape($user['UID']) . " AND `ShiftEntry`.`SID` = `Shifts`.`SID`))"; } $SQL .= " ORDER BY `start`"; + $shifts = sql_select($SQL); - $ownshifts_source = sql_select("SELECT `Shifts`.* FROM `Shifts` INNER JOIN `ShiftEntry` ON (`Shifts`.`SID` = `ShiftEntry`.`SID` AND `ShiftEntry`.`UID` = '" . sql_escape($user['UID']) . "') + + $ownshifts_source = sql_select(" + SELECT `ShiftTypes`.`name`, `Shifts`.* + FROM `Shifts` + INNER JOIN `ShiftTypes` ON (`ShiftTypes`.`id` = `Shifts`.`shifttype_id`) + INNER JOIN `ShiftEntry` ON (`Shifts`.`SID` = `ShiftEntry`.`SID` AND `ShiftEntry`.`UID` = '" . sql_escape($user['UID']) . "') WHERE `Shifts`.`RID` IN (" . implode(',', $_SESSION['user_shifts']['rooms']) . ") AND `start` BETWEEN " . $starttime . " AND " . $endtime); $ownshifts = array(); foreach ($ownshifts_source as $ownshift) $ownshifts[$ownshift['SID']] = $ownshift; unset($ownshifts_source); - + $shifts_table = ""; // qqqq /* @@ -448,7 +474,7 @@ function view_user_shifts() { $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) @@ -456,7 +482,7 @@ function view_user_shifts() { // 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"]; @@ -466,7 +492,7 @@ function view_user_shifts() { $block[$rid][$i] ++; $shifts[$k]['own'] = in_array($shift['SID'], array_keys($ownshifts)); } - + $shifts_table = '
'; foreach ($myrooms as $key => $room) { $rid = $room["id"]; @@ -483,15 +509,14 @@ function view_user_shifts() { $shifts_table .= " 1) ? ' colspan="' . $colspan . '"' : '') . ">${room['name']}\n"; } unset($block, $blocks, $firstblock, $colspan, $key, $room); - + $shifts_table .= ""; 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 .= "
-
"; $shifts_table .= date('y-m-dH:i', $thistime); - } - elseif ($thistime % (60 * 60) == 0) { + } elseif ($thistime % (60 * 60) == 0) { $shifts_table .= "
"; $shifts_table .= date("H:i", $thistime); } else { @@ -506,33 +531,32 @@ function view_user_shifts() { $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']) - { + 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 = date('d.m. H:i', $shift['start']); + $shifts_row = '' . date('d.m. H:i', $shift['start']); $shifts_row .= " – "; $shifts_row .= date('H:i', $shift['end']); $shifts_row .= "
"; - $shifts_row .= $shift['name']; + $shifts_row .= ShiftType($shift['shifttype_id'])['name']; $shifts_row .= "
"; - $shifts_row .= $room["name"]; - $shifts_row .= "
"; + if ($shift['title'] != '') { + $shifts_row .= $shift['title']; + $shifts_row .= "
"; + } if (in_array('admin_shifts', $privileges)) $shifts_row .= ' ' . 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') + button(page_link_to('user_shifts') . '&delete_shift=' . $shift['SID'], glyph('trash'), 'btn-xs') )); $shifts_row .= '
'; $query = "SELECT `NeededAngelTypes`.`count`, `AngelTypes`.`id`, `AngelTypes`.`restricted`, `UserAngelTypes`.`confirm_user_id`, `AngelTypes`.`name`, `UserAngelTypes`.`user_id` @@ -550,7 +574,7 @@ function view_user_shifts() { $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`"); @@ -567,7 +591,7 @@ function view_user_shifts() { } if (in_array('user_shifts_admin', $privileges)) $entry_list[] = "" . User_Nick_render($entry) . ' ' . table_buttons(array( - button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], glyph('trash'), 'btn-xs') + button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], glyph('trash'), 'btn-xs') )) . ''; else $entry_list[] = "" . User_Nick_render($entry) . ""; @@ -576,20 +600,20 @@ function view_user_shifts() { $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) @@ -604,11 +628,11 @@ function view_user_shifts() { else $entry_list[] = $inner_text . '
(Werde ' . $angeltype['name'] . ')'; } - + unset($inner_text); $is_free = true; } - + $shifts_row .= '' . $angeltype['name'] . ': '; $shifts_row .= join(", ", $entry_list); $shifts_row .= '
'; @@ -650,17 +674,20 @@ function view_user_shifts() { $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[] = $shift['room_name']; - + $info[] = Room_name_render([ + 'Name' => $shift['room_name'], + 'RID' => $shift['RID'] + ]); + $shift_row = array( 'info' => join('
', $info), - 'entries' => $shift['name'] + 'entries' => '' . $shift['name'] . '' . ($shift['title'] ? '
' . $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') + button(page_link_to('user_shifts') . '&delete_shift=' . $shift['SID'], glyph('trash'), 'btn-xs') )); $shift_row['entries'] .= '
'; $is_free = false; @@ -681,7 +708,7 @@ function view_user_shifts() { $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(); @@ -689,7 +716,7 @@ function view_user_shifts() { 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') + button(page_link_to('user_shifts') . '&entry_id=' . $entry['id'], glyph('trash'), 'btn-xs') )); else $member = User_Nick_render($entry); @@ -705,20 +732,20 @@ function view_user_shifts() { $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) @@ -732,11 +759,11 @@ function view_user_shifts() { $entry_list[] = $inner_text . ' (Werde ' . $angeltype['name'] . ')'; } } - + unset($inner_text); $is_free = true; } - + $shift_row['entries'] .= '' . $angeltype['name'] . ': '; $shift_row['entries'] .= join(", ", $entry_list); $shift_row['entries'] .= '
'; @@ -751,13 +778,13 @@ function view_user_shifts() { } $shifts_table = table(array( 'info' => _("Time") . "/" . _("Room"), - 'entries' => _("Entries") + 'entries' => _("Entries") ), $shifts_table); } - + if ($user['api_key'] == "") User_reset_api_key($user, false); - + return page(array( '
', msg(), @@ -774,9 +801,9 @@ function view_user_shifts() { 'new_style_checkbox' => '', 'shifts_table' => msg() . $shifts_table, 'ical_text' => '

' . _("iCal export") . '

' . sprintf(_("Export of shown shifts. iCal format or JSON format available (please keep secret, otherwise reset the api key)."), 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') . '

', - 'filter' => _("Filter") + 'filter' => _("Filter") )), - '
' + '' )); } @@ -802,14 +829,14 @@ function make_select($items, $selected, $name, $title = null) { $html_items = array(); if (isset($title)) $html_items[] = '

' . $title . '

' . "\n"; - + foreach ($items as $i) $html_items[] = '
' . (! isset($i['enabled']) || $i['enabled'] ? '' : glyph("lock")) . '

'; $html = '
' . "\n"; $html .= implode("\n", $html_items); $html .= buttons(array( button("javascript: check_all('selection_" . $name . "')", _("All"), ""), - button("javascript: uncheck_all('selection_" . $name . "')", _("None"), "") + button("javascript: uncheck_all('selection_" . $name . "')", _("None"), "") )); $html .= '
' . "\n"; return $html; diff --git a/includes/sys_menu.php b/includes/sys_menu.php index ffe76219..16577cbc 100644 --- a/includes/sys_menu.php +++ b/includes/sys_menu.php @@ -14,22 +14,22 @@ function page_link_to_absolute($page) { * Renders the header toolbar containing search, login/logout, user and settings links. */ function header_toolbar() { - global $p, $privileges, $user, $enable_tshirt_size; - + global $p, $privileges, $user, $enable_tshirt_size, $max_freeloadable_shifts; + $toolbar_items = array(); - + if (isset($user)) - $toolbar_items[] = toolbar_item_link(page_link_to('users') . '&action=view', 'time', User_shift_state_render($user)); - + $toolbar_items[] = toolbar_item_link(page_link_to('shifts') . '&action=next', 'time', User_shift_state_render($user)); + if (! isset($user) && in_array('register', $privileges)) $toolbar_items[] = toolbar_item_link(page_link_to('register'), 'plus', register_title(), $p == 'register'); - + if (in_array('login', $privileges)) $toolbar_items[] = toolbar_item_link(page_link_to('login'), 'log-in', login_title(), $p == 'login'); - + if (isset($user) && in_array('user_messages', $privileges)) $toolbar_items[] = toolbar_item_link(page_link_to('user_messages'), 'envelope', user_unread_messages()); - + $hints = []; if (isset($user)) { $hint_class = 'info'; @@ -40,30 +40,30 @@ function header_toolbar() { if ($new_questions != "") $hints[] = $new_questions; } - + $unconfirmed_hint = user_angeltypes_unconfirmed_hint(); if ($unconfirmed_hint != '') $hints[] = $unconfirmed_hint; - + if (User_is_freeloader($user)) { $hints[] = error(sprintf(_("You freeloaded at least %s shifts. Shift signup is locked. Please go to heavens desk to be unlocked again."), $max_freeloadable_shifts), true); $hint_class = 'danger'; $glyphicon = 'warning-sign'; } - + // Hinweis für Engel, die noch nicht angekommen sind if ($user['Gekommen'] == 0) { $hints[] = error(_("You are not marked as arrived. Please go to heaven's desk, get your angel badge and/or tell them that you arrived already."), true); $hint_class = 'danger'; $glyphicon = 'warning-sign'; } - + if ($enable_tshirt_size && $user['Size'] == "") { $hints[] = error(_("You need to specify a tshirt size in your settings!"), true); $hint_class = 'danger'; $glyphicon = 'warning-sign'; } - + if ($user['DECT'] == "") { $hints[] = error(_("You need to specify a DECT phone number in your settings! If you don't have a DECT phone, just enter \"-\"."), true); $hint_class = 'danger'; @@ -72,40 +72,40 @@ function header_toolbar() { } if (count($hints) > 0) $toolbar_items[] = toolbar_popover($glyphicon . ' text-' . $hint_class, '', $hints, 'bg-' . $hint_class); - + $user_submenu = make_langselect(); $user_submenu[] = toolbar_item_divider(); if (in_array('user_myshifts', $privileges)) $toolbar_items[] = toolbar_item_link(page_link_to('users') . '&action=view', ' icon-icon_angel', $user['Nick'], $p == 'users'); - + if (in_array('user_settings', $privileges)) $user_submenu[] = toolbar_item_link(page_link_to('user_settings'), 'list-alt', settings_title(), $p == 'user_settings'); - + if (in_array('logout', $privileges)) $user_submenu[] = toolbar_item_link(page_link_to('logout'), 'log-out', logout_title(), $p == 'logout'); - + if (count($user_submenu) > 0) $toolbar_items[] = toolbar_dropdown('', '', $user_submenu); - + return toolbar($toolbar_items, true); } function make_navigation() { global $p, $privileges; - + $menu = array(); $pages = array( "news" => news_title(), "user_meetings" => meetings_title(), "user_shifts" => shifts_title(), "angeltypes" => angeltypes_title(), - "user_questions" => questions_title() + "user_questions" => questions_title() ); - + foreach ($pages as $page => $title) if (in_array($page, $privileges)) $menu[] = toolbar_item_link(page_link_to($page), '', $title, $page == $p); - + $admin_menu = array(); $admin_pages = array( "admin_arrive" => admin_arrive_title(), @@ -113,31 +113,32 @@ function make_navigation() { "admin_user" => admin_user_title(), "admin_free" => admin_free_title(), "admin_questions" => admin_questions_title(), + "shifttypes" => shifttypes_title(), "admin_shifts" => admin_shifts_title(), "admin_rooms" => admin_rooms_title(), "admin_groups" => admin_groups_title(), "admin_import" => admin_import_title(), - "admin_log" => admin_log_title() + "admin_log" => admin_log_title() ); - + foreach ($admin_pages as $page => $title) if (in_array($page, $privileges)) $admin_menu[] = toolbar_item_link(page_link_to($page), '', $title, $page == $p); - + if (count($admin_menu) > 0) $menu[] = toolbar_dropdown('', _("Admin"), $admin_menu); - + return toolbar($menu); } function make_navigation_for($name, $pages) { global $privileges, $p; - + $menu = ""; foreach ($pages as $page) if (in_array($page, $privileges)) $menu .= '' . $title . ''; - + if ($menu != "") $menu = ''; return $menu; diff --git a/includes/sys_template.php b/includes/sys_template.php index d7017bd9..d3f7a24e 100644 --- a/includes/sys_template.php +++ b/includes/sys_template.php @@ -6,13 +6,26 @@ $themes = array( "0" => "Engelsystem light", "1" => "Engelsystem dark", - "2" => "Engelsystem 31c3" + "2" => "Engelsystem 31c3" ); +/** + * Display muted (grey) text. + * + * @param string $text + */ +function mute($text) { + return '' . $text . ''; +} + +function progress_bar($valuemin, $valuemax, $valuenow, $class = '', $content = '') { + return '
' . $content . '
'; +} + /** * Render glyphicon * - * @param string $glyph_name + * @param string $glyph_name */ function glyph($glyph_name) { return ' '; @@ -21,7 +34,7 @@ function glyph($glyph_name) { /** * Renders a tick or a cross by given boolean * - * @param boolean $boolean + * @param boolean $boolean */ function glyph_bool($boolean) { return '' . glyph($boolean ? 'ok' : 'remove') . ''; @@ -39,7 +52,7 @@ function heading($content, $number = 1) { /** * Render a toolbar. * - * @param array $items + * @param array $items * @return string */ function toolbar($items = array(), $right = false) { @@ -49,10 +62,10 @@ function toolbar($items = array(), $right = false) { /** * Render a link for a toolbar. * - * @param string $href - * @param string $glyphicon - * @param string $label - * @param bool $selected + * @param string $href + * @param string $glyphicon + * @param string $label + * @param bool $selected * @return string */ function toolbar_item_link($href, $glyphicon, $label, $selected = false) { @@ -74,7 +87,7 @@ function toolbar_popover($glyphicon, $label, $content, $class = '') { return ''; } @@ -125,9 +138,9 @@ function form_checkboxes($name, $label, $items, $selected) { $html = form_element($label, ''); foreach ($items as $key => $item) $html .= form_checkbox($name . '_' . $key, $item, array_search($key, $selected) !== false); - + return $html; - + $html = "
    "; foreach ($items as $key => $item) { $id = $name . '_' . $key; @@ -191,7 +204,7 @@ function form_radio($name, $label, $selected, $value) { */ function form_info($label, $text = "") { if ($label == "") - return '' . $text . ''; + return '' . glyph('info-sign') . $text . ''; if ($text == "") return '

    ' . $label . '

    '; return form_element($label, '

    ' . $text . '

    ', ''); @@ -283,17 +296,17 @@ function table($columns, $rows_raw, $data = true) { // If only one column is given if (! is_array($columns)) { $columns = array( - 'col' => $columns + 'col' => $columns ); - + $rows = array(); foreach ($rows_raw as $row) $rows[] = array( - 'col' => $row + 'col' => $row ); } else $rows = $rows_raw; - + if (count($rows) == 0) return info(_("No data found."), true); $html = ""; @@ -381,7 +394,7 @@ function html_options($name, $options, $selected = "") { $html = ""; foreach ($options as $value => $label) $html .= ' ' . $label; - + return $html; } @@ -419,7 +432,7 @@ function ReplaceSmilies($neueckig) { $neueckig = str_replace(";P", "", $neueckig); $neueckig = str_replace(";oP", "", $neueckig); $neueckig = str_replace("?)", "", $neueckig); - + return $neueckig; } ?> diff --git a/includes/view/AngelTypes_view.php b/includes/view/AngelTypes_view.php index 7b3e162a..78563c0b 100644 --- a/includes/view/AngelTypes_view.php +++ b/includes/view/AngelTypes_view.php @@ -1,8 +1,18 @@ ' . ($angeltype['restricted'] ? glyph('lock') : '') . $angeltype['name'] . ''; +} + /** * Render angeltype membership state * @@ -35,15 +45,15 @@ function AngelType_delete_view($angeltype) { info(sprintf(_("Do you want to delete angeltype %s?"), $angeltype['name']), true), buttons(array( button(page_link_to('angeltypes'), _("cancel"), 'cancel'), - button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'] . '&confirmed', _("delete"), 'ok') - )) + button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'] . '&confirmed', _("delete"), 'ok') + )) )); } function AngelType_edit_view($name, $restricted, $description, $coordinator_mode) { return page_with_title(sprintf(_("Edit %s"), $name), array( buttons(array( - button(page_link_to('angeltypes'), _("Angeltypes"), 'back') + button(page_link_to('angeltypes'), _("Angeltypes"), 'back') )), msg(), form(array( @@ -52,16 +62,16 @@ function AngelType_edit_view($name, $restricted, $description, $coordinator_mode form_info("", _("Restricted angel types can only be used by an angel if enabled by an archangel (double opt-in).")), form_textarea('description', _("Description"), $description), form_info("", _("Please use markdown for the description.")), - form_submit('submit', _("Save")) - )) + form_submit('submit', _("Save")) + )) )); } function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angeltypes, $admin_angeltypes, $coordinator) { $buttons = array( - button(page_link_to('angeltypes'), _("Angeltypes"), 'back') + button(page_link_to('angeltypes'), _("Angeltypes"), 'back') ); - + if ($user_angeltype == null) $buttons[] = button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("join"), 'add'); else { @@ -69,24 +79,24 @@ function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angel error(sprintf(_("You are unconfirmed for this angeltype. Please go to the introduction for %s to get confirmed."), $angeltype['name'])); $buttons[] = button(page_link_to('user_angeltypes') . '&action=delete&user_angeltype_id=' . $user_angeltype['id'], _("leave"), 'cancel'); } - + if ($admin_angeltypes || $coordinator) $buttons[] = button(page_link_to('angeltypes') . '&action=edit&angeltype_id=' . $angeltype['id'], _("edit"), 'edit'); if ($admin_angeltypes) $buttons[] = button(page_link_to('angeltypes') . '&action=delete&angeltype_id=' . $angeltype['id'], _("delete"), 'delete'); - + $page = array( msg(), - buttons($buttons) + buttons($buttons) ); - + $page[] = '

    ' . _("Description") . '

    '; $parsedown = new Parsedown(); if ($angeltype['description'] != "") $page[] = '
    ' . $parsedown->parse($angeltype['description']) . '
    '; - + // Team-Coordinators list missing - + $coordinators = array(); $members_confirmed = array(); $members_unconfirmed = array(); @@ -95,7 +105,7 @@ function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angel if ($angeltype['restricted'] && $member['confirm_user_id'] == null) { $member['actions'] = join(" ", array( '' . _("confirm") . '', - '' . _("deny") . '' + '' . _("deny") . '' )); $members_unconfirmed[] = $member; } elseif ($member['coordinator']) { @@ -108,7 +118,7 @@ function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angel if ($admin_user_angeltypes) $member['actions'] = join(" ", array( $admin_angeltypes ? '' . _("Add coordinator rights") . '' : '', - '' . _("remove") . '' + '' . _("remove") . '' )); $members_confirmed[] = $member; } @@ -118,74 +128,74 @@ function AngelType_view($angeltype, $members, $user_angeltype, $admin_user_angel $page[] = table(array( 'Nick' => _("Nick"), 'DECT' => _("DECT"), - 'actions' => "" + 'actions' => "" ), $coordinators); } $page[] = '

    ' . _("Members") . '

    '; if ($admin_user_angeltypes) $page[] = buttons(array( - button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("Add"), 'add') + button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("Add"), 'add') )); $page[] = table(array( 'Nick' => _("Nick"), 'DECT' => _("DECT"), - 'actions' => "" + 'actions' => "" ), $members_confirmed); - + if ($admin_user_angeltypes && $angeltype['restricted'] && count($members_unconfirmed) > 0) { $page[] = '

    ' . _("Unconfirmed") . '

    '; $page[] = buttons(array( button(page_link_to('user_angeltypes') . '&action=confirm_all&angeltype_id=' . $angeltype['id'], _("confirm all"), 'ok'), - button(page_link_to('user_angeltypes') . '&action=delete_all&angeltype_id=' . $angeltype['id'], _("deny all"), 'cancel') + button(page_link_to('user_angeltypes') . '&action=delete_all&angeltype_id=' . $angeltype['id'], _("deny all"), 'cancel') )); $page[] = table(array( 'Nick' => _("Nick"), 'DECT' => _("DECT"), - 'actions' => "" + 'actions' => "" ), $members_unconfirmed); } - + return page_with_title(sprintf(_("Team %s"), $angeltype['name']), $page); } /** * Display the list of angeltypes. * - * @param array $angeltypes + * @param array $angeltypes */ function AngelTypes_list_view($angeltypes, $admin_angeltypes) { return page_with_title(angeltypes_title(), array( msg(), buttons(array( $admin_angeltypes ? button(page_link_to('angeltypes') . '&action=edit', _("New angeltype"), 'add') : '', - button(page_link_to('angeltypes') . '&action=about', _("Teams/Job description")) + button(page_link_to('angeltypes') . '&action=about', _("Teams/Job description")) )), table(array( 'name' => _("Name"), 'restricted' => glyph('lock') . _("Restricted"), 'membership' => _("Membership"), - 'actions' => "" - ), $angeltypes) + 'actions' => "" + ), $angeltypes) )); } function AngelTypes_about_view($angeltypes, $user_logged_in) { global $faq_url; - + $content = array( buttons(array( ! $user_logged_in ? button(page_link_to('register'), register_title()) : '', ! $user_logged_in ? button(page_link_to('login'), login_title()) : '', $user_logged_in ? button(page_link_to('angeltypes'), angeltypes_title(), 'back') : '', - button($faq_url, _("FAQ"), "btn-primary") + button($faq_url, _("FAQ"), "btn-primary") )), '

    ' . _("Here is the list of teams and their tasks. If you have questions, read the FAQ.") . '

    ', - '
    ' + '
    ' ); $parsedown = new Parsedown(); foreach ($angeltypes as $angeltype) { $content[] = '

    ' . $angeltype['name'] . '

    '; - + if (isset($angeltype['user_angeltype_id'])) { $buttons = array(); if ($angeltype['user_angeltype_id'] != null) @@ -194,14 +204,14 @@ function AngelTypes_about_view($angeltypes, $user_logged_in) { $buttons[] = button(page_link_to('user_angeltypes') . '&action=add&angeltype_id=' . $angeltype['id'], _("join"), 'add'); $content[] = buttons($buttons); } - + if ($angeltype['restricted']) $content[] = info(_("This angeltype is restricted by double-opt-in by a team coordinator. Please show up at the according introduction meetings."), true); if ($angeltype['description'] != "") $content[] = '
    ' . $parsedown->parse($angeltype['description']) . '
    '; $content[] = '
    '; } - + return page_with_title(_("Teams/Job description"), $content); } diff --git a/includes/view/Rooms_view.php b/includes/view/Rooms_view.php new file mode 100644 index 00000000..bb41a4d3 --- /dev/null +++ b/includes/view/Rooms_view.php @@ -0,0 +1,10 @@ +' . glyph('map-marker') . $room['Name'] . ''; + return $room['Name']; +} + +?> \ No newline at end of file diff --git a/includes/view/ShiftTypes_view.php b/includes/view/ShiftTypes_view.php new file mode 100644 index 00000000..10431440 --- /dev/null +++ b/includes/view/ShiftTypes_view.php @@ -0,0 +1,80 @@ +' . $shifttype['name'] . ''; + return $shifttype['name']; +} + +function ShiftType_delete_view($shifttype) { + return page_with_title(sprintf(_("Delete shifttype %s"), $shifttype['name']), array( + info(sprintf(_("Do you want to delete shifttype %s?"), $shifttype['name']), true), + buttons(array( + button(page_link_to('shifttypes'), _("cancel"), 'cancel'), + button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'] . '&confirmed', _("delete"), 'ok') + )) + )); +} + +function ShiftType_edit_view($name, $angeltype_id, $angeltypes, $description, $shifttype_id) { + $angeltypes_select = [ + '' => _('All') + ]; + foreach ($angeltypes as $angeltype) + $angeltypes_select[$angeltype['id']] = $angeltype['name']; + + return page_with_title($shifttype_id ? _('Edit shifttype') : _('Create shifttype'), [ + msg(), + buttons([ + button(page_link_to('shifttypes'), shifttypes_title(), 'back') + ]), + form([ + form_text('name', _('Name'), $name), + form_select('angeltype_id', _('Angeltype'), $angeltypes_select, $angeltype_id), + form_textarea('description', _('Description'), $description), + form_info('', _('Please use markdown for the description.')), + form_submit('submit', _('Save')) + ]) + ]); +} + +function ShiftType_view($shifttype, $angeltype) { + $parsedown = new Parsedown(); + $title = $shifttype['name']; + if ($angeltype) + $title .= ' ' . sprintf(_('for team %s'), $angeltype['name']) . ''; + return page_with_title($title, [ + msg(), + buttons([ + button(page_link_to('shifttypes'), shifttypes_title(), 'back'), + $angeltype ? button(page_link_to('angeltypes') . '&action=view&angeltype_id=' . $angeltype['id'], $angeltype['name']) : '', + button(page_link_to('shifttypes') . '&action=edit&shifttype_id=' . $shifttype['id'], _('edit'), 'edit'), + button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'], _('delete'), 'delete') + ]), + $parsedown->parse($shifttype['description']) + ]); +} + +function ShiftTypes_list_view($shifttypes) { + foreach ($shifttypes as &$shifttype) { + $shifttype['name'] = '' . $shifttype['name'] . ''; + $shifttype['actions'] = table_buttons([ + button(page_link_to('shifttypes') . '&action=edit&shifttype_id=' . $shifttype['id'], _('edit'), 'btn-xs'), + button(page_link_to('shifttypes') . '&action=delete&shifttype_id=' . $shifttype['id'], _('delete'), 'btn-xs') + ]); + } + + return page_with_title(shifttypes_title(), [ + msg(), + buttons([ + button(page_link_to('shifttypes') . '&action=edit', _('New shifttype'), 'add') + ]), + table([ + 'name' => _('Name'), + 'actions' => '' + ], $shifttypes) + ]); +} + +?> \ No newline at end of file diff --git a/includes/view/Shifts_view.php b/includes/view/Shifts_view.php index d0e7d809..00c18572 100644 --- a/includes/view/Shifts_view.php +++ b/includes/view/Shifts_view.php @@ -1,7 +1,117 @@ = $needed_angeltype['count']) + $class = 'progress-bar-success'; + $needed_angels .= '
    '; + + $needed_angels .= '
    ' . Shift_signup_button_render($shift, $angeltypes[$needed_angeltype['TID']]) . '
    '; + + $needed_angels .= '

    ' . AngelType_name_render($angeltypes[$needed_angeltype['TID']]) . '

    '; + $needed_angels .= progress_bar(0, $needed_angeltype['count'], $needed_angeltype['taken'], $class, $needed_angeltype['taken'] . ' / ' . $needed_angeltype['count']); + + $angels = []; + foreach ($shift['ShiftEntry'] as $shift_entry) { + if ($shift_entry['TID'] == $needed_angeltype['TID']) { + $entry = User_Nick_render(User($shift_entry['UID'])); + if ($shift_entry['freeloaded']) + $entry = '' . $entry . ''; + if ($user_shift_admin) { + $entry .= '
    '; + $entry .= button_glyph(page_link_to('user_myshifts') . '&edit=' . $shift['SID'] . '&id=' . $shift_entry['UID'], 'pencil', 'btn-xs'); + $entry .= button_glyph(page_link_to('user_shifts') . '&entry_id=' . $shift_entry['id'], 'trash', 'btn-xs'); + $entry .= '
    '; + } + $angels[] = $entry; + } + } + + $needed_angels .= join(', ', $angels); + + $needed_angels .= '
    '; + } + + return page_with_title($shift['name'] . ' %c', [ + msg(), + Shift_collides($shift, $user_shifts) ? info(_('This shift collides with one of your shifts.'), true) : '', + $signed_up ? info(_('You are signed up for this shift.'), true) : '', + ($shift_admin || $admin_shifttypes || $admin_rooms) ? buttons([ + $shift_admin ? button(shift_edit_link($shift), glyph('pencil') . _('edit')) : '', + $shift_admin ? button(shift_delete_link($shift), glyph('trash') . _('delete')) : '', + $admin_shifttypes ? button(shifttype_link($shifttype), $shifttype['name']) : '', + $admin_rooms ? button(room_link($room), glyph('map-marker') . $room['Name']) : '' + ]) : '', + div('row', [ + div('col-sm-3 col-xs-6', [ + '

    ' . _('Title') . '

    ', + '

    ' . ($shift['URL'] != '' ? '' . $shift['title'] . '' : $shift['title']) . '

    ' + ]), + div('col-sm-3 col-xs-6', [ + '

    ' . _('Start') . '

    ', + '

    ', + glyph('calendar') . date('y-m-d', $shift['start']), + '
    ', + glyph('time') . date('H:i', $shift['start']), + '

    ' + ]), + div('col-sm-3 col-xs-6', [ + '

    ' . _('End') . '

    ', + '

    ', + glyph('calendar') . date('y-m-d', $shift['end']), + '
    ', + glyph('time') . date('H:i', $shift['end']), + '

    ' + ]), + div('col-sm-3 col-xs-6', [ + '

    ' . _('Location') . '

    ', + '

    ' . glyph('map-marker') . $room['Name'] . '

    ' + ]) + ]), + div('row', [ + div('col-sm-6', [ + '

    ' . _('Needed angels') . '

    ', + '
    ' . $needed_angels . '
    ' + ]), + div('col-sm-6', [ + '

    ' . _('Description') . '

    ', + $parsedown->parse($shifttype['description']) + ]) + ]) + ]); +} + /** * Calc shift length in format 12:23h. - * @param Shift $shift + * + * @param Shift $shift */ function shift_length($shift) { $length = floor(($shift['end'] - $shift['start']) / (60 * 60)) . ":"; diff --git a/includes/view/User_view.php b/includes/view/User_view.php index 99ca3eeb..a7d77b19 100644 --- a/includes/view/User_view.php +++ b/includes/view/User_view.php @@ -16,7 +16,7 @@ $tshirt_sizes = array( 'S-G' => "S Girl", 'M-G' => "M Girl", 'L-G' => "L Girl", - 'XL-G' => "XL Girl" + 'XL-G' => "XL Girl" ); function Users_view($users, $order_by, $arrived_count, $active_count, $force_active_count, $freeloads_count, $tshirts_count) { @@ -28,7 +28,7 @@ function Users_view($users, $order_by, $arrived_count, $active_count, $force_act $user['Tshirt'] = glyph_bool($user['Tshirt']); $user['lastLogIn'] = date(_('m/d/Y h:i a'), $user['lastLogIn']); $user['actions'] = table_buttons(array( - button_glyph(page_link_to('admin_user') . '&id=' . $user['UID'], 'edit', 'btn-xs') + button_glyph(page_link_to('admin_user') . '&id=' . $user['UID'], 'edit', 'btn-xs') )); } $users[] = array( @@ -38,13 +38,13 @@ function Users_view($users, $order_by, $arrived_count, $active_count, $force_act 'force_active' => $force_active_count, 'freeloads' => $freeloads_count, 'Tshirt' => $tshirts_count, - 'actions' => '' . count($users) . '' + 'actions' => '' . count($users) . '' ); - + return page_with_title(_('All users'), array( msg(), buttons(array( - button(page_link_to('register'), glyph('plus') . _('New user')) + button(page_link_to('register'), glyph('plus') . _('New user')) )), table(array( 'Nick' => Users_table_header_link('Nick', _('Nick'), $order_by), @@ -58,8 +58,8 @@ function Users_view($users, $order_by, $arrived_count, $active_count, $force_act 'Tshirt' => Users_table_header_link('Tshirt', _('T-Shirt'), $order_by), 'Size' => Users_table_header_link('Size', _('Size'), $order_by), 'lastLogIn' => Users_table_header_link('lastLogIn', _('Last login'), $order_by), - 'actions' => '' - ), $users) + 'actions' => '' + ), $users) )); } @@ -71,18 +71,18 @@ function User_shift_state_render($user) { $upcoming_shifts = ShiftEntries_upcoming_for_user($user); if ($upcoming_shifts === false) return false; - + if (count($upcoming_shifts) == 0) return '' . _("Free") . ''; - + if ($upcoming_shifts[0]['start'] > time()) if ($upcoming_shifts[0]['start'] - time() > 3600) return '' . _("Next shift %c") . ''; else return '' . _("Next shift %c") . ''; - + $halfway = ($upcoming_shifts[0]['start'] + $upcoming_shifts[0]['end']) / 2; - + if (time() < $halfway) return '' . _("Shift starts %c") . ''; else @@ -91,17 +91,19 @@ function User_shift_state_render($user) { function User_view($user_source, $admin_user_privilege, $freeloader, $user_angeltypes, $user_groups, $shifts, $its_me) { global $LETZTES_AUSTRAGEN, $privileges; - + $user_name = htmlspecialchars($user_source['Vorname']) . " " . htmlspecialchars($user_source['Name']); - + $myshifts_table = array(); $html = ""; $timesum = 0; foreach ($shifts as $shift) { - $shift_info = $shift['name']; + $shift_info = '' . $shift['name'] . ''; + if ($shift['title']) + $shift_info .= '
    ' . $shift['title'] . ''; foreach ($shift['needed_angeltypes'] as $needed_angel_type) { $shift_info .= '
    ' . $needed_angel_type['name'] . ': '; - + $shift_entries = array(); foreach ($needed_angel_type['users'] as $user_shift) { if ($its_me) @@ -110,34 +112,36 @@ function User_view($user_source, $admin_user_privilege, $freeloader, $user_angel $member = User_Nick_render($user_shift); if ($user_shift['freeloaded']) $member = '' . $member . ''; - + $shift_entries[] = $member; } $shift_info .= join(", ", $shift_entries); } - + $myshift = array( 'date' => date("Y-m-d", $shift['start']), 'time' => date("H:i", $shift['start']) . ' - ' . date("H:i", $shift['end']), 'room' => $shift['Name'], 'shift_info' => $shift_info, - 'comment' => $shift['Comment'] + 'comment' => $shift['Comment'] ); - + if ($shift['freeloaded']) { if (in_array("user_shifts_admin", $privileges)) $myshift['comment'] .= '

    ' . _("Freeloaded") . ': ' . $shift['freeload_comment'] . '

    '; else $myshift['comment'] .= '

    ' . _("Freeloaded") . '

    '; } - - $myshift['actions'] = array(); + + $myshift['actions'] = [ + button(shift_link($shift), glyph('eye-open') . _('view'), 'btn-xs') + ]; if ($its_me || in_array('user_shifts_admin', $privileges)) $myshift['actions'][] = button(page_link_to('user_myshifts') . '&edit=' . $shift['id'] . '&id=' . $user_source['UID'], glyph('edit') . _('edit'), 'btn-xs'); if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges)) $myshift['actions'][] = button(page_link_to('user_myshifts') . ((! $its_me) ? '&id=' . $user_source['UID'] : '') . '&cancel=' . $shift['id'], glyph('trash') . _('sign off'), 'btn-xs'); $myshift['actions'] = table_buttons($myshift['actions']); - + if ($shift['freeloaded']) $timesum += - 2 * ($shift['end'] - $shift['start']); else @@ -151,9 +155,9 @@ function User_view($user_source, $admin_user_privilege, $freeloader, $user_angel 'room' => "", 'shift_info' => "", 'comment' => "", - 'actions' => "" + 'actions' => "" ); - + return page_with_title(' ' . htmlspecialchars($user_source['Nick']) . ' ' . $user_name . '', array( msg(), div('row', array( @@ -161,7 +165,7 @@ function User_view($user_source, $admin_user_privilege, $freeloader, $user_angel '

    ', '', $user_source['DECT'], - '

    ' + '' )), div('col-md-3', array( '

    ' . _("User state") . '

    ', @@ -169,28 +173,28 @@ function User_view($user_source, $admin_user_privilege, $freeloader, $user_angel $user_source['Gekommen'] ? User_shift_state_render($user_source) . '
    ' : '', ($user_source['Gekommen'] ? ' ' . _("Arrived") . '' : '' . _("Not arrived") . ''), ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Aktiv']) ? ' ' . _("Active") . '' : '', - ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Tshirt']) ? ' ' . _("T-Shirt") . '' : '' + ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Tshirt']) ? ' ' . _("T-Shirt") . '' : '' )), div('col-md-3', array( '

    ' . _("Angeltypes") . '

    ', - User_angeltypes_render($user_angeltypes) + User_angeltypes_render($user_angeltypes) )), div('col-md-3', array( '

    ' . _("Rights") . '

    ', - User_groups_render($user_groups) - )) + User_groups_render($user_groups) + )) )), div('row space-top', array( div('col-md-12', array( buttons(array( $admin_user_privilege ? button(page_link_to('admin_user') . '&id=' . $user_source['UID'], glyph("edit") . _("edit")) : '', - ($admin_user_privilege && !$user_source['Gekommen']) ? button(page_link_to('admin_arrive') . '&arrived=' . $user_source['UID'], _("arrived")) : '', + ($admin_user_privilege && ! $user_source['Gekommen']) ? button(page_link_to('admin_arrive') . '&arrived=' . $user_source['UID'], _("arrived")) : '', $its_me ? button(page_link_to('user_settings'), glyph('list-alt') . _("Settings")) : '', $its_me ? button(page_link_to('ical') . '&key=' . $user_source['api_key'], glyph('calendar') . _("iCal Export")) : '', $its_me ? button(page_link_to('shifts_json_export') . '&key=' . $user_source['api_key'], glyph('export') . _("JSON Export")) : '', - $its_me ? button(page_link_to('user_myshifts') . '&reset', glyph('repeat') . _('Reset API key')) : '' - )) - )) + $its_me ? button(page_link_to('user_myshifts') . '&reset', glyph('repeat') . _('Reset API key')) : '' + )) + )) )), ($its_me || $admin_user_privilege) ? '

    ' . _("Shifts") . '

    ' : '', ($its_me || $admin_user_privilege) ? table(array( @@ -199,9 +203,9 @@ function User_view($user_source, $admin_user_privilege, $freeloader, $user_angel 'room' => _("Location"), 'shift_info' => _("Name & workmates"), 'comment' => _("Comment"), - 'actions' => _("Action") + 'actions' => _("Action") ), $myshifts_table) : '', - $its_me && count($shifts) == 0 ? error(sprintf(_("Go to the shifts table to sign yourself up for some shifts."), page_link_to('user_shifts')), true) : '' + $its_me && count($shifts) == 0 ? error(sprintf(_("Go to the shifts table to sign yourself up for some shifts."), page_link_to('user_shifts')), true) : '' )); } @@ -214,8 +218,8 @@ function User_password_recovery_view() { _("We will send you an e-mail with a password recovery link. Please use the email address you used for registration."), form(array( form_text('email', _("E-Mail"), ""), - form_submit('submit', _("Recover")) - )) + form_submit('submit', _("Recover")) + )) )); } @@ -229,8 +233,8 @@ function User_password_set_view() { form(array( form_password('password', _("Password")), form_password('password2', _("Confirm password")), - form_submit('submit', _("Save")) - )) + form_submit('submit', _("Save")) + )) )); } @@ -261,7 +265,7 @@ function User_groups_render($user_groups) { /** * Render a users avatar. * - * @param User $user + * @param User $user * @return string */ function User_Avatar_render($user) { @@ -271,7 +275,7 @@ function User_Avatar_render($user) { /** * Render a user nickname. * - * @param User $user_source + * @param User $user_source * @return string */ function User_Nick_render($user_source) { diff --git a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo index f38f5168..ecba53db 100644 Binary files a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo and b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo differ diff --git a/locale/de_DE.UTF-8/LC_MESSAGES/default.po b/locale/de_DE.UTF-8/LC_MESSAGES/default.po index 5ef11e22..cfc03bd5 100644 --- a/locale/de_DE.UTF-8/LC_MESSAGES/default.po +++ b/locale/de_DE.UTF-8/LC_MESSAGES/default.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: Engelsystem 2.0\n" -"POT-Creation-Date: 2014-12-08 09:42+0100\n" -"PO-Revision-Date: 2014-12-08 09:44+0100\n" +"POT-Creation-Date: 2014-12-22 20:21+0100\n" +"PO-Revision-Date: 2014-12-22 20:25+0100\n" "Last-Translator: msquare \n" "Language-Team: \n" "Language: de_DE\n" @@ -46,25 +46,25 @@ msgstr "" "Bitte eine DECT-Telefonnummer in den Einstellungen eingeben. Wenn du noch " "keine Nummer hast, bitte einfach \"-\" angeben." -#: /Users/msquare/workspace/projects/engelsystem/includes/sys_menu.php:128 +#: /Users/msquare/workspace/projects/engelsystem/includes/sys_menu.php:129 msgid "Admin" msgstr "Admin" -#: /Users/msquare/workspace/projects/engelsystem/includes/sys_template.php:294 +#: /Users/msquare/workspace/projects/engelsystem/includes/sys_template.php:311 msgid "No data found." msgstr "Nichts gefunden." #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:7 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:46 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:62 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:175 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:56 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:72 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:179 msgid "Angeltypes" msgstr "Engeltypen" #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:46 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:308 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:161 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:205 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:171 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:215 msgid "Teams/Job description" msgstr "Team-/Aufgabenbeschreibung" @@ -74,7 +74,7 @@ msgid "Angeltype %s deleted." msgstr "Engeltyp %s gelöscht." #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:77 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:34 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:44 #, php-format msgid "Delete angeltype %s" msgstr "Lösche Engeltyp %s" @@ -84,28 +84,32 @@ msgid "Please check the name. Maybe it already exists." msgstr "Bitte überprüfe den Namen. Vielleicht ist er bereits vergeben." #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:152 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:44 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:54 #, php-format msgid "Edit %s" msgstr "%s bearbeiten" #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:184 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:148 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:158 #, php-format msgid "Team %s" msgstr "Team %s" #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:204 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:137 msgid "view" msgstr "ansehen" #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:209 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:56 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:64 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:23 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:17 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:74 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:136 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:186 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:84 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:46 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:52 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:63 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:140 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:190 msgid "edit" msgstr "bearbeiten" @@ -113,26 +117,66 @@ msgstr "bearbeiten" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:37 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:56 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:18 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:192 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:38 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:76 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:201 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:86 #: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:5 #: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:12 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:47 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:15 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:53 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:64 msgid "delete" msgstr "löschen" #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:219 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:70 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:192 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:80 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:202 msgid "leave" msgstr "verlassen" #: /Users/msquare/workspace/projects/engelsystem/includes/controller/angeltypes_controller.php:221 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:66 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:194 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:76 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:204 msgid "join" msgstr "mitmachen" +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifts_controller.php:28 +msgid "Shift could not be found." +msgstr "Schicht konnte nicht gefunden werden." + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:25 +#, php-format +msgid "Shifttype %s deleted." +msgstr "Schichttyp %s gelöscht." + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:30 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:11 +#, php-format +msgid "Delete shifttype %s" +msgstr "Lösche Schichttyp %s" + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:53 +msgid "Shifttype not found." +msgstr "Schichttyp nicht gefunden." + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:59 +msgid "Please enter a name." +msgstr "Gib bitte einen Namen an." + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:86 +msgid "Updated shifttype." +msgstr "Schichttyp geändert." + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:92 +msgid "Created shifttype." +msgstr "Schichttyp erstellt." + +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/shifttypes_controller.php:144 +msgid "Shifttypes" +msgstr "Schichttypen" + #: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:19 #, php-format msgid "There is %d unconfirmed angeltype." @@ -247,13 +291,13 @@ msgid "Removed coordinator rights for %s from %s." msgstr "%s hat jetzt nicht mehr %s als Koordinator." #: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:284 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:120 #: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:3 msgid "Add coordinator rights" msgstr "Koordinatorrechte geben" #: /Users/msquare/workspace/projects/engelsystem/includes/controller/user_angeltypes_controller.php:284 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:103 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:113 #: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:3 msgid "Remove coordinator rights" msgstr "Koordinatorrechte entfernen" @@ -288,59 +332,59 @@ msgstr "Du bist %s beigetreten." msgid "Become a %s" msgstr "Werde ein %s" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:81 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:82 #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:44 msgid "All users" msgstr "Alle Benutzer" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:96 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:97 msgid "Token is not correct." msgstr "Der Token ist nicht in Ordnung." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:106 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:107 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:92 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:143 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:161 msgid "Your passwords don't match." msgstr "Deine Passwörter stimmen nicht überein." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:110 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:111 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:159 msgid "Your password is to short (please use at least 6 characters)." msgstr "Dein Passwort ist zu kurz (Bitte mindestens 6 Zeichen nutzen)." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:116 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:117 msgid "Password could not be updated." msgstr "Passwort kann nicht neu gesetzt werden." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:118 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:145 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:119 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:163 msgid "Password saved." msgstr "Passwort gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:136 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:140 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:137 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:141 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:62 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:56 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:59 msgid "E-mail address is not correct." msgstr "Die E-Mail Adresse ist nicht in Ordnung." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:144 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:145 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:66 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:60 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:63 msgid "Please enter your e-mail." msgstr "Bitte gib Deine E-Mail-Adresse ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:151 -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:168 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:152 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:169 msgid "Password recovery" msgstr "Passwort wiederherstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:151 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:152 #, php-format msgid "Please visit %s to recover your password." msgstr "Bitte besuche %s, um Dein Passwort zurückzusetzen" -#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:155 +#: /Users/msquare/workspace/projects/engelsystem/includes/controller/users_controller.php:156 msgid "We sent an email containing your password recovery link." msgstr "" "Wir haben eine eMail mit einem Link zum Passwort-zurücksetzen geschickt." @@ -369,53 +413,58 @@ msgstr "Eine deiner Schichten hat sich geändert:" #: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:14 #, php-format -msgid "* Shift Name changed from %s to %s" -msgstr "* Schicht Name von %s in %s geändert" +msgid "* Shift type changed from %s to %s" +msgstr "* Schichttyp von %s in %s geändert" #: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:19 #, php-format +msgid "* Shift title changed from %s to %s" +msgstr "* Schicht Titel von %s nach %s geändert" + +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:24 +#, php-format msgid "* Shift Start changed from %s to %s" msgstr "* Schicht Beginn von %s nach %s geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:24 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:29 #, php-format msgid "* Shift End changed from %s to %s" msgstr "* Schicht Ende von %s nach %s geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:34 #, php-format msgid "* Shift Location changed from %s to %s" msgstr "* Schicht Ort von %s to %s geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:39 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:44 msgid "The updated Shift:" msgstr "Die aktualisierte Schicht:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:47 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:53 msgid "Your Shift has changed" msgstr "Deine Schicht hat sich geändert" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:54 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:60 msgid "A Shift you are registered on was deleted:" msgstr "Eine deiner Schichten wurde gelöscht:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:62 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:69 msgid "Your Shift was deleted" msgstr "Deine Schicht wurde gelöscht" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:76 msgid "You have been assigned to a Shift:" msgstr "Du wurdest in eine Schicht eingetragen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:74 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:82 msgid "Assigned to Shift" msgstr "In Schicht eingetragen" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:82 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:90 msgid "You have been removed from a Shift:" msgstr "Du wurdest aus einer Schicht ausgetragen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:87 +#: /Users/msquare/workspace/projects/engelsystem/includes/mailer/shifts_mailer.php:96 msgid "Removed from Shift" msgstr "Von Schicht ausgetragen" @@ -436,129 +485,131 @@ msgid "Please enter a number of angels to be marked as active." msgstr "" "Bitte gib eine Anzahl an Engeln ein, die als Aktiv markiert werden sollen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:44 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:51 msgid "Marked angels." msgstr "Engel wurden markiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:46 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:53 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:117 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:142 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:224 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:152 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:251 #: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:65 msgid "back" msgstr "zurück" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:46 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:53 msgid "apply" msgstr "anwenden" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:56 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:63 msgid "Angel has been marked as active." msgstr "Engel wurde als aktiv markiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:58 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:85 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:65 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:74 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:92 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:20 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:29 msgid "Angel not found." msgstr "Engel nicht gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:65 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:72 msgid "Angel has been marked as not active." msgstr "Engel wurde als nicht aktiv markiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:74 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:81 msgid "Angel has got a t-shirt." msgstr "Engel hat ein T-Shirt bekommen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:83 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:90 msgid "Angel has got no t-shirt." msgstr "Engel hat kein T-Shirt bekommen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:116 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:129 msgid "set active" msgstr "setze aktiv" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:118 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:131 msgid "remove active" msgstr "entferne aktiv" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:119 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:132 msgid "got t-shirt" msgstr "hat t-shirt" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:122 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:135 msgid "remove t-shirt" msgstr "entferne t-shirt" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:136 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:149 #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:35 msgid "Sum" msgstr "Summe" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:142 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:155 msgid "Search angel:" msgstr "Suche Engel:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:143 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:156 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:66 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:67 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:63 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:72 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:71 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:80 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_log.php:25 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_log.php:26 msgid "Search" msgstr "Suche" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:146 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:159 msgid "How much angels should be active?" msgstr "Wie viele Engel sollten aktiv sein?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:147 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:213 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:294 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:160 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:239 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:322 msgid "Preview" msgstr "Vorschau" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:151 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:164 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:70 msgid "Nickname" msgstr "Nick" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:152 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:162 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:165 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:175 #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:59 msgid "Size" msgstr "Größe" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:153 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:166 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:195 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:199 msgid "Shifts" msgstr "Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:154 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:283 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:167 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:311 msgid "Length" msgstr "Länge" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:155 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:168 msgid "Active?" msgstr "Aktiv?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:156 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:169 #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:57 msgid "Forced" msgstr "Gezwungen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:157 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:170 msgid "T-shirt?" msgstr "T-Shirt?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:160 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:173 msgid "Given shirts" msgstr "Ausgegebene T-Shirts" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:163 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_active.php:176 msgid "Count" msgstr "Anzahl" @@ -588,7 +639,7 @@ msgid "reset" msgstr "zurücksetzen" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_arrive.php:55 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:187 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:191 msgid "arrived" msgstr "angekommen" @@ -600,46 +651,47 @@ msgstr "Angekommen?" msgid "Free angels" msgstr "Freie Engel" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:66 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:74 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:34 #: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:68 msgid "Angeltype" msgstr "Engeltyp" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:77 msgid "Only confirmed" msgstr "Nur bestätigte" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:77 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:85 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:170 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:293 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:188 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:119 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:130 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:142 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:206 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:129 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:140 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:152 #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:50 msgid "Nick" msgstr "Nick" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:79 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:87 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:192 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:193 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:120 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:131 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:143 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:211 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:130 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:141 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:153 #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:53 msgid "DECT" msgstr "DECT" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:80 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:88 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:201 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:197 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:215 msgid "Jabber" msgstr "Jabber" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:81 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_free.php:89 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:173 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:195 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:216 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:213 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:220 msgid "E-Mail" msgstr "E-Mail" @@ -648,16 +700,14 @@ msgid "Grouprights" msgstr "Gruppenrechte" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:29 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:76 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:78 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:84 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:92 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:100 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:121 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:158 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:273 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:50 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:164 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:107 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:111 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:123 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:168 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:60 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:174 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:33 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:74 #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:52 msgid "Name" msgstr "Name" @@ -669,21 +719,22 @@ msgstr "Privilegien" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_groups.php:53 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:32 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_questions.php:35 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:127 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:229 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:137 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:257 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:130 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_messages.php:62 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:106 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_news.php:160 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:201 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:210 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:215 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:220 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:164 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:55 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:219 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:228 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:233 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:238 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:172 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:65 #: /Users/msquare/workspace/projects/engelsystem/includes/view/Questions_view.php:32 #: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:32 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:232 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:37 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:236 msgid "Save" msgstr "Speichern" @@ -692,78 +743,137 @@ msgid "Edit group" msgstr "Gruppe bearbeiten" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:122 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:159 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:124 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:169 msgid "Frab import" msgstr "Frab Import" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:60 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:24 +msgid "Webserver has no write-permission on import directory." +msgstr "Der Webserver hat keine Schreibrechte für das Verzeichnis import." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:96 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:157 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:48 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:53 +msgid "Please select a shift type." +msgstr "Bitte einen Schichttyp wählen." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:56 +msgid "No valid xml/xcal file provided." +msgstr "Keine valide xml/xcal Datei hochgeladen." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:61 +msgid "File upload went wrong." +msgstr "Das Hochladen der Datei ist schiefgegangen." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:65 +msgid "Please provide some data." +msgstr "Bitte lade eine Datei hoch." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:73 +msgid "File Upload" +msgstr "Datei hochladen" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:73 +msgid "Validation" +msgstr "Überprüfen" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:73 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:80 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:141 +msgid "Import" +msgstr "Importieren" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:77 msgid "" "This import will create/update/delete rooms and shifts by given FRAB-export " "file. The needed file format is xcal." msgstr "" -"Dieser Import erzeugt, ändern und löscht Räume und Schichten anhand einer " +"Dieser Import erzeugt, ändert und löscht Räume und Schichten anhand einer " "FRAB-Export Datei. Das benötigte Format ist xcal." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:61 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:78 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:301 +msgid "Shifttype" +msgstr "Schichttyp" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:79 msgid "xcal-File (.xcal)" msgstr "xcal-Datei (.xcal)" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:62 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:103 -msgid "Import" -msgstr "Importieren" +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:89 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:147 +msgid "Missing import file." +msgstr "Import-Datei nicht vorhanden." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:75 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:106 msgid "Rooms to create" msgstr "Anzulegende Räume" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:77 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:110 msgid "Rooms to delete" msgstr "Zu löschende Räume" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:79 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:114 msgid "Shifts to create" msgstr "Anzulegende Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:81 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:89 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:97 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:197 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:116 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:125 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:134 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:201 msgid "Day" msgstr "Tag" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:82 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:90 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:98 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:278 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:117 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:126 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:135 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:306 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:57 msgid "Start" msgstr "Beginn" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:83 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:91 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:99 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:279 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:118 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:127 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:136 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:307 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:65 msgid "End" msgstr "Ende" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:85 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:93 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:101 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:275 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:748 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:119 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:128 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:137 +msgid "Shift type" +msgstr "Schichttyp" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:120 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:129 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:138 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:302 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:53 +msgid "Title" +msgstr "Titel" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:121 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:130 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:139 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:303 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:778 msgid "Room" msgstr "Raum" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:87 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:123 msgid "Shifts to update" msgstr "Zu aktualisierende Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:95 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:132 msgid "Shifts to delete" msgstr "Zu löschende Schichten" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:142 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_import.php:192 msgid "It's done!" msgstr "Erledigt!" @@ -802,7 +912,7 @@ msgid "Meeting" msgstr "Treffen" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_news.php:35 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:146 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:156 #, fuzzy msgid "Delete" msgstr "löschen" @@ -856,14 +966,10 @@ msgid "Answered by" msgstr "Antwort von" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:3 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:761 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:791 msgid "Rooms" msgstr "Räume" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:59 -msgid "Please enter a name." -msgstr "Gib bitte einen Namen an." - #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:82 #, php-format msgid "Please enter needed angels for type %s." @@ -873,30 +979,30 @@ msgstr "Bitte gib die Anzahl der benötigten Engel vom Typ %s an." msgid "Room saved." msgstr "Raum gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:123 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:160 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:125 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:170 msgid "Public" msgstr "Öffentlich" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:124 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:126 msgid "Room number" msgstr "Raumnummer" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:125 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:131 msgid "Needed angels:" msgstr "Benötigte Engel:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:136 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:146 #, php-format msgid "Room %s deleted." msgstr "Raum %s gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:144 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:154 #, php-format msgid "Do you want to delete room %s?" msgstr "Möchest Du den Raum %s wirklich löschen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:154 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_rooms.php:164 msgid "add" msgstr "Neu" @@ -904,45 +1010,92 @@ msgstr "Neu" msgid "Create shifts" msgstr "Schichten erstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:226 -msgid "Timeslot" -msgstr "Zeiten" +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:65 +msgid "Please select a location." +msgstr "Bitte einen Ort auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:227 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:749 -msgid "Entries" -msgstr "Einträge" +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:72 +msgid "Please select a start time." +msgstr "Bitte eine Startzeit auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:280 -msgid "Mode" -msgstr "Modus" +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:79 +msgid "Please select an end time." +msgstr "Bitte eine Endzeit auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:281 -msgid "Create one shift" -msgstr "Eine Schicht erstellen" +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:84 +#, fuzzy +msgid "The shifts end has to be after its start." +msgstr "Die Endzeit muss nach der Startzeit liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:282 -msgid "Create multiple shifts" -msgstr "Mehrere Schichten erstellen" +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:96 +msgid "Please enter a shift duration in minutes." +msgstr "Gib bitte eine Schichtlänge in Minuten ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:284 -msgid "Create multiple shifts with variable length" -msgstr "Erstelle mehrere Schichten mit unterschiedlicher Länge" +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:104 +msgid "Please split the shift-change hours by colons." +msgstr "Trenne die Schichtwechselstunden mit einem Komma." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:285 -msgid "Shift change hours" -msgstr "Schichtwechsel-Stunden" +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:109 +msgid "Please select a mode." +msgstr "Bitte einen Modus auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:288 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:162 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:122 +#, php-format +msgid "Please check the needed angels for team %s." +msgstr "Bitte gib die Anzahl der benötigten Engel vom Team %s an." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:127 +msgid "There are 0 angels needed. Please enter the amounts of needed angels." +msgstr "Es werden 0 Engel benötigt. Bitte ändere das." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:131 +msgid "Please select a mode for needed angels." +msgstr "Bitte wähle einen Modus für benötigte Engel." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:135 +msgid "Please select needed angels." +msgstr "Bitte wähle benötigte Engel." + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:253 +msgid "Time and location" +msgstr "Zeit und Ort" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:254 +msgid "Type and title" +msgstr "Typ und Titel" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:255 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:316 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:170 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:79 msgid "Needed angels" msgstr "Benötigte Engel" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:289 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:308 +msgid "Mode" +msgstr "Modus" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:309 +msgid "Create one shift" +msgstr "Eine Schicht erstellen" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:310 +msgid "Create multiple shifts" +msgstr "Mehrere Schichten erstellen" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:312 +msgid "Create multiple shifts with variable length" +msgstr "Erstelle mehrere Schichten mit unterschiedlicher Länge" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:313 +msgid "Shift change hours" +msgstr "Schichtwechsel-Stunden" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:317 msgid "Take needed angels from room settings" msgstr "Übernehme benötigte Engel von den Raum-Einstellungen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:290 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_shifts.php:318 msgid "The following angels are needed" msgstr "Die folgenden Engel werden benötigt" @@ -952,7 +1105,7 @@ msgstr "Engelliste" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/admin_user.php:36 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:174 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:196 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:214 msgid "Please send me an email if my shifts change" msgstr "Informiere mich per E-Mail über Änderungen an meinen Schichten" @@ -983,19 +1136,19 @@ msgid "Logout" msgstr "Logout" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:51 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:45 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:48 #, php-format msgid "Your nick "%s" already exists." msgstr "Der Nick "%s" existiert schon." #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:55 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:49 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:52 #, php-format msgid "Your nick "%s" is too short (min. 2 characters)." msgstr "Der Nick "%s" ist zu kurz (Mindestens 2 Zeichen)." #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:76 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:72 msgid "Please check your jabber account information." msgstr "Bitte überprüfe deine Jabber Account Eingabe." @@ -1021,28 +1174,28 @@ msgstr "" "der Engel-Aufgabenverwaltung." #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:177 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:199 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:217 msgid "Shirt size" msgstr "T-Shirt Größe" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:180 #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:294 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:230 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:234 msgid "Password" msgstr "Passwort" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:183 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:231 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:235 msgid "Confirm password" msgstr "Passwort wiederholen" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:186 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:200 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:218 msgid "What do you want to do?" msgstr "Was möchtest Du machen?" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:186 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:200 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:218 msgid "Description of job types" msgstr "Beschreibung der Aufgaben" @@ -1055,32 +1208,32 @@ msgstr "" "werden. Du kannst Deine Auswahl später in den Einstellungen ändern." #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:195 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:194 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:212 msgid "Mobile" msgstr "Handy" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:198 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:192 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:210 msgid "Phone" msgstr "Telefon" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:204 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:190 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:208 msgid "First name" msgstr "Vorname" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:207 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:189 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:207 msgid "Last name" msgstr "Nachname" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:212 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:191 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:209 msgid "Age" msgstr "Alter" #: /Users/msquare/workspace/projects/engelsystem/includes/pages/guest_login.php:215 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:198 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:216 msgid "Hometown" msgstr "Wohnort" @@ -1193,7 +1346,7 @@ msgid "Wrong action." msgstr "Falsche Aktion." #: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:274 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:290 msgid "My shifts" msgstr "Meine Schichten" @@ -1202,7 +1355,7 @@ msgid "Key changed." msgstr "Key geändert." #: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:27 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:191 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:195 msgid "Reset API key" msgstr "API-Key zurücksetzen" @@ -1219,15 +1372,15 @@ msgstr "" msgid "Continue" msgstr "Fortfahren" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:70 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:72 msgid "Shift saved." msgstr "Schicht gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:86 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:92 msgid "You have been signed off from the shift." msgstr "Du wurdest aus der Schicht ausgetragen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:88 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_myshifts.php:94 msgid "" "It's too late to sign yourself off the shift. If neccessary, ask the " "dispatcher to do so." @@ -1294,27 +1447,27 @@ msgid "No question found." msgstr "Keine Frage gefunden." #: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:4 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:188 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:192 msgid "Settings" msgstr "Einstellungen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:132 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:150 msgid "Settings saved." msgstr "Einstellungen gespeichert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:139 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:157 msgid "-> not OK. Please try again." msgstr "-> Nicht OK. Bitte erneut versuchen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:147 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:165 msgid "Failed setting password." msgstr "Konnte Passwort nicht speichern." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:160 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:178 msgid "Theme changed." msgstr "Aussehen geändert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:181 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:199 #, php-format msgid "" "Hello %s, here you can change your personal settings i.e. password, color " @@ -1323,105 +1476,105 @@ msgstr "" "Hallo %s, hier kannst Du Deine persönlichen Einstellungen (z.B. Passwort, " "Aussehen, usw.) ändern." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:187 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:205 msgid "Here you can change your user details." msgstr "Hier kannst Du Deine Details ändern." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:206 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:224 msgid "Here you can change your password." msgstr "Hier kannst Du Dein Passwort ändern." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:207 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:225 msgid "Old password:" msgstr "Altes Passwort:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:208 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:226 msgid "New password:" msgstr "Neues Passwort:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:209 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:227 msgid "Password confirmation:" msgstr "Passwort wiederholen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:213 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:231 msgid "Here you can choose your color settings:" msgstr "Hier kannst Du das Aussehen auswählen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:214 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:232 msgid "Color settings:" msgstr "Aussehen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:218 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:236 msgid "Here you can choose your language:" msgstr "Hier kannst Du Deine Sprache auswählen:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:219 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_settings.php:237 msgid "Language:" msgstr "Sprache:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:29 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:43 msgid "Shift entry deleted." msgstr "Schicht-Eintrag gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:31 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:45 msgid "Entry not found." msgstr "Eintrag nicht gefunden." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:96 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:104 msgid "Please select a room." msgstr "Bitte einen Raum auswählen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:103 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:111 msgid "Please enter a valid starting time for the shifts." msgstr "Bitte gib eine korrekte Startzeit für die Schichten ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:110 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:118 msgid "Please enter a valid ending time for the shifts." msgstr "Bitte gib eine korrekte Endzeit für die Schichten ein." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:115 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:123 msgid "The ending time has to be after the starting time." msgstr "Die Endzeit muss nach der Startzeit liegen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:123 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:131 #, php-format msgid "Please check your input for needed angels of type %s." msgstr "Bitte prüfe deine Eingabe für benötigte Engel des Typs %s." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:143 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:151 msgid "Shift updated." msgstr "Schicht aktualisiert." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:156 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:164 msgid "This page is much more comfortable with javascript." msgstr "Diese Seite ist mit JavaScript viel komfortabler." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:158 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:166 msgid "Name/Description:" msgstr "Name/Beschreibung:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:159 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:167 msgid "Room:" msgstr "Raum:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:160 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:168 msgid "Start:" msgstr "Start:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:161 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:169 msgid "End:" msgstr "Ende:" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:186 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:195 msgid "Shift deleted." msgstr "Schicht gelöscht." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:191 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:200 #, php-format msgid "Do you want to delete the shift %s from %s to %s?" msgstr "Möchtest Du die Schicht %s von %s bis %s löschen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:212 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:224 msgid "" "This shift is running now or ended already. Please contact a dispatcher to " "join the shift." @@ -1429,7 +1582,7 @@ msgstr "" "Diese Schicht läuft bereits oder ist bereits vorbei. Bitte einen Dispatcher " "Dich nachzutragen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:218 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:234 msgid "" "You already subscribed to shift in the same timeslot. Please contact a " "dispatcher to join the shift." @@ -1437,32 +1590,32 @@ msgstr "" "Du hast bereits eine Schicht im gleichen Zeitrahmen. Bitte einen Dispatcher " "Dich nachzutragen." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:274 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:290 msgid "You are subscribed. Thank you!" msgstr "Du bist eingetragen. Danke!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:283 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:168 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:299 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:172 msgid "Freeloader" msgstr "Schwänzer" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:310 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:329 msgid "The administration has not configured any shifts yet." msgstr "Die Administratoren haben noch keine Schichten angelegt." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:317 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:336 msgid "The administration has not configured any rooms yet." msgstr "Die Administratoren habe noch keine Räume eingerichtet." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:330 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:349 msgid "occupied" msgstr "belegt" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:334 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:353 msgid "free" msgstr "frei" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:339 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:358 msgid "" "The administration has not configured any angeltypes yet - or you are not " "subscribed to any angeltype." @@ -1470,32 +1623,36 @@ msgstr "" "Die Administratoren haben noch keine Engeltypen konfiguriert - oder Du hast " "noch keine Engeltypen ausgewählt." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:561 -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:698 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:598 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:730 #, php-format msgid "%d helper needed" msgid_plural "%d helpers needed" msgstr[0] "%d Helfer benötigt" msgstr[1] "%d Helfer benötigt" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:602 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:639 msgid "Add more angels" msgstr "Neue Engel hinzufügen" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:748 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:198 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:778 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:202 msgid "Time" msgstr "Zeit" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:766 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:779 +msgid "Entries" +msgstr "Einträge" + +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:796 msgid "Tasks" msgstr "Aufgaben" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:767 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:797 msgid "Occupancy" msgstr "Belegung" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:768 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:798 msgid "" "The tasks shown here are influenced by the preferences you defined in your " "settings!" @@ -1503,19 +1660,19 @@ msgstr "" "Die Schichten, die hier angezeigt werden, sind von Deinen Einstellungen " "(Engeltypen/Aufgaben) abhängig!" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:768 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:798 msgid "Description of the jobs." msgstr "Beschreibung der Aufgaben." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:769 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:799 msgid "Use new style if possible" msgstr "Wenn möglich neuen Stil verwenden" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:771 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:801 msgid "iCal export" msgstr "iCal Export" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:771 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:801 #, php-format msgid "" "Export of shown shifts. iCal format or JSON Format verfügbar (Link bitte geheimhalten, sonst API-Key zurücksetzen)." -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:772 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:802 msgid "Filter" msgstr "Filter" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:806 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:836 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:22 msgid "All" msgstr "Alle" -#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:807 +#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:837 msgid "None" msgstr "Keine" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:18 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:136 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:28 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:146 msgid "Unconfirmed" msgstr "Unbestätigt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:20 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:24 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:30 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:34 msgid "Coordinator" msgstr "Koordinator" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:22 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:26 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:32 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:36 msgid "Member" msgstr "Mitglied" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:35 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:45 #, php-format msgid "Do you want to delete angeltype %s?" msgstr "Möchtest Du den Engeltypen %s löschen?" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:37 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:47 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:14 #: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:7 #: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:18 #: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:29 @@ -1568,20 +1727,20 @@ msgstr "Möchtest Du den Engeltypen %s löschen?" msgid "cancel" msgstr "abbrechen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:51 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:165 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:61 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:175 msgid "Restricted" msgstr "Beschränkt" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:51 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:61 msgid "Yes" msgstr "Ja" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:51 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:61 msgid "No" msgstr "Nein" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:52 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:62 msgid "" "Restricted angel types can only be used by an angel if enabled by an " "archangel (double opt-in)." @@ -1589,16 +1748,19 @@ msgstr "" "Beschränkte Engeltypen müssen von einem Erzengel oder Team-Koordinator " "freigeschaltet werden (double-opt-in)." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:53 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:83 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:63 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:93 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:83 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:35 msgid "Description" msgstr "Beschreibung" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:54 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:64 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:36 msgid "Please use markdown for the description." msgstr "Bitte benutze Markdown für die Beschreibung." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:69 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:79 #, php-format msgid "" "You are unconfirmed for this angeltype. Please go to the introduction for %s " @@ -1607,52 +1769,52 @@ msgstr "" "Du bist noch nicht für diesen Engeltyp bestätigt. Bitte gehe zur Einführung " "für %s um bestätigt zu werden." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:97 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:107 msgid "confirm" msgstr "bestätigen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:98 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:108 msgid "deny" msgstr "ablehnen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:111 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:121 msgid "remove" msgstr "entfernen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:117 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:127 msgid "Coordinators" msgstr "Koordinatoren" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:124 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:134 msgid "Members" msgstr "Mitglieder" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:127 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:137 #: /Users/msquare/workspace/projects/engelsystem/includes/view/UserAngelTypes_view.php:70 msgid "Add" msgstr "Hinzufügen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:138 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:148 msgid "confirm all" msgstr "Alle bestätigen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:139 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:149 msgid "deny all" msgstr "Alle ablehnen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:160 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:170 msgid "New angeltype" msgstr "Neuer Engeltyp" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:166 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:176 msgid "Membership" msgstr "Mitgliedschaft" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:180 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:190 msgid "FAQ" msgstr "FAQ" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:182 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:192 msgid "" "Here is the list of teams and their tasks. If you have questions, read the " "FAQ." @@ -1660,7 +1822,7 @@ msgstr "" "Hier ist die Liste der Teams und ihrer Aufgaben. Wenn Du Fragen hast, schaue " "im FAQ nach." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:199 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/AngelTypes_view.php:209 msgid "" "This angeltype is restricted by double-opt-in by a team coordinator. Please " "show up at the according introduction meetings." @@ -1677,8 +1839,8 @@ msgid "Your Question:" msgstr "Deine Frage:" #: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftEntry_view.php:17 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:129 #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:131 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:133 msgid "Freeloaded" msgstr "Geschwänzt" @@ -1714,6 +1876,37 @@ msgstr "Typ:" msgid "Comment (for your eyes only):" msgstr "Kommentar (nur für Dich):" +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:18 +msgid "Sign up" +msgstr "Eintragen" + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/Shifts_view.php:73 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:203 +msgid "Location" +msgstr "Ort" + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:12 +#, php-format +msgid "Do you want to delete shifttype %s?" +msgstr "Möchtest Du den Schichttypen %s löschen?" + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:27 +msgid "Edit shifttype" +msgstr "Schichttyp bearbeiten" + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:27 +msgid "Create shifttype" +msgstr "Schichttyp erstellen" + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:46 +#, php-format +msgid "for team %s" +msgstr "für Team %s" + +#: /Users/msquare/workspace/projects/engelsystem/includes/view/ShiftTypes_view.php:71 +msgid "New shifttype" +msgstr "Neuer Schichttyp" + #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:7 msgid "Please select..." msgstr "Bitte auswählen..." @@ -1731,7 +1924,7 @@ msgid "Prename" msgstr "Vorname" #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:54 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:170 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:174 msgid "Arrived" msgstr "Angekommen" @@ -1740,12 +1933,12 @@ msgid "Freeloads" msgstr "Schwänzereien" #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:56 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:171 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:175 msgid "Active" msgstr "Aktiv" #: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:58 -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:172 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:176 msgid "T-Shirt" msgstr "T-Shirt" @@ -1773,52 +1966,48 @@ msgstr "Schicht startet %c" msgid "Shift ends %c" msgstr "Schicht endet %c" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:138 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:142 msgid "sign off" msgstr "abmelden" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:149 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:153 msgid "Sum:" msgstr "Summe:" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:167 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:171 msgid "User state" msgstr "Engelzustand" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:170 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:174 msgid "Not arrived" msgstr "Nicht angekommen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:179 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:183 msgid "Rights" msgstr "Rechte" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:189 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:193 #, fuzzy msgid "iCal Export" msgstr "iCal Export" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:190 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:194 msgid "JSON Export" msgstr "JSON Export" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:199 -msgid "Location" -msgstr "Ort" - -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:200 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:204 msgid "Name & workmates" msgstr "Name & Kollegen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:201 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:205 msgid "Comment" msgstr "Kommentar" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:202 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:206 msgid "Action" msgstr "Aktion" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:204 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:208 #, php-format msgid "" "Go to the shifts table to sign yourself up for some " @@ -1827,7 +2016,7 @@ msgstr "" "Gehe zur Schicht-Tabelle, um Dich für Schichten " "einzutragen." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:214 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:218 msgid "" "We will send you an e-mail with a password recovery link. Please use the " "email address you used for registration." @@ -1836,11 +2025,11 @@ msgstr "" "zurücksetzen kannst. Bitte benutze die Mailadresse, die du bei der Anmeldung " "verwendet hast." -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:217 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:221 msgid "Recover" msgstr "Wiederherstellen" -#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:228 +#: /Users/msquare/workspace/projects/engelsystem/includes/view/User_view.php:232 msgid "Please enter a new password." msgstr "Gib bitte ein neues Passwort ein." @@ -1887,11 +2076,11 @@ msgstr "Möchtest Du wirklich %s zu %s hinzufügen?" msgid "save" msgstr "Speichern" -#: /Users/msquare/workspace/projects/engelsystem/public/index.php:209 +#: /Users/msquare/workspace/projects/engelsystem/public/index.php:223 msgid "No Access" msgstr "Kein Zugriff" -#: /Users/msquare/workspace/projects/engelsystem/public/index.php:210 +#: /Users/msquare/workspace/projects/engelsystem/public/index.php:224 msgid "" "You don't have permission to view this page. You probably have to sign in or " "register in order to gain access!" @@ -1899,6 +2088,9 @@ msgstr "" "Du hast keinen Zugriff auf diese Seite. Registriere Dich und logge Dich " "bitte ein, um Zugriff zu erhalten!" +#~ msgid "Timeslot" +#~ msgstr "Zeiten" + #~ msgid "The first wants to join %s." #~ msgstr "Der erste möchte ein %s werden." diff --git a/public/index.php b/public/index.php index 5c673f0a..967fe3a7 100644 --- a/public/index.php +++ b/public/index.php @@ -15,18 +15,24 @@ require_once realpath(__DIR__ . '/../includes/model/NeededAngelTypes_model.php') require_once realpath(__DIR__ . '/../includes/model/Room_model.php'); require_once realpath(__DIR__ . '/../includes/model/ShiftEntry_model.php'); require_once realpath(__DIR__ . '/../includes/model/Shifts_model.php'); +require_once realpath(__DIR__ . '/../includes/model/ShiftTypes_model.php'); require_once realpath(__DIR__ . '/../includes/model/UserAngelTypes_model.php'); require_once realpath(__DIR__ . '/../includes/model/UserGroups_model.php'); require_once realpath(__DIR__ . '/../includes/model/User_model.php'); require_once realpath(__DIR__ . '/../includes/view/AngelTypes_view.php'); require_once realpath(__DIR__ . '/../includes/view/Questions_view.php'); +require_once realpath(__DIR__ . '/../includes/view/Rooms_view.php'); require_once realpath(__DIR__ . '/../includes/view/Shifts_view.php'); require_once realpath(__DIR__ . '/../includes/view/ShiftEntry_view.php'); +require_once realpath(__DIR__ . '/../includes/view/ShiftTypes_view.php'); require_once realpath(__DIR__ . '/../includes/view/UserAngelTypes_view.php'); require_once realpath(__DIR__ . '/../includes/view/User_view.php'); require_once realpath(__DIR__ . '/../includes/controller/angeltypes_controller.php'); +require_once realpath(__DIR__ . '/../includes/controller/rooms_controller.php'); +require_once realpath(__DIR__ . '/../includes/controller/shifts_controller.php'); +require_once realpath(__DIR__ . '/../includes/controller/shifttypes_controller.php'); require_once realpath(__DIR__ . '/../includes/controller/users_controller.php'); require_once realpath(__DIR__ . '/../includes/controller/user_angeltypes_controller.php'); @@ -85,7 +91,8 @@ $free_pages = array( 'users', 'ical', 'shifts_json_export', - 'atom' + 'shifts', + 'atom' ); // Gewünschte Seite/Funktion @@ -94,10 +101,10 @@ if (! isset($_REQUEST['p'])) $_REQUEST['p'] = isset($user) ? "news" : "login"; if (isset($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && (in_array($_REQUEST['p'], $free_pages) || in_array($_REQUEST['p'], $privileges))) { $p = $_REQUEST['p']; - + $title = $p; $content = ""; - + if ($p == "api") { require_once realpath(__DIR__ . '/../includes/controller/api.php'); error("Api disabled temporily."); @@ -124,10 +131,14 @@ if (isset($_REQUEST['p']) && preg_match("/^[a-z0-9_]*$/i", $_REQUEST['p']) && (i $content = user_password_recovery_controller(); } elseif ($p == "angeltypes") { list($title, $content) = angeltypes_controller(); + } elseif ($p == "shifts") { + list($title, $content) = shifts_controller(); } elseif ($p == "users") { list($title, $content) = users_controller(); } elseif ($p == "user_angeltypes") { list($title, $content) = user_angeltypes_controller(); + } elseif ($p == "shifttypes") { + list($title, $content) = shifttypes_controller(); } elseif ($p == "news") { $title = news_title(); $content = user_news(); @@ -225,7 +236,7 @@ echo template_render('../templates/layout.html', array( 'content' => msg() . $content, 'header_toolbar' => header_toolbar(), 'faq_url' => $faq_url, - 'locale' => $_SESSION['locale'] + 'locale' => $_SESSION['locale'] )); counter();