Example #1
0
 function display(&$args)
 {
     $conference =& Request::getConference();
     $schedConf =& Request::getSchedConf();
     AppLocale::requireComponents(array(LOCALE_COMPONENT_APPLICATION_COMMON, LOCALE_COMPONENT_PKP_SUBMISSION, LOCALE_COMPONENT_PKP_USER, LOCALE_COMPONENT_OCS_MANAGER));
     header('content-type: text/comma-separated-values; charset=utf-8');
     header('content-disposition: attachment; filename=report.csv');
     $paperReportDao =& DAORegistry::getDAO('PaperReportDAO');
     list($papersIterator, $authorsIterator, $decisionsIteratorsArray) = $paperReportDao->getPaperReport($conference->getId(), $schedConf->getId());
     $maxAuthors = $this->getMaxAuthorCount($authorsIterator);
     $decisions = array();
     foreach ($decisionsIteratorsArray as $decisionsIterator) {
         while ($row =& $decisionsIterator->next()) {
             $decisions[$row['paper_id']] = $row['decision'];
         }
     }
     AppLocale::requireComponents(array(LOCALE_COMPONENT_OCS_DIRECTOR));
     import('classes.paper.Paper');
     $decisionMessages = array(SUBMISSION_DIRECTOR_DECISION_INVITE => __('director.paper.decision.invitePresentation'), SUBMISSION_DIRECTOR_DECISION_ACCEPT => __('director.paper.decision.accept'), SUBMISSION_DIRECTOR_DECISION_PENDING_REVISIONS => __('director.paper.decision.pendingRevisions'), SUBMISSION_DIRECTOR_DECISION_DECLINE => __('director.paper.decision.decline'), null => __('plugins.reports.papers.nodecision'));
     $columns = array('paper_id' => __('paper.submissionId'), 'title' => __('paper.title'), 'abstract' => __('paper.abstract'));
     for ($a = 1; $a <= $maxAuthors; $a++) {
         $columns = array_merge($columns, array('fname' . $a => __('user.firstName') . " (" . __('user.role.author') . " {$a})", 'mname' . $a => __('user.middleName') . " (" . __('user.role.author') . " {$a})", 'lname' . $a => __('user.lastName') . " (" . __('user.role.author') . " {$a})", 'country' . $a => __('common.country') . " (" . __('user.role.author') . " {$a})", 'affiliation' . $a => __('user.affiliation') . " (" . __('user.role.author') . " {$a})", 'email' . $a => __('user.email') . " (" . __('user.role.author') . " {$a})", 'url' . $a => __('user.url') . " (" . __('user.role.author') . " {$a})", 'biography' . $a => __('user.biography') . " (" . __('user.role.author') . " {$a})"));
     }
     $columns = array_merge($columns, array('track_title' => __('track.title'), 'language' => __('common.language'), 'director_decision' => __('submission.directorDecision'), 'start_time' => __('manager.scheduler.startTime'), 'end_time' => __('manager.scheduler.endTime'), 'building' => __('manager.scheduler.building'), 'room' => __('manager.scheduler.room'), 'status' => __('common.status')));
     $fp = fopen('php://output', 'wt');
     String::fputcsv($fp, array_values($columns));
     import('paper.Paper');
     // Bring in getStatusMap function
     $statusMap =& Paper::getStatusMap();
     $controlledVocabDao =& DAORegistry::getDAO('ControlledVocabDAO');
     $sessionTypes = $controlledVocabDao->enumerateBySymbolic('paperType', ASSOC_TYPE_SCHED_CONF, $schedConf->getId());
     // Load building and room data
     $buildingDao =& DAORegistry::getDAO('BuildingDAO');
     $roomDao =& DAORegistry::getDAO('RoomDAO');
     $buildings = $rooms = array();
     $buildingsIterator =& $buildingDao->getBuildingsBySchedConfId($schedConf->getId());
     while ($building =& $buildingsIterator->next()) {
         $buildingId = $building->getId();
         $buildings[$buildingId] =& $building;
         $roomsIterator =& $roomDao->getRoomsByBuildingId($buildingId);
         while ($room =& $roomsIterator->next()) {
             $roomId = $room->getId();
             $rooms[$roomId] =& $room;
             unset($room);
         }
         unset($building);
         unset($roomsIterator);
     }
     unset($buildingsIterator);
     $authorIndex = 0;
     while ($row =& $papersIterator->next()) {
         if (isset($authorsIterator[$row['paper_id']])) {
             $authorIterator =& $authorsIterator[$row['paper_id']];
             $authors = $this->mergeAuthors($authorIterator->toArray());
         } else {
             // No authors for a submission.
             $authors = array();
         }
         unset($authorIterator);
         foreach ($columns as $index => $junk) {
             if ($index == 'director_decision') {
                 if (isset($decisions[$row['paper_id']])) {
                     $columns[$index] = $decisionMessages[$decisions[$row['paper_id']]];
                 } else {
                     $columns[$index] = $decisionMessages[null];
                 }
             } elseif ($index == 'status') {
                 $columns[$index] = __($statusMap[$row[$index]]);
             } elseif ($index == 'abstract' || $index == 'title' || $index == 'affiliation') {
                 $columns[$index] = html_entity_decode(strip_tags($row[$index]), ENT_QUOTES, 'UTF-8');
             } elseif ($index == 'start_time' || $index == 'end_time') {
                 $columns[$index] = $row[$index];
             } elseif ($index == 'building') {
                 $columns['building'] = '';
                 $room =& $rooms[$row['room_id']];
                 if ($room) {
                     $building =& $buildings[$room->getBuildingId()];
                     if ($building) {
                         $columns[$index] = $building->getBuildingName();
                     }
                 }
                 unset($room, $building);
             } elseif ($index == 'room') {
                 $columns['room'] = '';
                 $room =& $rooms[$row['room_id']];
                 if ($room) {
                     $columns[$index] = $room->getRoomName();
                 }
                 unset($room);
             } elseif (strstr($index, 'biography') !== false) {
                 // "Convert" HTML to text for export
                 $columns[$index] = isset($authors[$index]) ? html_entity_decode(strip_tags($authors[$index]), ENT_QUOTES, 'UTF-8') : '';
             } else {
                 if (isset($row[$index])) {
                     $columns[$index] = $row[$index];
                 } else {
                     if (isset($authors[$index])) {
                         $columns[$index] = $authors[$index];
                     } else {
                         $columns[$index] = '';
                     }
                 }
             }
         }
         String::fputcsv($fp, $columns);
         $authorIndex++;
         unset($row);
     }
     fclose($fp);
 }