getEnabled($mainContextId)) { // Insert Google Analytics page tag to footer Hook::add('TemplateManager::display', [$this, 'registerScript']); } return $success; } /** * @copydoc Plugin::getDisplayName() */ public function getDisplayName() { return __('plugins.generic.googleAnalytics.displayName'); } /** * @copydoc Plugin::getDescription() */ public function getDescription() { return __('plugins.generic.googleAnalytics.description'); } /** * @copydoc Plugin::getActions() */ public function getActions($request, $verb) { $router = $request->getRouter(); return array_merge( $this->getEnabled() ? [ new LinkAction( 'settings', new AjaxModal( $router->url($request, null, null, 'manage', null, ['verb' => 'settings', 'plugin' => $this->getName(), 'category' => 'generic']), $this->getDisplayName() ), __('manager.plugins.settings'), null ), ] : [], parent::getActions($request, $verb) ); } /** * @copydoc Plugin::manage() */ public function manage($args, $request) { switch ($request->getUserVar('verb')) { case 'settings': $context = $request->getContext(); $templateMgr = TemplateManager::getManager($request); $templateMgr->registerPlugin('function', 'plugin_url', [$this, 'smartyPluginUrl']); $form = new GoogleAnalyticsSettingsForm($this, $context->getId()); if ($request->getUserVar('save')) { $form->readInputData(); if ($form->validate()) { $form->execute(); return new JSONMessage(true); } } else { $form->initData(); } return new JSONMessage(true, $form->fetch($request)); } return parent::manage($args, $request); } /** * Register the Google Analytics script tag * * @param string $hookName * @param array $params */ public function registerScript($hookName, $params) { $request = Application::get()->getRequest(); $context = $request->getContext(); if (!$context) { return false; } $router = $request->getRouter(); if (!is_a($router, 'PKPPageRouter')) { return false; } $googleAnalyticsSiteId = $this->getSetting($context->getId(), 'googleAnalyticsSiteId'); if (empty($googleAnalyticsSiteId)) { return false; } $googleAnalyticsCode = " (function (w, d, s, l, i) { w[l] = w[l] || []; var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtag/js?id=' + i + dl; f.parentNode.insertBefore(j, f); function gtag(){dataLayer.push(arguments)}; gtag('js', new Date()); gtag('config', i); }) (window, document, 'script', 'dataLayer', '{$googleAnalyticsSiteId}'); "; $templateMgr = TemplateManager::getManager($request); $templateMgr->addJavaScript( 'googleanalytics', $googleAnalyticsCode, [ 'priority' => TemplateManager::STYLE_SEQUENCE_LAST, 'inline' => true, ] ); return false; } } if (!PKP_STRICT_MODE) { class_alias('\APP\plugins\generic\googleAnalytics\GoogleAnalyticsPlugin', '\GoogleAnalyticsPlugin'); }