Wordpress 3.5
[autoinstalls/wordpress.git] / wp-includes / SimplePie / Cache / DB.php
1 <?php
2 /**
3  * SimplePie
4  *
5  * A PHP-Based RSS and Atom Feed Framework.
6  * Takes the hard work out of managing a complete RSS/Atom solution.
7  *
8  * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without modification, are
12  * permitted provided that the following conditions are met:
13  *
14  *      * Redistributions of source code must retain the above copyright notice, this list of
15  *        conditions and the following disclaimer.
16  *
17  *      * Redistributions in binary form must reproduce the above copyright notice, this list
18  *        of conditions and the following disclaimer in the documentation and/or other materials
19  *        provided with the distribution.
20  *
21  *      * Neither the name of the SimplePie Team nor the names of its contributors may be used
22  *        to endorse or promote products derived from this software without specific prior
23  *        written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
26  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
27  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
28  * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *
35  * @package SimplePie
36  * @version 1.3.1
37  * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
38  * @author Ryan Parman
39  * @author Geoffrey Sneddon
40  * @author Ryan McCue
41  * @link http://simplepie.org/ SimplePie
42  * @license http://www.opensource.org/licenses/bsd-license.php BSD License
43  */
44
45 /**
46  * Base class for database-based caches
47  *
48  * @package SimplePie
49  * @subpackage Caching
50  */
51 abstract class SimplePie_Cache_DB implements SimplePie_Cache_Base
52 {
53         /**
54          * Helper for database conversion
55          *
56          * Converts a given {@see SimplePie} object into data to be stored
57          *
58          * @param SimplePie $data
59          * @return array First item is the serialized data for storage, second item is the unique ID for this item
60          */
61         protected static function prepare_simplepie_object_for_cache($data)
62         {
63                 $items = $data->get_items();
64                 $items_by_id = array();
65
66                 if (!empty($items))
67                 {
68                         foreach ($items as $item)
69                         {
70                                 $items_by_id[$item->get_id()] = $item;
71                         }
72
73                         if (count($items_by_id) !== count($items))
74                         {
75                                 $items_by_id = array();
76                                 foreach ($items as $item)
77                                 {
78                                         $items_by_id[$item->get_id(true)] = $item;
79                                 }
80                         }
81
82                         if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]))
83                         {
84                                 $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0];
85                         }
86                         elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]))
87                         {
88                                 $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0];
89                         }
90                         elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]))
91                         {
92                                 $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0];
93                         }
94                         elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]))
95                         {
96                                 $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0];
97                         }
98                         else
99                         {
100                                 $channel = null;
101                         }
102
103                         if ($channel !== null)
104                         {
105                                 if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']))
106                                 {
107                                         unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']);
108                                 }
109                                 if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']))
110                                 {
111                                         unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']);
112                                 }
113                                 if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']))
114                                 {
115                                         unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']);
116                                 }
117                                 if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']))
118                                 {
119                                         unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']);
120                                 }
121                                 if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']))
122                                 {
123                                         unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']);
124                                 }
125                         }
126                         if (isset($data->data['items']))
127                         {
128                                 unset($data->data['items']);
129                         }
130                         if (isset($data->data['ordered_items']))
131                         {
132                                 unset($data->data['ordered_items']);
133                         }
134                 }
135                 return array(serialize($data->data), $items_by_id);
136         }
137 }