diff options
20 files changed, 174 insertions, 136 deletions
diff --git a/engine/classes/ElggEntity.php b/engine/classes/ElggEntity.php index 69401a7e5..bfb7ce063 100644 --- a/engine/classes/ElggEntity.php +++ b/engine/classes/ElggEntity.php @@ -844,24 +844,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. * * @param string $relationship Relationship type (eg "friends") diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 3cc4ddb1d..c97fa433c 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -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'); diff --git a/engine/lib/navigation.php b/engine/lib/navigation.php index b79156986..8c71de03a 100644 --- a/engine/lib/navigation.php +++ b/engine/lib/navigation.php @@ -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 index 1c4a931b1..000000000 --- a/engine/lib/upgrades/2010121702.php +++ /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); - diff --git a/engine/lib/views.php b/engine/lib/views.php index 09325c2c0..905458a9a 100644 --- a/engine/lib/views.php +++ b/engine/lib/views.php @@ -1125,26 +1125,6 @@ function elgg_view_latest_comments($owner_guid, $type = 'object', $subtype = '', } /** - * 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. * * Fixed width media on the side (image, icon, flash, etc.). diff --git a/languages/en.php b/languages/en.php index f827c6d51..5393c356a 100644 --- a/languages/en.php +++ b/languages/en.php @@ -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', @@ -987,25 +986,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 */ diff --git a/mod/developers/views/default/theme_preview/icons.php b/mod/developers/views/default/theme_preview/icons.php index be444adb8..8178a9da7 100644 --- a/mod/developers/views/default/theme_preview/icons.php +++ b/mod/developers/views/default/theme_preview/icons.php @@ -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', diff --git a/actions/likes/add.php b/mod/likes/actions/likes/add.php index 12eed2427..f56493864 100644 --- a/actions/likes/add.php +++ b/mod/likes/actions/likes/add.php @@ -2,8 +2,6 @@ /** * Elgg add like action * - * @package Elgg.Core - * @subpackage Likes */ $entity_guid = (int) get_input('guid'); diff --git a/actions/likes/delete.php b/mod/likes/actions/likes/delete.php index 7d535052d..867d5dfef 100644 --- a/actions/likes/delete.php +++ b/mod/likes/actions/likes/delete.php @@ -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 index 000000000..52e2d4160 --- /dev/null +++ b/mod/likes/languages/en.php @@ -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 index 000000000..abd3f7c76 --- /dev/null +++ b/mod/likes/manifest.xml @@ -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 index 000000000..97823087a --- /dev/null +++ b/mod/likes/start.php @@ -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/views/default/annotation/likes.php b/mod/likes/views/default/annotation/likes.php index e1ae20818..e1ae20818 100644 --- a/views/default/annotation/likes.php +++ b/mod/likes/views/default/annotation/likes.php diff --git a/mod/likes/views/default/likes/css.php b/mod/likes/views/default/likes/css.php new file mode 100644 index 000000000..cb0334b7c --- /dev/null +++ b/mod/likes/views/default/likes/css.php @@ -0,0 +1,13 @@ +<?php +/** + * Likes CSS + */ +?> + +/* *************************************** + Likes +*************************************** */ +.elgg-likes-list { + width: 345px; + position: absolute; +} diff --git a/views/default/core/likes/display.php b/mod/likes/views/default/likes/display.php index b04630e95..00f6c5a34 100644 --- a/views/default/core/likes/display.php +++ b/mod/likes/views/default/likes/display.php @@ -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) { diff --git a/views/default/river/annotation/likes/create.php b/mod/likes/views/default/river/annotation/likes/create.php index 374f4a381..463fe5049 100644 --- a/views/default/river/annotation/likes/create.php +++ b/mod/likes/views/default/river/annotation/likes/create.php @@ -1,7 +1,10 @@ <?php /** * Likes river view + * + * @todo not finished */ + $object = $vars['item']->getObjectEntity(); $comment = $vars['item']->getAnnotation(); diff --git a/views/default/css/admin.php b/views/default/css/admin.php index 0da86967b..5d921021a 100644 --- a/views/default/css/admin.php +++ b/views/default/css/admin.php @@ -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; diff --git a/views/default/css/elements/components.php b/views/default/css/elements/components.php index 5818c4bf9..f44d1ce7d 100644 --- a/views/default/css/elements/components.php +++ b/views/default/css/elements/components.php @@ -252,14 +252,6 @@ } /* *************************************** - Likes -*************************************** */ -.elgg-likes-list { - width: 345px; - position: absolute; -} - -/* *************************************** Tags *************************************** */ .elgg-tags { diff --git a/views/default/css/elements/icons.php b/views/default/css/elements/icons.php index 68a38ed9a..64a1d78ca 100644 --- a/views/default/css/elements/icons.php +++ b/views/default/css/elements/icons.php @@ -38,15 +38,15 @@ .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; diff --git a/views/default/css/ie.php b/views/default/css/ie.php index 32e7a77aa..6760d3886 100644 --- a/views/default/css/ie.php +++ b/views/default/css/ie.php @@ -24,10 +24,6 @@ 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; } |