root/trunk/lib/SGL/HTTP.php

Revision 1966, 5.4 kB (checked in by demian, 1 year ago)

php_strip_whitespace for 5.1 users

  • Property svn:eol-style set to native
Line 
1 <?php
2 /* Reminder: always indent with 4 spaces (no tabs). */
3 // +---------------------------------------------------------------------------+
4 // | Copyright (c) 2006, Demian Turner                                         |
5 // | All rights reserved.                                                      |
6 // |                                                                           |
7 // | Redistribution and use in source and binary forms, with or without        |
8 // | modification, are permitted provided that the following conditions        |
9 // | are met:                                                                  |
10 // |                                                                           |
11 // | o Redistributions of source code must retain the above copyright          |
12 // |   notice, this list of conditions and the following disclaimer.           |
13 // | o Redistributions in binary form must reproduce the above copyright       |
14 // |   notice, this list of conditions and the following disclaimer in the     |
15 // |   documentation and/or other materials provided with the distribution.    |
16 // | o The names of the authors may not be used to endorse or promote          |
17 // |   products derived from this software without specific prior written      |
18 // |   permission.                                                             |
19 // |                                                                           |
20 // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       |
21 // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         |
22 // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     |
23 // | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      |
24 // | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     |
25 // | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          |
26 // | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     |
27 // | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     |
28 // | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       |
29 // | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE     |
30 // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.      |
31 // |                                                                           |
32 // +---------------------------------------------------------------------------+
33 // | Seagull 0.6                                                               |
34 // +---------------------------------------------------------------------------+
35 // | HTTP.php                                                                  |
36 // +---------------------------------------------------------------------------+
37 // | Author:   Demian Turner <demian@phpkitchen.com>                           |
38 // +---------------------------------------------------------------------------+
39
40 /**
41  * Provides HTTP redirects.
42  *
43  * @package SGL
44  * @author  Demian Turner <demian@phpkitchen.com>
45  */
46 class SGL_HTTP
47 {
48     /**
49      * Wrapper for PHP header() redirects.
50      *
51      * Simplified version of Wolfram's HTTP_Header class
52      *
53      * @access  public
54      * @static
55      * @param   mixed   $url    target URL
56      * @return  void
57      * @author  Wolfram Kriesing <wk@visionp.de>
58      */
59     function redirect($url = '')
60     {
61         //  if arg is not an array of params, pass straight to header function
62         if (is_scalar($url) && strlen($url)) {
63
64             //  add a trailing slash if one is not present for uris passed as strings
65             if (substr($url, -1) != '/') {
66                 $url .= '/';
67             }
68         } else {
69
70             $c = &SGL_Config::singleton();
71             $conf = $c->getAll();
72
73             //  get a reference to the request object
74             $req = & SGL_Request::singleton();
75
76             if (is_scalar($url)) {
77                 $url = array();
78             }
79
80             $moduleName  =  (array_key_exists('moduleName', $url))
81                 ? $url['moduleName']
82                 : $req->get('moduleName');
83             $managerName =  (array_key_exists('managerName', $url))
84                 ? $url['managerName']
85                 : $req->get('managerName');
86
87             //  parse out rest of querystring
88             $aParams = array();
89             foreach ($url as $k => $v) {
90                 if ($k == 'moduleName' || $k == 'managerName') {
91                     continue;
92                 }
93                 if (is_string($k)) {
94                     $aParams[] = urlencode($k).'/'.urlencode($v);
95                 }
96             }
97             $qs = (count($aParams)) ? implode('/', $aParams): '';
98             $url = ($conf['site']['frontScriptName'])
99                 ? $conf['site']['frontScriptName'] . '/' . $moduleName
100                 : $moduleName;
101
102             if (!empty($managerName)) {
103                 $url .=  '/' . $managerName;
104             }
105             $url .= '/' . $qs;
106
107             //  check for absolute uri as specified in RFC 2616
108             SGL_Url::toAbsolute($url);
109
110             //  add a slash if one is not present
111             if (substr($url, -1) != '/') {
112                 $url .= '/';
113             }
114             //  determine is session propagated in cookies or URL
115             SGL_Url::addSessionInfo($url);
116         }
117
118         //  must be absolute URL, ie, string
119         header('Location: ' . $url);
120         exit;
121     }
122 }
123 ?>
124
Note: See TracBrowser for help on using the browser.