3 namespace Friendica\Api\Mastodon;
5 use Friendica\App\BaseURL;
6 use Friendica\Content\Text\BBCode;
7 use Friendica\Database\DBA;
8 use Friendica\Model\Contact;
9 use Friendica\Util\DateTimeFormat;
14 * @see https://docs.joinmastodon.org/entities/account
28 /** @var string (Datetime) */
38 /** @var string (URL)*/
40 /** @var string (URL) */
42 /** @var string (URL) */
44 /** @var string (URL) */
46 /** @var string (URL) */
50 /** @var Account|null */
52 /** @var Field[]|null */
60 /** @var string|null (Datetime) */
61 var $last_status_at = null;
64 * Creates an account record from a public contact record. Expects all contact table fields to be set.
66 * @param BaseURL $baseUrl
67 * @param array $publicContact Full contact table record with uid = 0
68 * @param array $apcontact Optional full apcontact table record
69 * @param array $userContact Optional full contact table record with uid = local_user()
71 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
73 public static function create(BaseURL $baseUrl, array $publicContact, array $apcontact = [], array $userContact = [])
75 $account = new Account();
76 $account->id = $publicContact['id'];
77 $account->username = $publicContact['nick'];
79 strpos($publicContact['url'], $baseUrl->get() . '/') === 0 ?
80 $publicContact['nick'] :
81 $publicContact['addr'];
82 $account->display_name = $publicContact['name'];
83 $account->locked = !empty($apcontact['manually-approve']);
84 $account->created_at = DateTimeFormat::utc($publicContact['created'], DateTimeFormat::ATOM);
85 $account->followers_count = $apcontact['followers_count'] ?? 0;
86 $account->following_count = $apcontact['following_count'] ?? 0;
87 $account->statuses_count = $apcontact['statuses_count'] ?? 0;
88 $account->note = BBCode::convert($publicContact['about'], false);
89 $account->url = $publicContact['url'];
90 $account->avatar = $userContact['avatar'] ?? $publicContact['avatar'];
91 $account->avatar_static = $userContact['avatar'] ?? $publicContact['avatar'];
92 // No header picture in Friendica
93 $account->header = '';
94 $account->header_static = '';
95 // No custom emojis per account in Friendica
96 $account->emojis = [];
97 // No metadata fields in Friendica
98 $account->fields = [];
99 $account->bot = ($publicContact['contact-type'] == Contact::TYPE_NEWS);
100 $account->group = ($publicContact['contact-type'] == Contact::TYPE_COMMUNITY);
101 $account->discoverable = !$publicContact['unsearchable'];
103 $publicContactLastItem = $publicContact['last-item'] ?: DBA::NULL_DATETIME;
104 $userContactLastItem = $userContact['last-item'] ?? DBA::NULL_DATETIME;
106 $lastItem = $userContactLastItem > $publicContactLastItem ? $userContactLastItem : $publicContactLastItem;
107 $account->last_status_at = $lastItem != DBA::NULL_DATETIME ? DateTimeFormat::utc($lastItem, DateTimeFormat::ATOM) : null;