DI::keyValue()->set('tumblr_last_poll', time());
}
-function tumblr_add_npf_data($html)
+function tumblr_add_npf_data(string $html, string $plink): string
{
$doc = new DOMDocument();
if (empty($data)) {
continue;
}
-
- tumblr_replace_with_npf($doc, $node, PageInfo::getFooterFromUrl($data['url']));
+
+ tumblr_replace_with_npf($doc, $node, tumblr_get_type_replacement($data, $plink));
+ }
+
+ $list = $xpath->query('//div[@data-npf]');
+ foreach ($list as $node) {
+ $data = tumblr_get_npf_data($node);
+ if (empty($data)) {
+ continue;
+ }
+
+ tumblr_replace_with_npf($doc, $node, tumblr_get_type_replacement($data, $plink));
}
$list = $xpath->query('//figure[@data-provider="youtube"]');
tumblr_replace_with_npf($doc, $node, '[youtube]' . $attributes['data-url'] . '[/youtube]');
}
- return $doc->saveHTML();
+ return $doc->saveHTML();
+}
+
+function tumblr_get_type_replacement(array $data, string $plink): string
+{
+ switch ($data['type']) {
+ case 'poll':
+ $body = '[p][url=' . $plink. ']'. $data['question'] . '[/url][/p][ul]';
+ foreach ($data['answers'] as $answer) {
+ $body .= '[li]' . $answer['answer_text'] . '[/li]';
+ }
+ $body .= '[/ul]';
+ break;
+
+ case 'link':
+ $body = PageInfo::getFooterFromUrl($data['url']);
+
+ default:
+ Logger::notice('Unknown type', ['type' => $data['type'], 'data' => $data, 'plink' => $plink]);
+ $body = '';
+ }
+
+ return $body;
}
function tumblr_get_attributes($node): array
return $attributes;
}
-function tumblr_get_npf_data($node): array
+function tumblr_get_npf_data(DOMNode $node): array
{
$attributes = tumblr_get_attributes($node);
if (empty($attributes['data-npf'])) {
return json_decode($attributes['data-npf'], true);
}
-function tumblr_replace_with_npf($doc, $node, $replacement)
+function tumblr_replace_with_npf(DOMDocument $doc, DOMNode $node, string $replacement)
{
$replace = $doc->createTextNode($replacement);
$node->parentNode->insertBefore($replace, $node);
switch ($post->type) {
case 'text':
$item['title'] = $post->title;
- $item['body'] = HTML::toBBCode($post->body);
+ $item['body'] = HTML::toBBCode(tumblr_add_npf_data($post->body, $post->post_url));
break;
case 'quote':
return new TumblrOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
}
-function tumblr_get_page(int $uid, array $blogs = [])
+function tumblr_get_page(int $uid, array $blogs = []): string
{
$page = DI::pConfig()->get($uid, 'tumblr', 'page');
return '';
}
-function tumblr_get_blogs(int $uid)
+function tumblr_get_blogs(int $uid): array
{
$connection = tumblr_connection($uid);
if (empty($connection)) {