+ return $o;
+}
+
+/**
+ * @param int $id
+ * @param string $return
+ * @return string
+ * @throws HTTPException\InternalServerErrorException
+ */
+function drop_item(int $id, string $return = '')
+{
+ // locate item to be deleted
+ $fields = ['id', 'uid', 'guid', 'contact-id', 'deleted', 'gravity', 'parent'];
+ $item = Item::selectFirstForUser(local_user(), $fields, ['id' => $id]);
+
+ if (!DBA::isResult($item)) {
+ notice(DI::l10n()->t('Item not found.'));
+ DI::baseUrl()->redirect('network');
+ }
+
+ if ($item['deleted']) {
+ return '';
+ }
+
+ $contact_id = 0;
+
+ // check if logged in user is either the author or owner of this item
+ if (Session::getRemoteContactID($item['uid']) == $item['contact-id']) {
+ $contact_id = $item['contact-id'];
+ }
+
+ if ((local_user() == $item['uid']) || $contact_id) {
+ // Check if we should do HTML-based delete confirmation
+ if (!empty($_REQUEST['confirm'])) {
+ // <form> can't take arguments in its "action" parameter
+ // so add any arguments as hidden inputs
+ $query = explode_querystring(DI::args()->getQueryString());
+ $inputs = [];
+
+ foreach ($query['args'] as $arg) {
+ if (strpos($arg, 'confirm=') === false) {
+ $arg_parts = explode('=', $arg);
+ $inputs[] = ['name' => $arg_parts[0], 'value' => $arg_parts[1]];
+ }
+ }
+
+ return Renderer::replaceMacros(Renderer::getMarkupTemplate('confirm.tpl'), [
+ '$method' => 'get',
+ '$message' => DI::l10n()->t('Do you really want to delete this item?'),
+ '$extra_inputs' => $inputs,
+ '$confirm' => DI::l10n()->t('Yes'),
+ '$confirm_url' => $query['base'],
+ '$confirm_name' => 'confirmed',
+ '$cancel' => DI::l10n()->t('Cancel'),
+ ]);
+ }
+ // Now check how the user responded to the confirmation query
+ if (!empty($_REQUEST['canceled'])) {
+ DI::baseUrl()->redirect('display/' . $item['guid']);
+ }
+
+ $is_comment = $item['gravity'] == GRAVITY_COMMENT;
+ $parentitem = null;
+ if (!empty($item['parent'])) {
+ $fields = ['guid'];
+ $parentitem = Item::selectFirstForUser(local_user(), $fields, ['id' => $item['parent']]);