first commit

This commit is contained in:
Noor E Ilahi
2026-01-09 12:54:53 +05:30
commit 7ccf44f7da
1070 changed files with 113036 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
class BulkDestroyTimeIntervalRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can('bulkDestroy', [TimeInterval::class, request('intervals')]);
}
public function _rules(): array
{
return [
'intervals' => 'required|array',
'intervals.*' => 'int|exists:time_intervals,id'
];
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
class BulkEditTimeIntervalRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
$timeIntervalIds = [];
foreach (request('intervals') as $interval) {
$timeIntervalIds[] = $interval['id'];
}
return $this->user()->can('bulkUpdate', [TimeInterval::class, $timeIntervalIds]);
}
public function _rules(): array
{
return [
'intervals' => 'required|array',
'intervals.*.id' => 'required|int|exists:time_intervals,id',
'intervals.*.task_id' => 'required|int|exists:tasks,id'
];
}
}

View File

@@ -0,0 +1,67 @@
<?php
namespace App\Http\Requests\Interval;
use AllowDynamicProperties;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
use App\Models\User;
use App\Rules\TimeIntervalDoesNotExist;
use Carbon\Carbon;
use Settings;
#[AllowDynamicProperties] class CreateTimeIntervalRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can(
'create',
[
TimeInterval::class,
$this->get('user_id'),
$this->get('task_id'),
$this->get('is_manual', false),
],
);
}
public function _rules(): array
{
$timezone = Settings::scope('core')->get('timezone', 'UTC');
return [
'task_id' => 'required|exists:tasks,id',
'user_id' => 'required|exists:users,id',
'start_at' => 'required|date|bail|before:end_at',
'end_at' => [
'required',
'date',
'bail',
'after:start_at',
new TimeIntervalDoesNotExist(
User::find($this->user_id),
Carbon::parse($this->start_at)->setTimezone($timezone),
Carbon::parse($this->end_at)->setTimezone($timezone),
),
],
'activity_fill' => 'nullable|int|between:0,100',
'mouse_fill' => 'nullable|int|between:0,100',
'keyboard_fill' => 'nullable|int|between:0,100',
'is_manual' => 'sometimes|bool',
'location' => 'sometimes|array',
'screenshot' => 'sometimes|required|image',
];
}
public function getRules($user_id, $start_at, $end_at): array
{
$this->user_id = $user_id;
$this->start_at = $start_at;
$this->end_at = $end_at;
return $this->_rules();
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
use App\Exceptions\Entities\IntervalAlreadyDeletedException;
class DestroyTimeIntervalRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can('destroy', TimeInterval::find(request('id')));
}
protected function failedAuthorization(): void
{
throw new IntervalAlreadyDeletedException;
}
public function _rules(): array
{
return [
'id' => 'required|int|exists:time_intervals,id',
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
class EditTimeIntervalRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can('update', TimeInterval::find(request('id')));
}
public function _rules(): array
{
return [
'id' => 'required|int|exists:time_intervals,id',
];
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
class IntervalTasksRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can('viewAny', TimeInterval::class);
}
public function _rules(): array
{
return [
'start_at' => 'date',
'end_at' => 'date',
'project_id' => 'exists:projects,id',
'task_id' => 'exists:tasks,id',
'user_id' => 'required|integer|exists:users,id',
];
}
}

View File

@@ -0,0 +1,26 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
class IntervalTotalRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can('viewAny', TimeInterval::class);
}
public function _rules(): array
{
return [
'start_at' => 'required|date',
'end_at' => 'required|date',
'user_id' => 'required|integer|exists:users,id',
];
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Requests\Interval;
use App\Helpers\QueryHelper;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Models\TimeInterval;
use App\Http\Requests\CattrFormRequest;
class ListIntervalRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can('viewAny', TimeInterval::class);
}
public function _rules(): array
{
return QueryHelper::getValidationRules();
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
class PutScreenshotRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return true;
}
public function _rules(): array
{
return [
'screenshot' => 'required|image',
];
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
class ScreenshotRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can('view', request('interval'));
}
public function _rules(): array
{
return [];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use App\Models\TimeInterval;
class ShowIntervalRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return $this->user()->can('view', TimeInterval::find(request('id')));
}
public function _rules(): array
{
return [
'id' => 'required|int|exists:time_intervals,id',
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
class TrackAppRequest extends CattrFormRequest
{
use AuthorizesAfterValidation;
public function authorizeValidated(): bool
{
return auth()->check();
}
public function _rules(): array
{
return [
'title' => 'nullable|string',
'executable' => 'required|string',
];
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\AuthorizesAfterValidation;
use App\Http\Requests\CattrFormRequest;
use Illuminate\Http\UploadedFile;
use Illuminate\Validation\Rules\File;
use Str;
class UploadOfflineIntervalsRequest extends CattrFormRequest
{
public function _authorize(): bool
{
return auth()->check();
}
public function _rules(): array
{
return [
'file' => [
'required',
File::types('application/zip')->max(12 * 1024),
function ($_, UploadedFile $file, $fail) {
$fileName = $file->getClientOriginalName();
if (Str::endsWith($fileName, '.cattr') === false) {
$fail('validation.offline-sync.wrong_extension')->translate();
}
}
],
];
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace App\Http\Requests\Interval;
use App\Http\Requests\CattrFormRequest;
use Illuminate\Http\UploadedFile;
use Illuminate\Validation\Rules\File;
use Str;
class UploadOfflineScreenshotsRequest extends CattrFormRequest
{
public function _authorize(): bool
{
return auth()->check();
}
public function _rules(): array
{
return [
'file' => [
'required',
File::types('application/zip'),
function ($_, UploadedFile $file, $fail) {
$fileName = $file->getClientOriginalName();
if (Str::endsWith($fileName, '.cattr') === false) {
$fail('validation.offline-sync.wrong_extension')->translate();
}
}
],
];
}
}