]> git.mxchange.org Git - friendica.git/blobdiff - include/like.php
Some notification thingy
[friendica.git] / include / like.php
index 6aef0cb5b8b3b4421e8ac25c764def3a0ac1d764..893047da3c252f9d6216c4271f87735d9b162f26 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+require_once("include/diaspora.php");
 
 /**
  * @brief add/remove activity to an item
@@ -47,16 +48,14 @@ function do_like($item_id, $verb) {
                        break;
        }
 
-
        logger('like: verb ' . $verb . ' item ' . $item_id);
 
-
        $r = q("SELECT * FROM `item` WHERE `id` = '%s' OR `uri` = '%s' LIMIT 1",
                dbesc($item_id),
                dbesc($item_id)
        );
 
-       if(! $item_id || (! count($r))) {
+       if(! $item_id || (! dbm::is_result($r))) {
                logger('like: no item ' . $item_id);
                return false;
        }
@@ -65,7 +64,7 @@ function do_like($item_id, $verb) {
 
        $owner_uid = $item['uid'];
 
-       if(! can_write_wall($a,$owner_uid)) {
+       if (! can_write_wall($a,$owner_uid)) {
                return false;
        }
 
@@ -77,10 +76,12 @@ function do_like($item_id, $verb) {
                        intval($item['contact-id']),
                        intval($item['uid'])
                );
-               if(! count($r))
+               if (! dbm::is_result($r)) {
                        return false;
-               if(! $r[0]['self'])
+               }
+               if (! $r[0]['self']) {
                        $remote_owner = $r[0];
+               }
        }
 
        // this represents the post owner on this system.
@@ -89,32 +90,32 @@ function do_like($item_id, $verb) {
                WHERE `contact`.`self` = 1 AND `contact`.`uid` = %d LIMIT 1",
                intval($owner_uid)
        );
-       if(count($r))
+       if (dbm::is_result($r)) {
                $owner = $r[0];
+       }
 
-       if(! $owner) {
+       if (! $owner) {
                logger('like: no owner');
                return false;
        }
 
-       if(! $remote_owner)
+       if (! $remote_owner) {
                $remote_owner = $owner;
-
+       }
 
        // This represents the person posting
 
-       if((local_user()) && (local_user() == $owner_uid)) {
+       if ((local_user()) && (local_user() == $owner_uid)) {
                $contact = $owner;
-       }
-       else {
+       } else {
                $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
                        intval($_SESSION['visitor_id']),
                        intval($owner_uid)
                );
-               if(count($r))
+               if (dbm::is_result($r))
                        $contact = $r[0];
        }
-       if(! $contact) {
+       if (! $contact) {
                return false;
        }
 
@@ -123,7 +124,7 @@ function do_like($item_id, $verb) {
 
        // event participation 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) {
+       if ($activity === ACTIVITY_ATTEND || $activity === ACTIVITY_ATTENDNO || $activity === ACTIVITY_ATTENDMAYBE) {
                $verbs = " '" . dbesc(ACTIVITY_ATTEND) . "','" . dbesc(ACTIVITY_ATTENDNO) . "','" . dbesc(ACTIVITY_ATTENDMAYBE) . "' ";
        }
 
@@ -134,7 +135,7 @@ function do_like($item_id, $verb) {
                dbesc($item_id), dbesc($item_id), dbesc($item['uri'])
        );
 
-       if(count($r)) {
+       if (dbm::is_result($r)) {
                $like_item = $r[0];
 
                // Already voted, undo it
@@ -151,11 +152,8 @@ function do_like($item_id, $verb) {
                        intval($like_item['id'])
                );
 
-               // Save the author information for the unlike in case we need to relay to Diaspora
-               store_diaspora_like_retract_sig($activity, $item, $like_item, $contact);
-
                $like_item_id = $like_item['id'];
-               proc_run('php',"include/notifier.php","like","$like_item_id");
+               proc_run(PRIORITY_HIGH, "include/notifier.php", "like", $like_item_id);
 
                return true;
        }
@@ -163,10 +161,11 @@ function do_like($item_id, $verb) {
        $uri = item_new_uri($a->get_hostname(),$owner_uid);
 
        $post_type = (($item['resource-id']) ? t('photo') : t('status'));
-       if($item['obj_type'] === ACTIVITY_OBJ_EVENT)
+       if ($item['object-type'] === ACTIVITY_OBJ_EVENT) {
                $post_type = t('event');
-       $objtype = (($item['resource-id']) ? ACTIVITY_OBJ_PHOTO : ACTIVITY_OBJ_NOTE );
-       $link = xmlify('<link rel="alternate" type="text/html" href="' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . '" />' . "\n") ;
+       }
+       $objtype = (($item['resource-id']) ? ACTIVITY_OBJ_IMAGE : ACTIVITY_OBJ_NOTE );
+       $link = xmlify('<link rel="alternate" type="text/html" href="' . App::get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . '" />' . "\n") ;
        $body = $item['body'];
 
        $obj = <<< EOT
@@ -180,22 +179,34 @@ function do_like($item_id, $verb) {
                <content>$body</content>
        </object>
 EOT;
-       if($verb === 'like')
+       if ($verb === 'like') {
                $bodyverb = t('%1$s likes %2$s\'s %3$s');
-       if($verb === 'dislike')
+       }
+       if ($verb === 'dislike') {
                $bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
-       if($verb === 'attendyes')
+       }
+       if ($verb === 'attendyes') {
                $bodyverb = t('%1$s is attending %2$s\'s %3$s');
-       if($verb === 'attendno')
+       }
+       if ($verb === 'attendno') {
                $bodyverb = t('%1$s is not attending %2$s\'s %3$s');
-       if($verb === 'attendmaybe')
+       }
+       if ($verb === 'attendmaybe') {
                $bodyverb = t('%1$s may attend %2$s\'s %3$s');
+       }
 
-       if(! isset($bodyverb))
-                       return false;
+       if (! isset($bodyverb)) {
+               return false;
+       }
+
+       $ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
+       $alink = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]';
+       $plink = '[url=' . App::get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]';
 
+       /// @TODO Or rewrite this to multi-line initialization of the array?
        $arr = array();
 
+       $arr['guid'] = get_guid(32);
        $arr['uri'] = $uri;
        $arr['uid'] = $owner_uid;
        $arr['contact-id'] = $contact['id'];
@@ -212,12 +223,7 @@ EOT;
        $arr['author-name'] = $contact['name'];
        $arr['author-link'] = $contact['url'];
        $arr['author-avatar'] = $contact['thumb'];
-
-       $ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
-       $alink = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]';
-       $plink = '[url=' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]';
        $arr['body'] =  sprintf( $bodyverb, $ulink, $alink, $plink );
-
        $arr['verb'] = $activity;
        $arr['object-type'] = $objtype;
        $arr['object'] = $obj;
@@ -231,7 +237,7 @@ EOT;
 
        $post_id = item_store($arr);
 
-       if(! $item['visible']) {
+       if (! $item['visible']) {
                $r = q("UPDATE `item` SET `visible` = 1 WHERE `id` = %d AND `uid` = %d",
                        intval($item['id']),
                        intval($owner_uid)
@@ -240,135 +246,13 @@ EOT;
 
 
        // Save the author information for the like in case we need to relay to Diaspora
-       store_diaspora_like_sig($activity, $post_type, $contact, $post_id);
+       Diaspora::store_like_signature($contact, $post_id);
 
        $arr['id'] = $post_id;
 
        call_hooks('post_local_end', $arr);
 
-       proc_run('php',"include/notifier.php","like","$post_id");
+       proc_run(PRIORITY_HIGH, "include/notifier.php", "like", $post_id);
 
        return true;
 }
-
-
-
-function store_diaspora_like_retract_sig($activity, $item, $like_item, $contact) {
-       // Note that we can only create a signature for a user of the local server. We don't have
-       // a key for remote users. That is ok, because if a remote user is "unlike"ing a post, it
-       // means we are the relay, and for relayable_retractions, Diaspora
-       // only checks the parent_author_signature if it doesn't have to relay further
-       //
-       // If $item['resource-id'] exists, it means the item is a photo. Diaspora doesn't support
-       // likes on photos, so don't bother.
-
-       $enabled = intval(get_config('system','diaspora_enabled'));
-       if(! $enabled) {
-               logger('mod_like: diaspora support disabled, not storing like retraction signature', LOGGER_DEBUG);
-               return;
-       }
-
-       logger('mod_like: storing diaspora like retraction signature');
-
-       if(($activity === ACTIVITY_LIKE) && (! $item['resource-id'])) {
-               $signed_text = $like_item['guid'] . ';' . 'Like';
-
-               // Only works for NETWORK_DFRN
-               $contact_baseurl_start = strpos($contact['url'],'://') + 3;
-               $contact_baseurl_length = strpos($contact['url'],'/profile') - $contact_baseurl_start;
-               $contact_baseurl = substr($contact['url'], $contact_baseurl_start, $contact_baseurl_length);
-               $diaspora_handle = $contact['nick'] . '@' . $contact_baseurl;
-
-               // Get contact's private key if he's a user of the local Friendica server
-               $r = q("SELECT `contact`.`uid` FROM `contact` WHERE `url` = '%s' AND `self` = 1 LIMIT 1",
-                       dbesc($contact['url'])
-               );
-
-               if( $r) {
-                       $contact_uid = $r['uid'];
-                       $r = q("SELECT prvkey FROM user WHERE uid = %d LIMIT 1",
-                               intval($contact_uid)
-                       );
-
-                       if( $r)
-                               $authorsig = base64_encode(rsa_sign($signed_text,$r['prvkey'],'sha256'));
-               }
-
-               if(! isset($authorsig))
-                       $authorsig = '';
-
-               q("insert into sign (`retract_iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
-                       intval($like_item['id']),
-                       dbesc($signed_text),
-                       dbesc($authorsig),
-                       dbesc($diaspora_handle)
-               );
-       }
-
-       return;
-}
-
-function store_diaspora_like_sig($activity, $post_type, $contact, $post_id) {
-       // Note that we can only create a signature for a user of the local server. We don't have
-       // a key for remote users. That is ok, because if a remote user is "unlike"ing a post, it
-       // means we are the relay, and for relayable_retractions, Diaspora
-       // only checks the parent_author_signature if it doesn't have to relay further
-
-       $enabled = intval(get_config('system','diaspora_enabled'));
-       if(! $enabled) {
-               logger('mod_like: diaspora support disabled, not storing like signature', LOGGER_DEBUG);
-               return;
-       }
-
-       logger('mod_like: storing diaspora like signature');
-
-       if(($activity === ACTIVITY_LIKE) && ($post_type === t('status'))) {
-               // Only works for NETWORK_DFRN
-               $contact_baseurl_start = strpos($contact['url'],'://') + 3;
-               $contact_baseurl_length = strpos($contact['url'],'/profile') - $contact_baseurl_start;
-               $contact_baseurl = substr($contact['url'], $contact_baseurl_start, $contact_baseurl_length);
-               $diaspora_handle = $contact['nick'] . '@' . $contact_baseurl;
-
-               // Get contact's private key if he's a user of the local Friendica server
-               $r = q("SELECT `contact`.`uid` FROM `contact` WHERE `url` = '%s' AND `self` = 1 LIMIT 1",
-                       dbesc($contact['url'])
-               );
-
-               if( $r) {
-                       $contact_uid = $r['uid'];
-                       $r = q("SELECT prvkey FROM user WHERE uid = %d LIMIT 1",
-                               intval($contact_uid)
-                       );
-
-                       if( $r)
-                               $contact_uprvkey = $r['prvkey'];
-               }
-
-               $r = q("SELECT guid, parent FROM `item` WHERE id = %d LIMIT 1",
-                       intval($post_id)
-               );
-               if( $r) {
-                       $p = q("SELECT guid FROM `item` WHERE id = %d AND parent = %d LIMIT 1",
-                               intval($r[0]['parent']),
-                               intval($r[0]['parent'])
-                       );
-                       if( $p) {
-                               $signed_text = $r[0]['guid'] . ';Post;' . $p[0]['guid'] . ';true;' . $diaspora_handle;
-
-                               if(isset($contact_uprvkey))
-                                       $authorsig = base64_encode(rsa_sign($signed_text,$contact_uprvkey,'sha256'));
-                               else
-                                       $authorsig = '';
-
-                               q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
-                                       intval($post_id),
-                                       dbesc($signed_text),
-                                       dbesc($authorsig),
-                                       dbesc($diaspora_handle)
-                               );
-                       }
-               }
-       }
-
-       return;
-}