Open Journal Systems  3.3.0
ViewReportPlugin.inc.php
1 <?php
2 
17 import('lib.pkp.classes.plugins.ReportPlugin');
18 
23  function register($category, $path, $mainContextId = null) {
24  $success = parent::register($category, $path, $mainContextId);
25  $this->addLocaleData();
26  return $success;
27  }
28 
34  function getName() {
35  return 'ViewReportPlugin';
36  }
37 
38  function getDisplayName() {
39  return __('plugins.reports.views.displayName');
40  }
41 
42  function getDescription() {
43  return __('plugins.reports.views.description');
44  }
45 
49  function display($args, $request) {
50  $context = $request->getContext();
51 
52  $columns = array(
53  __('plugins.reports.views.articleId'),
54  __('plugins.reports.views.articleTitle'),
55  __('issue.issue'),
56  __('plugins.reports.views.datePublished'),
57  __('plugins.reports.views.abstractViews'),
58  __('plugins.reports.views.galleyViews'),
59  );
60  $galleyLabels = array();
61  $galleyViews = array();
62  $galleyViewTotals = array();
63  $abstractViewCounts = array();
64  $issueIdentifications = array();
65  $issueDatesPublished = array();
66  $articleTitles = array();
67  $articleIssueIdentificationMap = array();
68 
69  import('lib.pkp.classes.submission.PKPSubmission'); // STATUS_PUBLISHED
70  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
71  $submissionsIterator = Services::get('submission')->getMany([
72  'contextId' => $context->getId(),
73  'status' => STATUS_PUBLISHED,
74  ]);
75  foreach ($submissionsIterator as $submission) {
76  $articleId = $submission->getId();
77  $issueId = $submission->getCurrentPublication()->getData('issueId');
78  $articleTitles[$articleId] = PKPString::regexp_replace( "/\r|\n/", "", $submission->getLocalizedTitle() );
79 
80  // Store the abstract view count
81  $abstractViewCounts[$articleId] = $submission->getViews();
82  // Make sure we get the issue identification
83  $articleIssueIdentificationMap[$articleId] = $issueId;
84  if (!isset($issueIdentifications[$issueId])) {
85  $issue = $issueDao->getById($issueId);
86  $issueIdentifications[$issueId] = $issue->getIssueIdentification();
87  $issueDatesPublished[$issueId] = $issue->getDatePublished();
88  unset($issue);
89  }
90 
91  // For each galley, store the label and the count
92  $galleys = $submission->getGalleys();
93  $galleyViews[$articleId] = array();
94  $galleyViewTotals[$articleId] = 0;
95  foreach ($galleys as $galley) {
96  $label = $galley->getGalleyLabel();
97  $i = array_search($label, $galleyLabels);
98  if ($i === false) {
99  $i = count($galleyLabels);
100  $galleyLabels[] = $label;
101  }
102 
103  // Make sure the array is the same size as in previous iterations
104  // so that we insert values into the right location
105  $galleyViews[$articleId] = array_pad($galleyViews[$articleId], count($galleyLabels), '');
106 
107  $views = $galley->getViews();
108  $galleyViews[$articleId][$i] = $views;
109  $galleyViewTotals[$articleId] += $views;
110  }
111  }
112 
113  header('content-type: text/comma-separated-values');
114  header('content-disposition: attachment; filename=views-' . date('Ymd') . '.csv');
115  $fp = fopen('php://output', 'wt');
116  //Add BOM (byte order mark) to fix UTF-8 in Excel
117  fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
118  fputcsv($fp, array_merge($columns, $galleyLabels));
119 
120  ksort($abstractViewCounts);
121  $dateFormatShort = $context->getLocalizedDateFormatShort();
122  foreach ($abstractViewCounts as $articleId => $abstractViewCount) {
123  $values = array(
124  $articleId,
125  $articleTitles[$articleId],
126  $issueIdentifications[$articleIssueIdentificationMap[$articleId]],
127  strftime($dateFormatShort, strtotime($issueDatesPublished[$articleIssueIdentificationMap[$articleId]])),
128  $abstractViewCount,
129  $galleyViewTotals[$articleId]
130  );
131 
132  fputcsv($fp, array_merge($values, $galleyViews[$articleId]));
133  }
134 
135  fclose($fp);
136  }
137 }
138 
139 
PKPString\regexp_replace
static regexp_replace($pattern, $replacement, $subject, $limit=-1)
Definition: PKPString.inc.php:279
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
ViewReportPlugin\display
display($args, $request)
Definition: ViewReportPlugin.inc.php:49
ViewReportPlugin\getDescription
getDescription()
Definition: ViewReportPlugin.inc.php:42
ReportPlugin
Abstract class for report plugins.
Definition: ReportPlugin.inc.php:18
Plugin\$request
$request
Definition: Plugin.inc.php:68
Plugin\addLocaleData
addLocaleData($locale=null)
Definition: Plugin.inc.php:454
ViewReportPlugin\getName
getName()
Definition: ViewReportPlugin.inc.php:34
ViewReportPlugin
View report plugin.
Definition: ViewReportPlugin.inc.php:19
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
ViewReportPlugin\getDisplayName
getDisplayName()
Definition: ViewReportPlugin.inc.php:38