218 lines
4.7 KiB
PHP
218 lines
4.7 KiB
PHP
<?php
|
|
|
|
use Engelsystem\Models\User\User;
|
|
use Engelsystem\Models\Worklog;
|
|
|
|
/**
|
|
* Delete a work log entry.
|
|
*
|
|
* @return array
|
|
*/
|
|
function user_worklog_delete_controller()
|
|
{
|
|
$request = request();
|
|
$worklog = Worklog::find($request->input('user_worklog_id'));
|
|
if (empty($worklog)) {
|
|
throw_redirect(user_link(auth()->user()->id));
|
|
}
|
|
$user = $worklog->user;
|
|
|
|
if ($request->hasPostData('submit')) {
|
|
UserWorkLog_delete($worklog);
|
|
|
|
success(__('Work log entry deleted.'));
|
|
throw_redirect(user_link($user->id));
|
|
}
|
|
|
|
return [
|
|
UserWorkLog_delete_title(),
|
|
UserWorkLog_delete_view($user)
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Edit work log for user.
|
|
*
|
|
* @return array
|
|
*/
|
|
function user_worklog_edit_controller()
|
|
{
|
|
$request = request();
|
|
$worklog = Worklog::find($request->input('user_worklog_id'));
|
|
if (empty($worklog)) {
|
|
throw_redirect(user_link(auth()->user()->id));
|
|
}
|
|
$user = $worklog->user;
|
|
|
|
if ($request->hasPostData('submit')) {
|
|
list ($valid, $worklog) = user_worklog_from_request($worklog);
|
|
|
|
if ($valid) {
|
|
$worklog->save();
|
|
|
|
engelsystem_log(sprintf(
|
|
'Updated work log for %s, %s hours, %s',
|
|
User_Nick_render($worklog->user, true),
|
|
$worklog->hours,
|
|
$worklog->comment
|
|
));
|
|
|
|
success(__('Work log entry updated.'));
|
|
throw_redirect(user_link($user->id));
|
|
}
|
|
}
|
|
|
|
return [
|
|
UserWorkLog_edit_title(),
|
|
UserWorkLog_edit_view($user, $worklog)
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Handle form
|
|
*
|
|
* @param Worklog $worklog
|
|
* @return bool[]|Worklog[] [bool $valid, Worklog $worklog]
|
|
*/
|
|
function user_worklog_from_request(Worklog $worklog)
|
|
{
|
|
$request = request();
|
|
|
|
$valid = true;
|
|
|
|
$worklog->worked_at = DateTime::createFromFormat('Y-m-d H:i', $request->input('work_timestamp') . ' 00:00');
|
|
if (!$worklog->worked_at) {
|
|
$valid = false;
|
|
error(__('Please enter work date.'));
|
|
}
|
|
|
|
$worklog->hours = $request->input('work_hours');
|
|
if (!preg_match("/^\d+(\.\d{0,2})?$/", $worklog->hours)) {
|
|
$valid = false;
|
|
error(__('Please enter work hours in format ##[.##].'));
|
|
}
|
|
|
|
$worklog->comment = $request->input('comment');
|
|
if (empty($worklog->comment)) {
|
|
$valid = false;
|
|
error(__('Please enter a comment.'));
|
|
}
|
|
|
|
if (mb_strlen($worklog->comment) > 200) {
|
|
$valid = false;
|
|
error(__('Comment too long.'));
|
|
}
|
|
|
|
return [
|
|
$valid,
|
|
$worklog
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Add work log entry to user.
|
|
*
|
|
* @return array
|
|
*/
|
|
function user_worklog_add_controller()
|
|
{
|
|
$request = request();
|
|
$user = User::find($request->input('user_id'));
|
|
if (!$user) {
|
|
throw_redirect(user_link(auth()->user()->id));
|
|
}
|
|
|
|
$worklog = UserWorkLog_new($user->id);
|
|
|
|
if ($request->hasPostData('submit')) {
|
|
list ($valid, $worklog) = user_worklog_from_request($worklog);
|
|
|
|
if ($valid) {
|
|
UserWorkLog_create($worklog);
|
|
|
|
success(__('Work log entry created.'));
|
|
throw_redirect(user_link($user->id));
|
|
}
|
|
}
|
|
|
|
return [
|
|
UserWorkLog_add_title(),
|
|
UserWorkLog_add_view($user, $worklog)
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Link to work log entry add for given user.
|
|
*
|
|
* @param User $user
|
|
*
|
|
* @return string
|
|
*/
|
|
function user_worklog_add_link(User $user)
|
|
{
|
|
return page_link_to('user_worklog', [
|
|
'action' => 'add',
|
|
'user_id' => $user->id,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Link to work log entry edit.
|
|
*
|
|
* @param Worklog $worklog
|
|
* @return string
|
|
*/
|
|
function user_worklog_edit_link(Worklog $worklog)
|
|
{
|
|
return page_link_to('user_worklog', [
|
|
'action' => 'edit',
|
|
'user_worklog_id' => $worklog->id
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Link to work log entry delete.
|
|
*
|
|
* @param Worklog $worklog
|
|
* @param array[] $parameters
|
|
* @return string
|
|
*/
|
|
function user_worklog_delete_link(Worklog $worklog, $parameters = [])
|
|
{
|
|
return page_link_to('user_worklog', array_merge([
|
|
'action' => 'delete',
|
|
'user_worklog_id' => $worklog->id
|
|
], $parameters));
|
|
}
|
|
|
|
/**
|
|
* Work log entry actions
|
|
*
|
|
* @return array
|
|
*/
|
|
function user_worklog_controller()
|
|
{
|
|
$user = auth()->user();
|
|
|
|
if (!auth()->can('admin_user_worklog')) {
|
|
throw_redirect(user_link($user->id));
|
|
}
|
|
|
|
$request = request();
|
|
$action = $request->input('action');
|
|
if (!$request->has('action')) {
|
|
throw_redirect(user_link($user->id));
|
|
}
|
|
|
|
switch ($action) {
|
|
case 'add':
|
|
return user_worklog_add_controller();
|
|
case 'edit':
|
|
return user_worklog_edit_controller();
|
|
case 'delete':
|
|
return user_worklog_delete_controller();
|
|
}
|
|
|
|
return ['', ''];
|
|
}
|