16 import(
'lib.pkp.classes.form.Form');
30 parent::__construct(
$plugin->getTemplateResource(
'usageStatsSettingsForm.tpl'));
31 $this->
addCheck(
new FormValidatorCustom($this,
'dataPrivacyOption', FORM_VALIDATOR_OPTIONAL_VALUE,
'plugins.generic.usageStats.settings.dataPrivacyOption.requiresSalt', array(&$this,
'_dependentFormFieldIsSet'), array(&$this,
'saltFilepath')));
32 $this->
addCheck(
new FormValidatorCustom($this,
'dataPrivacyOption', FORM_VALIDATOR_OPTIONAL_VALUE,
'plugins.generic.usageStats.settings.dataPrivacyOption.excludesRegion', array(&$this,
'_dependentFormFieldIsSet'), array(&$this,
'selectedOptionalColumns', STATISTICS_DIMENSION_REGION),
true));
33 $this->
addCheck(
new FormValidatorCustom($this,
'dataPrivacyOption', FORM_VALIDATOR_OPTIONAL_VALUE,
'plugins.generic.usageStats.settings.dataPrivacyOption.excludesCity', array(&$this,
'_dependentFormFieldIsSet'), array(&$this,
'selectedOptionalColumns', STATISTICS_DIMENSION_CITY),
true));
34 $this->
addCheck(
new FormValidatorCustom($this,
'saltFilepath', FORM_VALIDATOR_OPTIONAL_VALUE,
'plugins.generic.usageStats.settings.dataPrivacyOption.saltFilepath.invalid', array(&
$plugin,
'validateSaltpath')));
45 $this->
setData(
'createLogFiles', $plugin->getSetting(CONTEXT_ID_NONE,
'createLogFiles'));
46 $this->
setData(
'accessLogFileParseRegex', $plugin->getSetting(CONTEXT_ID_NONE,
'accessLogFileParseRegex'));
47 $this->
setData(
'dataPrivacyOption', $plugin->getSetting(CONTEXT_ID_NONE,
'dataPrivacyOption'));
48 $this->
setData(
'saltFilepath', $plugin->getSaltPath());
49 $this->
setData(
'selectedOptionalColumns', $plugin->getSetting(CONTEXT_ID_NONE,
'optionalColumns'));
50 $this->
setData(
'compressArchives', $plugin->getSetting(CONTEXT_ID_NONE,
'compressArchives'));
53 $context = $request->getContext();
54 $this->
setData(
'displayStatistics', $plugin->_getPluginSetting($context,
'displayStatistics'));
55 $this->
setData(
'datasetMaxCount', $plugin->_getPluginSetting($context,
'datasetMaxCount'));
56 $this->
setData(
'chartType', $plugin->_getPluginSetting($context,
'chartType'));
65 'accessLogFileParseRegex',
74 $this->
setData(
'selectedOptionalColumns', $this->
getData(
'optionalColumns'));
80 function fetch($request, $template =
null, $display =
false) {
84 $templateMgr->assign(array(
85 'chartTypes' => array(
86 'bar' => __(
'plugins.generic.usageStats.settings.statsDisplayOptions.chartType.bar'),
87 'line' => __(
'plugins.generic.usageStats.settings.statsDisplayOptions.chartType.line'),
89 'pluginName' => $this->plugin->getName(),
90 'saltFilepath' => $saltFilepath && file_exists($saltFilepath) && is_writable($saltFilepath),
94 if (!$this->
getData(
'selectedOptionalColumns')) {
95 $this->
setData(
'selectedOptionalColumns', array());
97 return parent::fetch($request, $template, $display);
103 function execute(...$functionArgs) {
106 $plugin->updateSetting(CONTEXT_ID_NONE,
'createLogFiles', $this->
getData(
'createLogFiles'),
'bool');
107 $plugin->updateSetting(CONTEXT_ID_NONE,
'accessLogFileParseRegex', $this->
getData(
'accessLogFileParseRegex'));
108 $plugin->updateSetting(CONTEXT_ID_NONE,
'dataPrivacyOption', $this->
getData(
'dataPrivacyOption'),
'bool');
109 $plugin->updateSetting(CONTEXT_ID_NONE,
'compressArchives', $this->
getData(
'compressArchives'),
'bool');
110 $plugin->updateSetting(CONTEXT_ID_NONE,
'saltFilepath', $this->
getData(
'saltFilepath'));
113 $context = $request->getContext();
114 $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
115 $plugin->updateSetting($contextId,
'displayStatistics', $this->
getData(
'displayStatistics'),
'bool');
116 $plugin->updateSetting($contextId,
'chartType', $this->
getData(
'chartType'));
117 $plugin->updateSetting($contextId,
'datasetMaxCount', $this->
getData(
'datasetMaxCount'));
119 $optionalColumns = $this->
getData(
'optionalColumns');
121 if ($optionalColumns && in_array(STATISTICS_DIMENSION_CITY, $optionalColumns) && !in_array(STATISTICS_DIMENSION_REGION, $optionalColumns)) {
122 $user = $request->getUser();
123 import(
'classes.notification.NotificationManager');
125 $notificationManager->createTrivialNotification(
126 $user->getId(), NOTIFICATION_TYPE_WARNING, array(
'contents' => __(
'plugins.generic.usageStats.settings.optionalColumns.cityRequiresRegion'))
128 $optionalColumns[] = STATISTICS_DIMENSION_REGION;
129 $optionalColumns[] = STATISTICS_DIMENSION_REGION;
131 $plugin->updateSetting(CONTEXT_ID_NONE,
'optionalColumns', $optionalColumns);
133 parent::execute(...$functionArgs);
141 import(
'classes.statistics.StatisticsHelper');
144 $reportPlugin =
$plugin->getReportPlugin();
145 $metricType = $reportPlugin->getMetricTypes();
146 $optionalColumns = $reportPlugin->getOptionalColumns($metricType);
147 $columnsList = array();
148 foreach ($optionalColumns as $column) {
149 $columnsList[$column] = $statsHelper->getColumnNames($column);
165 $dependentValue = $form->getData($dependentFieldName);
166 if ($dependentValue) {
167 if ($expectedValue) {
169 if (is_array($dependentValue)) {
170 return in_array($expectedValue, $dependentValue,
true);
172 return $dependentValue === $expectedValue;