[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/vendor/simplepie/simplepie/library/SimplePie/Cache/ -> DB.php (source)

   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, 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   * @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue
  37   * @author Ryan Parman
  38   * @author Geoffrey 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  }