[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

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

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