19 use Illuminate\Database\Capsule\Manager as Capsule;
90 if ($this->dateStart) {
91 $q->where(
's.date_submitted',
'>=', $this->dateStart);
94 $q->where(
's.date_submitted',
'<=', $this->dateEnd);
115 $q->leftJoin(
'edit_decisions as ed',
's.submission_id',
'=',
'ed.submission_id')
116 ->whereIn(
'ed.decision', $decisions);
118 if ($forSubmittedDate) {
119 if ($this->dateStart) {
120 $q->where(
's.date_submitted',
'>=', $this->dateStart);
122 if ($this->dateEnd) {
124 $dateTime = new \DateTime($this->dateEnd);
125 $dateTime->add(
new \DateInterval(
'P1D'));
126 $q->where(
's.date_submitted',
'<', $dateTime->format(
'Y-m-d'));
130 if ($this->dateStart) {
131 $q->where(
'ed.date_decided',
'>=', $this->dateStart);
133 if ($this->dateEnd) {
135 $dateTime = new \DateTime($this->dateEnd);
136 $dateTime->add(
new \DateInterval(
'P1D'));
137 $q->where(
'ed.date_decided',
'<', $dateTime->format(
'Y-m-d'));
146 $declineDecisions = [SUBMISSION_EDITOR_DECISION_DECLINE, SUBMISSION_EDITOR_DECISION_INITIAL_DECLINE];
147 if (count(array_intersect($declineDecisions, $decisions))) {
148 $q->where(
's.status',
'=', STATUS_DECLINED);
150 $q->where(
's.status',
'!=', STATUS_DECLINED);
153 $q->select(Capsule::raw(
'COUNT(DISTINCT s.submission_id) as count'));
155 return $q->get()->first()->count;
166 ->whereIn(
's.status', (array) $status)
177 import(
'lib.pkp.classes.submission.PKPSubmission');
180 ->where(
's.status',
'=', STATUS_QUEUED)
181 ->whereIn(
's.stage_id', $stages)
192 ->where(
's.status',
'=', STATUS_PUBLISHED);
197 if ($this->dateStart || $this->dateEnd) {
198 $q->leftJoin(
'publications as p',
function($q) {
199 $q->where(
'p.publication_id',
function($q) {
200 $q->from(
'publications as p2')
201 ->where(
'p2.submission_id',
'=', Capsule::raw(
's.submission_id'))
202 ->where(
'p2.status',
'=', STATUS_PUBLISHED)
203 ->orderBy(
'p2.date_published',
'ASC')
205 ->select(
'p2.publication_id');
208 if ($this->dateStart) {
209 $q->where(
'p.date_published',
'>=', $this->dateStart);
211 if ($this->dateEnd) {
212 $q->where(
'p.date_published',
'<=', $this->dateEnd);
231 $dateDiff = $this->_dateDiff(
'ed.date_decided',
's.date_submitted');
232 $q->select(Capsule::raw($dateDiff .
' as time'));
233 return $q->pluck(
'time')->toArray();
249 $dateDiff = $this->_dateDiff(
'ed.date_decided',
's.date_submitted');
250 $q->select(Capsule::raw(
'AVG(' . $dateDiff .
') as average'));
251 return $q->get()->first()->average;
261 return [$q->min(
's.date_submitted'), $q->max(
's.date_submitted')];
270 import(
'lib.pkp.classes.submission.PKPSubmission');
273 ->where(
's.status',
'=', STATUS_PUBLISHED)
277 ->leftJoin(
'publications as p',
function($q) {
278 $q->where(
'p.publication_id',
function($q) {
279 $q->from(
'publications as p2')
280 ->where(
'p2.submission_id',
'=', Capsule::raw(
's.submission_id'))
281 ->where(
'p2.status',
'=', STATUS_PUBLISHED)
282 ->orderBy(
'p2.date_published',
'ASC')
284 ->select(
'p2.publication_id');
288 return [$q->min(
'p.date_published'), $q->max(
'p.date_published')];
298 import(
'lib.pkp.classes.submission.PKPSubmission');
300 $q->leftJoin(
'edit_decisions as ed',
's.submission_id',
'=',
'ed.submission_id')
301 ->whereIn(
'ed.decision', $decisions);
308 $declineDecisions = [SUBMISSION_EDITOR_DECISION_DECLINE, SUBMISSION_EDITOR_DECISION_INITIAL_DECLINE];
309 if (count(array_intersect($declineDecisions, $decisions))) {
310 $q->where(
's.status',
'=', STATUS_DECLINED);
312 $q->where(
's.status',
'!=', STATUS_DECLINED);
315 return [$q->min(
'ed.date_decided'), $q->max(
'ed.date_decided')];
327 $q = Capsule::table(
'submissions as s');
328 if (!empty($this->contextIds)) {
329 $q->whereIn(
's.context_id', $this->contextIds);
331 if (!empty($this->sectionIds)) {
332 $q->leftJoin(
'publications as ps',
's.current_publication_id',
'=',
'ps.publication_id')
333 ->whereIn(
'ps.' . $this->sectionIdsColumn, $this->sectionIds)
334 ->whereNotNull(
'ps.publication_id');
338 $q->where(
's.submission_progress',
'=', 0);
343 $q->leftJoin(
'publications as pi',
function($q) {
344 $q->where(
'pi.publication_id',
function($q) {
345 $q->from(
'publications as pi2')
346 ->where(
'pi2.submission_id',
'=', Capsule::raw(
's.submission_id'))
347 ->where(
'pi2.status',
'=', STATUS_PUBLISHED)
348 ->orderBy(
'pi2.date_published',
'ASC')
350 ->select(
'pi2.publication_id');
353 ->where(
function($q) {
354 $q->whereNull(
'pi.date_published')
355 ->orWhere(
's.date_submitted',
'<', Capsule::raw(
'pi.date_published'));
377 $q->leftJoin(
'edit_decisions as ed',
function($q) use ($decisions) {
378 $q->where(
'ed.edit_decision_id',
function($q) use ($decisions) {
379 $q->from(
'edit_decisions as ed2')
380 ->where(
'ed2.submission_id',
'=', Capsule::raw(
's.submission_id'));
381 if (!empty($decisions)) {
382 $q->whereIn(
'ed2.decision', $decisions);
384 $q->orderBy(
'ed2.date_decided',
'ASC')
386 ->select(
'ed2.edit_decision_id');
390 $q->whereNotNull(
'ed.submission_id')
391 ->whereNotNull(
's.date_submitted');
393 if ($this->dateStart) {
394 $q->where(
's.date_submitted',
'>=', $this->dateStart);
396 if ($this->dateEnd) {
398 $dateTime = new \DateTime($this->dateEnd);
399 $dateTime->add(
new \DateInterval(
'P1D'));
400 $q->where(
's.date_submitted',
'<=', $dateTime->format(
'Y-m-d'));
412 private function _dateDiff(
string $leftDate,
string $rightDate) {
416 return 'DATEDIFF(' . $leftDate .
',' . $rightDate .
')';
418 return "DATE_PART('day', " . $leftDate .
" - " . $rightDate .
")";