]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - service/core/REST/SugarRestRSS.php
Release 6.4.0
[Github/sugarcrm.git] / service / core / REST / SugarRestRSS.php
1 <?php
2 if(!defined('sugarEntry'))define('sugarEntry', true);
3 /*********************************************************************************
4  * SugarCRM Community Edition is a customer relationship management program developed by
5  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
6  * 
7  * This program is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU Affero General Public License version 3 as published by the
9  * Free Software Foundation with the addition of the following permission added
10  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13  * 
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
17  * details.
18  * 
19  * You should have received a copy of the GNU Affero General Public License along with
20  * this program; if not, see http://www.gnu.org/licenses or write to the Free
21  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22  * 02110-1301 USA.
23  * 
24  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26  * 
27  * The interactive user interfaces in modified source and object code versions
28  * of this program must display Appropriate Legal Notices, as required under
29  * Section 5 of the GNU Affero General Public License version 3.
30  * 
31  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32  * these Appropriate Legal Notices must retain the display of the "Powered by
33  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34  * technical reasons, the Appropriate Legal Notices must display the words
35  * "Powered by SugarCRM".
36  ********************************************************************************/
37
38
39 require_once('service/core/REST/SugarRest.php');
40
41 /**
42  * This class is a serialize implementation of REST protocol
43  * @api
44  */
45 class SugarRestRSS extends SugarRest
46 {
47         /**
48          * It will serialize the input object and echo's it
49          *
50          * @param array $input - assoc array of input values: key = param name, value = param type
51          * @return String - echos serialize string of $input
52          */
53         public function generateResponse($input)
54         {
55                 if(!isset($input['entry_list'])) {
56                     $this->fault($app_strings['ERR_RSS_INVALID_RESPONSE']);
57                 }
58                 ob_clean();
59                 $this->generateResponseHeader(count($input['entry_list']));
60                 $this->generateItems($input);
61                 $this->generateResponseFooter();
62         } // fn
63
64         protected function generateResponseHeader($count)
65         {
66             global $app_strings, $sugar_version, $sugar_flavor;
67
68                 $date = TimeDate::httpTime();
69
70                 echo <<<EORSS
71 <?xml version="1.0" encoding="UTF-8" ?>
72 <rss version="2.0">
73 <channel>
74     <title>{$app_strings['LBL_RSS_FEED']} &raquo; {$app_strings['LBL_BROWSER_TITLE']}</title>
75     <link>{$GLOBALS['sugar_config']['site_url']}</link>
76     <description>{$count} {$app_strings['LBL_RSS_RECORDS_FOUND']}</description>
77     <pubDate>{$date}</pubDate>
78     <generator>SugarCRM $sugar_version $sugar_flavor</generator>
79
80 EORSS;
81         }
82
83         protected function generateItems($input)
84         {
85         global $app_strings;
86
87             if(!empty($input['entry_list'])){
88             foreach($input['entry_list'] as $item){
89                 $this->generateItem($item);
90             }
91         }
92     }
93
94     protected function generateItem($item)
95     {
96         $name = !empty($item['name_value_list']['name']['value'])?htmlentities( $item['name_value_list']['name']['value']): '';
97         $url = $GLOBALS['sugar_config']['site_url']  . htmlentities('/index.php?module=' . $item['module_name']. '&action=DetailView&record=' . $item['id']);
98         $date = TimeDate::httpTime(TimeDate::getInstance()->fromDb($item['name_value_list']['date_modified']['value'])->getTimestamp());
99         $description = '';
100         $displayFieldNames = true;
101         if(count($item['name_value_list']) == 2 &&isset($item['name_value_list']['name']))$displayFieldNames = false;
102         foreach($item['name_value_list'] as $k=>$v){
103             if ( $k == 'name' || $k == 'date_modified') {
104                 continue;
105             }
106             if($displayFieldNames) $description .= '<b>' .htmlentities( $k) . ':<b>&nbsp;';
107             $description .= htmlentities( $v['value']) . "<br>";
108         }
109
110         echo <<<EORSS
111     <item>
112         <title>$name</title>
113         <link>$url</link>
114         <description><![CDATA[$description]]></description>
115         <pubDate>$date GMT</pubDate>
116         <guid>{$item['id']}</guid>
117     </item>
118
119 EORSS;
120     }
121
122     protected function generateResponseFooter()
123     {
124                 echo <<<EORSS
125 </channel>
126 </rss>
127 EORSS;
128         }
129
130         /**
131          * Returns a fault since we cannot accept RSS as an input type
132          *
133          * @see SugarRest::serve()
134          */
135         public function serve()
136         {
137             global $app_strings;
138
139             $this->fault($app_strings['ERR_RSS_INVALID_INPUT']);
140         }
141
142         /**
143          * @see SugarRest::fault()
144          */
145         public function fault($faultObject)
146         {
147                 ob_clean();
148                 $this->generateResponseHeader();
149                 echo '<item><name>';
150                 if(is_object($errorObject)){
151                         $error = $errorObject->number . ': ' . $errorObject->name . '<br>' . $errorObject->description;
152                         $GLOBALS['log']->error($error);
153                 }else{
154                         $GLOBALS['log']->error(var_export($errorObject, true));
155                         $error = var_export($errorObject, true);
156                 } // else
157                 echo $error;
158                 echo '</name></item>';
159                 $this->generateResponseFooter();
160         }
161 }