From b6c6c28d6ca8b635ca65fff470b59bd06d767aa6 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 6 Jan 2018 22:12:26 -0700 Subject: [PATCH] Add getjobs and setjob APIs --- action.php | 2 +- api.php | 52 +++++++++++++++++++++++++++++++++++++++++++++++++- pages/jobs.php | 7 ++++++- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/action.php b/action.php index 016e4bc..80a6c09 100644 --- a/action.php +++ b/action.php @@ -252,7 +252,7 @@ switch ($VARS['action']) { foreach ($groups as $g) { $gids[] = $g['id']; } - $job = $database->has('jobs', ['[>]job_groups' => ['jobid']], ["AND" => ["OR" => ['groupid' => $gids, 'groupid #-1' => -1], 'deleted' => 0]]); + $job = $database->has('jobs', ['[>]job_groups' => ['jobid']], ["AND" => ["OR" => ['groupid' => $gids, 'groupid #-1' => -1], 'deleted' => 0, 'jobs.jobid' => $VARS['job']]]); } else { $job = $database->has('jobs', 'jobid', ['jobid' => $VARS['job']]); } diff --git a/api.php b/api.php index 754f240..8dc1bfe 100644 --- a/api.php +++ b/api.php @@ -7,7 +7,7 @@ /** * Simple JSON API to allow other apps to access data from this app. - * + * * Requests can be sent via either GET or POST requests. POST is recommended * as it has a lower chance of being logged on the server, exposing unencrypted * user passwords. @@ -117,6 +117,56 @@ switch ($VARS['action']) { $shifts[$i]['day_list'] = $days; } exit(json_encode(["status" => "OK", "shifts" => $shifts])); + case "getjobs": + $jobs = []; + if ($database->count("job_groups") > 0) { + require_once __DIR__ . "/lib/userinfo.php"; + $groups = getGroupsByUID($userinfo['uid']); + $gids = []; + foreach ($groups as $g) { + $gids[] = $g['id']; + } + $jobs = $database->select('jobs', ['[>]job_groups' => ['jobid']], ['jobs.jobid (id)', 'jobname (name)', 'jobcode (code)', 'color'], ["AND" => ["OR" => ['groupid' => $gids, 'groupid #-1' => -1], 'deleted' => 0]]); + } else { + $jobs = $database->select('jobs', ['jobid (id)', 'jobname (name)', 'jobcode (code)', 'color'], ['deleted' => 0]); + } + $jobids = []; + $out = []; + foreach ($jobs as $job) { + if (in_array($job['id'], $jobids)) { + continue; + } + $jobids[] = $job['id']; + $out[] = $job; + } + exit(json_encode(["status" => "OK", "jobs" => $out])); + case "setjob": + if (is_empty($VARS['job'])) { + exit(json_encode(["status" => "ERROR", "msg" => lang("invalid job", false)])); + } + if ($database->count("job_groups") > 0) { + require_once __DIR__ . "/lib/userinfo.php"; + $groups = getGroupsByUID($userinfo['uid']); + $gids = []; + foreach ($groups as $g) { + $gids[] = $g['id']; + } + $job = $database->has('jobs', ['[>]job_groups' => ['jobid']], ["AND" => ["OR" => ['groupid' => $gids, 'groupid #-1' => -1], 'deleted' => 0, 'jobs.jobid' => $VARS['job']]]); + } else { + $job = $database->has('jobs', 'jobid', ['jobid' => $VARS['job']]); + } + if ($job === true) { + // Stop other jobs + $database->update('job_tracking', ['end' => date("Y-m-d H:i:s")], ['AND' => ['uid' => $userinfo['uid'], 'end' => null]]); + $database->insert('job_tracking', ['uid' => $userinfo['uid'], 'jobid' => $VARS['job'], 'start' => date("Y-m-d H:i:s")]); + exit(json_encode(["status" => "OK", "msg" => lang("job changed", false)])); + } else if ($VARS['job'] == "-1") { + $database->update('job_tracking', ['end' => date("Y-m-d H:i:s")], ['AND' => ['uid' => $userinfo['uid'], 'end' => null]]); + exit(json_encode(["status" => "OK", "msg" => lang("job changed", false)])); + } else { + exit(json_encode(["status" => "ERROR", "msg" => lang("invalid job", false)])); + } + break; default: http_response_code(404); die("\"404 Action not found\""); diff --git a/pages/jobs.php b/pages/jobs.php index 84c7592..a5f4103 100644 --- a/pages/jobs.php +++ b/pages/jobs.php @@ -28,12 +28,17 @@ redirectifnotloggedin(); foreach ($groups as $g) { $gids[] = $g['id']; } - $jobs = $database->select('jobs', ['[>]job_groups' => ['jobid']], ['jobs.jobid', 'jobname', 'jobcode', 'color'], ["AND" => ["OR" => ['groupid' => $gids, 'groupid #-1' => -1], 'deleted' => 0]]); + $jobs = $database->select('job_groups', ['[>]jobs' => ['jobid']], ['jobs.jobid', 'jobname', 'jobcode', 'color'], ["AND" => ["OR" => ['groupid' => $gids, 'groupid #-1' => -1], 'deleted' => 0]]); } else { $jobs = $database->select('jobs', ['jobid', 'jobname', 'jobcode', 'color'], ['deleted' => 0]); } + $jobids = []; foreach ($jobs as $job) { + if (in_array($job['jobid'], $jobids)) { + continue; + } + $jobids[] = $job['jobid']; $color = "default"; if (!is_null($job['color']) && $job['color'] != "") { $color = $job['color'];