From 0077494396a963b748f30a1e47f75fe097189956 Mon Sep 17 00:00:00 2001 From: rabuzarus <> Date: Mon, 1 Jun 2015 13:57:45 +0200 Subject: [PATCH] make event confirmation work --- boot.php | 9 +++-- include/conversation.php | 82 ++++++++++++++++++++++++++++++++++++++-- mod/like.php | 20 ++++++++++ object/Item.php | 48 ++++++++++++++++++++++- 4 files changed, 152 insertions(+), 7 deletions(-) diff --git a/boot.php b/boot.php index 4dcfdc4952..e3469b5509 100644 --- a/boot.php +++ b/boot.php @@ -270,9 +270,12 @@ define ( 'NAMESPACE_ATOM1', 'http://www.w3.org/2005/Atom' ); define ( 'ACTIVITY_LIKE', NAMESPACE_ACTIVITY_SCHEMA . 'like' ); define ( 'ACTIVITY_DISLIKE', NAMESPACE_DFRN . '/dislike' ); -define ( 'ACTIVITY_AGREE', NAMESPACE_DFRN . '/activity/agree' ); -define ( 'ACTIVITY_DISAGREE', NAMESPACE_DFRN . '/activity/disagree' ); -define ( 'ACTIVITY_ABSTAIN', NAMESPACE_DFRN . '/activity/abstain' ); +define ( 'ACTIVITY_AGREE', NAMESPACE_ZOT . '/activity/agree' ); +define ( 'ACTIVITY_DISAGREE', NAMESPACE_ZOT . '/activity/disagree' ); +define ( 'ACTIVITY_ABSTAIN', NAMESPACE_ZOT . '/activity/abstain' ); +define ( 'ACTIVITY_ATTEND', NAMESPACE_ZOT . '/activity/attendyes' ); +define ( 'ACTIVITY_ATTENDNO', NAMESPACE_ZOT . '/activity/attendno' ); +define ( 'ACTIVITY_ATTENDMAYBE', NAMESPACE_ZOT . '/activity/attendmaybe' ); define ( 'ACTIVITY_OBJ_HEART', NAMESPACE_DFRN . '/heart' ); diff --git a/include/conversation.php b/include/conversation.php index a5d8ac551f..cdc7ba3bd8 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -344,7 +344,7 @@ function visible_activity($item) { // likes (etc.) can apply to other things besides posts. Check if they are post children, // in which case we handle them specially - $hidden_activities = array(ACTIVITY_LIKE, ACTIVITY_DISLIKE, ACTIVITY_AGREE, ACTIVITY_DISAGREE, ACTIVITY_ABSTAIN); + $hidden_activities = array(ACTIVITY_LIKE, ACTIVITY_DISLIKE, ACTIVITY_AGREE, ACTIVITY_DISAGREE, ACTIVITY_ABSTAIN, ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE); foreach($hidden_activities as $act) { if(activity_match($item['verb'],$act)) { return false; @@ -491,7 +491,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $cmnt_tpl = get_markup_template('comment_item.tpl'); $hide_comments_tpl = get_markup_template('hide_comments.tpl'); - $conv_responses = array(array('like'),array('dislike'),array('agree'),array('disagree'),array('abstain')); + $conv_responses = array(array('like'),array('dislike'),array('agree'),array('disagree'),array('abstain'),array('attendyes'),array('attendno'),array('attendmaybe')); // array with html for each thread (parent+comments) $threads = array(); @@ -742,6 +742,14 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { // Can we put this after the visibility check? like_puller($a, $item, $conv_responses, 'like'); like_puller($a, $item, $conv_responses, 'dislike'); + +// if($item['object-type'] === ACTIVITY_OBJ_EVENT) { + like_puller($a, $item, $conv_responses, 'attendyes'); + like_puller($a, $item, $conv_responses, 'attendno'); + like_puller($a, $item, $conv_responses, 'attendmaybe'); +logger('responses: ' . print_r($conv_responses,true)); + + like_puller($a, $item, $conv_responses, 'agree'); like_puller($a, $item, $conv_responses, 'disagree'); like_puller($a, $item, $conv_responses, 'abstain'); @@ -934,12 +942,29 @@ function like_puller($a,$item,&$arr,$mode) { case 'unabstain': $verb = ACTIVITY_ABSTAIN; break; + case 'attendyes': + case 'unattendyes': + $verb = ACTIVITY_ATTEND; + break; + case 'attendno': + case 'unattendno': + $verb = ACTIVITY_ATTENDNO; + break; + case 'attendmaybe': + case 'unattendmaybe': + $verb = ACTIVITY_ATTENDMAYBE; + break; default: return; break; } +logger('verb: ' . $verb); +if($verb === ACTIVITY_ATTENDNO) + logger('item: ' . $item['verb']); + if((activity_match($item['verb'],$verb)) && ($item['id'] != $item['parent'])) { +logger('match:' . $verb); $url = $item['author-link']; if((local_user()) && (local_user() == $item['uid']) && ($item['network'] === NETWORK_DFRN) && (! $item['self']) && (link_compare($item['author-link'],$item['url']))) { $url = $a->get_baseurl(true) . '/redir/' . $item['contact-id']; @@ -951,7 +976,7 @@ function like_puller($a,$item,&$arr,$mode) { if(! $item['thr-parent']) $item['thr-parent'] = $item['parent-uri']; - if(! ((isset($arr[$mode][$item['thr-parent'] . '-l'])) && (is_array($arr[$item['thr-parent'] . '-l'])))) + if(! ((isset($arr[$mode][$item['thr-parent'] . '-l'])) && (is_array($arr[$mode][$item['thr-parent'] . '-l'])))) $arr[$mode][$item['thr-parent'] . '-l'] = array(); if(! isset($arr[$mode][$item['thr-parent']])) $arr[$mode][$item['thr-parent']] = 1; @@ -1270,3 +1295,54 @@ function render_location_dummy($item) { if ($item['coord'] != "") return $item['coord']; } + +function get_responses($conv_responses,$response_verbs,$ob,$item) { + $ret = array(); + foreach($response_verbs as $v) { + $ret[$v] = array(); + $ret[$v]['count'] = ((x($conv_responses[$v],$item['uri'])) ? $conv_responses[$v][$item['uri']] : ''); + $ret[$v]['list'] = ((x($conv_responses[$v],$item['uri'])) ? $conv_responses[$v][$item['uri'] . '-l'] : ''); + if(count($ret[$v]['list']) > MAX_LIKERS) { + $ret[$v]['list_part'] = array_slice($ret[$v]['list'], 0, MAX_LIKERS); + array_push($ret[$v]['list_part'], '' . t('View all') . ''); + } + else { + $ret[$v]['list_part'] = ''; + } + $ret[$v]['button'] = get_response_button_text($v,$ret[$v]['count']); + } + $ret['count'] = count($ret); + return $ret; +} +function get_response_button_text($v,$count) { + switch($v) { + case 'like': + return tt('Like','Likes',$count,'noun'); + break; + case 'dislike': + return tt('Dislike','Dislikes',$count,'noun'); + break; + case 'attendyes': + return tt('Attending','Attending',$count,'noun'); + break; + case 'attendno': + return tt('Not Attending','Not Attending',$count,'noun'); + break; + case 'attendmaybe': + return tt('Undecided','Undecided',$count,'noun'); + break; + case 'agree': + return tt('Agree','Agrees',$count,'noun'); + break; + case 'agree': + return tt('Disagree','Disagrees',$count,'noun'); + break; + case 'abstain': + return tt('Abstain','Abstains',$count,'noun'); + break; + default: + return ''; + break; + } +} diff --git a/mod/like.php b/mod/like.php index 6f0c5a5095..aef3473c30 100755 --- a/mod/like.php +++ b/mod/like.php @@ -38,6 +38,18 @@ function like_content(&$a) { case 'unabstain': $activity = ACTIVITY_ABSTAIN; break; + case 'attendyes': + case 'unattendyes': + $activity = ACTIVITY_ATTEND; + break; + case 'attendno': + case 'unattendno': + $activity = ACTIVITY_ATTENDNO; + break; + case 'attendmaybe': + case 'unattendmaybe': + $activity = ACTIVITY_ATTENDMAYBE; + break; default: return; break; @@ -159,6 +171,8 @@ function like_content(&$a) { $uri = item_new_uri($a->get_hostname(),$owner_uid); $post_type = (($item['resource-id']) ? t('photo') : t('status')); + if($item['resource-type'] === 'event') + $post_type = t('event'); $objtype = (($item['resource-id']) ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE ); $link = xmlify('' . "\n") ; $body = $item['body']; @@ -184,6 +198,12 @@ EOT; $bodyverb = t('%1$s doesn\'t agree with %2$s\'s %3$s'); if($verb === 'abstain') $bodyverb = t('%1$s abstains from a decision on %2$s\'s %3$s'); + if($verb === 'attendyes') + $bodyverb = t('%1$s is attending %2$s\'s %3$s'); + if($verb === 'attendno') + $bodyverb = t('%1$s is not attending %2$s\'s %3$s'); + if($verb === 'attendmaybe') + $bodyverb = t('%1$s may attend %2$s\'s %3$s'); if(! isset($bodyverb)) return; diff --git a/object/Item.php b/object/Item.php index 7ff4c438c7..e680e29362 100644 --- a/object/Item.php +++ b/object/Item.php @@ -175,8 +175,51 @@ class Item extends BaseObject { } }*/ + + // process action responses - e.g. like/dislike/attend/agree/whatever + $response_verbs = array('like'); + $response_verbs[] = 'dislike'; + if($item['object-type'] === ACTIVITY_OBJ_EVENT) { + $response_verbs[] = 'attendyes'; + $response_verbs[] = 'attendno'; + $response_verbs[] = 'attendmaybe'; + $isevent = true; + $attend = array( t('I will attend'), t('I will not attend'), t('I might attend')); + } + $consensus = (($item['item_flags'] & ITEM_CONSENSUS)? true : false); + if($consensus) { + $response_verbs[] = 'agree'; + $response_verbs[] = 'disagree'; + $response_verbs[] = 'abstain'; + } + $responses = get_responses($conv_responses,$response_verbs,$this,$item); + + // like_button_label from red -> needs to be removed + //$like_button_label = tt('Like','Likes',$like_count,'noun'); + + // another part from red - it is here for compatility - maybe removed later + $like_count = ((x($conv_responses['like'],$item['uri'])) ? $conv_responses['like'][$item['uri']] : ''); + $like_list = ((x($conv_responses['like'],$item['uri'])) ? $conv_responses['like'][$item['uri'] . '-l'] : ''); + if (count($like_list) > MAX_LIKERS) { + $like_list_part = array_slice($like_list, 0, MAX_LIKERS); + array_push($like_list_part, '' . t('View all') . ''); + } else { + $like_list_part = ''; + } + $like_button_label = tt('Like','Likes',$like_count,'noun'); + $dislike_count = ((x($conv_responses['dislike'],$item['uri'])) ? $conv_responses['dislike'][$item['uri']] : ''); + $dislike_list = ((x($conv_responses['dislike'],$item['uri'])) ? $conv_responses['dislike'][$item['uri'] . '-l'] : ''); + $dislike_button_label = tt('Dislike','Dislikes',$dislike_count,'noun'); + if (count($dislike_list) > MAX_LIKERS) { + $dislike_list_part = array_slice($dislike_list, 0, MAX_LIKERS); + array_push($dislike_list_part, '' . t('View all') . ''); + } else { + $dislike_list_part = ''; + } + $like = ((x($conv_responses['like'],$item['uri'])) ? format_like($conv_responses['like'][$item['uri']],$conv_responses['like'][$item['uri'] . '-l'],'like',$item['uri']) : ''); $dislike = ((x($conv_responses['dislike'],$item['uri'])) ? format_like($conv_responses['dislike'][$item['uri']],$conv_responses['dislike'][$item['uri'] . '-l'],'dislike',$item['uri']) : ''); + $like = ((x($conv_responses['like'],$item['uri'])) ? format_like($conv_responses['like'][$item['uri']],$conv_responses['like'][$item['uri'] . '-l'],'like',$item['uri']) : ''); /* * We should avoid doing this all the time, but it depends on the conversation mode @@ -324,7 +367,9 @@ class Item extends BaseObject { 'body' => $body_e, 'text' => $text_e, 'id' => $this->get_id(), - 'guid' => urlencode($item['guid']), + 'guid' => $item['guid'], + 'isevent' => $isevent, + 'attend' => $attend, 'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), 'olinktitle' => sprintf( t('View %s\'s profile @ %s'), $this->get_owner_name(), ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])), 'to' => t('to'), @@ -360,6 +405,7 @@ class Item extends BaseObject { 'vote' => $buttons, 'like' => $like, 'dislike' => $dislike, + 'responses' => $responses, 'switchcomment' => t('Comment'), 'comment' => $this->get_comment_box($indent), 'previewing' => ($conv->is_preview() ? ' preview ' : ''),