Term::insertFromFileFieldByItemId($item['id']);
self::updateThread($item['id']);
- // We only need to notfiy others when it is an original entry from us
- if ($item['origin']) {
+ // We only need to notfiy others when it is an original entry from us.
+ // Only call the notifier when the item has some content relevant change.
+ if ($item['origin'] && in_array('edited', array_keys($fields))) {
Worker::add(PRIORITY_HIGH, "Notifier", 'edit_post', $item['id']);
}
}
*
* @param array $condition The condition for finding the item entries
* @param integer $priority Priority for the notification
+ * @param integer $uid User who wants to delete the item
*/
- public static function delete($condition, $priority = PRIORITY_HIGH)
+ public static function delete($condition, $priority = PRIORITY_HIGH, $uid = 0)
{
$items = dba::select('item', ['id'], $condition);
while ($item = dba::fetch($items)) {
- self::deleteById($item['id'], $priority);
+ self::deleteById($item['id'], $priority, $uid);
}
dba::close($items);
}
*
* @param integer $item_id Item ID that should be delete
* @param integer $priority Priority for the notification
+ * @param integer $uid User who wants to delete the item
*
* @return boolean success
*/
- public static function deleteById($item_id, $priority = PRIORITY_HIGH)
+ public static function deleteById($item_id, $priority = PRIORITY_HIGH, $uid = 0)
{
// locate item to be deleted
- $fields = ['id', 'uid', 'parent', 'parent-uri', 'origin', 'deleted',
- 'file', 'resource-id', 'event-id', 'attach',
+ $fields = ['id', 'uri', 'uid', 'parent', 'parent-uri', 'origin',
+ 'deleted', 'file', 'resource-id', 'event-id', 'attach',
'verb', 'object-type', 'object', 'target', 'contact-id'];
$item = dba::selectFirst('item', $fields, ['id' => $item_id]);
if (!DBM::is_result($item)) {
+ logger('Item with ID ' . $item_id . " hasn't been found.", LOGGER_DEBUG);
return false;
}
if ($item['deleted']) {
+ logger('Item with ID ' . $item_id . ' has already been deleted.', LOGGER_DEBUG);
return false;
}
$parent = ['origin' => false];
}
- logger('delete item: ' . $item['id'], LOGGER_DEBUG);
+ // "Deleting" global items just means hiding them
+ if (($item['uid'] == 0) && ($uid != 0)) {
+ dba::update('user-item', ['hidden' => true], ['iid' => $item_id, 'uid' => $uid], true);
+ return true;
+ }
// clean up categories and tags so they don't end up as orphans
Term::insertFromFileFieldByItemId($item['id']);
self::deleteThread($item['id'], $item['parent-uri']);
+ if (!dba::exists('item', ["`uri` = ? AND `uid` != 0 AND NOT `deleted`", $item['uri']])) {
+ self::delete(['uri' => $item['uri'], 'uid' => 0, 'deleted' => false], $priority);
+ }
+
// If it's the parent of a comment thread, kill all the kids
if ($item['id'] == $item['parent']) {
- self::delete(['parent' => $item['parent']], $priority);
+ self::delete(['parent' => $item['parent'], 'deleted' => false], $priority);
}
- // send the notification upstream/downstream
+ // Is it our comment and/or our thread?
if ($item['origin'] || $parent['origin']) {
+
+ // When we delete the original post we will delete all existing copies on the server as well
+ self::delete(['uri' => $item['uri'], 'deleted' => false], $priority);
+
+ // send the notification upstream/downstream
Worker::add(['priority' => $priority, 'dont_fork' => true], "Notifier", "drop", intval($item['id']));
+ } elseif ($item['uid'] != 0) {
+
+ // When we delete just our local user copy of an item, we have to set a marker to hide it
+ $global_item = dba::selectFirst('item', ['id'], ['uri' => $item['uri'], 'uid' => 0, 'deleted' => false]);
+ if (DBM::is_result($global_item)) {
+ dba::update('user-item', ['hidden' => true], ['iid' => $global_item['id'], 'uid' => $item['uid']], true);
+ }
}
+ logger('Item with ID ' . $item_id . " has been deleted.", LOGGER_DEBUG);
+
return true;
}
$item['origin'] = 1;
$item['network'] = NETWORK_DFRN;
$item['protocol'] = PROTOCOL_DFRN;
+
+ if (is_int($notify)) {
+ $priority = $notify;
+ } else {
+ $priority = PRIORITY_HIGH;
+ }
} else {
$item['network'] = trim(defaults($item, 'network', NETWORK_PHANTOM));
}
check_user_notification($current_post);
if ($notify) {
- Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", $notify_type, $current_post);
+ Worker::add(['priority' => $priority, 'dont_fork' => true], "Notifier", $notify_type, $current_post);
} elseif (!empty($parent) && $parent['origin']) {
Worker::add(['priority' => PRIORITY_HIGH, 'dont_fork' => true], "Notifier", "comment-import", $current_post);
}
}
}
- private static function setHashtags(&$item)
+ public static function setHashtags(&$item)
{
$tags = get_tags($item["body"]);