<?php
|
|
namespace p3k\XRay;
|
|
|
|
class PostType {
|
|
|
|
// Takes an XRay format post and runs post-type-discovery, returning a single string
|
|
// https://www.w3.org/TR/post-type-discovery/
|
|
public static function discover($post) {
|
|
|
|
// A few of the post types are defined as the same as their microformats h-* types
|
|
if(in_array($post['type'], ['event','recipe','review']))
|
|
return $post['type'];
|
|
|
|
if(isset($post['rsvp']))
|
|
return 'rsvp';
|
|
|
|
if(isset($post['repost-of']))
|
|
return 'repost';
|
|
|
|
if(isset($post['like-of']))
|
|
return 'like';
|
|
|
|
if(isset($post['in-reply-to']))
|
|
return 'reply';
|
|
|
|
if(isset($post['bookmark-of']))
|
|
return 'bookmark';
|
|
|
|
if(isset($post['follow-of']))
|
|
return 'follow';
|
|
|
|
if(isset($post['checkin']))
|
|
return 'checkin';
|
|
|
|
if(isset($post['video']))
|
|
return 'video';
|
|
|
|
if(isset($post['audio']))
|
|
return 'audio';
|
|
|
|
if(isset($post['photo']))
|
|
return 'photo';
|
|
|
|
$content = '';
|
|
if(isset($post['content']))
|
|
$content = $post['content']['text'];
|
|
elseif(isset($post['summary']))
|
|
$content = $post['summary'];
|
|
|
|
if(!isset($post['name']) || !trim($post['name']))
|
|
return 'note';
|
|
|
|
// Trim all leading/trailing whitespace
|
|
$name = trim($post['name']);
|
|
|
|
// Collapse all sequences of internal whitespace to a single space (0x20) character each
|
|
$name = preg_replace('/\s+/', ' ', $name);
|
|
$content = preg_replace('/\s+/', ' ', $content);
|
|
|
|
// If this processed "name" property value is NOT a prefix of the
|
|
// processed "content" property, then it is an article post.
|
|
if(strpos($content, $name) === false) {
|
|
return 'article';
|
|
}
|
|
|
|
return 'note';
|
|
}
|
|
|
|
}
|