PageRenderTime 56ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/user/plugins/googleanalytics/googleanalytics.plugin.php

https://github.com/HabariMag/habarimag-old
PHP | 92 lines | 69 code | 14 blank | 9 comment | 8 complexity | 1e9d7e4670e4b94193c39bb617930027 MD5 | raw file
Possible License(s): Apache-2.0
  1. <?php
  2. class GoogleAnalytics extends Plugin
  3. {
  4. public function action_init()
  5. {
  6. $this->add_rule('"gaextra.js"', 'serve_gaextra');
  7. }
  8. /**
  9. * Add the tracking code to the template_header_javascript Stack.
  10. *
  11. * @todo determine if there is a better action to use
  12. * @return null
  13. */
  14. public function action_init_theme()
  15. {
  16. $code = $this->tracking_code();
  17. if ( $code != null ) {
  18. Stack::add('template_header_javascript', $code, 'googleanalytics');
  19. }
  20. }
  21. public function action_plugin_act_serve_gaextra()
  22. {
  23. ob_clean();
  24. header('Content-Type: application/javascript');
  25. // format extensions for regex match
  26. $extensions = explode(',', Options::get('googleanalytics__trackfiles_extensions'));
  27. $extensions = array_map('trim', $extensions);
  28. $extensions = implode('|', $extensions);
  29. include 'googleanalytics.js.php';
  30. }
  31. public function configure()
  32. {
  33. $form = new FormUI(strtolower(get_class($this)));
  34. $form->append('text', 'clientcode', 'googleanalytics__clientcode', _t('Analytics Client Code'));
  35. $form->append('checkbox', 'loggedintoo', 'googleanalytics__loggedintoo', _t('Track logged-in users too'));
  36. $form->append('checkbox', 'trackoutgoing', 'googleanalytics__trackoutgoing', _t('Track outgoing links'));
  37. $form->append('checkbox', 'trackmailto', 'googleanalytics__trackmailto', _t('Track mailto links'));
  38. $form->append('checkbox', 'trackfiles', 'googleanalytics__trackfiles', _t('Track download links'));
  39. $form->append('textarea', 'track_extensions', 'googleanalytics__trackfiles_extensions', _t('File extensions to track (comma separated)'));
  40. $form->append('submit', 'save', 'Save');
  41. return $form;
  42. }
  43. private function tracking_code()
  44. {
  45. if ( URL::get_matched_rule()->entire_match == 'user/login' ) {
  46. // Login page; don't display
  47. return;
  48. }
  49. $clientcode = Options::get('googleanalytics__clientcode');
  50. if ( empty($clientcode) ) {
  51. return;
  52. }
  53. // only actually track the page if we're not logged in, or we're told to always track
  54. $do_tracking = !User::identify()->loggedin || Options::get('googleanalytics__loggedintoo');
  55. $track_pageview = ($do_tracking) ? "_gaq.push(['_trackPageview']);" : '';
  56. $habari_url = Site::get_url('habari');
  57. $extra = <<<EXTRA
  58. var extra = document.createElement('script');
  59. extra.src = '{$habari_url}/gaextra.js';
  60. extra.setAttribute('async', 'true');
  61. document.documentElement.firstChild.appendChild(extra);
  62. EXTRA;
  63. return <<<ANALYTICS
  64. var _gaq = _gaq || [];
  65. _gaq.push(['_setAccount', '{$clientcode}']);
  66. {$track_pageview}
  67. (function() {
  68. var ga = document.createElement('script');
  69. ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
  70. 'http://www') + '.google-analytics.com/ga.js';
  71. ga.setAttribute('async', 'true');
  72. document.documentElement.firstChild.appendChild(ga);
  73. {$extra}
  74. })();
  75. ANALYTICS;
  76. }
  77. }
  78. ?>