aboutsummaryrefslogtreecommitdiff
path: root/mod/likes/start.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/likes/start.php')
-rw-r--r--mod/likes/start.php123
1 files changed, 95 insertions, 28 deletions
diff --git a/mod/likes/start.php b/mod/likes/start.php
index 638f2028c..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' => 'likes',
- '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' => 'likes',
- '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