summaryrefslogtreecommitdiff
path: root/includes/controller
diff options
context:
space:
mode:
Diffstat (limited to 'includes/controller')
-rw-r--r--includes/controller/user_worklog_controller.php189
-rw-r--r--includes/controller/users_controller.php4
2 files changed, 192 insertions, 1 deletions
diff --git a/includes/controller/user_worklog_controller.php b/includes/controller/user_worklog_controller.php
new file mode 100644
index 00000000..ba91534b
--- /dev/null
+++ b/includes/controller/user_worklog_controller.php
@@ -0,0 +1,189 @@
+<?php
+
+/**
+ * Delete a work log entry.
+ */
+function user_worklog_delete_controller()
+{
+ global $user;
+
+ $request = request();
+ $userWorkLog = UserWorkLog($request->input('user_worklog_id'));
+ if (empty($userWorkLog)) {
+ redirect(user_link($user));
+ }
+ $user_source = User($userWorkLog['user_id']);
+
+ if ($request->has('confirmed')) {
+ UserWorkLog_delete($userWorkLog);
+
+ success(_('Work log entry deleted.'));
+ redirect(user_link($user_source));
+ }
+
+ return [
+ UserWorkLog_delete_title(),
+ UserWorkLog_delete_view($user_source, $userWorkLog)
+ ];
+}
+
+/**
+ * Edit work log for user.
+ */
+function user_worklog_edit_controller()
+{
+ global $user;
+
+ $request = request();
+ $userWorkLog = UserWorkLog($request->input('user_worklog_id'));
+ if (empty($userWorkLog)) {
+ redirect(user_link($user));
+ }
+ $user_source = User($userWorkLog['user_id']);
+
+ if ($request->has('submit')) {
+ list ($valid, $userWorkLog) = user_worklog_from_request($userWorkLog);
+
+ if ($valid) {
+ UserWorkLog_update($userWorkLog);
+
+ success(_('Work log entry updated.'));
+ redirect(user_link($user_source));
+ }
+ }
+
+ return [
+ UserWorkLog_edit_title(),
+ UserWorkLog_edit_view($user_source, $userWorkLog)
+ ];
+}
+
+/**
+ *
+ * @param UserWorkLog $userWorkLog
+ * @return [bool $valid, UserWorkLog $userWorkLog]
+ */
+function user_worklog_from_request($userWorkLog)
+{
+ $request = request();
+
+ $valid = true;
+
+ $userWorkLog['work_hours'] = $request->input('work_hours');
+ if (! preg_match("/[0-9]+(\.[0-9]+)?/", $userWorkLog['work_hours'])) {
+ $valid = false;
+ error(_('Please enter work hours in format ##[.##].'));
+ }
+
+ $userWorkLog['comment'] = $request->input('comment');
+ if (empty($userWorkLog['comment'])) {
+ $valid = false;
+ error(_('Please enter a comment.'));
+ }
+
+ return [
+ $valid,
+ $userWorkLog
+ ];
+}
+
+/**
+ * Add work log entry to user.
+ */
+function user_worklog_add_controller()
+{
+ global $user;
+
+ $request = request();
+ $user_source = User($request->input('user_id'));
+ if (empty($user_source)) {
+ redirect(user_link($user));
+ }
+
+ $userWorkLog = UserWorkLog_new($user_source);
+
+ if ($request->has('submit')) {
+ list ($valid, $userWorkLog) = user_worklog_from_request($userWorkLog);
+
+ if ($valid) {
+ UserWorkLog_create($userWorkLog);
+
+ success(_('Work log entry created.'));
+ redirect(user_link($user_source));
+ }
+ }
+
+ return [
+ UserWorkLog_add_title(),
+ UserWorkLog_add_view($user_source, $userWorkLog)
+ ];
+}
+
+/**
+ * Link to work log entry add for given user.
+ *
+ * @param User $user
+ */
+function user_worklog_add_link($user)
+{
+ return page_link_to('user_worklog', [
+ 'action' => 'add',
+ 'user_id' => $user['UID']
+ ]);
+}
+
+/**
+ * Link to work log entry edit.
+ *
+ * @param UserWorkLog $userWorkLog
+ */
+function user_worklog_edit_link($userWorkLog)
+{
+ return page_link_to('user_worklog', [
+ 'action' => 'edit',
+ 'user_worklog_id' => $userWorkLog['id']
+ ]);
+}
+
+/**
+ * Link to work log entry delete.
+ *
+ * @param UserWorkLog $userWorkLog
+ * @param array[] $parameters
+ */
+function user_worklog_delete_link($userWorkLog, $parameters = [])
+{
+ return page_link_to('user_worklog', array_merge([
+ 'action' => 'delete',
+ 'user_worklog_id' => $userWorkLog['id']
+ ], $parameters));
+}
+
+/**
+ * Work log entry actions
+ */
+function user_worklogs_controller()
+{
+ global $user, $privileges;
+
+ if (! in_array('admin_user_worklog', $privileges)) {
+ redirect(user_link($user));
+ }
+
+ $request = request();
+ $action = $request->input('action');
+ if (! $request->has('action')) {
+ redirect(user_link($user));
+ }
+
+ switch ($action) {
+ case 'add':
+ return user_worklog_add_controller();
+ case 'edit':
+ return user_worklog_edit_controller();
+ case 'delete':
+ return user_worklog_delete_controller();
+ }
+}
+
+?> \ No newline at end of file
diff --git a/includes/controller/users_controller.php b/includes/controller/users_controller.php
index a2a28410..c763cd48 100644
--- a/includes/controller/users_controller.php
+++ b/includes/controller/users_controller.php
@@ -242,7 +242,9 @@ function user_controller()
$shifts,
$user['UID'] == $user_source['UID'],
$tshirt_score,
- in_array('admin_active', $privileges)
+ in_array('admin_active', $privileges),
+ in_array('admin_user_worklog', $privileges),
+ UserWorkLogsForUser($user_source)
)
];
}