mirror of
https://github.com/friendica/friendica
synced 2024-11-10 02:22:55 +00:00
delete selected items
This commit is contained in:
parent
7659f2a87a
commit
e5b54e74ba
11 changed files with 225 additions and 129 deletions
|
@ -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) {
|
|||
? '<a class="editpost" href="' . $a->get_baseurl() . '/editpost/' . $item['id']
|
||||
. '" title="' . t('Edit') . '"><img src="images/pencil.gif" /></a>'
|
||||
: '');
|
||||
$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 .= '</div>';
|
||||
|
||||
if($dropping)
|
||||
$o .= '<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();"><div id="item-delete-selected-icon" class="icon drophide" title="' . t('Delete Selected Items') . '" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div><div id="item-delete-selected-desc" >' . t('Delete Selected Items') . '</div></div><div id="item-delete-selected-end"></div>';
|
||||
|
||||
return $o;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
// }
|
||||
// }
|
||||
});
|
||||
});
|
||||
|
||||
|
|
105
mod/item.php
105
mod/item.php
|
@ -22,6 +22,13 @@ function item_post(&$a) {
|
|||
|
||||
$uid = local_user();
|
||||
|
||||
if(x($_POST,'dropitems')) {
|
||||
require_once('include/items.php');
|
||||
$arr_drop = explode(',',$_POST['dropitems']);
|
||||
drop_items($arr_drop);
|
||||
killme();
|
||||
}
|
||||
|
||||
call_hooks('post_local_start', $_POST);
|
||||
|
||||
$parent = ((x($_POST,'parent')) ? intval($_POST['parent']) : 0);
|
||||
|
@ -735,102 +742,8 @@ function item_content(&$a) {
|
|||
|
||||
require_once('include/security.php');
|
||||
|
||||
$uid = local_user();
|
||||
|
||||
if(($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) {
|
||||
|
||||
// locate item to be deleted
|
||||
|
||||
$r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1",
|
||||
intval($a->argv[2])
|
||||
);
|
||||
|
||||
if(! count($r)) {
|
||||
notice( t('Item not found.') . EOL);
|
||||
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
|
||||
}
|
||||
$item = $r[0];
|
||||
|
||||
// check if logged in user is either the author or owner of this item
|
||||
|
||||
if(($_SESSION['visitor_id'] == $item['contact-id']) || ($_SESSION['uid'] == $item['uid'])) {
|
||||
|
||||
// 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
|
||||
|
||||
proc_run('php',"include/notifier.php","drop","$drop_id");
|
||||
// We seem to lose the return url occasionally. Have not been able to reliably duplicate
|
||||
// logger('drop_return_url: ' . $_SESSION['return_url']);
|
||||
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
|
||||
//NOTREACHED
|
||||
}
|
||||
else {
|
||||
notice( t('Permission denied.') . EOL);
|
||||
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
|
||||
//NOTREACHED
|
||||
}
|
||||
require_once('include/items.php');
|
||||
drop_item($a->argv[2]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1274,7 +1274,7 @@ function photos_content(&$a) {
|
|||
$drop = '';
|
||||
|
||||
if(($item['contact-id'] == remote_user()) || ($item['uid'] == local_user()))
|
||||
$drop = replace_macros(get_markup_template('wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
|
||||
$drop = replace_macros(get_markup_template('photo_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
|
||||
|
||||
|
||||
$comments .= replace_macros($template,array(
|
||||
|
|
|
@ -261,11 +261,8 @@ function profile_content(&$a, $update = 0) {
|
|||
if($is_owner && ! $update)
|
||||
$o .= get_birthdays();
|
||||
|
||||
|
||||
|
||||
$o .= conversation($a,$r,'profile',$update);
|
||||
|
||||
|
||||
if(! $update) {
|
||||
|
||||
$o .= paginate($a);
|
||||
|
|
|
@ -109,6 +109,22 @@ tinyMCE.init({
|
|||
|
||||
});
|
||||
|
||||
function deleteCheckedItems() {
|
||||
var checkedstr = '';
|
||||
|
||||
$('.item-select').each( function() {
|
||||
if($(this).is(':checked')) {
|
||||
if(checkedstr.length != 0)
|
||||
checkedstr = checkedstr + ',' + $(this).val();
|
||||
else
|
||||
checkedstr = $(this).val();
|
||||
}
|
||||
});
|
||||
$.post('item', { dropitems: checkedstr });
|
||||
window.location.reload();
|
||||
|
||||
}
|
||||
|
||||
function jotGetLink() {
|
||||
reply = prompt("$linkurl");
|
||||
if(reply && reply.length) {
|
||||
|
|
4
view/photo_drop.tpl
Normal file
4
view/photo_drop.tpl
Normal file
|
@ -0,0 +1,4 @@
|
|||
<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
|
||||
<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>
|
||||
</div>
|
||||
<div class="wall-item-delete-end"></div>
|
|
@ -2489,8 +2489,32 @@ a.mail-list-link {
|
|||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.item-select {
|
||||
opacity: 0.3;
|
||||
filter:alpha(opacity=30);
|
||||
float: right;
|
||||
margin-right: 10px;
|
||||
|
||||
}
|
||||
.item-select:hover {
|
||||
opacity: 1;
|
||||
filter:alpha(opacity=100);
|
||||
}
|
||||
|
||||
#item-delete-selected {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
#item-delete-selected-end {
|
||||
clear: both;
|
||||
}
|
||||
#item-delete-selected-icon, #item-delete-selected-desc {
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
}
|
||||
#item-delete-selected-desc:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#lang-select-icon {
|
||||
cursor: pointer;
|
||||
|
|
|
@ -2518,6 +2518,33 @@ a.mail-list-link {
|
|||
}
|
||||
|
||||
|
||||
.item-select {
|
||||
opacity: 0.3;
|
||||
filter:alpha(opacity=30);
|
||||
float: right;
|
||||
margin-right: 10px;
|
||||
|
||||
}
|
||||
.item-select:hover {
|
||||
opacity: 1;
|
||||
filter:alpha(opacity=100);
|
||||
}
|
||||
|
||||
#item-delete-selected {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
#item-delete-selected-end {
|
||||
clear: both;
|
||||
}
|
||||
#item-delete-selected-icon, #item-delete-selected-desc {
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
}
|
||||
#item-delete-selected-desc:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#lang-select-icon {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
|
||||
|
||||
<a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>
|
||||
</div>
|
||||
<input type="checkbox" class="item-select" name="itemselected[]" value="$id" />
|
||||
<div class="wall-item-delete-end"></div>
|
||||
|
|
Loading…
Reference in a new issue