. * */ namespace Friendica\Model\Post; use \BadMethodCallException; use Friendica\Core\Protocol; use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\Model\Post; class Content { /** * Insert a new post-content entry * * @param integer $uri_id * @param array $fields * @return bool success * @throws \Exception */ public static function insert(int $uri_id, array $data = []) { if (empty($uri_id)) { throw new BadMethodCallException('Empty URI_id'); } $fields = DBStructure::getFieldsForTable('post-content', $data); // Additionally assign the key fields $fields['uri-id'] = $uri_id; return DBA::insert('post-content', $fields, Database::INSERT_IGNORE); } /** * Update a post content entry * * @param integer $uri_id * @param array $data * @param bool $insert_if_missing * @return bool * @throws \Exception */ public static function update(int $uri_id, array $data = [], bool $insert_if_missing = false) { if (empty($uri_id)) { throw new BadMethodCallException('Empty URI_id'); } $fields = DBStructure::getFieldsForTable('post-content', $data); // Remove the key fields unset($fields['uri-id']); if (empty($fields)) { return true; } return DBA::update('post-content', $fields, ['uri-id' => $uri_id], $insert_if_missing ? true : []); } /** * Delete a row from the post-content table * * @param array $conditions Field condition(s) * @param array $options * - cascade: If true we delete records in other tables that depend on the one we're deleting through * relations (default: true) * * @return boolean was the delete successful? * @throws \Exception */ public static function delete(array $conditions, array $options = []) { return DBA::delete('post-content', $conditions, $options); } /** * 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 `post-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE)) AND (`uid` = ? OR (`uid` = ? AND NOT `global`)) AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))", $search, 0, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0]; if (!empty($last_uriid)) { $condition = DBA::mergeConditions($condition, ["`uri-id` < ?", $last_uriid]); } $params = [ 'order' => ['uri-id' => true], '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 `post-content` WHERE MATCH (`title`, `content-warning`, `body`) AGAINST (? IN BOOLEAN MODE)) AND (`uid` = ? OR (`uid` = ? AND NOT `global`)) AND (`network` IN (?, ?, ?, ?) OR (`uid` = ? AND `uid` != ?))", $search, 0, $uid, Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, $uid, 0]; return Post::count($condition); } }