Open Journal Systems  3.3.0
ReportGeneratorHandler.inc.php
1 <?php
2 
16 import('classes.handler.Handler');
17 import('lib.pkp.classes.core.JSONMessage');
18 import('classes.statistics.StatisticsHelper');
19 
24  function __construct() {
25  parent::__construct();
26  $this->addRoleAssignment(
27  ROLE_ID_MANAGER,
28  array('fetchReportGenerator', 'saveReportGenerator', 'fetchArticlesInfo', 'fetchRegions'));
29  }
30 
34  function authorize($request, &$args, $roleAssignments) {
35  import('lib.pkp.classes.security.authorization.ContextAccessPolicy');
36  $this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
37  return parent::authorize($request, $args, $roleAssignments);
38  }
39 
46  function fetchReportGenerator($args, $request) {
47  $this->setupTemplate($request);
48  $reportGeneratorForm = $this->_getReportGeneratorForm($request);
49  $reportGeneratorForm->initData();
50 
51  $formContent = $reportGeneratorForm->fetch($request);
52 
53  $json = new JSONMessage(true);
54  if ($request->getUserVar('refreshForm')) {
55  $json->setEvent('refreshForm', $formContent);
56  } else {
57  $json->setContent($formContent);
58  }
59 
60  return $json;
61  }
62 
69  function saveReportGenerator($args, $request) {
70  $this->setupTemplate($request);
71 
72  $reportGeneratorForm = $this->_getReportGeneratorForm($request);
73  $reportGeneratorForm->readInputData();
74  $json = new JSONMessage(true);
75  if ($reportGeneratorForm->validate()) {
76  $reportUrl = $reportGeneratorForm->execute();
77  $json->setAdditionalAttributes(array('reportUrl' => $reportUrl));
78  } else {
79  $json->setStatus(false);
80  }
81 
82  return $json;
83  }
84 
92  function fetchArticlesInfo($args, $request) {
93  $this->validate();
94 
95  $issueId = (int) $request->getUserVar('issueId');
96  import('lib.pkp.classes.core.JSONMessage');
97 
98  if (!$issueId) {
99  return new JSONMessage(false);
100  } else {
101  $submissionsIterator = Services::get('submission')->getMany([
102  'contextId' => $request->getContext()->getId(),
103  'issueIds' => $issueId,
104  ]);
105  $articlesInfo = array();
106  foreach ($submissionsIterator as $submission) {
107  $articlesInfo[] = array('id' => $submission->getId(), 'title' => $submission->getLocalizedTitle());
108  }
109 
110  return new JSONMessage(true, $articlesInfo);
111  }
112  }
113 
121  function fetchRegions($args, $request) {
122  $this->validate();
123 
124  $countryId = (string) $request->getUserVar('countryId');
125  import('lib.pkp.classes.core.JSONMessage');
126 
127  if ($countryId) {
128  $statsHelper = new StatisticsHelper();
129  $geoLocationTool = $statsHelper->getGeoLocationTool();
130  if ($geoLocationTool) {
131  $regions = $geoLocationTool->getRegions($countryId);
132  if (!empty($regions)) {
133  $regionsData = array();
134  foreach ($regions as $id => $name) {
135  $regionsData[] = array('id' => $id, 'name' => $name);
136  }
137  return new JSONMessage(true, $regionsData);
138  }
139  }
140  }
141 
142  return new JSONMessage(false);
143  }
144 
148  function setupTemplate($request) {
149  parent::setupTemplate($request);
150  AppLocale::requireComponents(LOCALE_COMPONENT_PKP_MANAGER, LOCALE_COMPONENT_PKP_SUBMISSION,
151  LOCALE_COMPONENT_APP_MANAGER, LOCALE_COMPONENT_APP_SUBMISSION);
152  }
153 
154 
155  //
156  // Private helper methods.
157  //
162  function &_getReportGeneratorForm($request) {
163  $router = $request->getRouter();
164  $context = $router->getContext($request);
165 
166  $metricType = $request->getUserVar('metricType');
167  if (!$metricType) {
168  $metricType = $context->getDefaultMetricType();
169  }
170 
171  $statsHelper = new StatisticsHelper();
172  $reportPlugin = $statsHelper->getReportPluginByMetricType($metricType);
173  if (!is_scalar($metricType) || !$reportPlugin) {
174  fatalError('Invalid metric type.');
175  }
176 
177  $columns = $reportPlugin->getColumns($metricType);
178  $columns = array_flip(array_intersect(array_flip($statsHelper->getColumnNames()), $columns));
179 
180  $optionalColumns = $reportPlugin->getOptionalColumns($metricType);
181  $optionalColumns = array_flip(array_intersect(array_flip($statsHelper->getColumnNames()), $optionalColumns));
182 
183  $objects = $reportPlugin->getObjectTypes($metricType);
184  $objects = array_flip(array_intersect(array_flip($statsHelper->getObjectTypeString()), $objects));
185 
186  $defaultReportTemplates = $reportPlugin->getDefaultReportTemplates($metricType);
187 
188  // If the report plugin doesn't works with the file type column,
189  // don't load file types.
190  if (isset($columns[STATISTICS_DIMENSION_FILE_TYPE])) {
191  $fileTypes = $statsHelper->getFileTypeString();
192  } else {
193  $fileTypes = null;
194  }
195 
196  // Metric type will be presented in header, remove if any.
197  if (isset($columns[STATISTICS_DIMENSION_METRIC_TYPE])) unset($columns[STATISTICS_DIMENSION_METRIC_TYPE]);
198 
199  $reportTemplate = $request->getUserVar('reportTemplate');
200 
201  import('controllers.statistics.form.ReportGeneratorForm');
202  $reportGeneratorForm = new ReportGeneratorForm($columns, $optionalColumns,
203  $objects, $fileTypes, $metricType, $defaultReportTemplates, $reportTemplate);
204 
205  return $reportGeneratorForm;
206  }
207 }
208 
209 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
ReportGeneratorHandler\_getReportGeneratorForm
& _getReportGeneratorForm($request)
Definition: ReportGeneratorHandler.inc.php:162
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
ContextAccessPolicy
Class to control access to PKP applications' setup components.
Definition: ContextAccessPolicy.inc.php:17
ReportGeneratorHandler\fetchReportGenerator
fetchReportGenerator($args, $request)
Definition: ReportGeneratorHandler.inc.php:46
StatisticsHelper
Statistics helper class.
Definition: StatisticsHelper.inc.php:21
ReportGeneratorHandler
Handle requests for report generator functions.
Definition: ReportGeneratorHandler.inc.php:20
ReportGeneratorHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: ReportGeneratorHandler.inc.php:34
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
ReportGeneratorHandler\fetchArticlesInfo
fetchArticlesInfo($args, $request)
Definition: ReportGeneratorHandler.inc.php:92
PKPHandler\validate
validate($requiredContexts=null, $request=null)
Definition: PKPHandler.inc.php:351
ReportGeneratorHandler\setupTemplate
setupTemplate($request)
Definition: ReportGeneratorHandler.inc.php:148
ReportGeneratorForm
Form to generate custom statistics reports.
Definition: ReportGeneratorForm.inc.php:19
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
ReportGeneratorHandler\saveReportGenerator
saveReportGenerator($args, $request)
Definition: ReportGeneratorHandler.inc.php:69
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
ReportGeneratorHandler\__construct
__construct()
Definition: ReportGeneratorHandler.inc.php:24
Handler
Base request handler application class.
Definition: Handler.inc.php:18
ReportGeneratorHandler\fetchRegions
fetchRegions($args, $request)
Definition: ReportGeneratorHandler.inc.php:121
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49