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-dev
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: */
50: abstract class SimplePie_Cache_DB implements SimplePie_Cache_Base
51: {
52: /**
53: * Helper for database conversion
54: *
55: * Converts a given {@see SimplePie} object into data to be stored
56: *
57: * @param SimplePie $data
58: * @return array First item is the serialized data for storage, second item is the unique ID for this item
59: */
60: protected static function prepare_simplepie_object_for_cache(&$data)
61: {
62: $items = $data->get_items();
63: $items_by_id = array();
64:
65: if (!empty($items))
66: {
67: foreach ($items as $item)
68: {
69: $items_by_id[$item->get_id()] = $item;
70: }
71:
72: if (count($items_by_id) !== count($items))
73: {
74: $items_by_id = array();
75: foreach ($items as $item)
76: {
77: $items_by_id[$item->get_id(true)] = $item;
78: }
79: }
80:
81: if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]))
82: {
83: $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0];
84: }
85: elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]))
86: {
87: $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0];
88: }
89: elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]))
90: {
91: $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0];
92: }
93: elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]))
94: {
95: $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0];
96: }
97: else
98: {
99: $channel = null;
100: }
101:
102: if ($channel !== null)
103: {
104: if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']))
105: {
106: unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']);
107: }
108: if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']))
109: {
110: unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']);
111: }
112: if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']))
113: {
114: unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']);
115: }
116: if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']))
117: {
118: unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']);
119: }
120: if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']))
121: {
122: unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']);
123: }
124: }
125: if (isset($data->data['items']))
126: {
127: unset($data->data['items']);
128: }
129: if (isset($data->data['ordered_items']))
130: {
131: unset($data->data['ordered_items']);
132: }
133: }
134: return array(serialize($data->data), $items_by_id);
135: }
136: }
137: