diff options
author | friendica <info@friendica.com> | 2015-02-10 17:49:46 -0800 |
---|---|---|
committer | friendica <info@friendica.com> | 2015-02-10 17:49:46 -0800 |
commit | 79da33dafdac1427ac07b4414a5da5f9f3a2b03d (patch) | |
tree | 1934a32ffc2b7a3d1ada1afe4499e4e43561c370 /mod | |
parent | 9a773b45e498330cba20717d3f2d5c2e1a3683b0 (diff) | |
download | volse-hubzilla-79da33dafdac1427ac07b4414a5da5f9f3a2b03d.tar.gz volse-hubzilla-79da33dafdac1427ac07b4414a5da5f9f3a2b03d.tar.bz2 volse-hubzilla-79da33dafdac1427ac07b4414a5da5f9f3a2b03d.zip |
improvements in duplicate like detection, especially w/r/t event participation
Diffstat (limited to 'mod')
-rwxr-xr-x | mod/like.php | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/mod/like.php b/mod/like.php index 725551d6d..79c746825 100755 --- a/mod/like.php +++ b/mod/like.php @@ -287,21 +287,42 @@ function like_content(&$a) { else killme(); - $r = q("SELECT id FROM item WHERE verb = '%s' AND item_restrict = 0 - AND author_xchan = '%s' AND ( parent = %d OR thr_parent = '%s') LIMIT 1", - dbesc($activity), + + $verbs = " '".dbesc($activity)."' "; + $multi_undo = 0; + + // event participation and consensus items are essentially radio toggles. If you make a subsequent choice, + // we need to eradicate your first choice. + + if($activity === ACTIVITY_ATTEND || $activity === ACTIVITY_ATTENDNO || $activity === ACTIVITY_ATTENDMAYBE) { + $verbs = " '" . dbesc(ACTIVITY_ATTEND) . "','" . dbesc(ACTIVITY_ATTENDNO) . "','" . dbesc(ACTIVITY_ATTENDMAYBE) . "' "; + $multi_undo = 1; + } + if($activity === ACTIVITY_AGREE || $activity === ACTIVITY_DISAGREE || $activity === ACTIVITY_ABSTAIN) { + $verbs = " '" . dbesc(ACTIVITY_AGREE) . "','" . dbesc(ACTIVITY_DISAGREE) . "','" . dbesc(ACTIVITY_ABSTAIN) . "' "; + $multi_undo = 1; + } + + + $r = q("SELECT id FROM item WHERE verb in ( $verbs ) AND item_restrict = 0 + AND author_xchan = '%s' AND ( parent = %d OR thr_parent = '%s') and uid = %d ", dbesc($observer['xchan_hash']), intval($item_id), - dbesc($item['mid']) + dbesc($item['mid']), + intval($owner_uid) ); if($r) { // already liked it. Drop that item. require_once('include/items.php'); - drop_item($r[0]['id'],false,DROPITEM_PHASE1); - return; + foreach($r as $rr) { + drop_item($rr['id'],false,DROPITEM_PHASE1); + } + if($interactive) + return; + if(! $multi_undo) + killme(); } - } $mid = item_message_id(); |