From e5b54e74ba22b487f816c5a5d16758be34be785a Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 15 Jun 2011 20:43:39 -0700 Subject: delete selected items --- include/conversation.php | 25 ++++++---- include/items.php | 126 +++++++++++++++++++++++++++++++++++++++++++++++ include/main.js | 20 -------- 3 files changed, 142 insertions(+), 29 deletions(-) (limited to 'include') diff --git a/include/conversation.php b/include/conversation.php index 9ffcbe157..0d3123831 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -114,6 +114,8 @@ function conversation(&$a, $items, $mode, $update) { $noshare_tpl = get_markup_template('like_noshare.tpl'); $tpl = get_markup_template('wall_item.tpl'); $wallwall = get_markup_template('wallwall_item.tpl'); + $droptpl = get_markup_template('wall_item_drop.tpl'); + $fakedrop = get_markup_template('wall_fake_drop.tpl'); $alike = array(); $dlike = array(); @@ -126,7 +128,6 @@ function conversation(&$a, $items, $mode, $update) { // - just loop through the items and format them minimally for display $tpl = get_markup_template('search_item.tpl'); - $droptpl = get_markup_template('wall_fake_drop.tpl'); foreach($items as $item) { @@ -171,14 +172,7 @@ function conversation(&$a, $items, $mode, $update) { } $drop = ''; - $dropping = false; - if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user())) - $dropping = true; - - $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$delete' => t('Delete'))); - - // localize_item($item); $drop = replace_macros($droptpl,array('$id' => $item['id'])); @@ -390,7 +384,16 @@ function conversation(&$a, $items, $mode, $update) { ? '' : ''); - $drop = replace_macros(get_markup_template('wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete'))); + + + $drop = ''; + $dropping = false; + + if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user())) + $dropping = true; + + $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$delete' => t('Delete'))); + $photo = $item['photo']; $thumb = $item['thumb']; @@ -477,6 +480,7 @@ function conversation(&$a, $items, $mode, $update) { '$comment' => $comment )); + $arr = array('item' => $item, 'output' => $tmp_item); call_hooks('display_item', $arr); @@ -491,6 +495,9 @@ function conversation(&$a, $items, $mode, $update) { if($blowhard_count >= 3) $o .= ''; + if($dropping) + $o .= '
'; + return $o; } diff --git a/include/items.php b/include/items.php index dc177c468..a003b84bb 100644 --- a/include/items.php +++ b/include/items.php @@ -1772,3 +1772,129 @@ function item_expire($uid,$days) { } + +function drop_items($items) { + $uid = 0; + + if(count($items)) { + foreach($items as $item) { + $owner = drop_item($item,false); + if($owner && ! $uid) + $uid = $owner; + } + } + + // multiple threads may have been deleted, send an expire notification + + if($uid) + proc_run('php',"include/notifier.php","expire","$uid"); +} + + +function drop_item($id,$interactive = true) { + + $a = get_app(); + + // locate item to be deleted + + $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1", + intval($id) + ); + + if(! count($r)) { + if(! $interactive) + return 0; + notice( t('Item not found.') . EOL); + goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); + } + + $item = $r[0]; + + $owner = $item['uid']; + + // check if logged in user is either the author or owner of this item + + if((local_user() == $item['uid']) || (remote_user() == $item['contact-id'])) { + + // delete the item + + $r = q("UPDATE `item` SET `deleted` = 1, `body` = '', `edited` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1", + dbesc(datetime_convert()), + dbesc(datetime_convert()), + intval($item['id']) + ); + + // If item is a link to a photo resource, nuke all the associated photos + // (visitors will not have photo resources) + // 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. + + if(strlen($item['resource-id'])) { + q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ", + dbesc($item['resource-id']), + intval($item['uid']) + ); + // ignore the result + } + + // If item is a link to an event, nuke the event record. + + if(intval($item['event-id'])) { + q("DELETE FROM `event` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($item['event-id']), + intval($item['uid']) + ); + // ignore the result + } + + + // If it's the parent of a comment thread, kill all the kids + + if($item['uri'] == $item['parent-uri']) { + $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s', `body` = '' + WHERE `parent-uri` = '%s' AND `uid` = %d ", + dbesc(datetime_convert()), + dbesc(datetime_convert()), + dbesc($item['parent-uri']), + intval($item['uid']) + ); + // ignore the result + } + else { + // ensure that last-child is set in case the comment that had it just got wiped. + q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ", + dbesc(datetime_convert()), + dbesc($item['parent-uri']), + intval($item['uid']) + ); + // who is the last child now? + $r = q("SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `uid` = %d ORDER BY `edited` DESC LIMIT 1", + dbesc($item['parent-uri']), + intval($item['uid']) + ); + if(count($r)) { + q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1", + intval($r[0]['id']) + ); + } + } + $drop_id = intval($item['id']); + + // send the notification upstream/downstream as the case may be + + if(! $interactive) + return $owner; + + proc_run('php',"include/notifier.php","drop","$drop_id"); + goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); + //NOTREACHED + } + else { + if(! $interactive) + return 0; + notice( t('Permission denied.') . EOL); + goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); + //NOTREACHED + } + +} \ No newline at end of file diff --git a/include/main.js b/include/main.js index 34045f57f..18cb55328 100644 --- a/include/main.js +++ b/include/main.js @@ -47,26 +47,6 @@ $('#pause').html(''); } } -// // F8 - show/hide language selector -// if(event.keyCode == '119') { -// if(langSelect) { -// langSelect = false; -// $('#language-selector').hide(); -// } -// else { -// langSelect = true; -// $('#language-selector').show(); -// } -// } -// -// this is shift-home on FF, but $ on IE, disabling until I figure out why the diff. -// update: incompatible usage of onKeyDown vs onKeyPress -// if(event.keyCode == '36' && event.shiftKey == true) { -// if(homebase !== undefined) { -// event.preventDefault(); -// document.location = homebase; -// } -// } }); }); -- cgit v1.2.3