]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
Fixes #3058 pulls likes out as a plugin
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 9 Mar 2011 03:07:40 +0000 (03:07 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 9 Mar 2011 03:07:40 +0000 (03:07 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@8639 36083f99-b078-4883-b0ff-0f9b5a30f544

20 files changed:
engine/classes/ElggEntity.php
engine/lib/elgglib.php
engine/lib/navigation.php
engine/lib/upgrades/2010121702.php [deleted file]
engine/lib/views.php
languages/en.php
mod/developers/views/default/theme_preview/icons.php
mod/likes/actions/likes/add.php [moved from actions/likes/add.php with 97% similarity]
mod/likes/actions/likes/delete.php [moved from actions/likes/delete.php with 89% similarity]
mod/likes/languages/en.php [new file with mode: 0644]
mod/likes/manifest.xml [new file with mode: 0644]
mod/likes/start.php [new file with mode: 0644]
mod/likes/views/default/annotation/likes.php [moved from views/default/annotation/likes.php with 100% similarity]
mod/likes/views/default/likes/css.php [new file with mode: 0644]
mod/likes/views/default/likes/display.php [moved from views/default/core/likes/display.php with 90% similarity]
mod/likes/views/default/river/annotation/likes/create.php [moved from views/default/river/annotation/likes/create.php with 95% similarity]
views/default/css/admin.php
views/default/css/elements/components.php
views/default/css/elements/icons.php
views/default/css/ie.php

index 69401a7e5a10e8009bcfd7f7353c79efc885a1a2..bfb7ce063d5fa6acdc3690771dd5dbc8a1c92179 100644 (file)
@@ -843,24 +843,6 @@ abstract class ElggEntity extends ElggData implements
                }
        }
 
-       /**
-        * Count how many people have liked this entity.
-        *
-        * @return int Number of likes
-        * @since 1.8.0
-        */
-       function countLikes() {
-               $type = $this->getType();
-               $params = array('entity' => $this);
-               $number = elgg_trigger_plugin_hook('likes:count', $type, $params, false);
-
-               if ($number) {
-                       return $number;
-               } else {
-                       return $this->getAnnotationCalculation('likes', 'count');
-               }
-       }
-
        /**
         * Gets an array of entities with a relationship to this entity.
         *
index 3cc4ddb1ddd388f20017025d697b3f266999634d..c97fa433cf2d019cbc39f9efa7cf9a4afaf5a404 100644 (file)
@@ -1795,7 +1795,7 @@ function elgg_walled_garden() {
 /**
  * Elgg's main init.
  *
- * Handles core actions for comments and likes, the JS pagehandler, and the shutdown function.
+ * Handles core actions for comments, the JS pagehandler, and the shutdown function.
  *
  * @elgg_event_handler init system
  * @return void
@@ -1805,8 +1805,6 @@ function elgg_init() {
 
        elgg_register_action('comments/add');
        elgg_register_action('comments/delete');
-       elgg_register_action('likes/add');
-       elgg_register_action('likes/delete');
 
        elgg_register_page_handler('js', 'js_page_handler');
        elgg_register_page_handler('css', 'css_page_handler');
index b79156986aabc408e914640e5bffcde03b0e9798..8c71de03a196068b91e7016e394e8b472c681b1d 100644 (file)
@@ -226,35 +226,6 @@ function elgg_river_menu_setup($hook, $type, $return, $params) {
                                );
                                $return[] = ElggMenuItem::factory($options);
                        }
-
-                       // like this
-                       if ($object->canAnnotate(0, 'likes')) {
-                               if (!elgg_annotation_exists($object->getGUID(), 'likes')) {
-                                       $url = "action/likes/add?guid={$object->getGUID()}";
-                                       $options = array(
-                                               'name' => 'like',
-                                               'href' => $url,
-                                               'text' => elgg_echo('likes:likethis'),
-                                               'is_action' => true,
-                                               'priority' => 100,
-                                       );
-                               } else {
-                                       $likes = elgg_get_annotations(array(
-                                               'guid' => $guid,
-                                               'annotation_name' => 'likes',
-                                               'owner_guid' => elgg_get_logged_in_user_guid()
-                                       ));
-                                       $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}";
-                                       $options = array(
-                                               'name' => 'like',
-                                               'href' => $url,
-                                               'text' => elgg_echo('likes:remove'),
-                                               'is_action' => true,
-                                               'priority' => 100,
-                                       );
-                               }
-                               $return[] = ElggMenuItem::factory($options);
-                       }
                }
        }
 
@@ -303,15 +274,6 @@ function elgg_entity_menu_setup($hook, $type, $return, $params) {
                $return[] = ElggMenuItem::factory($options);
        }
 
-       // likes
-       $options = array(
-               'name' => 'likes',
-               'text' => elgg_view_likes($entity),
-               'href' => false,
-               'priority' => 1000,
-       );
-       $return[] = ElggMenuItem::factory($options);
-
        return $return;
 }
 
diff --git a/engine/lib/upgrades/2010121702.php b/engine/lib/upgrades/2010121702.php
deleted file mode 100644 (file)
index 1c4a931..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Change the location of the likes river view
- */
-
-$query = "UPDATE {$CONFIG->dbprefix}river
-                       SET view='river/annotation/likes/create', action_type='create'
-                       WHERE view='annotation/annotatelike' AND action_type='likes'";
-update_data($query);
-
index 09325c2c05939ae2af9d5801c8dbd49da2fabaab..905458a9a340b7f6641d4c1f51da349a0ebaa84d 100644 (file)
@@ -1124,26 +1124,6 @@ function elgg_view_latest_comments($owner_guid, $type = 'object', $subtype = '',
        return elgg_view_module('aside', $title, $body);
 }
 
-/**
- * Returns the HTML for "likes" on entities.
- *
- * @param ElggEntity $entity The entity to like
- *
- * @return string|false The HTML for the likes, or false on failure
- *
- * @since 1.8.0
- * @see @elgg_view core/likes/display
- */
-function elgg_view_likes($entity) {
-       if (!($entity instanceof ElggEntity)) {
-               return false;
-       }
-
-       $params = array('entity' => $entity);
-
-       return elgg_view('core/likes/display', $params);
-}
-
 /**
  * Wrapper function for the image block display pattern.
  *
index f827c6d51c2fea860ad02ae6440155dd5c9dfe54..5393c356a21394e5145fa0d634c1f95251d49e5a 100644 (file)
@@ -708,7 +708,6 @@ $english = array(
        'river:select' => 'Show %s',
        'river:comments:more' => '+%u more',
        'river:generic_comment' => 'commented on %s %s',
-       'river:likes' => 'likes %s %s',
 
        'members:label:newest' => 'Newest',
        'members:label:popular' => 'Popular',
@@ -986,25 +985,6 @@ If you requested this click on the link below, otherwise ignore this email.
  */
        'xmlrpc:noinputdata'    =>      "Input data missing",
 
-/**
- * Likes
- **/
-       'likes:this' => 'liked this',
-       'likes:deleted' => 'Your like has been removed',
-       'likes:see' => 'See who liked this',
-       'likes:remove' => 'Unlike this',
-       'likes:notdeleted' => 'There was a problem removing your like',
-       'likes:likes' => 'You now like this item',
-       'likes:failure' => 'There was a problem liking this item',
-       'likes:alreadyliked' => 'You have already liked this item',
-       'likes:notfound' => 'The item you are trying to like cannot be found',
-       'likes:likethis' => 'Like this',
-       'likes:userlikedthis' => 'user liked this',
-       'likes:userslikedthis' => 'users like this',
-       'likes:river:annotate' => 'likes',
-       'likes:email:body' => '%s liked %s',
-       'likes:email:subject' => 'A user liked one of your objects',
-
 /**
  * Comments
  */
index be444adb862109e01dde2807da12b59c42d35105..8178a9da7ea111dcde94d4671cabaf286708fc36 100644 (file)
@@ -15,8 +15,8 @@
                        'friends' => 'Friends', 
                        'help' => 'Help', 
                        'delete' => 'Delete', 
-                       'likes' => 'Likes', 
-                       'liked' => 'Liked', 
+                       'thumbs-up' => 'Thumbs Up',
+                       'thumbs-up-alt' => 'Thumbs Up Alternate',
                        'following' => 'Following', 
                        'dragger' => 'Dragger', 
                        'rss' => 'RSS', 
similarity index 97%
rename from actions/likes/add.php
rename to mod/likes/actions/likes/add.php
index 12eed2427a25eb8d4588d679d38fe2833a969f1d..f564938641045c519d6bbe756f82fa368057bb1a 100644 (file)
@@ -2,8 +2,6 @@
 /**
  * Elgg add like action
  *
- * @package Elgg.Core
- * @subpackage Likes
  */
 
 $entity_guid = (int) get_input('guid');
similarity index 89%
rename from actions/likes/delete.php
rename to mod/likes/actions/likes/delete.php
index 7d535052d870c012717bb0d410ac139e10837e15..867d5dfef94246f517c5aa6373d2c1d8e1a2080c 100644 (file)
@@ -2,8 +2,6 @@
 /**
  * Elgg delete like action
  *
- * @package Elgg.Core
- * @subpackage Likes
  */
 
 // Ensure we're logged in
diff --git a/mod/likes/languages/en.php b/mod/likes/languages/en.php
new file mode 100644 (file)
index 0000000..52e2d41
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Likes English language file
+ */
+
+$english = array(
+       'likes:this' => 'liked this',
+       'likes:deleted' => 'Your like has been removed',
+       'likes:see' => 'See who liked this',
+       'likes:remove' => 'Unlike this',
+       'likes:notdeleted' => 'There was a problem removing your like',
+       'likes:likes' => 'You now like this item',
+       'likes:failure' => 'There was a problem liking this item',
+       'likes:alreadyliked' => 'You have already liked this item',
+       'likes:notfound' => 'The item you are trying to like cannot be found',
+       'likes:likethis' => 'Like this',
+       'likes:userlikedthis' => 'user liked this',
+       'likes:userslikedthis' => 'users like this',
+       'likes:river:annotate' => 'likes',
+       'likes:email:body' => '%s liked %s',
+       'likes:email:subject' => 'A user liked one of your objects',
+       'river:likes' => 'likes %s %s',
+);
+
+add_translation('en', $english);
diff --git a/mod/likes/manifest.xml b/mod/likes/manifest.xml
new file mode 100644 (file)
index 0000000..abd3f7c
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+       <name>Likes</name>
+       <author>Core developers</author>
+       <version>1.8</version>
+       <category>bundled</category>
+       <description>Enables users to like content on the site.</description>
+       <website>http://www.elgg.org/</website>
+       <copyright>See COPYRIGHT.txt</copyright>
+       <license>GNU Public License version 2</license>
+       <requires>
+               <type>elgg_version</type>
+               <version>2010030101</version>
+       </requires>
+       <activate_on_install>true</activate_on_install>
+       <admin_interface>advanced</admin_interface>
+</plugin_manifest>
\ No newline at end of file
diff --git a/mod/likes/start.php b/mod/likes/start.php
new file mode 100644 (file)
index 0000000..9782308
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Likes plugin
+ * 
+ */
+
+elgg_register_event_handler('init', 'system', 'likes_init');
+
+function likes_init() {
+
+       elgg_extend_view('css/elgg', 'likes/css');
+
+       // registered with priority < 500 so other plugins can remove likes
+       elgg_register_plugin_hook_handler('register', 'menu:river', 'likes_river_menu_setup', 400);
+       elgg_register_plugin_hook_handler('register', 'menu:entity', 'likes_entity_menu_setup', 400);
+
+       $actions_base = elgg_get_plugins_path() . 'likes/actions/likes';
+       elgg_register_action('likes/add', "$actions_base/add.php");
+       elgg_register_action('likes/delete', "$actions_base/delete.php");
+}
+
+/**
+ * Add likes to entity menu at end of the menu
+ */
+function likes_entity_menu_setup($hook, $type, $return, $params) {
+       if (elgg_in_context('widgets')) {
+               return $return;
+       }
+
+       $entity = $params['entity'];
+
+       // likes
+       $options = array(
+               'name' => 'likes',
+               'text' => elgg_view('likes/display', array('entity' => $entity)),
+               'href' => false,
+               'priority' => 1000,
+       );
+       $return[] = ElggMenuItem::factory($options);
+
+       return $return;
+}
+
+/**
+ * Add a like button to river actions
+ */
+function likes_river_menu_setup($hook, $type, $return, $params) {
+       if (elgg_is_logged_in()) {
+               $item = $params['item'];
+               $object = $item->getObjectEntity();
+               if (!elgg_in_context('widgets') && $item->annotation_id == 0) {
+                       if ($object->canAnnotate(0, 'likes')) {
+                               if (!elgg_annotation_exists($object->getGUID(), 'likes')) {
+                                       // user has not liked this yet
+                                       $url = "action/likes/add?guid={$object->getGUID()}";
+                                       $options = array(
+                                               'name' => 'like',
+                                               'href' => $url,
+                                               'text' => elgg_echo('likes:likethis'),
+                                               'is_action' => true,
+                                               'priority' => 100,
+                                       );
+                               } else {
+                                       // user has liked this
+                                       $likes = elgg_get_annotations(array(
+                                               'guid' => $guid,
+                                               'annotation_name' => 'likes',
+                                               'owner_guid' => elgg_get_logged_in_user_guid()
+                                       ));
+                                       $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}";
+                                       $options = array(
+                                               'name' => 'like',
+                                               'href' => $url,
+                                               'text' => elgg_echo('likes:remove'),
+                                               'is_action' => true,
+                                               'priority' => 100,
+                                       );
+                               }
+                               $return[] = ElggMenuItem::factory($options);
+                       }
+               }
+       }
+
+       return $return;
+}
+
+/**
+ * Count how many people have liked an entity.
+ *
+ * @param  ElggEntity $entity 
+ *
+ * @return int Number of likes
+ */
+function likes_count($entity) {
+       $type = $entity->getType();
+       $params = array('entity' => $entity);
+       $number = elgg_trigger_plugin_hook('likes:count', $type, $params, false);
+
+       if ($number) {
+               return $number;
+       } else {
+               return $entity->countAnnotations('likes');
+       }
+}
diff --git a/mod/likes/views/default/likes/css.php b/mod/likes/views/default/likes/css.php
new file mode 100644 (file)
index 0000000..cb0334b
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Likes CSS
+ */
+?>
+
+/* ***************************************
+       Likes
+*************************************** */
+.elgg-likes-list {
+       width: 345px;
+       position: absolute;
+}
similarity index 90%
rename from views/default/core/likes/display.php
rename to mod/likes/views/default/likes/display.php
index b04630e9501929e6a2a8bc3db7c61ca325fa6d17..00f6c5a345db67404e76be5184cf7df97695d18a 100644 (file)
@@ -19,7 +19,7 @@ if (elgg_is_logged_in() && $vars['entity']->canAnnotate(0, 'likes')) {
                $url = elgg_get_site_url() . "action/likes/add?guid={$guid}";
                $params = array(
                        'href' => $url,
-                       'text' => elgg_view_icon('likes'),
+                       'text' => elgg_view_icon('thumbs-up'),
                        'title' => elgg_echo('likes:likethis'),
                        'is_action' => true,
                );
@@ -34,7 +34,7 @@ if (elgg_is_logged_in() && $vars['entity']->canAnnotate(0, 'likes')) {
                $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}";
                $params = array(
                        'href' => $url,
-                       'text' => elgg_view_icon('liked'),
+                       'text' => elgg_view_icon('thumbs-up-alt'),
                        'title' => elgg_echo('likes:remove'),
                        'is_action' => true,
                );
@@ -43,7 +43,7 @@ if (elgg_is_logged_in() && $vars['entity']->canAnnotate(0, 'likes')) {
 }
 
 $list = '';
-$num_of_likes = $vars['entity']->countLikes();
+$num_of_likes = likes_count($vars['entity']);
 if ($num_of_likes) {
        // display the number of likes
        if ($num_of_likes == 1) {
similarity index 95%
rename from views/default/river/annotation/likes/create.php
rename to mod/likes/views/default/river/annotation/likes/create.php
index 374f4a381ed56a3cc0ed8d5348e17de43fac22aa..463fe504939cecbe41c1c1493e31183b531c0e86 100644 (file)
@@ -1,7 +1,10 @@
 <?php
 /**
  * Likes river view
+ *
+ * @todo not finished
  */
+
 $object = $vars['item']->getObjectEntity();
 $comment = $vars['item']->getAnnotation();
 
index 0da86967b9d552b18aa65ed9b0cc4a185702a312..5d921021a89d83a2b44f0b44cd9ee097e4da7c66 100644 (file)
@@ -1169,15 +1169,15 @@ ul.admin_plugins {
 .elgg-icon-delete:hover {
        background-position: -199px -15px;
 }
-.elgg-icon-likes {
+.elgg-icon-thumbs-up {
        background-position: 0px -101px;
        width: 20px;
        height: 20px;
 }
-.elgg-icon-likes:hover {
+.elgg-icon-thumbs-up:hover {
        background-position: 0px -131px;
 }
-.elgg-icon-liked {
+.elgg-icon-thumbs-up-alt {
        background-position: 0px -131px;
        width: 20px;
        height: 20px;
index 5818c4bf96823ca9ef65a3841cd07dc9beeb803d..f44d1ce7db0181ec3a1146fb5c4fe0b87982cd88 100644 (file)
        margin: 0 0 0 10px;
 }
 
-/* ***************************************
-       Likes
-*************************************** */
-.elgg-likes-list {
-       width: 345px;
-       position: absolute;
-}
-
 /* ***************************************
        Tags
 *************************************** */
index 68a38ed9a900a1b719ab6ec8101edd75540e4f4a..64a1d78ca03cf903ba1e2f396f41fad5aacc8eb8 100644 (file)
 .elgg-icon-delete:hover {
        background-position: -199px -15px;
 }
-.elgg-icon-likes {
+.elgg-icon-thumbs-up {
        background-position: 0px -101px;
        width: 20px;
        height: 20px;
 }
-.elgg-icon-likes:hover {
+.elgg-icon-thumbs-up:hover {
        background-position: 0px -131px;
 }
-.elgg-icon-liked {
+.elgg-icon-thumbs-up-alt {
        background-position: 0px -131px;
        width: 20px;
        height: 20px;
index 32e7a77aaaf5594e9a970624bf4e77a50dbc8272..6760d38868c28689b0af647c1d674623b0183746 100644 (file)
        text-align: right;
 }
 
-.likes-list {display:none;}
-.likes-list-holder .likes-list {top:20px !important;} /* position likes list below link in IE to prevent clipping */
-.elgg-likes-user .entity-metadata .elgg-button-delete {float:none;}
-
 /* profile */
 .elgg-tabs.profile .profile_name {margin-left: -260px;}
 #profile_content .river_comment_form.hidden .input-text { width:510px; }