Merge pull request #11413 from annando/vote-preparation
Preparation for storing incoming polls
This commit is contained in:
commit
627e91f209
|
@ -556,6 +556,9 @@ class Receiver
|
||||||
switch ($type) {
|
switch ($type) {
|
||||||
case 'as:Create':
|
case 'as:Create':
|
||||||
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
|
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
|
||||||
|
if ($object_data['object_type'] == 'as:Question') {
|
||||||
|
self::storeUnhandledActivity(false, $type, $object_data, $activity, $body, $uid, $trust_source, $push, $signer);
|
||||||
|
}
|
||||||
$item = ActivityPub\Processor::createItem($object_data);
|
$item = ActivityPub\Processor::createItem($object_data);
|
||||||
ActivityPub\Processor::postItem($object_data, $item);
|
ActivityPub\Processor::postItem($object_data, $item);
|
||||||
} elseif (in_array($object_data['object_type'], ['pt:CacheFile'])) {
|
} elseif (in_array($object_data['object_type'], ['pt:CacheFile'])) {
|
||||||
|
@ -1436,6 +1439,59 @@ class Receiver
|
||||||
return $attachlist;
|
return $attachlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert questions from JSON-LD format into a simplified format
|
||||||
|
*
|
||||||
|
* @param array $object
|
||||||
|
*
|
||||||
|
* @return array Questions in a simplified format
|
||||||
|
*/
|
||||||
|
private static function processQuestion(array $object)
|
||||||
|
{
|
||||||
|
$question = [];
|
||||||
|
|
||||||
|
if (!empty($object['as:oneOf'])) {
|
||||||
|
$question['multiple'] = false;
|
||||||
|
$options = JsonLD::fetchElementArray($object, 'as:oneOf') ?? [];
|
||||||
|
} elseif (!empty($object['as:anyOf'])) {
|
||||||
|
$question['multiple'] = true;
|
||||||
|
$options = JsonLD::fetchElementArray($object, 'as:anyOf') ?? [];
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// @todo Check if "closed" is a thing, see here: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-closed
|
||||||
|
$question['voters'] = (int)JsonLD::fetchElement($object, 'toot:votersCount', '@value');
|
||||||
|
$question['options'] = [];
|
||||||
|
|
||||||
|
$voters = 0;
|
||||||
|
|
||||||
|
foreach ($options as $option) {
|
||||||
|
if (JsonLD::fetchElement($option, '@type') != 'as:Note') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = JsonLD::fetchElement($option, 'as:name', '@value');
|
||||||
|
|
||||||
|
if (empty($option['as:replies'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$replies = JsonLD::fetchElement($option['as:replies'], 'as:totalItems', '@value');
|
||||||
|
|
||||||
|
$question['options'][] = ['name' => $name, 'replies' => $replies];
|
||||||
|
|
||||||
|
$voters += (int)$replies;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For single choice question we can count the number of voters if not provided (like with Misskey)
|
||||||
|
if (empty($question['voters']) && !$question['multiple']) {
|
||||||
|
$question['voters'] = $voters;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $question;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch the original source or content with the "language" Markdown or HTML
|
* Fetch the original source or content with the "language" Markdown or HTML
|
||||||
*
|
*
|
||||||
|
@ -1687,6 +1743,10 @@ class Receiver
|
||||||
$object_data['alternate-url'] = null;
|
$object_data['alternate-url'] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($object_data['object_type'] == 'as:Question') {
|
||||||
|
$object_data['question'] = self::processQuestion($object);
|
||||||
|
}
|
||||||
|
|
||||||
$receiverdata = self::getReceivers($object, $object_data['actor'], $object_data['tags'], true);
|
$receiverdata = self::getReceivers($object, $object_data['actor'], $object_data['tags'], true);
|
||||||
$receivers = $reception_types = [];
|
$receivers = $reception_types = [];
|
||||||
foreach ($receiverdata as $key => $data) {
|
foreach ($receiverdata as $key => $data) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user