diff options
Diffstat (limited to 'mod/likes/start.php')
| -rw-r--r-- | mod/likes/start.php | 123 |
1 files changed, 95 insertions, 28 deletions
diff --git a/mod/likes/start.php b/mod/likes/start.php index 435e7a3ab..0f8e12159 100644 --- a/mod/likes/start.php +++ b/mod/likes/start.php @@ -1,7 +1,7 @@ <?php /** * Likes plugin - * + * */ elgg_register_event_handler('init', 'system', 'likes_init'); @@ -9,6 +9,7 @@ elgg_register_event_handler('init', 'system', 'likes_init'); function likes_init() { elgg_extend_view('css/elgg', 'likes/css'); + elgg_extend_view('js/elgg', 'likes/js'); // registered with priority < 500 so other plugins can remove likes elgg_register_plugin_hook_handler('register', 'menu:river', 'likes_river_menu_setup', 400); @@ -29,15 +30,27 @@ function likes_entity_menu_setup($hook, $type, $return, $params) { $entity = $params['entity']; - // likes + // likes button $options = array( 'name' => 'likes', - 'text' => elgg_view('likes/display', array('entity' => $entity)), + 'text' => elgg_view('likes/button', array('entity' => $entity)), 'href' => false, 'priority' => 1000, ); $return[] = ElggMenuItem::factory($options); + // likes count + $count = elgg_view('likes/count', array('entity' => $entity)); + if ($count) { + $options = array( + 'name' => 'likes_count', + 'text' => $count, + 'href' => false, + 'priority' => 1001, + ); + $return[] = ElggMenuItem::factory($options); + } + return $return; } @@ -47,36 +60,41 @@ function likes_entity_menu_setup($hook, $type, $return, $params) { function likes_river_menu_setup($hook, $type, $return, $params) { if (elgg_is_logged_in()) { $item = $params['item']; + + // only like group creation #3958 + if ($item->type == "group" && $item->view != "river/group/create") { + return $return; + } + + // don't like users #4116 + if ($item->type == "user") { + return $return; + } + $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_view('likes/display', array('entity' => $object)), - 'is_action' => true, - 'priority' => 100, - ); - } else { - // user has liked this - $likes = elgg_get_annotations(array( - 'guid' => $object->getGUID(), - 'annotation_name' => 'likes', - 'annotation_owner_guid' => elgg_get_logged_in_user_guid() - )); - $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}"; + // like button + $options = array( + 'name' => 'likes', + 'href' => false, + 'text' => elgg_view('likes/button', array('entity' => $object)), + 'is_action' => true, + 'priority' => 100, + ); + $return[] = ElggMenuItem::factory($options); + + // likes count + $count = elgg_view('likes/count', array('entity' => $object)); + if ($count) { $options = array( - 'name' => 'like', - 'href' => $url, - 'text' => elgg_view('likes/display', array('entity' => $object)), - 'is_action' => true, - 'priority' => 100, + 'name' => 'likes_count', + 'text' => $count, + 'href' => false, + 'priority' => 101, ); + $return[] = ElggMenuItem::factory($options); } - $return[] = ElggMenuItem::factory($options); } } } @@ -87,7 +105,7 @@ function likes_river_menu_setup($hook, $type, $return, $params) { /** * Count how many people have liked an entity. * - * @param ElggEntity $entity + * @param ElggEntity $entity * * @return int Number of likes */ @@ -102,3 +120,52 @@ function likes_count($entity) { return $entity->countAnnotations('likes'); } } + +/** + * Notify $user that $liker liked his $entity. + * + * @param type $user + * @param type $liker + * @param type $entity + */ +function likes_notify_user(ElggUser $user, ElggUser $liker, ElggEntity $entity) { + + if (!$user instanceof ElggUser) { + return false; + } + + if (!$liker instanceof ElggUser) { + return false; + } + + if (!$entity instanceof ElggEntity) { + return false; + } + + $title_str = $entity->title; + if (!$title_str) { + $title_str = elgg_get_excerpt($entity->description); + } + + $site = get_config('site'); + + $subject = elgg_echo('likes:notifications:subject', array( + $liker->name, + $title_str + )); + + $body = elgg_echo('likes:notifications:body', array( + $user->name, + $liker->name, + $title_str, + $site->name, + $entity->getURL(), + $liker->getURL() + )); + + notify_user($user->guid, + $liker->guid, + $subject, + $body + ); +}
\ No newline at end of file |
