public function syncWithJira() { $staff_list = Staff::all(); Timelog::where('project_id', '=', $this->id)->delete(); $issue_service = new IssueService(app(ConfigurationInterface::class)); $start = 0; while (1) { try { $issues = $issue_service->search("project={$this->jira_key} and timespent>0 and updated >= {$this->start_date}", $start, 250, ["key", "worklog"]); } catch (JiraException $exception) { return false; } if (count($issues->getIssues()) == 0) { break; } $timelogs = []; foreach ($issues->getIssues() as $issue) { $jira_work_logs = $issue->fields->worklog->worklogs; foreach ($jira_work_logs as $jira_work_log) { if (!isset($jira_work_log->author)) { continue; } $employee = $staff_list->where('email', $jira_work_log->author->emailAddress)->first(); if ($employee == null) { continue; } $timelogs[] = ['project_id' => $this->id, 'staff_id' => $employee->id, 'time_spent' => $jira_work_log->timeSpentSeconds, 'jira_id' => $jira_work_log->id, 'started' => $jira_work_log->started]; } } Timelog::insert($timelogs); $start += count($issues->getIssues()); } return true; }