2021-01-30 23:03:53 +01:00
< ? php
/**
2024-01-02 21:57:26 +01:00
* @ copyright Copyright ( C ) 2010 - 2024 , the Friendica project
2021-01-30 23:03:53 +01:00
*
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*
*/
namespace Friendica\Model\Post ;
use \BadMethodCallException ;
use Friendica\Database\Database ;
use Friendica\Database\DBA ;
2022-07-12 23:21:16 +02:00
use Friendica\DI ;
2024-01-17 20:46:22 +01:00
use Friendica\Model\Item ;
2021-01-30 23:03:53 +01:00
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' );
}
2022-07-13 00:23:12 +02:00
$fields = DI :: dbaDefinition () -> truncateFieldsForTable ( 'post-content' , $data );
2021-01-30 23:03:53 +01:00
// 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' );
}
2022-07-13 00:23:12 +02:00
$fields = DI :: dbaDefinition () -> truncateFieldsForTable ( 'post-content' , $data );
2021-01-30 23:03:53 +01:00
// 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 )
{
2024-01-17 20:46:22 +01:00
$search = Post\Engagement :: escapeKeywords ( $search );
if ( $uid != 0 ) {
$condition = [ " MATCH (`searchtext`) AGAINST (? IN BOOLEAN MODE) and (private = ? OR `uri-id` in (SELECT `uri-id` FROM `post-user` where `uid` = ?)) " , $search , Item :: PUBLIC , $uid ];
} else {
$condition = [ " MATCH (`searchtext`) AGAINST (? IN BOOLEAN MODE) and private = ? " , $search , Item :: PUBLIC ];
}
2021-01-30 23:03:53 +01:00
if ( ! empty ( $last_uriid )) {
$condition = DBA :: mergeConditions ( $condition , [ " `uri-id` < ? " , $last_uriid ]);
}
$params = [
'order' => [ 'uri-id' => true ],
'limit' => [ $start , $limit ]
];
2024-01-17 20:46:22 +01:00
$tags = DBA :: select ( 'post-searchindex' , [ 'uri-id' ], $condition , $params );
2021-01-30 23:03:53 +01:00
$uriids = [];
while ( $tag = DBA :: fetch ( $tags )) {
$uriids [] = $tag [ 'uri-id' ];
}
DBA :: close ( $tags );
return $uriids ;
}
public static function countBySearch ( string $search , int $uid = 0 )
{
2024-01-17 20:46:22 +01:00
$search = Post\Engagement :: escapeKeywords ( $search );
if ( $uid != 0 ) {
$condition = [ " MATCH (`searchtext`) AGAINST (? IN BOOLEAN MODE) and (private = ? OR `uri-id` in (SELECT `uri-id` FROM `post-user` where `uid` = ?)) " , $search , Item :: PUBLIC , $uid ];
} else {
$condition = [ " MATCH (`searchtext`) AGAINST (? IN BOOLEAN MODE) and private = ? " , $search , Item :: PUBLIC ];
}
return DBA :: count ( 'post-searchindex' , $condition );
2021-01-30 23:03:53 +01:00
}
}