[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/SimplePie/src/ -> Source.php (source)

   1  <?php
   2  
   3  // SPDX-FileCopyrightText: 2004-2023 Ryan Parman, Sam Sneddon, Ryan McCue
   4  // SPDX-License-Identifier: BSD-3-Clause
   5  
   6  declare(strict_types=1);
   7  
   8  namespace SimplePie;
   9  
  10  /**
  11   * Handles `<atom:source>`
  12   *
  13   * Used by {@see \SimplePie\Item::get_source()}
  14   *
  15   * This class can be overloaded with {@see \SimplePie::set_source_class()}
  16   */
  17  class Source implements RegistryAware
  18  {
  19      /** @var Item */
  20      public $item;
  21      /** @var array<string, mixed> */
  22      public $data = [];
  23      /** @var Registry */
  24      protected $registry;
  25  
  26      /**
  27       * @param array<string, mixed> $data
  28       */
  29      public function __construct(Item $item, array $data)
  30      {
  31          $this->item = $item;
  32          $this->data = $data;
  33      }
  34  
  35      /**
  36       * @return void
  37       */
  38      public function set_registry(\SimplePie\Registry $registry)
  39      {
  40          $this->registry = $registry;
  41      }
  42  
  43      /**
  44       * @return string
  45       */
  46      public function __toString()
  47      {
  48          return md5(serialize($this->data));
  49      }
  50  
  51      /**
  52       * @param string $namespace
  53       * @param string $tag
  54       * @return array<array<string, mixed>>|null
  55       */
  56      public function get_source_tags(string $namespace, string $tag)
  57      {
  58          if (isset($this->data['child'][$namespace][$tag])) {
  59              return $this->data['child'][$namespace][$tag];
  60          }
  61  
  62          return null;
  63      }
  64  
  65      /**
  66       * @param array<string, mixed> $element
  67       * @return string
  68       */
  69      public function get_base(array $element = [])
  70      {
  71          return $this->item->get_base($element);
  72      }
  73  
  74      /**
  75       * @param string $data
  76       * @param int-mask-of<SimplePie::CONSTRUCT_*> $type
  77       * @param string $base
  78       * @return string
  79       */
  80      public function sanitize(string $data, $type, string $base = '')
  81      {
  82          return $this->item->sanitize($data, $type, $base);
  83      }
  84  
  85      /**
  86       * @return Item
  87       */
  88      public function get_item()
  89      {
  90          return $this->item;
  91      }
  92  
  93      /**
  94       * @return string|null
  95       */
  96      public function get_title()
  97      {
  98          if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'title')) {
  99              return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
 100          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'title')) {
 101              return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
 102          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'title')) {
 103              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 104          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'title')) {
 105              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 106          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'title')) {
 107              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 108          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'title')) {
 109              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 110          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'title')) {
 111              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 112          }
 113  
 114          return null;
 115      }
 116  
 117      /**
 118       * @param int $key
 119       * @return Category|null
 120       */
 121      public function get_category(int $key = 0)
 122      {
 123          $categories = $this->get_categories();
 124          if (isset($categories[$key])) {
 125              return $categories[$key];
 126          }
 127  
 128          return null;
 129      }
 130  
 131      /**
 132       * @return array<Category>|null
 133       */
 134      public function get_categories()
 135      {
 136          $categories = [];
 137  
 138          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'category') as $category) {
 139              $term = null;
 140              $scheme = null;
 141              $label = null;
 142              if (isset($category['attribs']['']['term'])) {
 143                  $term = $this->sanitize($category['attribs']['']['term'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 144              }
 145              if (isset($category['attribs']['']['scheme'])) {
 146                  $scheme = $this->sanitize($category['attribs']['']['scheme'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 147              }
 148              if (isset($category['attribs']['']['label'])) {
 149                  $label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 150              }
 151              $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
 152          }
 153          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'category') as $category) {
 154              // This is really the label, but keep this as the term also for BC.
 155              // Label will also work on retrieving because that falls back to term.
 156              $term = $this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 157              if (isset($category['attribs']['']['domain'])) {
 158                  $scheme = $this->sanitize($category['attribs']['']['domain'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 159              } else {
 160                  $scheme = null;
 161              }
 162              $categories[] = $this->registry->create(Category::class, [$term, $scheme, null]);
 163          }
 164          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'subject') as $category) {
 165              $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
 166          }
 167          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'subject') as $category) {
 168              $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
 169          }
 170  
 171          if (!empty($categories)) {
 172              return array_unique($categories);
 173          }
 174  
 175          return null;
 176      }
 177  
 178      /**
 179       * @param int $key
 180       * @return Author|null
 181       */
 182      public function get_author(int $key = 0)
 183      {
 184          $authors = $this->get_authors();
 185          if (isset($authors[$key])) {
 186              return $authors[$key];
 187          }
 188  
 189          return null;
 190      }
 191  
 192      /**
 193       * @return array<Author>|null
 194       */
 195      public function get_authors()
 196      {
 197          $authors = [];
 198          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'author') as $author) {
 199              $name = null;
 200              $uri = null;
 201              $email = null;
 202              if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
 203                  $name = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 204              }
 205              if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
 206                  $uri = $author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0];
 207                  $uri = $this->sanitize($uri['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($uri));
 208              }
 209              if (isset($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
 210                  $email = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 211              }
 212              if ($name !== null || $email !== null || $uri !== null) {
 213                  $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
 214              }
 215          }
 216          if ($author = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'author')) {
 217              $name = null;
 218              $url = null;
 219              $email = null;
 220              if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
 221                  $name = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 222              }
 223              if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
 224                  $url = $author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0];
 225                  $url = $this->sanitize($url['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($url));
 226              }
 227              if (isset($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
 228                  $email = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 229              }
 230              if ($name !== null || $email !== null || $url !== null) {
 231                  $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
 232              }
 233          }
 234          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'creator') as $author) {
 235              $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
 236          }
 237          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'creator') as $author) {
 238              $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
 239          }
 240          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'author') as $author) {
 241              $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
 242          }
 243  
 244          if (!empty($authors)) {
 245              return array_unique($authors);
 246          }
 247  
 248          return null;
 249      }
 250  
 251      /**
 252       * @param int $key
 253       * @return Author|null
 254       */
 255      public function get_contributor(int $key = 0)
 256      {
 257          $contributors = $this->get_contributors();
 258          if (isset($contributors[$key])) {
 259              return $contributors[$key];
 260          }
 261  
 262          return null;
 263      }
 264  
 265      /**
 266       * @return array<Author>|null
 267       */
 268      public function get_contributors()
 269      {
 270          $contributors = [];
 271          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'contributor') as $contributor) {
 272              $name = null;
 273              $uri = null;
 274              $email = null;
 275              if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'])) {
 276                  $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 277              }
 278              if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0]['data'])) {
 279                  $uri = $contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['uri'][0];
 280                  $uri = $this->sanitize($uri['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($uri));
 281              }
 282              if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'])) {
 283                  $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 284              }
 285              if ($name !== null || $email !== null || $uri !== null) {
 286                  $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
 287              }
 288          }
 289          foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
 290              $name = null;
 291              $url = null;
 292              $email = null;
 293              if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'])) {
 294                  $name = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['name'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 295              }
 296              if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0]['data'])) {
 297                  $url = $contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['url'][0];
 298                  $url = $this->sanitize($url['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($url));
 299              }
 300              if (isset($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'])) {
 301                  $email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 302              }
 303              if ($name !== null || $email !== null || $url !== null) {
 304                  $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
 305              }
 306          }
 307  
 308          if (!empty($contributors)) {
 309              return array_unique($contributors);
 310          }
 311  
 312          return null;
 313      }
 314  
 315      /**
 316       * @param int $key
 317       * @param string $rel
 318       * @return string|null
 319       */
 320      public function get_link(int $key = 0, string $rel = 'alternate')
 321      {
 322          $links = $this->get_links($rel);
 323          if (isset($links[$key])) {
 324              return $links[$key];
 325          }
 326  
 327          return null;
 328      }
 329  
 330      /**
 331       * Added for parity between the parent-level and the item/entry-level.
 332       *
 333       * @return string|null
 334       */
 335      public function get_permalink()
 336      {
 337          return $this->get_link(0);
 338      }
 339  
 340      /**
 341       * @param string $rel
 342       * @return array<string>|null
 343       */
 344      public function get_links(string $rel = 'alternate')
 345      {
 346          if (!isset($this->data['links'])) {
 347              $this->data['links'] = [];
 348              if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'link')) {
 349                  foreach ($links as $link) {
 350                      if (isset($link['attribs']['']['href'])) {
 351                          $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
 352                          $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
 353                      }
 354                  }
 355              }
 356              if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'link')) {
 357                  foreach ($links as $link) {
 358                      if (isset($link['attribs']['']['href'])) {
 359                          $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
 360                          $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($link));
 361                      }
 362                  }
 363              }
 364              if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'link')) {
 365                  $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
 366              }
 367              if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'link')) {
 368                  $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
 369              }
 370              if ($links = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'link')) {
 371                  $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($links[0]));
 372              }
 373  
 374              $keys = array_keys($this->data['links']);
 375              foreach ($keys as $key) {
 376                  $key = (string) $key;
 377  
 378                  if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
 379                      if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
 380                          $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
 381                          $this->data['links'][$key] = &$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
 382                      } else {
 383                          $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = &$this->data['links'][$key];
 384                      }
 385                  } elseif (substr($key, 0, 41) === \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY) {
 386                      $this->data['links'][substr($key, 41)] = &$this->data['links'][$key];
 387                  }
 388                  $this->data['links'][$key] = array_unique($this->data['links'][$key]);
 389              }
 390          }
 391  
 392          if (isset($this->data['links'][$rel])) {
 393              return $this->data['links'][$rel];
 394          }
 395  
 396          return null;
 397      }
 398  
 399      /**
 400       * @return string|null
 401       */
 402      public function get_description()
 403      {
 404          if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'subtitle')) {
 405              return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
 406          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'tagline')) {
 407              return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
 408          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'description')) {
 409              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 410          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'description')) {
 411              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 412          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'description')) {
 413              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
 414          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'description')) {
 415              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 416          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'description')) {
 417              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 418          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'summary')) {
 419              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($return[0]));
 420          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'subtitle')) {
 421              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($return[0]));
 422          }
 423  
 424          return null;
 425      }
 426  
 427      /**
 428       * @return string|null
 429       */
 430      public function get_copyright()
 431      {
 432          if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'rights')) {
 433              return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
 434          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'copyright')) {
 435              return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
 436          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'copyright')) {
 437              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 438          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'rights')) {
 439              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 440          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'rights')) {
 441              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 442          }
 443  
 444          return null;
 445      }
 446  
 447      /**
 448       * @return string|null
 449       */
 450      public function get_language()
 451      {
 452          if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'language')) {
 453              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 454          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'language')) {
 455              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 456          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'language')) {
 457              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 458          } elseif (isset($this->data['xml_lang'])) {
 459              return $this->sanitize($this->data['xml_lang'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
 460          }
 461  
 462          return null;
 463      }
 464  
 465      /**
 466       * @return float|null
 467       */
 468      public function get_latitude()
 469      {
 470          if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lat')) {
 471              return (float) $return[0]['data'];
 472          } elseif (($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
 473              return (float) $match[1];
 474          }
 475  
 476          return null;
 477      }
 478  
 479      /**
 480       * @return float|null
 481       */
 482      public function get_longitude()
 483      {
 484          if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'long')) {
 485              return (float) $return[0]['data'];
 486          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO, 'lon')) {
 487              return (float) $return[0]['data'];
 488          } elseif (($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match)) {
 489              return (float) $match[2];
 490          }
 491  
 492          return null;
 493      }
 494  
 495      /**
 496       * @return string|null
 497       */
 498      public function get_image_url()
 499      {
 500          if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'image')) {
 501              return $this->sanitize($return[0]['attribs']['']['href'], \SimplePie\SimplePie::CONSTRUCT_IRI);
 502          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'logo')) {
 503              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
 504          } elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'icon')) {
 505              return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
 506          }
 507  
 508          return null;
 509      }
 510  }
 511  
 512  class_alias('SimplePie\Source', 'SimplePie_Source');


Generated : Fri Oct 10 08:20:03 2025 Cross-referenced by PHPXref