root/trunk/lib/SGL/AjaxProvider.php

Revision 3122, 5.6 kB (checked in by demian, 3 weeks ago)

bugfix to trunk merge

Line 
1 <?php
2 /* Reminder: always indent with 4 spaces (no tabs). */
3 // +---------------------------------------------------------------------------+
4 // | Copyright (c) 2007, 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 // | AjaxProvider.php                                                          |
36 // +---------------------------------------------------------------------------+
37 // | Author:   Julien Casanova <julien@soluo.fr>                               |
38 // +---------------------------------------------------------------------------+
39
40 define('SGL_RESPONSEFORMAT_JSON', 1);
41 define('SGL_RESPONSEFORMAT_PLAIN', 2);
42 define('SGL_RESPONSEFORMAT_JAVASCRIPT', 3);
43 define('SGL_RESPONSEFORMAT_HTML', 4);
44 /**
45  * Abstract model controller for all the 'ajax provider' classes.
46  *
47  * @package SGL
48  * @subpackage
49  * @author  Julien Casanova <julien@soluo.fr>
50  * @abstract
51  */
52 class SGL_AjaxProvider
53 {
54     /**
55      * Holds configuration
56      *
57      * @var array
58      */
59     var $conf = array();
60
61     /**
62      * DB abstract layer
63      *
64      * @var DB resource
65      */
66     var $dbh = null;
67
68     /**
69      * Constant indicating response format.
70      *
71      * @var integer
72      */
73     var $responseFormat = SGL_RESPONSEFORMAT_HTML;
74
75     /**
76      * Constructor.
77      *
78      * @access  public
79      * @return  void
80      */
81     function SGL_AjaxProvider()
82     {
83         SGL::logMessage(null, PEAR_LOG_DEBUG);
84
85         $c = &SGL_Config::singleton();
86         $this->conf = $c->getAll();
87         $this->dbh = $this->_getDb();
88     }
89
90     function &_getDb()
91     {
92         $locator = &SGL_ServiceLocator::singleton();
93         $dbh = $locator->get('DB');
94         if (!$dbh) {
95             $dbh = & SGL_DB::singleton();
96             $locator->register('DB', $dbh);
97         }
98         return $dbh;
99     }
100
101     function processResponse($response = null)
102     {
103         SGL::logMessage(null, PEAR_LOG_DEBUG);
104
105         if (is_null($response)) {
106             return;
107         }
108         // Handle errors
109         if (PEAR::isError($response)) {
110             $response = array(
111                 'message'   => $response->getMessage(),
112                 'debugInfo' => $response->getDebugInfo(),
113                 'level'     => $response->getCode(),
114                 'errorType' => SGL_Error::constantToString($response->getCode())
115             );
116             header('HTTP/1.1 404 Not found');
117         }
118         // Returned encoded response with appropriate headers
119         switch (strtoupper($this->responseFormat)) {
120
121         case SGL_RESPONSEFORMAT_JSON:
122             require_once 'HTML/AJAX/JSON.php';
123             $json = new HTML_AJAX_JSON();
124             $ret = $json->encode($response);
125             header('Content-Type: text/plain');
126             break;
127
128         case SGL_RESPONSEFORMAT_HTML:
129             $ret = $response;
130             header('Content-Type: text/html');
131             break;
132
133         case SGL_RESPONSEFORMAT_PLAIN:
134             $ret = $response;
135             header('Content-Type: text/plain');
136             break;
137
138         case SGL_RESPONSEFORMAT_JAVASCRIPT:
139             $ret = $response;
140             header('Content-Type: text/javascript');
141             break;
142
143         default:
144             $ret = 'You haven\'t defined your response format, see SGL_AjaxProvider::processResponse';
145         }
146         return $ret;
147     }
148 }
149 ?>
Note: See TracBrowser for help on using the browser.