4@d6 VmdXҞ׏iCP p6KygSJp(5ebiqGmEYOƧǼQSJ٭ΑEZ% h7`GiQւ;bI!R&zۅw2&}oh 珟Ec=^4Y?w{[x ~6NpXTߕ4jy- D.kQo{D+8u\e˓d450*k%BK&"gè 4hy+ܗ (U?Sk%?K4h@l,B }M [@! R.CVҞ!X;e0TUS&⼹ŀ·;a͖ _ N;\+7l$64Kq(ضQQjVqܤ4&gv;S$P1e4ych gɤy,w,Bc1kCrѳ *z]jeZ.U{ reB1 Āzw,Yotr?Qs<9wz71qjkHoY!X ʵZ K Ұblm, B[/:c뼊eӌ{;8wΣ\p|PQ$)HJ"BR$}g ze*=ح]~EчoD7zNigUi3/ʒ#-`m-u6P3Ԝ)O˫;4;{gvWyzs/+>D_l)0ulTSG (į~pAx 27>8H0XNm?F.t<̯BǗAeܫ KɭbUB/D cXwCO&[ʻ?ŴN;_k' ttj Mz3uEd5ux S -l3I6EL@8p%p :<* ;+2গBMZĘQ}2Yo:(֗1RrC !66f}twDm6L#IyA J sT*VW'uZ |o)6tV?h^$?s41cisdRTO\W!إuӌW?9IEaPlB -$dpcۆ ˫q _4JMtH$md, iOUX ~D+JϪDזsqzG[4-($o5jhG|(X`|KC<ȕ= ٱ ۤ"7i,y&R`Xjx^3hC;W,ລda~K@µ_wsfn7! )#)8V$iUyzm3 58>Yu`I ezs(Qbm6!YN'8q.ow/UĶn"Ut76sQƚrBC*OgD oƂ҂(H+S>C^^GH^#7|Yi1Ǽ8]Es_Aov?x)F_|piv!ID/eA y0!dZfks`/TL1UtӢ"Fۨ) Uw2TR9qoF̄"]D uښ{({#J^vL VH9chWkvu2sIUW-nD㍉T; #4 E eP.{RvԌ:፩Dg@D>> q("D spSB;1h"v"iU`K7iRJ*7 T"vT3mϕyV*ᷦ+1YzSD#SlH4]/Xc9 op`ޑG7]t4{~сTE GRq*WѡPzkRUٯ+1)8UָyUؤzV/M PҤ2r/g/FU) 胇w>uwVfx]1g G^,*}e&t~-7X8iso 9%4O T瓗zRl$%̐a=gK5F܆$rFZoE7K0ߟIY&錇u ݵM.0%q$/5Jʗ}5=Si(eއ`Mek;^uh3 q4 1ms\GfuUEU`褙fi?y 3:wEsSDC~ͶkeFJ ) ݢ= m9cPfVU*yoȰZ]]ET!bRګhPef;GfO"eFC~jWo9Tʕ'; Y0?'&5*Ƞ Z#!z-?a0WXaϾQg9+b5E\$ЩT˾:*JUШi(@TW ]Iɪ{/.U<^ V|V&hB Nu,1q"2bQ7*[*I|gYOX՘ k>\>n &^+D:BB 3|a > F$*z. 1yo7iUg 8d찾V1ś֠y80WL]1'75ҟ׾= FAMEͭ_(}ҝsy Z ɀfnWӫl {;z2#b p GI僥#^PRn( +B#t/@U^Wفh\MNW`@Ab;o.uUbƔ'*0ڭ+O| tcnۈЀXg bш~>VA%ՖXXa ?`,ujd1z2BV,L8 k?T 23S鰲Q(J>kgKJ:@'2㕇u~;|-*ȥzRh%-:N ;k3]vO+JqE!~ャa2\)/C;u~YE _/,ܭi-$a]ny48C 9BM_G91 |Sd=7䲕;EV -aޭ[r#W /`k=E 5 /\9( YfY(( +FT&uY'n3-xڻ-i!'^m%47m2{{(knCؓ IADk[ph?*&.K6~s,QrnDw&(N j̃z\)OnR)璬םHސhUn7eL=i"ȗVѣA7m[r/~–%\&g+oZ/*=˘Cxxo|L 5R#t+GZGG-h~}|GY2f1y''=bh yM29lO۪qH!xe)d(ԍa#m1ş Ce(W&HC\!sA+p]F+ww " 2\%~驲Q ' =>ZP`*q)@ĢqρSFNmp!|ohq ?ߟSPڒ-K3^@p{.%1%.'p :Yѫٲ}ojPNW$\҆=}E{3fF.AjZu t0\V0u<<MӦ*N 3Ev ٨\5VO:j#ٸV,h.֖t8Ρ>1wHQy35ec.9Vρwޭ-˲Z)nCDQE84 .7;ߌUQZG?́%ęZg! |Uz % @1_EfP%2.ԕSI7_/֋mC9,w_}mϢD! R+~P{I`U?JJk)u7N87>~]%KRc;_k6ٵXP0w!p2rWBd>8>LzF1Qt0~x!bZ~cא٬ՊIj")WV7Jח/vg61ozSw)ag\I83Oq~#A+%L>SR); Kw 6h$|4: UűkhuԭRI'|A$iCkkdђ%qAIJ]:DSp$!oG$'7ʏHd> UB j7v,:o<3尺&w%|cSvRSDǂ訢a#.VbVů%UA=ŷy%%gQ8t {(!@p %O)lFK7j eSi7WD/aNLC?1H}w]a[tI}V'%!!y:&czY[!Zqeۑaq)͘@y%6Z9%e9cߕ*4 ~JYU|]"A,#XJ8,L?c؇)n nU;oUsE]]YfĔ RQ5}rZ|O>&9Mn@֯xzN%Eƴ?`^7W !`6G. __('user.role.author') . " $a)", __('user.email') . " (" . __('user.role.author') . " $a)", __('user.url') . " (" . __('user.role.author') . " $a)", __('user.biography') . " (" . __('user.role.author') . " $a)" ]); $authorColumnCount = count($authorColumns); } $columns = array_merge($columns, [ __('section.title'), __('common.language'), __('article.coverage'), __('submission.rights'), __('submission.source'), __('common.subjects'), __('common.type'), __('search.discipline'), __('common.keywords'), __('submission.supportingAgencies'), __('common.status'), __('common.url'), __('metadata.property.displayName.doi'), __('common.dateSubmitted'), __('submission.lastModified'), ]); for ($e = 1; $e <= $maxEditors; $e++) { $columns = array_merge($columns, $editorColumns = [ __('user.givenName') . " (" . __('user.role.editor') . " $e)", __('user.familyName') . " (" . __('user.role.editor') . " $e)", __('user.orcid') . " (" . __('user.role.editor') . " $e)", __('user.email') . " (" . __('user.role.editor') . " $e)", ]); $editorColumnCount = count($editorColumns); for ($d = 1; $d <= $maxDecisions; $d++) { $columns = array_merge($columns, $decisionColumns = [ __('submission.editorDecision') . " $d " . " (" . __('user.role.editor') . " $e)", __('common.dateDecided') . " $d " . " (" . __('user.role.editor') . " $e)" ]); $decisionColumnCount = count($decisionColumns); } } fputcsv($fp, array_values($columns)); // Display the data rows. foreach ($results as $result) { $row = []; foreach ($result as $column => $value) switch ($column) { case 'authors': for ($i=0; $i<$maxAuthors; $i++) { $row = array_merge($row, $value[$i] ?? array_fill(0, $authorColumnCount, '')); } break; case 'editors': $editorIds = array_keys($value); $editorEntries = array_values($value); for ($i=0; $i<$maxEditors; $i++) { $submissionHasThisEditor = isset($editorEntries[$i]); $row = array_merge($row, $submissionHasThisEditor ? $editorEntries[$i] : array_fill(0, $editorColumnCount, '')); for ($j=0; $j<$maxDecisions; $j++) { if (!$submissionHasThisEditor) { $row = array_merge($row, array_fill(0, $decisionColumnCount, '')); continue; } $editorId = $editorIds[$i]; $latestDecision = $latestDecisionDate = ''; $decisionCounter = 0; foreach ($result['decisions'] as $decision) { if ($decision['editorId'] != $editorId) continue; if ($j != $decisionCounter++) continue; $latestDecision = $this->getDecisionMessage($decision['decision']); $latestDecisionDate = $decision['dateDecided']; } $row = array_merge($row, [$latestDecision, $latestDecisionDate]); } } break; case 'decisions': break; // Handled in the 'editors' case default: $row[] = $value; // Other columns can be sent as they are. } fputcsv($fp, $row); } fclose($fp); } /** * Get stage label * @param $stageId int WORKFLOW_STAGE_ID_... * @return string */ function getStageLabel($stageId) { switch ($stageId) { case WORKFLOW_STAGE_ID_SUBMISSION: return __('submission.submission'); case WORKFLOW_STAGE_ID_EXTERNAL_REVIEW: return __('submission.review'); case WORKFLOW_STAGE_ID_EDITING: return __('submission.copyediting'); case WORKFLOW_STAGE_ID_PRODUCTION: return __('submission.production'); } return ''; } /** * Get decision message * @param $decision int SUBMISSION_EDITOR_DECISION_... or SUBMISSION_EDITOR_RECOMMEND_... * @return string */ function getDecisionMessage($decision) { import('classes.workflow.EditorDecisionActionsManager'); // SUBMISSION_EDITOR_... switch ($decision) { case SUBMISSION_EDITOR_DECISION_ACCEPT: return __('editor.submission.decision.accept'); case SUBMISSION_EDITOR_DECISION_PENDING_REVISIONS: return __('editor.submission.decision.requestRevisions'); case SUBMISSION_EDITOR_DECISION_RESUBMIT: return __('editor.submission.decision.resubmit'); case SUBMISSION_EDITOR_DECISION_DECLINE: return __('editor.submission.decision.decline'); case SUBMISSION_EDITOR_DECISION_SEND_TO_PRODUCTION: return __('editor.submission.decision.sendToProduction'); case SUBMISSION_EDITOR_DECISION_EXTERNAL_REVIEW: return __('editor.submission.decision.sendExternalReview'); case SUBMISSION_EDITOR_DECISION_INITIAL_DECLINE: return __('editor.submission.decision.decline'); case SUBMISSION_EDITOR_RECOMMEND_ACCEPT: return __('editor.submission.recommendation.display', array('recommendation' => __('editor.submission.decision.accept'))); case SUBMISSION_EDITOR_RECOMMEND_DECLINE: return __('editor.submission.recommendation.display', array('recommendation' => __('editor.submission.decision.decline'))); case SUBMISSION_EDITOR_RECOMMEND_PENDING_REVISIONS: return __('editor.submission.recommendation.display', array('recommendation' => __('editor.submission.decision.requestRevisions'))); case SUBMISSION_EDITOR_RECOMMEND_RESUBMIT: return __('editor.submission.recommendation.display', array('recommendation' => __('editor.submission.decision.resubmit'))); default: return ''; } } }