use Friendica\Database\Database;
use Friendica\Database\DBA;
use Friendica\DI;
-use Friendica\Model\Contact;
use Friendica\Model\Item;
use Friendica\Model\Post;
use Friendica\Model\Verb;
class Engagement
{
+ /**
+ * Store engagement data from an item array
+ *
+ * @param array $item
+ * @return void
+ */
public static function storeFromItem(array $item)
{
if (!in_array($item['network'], Protocol::FEDERATED)) {
return;
}
- $parent = Post::selectFirst(['created', 'author-id', 'uid', 'private', 'contact-contact-type'], ['uri-id' => $item['parent-uri-id']]);
+ $parent = Post::selectFirst(['created', 'owner-id', 'uid', 'private', 'contact-contact-type'], ['uri-id' => $item['parent-uri-id']]);
if ($parent['private'] != Item::PUBLIC) {
Logger::debug('Non public posts are not stored', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'uid' => $parent['uid'], 'private' => $parent['private']]);
return;
}
- if ($parent['contact-contact-type'] == Contact::TYPE_COMMUNITY) {
- Logger::debug('Group posts are not stored', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'author-id' => $parent['author-id']]);
- return;
- }
-
- if ($parent['created'] < DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' 24 hour')) {
+ if ($parent['created'] < DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' hour')) {
Logger::debug('Post is too old', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'created' => $parent['created']]);
return;
}
$engagement = [
'uri-id' => $item['parent-uri-id'],
- 'author-id' => $parent['author-id'],
+ 'owner-id' => $parent['owner-id'],
'contact-type' => $parent['contact-contact-type'],
'created' => $parent['created'],
'comments' => DBA::count('post', ['parent-uri-id' => $item['parent-uri-id'], 'gravity' => Item::GRAVITY_COMMENT]),
Verb::getID(Activity::FOLLOW), Verb::getID(Activity::VIEW), Verb::getID(Activity::READ)
])
];
+ if (($engagement['comments'] == 0) && ($engagement['activities'] == 0)) {
+ Logger::debug('No comments nor activities. Engagement not stored', ['fields' => $engagement]);
+ return;
+ }
$ret = DBA::insert('post-engagement', $engagement, Database::INSERT_UPDATE);
Logger::debug('Engagement stored', ['fields' => $engagement, 'ret' => $ret]);
}
+ /**
+ * Expire old engagement data
+ *
+ * @return void
+ */
public static function expire()
{
- DBA::delete('post-engagement', ["`created` < ?", DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' 24 hour')]);
+ DBA::delete('post-engagement', ["`created` < ?", DateTimeFormat::utc('now - ' . DI::config()->get('channel', 'engagement_hours') . ' hour')]);
Logger::notice('Cleared expired engagements', ['rows' => DBA::affectedRows()]);
}
}