Open Monograph Press  3.3.0
PiwikPlugin.inc.php
1 <?php
2 
16 import('lib.pkp.classes.plugins.GenericPlugin');
17 
18 class PiwikPlugin extends GenericPlugin {
22  function register($category, $path, $mainContextId = null) {
23  $success = parent::register($category, $path, $mainContextId);
24  if (!Config::getVar('general', 'installed') || defined('RUNNING_UPGRADE')) return true;
25  if ($success && $this->getEnabled()) {
26  // Insert Piwik page tag to footer
27  HookRegistry::register('TemplateManager::display', array($this, 'registerScript'));
29  }
30  return $success;
31  }
32 
37  function getDisplayName() {
38  return __('plugins.generic.piwik.displayName');
39  }
40 
45  function getDescription() {
46  return __('plugins.generic.piwik.description');
47  }
48 
52  function getActions($request, $verb) {
53  $router = $request->getRouter();
54  import('lib.pkp.classes.linkAction.request.AjaxModal');
55  return array_merge(
56  $this->getEnabled()?array(
57  new LinkAction(
58  'settings',
59  new AjaxModal(
60  $router->url($request, null, null, 'manage', null, array('verb' => 'settings', 'plugin' => $this->getName(), 'category' => 'generic')),
61  $this->getDisplayName()
62  ),
63  __('manager.plugins.settings'),
64  null
65  ),
66  ):array(),
67  parent::getActions($request, $verb)
68  );
69  }
70 
74  function manage($args, $request) {
75  switch ($request->getUserVar('verb')) {
76  case 'settings':
77  $context = $request->getContext();
78 
79  AppLocale::requireComponents(LOCALE_COMPONENT_APP_COMMON, LOCALE_COMPONENT_PKP_MANAGER);
80  $templateMgr = TemplateManager::getManager($request);
81 
82  $this->import('PiwikSettingsForm');
83  $form = new PiwikSettingsForm($this, $context->getId());
84 
85  if ($request->getUserVar('save')) {
86  $form->readInputData();
87  if ($form->validate()) {
88  $form->execute();
89  return new JSONMessage(true);
90  }
91  } else {
92  $form->initData();
93  }
94  return new JSONMessage(true, $form->fetch($request));
95  }
96  return parent::manage($args, $request);
97  }
98 
104  function registerScript($hookName, $params) {
105  $request = $this->getRequest();
106  $context = $request->getContext();
107  if (!$context) return false;
108  $router = $request->getRouter();
109  if (!is_a($router, 'PKPPageRouter')) return false;
110 
111  $piwikSiteId = $this->getSetting($context->getId(), 'piwikSiteId');
112  $piwikUrl = $this->getSetting($context->getId(), 'piwikUrl');
113  $piwikRelativeUrl = preg_replace('/^https?:/', '', rtrim($piwikUrl, '/')) . '/';
114  if (empty($piwikSiteId) || empty($piwikUrl)) return false;
115 
116  $contextPath = $context->getPath();
117 
118  $piwikCode = <<< EOF
119  var _paq = _paq || [];
120  _paq.push(['trackPageView']);
121  _paq.push(['enableLinkTracking']);
122  (function() {
123  var u="{$piwikRelativeUrl}";
124  _paq.push(['setTrackerUrl', u+'piwik.php']);
125  _paq.push(['setSiteId', {$piwikSiteId}]);
126  _paq.push(['setDocumentTitle', "{$contextPath}"]);
127  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
128  g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
129  })();
130 EOF;
131 
132  $templateMgr = TemplateManager::getManager($request);
133  $templateMgr->addJavaScript(
134  'piwik',
135  $piwikCode,
136  array(
137  'priority' => STYLE_SEQUENCE_LAST,
138  'inline' => true,
139  )
140  );
141 
142  return false;
143  }
144 
145 }
146 
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
Plugin\getRequest
& getRequest()
Definition: Plugin.inc.php:828
PiwikPlugin\getActions
getActions($request, $verb)
Definition: PiwikPlugin.inc.php:52
PiwikPlugin\getDescription
getDescription()
Definition: PiwikPlugin.inc.php:45
PiwikPlugin\registerScript
registerScript($hookName, $params)
Definition: PiwikPlugin.inc.php:104
Plugin\getEnabled
getEnabled()
Definition: Plugin.inc.php:868
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
Plugin\getSetting
getSetting($contextId, $name)
Definition: Plugin.inc.php:473
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
LazyLoadPlugin\getName
getName()
Definition: LazyLoadPlugin.inc.php:40
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PiwikPlugin\manage
manage($args, $request)
Definition: PiwikPlugin.inc.php:74
Plugin\_registerTemplateResource
_registerTemplateResource($inCore=false)
Definition: Plugin.inc.php:376
PiwikPlugin\getDisplayName
getDisplayName()
Definition: PiwikPlugin.inc.php:37
Plugin\$request
$request
Definition: Plugin.inc.php:68
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
PiwikPlugin
Piwik plugin class.
Definition: PiwikPlugin.inc.php:18
PiwikSettingsForm
Form for managers to modify Piwik plugin settings.
Definition: PiwikSettingsForm.inc.php:18
GenericPlugin
Abstract class for generic plugins.
Definition: GenericPlugin.inc.php:18