summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authorPhilip Häusler <msquare@notrademark.de>2014-08-23 01:55:18 +0200
committerPhilip Häusler <msquare@notrademark.de>2014-08-23 01:55:18 +0200
commitf5a094fd8b32d44767f7fc30a65f407f4e1d9945 (patch)
treeeac9a223e103c3066ef6e0b57e0bf215eaa89a72 /includes
parent74647e16d37fac9425a4561b49618b52cdc3e75c (diff)
add user view, better bootstrap
Diffstat (limited to 'includes')
-rw-r--r--includes/controller/user_angeltypes_controller.php2
-rw-r--r--includes/controller/users_controller.php15
-rw-r--r--includes/model/AngelType_model.php3
-rw-r--r--includes/model/ShiftEntry_model.php20
-rw-r--r--includes/model/Shifts_model.php137
-rw-r--r--includes/model/UserAngelTypes_model.php9
-rw-r--r--includes/model/UserGroups_model.php17
-rw-r--r--includes/model/User_model.php28
-rw-r--r--includes/pages/admin_questions.php2
-rw-r--r--includes/pages/user_messages.php2
-rw-r--r--includes/pages/user_myshifts.php82
-rw-r--r--includes/pages/user_news.php2
-rw-r--r--includes/pages/user_shifts.php4
-rw-r--r--includes/sys_menu.php2
-rw-r--r--includes/sys_template.php7
-rw-r--r--includes/view/User_view.php148
16 files changed, 322 insertions, 158 deletions
diff --git a/includes/controller/user_angeltypes_controller.php b/includes/controller/user_angeltypes_controller.php
index cb8c72ae..deb9b7f3 100644
--- a/includes/controller/user_angeltypes_controller.php
+++ b/includes/controller/user_angeltypes_controller.php
@@ -12,7 +12,7 @@ function user_angeltypes_unconfirmed_hint() {
return '';
if ($_REQUEST['p'] == 'angeltypes' && $_REQUEST['action'] == 'view' && $_REQUEST['angeltype_id'] == $unconfirmed_user_angeltypes[0]['angeltype_id'])
return '';
- return error(sprintf(ngettext("There is %d unconfirmed angeltype.", "There are %d unconfirmed angeltypes.", count($unconfirmed_user_angeltypes)), count($unconfirmed_user_angeltypes)) . " " . sprintf(_("The first wants to join %s."), '<a href="' . page_link_to('angeltypes') . '&action=view&angeltype_id=' . $unconfirmed_user_angeltypes[0]['angeltype_id'] . '">' . $unconfirmed_user_angeltypes[0]['name'] . '</a>'), true);
+ return error(sprintf(ngettext("There is %d unconfirmed angeltype.", "There are %d unconfirmed angeltypes.", count($unconfirmed_user_angeltypes)), count($unconfirmed_user_angeltypes)) . " " . sprintf(_("The first wants to join %s."), '<a href="' . page_link_to('angeltypes') . '&action=view&angeltype_id=' . $unconfirmed_user_angeltypes[0]['angeltype_id'] . '">' . $unconfirmed_user_angeltypes[0]['name'] . '</a>'));
}
/**
diff --git a/includes/controller/users_controller.php b/includes/controller/users_controller.php
index f65f54e3..77997278 100644
--- a/includes/controller/users_controller.php
+++ b/includes/controller/users_controller.php
@@ -35,9 +35,22 @@ function user_controller() {
$admin_user_privilege = in_array('admin_user', $privileges);
+ $shifts = Shifts_by_user($user_source);
+ foreach ($shifts as &$shift) {
+ $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("
+ SELECT `ShiftEntry`.`freeloaded`, `User`.*
+ FROM `ShiftEntry`
+ JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID`
+ WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . "
+ AND `ShiftEntry`.`TID`=" . sql_escape($needed_angeltype['id']));
+ }
+ }
+
return array(
$user_source['Nick'],
- User_view($user_source)
+ User_view($user_source, $admin_user_privilege, User_is_freeloader($user_source), User_shift_state($user_source), User_angeltypes($user_source), User_groups($user_source), $shifts, $user['UID'] == $user_source['UID'])
);
}
diff --git a/includes/model/AngelType_model.php b/includes/model/AngelType_model.php
index df5e6ae1..d0119e6f 100644
--- a/includes/model/AngelType_model.php
+++ b/includes/model/AngelType_model.php
@@ -2,7 +2,8 @@
/**
* Delete an Angeltype.
- * @param Angeltype $angeltype
+ *
+ * @param Angeltype $angeltype
*/
function AngelType_delete($angeltype) {
return sql_query("
diff --git a/includes/model/ShiftEntry_model.php b/includes/model/ShiftEntry_model.php
index 97fdf784..332620f6 100644
--- a/includes/model/ShiftEntry_model.php
+++ b/includes/model/ShiftEntry_model.php
@@ -1,9 +1,25 @@
<?php
/**
+ * Returns next (or current) shifts of given user.
+ * @param User $user
+ */
+function ShiftEntries_upcoming_for_user($user) {
+ return sql_select("
+ SELECT *
+ FROM `ShiftEntry`
+ JOIN `Shifts` ON `Shifts`.`SID`=`ShiftEntry`.`SID`
+ WHERE `ShiftEntry`.`UID`=" . sql_escape($user['UID']) . "
+ AND `Shifts`.`end` > " . sql_escape(time()) . "
+ ORDER BY `Shifts`.`end`
+ ");
+}
+
+/**
* Returns all shift entries in given shift for given angeltype.
- * @param int $shift_id
- * @param int $angeltype_id
+ *
+ * @param int $shift_id
+ * @param int $angeltype_id
*/
function ShiftEntries_by_shift_and_angeltype($shift_id, $angeltype_id) {
return sql_select("
diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php
index 8cd4b3c2..5d0ec4a2 100644
--- a/includes/model/Shifts_model.php
+++ b/includes/model/Shifts_model.php
@@ -1,79 +1,90 @@
<?php
+function Shifts_by_user($user) {
+ return sql_select("
+ SELECT *
+ FROM `ShiftEntry`
+ JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`)
+ JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`)
+ WHERE `UID`=" . sql_escape($user['UID']) . "
+ ORDER BY `start`
+ ");
+}
/**
* TODO: $_REQUEST is not allowed in model!
* Returns Shift id array
*/
function Shifts_filtered() {
- global $_REQUEST;
- $filter = "";
-
- // filterRoom (Array of integer) - Array of Room IDs (optional, for list request)
- if (isset($_REQUEST['filterRoom']) && is_array($_REQUEST['filterRoom']) ) {
- foreach ( $_REQUEST['filterRoom'] as $key => $value ) {
- $filter .= ", `RID`=" . sql_escape($value) . " ";
- }
- }
-
- //filterTask (Array of integer) - Array if Task (optional, for list request)
- if (isset($_REQUEST['filterTask']) && is_array($_REQUEST['filterTask']) ) {
- foreach ( $_REQUEST['filterTask'] as $key => $value ) {
-// TODO $filter .= ", `RID`=" . sql_escape($value) . " ";
- }
- }
-
- // filterOccupancy (integer) - Occupancy state: (optional, for list request)
- // 1 occupied, 2 free, 3 occupied and free
- if (isset($_REQUEST['filterOccupancy']) && is_array($_REQUEST['filterOccupancy']) ) {
- foreach ( $_REQUEST['filterOccupancy'] as $key => $value ) {
-// TODO $filter .= ", `RID`=" . sql_escape($value) . " ";
- }
- }
-
- // format filter
- if( $filter != "" ) {
- $filter = ' WHERE '. substr($filter, 1);
- }
-
- // real request
- $shifts_source = sql_select("SELECT `SID` FROM `Shifts`". $filter);
- if ($shifts_source === false)
- return false;
- if (count($shifts_source) > 0) {
- return $shifts_source;
- }
- return null;
+ global $_REQUEST;
+ $filter = "";
+
+ // filterRoom (Array of integer) - Array of Room IDs (optional, for list request)
+ if (isset($_REQUEST['filterRoom']) && is_array($_REQUEST['filterRoom'])) {
+ foreach ($_REQUEST['filterRoom'] as $key => $value) {
+ $filter .= ", `RID`=" . sql_escape($value) . " ";
+ }
+ }
+
+ // filterTask (Array of integer) - Array if Task (optional, for list request)
+ if (isset($_REQUEST['filterTask']) && is_array($_REQUEST['filterTask'])) {
+ foreach ($_REQUEST['filterTask'] as $key => $value) {
+ // TODO $filter .= ", `RID`=" . sql_escape($value) . " ";
+ }
+ }
+
+ // filterOccupancy (integer) - Occupancy state: (optional, for list request)
+ // 1 occupied, 2 free, 3 occupied and free
+ if (isset($_REQUEST['filterOccupancy']) && is_array($_REQUEST['filterOccupancy'])) {
+ foreach ($_REQUEST['filterOccupancy'] as $key => $value) {
+ // TODO $filter .= ", `RID`=" . sql_escape($value) . " ";
+ }
+ }
+
+ // format filter
+ if ($filter != "") {
+ $filter = ' WHERE ' . substr($filter, 1);
+ }
+
+ // real request
+ $shifts_source = sql_select("SELECT `SID` FROM `Shifts`" . $filter);
+ if ($shifts_source === false)
+ return false;
+ if (count($shifts_source) > 0) {
+ return $shifts_source;
+ }
+ return null;
}
/**
* Returns Shift by id.
*
- * @param $id Shift ID
+ * @param $id Shift
+ * 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) );
-
- if ($shifts_source === false)
- return false;
- if (count($shifts_source) > 0) {
- $result = $shifts_source[0];
-
- $result['ShiftEntry'] = $shiftsEntry_source;
-
- $temp = NeededAngelTypes_by_shift($id);
- foreach( $temp as $e)
- {
- $result['NeedAngels'][] = array (
- 'TID' => $e['angel_type_id'],
- 'count' => $e['count'],
- 'restricted' => $e['restricted'],
- 'taken' => $e['taken'] );
- }
-
- return $result;
- }
- return null;
+ $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));
+
+ if ($shifts_source === false)
+ return false;
+ if (count($shifts_source) > 0) {
+ $result = $shifts_source[0];
+
+ $result['ShiftEntry'] = $shiftsEntry_source;
+
+ $temp = NeededAngelTypes_by_shift($id);
+ foreach ($temp as $e) {
+ $result['NeedAngels'][] = array(
+ 'TID' => $e['angel_type_id'],
+ 'count' => $e['count'],
+ 'restricted' => $e['restricted'],
+ 'taken' => $e['taken']
+ );
+ }
+
+ return $result;
+ }
+ return null;
}
/**
@@ -92,7 +103,7 @@ function Shifts() {
$needed_angeltypes = NeededAngelTypes_by_shift($shift['SID']);
if ($needed_angeltypes === false)
return false;
-
+
$shift['angeltypes'] = $needed_angeltypes;
}
diff --git a/includes/model/UserAngelTypes_model.php b/includes/model/UserAngelTypes_model.php
index a9944ff1..4a25d25a 100644
--- a/includes/model/UserAngelTypes_model.php
+++ b/includes/model/UserAngelTypes_model.php
@@ -3,6 +3,15 @@
* User angeltypes model
*/
+function User_angeltypes($user) {
+ return sql_select("
+ SELECT `AngelTypes`.*, `UserAngelTypes`.`confirm_user_id`, `UserAngelTypes`.`coordinator`
+ FROM `UserAngelTypes`
+ JOIN `AngelTypes` ON `UserAngelTypes`.`angeltype_id` = `AngelTypes`.`id`
+ WHERE `UserAngelTypes`.`user_id`=" . sql_escape($user['UID']) . "
+ ");
+}
+
/**
* Gets unconfirmed user angeltypes for angeltypes of which the given user is a coordinator.
*
diff --git a/includes/model/UserGroups_model.php b/includes/model/UserGroups_model.php
new file mode 100644
index 00000000..1d018386
--- /dev/null
+++ b/includes/model/UserGroups_model.php
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * Returns users groups
+ * @param User $user
+ */
+function User_groups($user) {
+ return sql_select("
+ SELECT `Groups`.*
+ FROM `UserGroups`
+ JOIN `Groups` ON `Groups`.`UID`=`UserGroups`.`group_id`
+ WHERE `UserGroups`.`uid`=" . sql_escape($user['UID']) . "
+ ORDER BY `UserGroups`.`group_id`
+ ");
+}
+
+?> \ No newline at end of file
diff --git a/includes/model/User_model.php b/includes/model/User_model.php
index c8c48e6c..45600676 100644
--- a/includes/model/User_model.php
+++ b/includes/model/User_model.php
@@ -4,6 +4,34 @@
*/
/**
+ * Returns -seconds until free if user is busy or seconds until next shift.
+ * 0 if there is an error or no upcoming shift.
+ *
+ * @param User $user
+ */
+function User_shift_state($user) {
+ $shifts = ShiftEntries_upcoming_for_user($user);
+ if ($shifts === false)
+ return 0;
+ if (count($shifts) == 0)
+ return 0;
+ if ($shifts[0]['start'] < time())
+ return $shifts[0]['end'] - time();
+ return $shifts[0]['start'] - time();
+}
+
+/**
+ * Returns true if user is freeloader
+ *
+ * @param User $user
+ */
+function User_is_freeloader($user) {
+ global $max_freeloadable_shifts, $user;
+
+ return count(ShiftEntries_freeloaded_by_user($user)) >= $max_freeloadable_shifts;
+}
+
+/**
* Returns all users that are not member of given angeltype.
*
* @param Angeltype $angeltype
diff --git a/includes/pages/admin_questions.php b/includes/pages/admin_questions.php
index 5d4fbd61..8bdde714 100644
--- a/includes/pages/admin_questions.php
+++ b/includes/pages/admin_questions.php
@@ -10,7 +10,7 @@ function admin_new_questions() {
$new_messages = sql_num_query("SELECT * FROM `Questions` WHERE `AID` IS NULL");
if ($new_messages > 0)
- return info('<a href="' . page_link_to("admin_questions") . '">Es gibt unbeantwortete Fragen!</a>', true);
+ info('<a href="' . page_link_to("admin_questions") . '">Es gibt unbeantwortete Fragen!</a>');
}
return "";
diff --git a/includes/pages/user_messages.php b/includes/pages/user_messages.php
index a1b565ec..b0ac66b1 100644
--- a/includes/pages/user_messages.php
+++ b/includes/pages/user_messages.php
@@ -53,7 +53,7 @@ function user_messages() {
return template_render('../templates/user_messages.html', array(
'title' => messages_title(),
'link' => page_link_to("user_messages"),
- 'greeting' => sprintf(_("Hello %s, here can you leave messages for other angels"), User_Nick_render($user)) . '<br /><br />',
+ 'greeting' => msg() . sprintf(_("Hello %s, here can you leave messages for other angels"), User_Nick_render($user)) . '<br /><br />',
'messages' => $messages_html,
'new_label' => _("New"),
'date_label' => _("Date"),
diff --git a/includes/pages/user_myshifts.php b/includes/pages/user_myshifts.php
index 12ba5562..333f9517 100644
--- a/includes/pages/user_myshifts.php
+++ b/includes/pages/user_myshifts.php
@@ -80,86 +80,8 @@ function user_myshifts() {
} else
redirect(page_link_to('user_myshifts'));
}
- $shifts = sql_select("SELECT * FROM `ShiftEntry` JOIN `Shifts` ON (`ShiftEntry`.`SID` = `Shifts`.`SID`) JOIN `Room` ON (`Shifts`.`RID` = `Room`.`RID`) WHERE `UID`=" . sql_escape($shifts_user['UID']) . " ORDER BY `start`");
- $myshifts_table = array();
- $html = "";
- $timesum = 0;
- foreach ($shifts as $shift) {
- $shift_info = $shift['name'];
- $needed_angel_types_source = 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 ($needed_angel_types_source as $needed_angel_type) {
- $shift_info .= '<br><b>' . $needed_angel_type['name'] . ':</b> ';
-
- $users_source = sql_select("SELECT `ShiftEntry`.`freeloaded`, `User`.* FROM `ShiftEntry` JOIN `User` ON `ShiftEntry`.`UID`=`User`.`UID` WHERE `ShiftEntry`.`SID`=" . sql_escape($shift['SID']) . " AND `ShiftEntry`.`TID`=" . sql_escape($needed_angel_type['id']));
- $shift_entries = array();
- foreach ($users_source as $user_source) {
- if ($user['UID'] == $user_source['UID'])
- $member = '<b>' . $user_source['Nick'] . '</b>';
- else
- $member = User_Nick_render($user_source);
- if ($user_source['freeloaded'])
- $member = '<strike>' . $member . '</strike>';
-
- $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']
- );
-
- if ($shift['freeloaded']) {
- if (in_array("user_shifts_admin", $privileges))
- $myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . ': ' . $shift['freeload_comment'] . '</p>';
- else
- $myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . '</p>';
- }
-
- $myshift['actions'] = "";
- if ($id == $user['UID'] || in_array('user_shifts_admin', $privileges))
- $myshift['actions'] .= img_button(page_link_to('user_myshifts') . '&edit=' . $shift['id'] . '&id=' . $id, 'pencil', _("edit"));
- if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges))
- $myshift['actions'] .= img_button(page_link_to('user_myshifts') . (($id != $user['UID']) ? '&id=' . $id : '') . '&cancel=' . $shift['id'], 'cross', _("sign off"));
-
- if ($shift['freeloaded'])
- $timesum += - 2 * ($shift['end'] - $shift['start']);
- else
- $timesum += $shift['end'] - $shift['start'];
- $myshifts_table[] = $myshift;
- }
- if (count($myshifts_table) > 0)
- $myshifts_table[] = array(
- 'date' => '<b>' . _("Sum:") . '</b>',
- 'time' => "<b>" . round($timesum / (60 * 60), 1) . " h</b>",
- 'room' => "",
- 'shift_info' => "",
- 'comment' => "",
- 'actions' => ""
- );
-
- return page_with_title(myshifts_title(), array(
- msg(),
- $id == $user['UID'] ? sprintf(_('These are your shifts.<br/>Please try to appear <b>15 minutes</b> before your shift begins!<br/>You can remove yourself from a shift up to %d hours before it starts.'), $LETZTES_AUSTRAGEN) : '',
- $id != $user['UID'] ? info(sprintf("You are viewing %s's shifts.", $shifts_user['Nick']), true) : '',
- $id != $user['UID'] ? buttons(array(
- button(page_link_to('admin_user') . '&amp;id=' . $shifts_user['UID'], "Edit " . $shifts_user['Nick'], 'edit')
- )) : '',
- table(array(
- 'date' => _("Day"),
- 'time' => _("Time"),
- 'room' => _("Location"),
- 'shift_info' => _("Name &amp; workmates"),
- 'comment' => _("Comment"),
- 'actions' => _("Action")
- ), $myshifts_table),
- $id == $user['UID'] && count($shifts) == 0 ? error(sprintf(_("Go to the <a href=\"%s\">shifts table</a> to sign yourself up for some shifts."), page_link_to('user_shifts')), true) : '',
- '<h2>' . _("Exports") . '</h2>' . sprintf(_("Export of shown shifts. <a href=\"%s\">iCal format</a> or <a href=\"%s\">JSON format</a> available (please keep secret, otherwise <a href=\"%s\">reset the api key</a>)."), page_link_to_absolute('ical') . '&key=' . $shifts_user['api_key'], page_link_to_absolute('shifts_json_export') . '&key=' . $shifts_user['api_key'], page_link_to('user_myshifts') . '&reset')
- ));
+ msg();
+ redirect(page_link_to('users') . '&action=view');
}
?>
diff --git a/includes/pages/user_news.php b/includes/pages/user_news.php
index b8879e62..c4d243f4 100644
--- a/includes/pages/user_news.php
+++ b/includes/pages/user_news.php
@@ -14,7 +14,7 @@ function meetings_title() {
function user_meetings() {
global $DISPLAY_NEWS, $privileges, $user;
- $html = '<div class="col-md-10"><h1>' . meetings_title() . '</h1>';
+ $html = '<div class="col-md-10"><h1>' . meetings_title() . '</h1>' . msg();
if (isset($_REQUEST['page']) && preg_match("/^[0-9]{1,}$/", $_REQUEST['page']))
$page = $_REQUEST['page'];
diff --git a/includes/pages/user_shifts.php b/includes/pages/user_shifts.php
index 2adce0d5..faf6f162 100644
--- a/includes/pages/user_shifts.php
+++ b/includes/pages/user_shifts.php
@@ -6,7 +6,7 @@ function shifts_title() {
function user_shifts() {
global $user, $privileges, $max_freeloadable_shifts;
- if (count(ShiftEntries_freeloaded_by_user($user)) >= $max_freeloadable_shifts)
+ if (User_is_freeloader($user))
redirect(page_link_to('user_myshifts'));
// Löschen einzelner Schicht-Einträge (Also Belegung einer Schicht von Engeln) durch Admins
@@ -743,7 +743,7 @@ function view_user_shifts() {
'filled_select' => make_select($filled, $_SESSION['user_shifts']['filled'], "filled", _("Occupancy")),
'task_notice' => '<sup>1</sup>' . _("The tasks shown here are influenced by the preferences you defined in your settings!") . " <a href=\"" . page_link_to('angeltypes') . '&action=about' . "\">" . _("Description of the jobs.") . "</a>",
'new_style_checkbox' => '<label><input type="checkbox" name="new_style" value="1" ' . ($_SESSION['user_shifts']['new_style'] ? ' checked' : '') . '> ' . _("Use new style if possible") . '</label>',
- 'shifts_table' => $shifts_table,
+ 'shifts_table' =>msg(). $shifts_table,
'ical_text' => '<h2>' . _("iCal export") . '</h2><p>' . sprintf(_("Export of shown shifts. <a href=\"%s\">iCal format</a> or <a href=\"%s\">JSON format</a> available (please keep secret, otherwise <a href=\"%s\">reset the api key</a>)."), page_link_to_absolute('ical') . '&key=' . $user['api_key'], page_link_to_absolute('shifts_json_export') . '&key=' . $user['api_key'], page_link_to('user_myshifts') . '&reset') . '</p>',
'filter' => _("Filter")
)),
diff --git a/includes/sys_menu.php b/includes/sys_menu.php
index 781218f1..407b784c 100644
--- a/includes/sys_menu.php
+++ b/includes/sys_menu.php
@@ -22,7 +22,7 @@ function header_toolbar() {
$toolbar_items[] = toolbar_item_link(page_link_to('register'), 'plus', register_title(), $p == 'register');
if (in_array('user_myshifts', $privileges))
- $toolbar_items[] = toolbar_item_link(page_link_to('user_myshifts'), ' icon-icon_angel', $user['Nick'], $p == 'user_myshifts');
+ $toolbar_items[] = toolbar_item_link(page_link_to('users') . '&amp;action=view', ' icon-icon_angel', $user['Nick'], $p == 'user_myshifts');
if (in_array('user_settings', $privileges))
$toolbar_items[] = toolbar_item_link(page_link_to('user_settings'), 'list-alt', settings_title(), $p == 'user_settings');
diff --git a/includes/sys_template.php b/includes/sys_template.php
index bb3d5731..9fc87ef3 100644
--- a/includes/sys_template.php
+++ b/includes/sys_template.php
@@ -8,6 +8,11 @@ $themes = array(
"1" => "Engelsystem dark"
);
+function div($class, $content = array(), $id = "") {
+ $id = $id != '' ? ' id="' . $id . '"' : '';
+ return '<div' . $id . ' class="' . $class . '">' . join("\n", $content) . '</div>';
+}
+
/**
* Render a toolbar.
*
@@ -273,7 +278,7 @@ function button($href, $label, $class = "") {
* Rendert eine Toolbar mit Knöpfen
*/
function buttons($buttons = array ()) {
- return '<div class="form-group">' . join(' ', $buttons) . '</div>';
+ return '<div class="form-group"><div class="btn-group">' . join(' ', $buttons) . '</div></div>';
}
// Load and render template
diff --git a/includes/view/User_view.php b/includes/view/User_view.php
index 20a6de6e..f7011ffd 100644
--- a/includes/view/User_view.php
+++ b/includes/view/User_view.php
@@ -1,8 +1,126 @@
<?php
-function User_view($user_source) {
+function User_shift_mode_render($shift_mode) {
+ if ($shift_mode == 0)
+ return '<span class="text-success">' . _("Free") . '</span>';
+ if ($shift_mode > 8 * 3600)
+ return '<span class="text-success">' . sprintf(_("Next shift in %s min"), floor($shift_mode / 60)) . '</span>';
+ if ($shift_mode > 0)
+ return '<span class="text-warning">' . sprintf(_("Next shift in %s min"), floor($shift_mode / 60)) . '</span>';
+ if ($shift_mode < 0)
+ return '<span class="text-danger">' . sprintf(_("Current ends in %s min"), floor($shift_mode / 60)) . '</span>';
+}
+
+function User_view($user_source, $admin_user_privilege, $freeloader, $user_shift_mode, $user_angeltypes, $user_groups, $shifts, $its_me) {
+ global $LETZTES_AUSTRAGEN, $privileges;
+
$user_name = htmlspecialchars($user_source['Vorname']) . " " . htmlspecialchars($user_source['Name']);
- return page_with_title('<span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . ' <small>' . $user_name . '</small>', array());
+
+ $myshifts_table = array();
+ $html = "";
+ $timesum = 0;
+ foreach ($shifts as $shift) {
+ $shift_info = $shift['name'];
+ foreach ($shift['needed_angeltypes'] as $needed_angel_type) {
+ $shift_info .= '<br><b>' . $needed_angel_type['name'] . ':</b> ';
+
+ $shift_entries = array();
+ foreach ($needed_angel_type['users'] as $user_source) {
+ if ($its_me)
+ $member = '<strong>' . User_Nick_render($user_source) . '</strong>';
+ else
+ $member = User_Nick_render($user_source);
+ if ($user_source['freeloaded'])
+ $member = '<strike>' . $member . '</strike>';
+
+ $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']
+ );
+
+ if ($shift['freeloaded']) {
+ if (in_array("user_shifts_admin", $privileges))
+ $myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . ': ' . $shift['freeload_comment'] . '</p>';
+ else
+ $myshift['comment'] .= '<br /><p class="error">' . _("Freeloaded") . '</p>';
+ }
+
+ $myshift['actions'] = "";
+ if ($its_me || in_array('user_shifts_admin', $privileges))
+ $myshift['actions'] .= img_button(page_link_to('user_myshifts') . '&edit=' . $shift['id'] . '&id=' . $user_source['UID'], 'pencil', _("edit"));
+ if (($shift['start'] > time() + $LETZTES_AUSTRAGEN * 3600) || in_array('user_shifts_admin', $privileges))
+ $myshift['actions'] .= img_button(page_link_to('user_myshifts') . ((! $its_me) ? '&id=' . $id : '') . '&cancel=' . $shift['id'], 'cross', _("sign off"));
+
+ if ($shift['freeloaded'])
+ $timesum += - 2 * ($shift['end'] - $shift['start']);
+ else
+ $timesum += $shift['end'] - $shift['start'];
+ $myshifts_table[] = $myshift;
+ }
+ if (count($myshifts_table) > 0)
+ $myshifts_table[] = array(
+ 'date' => '<b>' . _("Sum:") . '</b>',
+ 'time' => "<b>" . round($timesum / (60 * 60), 1) . " h</b>",
+ 'room' => "",
+ 'shift_info' => "",
+ 'comment' => "",
+ 'actions' => ""
+ );
+
+ return page_with_title('<span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . ' <small>' . $user_name . '</small>', array(
+ msg(),
+ div('row', array(
+ div('col-md-3', array(
+ '<h1>',
+ '<span class="glyphicon glyphicon-phone"></span>',
+ $user_source['DECT'],
+ '</h1>'
+ )),
+ div('col-md-3', array(
+ '<h4>' . _("User state") . '</h4>',
+ ($admin_user_privilege && $freeloader) ? '<span class="text-danger"><span class="glyphicon glyphicon-exclamation-sign"></span> ' . _("Freeloader") . '</span><br />' : '',
+ $user_source['Gekommen'] ? User_shift_mode_render($user_shift_mode) . '<br />' : '',
+ ($user_source['Gekommen'] ? '<span class="text-success"><span class="glyphicon glyphicon-home"></span> ' . _("Arrived") . '</span>' : '<span class="text-danger">' . _("Not arrived") . '</span>'),
+ ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Aktiv']) ? ' <span class="text-success">' . _("Active") . '</span>' : '',
+ ($user_source['Gekommen'] && $admin_user_privilege && $user_source['Tshirt']) ? ' <span class="text-success">' . _("T-Shirt") . '</span>' : ''
+ )),
+ div('col-md-3', array(
+ '<h4>' . _("Angeltypes") . '</h4>',
+ User_angeltypes_render($user_angeltypes)
+ )),
+ div('col-md-3', array(
+ '<h4>' . _("Rights") . '</h4>',
+ User_groups_render($user_groups)
+ ))
+ )),
+ $admin_user_privilege ? buttons(array(
+ button(page_link_to('admin_user') . '&id=' . $user_source['UID'], '<span class="glyphicon glyphicon-edit"></span> ' . _("edit"))
+ )) : '',
+ ($its_me || $admin_user_privilege) ? '<h2>' . _("Shifts") . '</h2>' : '',
+ ($its_me || $admin_user_privilege) ? table(array(
+ 'date' => _("Day"),
+ 'time' => _("Time"),
+ 'room' => _("Location"),
+ 'shift_info' => _("Name &amp; workmates"),
+ 'comment' => _("Comment"),
+ 'actions' => _("Action")
+ ), $myshifts_table) : '',
+ $its_me && count($shifts) == 0 ? error(sprintf(_("Go to the <a href=\"%s\">shifts table</a> to sign yourself up for some shifts."), page_link_to('user_shifts')), true) : '',
+ ($its_me || $admin_user_privilege) ? '<h2>' . _("Exports") . '</h2>' : '',
+ $its_me ? (sprintf(_("Export of shown shifts. <a href=\"%s\">iCal format</a> or <a href=\"%s\">JSON format</a> available (please keep secret, otherwise <a href=\"%s\">reset the api key</a>)."), page_link_to_absolute('ical') . '&key=' . $user_source['api_key'], page_link_to_absolute('shifts_json_export') . '&key=' . $user_source['api_key'], page_link_to('user_myshifts') . '&reset')) : '',
+ (! $its_me && $admin_user_privilege) ? buttons(array(
+ button(page_link_to_absolute('ical') . '&key=' . $user_source['api_key'], '<span class="glyphicon glyphicon-calendar"></span> ' . _("iCal Export")),
+ button(page_link_to_absolute('shifts_json_export') . '&key=' . $user_source['api_key'], '<span class="glyphicon glyphicon-export"></span> ' . _("JSON Export"))
+ )) : ''
+ ));
}
/**
@@ -53,6 +171,30 @@ function User_password_set_view() {
));
}
+function User_angeltypes_render($user_angeltypes) {
+ $output = array();
+ foreach ($user_angeltypes as $angeltype) {
+ $class = "";
+ if ($angeltype['restricted'] == 1)
+ if ($angeltype['confirm_user_id'] != null)
+ $class = 'text-success';
+ else
+ $class = 'text-warning';
+ else
+ $class = 'text-success';
+ $output[] = '<span class="' . $class . '">' . ($angeltype['coordinator'] ? '<span class="glyphicon glyphicon-certificate"></span> ' : '') . $angeltype['name'] . '</span>';
+ }
+ return join('<br />', $output);
+}
+
+function User_groups_render($user_groups) {
+ $output = array();
+ foreach ($user_groups as $group) {
+ $output[] = substr($group['Name'], 2);
+ }
+ return join('<br />', $output);
+}
+
/**
* Render a users avatar.
*
@@ -72,7 +214,7 @@ function User_Avatar_render($user) {
function User_Nick_render($user_source) {
global $user, $privileges;
if ($user['UID'] == $user_source['UID'] || in_array('user_shifts_admin', $privileges))
- return '<a href="' . page_link_to('user_myshifts') . '&amp;id=' . $user_source['UID'] . '"><span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . '</a>';
+ return '<a href="' . page_link_to('users') . '&amp;action=view&amp;user_id=' . $user_source['UID'] . '"><span class="icon-icon_angel"></span> ' . htmlspecialchars($user_source['Nick']) . '</a>';
else
return htmlspecialchars($user_source['Nick']);
}