17 import(
'lib.pkp.pages.management.ManagementHandler');
19 define(
'IMPORTEXPORT_PLUGIN_CATEGORY',
'importexport');
30 parent::__construct();
33 array(
'tools',
'statistics',
'importexport',
'permissions')
42 parent::setupTemplate($request);
51 function tools($args, $request) {
52 $path = array_shift($args);
56 $this->
index($args, $request);
62 $this->
report($args, $request);
64 case 'reportGenerator':
67 case 'generateReport':
70 case 'saveStatisticsSettings':
75 case 'resetPermissions':
78 default: assert(
false);
87 function index($args, $request) {
90 $templateMgr->assign(
'pageTitle', __(
'navigation.tools'));
91 $templateMgr->display(
'management/tools/index.tpl');
105 if (array_shift($args) ===
'plugin') {
106 $pluginName = array_shift($args);
108 if ($plugin)
return $plugin->display($args, $request);
111 return $templateMgr->fetchJson(
'management/tools/importexport.tpl');
121 $context = $request->getContext();
127 $templateMgr->assign(
'contextObjectName', __(
$application->getNameKey()));
130 $templateMgr->assign(
'reportPlugins', $reportPlugins);
132 $templateMgr->assign(
'defaultMetricType', $context->getData(
'defaultMetricType'));
133 $availableMetricTypes = $context->getMetricTypes(
true);
134 $templateMgr->assign(
'availableMetricTypes', $availableMetricTypes);
135 if (count($availableMetricTypes) > 1) {
136 $templateMgr->assign(
'showMetricTypeSelector',
true);
139 return $templateMgr->fetchJson(
'management/tools/statistics.tpl');
151 $pluginName = $request->getUserVar(
'pluginName');
154 if ($pluginName ==
'' || !isset($reportPlugins[$pluginName])) {
155 $request->redirect(
null,
null,
'management',
'statistics');
158 $plugin = $reportPlugins[$pluginName];
159 $plugin->display($args, $request);
173 $templateMgr->assign([
177 'name' => __(
'navigation.tools'),
178 'url' => $request->getRouter()->url($request,
null,
'management',
'tools'),
181 'id' =>
'reportGenerator',
182 'name' => __(
'manager.statistics.reports')
185 'pageTitle', __(
'manager.statistics.reports'),
187 $templateMgr->display(
'management/tools/reportGenerator.tpl');
201 $router = $request->getRouter();
202 $context = $router->getContext($request);
203 import(
'classes.statistics.StatisticsHelper');
206 $metricType = $request->getUserVar(
'metricType');
207 if (is_null($metricType)) {
208 $metricType = $context->getDefaultMetricType();
212 if (is_array($metricType)) $metricType = current($metricType);
213 if (!is_scalar($metricType)) $metricType =
null;
215 $reportPlugin = $statsHelper->getReportPluginByMetricType($metricType);
216 if (!$reportPlugin || is_null($metricType)) {
217 $request->redirect(
null,
null,
'tools',
'statistics');
220 $columns = $request->getUserVar(
'columns');
221 $filters = (array) json_decode($request->getUserVar(
'filters'));
222 if (!$filters) $filters = $request->getUserVar(
'filters');
224 $orderBy = $request->getUserVar(
'orderBy');
226 $orderBy = (array) json_decode($orderBy);
227 if (!$orderBy) $orderBy = $request->getUserVar(
'orderBy');
232 $metrics = $reportPlugin->getMetrics($metricType, $columns, $filters, $orderBy);
234 $allColumnNames = $statsHelper->getColumnNames();
235 $columnOrder = array_keys($allColumnNames);
236 $columnNames = array();
238 foreach ($columnOrder as $column) {
239 if (in_array($column, $columns)) {
240 $columnNames[$column] = $allColumnNames[$column];
243 if ($column == STATISTICS_DIMENSION_ASSOC_TYPE && in_array(STATISTICS_DIMENSION_ASSOC_ID, $columns)) {
244 $columnNames[
'common.title'] = __(
'common.title');
249 if (!in_array(STATISTICS_METRIC, $columnNames)) $columnNames[STATISTICS_METRIC] = $allColumnNames[STATISTICS_METRIC];
251 header(
'content-type: text/comma-separated-values');
252 header(
'content-disposition: attachment; filename=statistics-' . date(
'Ymd') .
'.csv');
253 $fp = fopen(
'php://output',
'wt');
255 fprintf($fp, chr(0xEF).chr(0xBB).chr(0xBF));
256 fputcsv($fp, array($reportPlugin->getDisplayName()));
257 fputcsv($fp, array($reportPlugin->getDescription()));
258 fputcsv($fp, array(__(
'common.metric') .
': ' . $metricType));
259 fputcsv($fp, array(__(
'manager.statistics.reports.reportUrl') .
': ' . $request->getCompleteUrl()));
260 fputcsv($fp, array(
''));
263 $columnNames = array_merge(array(
''), $columnNames);
265 fputcsv($fp, $columnNames);
266 foreach ($metrics as $record) {
268 foreach ($columnNames as $key => $name) {
283 $assocId = $record[STATISTICS_DIMENSION_ASSOC_ID];
284 $assocType = $record[STATISTICS_DIMENSION_ASSOC_TYPE];
287 case STATISTICS_DIMENSION_ASSOC_TYPE:
288 $assocType = $record[STATISTICS_DIMENSION_ASSOC_TYPE];
289 $row[] = $statsHelper->getObjectTypeString($assocType);
291 case STATISTICS_DIMENSION_CONTEXT_ID:
292 $assocId = $record[STATISTICS_DIMENSION_CONTEXT_ID];
296 case STATISTICS_DIMENSION_SUBMISSION_ID:
297 if (isset($record[STATISTICS_DIMENSION_SUBMISSION_ID])) {
298 $assocId = $record[STATISTICS_DIMENSION_SUBMISSION_ID];
299 $assocType = ASSOC_TYPE_SUBMISSION;
305 case STATISTICS_DIMENSION_REGION:
306 if (isset($record[STATISTICS_DIMENSION_REGION]) && isset($record[STATISTICS_DIMENSION_COUNTRY])) {
307 $geoLocationTool = $statsHelper->getGeoLocationTool();
308 if ($geoLocationTool) {
309 $regions = $geoLocationTool->getRegions($record[STATISTICS_DIMENSION_COUNTRY]);
310 $regionId = $record[STATISTICS_DIMENSION_REGION];
311 if (strlen($regionId) == 1) $regionId =
'0' . $regionId;
312 if (isset($regions[$regionId])) {
313 $row[] = $regions[$regionId];
320 case STATISTICS_DIMENSION_PKP_SECTION_ID:
322 if (isset($record[STATISTICS_DIMENSION_PKP_SECTION_ID])) {
323 $sectionId = $record[STATISTICS_DIMENSION_PKP_SECTION_ID];
331 case STATISTICS_DIMENSION_FILE_TYPE:
333 $row[] = $statsHelper->getFileTypeString($record[$key]);
339 $row[] = $record[$key];
355 $router = $request->getRouter();
356 $context = $router->getContext($request);
358 $defaultMetricType = $request->getUserVar(
'defaultMetricType');
359 $context->updateSetting(
'defaultMetricType', $defaultMetricType);
362 $user = $request->getUser();
363 $notificationManager->createTrivialNotification($user->getId());
391 switch ($assocType) {
394 $context = $contextDao->getById($assocId);
395 if (!$context)
break;
396 return $context->getLocalizedName();
397 case ASSOC_TYPE_SUBMISSION:
399 $submission = $submissionDao->getById($assocId,
null,
true);
400 if (!$submission)
break;
401 return $submission->getLocalizedTitle();
402 case ASSOC_TYPE_SECTION:
404 $section = $sectionDao->getById($assocId);
405 if (!$section)
break;
406 return $section->getLocalizedTitle();
407 case ASSOC_TYPE_SUBMISSION_FILE:
409 $submissionFile = $submissionFileDao->getLatestRevision($assocId);
410 if (!$submissionFile)
break;
411 return $submissionFile->getFileLabel();
414 return __(
'manager.statistics.reports.objectNotFound');
436 return $templateMgr->fetchJson(
'management/tools/permissions.tpl');
445 if (!$request->checkCSRF())
return new JSONMessage(
false);
447 $context = $request->getContext();
453 $submissionDao->resetPermissions($context->getId());
455 $user = $request->getUser();
461 echo json_encode(
true);