diff options
-rw-r--r-- | actions/likes/add.php | 6 | ||||
-rw-r--r-- | actions/likes/delete.php | 2 | ||||
-rw-r--r-- | engine/lib/elgglib.php | 9 | ||||
-rw-r--r-- | js/lib/ui.js | 139 | ||||
-rw-r--r-- | languages/en.php | 4 | ||||
-rw-r--r-- | views/default/annotation/likes.php | 76 | ||||
-rw-r--r-- | views/default/core/likes/display.php | 61 | ||||
-rw-r--r-- | views/default/core/river/controls.php | 24 | ||||
-rw-r--r-- | views/default/css/screen.php | 21 | ||||
-rw-r--r-- | views/default/forms/likes/edit.php | 57 | ||||
-rw-r--r-- | views/default/js/elgg.php | 173 |
11 files changed, 186 insertions, 386 deletions
diff --git a/actions/likes/add.php b/actions/likes/add.php index 3de1ebc51..9abe0b60e 100644 --- a/actions/likes/add.php +++ b/actions/likes/add.php @@ -20,6 +20,12 @@ if (!$entity) { forward(REFERER); } +// cannot like your own stuff +if (get_loggedin_userid() == $entity->getOwnerGUID()) { + register_error(elgg_echo("likes:no_self_like")); + forward(REFERER); +} + $user = get_loggedin_user(); $annotation = create_annotation($entity->guid, 'likes', diff --git a/actions/likes/delete.php b/actions/likes/delete.php index 45984b581..7ccf2de37 100644 --- a/actions/likes/delete.php +++ b/actions/likes/delete.php @@ -20,7 +20,7 @@ if ($likes = get_annotation($annotation_id)) { if ($likes->canEdit()) { $likes->delete(); system_message(elgg_echo("likes:deleted")); - forward($entity->getURL()); + forward(REFERER); } } else { diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 8d2b8ed91..bc0b1b5af 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -333,7 +333,7 @@ function elgg_get_external_file($type, $location) { * @return string|false The HTML for the likes, or false on failure * * @since 1.8 - * @see @elgg_view forms/likes/edit + * @see @elgg_view core/likes/display */ function elgg_view_likes($entity) { if (!($entity instanceof ElggEntity)) { @@ -342,12 +342,7 @@ function elgg_view_likes($entity) { $params = array('entity' => $entity); - if ($likes = elgg_trigger_plugin_hook('likes', $entity->getType(), $params, false)) { - return $likes; - } else { - $likes = elgg_view('forms/likes/edit', $params); - return $likes; - } + return elgg_view('core/likes/display', $params); } /** diff --git a/js/lib/ui.js b/js/lib/ui.js index 02d49794d..a1d852e5a 100644 --- a/js/lib/ui.js +++ b/js/lib/ui.js @@ -8,22 +8,11 @@ elgg.ui.init = function () { $('.elgg-toggle').live('click', elgg.ui.toggle);
- $('.elgg-menu-parent').live('click', elgg.ui.menuToggle);
+ $('.elgg-menu-parent').live('click', elgg.ui.toggleMenu);
+ $('.elgg-like-toggle').live('click', elgg.ui.toggleLikes);
$('a.collapsibleboxlink').click(elgg.ui.toggleCollapsibleBox);
-
- // set-up hover class for dragged widgets
- var cols = [
- "#rightcolumn_widgets",
- "#middlecolumn_widgets",
- "#leftcolumn_widgets"
- ].join(',');
-
- $(cols).droppable({
- accept: ".draggable_widget",
- hoverClass: 'droppable-hover'
- });
};
/**
@@ -48,7 +37,7 @@ elgg.ui.toggle = function(event) { * @param {Object} event
* @return void
*/
-elgg.ui.menuToggle = function(event) {
+elgg.ui.toggleMenu = function(event) {
$(this).siblings().slideToggle('medium');
$(this).toggleClass('elgg-menu-closed elgg-menu-opened');
event.preventDefault();
@@ -60,103 +49,31 @@ elgg.ui.toggleCollapsibleBox = function () { return false;
};
-//define some helper jquery plugins
-(function($) {
-
- // ELGG TOOLBAR MENU
- $.fn.elgg_topbardropdownmenu = function(options) {
- var defaults = {
- speed: 350
- };
-
- options = $.extend(defaults, options || {});
-
- this.each(function() {
-
- var root = this, zIndex = 5000;
-
- function getSubnav(ele) {
- if (ele.nodeName.toLowerCase() === 'li') {
- var subnav = $('> ul', ele);
- return subnav.length ? subnav[0] : null;
- } else {
- return ele;
- }
- }
-
- function getActuator(ele) {
- if (ele.nodeName.toLowerCase() === 'ul') {
- return $(ele).parents('li')[0];
- } else {
- return ele;
- }
- }
-
- function hide() {
- var subnav = getSubnav(this);
- if (!subnav) {
- return;
- }
-
- $.data(subnav, 'cancelHide', false);
- setTimeout(function() {
- if (!$.data(subnav, 'cancelHide')) {
- $(subnav).slideUp(100);
- }
- }, 250);
- }
-
- function show() {
- var subnav = getSubnav(this), li;
-
- if (!subnav) {
- return;
- }
-
- $.data(subnav, 'cancelHide', true);
-
- $(subnav).css({zIndex: zIndex}).slideDown(options.speed);
- zIndex++;
-
- if (this.nodeName.toLowerCase() === 'ul') {
- li = getActuator(this);
- $(li).addClass('hover');
- $('> a', li).addClass('hover');
- }
- }
-
- $('ul, li', this).hover(show, hide);
- $('li', this).hover(
- function () {
- $(this).addClass('hover');
- $('> a', this).addClass('hover');
- },
- function () {
- $(this).removeClass('hover');
- $('> a', this).removeClass('hover');
- }
- );
-
+/**
+ * Toggles the likes list
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.toggleLikes = function(event) {
+ var $list = $(this).next(".elgg-likes-list");
+ var position = $(this).position();
+ var startTop = position.top;
+ var stopTop = position.top - $list.height();
+ if ($list.css('display') == 'none') {
+ $('.elgg-likes-list').fadeOut();
+
+ $list.css('top', startTop);
+ $list.css('left', position.left - $list.width());
+ $list.animate({opacity: "toggle", top: stopTop}, 500);
+
+ $list.click(function(event) {
+ $list.fadeOut();
});
- };
-
- //Make delimited list
- $.fn.makeDelimitedList = function(elementAttribute) {
-
- var delimitedListArray = [],
- listDelimiter = "::";
-
- // Loop over each element in the stack and add the elementAttribute to the array
- this.each(function(e) {
- var listElement = $(this);
- // Add the attribute value to our values array
- delimitedListArray[delimitedListArray.length] = listElement.attr(elementAttribute);
- }
- );
-
- // Return value list by joining the array
- return delimitedListArray.join(listDelimiter);
- };
-})(jQuery);
+ } else {
+ $list.animate({opacity: "toggle", top: startTop}, 500);
+ }
+ event.preventDefault();
+}
elgg.register_event_handler('init', 'system', elgg.ui.init);
\ No newline at end of file diff --git a/languages/en.php b/languages/en.php index 639439ee1..2f946a945 100644 --- a/languages/en.php +++ b/languages/en.php @@ -966,7 +966,9 @@ If you requested this click on the link below, otherwise ignore this email. **/ 'likes:this' => 'liked this', 'likes:deleted' => 'Your like has been removed', - 'likes:remove' => 'See who else liked this', + 'likes:see' => 'See who else liked this', + 'likes:remove' => 'Unlike this', + 'likes:no_self_like' => 'You cannot like your own content', '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', diff --git a/views/default/annotation/likes.php b/views/default/annotation/likes.php index 3fdf2349b..20965f456 100644 --- a/views/default/annotation/likes.php +++ b/views/default/annotation/likes.php @@ -1,40 +1,48 @@ <?php /** - * Elgg show the user who liked the object + * Elgg show the users who liked the object + * + * @uses $vars['annotation'] */ -$owner = get_user($vars['annotation']->owner_guid); +if (!isset($vars['annotation'])) { + return true; +} -?> -<div class="elgg-likes-user clearfix"> - <div class="entity-listing-icon"> - <?php - echo elgg_view("profile/icon", array( - 'entity' => $owner, - 'size' => 'tiny' - )); - ?> - </div> - - <div class="entity-listing-info"> - <?php - // if the user looking at the like listing can edit, show the delete link - if ($vars['annotation']->canEdit()) { - ?> - <div class="entity-metadata"><span class="delete-button"> - <?php echo elgg_view("output/confirmlink",array( - 'href' => "action/likes/delete?annotation_id=" . $vars['annotation']->id, - 'text' => elgg_echo('remove'), +$like = $vars['annotation']; + +$user = $like->getOwnerEntity(); +if (!$user) { + return true; +} + +$user_icon = elgg_view("profile/icon", array('entity' => $user, 'size' => 'tiny')); +$user_link = elgg_view('output/url', array( + 'href' => $user->getURL(), + 'text' => $user->name, +)); + +$likes_string = elgg_echo('likes:this'); + +$friendlytime = elgg_view_friendly_time($like->time_created); + +if ($like->canEdit()) { + $delete_button = elgg_view("output/confirmlink",array( + 'href' => "action/likes/delete?annotation_id={$like->id}", + 'text' => elgg_echo('delete'), 'confirm' => elgg_echo('deleteconfirm') - )); - ?> - </span></div> - <?php - } //end of can edit if statement - ?> - <p class="elgg-likes-owner"> - <a href="<?php echo $owner->getURL(); ?>"><?php echo $owner->name; ?></a> <?php echo elgg_echo('likes:this') . - " <span class=\"entity-subtext\">" . elgg_view_friendly_time($vars['annotation']->time_created) . "</span>"; ?> - </p> - </div> -</div>
\ No newline at end of file + )); + $delete_button = "<span class=\"delete-button\">$delete_button</span>"; +} + +$body = <<<HTML +<p class="mbn"> + $delete_button + $user_link $likes_string + <span class="elgg-list-subtitle"> + $friendlytime + </span> +</p> +HTML; + +echo elgg_view_image_block($user_icon, $body); diff --git a/views/default/core/likes/display.php b/views/default/core/likes/display.php new file mode 100644 index 000000000..bd0a8fa95 --- /dev/null +++ b/views/default/core/likes/display.php @@ -0,0 +1,61 @@ +<?php +/** + * Elgg likes display + * + * @package Elgg + * + * @uses $vars['entity'] + */ + +if (!isset($vars['entity'])) { + return true; +} + +$guid = $vars['entity']->getGUID(); + +// check to see if the user has already liked this +if (!elgg_annotation_exists($guid, 'likes')) { + $url = elgg_get_site_url() . "action/likes/add?guid={$guid}"; + $params = array( + 'href' => $url, + 'text' => '<span class="elgg-icon elgg-icon-likes"></span>', + 'title' => elgg_echo('likes:likethis'), + 'is_action' => true, + 'encode_text' => false, + ); + $likes_button = elgg_view('output/url', $params); +} else { + $likes = get_annotations($guid, '', '', 'likes', '', get_loggedin_userid()); + $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}"; + $params = array( + 'href' => $url, + 'text' => "<span class=\"elgg-icon elgg-icon-liked\"></span>", + 'title' => elgg_echo('likes:remove'), + 'is_action' => true, + 'encode_text' => false, + ); + $likes_button = elgg_view('output/url', $params); +} + +$list = ''; +$num_of_likes = elgg_count_likes($vars['entity']); +if ($num_of_likes) { + // display the number of likes + if ($num_of_likes == 1) { + $likes_string = elgg_echo('likes:userlikedthis'); + } else { + $likes_string = elgg_echo('likes:userslikedthis'); + } + $params = array( + 'text' => "$num_of_likes $likes_string", + 'title' => elgg_echo('likes:see'), + 'class' => 'elgg-like-toggle', + ); + $list = elgg_view('output/url', $params); + $list .= "<div class='elgg-likes-list hidden clearfix'>"; + $list .= list_annotations($guid, 'likes', 99); + $list .= "</div>"; +} + +echo $likes_button; +echo $list; diff --git a/views/default/core/river/controls.php b/views/default/core/river/controls.php index e239a2adb..66fbc5059 100644 --- a/views/default/core/river/controls.php +++ b/views/default/core/river/controls.php @@ -9,7 +9,7 @@ $object = $vars['item']->getObjectEntity(); if (isloggedin()) { - // comments and non-objects cannot be commented on + // comments and non-objects cannot be commented on or liked if ($object->getType() == 'object' && $vars['item']->annotation_id == 0) { $params = array( 'href' => '#', @@ -18,6 +18,26 @@ if (isloggedin()) { 'internalid' => "elgg-toggler-{$object->getGUID()}", ); echo elgg_view('output/url', $params); - //echo elgg_view('forms/likes/link', array('entity' => $object)); + + // like this + if (!elgg_annotation_exists($object->getGUID(), 'likes')) { + $url = "action/likes/add?guid={$object->getGUID()}"; + $params = array( + 'href' => $url, + 'text' => elgg_echo('likes:likethis'), + 'is_action' => true, + ); + echo elgg_view('output/url', $params); + } else { + $likes = get_annotations($guid, '', '', 'likes', '', get_loggedin_userid()); + $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}"; + $params = array( + 'href' => $url, + 'text' => elgg_echo('likes:remove'), + 'is_action' => true, + ); + echo elgg_view('output/url', $params); + } } + }
\ No newline at end of file diff --git a/views/default/css/screen.php b/views/default/css/screen.php index 3eb7e93a0..bae0404f7 100644 --- a/views/default/css/screen.php +++ b/views/default/css/screen.php @@ -760,6 +760,27 @@ a.elgg-widget-edit-button:hover, a.elgg-widget-delete-button:hover { /* *************************************** LIKES *************************************** */ +.elgg-likes-list { + background-color: white; + border:1px solid #cccccc; + width: 345px; + height: auto; + position: absolute; + text-align: left; + z-index: 9999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + -webkit-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5); +} +.elgg-river-item > .elgg-alt a { + font-size: 90%; + float: right; + clear: both; +} + + + .likes-list-holder { position: relative; float:right; diff --git a/views/default/forms/likes/edit.php b/views/default/forms/likes/edit.php deleted file mode 100644 index 93c4ce983..000000000 --- a/views/default/forms/likes/edit.php +++ /dev/null @@ -1,57 +0,0 @@ -<?php -/** - * Elgg likes add form - * - * @package Elgg - * - * @uses $vars['entity'] - */ - -if (isset($vars['entity']) && isloggedin()) { - $guid = $vars['entity']->getGUID(); - $url = elgg_get_site_url() . "action/likes/add?guid={$guid}"; - - //check to see if the user has already liked - if (!elgg_annotation_exists($guid, 'likes') ) { - $params = array( - 'href' => $url, - 'text' => '<span class="elgg-icon elgg-icon-likes"></span>', - 'title' => elgg_echo('likes:likethis'), - 'is_action' => true, - ); - echo elgg_view('output/url', $params); - $likes_classname = 'elgg-icon-likes'; - $likes_titletag = ""; - } else { - $likes_classname = 'elgg-icon-liked'; - $likes_titletag = elgg_echo('likes:remove'); - } - - //display the number of likes - $numoflikes = elgg_count_likes($vars['entity']); - if ($numoflikes != 0) { - if ($numoflikes == 1) { - $user_string = elgg_echo('likes:userlikedthis'); - } else { - $user_string = elgg_echo('likes:userslikedthis'); - } - - $params = array( - 'href' => $url, - 'text' => "<span class=\"elgg-icon $likes_classname\"></span>" . elgg_count_likes($vars['entity']) . " " . $user_string, - 'title' => $likes_titletag, - 'is_action' => true, - ); - echo elgg_view('output/url', $params); - - //show the users who liked the object - echo "<div class='likes-list hidden clearfix'>"; - echo list_annotations($vars['entity']->getGUID(), 'likes', 99); - echo "</div>"; - } -} - - - - - diff --git a/views/default/js/elgg.php b/views/default/js/elgg.php index 3e7b30a99..f7f1e942c 100644 --- a/views/default/js/elgg.php +++ b/views/default/js/elgg.php @@ -65,86 +65,6 @@ $(function() { $(document).ready(function () { - // COLLAPSABLE WIDGETS (on Dashboard? & Profile pages) - // toggle widget box contents - $('a.toggle_box_contents').bind('click', toggleContent); - - // WIDGET GALLERY EDIT PANEL - // Sortable widgets - var els = ['#leftcolumn_widgets', '#middlecolumn_widgets', '#rightcolumn_widgets', '#widget_picker_gallery' ]; - var $els = $(els.toString()); - - $els.sortable({ - items: '.draggable_widget', - handle: '.drag-handle', - forcePlaceholderSize: true, - placeholder: 'ui-state-highlight', - cursor: 'move', - revert: true, - opacity: 0.9, - appendTo: 'body', - connectWith: els, - start:function(e,ui) { - - }, - stop: function(e,ui) { - // refresh list before updating hidden fields with new widget order - $(this).sortable( "refresh" ); - - var widgetNamesLeft = outputWidgetList('#leftcolumn_widgets'); - var widgetNamesMiddle = outputWidgetList('#middlecolumn_widgets'); - var widgetNamesRight = outputWidgetList('#rightcolumn_widgets'); - - document.getElementById('debugField1').value = widgetNamesLeft; - document.getElementById('debugField2').value = widgetNamesMiddle; - document.getElementById('debugField3').value = widgetNamesRight; - } - }); - - // bind more info buttons - called when new widgets are created - widget_moreinfo(); - - // set-up hover class for dragged widgets - $("#rightcolumn_widgets").droppable({ - accept: ".draggable_widget", - hoverClass: 'droppable-hover' - }); - $("#middlecolumn_widgets").droppable({ - accept: ".draggable_widget", - hoverClass: 'droppable-hover' - }); - $("#leftcolumn_widgets").droppable({ - accept: ".draggable_widget", - hoverClass: 'droppable-hover' - }); - - // user likes - $(".likes-list-button").click(function(event) { - if ($(this).next(".likes-list").css('display') == 'none') { // show list - // hide any other currently viewable likes lists - $('.likes-list').fadeOut(); - - var topPosition = - $(this).next(".likes-list").height(); - topPosition10 = topPosition + 10 + "px"; - topPosition = topPosition - 5 + "px"; - $('.likes-list').css('top',topPosition10); - $('.likes-list').css('left', -$('.likes-list').width()+110); - $(this).next(".likes-list").animate({opacity: "toggle", top: topPosition}, 500); - - // set up cancel for a click outside the likes list - $(document).click(function(event) { - var target = $(event.target); - if (target.parents(".likes-list-holder").length == 0) { - $(".likes-list").fadeOut(); - } - }); - - } else { // hide list - var topPosition = - $(this).next(".likes-list").height() + 5; - $(this).next(".likes-list").animate({opacity: "toggle", top: topPosition}, 500); - } - }); - elgg_system_message(); }); /* end document ready function */ @@ -170,99 +90,6 @@ function elgg_slide_toggle(activateLink, parentElement, toggleElement) { return false; } -// List active widgets for each page column -function outputWidgetList(forElement) { - return( $("input[name='handler'], input[name='guid']", forElement ).makeDelimitedList("value") ); -} - -// Make delimited list -jQuery.fn.makeDelimitedList = function(elementAttribute) { - - var delimitedListArray = new Array(); - var listDelimiter = "::"; - - // Loop over each element in the stack and add the elementAttribute to the array - this.each(function(e) { - var listElement = $(this); - // Add the attribute value to our values array - delimitedListArray[delimitedListArray.length] = listElement.attr(elementAttribute); - } - ); - - // Return value list by joining the array - return(delimitedListArray.join(listDelimiter)); -} - - -// Read each widgets collapsed/expanded state from cookie and apply -function widget_state(forWidget) { - - var thisWidgetState = $.cookie(forWidget); - - if (thisWidgetState == 'collapsed') { - forWidget = "#" + forWidget; - $(forWidget).find("div.collapsable_box_content").hide(); - $(forWidget).find("a.toggle_box_contents").html('+'); - $(forWidget).find("a.toggle_box_edit_panel").fadeOut('medium'); - }; -} - - -// Toggle widgets contents and save to a cookie -var toggleContent = function(e) { -var targetContent = $('div.collapsable_box_content', this.parentNode.parentNode); - if (targetContent.css('display') == 'none') { - targetContent.slideDown(400); - $(this).html('-'); - $(this.parentNode).children(".toggle_box_edit_panel").fadeIn('medium'); - - // set cookie for widget panel open-state - var thisWidgetName = $(this.parentNode.parentNode.parentNode).attr('id'); - $.cookie(thisWidgetName, 'expanded', { expires: 365 }); - - } else { - targetContent.slideUp(400); - $(this).html('+'); - $(this.parentNode).children(".toggle_box_edit_panel").fadeOut('medium'); - // make sure edit pane is closed - $(this.parentNode.parentNode).children(".collapsable_box_editpanel").hide(); - - // set cookie for widget panel closed-state - var thisWidgetName = $(this.parentNode.parentNode.parentNode).attr('id'); - $.cookie(thisWidgetName, 'collapsed', { expires: 365 }); - } - return false; -}; - -// More info tooltip in widget gallery edit panel -function widget_moreinfo() { - - $("img.more_info").hover(function(e) { - var widgetdescription = $("input[name='description']", this.parentNode.parentNode.parentNode ).attr('value'); - $("body").append("<p id='widget_moreinfo'><b>"+ widgetdescription +" </b></p>"); - - if (e.pageX < 900) { - $("#widget_moreinfo") - .css("top",(e.pageY + 10) + "px") - .css("left",(e.pageX + 10) + "px") - .fadeIn("medium"); - } - else { - $("#widget_moreinfo") - .css("top",(e.pageY + 10) + "px") - .css("left",(e.pageX - 210) + "px") - .fadeIn("medium"); - } - }, - function() { - $("#widget_moreinfo").remove(); - }); - - $("img.more_info").mousemove(function(e) { - // action on mousemove - }); -}; - // ELGG DROP DOWN MENU $.fn.elgg_dropdownmenu = function(options) { |