Add zip file of V1.0.1 (Released Apr 9 2017) master
[plg_send_custom_header.git] / send_custom_header.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php
/**
 * @package     send_custom_header.plugin
 *
 * @copyright   Copyright (C) 2013 B Tasker. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */
 
defined('_JEXEC') or die;
 
 
/**
 * Plugin to send a custom header if specific conditions are met
 *
 */
class plgSystemsend_custom_header extends JPlugin
{
 
        protected $plugin;
        protected $plgParams;
        var $debug = array();
 
 
        function __construct(&$subject, $config){
            parent::__construct ( $subject, $config );
            $this->plugin = JPluginHelper::getPlugin ( 'system', 'send_custom_header' );
            $this->plgParams = new JRegistry ( $this->plugin->params );
        }
 
 
        /**
         * Plugin to send a custom header if specific conditions are met
         *
         * @return void;
         */
        public function onAfterRender()
        {
            if ($this->processRules()){
                  // OK, we're running so lets get and generate our headers
                  $headers = explode(",",$this->plgParams->get('headerName',''));
      
                  foreach ($headers as $header){
                      if (empty($header)){
                        continue;
                      }
                      $head = explode("=",$header);
                      header( $head[0].": ".$head[1]);
                  }
 
 
                  // Now we do the same for cookies
                  $cookies = explode(",",$this->plgParams->get('cookieVals',''));
 
                  foreach ($cookies as $cookie){
                      if (empty($cookie)){
                        continue;
                      }
                      $cook = explode("=",$cookie);
                      setcookie($cook[0],$cook[1]);
                  }
 
              }
 
              if ($this->plgParams->get('debugMode',0)){
                  $this->sendDebug();
              }
 
              return true;
 
        }
 
 
 
        /** Process the rule set to see if we should be sending headers/cookies
        *
        */
        function processRules(){
 
              // Get the rules
              $alwaysComp = explode(",",$this->plgParams->get('alwaysRun',''));
              $neverComp = explode(",",$this->plgParams->get('neverRun',''));
              $alwaysURL = explode(",",$this->plgParams->get('alwaysURL',''));
              $neverURL = explode(",",$this->plgParams->get('neverURL',''));
              $when = $this->plgParams->get('sendWhen',1);
              $sslCons = $this->plgParams->get('runonSSL',2);
              
 
 
              // Get instances of classes
              $uri = JUri::getInstance();
 
              // Get the current state
              $app = JFactory::getApplication();
              $runon = $this->plgParams->get('runonAdmin',2);
              $isAdmin = $app->isAdmin();
              $user = JFactory::getUser();
              $currenturl = $uri->getPath();
              $currentcomp = JRequest::getVar('option');
              $isSSL = $uri->isSSL();
 
              // Obey the SSL Settings
              if ($isSSL && $sslCons == "0"){
                $this->debug['Disabled-On-SSL'] = 'True';
                return false;
              }elseif($isSSL && $sslCons == "1"){
                $this->debug['Force-Enabled-On-SSL'] = 'True';
                return true;
              }
 
 
              // If an always rule says to run, do so
              if (in_array($currenturl,$alwaysURL) || in_array($currentcomp,$alwaysComp)){
                  $this->debug['Always-Rule-Applies'] = 'True';
                  return true;
              }
 
 
              // Process the never rules (including back-end/front-end disablement)
              if (($isAdmin && $runon == '0') || (!$isAdmin && $runon == '1') || in_array($currenturl,$neverURL) || in_array($currentcomp,$neverComp)){
                        $this->debug['Never-Rule-Applies'] = 'True';
                        return false;       
              }
 
 
              // Check the User based rule
              if ((!$when && $user->name) || ($when && !$user->name)){
                  $this->debug['User-Login-State-Incorrect'] = 'True';
                  // Either we're supposed to run when user logged in, and they're not, or vice-versa
                  return false;
              }
 
              $this->debug['All-Rules-Satisfied'] = 'True';
              return true;
 
        }
 
 
        /** Push the contents of the Debug array as headers
        *
        */
        protected function sendDebug(){
          foreach($this->debug as $k=>$v){
            header('X-'.$k.": ".$v);
          }
        }
 
}