use Friendica\Content\Text;
use Friendica\Content\Text\BBCode;
use Friendica\Core\Protocol;
+use Friendica\Database\DBA;
use Friendica\DI;
class ItemContent
{
+ /**
+ * Search posts for given content
+ *
+ * @param string $search
+ * @param integer $uid
+ * @param integer $start
+ * @param integer $limit
+ * @param integer $last_uriid
+ * @return array
+ */
+ public static function getURIIdListBySearch(string $search, int $uid = 0, int $start = 0, int $limit = 100, int $last_uriid = 0)
+ {
+ $condition = ["`uri-id` IN (SELECT `uri-id` FROM `item-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE))
+ AND (NOT `private` OR (`private` AND `uid` = ?))
+ AND `uri-id` IN (SELECT `uri-id` FROM `post-view` WHERE `network` IN (?, ?, ?, ?))",
+ $search, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS];
+
+ if (!empty($last_uriid)) {
+ $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $last_uriid]);
+ }
+
+ $params = [
+ 'order' => ['uri-id' => true],
+ 'group_by' => ['uri-id'],
+ 'limit' => [$start, $limit]
+ ];
+
+ $tags = Post::select(['uri-id'], $condition, $params);
+
+ $uriids = [];
+ while ($tag = DBA::fetch($tags)) {
+ $uriids[] = $tag['uri-id'];
+ }
+ DBA::close($tags);
+
+ return $uriids;
+ }
+
+ public static function countBySearch(string $search, int $uid = 0)
+ {
+ $condition = ["`uri-id` IN (SELECT `uri-id` FROM `item-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE))
+ AND (NOT `private` OR (`private` AND `uid` = ?))
+ AND `uri-id` IN (SELECT `uri-id` FROM `post-view` WHERE `network` IN (?, ?, ?, ?))",
+ $search, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS];
+ return Post::count($condition);
+ }
+
/**
* Convert a message into plaintext for connectors to other networks
*