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
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: }
138: