forked from grumpydevelop/federator

- fix bug in which inReplyTo isn't correctly set from contentnation-comments - added dio/article which has functions to convert article to note based on new file - added formatsupport.json to manage special cases (f.e. includes which servers can handle articles)
68 lines
2.4 KiB
PHP
68 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* SPDX-FileCopyrightText: 2024 Sascha Nitsch (grumpydeveloper) https://contentnation.net/@grumpydevelop
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*
|
|
* @author Yannis Vogel (vogeldevelopment)
|
|
**/
|
|
|
|
namespace Federator\DIO;
|
|
|
|
/**
|
|
* IO functions related to articles
|
|
*/
|
|
class Article
|
|
{
|
|
/**
|
|
* Convert an Article to a Note
|
|
*
|
|
* @param \Federator\Data\ActivityPub\Common\Article $article
|
|
* @return \Federator\Data\ActivityPub\Common\Note
|
|
* The generated note
|
|
*/
|
|
public static function convertToNote($article)
|
|
{
|
|
$note = new \Federator\Data\ActivityPub\Common\Note();
|
|
$note->setId($article->getId())
|
|
->setURL($article->getURL());
|
|
$note->setContent($article->getContent());
|
|
$note->setSummary($article->getSummary());
|
|
$note->setPublished($article->getPublished());
|
|
$note->setName($article->getName());
|
|
$note->setAttributedTo($article->getAttributedTo());
|
|
foreach ($article->getTo() as $to) {
|
|
$note->addTo($to);
|
|
}
|
|
foreach ($article->getCc() as $cc) {
|
|
$note->addCc($cc);
|
|
}
|
|
return $note;
|
|
}
|
|
|
|
/** Conditionally convert article to a note
|
|
*
|
|
* @param \Federator\Data\ActivityPub\Common\Article $article
|
|
* @param string $targetUrl
|
|
* The target URL for the activity (e.g. mastodon.social)
|
|
* @return \Federator\Data\ActivityPub\Common\Note|\Federator\Data\ActivityPub\Common\Article
|
|
* The generated note on success, false on failure
|
|
*/
|
|
public static function conditionalConvertToNote($article, $targetUrl)
|
|
{
|
|
$supportFile = file_get_contents(PROJECT_ROOT . '/formatsupport.json');
|
|
if ($supportFile === false) {
|
|
error_log("Article::conditionalConvertToNote Failed to read support file for article conversion.");
|
|
return $article; // Fallback to original article if file read fails
|
|
}
|
|
$supportlist = json_decode($supportFile, true);
|
|
|
|
if (
|
|
!isset($supportlist['activitypub']['article']) ||
|
|
!is_array($supportlist['activitypub']['article']) ||
|
|
!in_array($targetUrl, $supportlist['activitypub']['article'], true)
|
|
) {
|
|
return self::convertToNote($article); // Articles are not supported for this target
|
|
}
|
|
return $article; // Articles are supported, return as is
|
|
}
|
|
}
|