<?php
							 | 
						|
								namespace feeds;
							 | 
						|
								use BarnabyWalters\Mf2;
							 | 
						|
								
							 | 
						|
								function parse_mf2(&$html, $base) {
							 | 
						|
								  $parser = new \mf2\Parser($html, $base);
							 | 
						|
								  return $parser->parse();
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function get_rels(&$data) {
							 | 
						|
								  if($data && array_key_exists('rels', $data)) {
							 | 
						|
								    return $data['rels'];
							 | 
						|
								  } else {
							 | 
						|
								    return [];
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								function get_alternates(&$data) {
							 | 
						|
								  if($data && array_key_exists('alternates', $data)) {
							 | 
						|
								    return $data['alternates'];
							 | 
						|
								  } else {
							 | 
						|
								    return [];
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// Compares name, summary and content values to determine if they are equal
							 | 
						|
								function content_is_equal($a, $b) {
							 | 
						|
								  // remove html tags
							 | 
						|
								  $a = strip_tags($a);
							 | 
						|
								  $b = strip_tags($b);
							 | 
						|
								  // remove encoded entities
							 | 
						|
								  $a = preg_replace('/&#?[a-z0-9]{2,8};/i', '', $a);
							 | 
						|
								  $b = preg_replace('/&#?[a-z0-9]{2,8};/i', '', $b);
							 | 
						|
								  // remove all non-alphanumeric chars
							 | 
						|
								  $a = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($a));
							 | 
						|
								  $b = preg_replace('/[^a-zA-Z0-9]/', '', strtolower($b));
							 | 
						|
								  return $a == $b;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// Given a parsed microformat data structure, find the feed on the page.
							 | 
						|
								// This is meant to follow
							 | 
						|
								// * http://indiewebcamp.com/feed#How_To_Consume
							 | 
						|
								// * http://microformats.org/wiki/h-feed#Parsing
							 | 
						|
								// Returns an array:
							 | 
						|
								// [
							 | 
						|
								//   'properties' => [ list of mf2 properties of the h-feed ],
							 | 
						|
								//   'entries' => [ list of h-entry items of the feed ]
							 | 
						|
								// ]
							 | 
						|
								function find_feed_info(&$data) {
							 | 
						|
								
							 | 
						|
								  // tantek.com : h-card => h-feed => h-entry
							 | 
						|
								  // snarfed.org : h-feed => h-entry
							 | 
						|
								  // aaronparecki.com : h-entry
							 | 
						|
								
							 | 
						|
								  $properties = [];
							 | 
						|
								  $entries = [];
							 | 
						|
								
							 | 
						|
								  // Find the first h-feed
							 | 
						|
								  $feeds = Mf2\findMicroformatsByType($data, 'h-feed');
							 | 
						|
								  if(count($feeds)) {
							 | 
						|
								    $feed = $feeds[0];
							 | 
						|
								
							 | 
						|
								    $properties = $feed['properties'];
							 | 
						|
								    $entries = Mf2\findMicroformatsByType($feed['children'], 'h-entry', false);
							 | 
						|
								
							 | 
						|
								    return [
							 | 
						|
								      'properties' => $properties,
							 | 
						|
								      'entries' => $entries
							 | 
						|
								    ];
							 | 
						|
								
							 | 
						|
								  } else {
							 | 
						|
								    // This is an implied feed if there are h-entry posts found at the top level
							 | 
						|
								
							 | 
						|
								    $entries = Mf2\findMicroformatsByType($data['items'], 'h-entry', false);
							 | 
						|
								
							 | 
						|
								    if(count($entries)) {
							 | 
						|
								      return [
							 | 
						|
								        'properties' => [],
							 | 
						|
								        'entries' => $entries
							 | 
						|
								      ];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  return false;
							 | 
						|
								}
							 |