summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsquare <msquare@notrademark.de>2017-12-27 14:41:07 +0100
committerGitHub <noreply@github.com>2017-12-27 14:41:07 +0100
commite0ce3168e26ec392de922f8afcfd1e32bd9f27b6 (patch)
tree8da5c42f5c49ec15eceaf7a1a6de6990e0bd9900
parent02b775684d643850e4a4ea3d9ac7028b6af3b469 (diff)
parentb00743d6d3a47abf606cf6fc10e1a5792873893b (diff)
Merge pull request #397 from MyIgel/master
Filter angel types based on account settings, closes #362
-rw-r--r--includes/controller/shift_entries_controller.php4
-rw-r--r--includes/model/UserAngelTypes_model.php17
-rw-r--r--includes/pages/user_shifts.php49
-rw-r--r--includes/view/User_view.php26
-rw-r--r--locale/de_DE.UTF-8/LC_MESSAGES/default.mobin43684 -> 43711 bytes
-rw-r--r--locale/de_DE.UTF-8/LC_MESSAGES/default.po8
-rw-r--r--public/js/forms.js37
7 files changed, 102 insertions, 39 deletions
diff --git a/includes/controller/shift_entries_controller.php b/includes/controller/shift_entries_controller.php
index 818557a4..ea5e319e 100644
--- a/includes/controller/shift_entries_controller.php
+++ b/includes/controller/shift_entries_controller.php
@@ -10,8 +10,8 @@ use Engelsystem\ShiftSignupState;
function shift_entries_controller()
{
global $user;
-
- if(!isset($user)) {
+
+ if (!isset($user)) {
redirect(page_link_to('login'));
}
diff --git a/includes/model/UserAngelTypes_model.php b/includes/model/UserAngelTypes_model.php
index 7b22e347..71901b97 100644
--- a/includes/model/UserAngelTypes_model.php
+++ b/includes/model/UserAngelTypes_model.php
@@ -226,3 +226,20 @@ function UserAngelType_by_User_and_AngelType($user, $angeltype)
]
);
}
+
+/**
+ * Get an UserAngelTypes by user
+ *
+ * @param array $user
+ * @return array[]|null
+ */
+function UserAngelTypes_by_User($user)
+{
+ return DB::select('
+ SELECT *
+ FROM `UserAngelTypes`
+ WHERE `user_id`=?
+ ',
+ [$user['UID']]
+ );
+}
diff --git a/includes/pages/user_shifts.php b/includes/pages/user_shifts.php
index 2c30c86a..d822054e 100644
--- a/includes/pages/user_shifts.php
+++ b/includes/pages/user_shifts.php
@@ -186,6 +186,7 @@ function view_user_shifts()
$session->set('ShiftsFilter', $shiftsFilter);
}
+ /** @var ShiftsFilter $shiftsFilter */
$shiftsFilter = $session->get('ShiftsFilter');
update_ShiftsFilter($shiftsFilter, in_array('user_shifts_admin', $privileges), $days);
@@ -214,6 +215,11 @@ function view_user_shifts()
info(render_user_arrived_hint());
}
+ $ownTypes = [];
+ foreach (UserAngelTypes_by_User($user) as $type) {
+ $ownTypes[] = (int)$type['angeltype_id'];
+ }
+
return page([
div('col-md-12', [
msg(),
@@ -238,7 +244,13 @@ function view_user_shifts()
$types,
$shiftsFilter->getTypes(),
'types',
- _('Angeltypes') . '<sup>1</sup>'
+ _('Angeltypes') . '<sup>1</sup>',
+ [
+ button(
+ 'javascript: checkOwnTypes(\'selection_types\', ' . json_encode($ownTypes) . ')',
+ _('Own')
+ ),
+ ]
),
'filled_select' => make_select($filled, $shiftsFilter->getFilled(), 'filled', _('Occupancy')),
'task_notice' =>
@@ -269,12 +281,12 @@ function view_user_shifts()
/**
* Returns a hint for the user how the ical feature works.
*/
-function ical_hint() {
+function ical_hint()
+{
global $user;
return heading(
- _('iCal export'), 2)
- . '<p>' . sprintf(
+ _('iCal export'), 2) . '<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('ical', ['key' => $user['api_key']]),
page_link_to('shifts_json_export', ['key' => $user['api_key']]),
@@ -291,15 +303,23 @@ function get_ids_from_array($array)
return $array['id'];
}
-function make_select($items, $selected, $name, $title = null)
+/**
+ * @param array $items
+ * @param array $selected
+ * @param string $name
+ * @param string $title
+ * @param array $additionalButtons
+ * @return string
+ */
+function make_select($items, $selected, $name, $title = null, $additionalButtons = [])
{
- $html_items = [];
+ $htmlItems = [];
if (isset($title)) {
- $html_items[] = '<h4>' . $title . '</h4>' . "\n";
+ $htmlItems[] = '<h4>' . $title . '</h4>' . "\n";
}
foreach ($items as $i) {
- $html_items[] = '<div class="checkbox">'
+ $htmlItems[] = '<div class="checkbox">'
. '<label><input type="checkbox" name="' . $name . '[]" value="' . $i['id'] . '" '
. (in_array($i['id'], $selected) ? ' checked="checked"' : '')
. ' > ' . $i['name'] . '</label>'
@@ -307,11 +327,14 @@ function make_select($items, $selected, $name, $title = null)
. '</div><br />';
}
$html = '<div id="selection_' . $name . '" class="selection ' . $name . '">' . "\n";
- $html .= implode("\n", $html_items);
- $html .= buttons([
- button('javascript: checkAll(\'selection_' . $name . '\', true)', _('All'), ''),
- button('javascript: checkAll(\'selection_' . $name . '\', false)', _('None'), '')
- ]);
+ $html .= implode("\n", $htmlItems);
+
+ $buttons = [];
+ $buttons[] = button('javascript: checkAll(\'selection_' . $name . '\', true)', _('All'));
+ $buttons[] = button('javascript: checkAll(\'selection_' . $name . '\', false)', _('None'));
+ $buttons = array_merge($buttons, $additionalButtons);
+ $html .= buttons($buttons);
+
$html .= '</div>' . "\n";
return $html;
}
diff --git a/includes/view/User_view.php b/includes/view/User_view.php
index 198897f3..16267635 100644
--- a/includes/view/User_view.php
+++ b/includes/view/User_view.php
@@ -351,8 +351,11 @@ function User_view_myshift($shift, $user_source, $its_me)
}
$myshift = [
- 'date' => glyph('calendar') . date('Y-m-d', $shift['start']) . '<br>'
- . glyph('time') . date('H:i', $shift['start']) . ' - ' . date('H:i', $shift['end']),
+ 'date' => glyph('calendar')
+ . date('Y-m-d', $shift['start']) . '<br>'
+ . glyph('time') . date('H:i', $shift['start'])
+ . ' - '
+ . date('H:i', $shift['end']),
'duration' => round(($shift['end'] - $shift['start']) / 3600, 2) . ' h',
'room' => Room_name_render($shift),
'shift_info' => $shift_info,
@@ -364,7 +367,9 @@ function User_view_myshift($shift, $user_source, $its_me)
}
if ($shift['freeloaded']) {
- $myshift['duration'] = '<p class="text-danger">' . round(-($shift['end'] - $shift['start']) / 3600 * 2, 2) . ' h' . '</p>';
+ $myshift['duration'] = '<p class="text-danger">'
+ . round(-($shift['end'] - $shift['start']) / 3600 * 2, 2) . ' h'
+ . '</p>';
if (in_array('user_shifts_admin', $privileges)) {
$myshift['comment'] .= '<br />'
. '<p class="text-danger">' . _('Freeloaded') . ': ' . $shift['freeload_comment'] . '</p>';
@@ -424,7 +429,7 @@ function User_view_myshifts($shifts, $user_source, $its_me, $tshirt_score, $tshi
'comment' => '',
'actions' => ''
];
- if($its_me || $tshirt_admin) {
+ if ($its_me || $tshirt_admin) {
$myshifts_table[] = [
'date' => '<b>' . _('Your t-shirt score') . '&trade;:</b>',
'duration' => '<b>' . round($tshirt_score, 2) . ' h</b>',
@@ -452,8 +457,17 @@ function User_view_myshifts($shifts, $user_source, $its_me, $tshirt_score, $tshi
* @param bool $tshirt_admin
* @return string
*/
-function User_view($user_source, $admin_user_privilege, $freeloader, $user_angeltypes, $user_groups, $shifts, $its_me, $tshirt_score, $tshirt_admin)
-{
+function User_view(
+ $user_source,
+ $admin_user_privilege,
+ $freeloader,
+ $user_angeltypes,
+ $user_groups,
+ $shifts,
+ $its_me,
+ $tshirt_score,
+ $tshirt_admin
+) {
$user_name = htmlspecialchars($user_source['Vorname']) . ' ' . htmlspecialchars($user_source['Name']);
$myshifts_table = User_view_myshifts($shifts, $user_source, $its_me, $tshirt_score, $tshirt_admin);
diff --git a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo
index a58c3a05..b7f8e941 100644
--- a/locale/de_DE.UTF-8/LC_MESSAGES/default.mo
+++ b/locale/de_DE.UTF-8/LC_MESSAGES/default.mo
Binary files differ
diff --git a/locale/de_DE.UTF-8/LC_MESSAGES/default.po b/locale/de_DE.UTF-8/LC_MESSAGES/default.po
index a093149f..4d6a5807 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: 2017-12-27 12:17+0100\n"
-"PO-Revision-Date: 2017-12-27 12:17+0100\n"
+"POT-Creation-Date: 2017-12-27 13:38+0100\n"
+"PO-Revision-Date: 2017-12-27 13:38+0100\n"
"Last-Translator: msquare <msquare@notrademark.de>\n"
"Language-Team: \n"
"Language: de_DE\n"
@@ -1867,6 +1867,10 @@ msgstr "belegt"
msgid "free"
msgstr "frei"
+#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:251
+msgid "Own"
+msgstr "Eigene"
+
#: /Users/msquare/workspace/projects/engelsystem/includes/pages/user_shifts.php:243
msgid "Occupancy"
msgstr "Belegung"
diff --git a/public/js/forms.js b/public/js/forms.js
index c7f4a095..1efd80bb 100644
--- a/public/js/forms.js
+++ b/public/js/forms.js
@@ -1,20 +1,25 @@
/**
- * Runs through the DOM under the element with the given id, finds all
- * checkboxes and sets them to the wanted state.
+ * Sets all checkboxes to the wanted state
*
- * @param String
- * id Id of the element containing all the checkboxes
- * @param Boolean
- * checked True if the checkboxes should be checked
+ * @param {string} id Id of the element containing all the checkboxes
+ * @param {bool} checked True if the checkboxes should be checked
*/
function checkAll(id, checked) {
- var obj = document.getElementById(id);
- var boxes = obj.getElementsByTagName("input");
- for (var i = 0; i < boxes.length; i++) {
- if (boxes[i].type === "checkbox" && !boxes[i].disabled) {
- boxes[i].checked = checked;
- }
- }
+ $("#" + id + " input[type='checkbox']").each(function () {
+ this.checked = checked;
+ });
+}
+
+/**
+ * Sets the checkboxes according to the given type
+ *
+ * @param {string} id The elements ID
+ * @param {list} shifts_list A list of numbers
+ */
+function checkOwnTypes(id, shifts_list) {
+ $('#' + id + ' input[type=checkbox]').each(function () {
+ this.checked = $.inArray(parseInt(this.value), shifts_list);
+ });
}
/**
@@ -82,8 +87,8 @@ $(function () {
$("input[type='submit']").prop("readonly", true).addClass("disabled");
return true;
});
-
- $(".dropdown-menu").css("max-height", function() {
- return ($(window).height() - 50) + "px";
+
+ $(".dropdown-menu").css("max-height", function () {
+ return ($(window).height() - 50) + "px";
}).css("overflow-y", "scroll");
});