balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

DB.php (4693B)


      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-2016, Ryan Parman, Sam 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  * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
     37  * @author Ryan Parman
     38  * @author Sam Sneddon
     39  * @author Ryan McCue
     40  * @link http://simplepie.org/ SimplePie
     41  * @license http://www.opensource.org/licenses/bsd-license.php BSD License
     42  */
     43 
     44 /**
     45  * Base class for database-based caches
     46  *
     47  * @package SimplePie
     48  * @subpackage Caching
     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 }