use Friendica\Core\System;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
-use Friendica\Model\Contact;
-use Friendica\Model\Event;
-use Friendica\Model\FileTag;
-use Friendica\Model\PermissionSet;
-use Friendica\Model\Term;
-use Friendica\Model\ItemURI;
-use Friendica\Model\Photo;
-use Friendica\Model\Attach;
-use Friendica\Object\Image;
use Friendica\Protocol\Diaspora;
use Friendica\Protocol\OStatus;
use Friendica\Util\DateTimeFormat;
* @brief Fills an array with data from an item query
*
* @param object $stmt statement object
+ * @param bool $do_close
* @return array Data array
*/
public static function inArray($stmt, $do_close = true) {
* @param array $condition array of fields for condition
*
* @return boolean Are there rows for that condition?
+ * @throws \Exception
*/
public static function exists($condition) {
$stmt = self::select(['id'], $condition, ['limit' => 1]);
*
* @brief Retrieve a single record from a table
* @param integer $uid User ID
- * @param array $fields
- * @param array $condition
- * @param array $params
+ * @param array $selected
+ * @param array $condition
+ * @param array $params
* @return bool|array
- * @see DBA::select
+ * @throws \Exception
+ * @see DBA::select
*/
public static function selectFirstForUser($uid, array $selected = [], array $condition = [], $params = [])
{
/**
* @brief Select rows from the item table for a given user
*
- * @param integer $uid User ID
- * @param array $selected Array of selected fields, empty for all
- * @param array $condition Array of fields for condition
- * @param array $params Array of several parameters
+ * @param integer $uid User ID
+ * @param array $selected Array of selected fields, empty for all
+ * @param array $condition Array of fields for condition
+ * @param array $params Array of several parameters
*
* @return boolean|object
+ * @throws \Exception
*/
public static function selectForUser($uid, array $selected = [], array $condition = [], $params = [])
{
* Retrieve a single record from the item table and returns it in an associative array
*
* @brief Retrieve a single record from a table
- * @param array $fields
- * @param array $condition
- * @param array $params
+ * @param array $fields
+ * @param array $condition
+ * @param array $params
* @return bool|array
- * @see DBA::select
+ * @throws \Exception
+ * @see DBA::select
*/
public static function selectFirst(array $fields = [], array $condition = [], $params = [])
{
/**
* @brief Select rows from the item table
*
- * @param array $selected Array of selected fields, empty for all
- * @param array $condition Array of fields for condition
- * @param array $params Array of several parameters
+ * @param array $selected Array of selected fields, empty for all
+ * @param array $condition Array of fields for condition
+ * @param array $params Array of several parameters
*
* @return boolean|object
+ * @throws \Exception
*/
public static function select(array $selected = [], array $condition = [], $params = [])
{
/**
* @brief Select rows from the starting post in the item table
*
- * @param integer $uid User ID
- * @param array $fields Array of selected fields, empty for all
- * @param array $condition Array of fields for condition
- * @param array $params Array of several parameters
+ * @param integer $uid User ID
+ * @param array $selected
+ * @param array $condition Array of fields for condition
+ * @param array $params Array of several parameters
*
* @return boolean|object
+ * @throws \Exception
*/
public static function selectThreadForUser($uid, array $selected = [], array $condition = [], $params = [])
{
*
* @brief Retrieve a single record from a table
* @param integer $uid User ID
- * @param array $selected
- * @param array $condition
- * @param array $params
+ * @param array $selected
+ * @param array $condition
+ * @param array $params
* @return bool|array
- * @see DBA::select
+ * @throws \Exception
+ * @see DBA::select
*/
public static function selectFirstThreadForUser($uid, array $selected = [], array $condition = [], $params = [])
{
* Retrieve a single record from the starting post in the item table and returns it in an associative array
*
* @brief Retrieve a single record from a table
- * @param array $fields
- * @param array $condition
- * @param array $params
+ * @param array $fields
+ * @param array $condition
+ * @param array $params
* @return bool|array
- * @see DBA::select
+ * @throws \Exception
+ * @see DBA::select
*/
public static function selectFirstThread(array $fields = [], array $condition = [], $params = [])
{
/**
* @brief Select rows from the starting post in the item table
*
- * @param array $selected Array of selected fields, empty for all
- * @param array $condition Array of fields for condition
- * @param array $params Array of several parameters
+ * @param array $selected Array of selected fields, empty for all
+ * @param array $condition Array of fields for condition
+ * @param array $params Array of several parameters
*
* @return boolean|object
+ * @throws \Exception
*/
public static function selectThread(array $selected = [], array $condition = [], $params = [])
{
/**
* @brief Returns a list of fields that are associated with the item table
*
+ * @param $usermode
* @return array field list
*/
private static function fieldlist($usermode)
/**
* @brief Returns all needed "JOIN" commands for the "select" functions
*
- * @param integer $uid User ID
- * @param string $sql_commands The parts of the built SQL commands in the "select" functions
- * @param boolean $thread_mode Called for the items (false) or for the threads (true)
+ * @param integer $uid User ID
+ * @param string $sql_commands The parts of the built SQL commands in the "select" functions
+ * @param boolean $thread_mode Called for the items (false) or for the threads (true)
*
+ * @param $user_mode
* @return string The SQL joins for the "select" functions
*/
private static function constructJoins($uid, $sql_commands, $thread_mode, $user_mode)
/**
* @brief Update existing item entries
*
- * @param array $fields The fields that are to be changed
+ * @param array $fields The fields that are to be changed
* @param array $condition The condition for finding the item entries
*
* In the future we may have to change permissions as well.
* A return value of "0" doesn't mean an error - but that 0 rows had been changed.
*
* @return integer|boolean number of affected rows - or "false" if there was an error
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function update(array $fields, array $condition)
{
/**
* @brief Delete an item and notify others about it - if it was ours
*
- * @param array $condition The condition for finding the item entries
- * @param integer $priority Priority for the notification
+ * @param array $condition The condition for finding the item entries
+ * @param integer $priority Priority for the notification
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function delete($condition, $priority = PRIORITY_HIGH)
{
/**
* @brief Delete an item for an user and notify others about it - if it was ours
*
- * @param array $condition The condition for finding the item entries
- * @param integer $uid User who wants to delete this item
+ * @param array $condition The condition for finding the item entries
+ * @param integer $uid User who wants to delete this item
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function deleteForUser($condition, $uid)
{
/**
* @brief Delete an item and notify others about it - if it was ours
*
- * @param integer $item_id Item ID that should be delete
+ * @param integer $item_id Item ID that should be delete
* @param integer $priority Priority for the notification
*
* @return boolean success
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function deleteById($item_id, $priority = PRIORITY_HIGH)
{
* This only applies to photos uploaded from the photos page. Photos inserted into a post do not
* generate a resource-id and therefore aren't intimately linked to the item.
*/
+ /// @TODO: this should first check if photo is used elsewhere
if (strlen($item['resource-id'])) {
Photo::delete(['resource-id' => $item['resource-id'], 'uid' => $item['uid']]);
}
}
// If item has attachments, drop them
- foreach (explode(", ", $item['attach']) as $attach) {
+ /// @TODO: this should first check if attachment is used elsewhere
+ foreach (explode(",", $item['attach']) as $attach) {
preg_match("|attach/(\d+)|", $attach, $matches);
if (is_array($matches) && count($matches) > 1) {
Attach::delete(['id' => $matches[1], 'uid' => $item['uid']]);
// This function will finally cover most of the preparation functionality in mod/item.php
public static function prepare(&$item)
{
+ /*
+ * @TODO: Unused code triggering inspection errors
+ *
$data = BBCode::getAttachmentData($item['body']);
if ((preg_match_all("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism", $item['body'], $match, PREG_SET_ORDER) || isset($data["type"]))
&& ($posttype != Item::PT_PERSONAL_NOTE)) {
$posttype = Item::PT_PAGE;
$objecttype = ACTIVITY_OBJ_BOOKMARK;
}
+ */
}
public static function insert($item, $force_parent = false, $notify = false, $dontcache = false)
{
$orig_item = $item;
+ $priority = PRIORITY_HIGH;
+
// If it is a posting where users should get notifications, then define it as wall posting
if ($notify) {
$item['wall'] = 1;
if (is_int($notify)) {
$priority = $notify;
- } else {
- $priority = PRIORITY_HIGH;
}
} else {
$item['network'] = trim(defaults($item, 'network', Protocol::PHANTOM));
DBA::insert('diaspora-interaction', ['uri-id' => $item['uri-id'], 'interaction' => $diaspora_signed_text], true);
}
- $deleted = self::tagDeliver($item['uid'], $current_post);
+ self::tagDeliver($item['uid'], $current_post);
/*
* current post can be deleted if is for a community page and no mention are
* in it.
*/
- if (!$deleted && !$dontcache) {
+ if (!$dontcache) {
$posted_item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $current_post]);
if (DBA::isResult($posted_item)) {
if ($notify) {
$cmd = 'wall-new';
}
- Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], 'Notifier', $cmd, $current_post);
+ Worker::add(['priority' => $priority, 'dont_fork' => true], 'Notifier', $cmd, $current_post);
}
return $current_post;
*
* @param array $item The item fields that are to be inserted
* @return bool
+ * @throws \Exception
*/
private static function insertActivity(&$item)
{
* @brief Insert a new item content entry
*
* @param array $item The item fields that are to be inserted
+ * @throws \Exception
*/
private static function insertContent(&$item)
{
/**
* @brief Update existing item content entries
*
- * @param array $item The item fields that are to be changed
+ * @param array $item The item fields that are to be changed
* @param array $condition The condition for finding the item content entries
+ * @return bool
+ * @throws \Exception
*/
private static function updateActivity($item, $condition)
{
/**
* @brief Update existing item content entries
*
- * @param array $item The item fields that are to be changed
+ * @param array $item The item fields that are to be changed
* @param array $condition The condition for finding the item content entries
+ * @throws \Exception
*/
private static function updateContent($item, $condition)
{
*
* @param integer $itemid Item ID that should be added
* @param string $signed_text Original text (for Diaspora signatures), JSON encoded.
+ * @throws \Exception
*/
public static function distribute($itemid, $signed_text = '')
{
$condition = ['id' => $itemid, 'uid' => 0,
'network' => [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, ""],
'visible' => true, 'deleted' => false, 'moderated' => false, 'private' => false];
- $item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $itemid]);
+ $item = self::selectFirst(self::ITEM_FIELDLIST, $condition);
if (!DBA::isResult($item)) {
return;
}
* @param integer $itemid Item ID that should be added
* @param array $item The item entry that will be stored
* @param integer $uid The user that will receive the item entry
+ * @throws \Exception
*/
private static function storeForUser($itemid, $item, $uid)
{
* It is planned that in the future we will store public item entries only once.
*
* @param integer $itemid Item ID that should be added
+ * @throws \Exception
*/
public static function addShadow($itemid)
{
* This function does the same like the function above - but for comments
*
* @param integer $itemid Item ID that should be added
+ * @throws \Exception
*/
public static function addShadowPost($itemid)
{
}
}
- /**
+ /**
* Adds a language specification in a "language" element of given $arr.
* Expects "body" element to exist in $arr.
+ *
+ * @param $item
+ * @throws \Text_LanguageDetect_Exception
*/
private static function addLanguageToItemArray(&$item)
{
/**
* generate an unique URI
*
- * @param integer $uid User id
- * @param string $guid An existing GUID (Otherwise it will be generated)
+ * @param integer $uid User id
+ * @param string $guid An existing GUID (Otherwise it will be generated)
*
* @return string
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function newURI($uid, $guid = "")
{
* Don't set this value if it isn't from the owner (could be an author that we don't know)
*
* @param array $arr Contains the just posted item record
+ * @throws \Exception
*/
private static function updateContact($arr)
{
/**
* This function is only used for the old Friendica app on Android that doesn't like paths with guid
+ *
* @param string $guid item guid
* @param int $uid user id
* @return array with id and nick of the item with the given guid
+ * @throws \Exception
*/
public static function getIdAndNickByGuid($guid, $uid = 0)
{
$id = 0;
if ($uid == 0) {
- $uid == local_user();
+ $uid = local_user();
}
// Does the given user have this item?
/**
* look for mention tags and setup a second delivery chain for forum/community posts if appropriate
+ *
* @param int $uid
* @param int $item_id
- * @return bool true if item was deleted, else false
+ * @return void true if item was deleted, else false
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws \ImagickException
*/
private static function tagDeliver($uid, $item_id)
{
return;
}
- $community_page = (($user['page-flags'] == Contact::PAGE_COMMUNITY) ? true : false);
- $prvgroup = (($user['page-flags'] == Contact::PAGE_PRVGROUP) ? true : false);
+ $community_page = (($user['page-flags'] == User::PAGE_FLAGS_COMMUNITY) ? true : false);
+ $prvgroup = (($user['page-flags'] == User::PAGE_FLAGS_PRVGROUP) ? true : false);
$item = self::selectFirst(self::ITEM_FIELDLIST, ['id' => $item_id]);
if (!DBA::isResult($item)) {
* @param array $item
* @param int $cid
* @return string
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws \ImagickException
*/
public static function fixPrivatePhotos($s, $uid, $item = null, $cid = 0)
{
*
* @param string $item_id
* @param string $verb
- * Activity verb. One of
- * like, unlike, dislike, undislike, attendyes, unattendyes,
- * attendno, unattendno, attendmaybe, unattendmaybe
- * @hook 'post_local_end'
- * array $arr
- * 'post_id' => ID of posted item
+ * Activity verb. One of
+ * like, unlike, dislike, undislike, attendyes, unattendyes,
+ * attendno, unattendno, attendmaybe, unattendmaybe
+ * @return bool
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws \ImagickException
+ * @hook 'post_local_end'
+ * array $arr
+ * 'post_id' => ID of posted item
*/
public static function performLike($item_id, $verb)
{
// Contact-id is the uid-dependant author contact
if (local_user() == $uid) {
$item_contact_id = $owner_self_contact['id'];
- $item_contact = $owner_self_contact;
} else {
$item_contact_id = Contact::getIdForURL($author_contact['url'], $uid, true);
$item_contact = DBA::selectFirst('contact', [], ['id' => $item_contact_id]);
$item["mention"] = 1;
}
- $sql = "";
-
$fields = [];
foreach ($item as $field => $data) {
/**
* get translated item type
*
- * @param array $itme
+ * @param $item
* @return string
*/
public static function postType($item)
* @param array $item
* @param bool $update
*
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Remove reference, simply return "rendered-html" and "rendered-hash"
*/
public static function putInCache(&$item, $update = false)
* @param boolean $attach
* @param boolean $is_preview
* @return string item body html
- * @hook prepare_body_init item array before any work
- * @hook prepare_body_content_filter ('item'=>item array, 'filter_reasons'=>string array) before first bbcode to html
- * @hook prepare_body ('item'=>item array, 'html'=>body string, 'is_preview'=>boolean, 'filter_reasons'=>string array) after first bbcode to html
- * @hook prepare_body_final ('item'=>item array, 'html'=>body string) after attach icons and blockquote special case handling (spoiler, author)
+ * @throws \Friendica\Network\HTTPException\InternalServerErrorException
+ * @throws \ImagickException
+ * @hook prepare_body_init item array before any work
+ * @hook prepare_body_content_filter ('item'=>item array, 'filter_reasons'=>string array) before first bbcode to html
+ * @hook prepare_body ('item'=>item array, 'html'=>body string, 'is_preview'=>boolean, 'filter_reasons'=>string array) after first bbcode to html
+ * @hook prepare_body_final ('item'=>item array, 'html'=>body string) after attach icons and blockquote special case handling (spoiler, author)
*/
public static function prepareBody(array &$item, $attach = false, $is_preview = false)
{
/**
* get private link for item
+ *
* @param array $item
* @return boolean|array False if item has not plink, otherwise array('href'=>plink url, 'title'=>translated title)
+ * @throws \Exception
*/
public static function getPlink($item)
{