diff options
Diffstat (limited to 'mod')
85 files changed, 556 insertions, 530 deletions
diff --git a/mod/blog/languages/en.php b/mod/blog/languages/en.php index b626085d7..47dc57dda 100644 --- a/mod/blog/languages/en.php +++ b/mod/blog/languages/en.php @@ -12,9 +12,9 @@ $english = array( 'blog:blog' => 'Blog', 'item:object:blog' => 'Blogs', - 'blog:title:user_blogs' => '%s\'s Blogs', - 'blog:title:all_blogs' => 'All Site Blogs', - 'blog:title:friends' => 'Friends\' Blogs', + 'blog:title:user_blogs' => '%s\'s blogs', + 'blog:title:all_blogs' => 'All site blogs', + 'blog:title:friends' => 'Friends\' blogs', 'blog:group' => 'Group blog', 'blog:enableblog' => 'Enable group blog', @@ -53,8 +53,9 @@ $english = array( 'blog:error:revision_not_found' => 'Cannot find this revision.', // river - 'blog:river:create' => 'published a blog post', - 'river:commented:object:blog' => 'the blog', + + 'river:create:object:blog' => '%s published a blog post %s', + 'river:comment:object:blog' => '%s commented on the blog %s', // widget 'blog:widget:description' => 'Display your latest blog posts', diff --git a/mod/blog/lib/blog.php b/mod/blog/lib/blog.php index 8964d5b53..4d1edd50e 100644 --- a/mod/blog/lib/blog.php +++ b/mod/blog/lib/blog.php @@ -38,7 +38,7 @@ function blog_get_page_content_read($guid = NULL) { } elgg_push_breadcrumb($blog->title); - $return['content'] = elgg_view_entity($blog, TRUE); + $return['content'] = elgg_view_entity($blog, array('full_view' => true)); //check to see if comment are on if ($blog->comments_on != 'Off') { $return['content'] .= elgg_view_comments($blog); @@ -88,6 +88,8 @@ function blog_get_page_content_list($container_guid = NULL) { } else { $return['filter_context'] = 'all'; $return['title'] = elgg_echo('blog:title:all_blogs'); + elgg_pop_breadcrumb(); + elgg_push_breadcrumb(elgg_echo('blog:blogs')); } // show all posts for admin or users looking at their own blogs diff --git a/mod/blog/views/default/blog/group_module.php b/mod/blog/views/default/blog/group_module.php index 6cfe6c98e..d769fbd59 100644 --- a/mod/blog/views/default/blog/group_module.php +++ b/mod/blog/views/default/blog/group_module.php @@ -14,10 +14,6 @@ $all_link = elgg_view('output/url', array( 'text' => elgg_echo('link:view:all'), )); -$header = "<span class=\"groups-widget-viewall\">$all_link</span>"; -$header .= '<h3>' . elgg_echo('blog:group') . '</h3>'; - - elgg_push_context('widgets'); $options = array( 'type' => 'object', @@ -34,12 +30,14 @@ if (!$content) { $content = '<p>' . elgg_echo('blog:none') . '</p>'; } -if ($group->canWriteToContainer()) { - $new_link = elgg_view('output/url', array( - 'href' => "blog/add/$group->guid", - 'text' => elgg_echo('blog:write'), - )); - $content .= "<span class='elgg-widget-more'>$new_link</span>"; -} +$new_link = elgg_view('output/url', array( + 'href' => "blog/add/$group->guid", + 'text' => elgg_echo('blog:write'), +)); -echo elgg_view_module('info', '', $content, array('header' => $header)); +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('blog:group'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $new_link, +)); diff --git a/mod/blog/views/default/object/blog.php b/mod/blog/views/default/object/blog.php index 8456829fe..ba08180b1 100644 --- a/mod/blog/views/default/object/blog.php +++ b/mod/blog/views/default/object/blog.php @@ -74,6 +74,7 @@ if ($full) { 'subtitle' => $subtitle, 'tags' => $tags, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); $blog_info = elgg_view_image_block($owner_icon, $list_body); @@ -94,6 +95,7 @@ HTML; 'tags' => $tags, 'content' => $excerpt, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); echo elgg_view_image_block($owner_icon, $list_body); diff --git a/mod/blog/views/default/river/object/blog/create.php b/mod/blog/views/default/river/object/blog/create.php index bd2405d42..613cbb165 100644 --- a/mod/blog/views/default/river/object/blog/create.php +++ b/mod/blog/views/default/river/object/blog/create.php @@ -7,29 +7,7 @@ $object = $vars['item']->getObjectEntity(); $excerpt = strip_tags($object->excerpt); $excerpt = elgg_get_excerpt($excerpt); -$params = array( - 'href' => $object->getURL(), - 'text' => $object->title, -); -$link = elgg_view('output/url', $params); - -$group_string = ''; -$container = $object->getContainerEntity(); -if ($container instanceof ElggGroup) { - $params = array( - 'href' => $container->getURL(), - 'text' => $container->name, - ); - $group_link = elgg_view('output/url', $params); - $group_string = elgg_echo('river:ingroup', array($group_link)); -} - -echo elgg_echo('blog:river:create'); - -echo " $link $group_string"; - -if ($excerpt) { - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $excerpt, +));
\ No newline at end of file diff --git a/mod/bookmarks/languages/en.php b/mod/bookmarks/languages/en.php index 42865f8cf..1d32a0344 100644 --- a/mod/bookmarks/languages/en.php +++ b/mod/bookmarks/languages/en.php @@ -35,10 +35,10 @@ $english = array( 'bookmarks:visit' => "Visit resource", 'bookmarks:recent' => "Recent bookmarks", - 'bookmarks:river:created' => 'bookmarked %s', + 'river:create:object:bookmarks' => '%s bookmarked %s', + 'river:comment:object:bookmarks' => '%s commented on a bookmark %s', 'bookmarks:river:annotate' => 'a comment on this bookmark', 'bookmarks:river:item' => 'an item', - 'river:commented:object:bookmarks' => 'a bookmark', 'item:object:bookmarks' => 'Bookmarks', diff --git a/mod/bookmarks/pages/bookmarks/all.php b/mod/bookmarks/pages/bookmarks/all.php index 0978fd7fd..ec0f85e2b 100644 --- a/mod/bookmarks/pages/bookmarks/all.php +++ b/mod/bookmarks/pages/bookmarks/all.php @@ -5,6 +5,9 @@ * @package ElggBookmarks */ +elgg_pop_breadcrumb(); +elgg_push_breadcrumb(elgg_echo('bookmarks')); + $offset = (int)get_input('offset', 0); $content = elgg_list_entities(array( 'type' => 'object', diff --git a/mod/bookmarks/pages/bookmarks/view.php b/mod/bookmarks/pages/bookmarks/view.php index d0a9c630a..8e097b090 100644 --- a/mod/bookmarks/pages/bookmarks/view.php +++ b/mod/bookmarks/pages/bookmarks/view.php @@ -21,7 +21,7 @@ $title = $bookmark->title; elgg_push_breadcrumb($title); -$content = elgg_view_entity($bookmark, true); +$content = elgg_view_entity($bookmark, array('full_view' => true)); $content .= elgg_view_comments($bookmark); $body = elgg_view_layout('content', array( diff --git a/mod/bookmarks/start.php b/mod/bookmarks/start.php index 1fb79deb6..2a7b44e97 100644 --- a/mod/bookmarks/start.php +++ b/mod/bookmarks/start.php @@ -88,7 +88,6 @@ function bookmarks_page_handler($page) { elgg_load_library('elgg:bookmarks'); elgg_push_breadcrumb(elgg_echo('bookmarks'), 'bookmarks/all'); - elgg_push_context('bookmarks'); // old group usernames if (substr_count($page[0], 'group:')) { diff --git a/mod/bookmarks/views/default/bookmarks/group_module.php b/mod/bookmarks/views/default/bookmarks/group_module.php index 3166fc0f0..3797de010 100644 --- a/mod/bookmarks/views/default/bookmarks/group_module.php +++ b/mod/bookmarks/views/default/bookmarks/group_module.php @@ -16,9 +16,6 @@ $all_link = elgg_view('output/url', array( 'text' => elgg_echo('link:view:all'), )); -$header = "<span class=\"groups-widget-viewall\">$all_link</span>"; -$header .= '<h3>' . elgg_echo('bookmarks:group') . '</h3>'; - elgg_push_context('widgets'); $options = array( 'type' => 'object', @@ -35,12 +32,14 @@ if (!$content) { $content = '<p>' . elgg_echo('bookmarks:none') . '</p>'; } -if ($group->canWriteToContainer()) { - $new_link = elgg_view('output/url', array( - 'href' => "bookmarks/add/$group->guid", - 'text' => elgg_echo('bookmarks:add'), - )); - $content .= "<span class='elgg-widget-more'>$new_link</span>"; -} +$new_link = elgg_view('output/url', array( + 'href' => "bookmarks/add/$group->guid", + 'text' => elgg_echo('bookmarks:add'), +)); -echo elgg_view_module('info', '', $content, array('header' => $header)); +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('bookmarks:group'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $new_link, +)); diff --git a/mod/bookmarks/views/default/object/bookmarks.php b/mod/bookmarks/views/default/object/bookmarks.php index 38b0a721a..ca1f5d312 100644 --- a/mod/bookmarks/views/default/object/bookmarks.php +++ b/mod/bookmarks/views/default/object/bookmarks.php @@ -65,6 +65,7 @@ if ($full && !elgg_in_context('gallery')) { 'subtitle' => $subtitle, 'tags' => $tags, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); $bookmark_info = elgg_view_image_block($owner_icon, $list_body); @@ -118,7 +119,8 @@ HTML; 'tags' => $tags, 'content' => $content, ); - + $params = $params + $vars; $body = elgg_view('object/elements/summary', $params); + echo elgg_view_image_block($owner_icon, $body); }
\ No newline at end of file diff --git a/mod/bookmarks/views/default/river/object/bookmarks/create.php b/mod/bookmarks/views/default/river/object/bookmarks/create.php index 743efdb22..984d109be 100644 --- a/mod/bookmarks/views/default/river/object/bookmarks/create.php +++ b/mod/bookmarks/views/default/river/object/bookmarks/create.php @@ -8,29 +8,8 @@ $object = $vars['item']->getObjectEntity(); $excerpt = elgg_get_excerpt($object->description); -$params = array( - 'href' => $object->getURL(), - 'text' => $object->title, -); -$link = elgg_view('output/url', $params); - -$group_string = ''; -$container = $object->getContainerEntity(); -if ($container instanceof ElggGroup) { - $params = array( - 'href' => $container->getURL(), - 'text' => $container->name, - ); - $group_link = elgg_view('output/url', $params); - $group_string = elgg_echo('river:ingroup', array($group_link)); -} - -$link = elgg_echo('bookmarks:river:created', array($link)); - -echo " $link $group_string"; - -if ($excerpt) { - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $excerpt, + 'attachments' => elgg_view('output/url', array('href' => $object->address)), +)); diff --git a/mod/custom_index/index.php b/mod/custom_index/index.php index e39e6ef29..53990a006 100644 --- a/mod/custom_index/index.php +++ b/mod/custom_index/index.php @@ -35,7 +35,8 @@ $newest_members = elgg_list_entities_from_metadata(array( 'limit' => 10, 'full_view' => false, 'pagination' => false, - 'gallery' => true, + 'list_type' => 'gallery', + 'gallery_class' => 'elgg-gallery-users', 'size' => 'small', )); diff --git a/mod/dashboard/start.php b/mod/dashboard/start.php index 4fa048b3d..9de1ee4af 100644 --- a/mod/dashboard/start.php +++ b/mod/dashboard/start.php @@ -8,6 +8,8 @@ elgg_register_event_handler('init', 'system', 'dashboard_init'); function dashboard_init() { elgg_register_page_handler('dashboard', 'dashboard_page_handler'); + elgg_extend_view('css/elgg', 'dashboard/css'); + elgg_register_menu_item('topbar', array( 'name' => 'dashboard', 'href' => 'dashboard', diff --git a/mod/dashboard/views/default/dashboard/blurb.php b/mod/dashboard/views/default/dashboard/blurb.php index 202be1dc5..9293e513a 100644 --- a/mod/dashboard/views/default/dashboard/blurb.php +++ b/mod/dashboard/views/default/dashboard/blurb.php @@ -9,7 +9,7 @@ <?php echo elgg_view('output/longtext', array( 'id' => 'dashboard-info', - 'class' => 'elgg-inner elgg-border-plain pam mhs mbl mtn', + 'class' => 'elgg-inner pam mhs mtn', 'value' => elgg_echo("dashboard:nowidgets"), )); diff --git a/mod/dashboard/views/default/dashboard/css.php b/mod/dashboard/views/default/dashboard/css.php new file mode 100644 index 000000000..f49293293 --- /dev/null +++ b/mod/dashboard/views/default/dashboard/css.php @@ -0,0 +1,10 @@ +<?php +/** + * User dashboard CSS + */ +?> + +#dashboard-info { + border: 2px solid #dedede; + margin-bottom: 15px; +} diff --git a/mod/file/actions/file/upload.php b/mod/file/actions/file/upload.php index b17fb6298..88a01745d 100644 --- a/mod/file/actions/file/upload.php +++ b/mod/file/actions/file/upload.php @@ -95,9 +95,10 @@ if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) { $file->originalfilename = $_FILES['upload']['name']; $file->simpletype = file_get_simple_type($_FILES['upload']['type']); + // Open the file to guarantee the directory exists $file->open("write"); - $file->write(get_uploaded_file('upload')); $file->close(); + move_uploaded_file($_FILES['upload']['tmp_name'], $file->getFilenameOnFilestore()); $guid = $file->save(); diff --git a/mod/file/download.php b/mod/file/download.php index a386d490f..8e0287a1e 100644 --- a/mod/file/download.php +++ b/mod/file/download.php @@ -33,8 +33,7 @@ if (strpos($mime, "image/") !== false) { header("Content-Disposition: attachment; filename=\"$filename\""); } -$contents = $file->grabFile(); -$splitString = str_split($contents, 8192); -foreach ($splitString as $chunk) { - echo $chunk; -} +ob_clean(); +flush(); +readfile($file->getFilenameOnFilestore()); +exit; diff --git a/mod/file/languages/en.php b/mod/file/languages/en.php index 7ced3f112..72b198d54 100644 --- a/mod/file/languages/en.php +++ b/mod/file/languages/en.php @@ -11,11 +11,8 @@ $english = array( * Menu items and titles */ 'file' => "Files", - 'files' => "My Files", - 'file:yours' => "Your files", - 'file:yours:friends' => "Your friends' files", 'file:user' => "%s's files", - 'file:friends' => "%s's friends' files", + 'file:friends' => "Friends' files", 'file:all' => "All site files", 'file:edit' => "Edit file", 'file:more' => "More files", @@ -73,8 +70,8 @@ $english = array( 'file:display:number' => "Number of files to display", - 'file:river:create' => 'uploaded the file', - 'river:commented:object:file' => 'the file', + 'river:create:object:file' => '%s uploaded the file %s', + 'river:comment:object:file' => '%s commented on the file %s', 'item:object:file' => 'Files', diff --git a/mod/file/pages/file/friends.php b/mod/file/pages/file/friends.php index 65fc66f62..fc23e1d1e 100644 --- a/mod/file/pages/file/friends.php +++ b/mod/file/pages/file/friends.php @@ -12,7 +12,7 @@ elgg_push_breadcrumb($owner->name, "file/owner/$owner->username"); elgg_push_breadcrumb(elgg_echo('friends')); -$title = elgg_echo("file:friends", array($owner->name)); +$title = elgg_echo("file:friends"); // offset is grabbed in list_user_friends_objects $content = list_user_friends_objects($owner->guid, 'file', 10, false); diff --git a/mod/file/pages/file/owner.php b/mod/file/pages/file/owner.php index 69ec30425..a01e9cd22 100644 --- a/mod/file/pages/file/owner.php +++ b/mod/file/pages/file/owner.php @@ -17,20 +17,19 @@ $params = array(); if ($owner->guid == elgg_get_logged_in_user_guid()) { // user looking at own files - $title = elgg_echo('file:yours'); $params['filter_context'] = 'mine'; } else if (elgg_instanceof($owner, 'user')) { // someone else's files - $title = elgg_echo("file:user", array($owner->name)); // do not show button or select a tab when viewing someone else's posts $params['filter_context'] = 'none'; $params['buttons'] = ''; } else { // group files - $title = elgg_echo("file:user", array($owner->name)); $params['filter'] = ''; } +$title = elgg_echo("file:user", array($owner->name)); + // List files $content = elgg_list_entities(array( 'types' => 'object', diff --git a/mod/file/pages/file/view.php b/mod/file/pages/file/view.php index daa2a400e..4b395d20d 100644 --- a/mod/file/pages/file/view.php +++ b/mod/file/pages/file/view.php @@ -22,14 +22,20 @@ $title = $file->title; elgg_push_breadcrumb($title); -$content = elgg_view_entity($file, true); +$content = elgg_view_entity($file, array('full_view' => true)); $content .= elgg_view_comments($file); +$download = elgg_view('output/url', array( + 'href' => "mod/file/download.php?file_guid=$file->guid", + 'text' => elgg_echo("file:download"), + 'class' => 'elgg-button elgg-button-action float-alt', +)); + $body = elgg_view_layout('content', array( 'content' => $content, 'title' => $title, 'filter' => '', - 'header' => '', + 'buttons' => $download, )); echo elgg_view_page($title, $body); diff --git a/mod/file/views/default/file/group_module.php b/mod/file/views/default/file/group_module.php index 830b1096c..c37b13927 100644 --- a/mod/file/views/default/file/group_module.php +++ b/mod/file/views/default/file/group_module.php @@ -14,10 +14,6 @@ $all_link = elgg_view('output/url', array( 'text' => elgg_echo('link:view:all'), )); -$header = "<span class=\"groups-widget-viewall\">$all_link</span>"; -$header .= '<h3>' . elgg_echo('file:group') . '</h3>'; - - elgg_push_context('widgets'); $options = array( 'type' => 'object', @@ -34,12 +30,14 @@ if (!$content) { $content = '<p>' . elgg_echo('file:none') . '</p>'; } -if ($group->canWriteToContainer()) { - $new_link = elgg_view('output/url', array( - 'href' => "file/add/$group->guid", - 'text' => elgg_echo('file:add'), - )); - $content .= "<span class='elgg-widget-more'>$new_link</span>"; -} +$new_link = elgg_view('output/url', array( + 'href' => "file/add/$group->guid", + 'text' => elgg_echo('file:add'), +)); -echo elgg_view_module('info', '', $content, array('header' => $header)); +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('file:group'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $new_link, +)); diff --git a/mod/file/views/default/file/typecloud.php b/mod/file/views/default/file/typecloud.php index ce4d6c127..4253bf674 100644 --- a/mod/file/views/default/file/typecloud.php +++ b/mod/file/views/default/file/typecloud.php @@ -15,7 +15,7 @@ function file_type_cloud_get_url($type, $friends) { } if ($type->tag == "image") { - $url .= "&listtype=gallery"; + $url .= "&list_type=gallery"; } if (elgg_get_page_owner_guid()) { diff --git a/mod/file/views/default/forms/file/upload.php b/mod/file/views/default/forms/file/upload.php index da764c3d8..98b7d9f05 100644 --- a/mod/file/views/default/forms/file/upload.php +++ b/mod/file/views/default/forms/file/upload.php @@ -18,8 +18,10 @@ $guid = elgg_extract('guid', $vars, null); if ($guid) { $file_label = elgg_echo("file:replace"); + $submit_label = elgg_echo('save'); } else { $file_label = elgg_echo("file:file"); + $submit_label = elgg_echo('upload'); } ?> @@ -60,7 +62,7 @@ if ($guid) { echo elgg_view('input/hidden', array('name' => 'file_guid', 'value' => $guid)); } -echo elgg_view('input/submit', array('value' => elgg_echo("save"))); +echo elgg_view('input/submit', array('value' => $submit_label)); ?> </div> diff --git a/mod/file/views/default/object/file.php b/mod/file/views/default/object/file.php index 93a21c8e6..95e190d35 100644 --- a/mod/file/views/default/object/file.php +++ b/mod/file/views/default/object/file.php @@ -67,12 +67,6 @@ if ($full && !elgg_in_context('gallery')) { $extra = elgg_view("file/specialcontent/$base_type/default", $vars); } - $download = elgg_view('output/url', array( - 'href' => "mod/file/download.php?file_guid=$file->guid", - 'text' => elgg_echo("file:download"), - 'class' => 'elgg-button elgg-button-action', - )); - $header = elgg_view_title($file->title); $params = array( @@ -82,17 +76,16 @@ if ($full && !elgg_in_context('gallery')) { 'subtitle' => $subtitle, 'tags' => $tags, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); $file_info = elgg_view_image_block($file_icon, $list_body); echo <<<HTML -$header $file_info <div class="file elgg-content"> $body $extra - <p>$download</p> </div> HTML; @@ -112,6 +105,7 @@ HTML; 'tags' => $tags, 'content' => $excerpt, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); echo elgg_view_image_block($file_icon, $list_body); diff --git a/mod/file/views/default/river/object/file/create.php b/mod/file/views/default/river/object/file/create.php index 620d1d18c..dad629120 100644 --- a/mod/file/views/default/river/object/file/create.php +++ b/mod/file/views/default/river/object/file/create.php @@ -7,29 +7,7 @@ $object = $vars['item']->getObjectEntity(); $excerpt = strip_tags($object->description); $excerpt = elgg_get_excerpt($excerpt); -$params = array( - 'href' => $object->getURL(), - 'text' => $object->title, -); -$link = elgg_view('output/url', $params); - -$group_string = ''; -$container = $object->getContainerEntity(); -if ($container instanceof ElggGroup) { - $params = array( - 'href' => $container->getURL(), - 'text' => $container->name, - ); - $group_link = elgg_view('output/url', $params); - $group_string = elgg_echo('river:ingroup', array($group_link)); -} - -echo elgg_echo('file:river:create'); - -echo " $link $group_string"; - -if ($excerpt) { - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $excerpt, +));
\ No newline at end of file diff --git a/mod/groups/actions/groups/membership/remove.php b/mod/groups/actions/groups/membership/remove.php new file mode 100644 index 000000000..650d35286 --- /dev/null +++ b/mod/groups/actions/groups/membership/remove.php @@ -0,0 +1,31 @@ +<?php +/** + * Remove a user from a group + * + * @package ElggGroups + */ + +$user_guid = get_input('user_guid'); +$group_guid = get_input('group_guid'); + +$user = get_entity($user_guid); +$group = get_entity($group_guid); + +elgg_set_page_owner_guid($group->guid); + +if (($user instanceof ElggUser) && ($group instanceof ElggGroup) && $group->canEdit()) { + // Don't allow removing group owner + if ($group->getOwnerGUID() != $user->getGUID()) { + if ($group->leave($user)) { + system_message(elgg_echo("groups:removed", array($user->name))); + } else { + register_error(elgg_echo("groups:cantremove")); + } + } else { + register_error(elgg_echo("groups:cantremove")); + } +} else { + register_error(elgg_echo("groups:cantremove")); +} + +forward(REFERER); diff --git a/mod/groups/languages/en.php b/mod/groups/languages/en.php index 63a6df3a9..9f8bed9a4 100644 --- a/mod/groups/languages/en.php +++ b/mod/groups/languages/en.php @@ -166,6 +166,9 @@ $english = array( 'groups:notitle' => 'Groups must have a title', 'groups:cantjoin' => 'Can not join group', 'groups:cantleave' => 'Could not leave group', + 'groups:removeuser' => 'Remove from group', + 'groups:cantremove' => 'Cannot remove user from group', + 'groups:removed' => 'Successfully removed %s from group', 'groups:addedtogroup' => 'Successfully added the user to the group', 'groups:joinrequestnotmade' => 'Could not request to join group', 'groups:joinrequestmade' => 'Requested to join group', @@ -210,10 +213,10 @@ or click below to view the group's join requests: Forum river items */ - 'groups:river:create' => 'created the group', - 'groups:river:join' => 'joined the group', - 'forumtopic:river:create' => 'added a new discussion topic', - 'groups:river:reply' => 'replied on the discussion topic', + 'river:create:group:default' => '%s created the group %s', + 'river:join:group:default' => '%s joined the group %s', + 'river:create:object:groupforumtopic' => '%s added a new discussion topic %s', + 'river:reply:object:groupforumtopic' => '%s replied on the discussion topic %s', 'groups:nowidgets' => 'No widgets have been defined for this group.', diff --git a/mod/groups/lib/discussion.php b/mod/groups/lib/discussion.php index 94d212ef6..342115c81 100644 --- a/mod/groups/lib/discussion.php +++ b/mod/groups/lib/discussion.php @@ -167,7 +167,7 @@ function discussion_handle_view_page($guid) { elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid"); elgg_push_breadcrumb($topic->title); - $content = elgg_view_entity($topic, true); + $content = elgg_view_entity($topic, array('full_view' => true)); if ($topic->status == 'closed') { $content .= elgg_view('discussion/replies', array( 'entity' => $topic, diff --git a/mod/groups/lib/groups.php b/mod/groups/lib/groups.php index 279c5f238..c3986e53c 100644 --- a/mod/groups/lib/groups.php +++ b/mod/groups/lib/groups.php @@ -307,7 +307,7 @@ function groups_handle_members_page($guid) { $title = elgg_echo('groups:members:title', array($group->name)); elgg_push_breadcrumb($group->name, $group->getURL()); - elgg_push_breadcrumb(elgg_echo('groups:members:')); + elgg_push_breadcrumb(elgg_echo('groups:members')); $content = elgg_list_entities_from_relationship(array( 'relationship' => 'member', diff --git a/mod/groups/start.php b/mod/groups/start.php index 73bdd08a9..57c40af5d 100644 --- a/mod/groups/start.php +++ b/mod/groups/start.php @@ -44,6 +44,7 @@ function groups_init() { elgg_register_action("groups/invite", "$action_base/invite.php"); elgg_register_action("groups/join", "$action_base/join.php"); elgg_register_action("groups/leave", "$action_base/leave.php"); + elgg_register_action("groups/remove", "$action_base/remove.php"); elgg_register_action("groups/killrequest", "$action_base/delete_request.php"); elgg_register_action("groups/killinvitation", "$action_base/delete_invite.php"); elgg_register_action("groups/addtogroup", "$action_base/add.php"); @@ -60,6 +61,9 @@ function groups_init() { // group entity menu elgg_register_plugin_hook_handler('register', 'menu:entity', 'groups_entity_menu_setup'); + + // group user hover menu + elgg_register_plugin_hook_handler('register', 'menu:user_hover', 'groups_user_entity_menu_setup'); //extend some views elgg_extend_view('css/elgg', 'groups/css'); @@ -367,6 +371,44 @@ function groups_entity_menu_setup($hook, $type, $return, $params) { } /** + * Add a remove user link to user hover menu when the page owner is a group + */ +function groups_user_entity_menu_setup($hook, $type, $return, $params) { + if (elgg_is_logged_in()) { + $group = elgg_get_page_owner_entity(); + + // Check for valid group + if (!elgg_instanceof($group, 'group')) { + return $return; + } + + $entity = $params['entity']; + + // Make sure we have a user and that user is a member of the group + if (!elgg_instanceof($entity, 'user') || !$group->isMember($entity)) { + return $return; + } + + // Add remove link if we can edit the group, and if we're not trying to remove the group owner + if ($group->canEdit() && $group->getOwnerGUID() != $entity->guid) { + $remove = elgg_view('output/confirmlink', array( + 'href' => "action/groups/remove?user_guid={$entity->guid}&group_guid={$group->guid}", + 'text' => elgg_echo('groups:removeuser'), + )); + + $options = array( + 'name' => 'removeuser', + 'text' => $remove, + 'priority' => 999, + ); + $return[] = ElggMenuItem::factory($options); + } + } + + return $return; +} + +/** * Groups created so create an access list for it */ function groups_create_event_listener($event, $object_type, $object) { @@ -621,7 +663,7 @@ function discussion_init() { // commenting not allowed on discussion topics (use a different annotation) elgg_register_plugin_hook_handler('permissions_check:comment', 'object', 'discussion_comment_override'); - + $action_base = elgg_get_plugins_path() . 'groups/actions/discussion'; elgg_register_action('discussion/save', "$action_base/save.php"); elgg_register_action('discussion/delete', "$action_base/delete.php"); @@ -722,7 +764,7 @@ function discussion_owner_block_menu($hook, $type, $return, $params) { * Add the reply button for the river */ function discussion_add_to_river_menu($hook, $type, $return, $params) { - if (elgg_is_logged_in()) { + if (elgg_is_logged_in() && !elgg_in_context('widgets')) { $item = $params['item']; $object = $item->getObjectEntity(); if (elgg_instanceof($object, 'object', 'groupforumtopic')) { @@ -734,7 +776,7 @@ function discussion_add_to_river_menu($hook, $type, $return, $params) { 'href' => "#groups-reply-$object->guid", 'text' => elgg_view_icon('speech-bubble'), 'title' => elgg_echo('reply:this'), - 'link_class' => "elgg-toggler", + 'link_rel' => 'toggle', 'priority' => 50, ); $return[] = ElggMenuItem::factory($options); diff --git a/mod/groups/views/default/discussion/group_module.php b/mod/groups/views/default/discussion/group_module.php index 165d9b1be..3a46e336e 100644 --- a/mod/groups/views/default/discussion/group_module.php +++ b/mod/groups/views/default/discussion/group_module.php @@ -17,10 +17,6 @@ $all_link = elgg_view('output/url', array( 'text' => elgg_echo('link:view:all'), )); -$header = "<span class=\"groups-widget-viewall\">$all_link</span>"; -$header .= '<h3>' . elgg_echo('discussion:group') . '</h3>'; - - elgg_push_context('widgets'); $options = array( 'type' => 'object', @@ -37,12 +33,14 @@ if (!$content) { $content = '<p>' . elgg_echo('grouptopic:notcreated') . '</p>'; } -if ($group->canWriteToContainer()) { - $new_link = elgg_view('output/url', array( - 'href' => "discussion/add/" . $group->getGUID(), - 'text' => elgg_echo('groups:addtopic'), - )); - $content .= "<span class='elgg-widget-more'>$new_link</span>"; -} +$new_link = elgg_view('output/url', array( + 'href' => "discussion/add/" . $group->getGUID(), + 'text' => elgg_echo('groups:addtopic'), +)); -echo elgg_view_module('info', '', $content, array('header' => $header)); +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('discussion:group'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $new_link, +));
\ No newline at end of file diff --git a/mod/groups/views/default/group/default.php b/mod/groups/views/default/group/default.php index 2aa377813..fc91f90d0 100644 --- a/mod/groups/views/default/group/default.php +++ b/mod/groups/views/default/group/default.php @@ -31,6 +31,7 @@ if ($vars['full_view']) { 'metadata' => $metadata, 'subtitle' => $group->briefdescription, ); + $params = $params + $vars; $list_body = elgg_view('group/elements/summary', $params); echo elgg_view_image_block($icon, $list_body); diff --git a/mod/groups/views/default/groups/css.php b/mod/groups/views/default/groups/css.php index 37fc5dc10..9c65d1602 100644 --- a/mod/groups/views/default/groups/css.php +++ b/mod/groups/views/default/groups/css.php @@ -36,15 +36,14 @@ margin: 0; } -#groups-tools > .elgg-module { - float: left; - margin-bottom: 40px; +#groups-tools > li { + width: 48%; min-height: 200px; - width: 350px; + margin-bottom: 40px; } -#groups-tools > .elgg-module:nth-child(odd) { - margin-right: 30px; +#groups-tools > li:nth-child(odd) { + margin-right: 4%; } .groups-widget-viewall { diff --git a/mod/groups/views/default/groups/js.php b/mod/groups/views/default/groups/js.php index dec31cf54..ad742445b 100644 --- a/mod/groups/views/default/groups/js.php +++ b/mod/groups/views/default/groups/js.php @@ -1,4 +1,5 @@ $(function() { - $('#groups-tools').find('.elgg-module:odd').addClass('odd'); + // jQuery uses 0-based indexing + $('#groups-tools').children('li:even').addClass('odd'); }); diff --git a/mod/groups/views/default/groups/profile/activity_module.php b/mod/groups/views/default/groups/profile/activity_module.php index 4ea97cad6..5e557b443 100644 --- a/mod/groups/views/default/groups/profile/activity_module.php +++ b/mod/groups/views/default/groups/profile/activity_module.php @@ -21,16 +21,13 @@ $all_link = elgg_view('output/url', array( 'text' => elgg_echo('link:view:all'), )); -$header = "<span class=\"groups-widget-viewall\">$all_link</span>"; -$header .= '<h3>' . elgg_echo('groups:activity') . '</h3>'; - elgg_push_context('widgets'); $db_prefix = elgg_get_config('dbprefix'); $content = elgg_list_river(array( 'limit' => 4, 'pagination' => false, - 'joins' => array("join {$db_prefix}entities e1 on e1.guid = rv.object_guid"), + 'joins' => array("JOIN {$db_prefix}entities e1 ON e1.guid = rv.object_guid"), 'wheres' => array("(e1.container_guid = $group->guid)"), )); elgg_pop_context(); @@ -39,4 +36,8 @@ if (!$content) { $content = '<p>' . elgg_echo('groups:activity:none') . '</p>'; } -echo elgg_view_module('info', '', $content, array('header' => $header)); +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('groups:activity'), + 'content' => $content, + 'all_link' => $all_link, +)); diff --git a/mod/groups/views/default/groups/profile/module.php b/mod/groups/views/default/groups/profile/module.php new file mode 100644 index 000000000..9d0b18266 --- /dev/null +++ b/mod/groups/views/default/groups/profile/module.php @@ -0,0 +1,25 @@ +<?php +/** + * Group module (also called a group widget) + * + * @uses $vars['title'] The title of the module + * @uses $vars['content'] The module content + * @uses $vars['all_link'] A link to list content + * @uses $vars['add_link'] A link to create content + */ + +$group = elgg_get_page_owner_entity(); + +$header = "<span class=\"groups-widget-viewall\">{$vars['all_link']}</span>"; +$header .= '<h3>' . $vars['title'] . '</h3>'; + +if ($group->canWriteToContainer() && isset($vars['add_link'])) { + $vars['content'] .= "<span class='elgg-widget-more'>{$vars['add_link']}</span>"; +} + +echo '<li>'; +echo elgg_view_module('info', '', $vars['content'], array( + 'header' => $header, + 'class' => 'elgg-module-group', +)); +echo '</li>'; diff --git a/mod/groups/views/default/groups/profile/widgets.php b/mod/groups/views/default/groups/profile/widgets.php index 28e43fdc4..75c04c810 100644 --- a/mod/groups/views/default/groups/profile/widgets.php +++ b/mod/groups/views/default/groups/profile/widgets.php @@ -6,7 +6,7 @@ */ // tools widget area -echo '<div id="groups-tools" class="mtl clearfix">'; +echo '<div id="groups-tools" class="elgg-gallery elgg-gallery-fluid mtl clearfix">'; // enable tools to extend this area echo elgg_view("groups/tool_latest", array('entity' => $vars['entity'])); diff --git a/mod/groups/views/default/groups/sidebar/featured.php b/mod/groups/views/default/groups/sidebar/featured.php index 695782783..8bd51ab5c 100644 --- a/mod/groups/views/default/groups/sidebar/featured.php +++ b/mod/groups/views/default/groups/sidebar/featured.php @@ -17,7 +17,7 @@ if ($featured_groups) { elgg_push_context('widgets'); $body = ''; foreach ($featured_groups as $group) { - $body .= elgg_view_entity($group, false); + $body .= elgg_view_entity($group, array('full_view' => false)); } elgg_pop_context(); diff --git a/mod/groups/views/default/groups/sidebar/members.php b/mod/groups/views/default/groups/sidebar/members.php index 28111554f..7249ffbf4 100644 --- a/mod/groups/views/default/groups/sidebar/members.php +++ b/mod/groups/views/default/groups/sidebar/members.php @@ -21,7 +21,8 @@ $body = elgg_list_entities_from_relationship(array( 'inverse_relationship' => true, 'types' => 'user', 'limit' => $limit, - 'gallery' => true, + 'list_type' => 'gallery', + 'gallery_class' => 'elgg-gallery-users', )); $body .= "<div class='center mts'>$all_link</div>"; diff --git a/mod/groups/views/default/object/groupforumtopic.php b/mod/groups/views/default/object/groupforumtopic.php index 3a4decbe4..22589b84d 100644 --- a/mod/groups/views/default/object/groupforumtopic.php +++ b/mod/groups/views/default/object/groupforumtopic.php @@ -67,6 +67,7 @@ if ($full) { 'subtitle' => $subtitle, 'tags' => $tags, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); $info = elgg_view_image_block($poster_icon, $list_body); @@ -90,6 +91,7 @@ HTML; 'tags' => $tags, 'content' => $excerpt, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); echo elgg_view_image_block($poster_icon, $list_body); diff --git a/mod/groups/views/default/river/annotation/group_topic_post/reply.php b/mod/groups/views/default/river/annotation/group_topic_post/reply.php index 1999c8dd9..cc94fbd43 100644 --- a/mod/groups/views/default/river/annotation/group_topic_post/reply.php +++ b/mod/groups/views/default/river/annotation/group_topic_post/reply.php @@ -4,24 +4,9 @@ */ $object = $vars['item']->getObjectEntity(); $reply = $vars['item']->getAnnotation(); +$excerpt = elgg_get_excerpt($reply->value); -$url = $object->getURL(); -$title = $object->title; -$params = array( - 'href' => $object->getURL(), - 'text' => $title, -); -$object_link = elgg_view('output/url', $params); - -$type = $object->getType(); -$subtype = $object->getSubtype(); - -echo elgg_echo('groups:river:reply') . ' '; -echo $object_link; - -if ($reply) { - $excerpt = elgg_get_excerpt($reply->value); - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $excerpt, +));
\ No newline at end of file diff --git a/mod/groups/views/default/river/group/create.php b/mod/groups/views/default/river/group/create.php index a70f8b51d..cacb5ad3f 100644 --- a/mod/groups/views/default/river/group/create.php +++ b/mod/groups/views/default/river/group/create.php @@ -7,19 +7,7 @@ $object = $vars['item']->getObjectEntity(); $excerpt = strip_tags($object->description); $excerpt = elgg_get_excerpt($excerpt); -$params = array( - 'href' => $object->getURL(), - 'text' => $object->name, -); -$link = elgg_view('output/url', $params); - - -echo elgg_echo('groups:river:create'); - -echo " $link"; - -if ($excerpt) { - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $excerpt, +));
\ No newline at end of file diff --git a/mod/groups/views/default/river/object/groupforumtopic/create.php b/mod/groups/views/default/river/object/groupforumtopic/create.php index 466196921..80e7b09aa 100644 --- a/mod/groups/views/default/river/object/groupforumtopic/create.php +++ b/mod/groups/views/default/river/object/groupforumtopic/create.php @@ -7,36 +7,16 @@ $object = $vars['item']->getObjectEntity(); $excerpt = strip_tags($object->description); $excerpt = elgg_get_excerpt($excerpt); -$params = array( - 'href' => $object->getURL(), - 'text' => $object->title, -); -$link = elgg_view('output/url', $params); - -$group_string = ''; -$container = $object->getContainerEntity(); -if ($container instanceof ElggGroup) { - $params = array( - 'href' => $container->getURL(), - 'text' => $container->name, - ); - $group_link = elgg_view('output/url', $params); - $group_string = elgg_echo('river:ingroup', array($group_link)); -} - -echo elgg_echo('forumtopic:river:create'); - -echo " $link $group_string"; - -if ($excerpt) { - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} - -if (elgg_is_logged_in() && $container->canWriteToContainer()) { +$responses = ''; +if (elgg_is_logged_in() && $object->canAnnotate(0, 'group_topic_post')) { // inline comment form $form_vars = array('id' => "groups-reply-{$object->getGUID()}", 'class' => 'hidden'); $body_vars = array('entity' => $object, 'inline' => true); - echo elgg_view_form('discussion/reply/save', $form_vars, $body_vars); + $responses = elgg_view_form('discussion/reply/save', $form_vars, $body_vars); } + +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $excerpt, + 'responses' => $responses, +)); diff --git a/mod/groups/views/default/river/relationship/member/create.php b/mod/groups/views/default/river/relationship/member/create.php index 060826649..d1c4c3ed3 100644 --- a/mod/groups/views/default/river/relationship/member/create.php +++ b/mod/groups/views/default/river/relationship/member/create.php @@ -3,14 +3,6 @@ * Group join river view. */ -$object = $vars['item']->getObjectEntity(); - -$params = array( - 'href' => $object->getURL(), - 'text' => $object->name, -); -$link = elgg_view('output/url', $params); - -echo elgg_echo('groups:river:join'); - -echo " $link"; +echo elgg_view('river/item', array( + 'item' => $vars['item'], +)); diff --git a/mod/likes/start.php b/mod/likes/start.php index b2aa83260..d45fb96b3 100644 --- a/mod/likes/start.php +++ b/mod/likes/start.php @@ -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; } @@ -50,14 +63,27 @@ function likes_river_menu_setup($hook, $type, $return, $params) { $object = $item->getObjectEntity(); if (!elgg_in_context('widgets') && $item->annotation_id == 0) { if ($object->canAnnotate(0, 'likes')) { + // like button $options = array( 'name' => 'likes', 'href' => false, - 'text' => elgg_view('likes/display', array('entity' => $object)), + '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_count', + 'text' => $count, + 'href' => false, + 'priority' => 101, + ); + $return[] = ElggMenuItem::factory($options); + } } } } diff --git a/mod/likes/views/default/likes/display.php b/mod/likes/views/default/likes/button.php index 2dc50ddd0..383e1bb63 100644 --- a/mod/likes/views/default/likes/display.php +++ b/mod/likes/views/default/likes/button.php @@ -1,6 +1,6 @@ <?php /** - * Elgg likes display + * Elgg likes button * * @uses $vars['entity'] */ @@ -40,26 +40,3 @@ if (elgg_is_logged_in() && $vars['entity']->canAnnotate(0, 'likes')) { } echo $likes_button; - -$list = ''; -$num_of_likes = likes_count($vars['entity']); - -if ($num_of_likes) { - // display the number of likes - if ($num_of_likes == 1) { - $likes_string = elgg_echo('likes:userlikedthis', array($num_of_likes)); - } else { - $likes_string = elgg_echo('likes:userslikedthis', array($num_of_likes)); - } - $params = array( - 'text' => $likes_string, - 'title' => elgg_echo('likes:see'), - 'rel' => 'popup', - 'href' => "#likes-$guid" - ); - $list = elgg_view('output/url', $params); - $list .= "<div class='elgg-module elgg-module-popup elgg-likes-list hidden clearfix' id='likes-$guid'>"; - $list .= elgg_list_annotations(array('guid' => $guid, 'annotation_name' => 'likes', 'limit' => 99)); - $list .= "</div>"; - echo $list; -} diff --git a/mod/likes/views/default/likes/count.php b/mod/likes/views/default/likes/count.php new file mode 100644 index 000000000..bdc50bcd1 --- /dev/null +++ b/mod/likes/views/default/likes/count.php @@ -0,0 +1,31 @@ +<?php +/** + * Count of who has liked something + * + * @uses $vars['entity'] + */ + + +$list = ''; +$num_of_likes = likes_count($vars['entity']); +$guid = $vars['entity']->getGUID(); + +if ($num_of_likes) { + // display the number of likes + if ($num_of_likes == 1) { + $likes_string = elgg_echo('likes:userlikedthis', array($num_of_likes)); + } else { + $likes_string = elgg_echo('likes:userslikedthis', array($num_of_likes)); + } + $params = array( + 'text' => $likes_string, + 'title' => elgg_echo('likes:see'), + 'rel' => 'popup', + 'href' => "#likes-$guid" + ); + $list = elgg_view('output/url', $params); + $list .= "<div class='elgg-module elgg-module-popup elgg-likes-list hidden clearfix' id='likes-$guid'>"; + $list .= elgg_list_annotations(array('guid' => $guid, 'annotation_name' => 'likes', 'limit' => 99)); + $list .= "</div>"; + echo $list; +} diff --git a/mod/likes/views/default/likes/css.php b/mod/likes/views/default/likes/css.php index cb0334b7c..fabf54e46 100644 --- a/mod/likes/views/default/likes/css.php +++ b/mod/likes/views/default/likes/css.php @@ -11,3 +11,7 @@ width: 345px; position: absolute; } + +.elgg-menu .elgg-menu-item-likes-count { + margin-left: 3px; +} diff --git a/mod/likes/views/default/likes/js.php b/mod/likes/views/default/likes/js.php new file mode 100644 index 000000000..b7e000539 --- /dev/null +++ b/mod/likes/views/default/likes/js.php @@ -0,0 +1,26 @@ +<?php +/** + * Likes JavaScript extension for elgg.js + */ +?> + +/** + * Repositions the likes popup + * + * @param {String} hook 'getOptions' + * @param {String} type 'ui.popup' + * @param {Object} params An array of info about the target and source. + * @param {Object} options Options to pass to + * + * @return {Object} + */ +elgg.ui.likesPopupHandler = function(hook, type, params, options) { + if (params.target.hasClass('elgg-likes-list')) { + options.my = 'right bottom'; + options.at = 'left top'; + return options; + } + return null; +}; + +elgg.register_hook_handler('getOptions', 'ui.popup', elgg.ui.likesPopupHandler);
\ No newline at end of file diff --git a/mod/likes/views/default/river/annotation/likes/create.php b/mod/likes/views/default/river/annotation/likes/create.php index 463fe5049..0160bcc0b 100644 --- a/mod/likes/views/default/river/annotation/likes/create.php +++ b/mod/likes/views/default/river/annotation/likes/create.php @@ -5,22 +5,6 @@ * @todo not finished */ -$object = $vars['item']->getObjectEntity(); -$comment = $vars['item']->getAnnotation(); - -$url = $object->getURL(); -$title = $object->title; -if (!$title) { - $title = elgg_echo('untitled'); -} -$params = array( - 'href' => $object->getURL(), - 'text' => $title, -); -$object_link = elgg_view('output/url', $params); - -$type = $object->getType(); -$subtype = $object->getSubtype(); - -$type_string = elgg_echo("river:commented:$type:$subtype"); -echo elgg_echo('river:likes', array($type_string, $object_link)); +echo elgg_view('river/item', array( + 'item' => $vars['item'], +)); diff --git a/mod/logbrowser/views/default/logbrowser/form.php b/mod/logbrowser/views/default/logbrowser/form.php index d2476afac..d5cf9f6b8 100644 --- a/mod/logbrowser/views/default/logbrowser/form.php +++ b/mod/logbrowser/views/default/logbrowser/form.php @@ -59,9 +59,12 @@ $toggle_link = elgg_view('output/url', array( 'href' => '#log-browser-search-form', 'text' => elgg_echo('logbrowser:search'), - 'class' => 'elgg-toggler', + 'rel' => 'toggle', )); ?> + <p> + <?php echo $toggle_link; ?> + </p> <div id="log-browser-search-form" class="elgg-module elgg-module-inline hidden"> <div class="elgg-head"> <h3><?php echo elgg_echo('logbrowser:search'); ?></h3> @@ -70,7 +73,4 @@ <?php echo $wrappedform; ?> </div> </div> - <p> - <?php echo $toggle_link; ?> - </p> </div>
\ No newline at end of file diff --git a/mod/logrotate/views/default/settings/logrotate/edit.php b/mod/logrotate/views/default/settings/logrotate/edit.php index 32d59faa5..64c7bf743 100644 --- a/mod/logrotate/views/default/settings/logrotate/edit.php +++ b/mod/logrotate/views/default/settings/logrotate/edit.php @@ -36,7 +36,7 @@ if (!$time) { <?php echo elgg_view('input/pulldown', array( - 'internalname' => 'params[time]', + 'name' => 'params[time]', 'options_values' => array( 'weekly' => elgg_echo('logrotate:week'), 'monthly' => elgg_echo('logrotate:month'), diff --git a/mod/members/pages/members/search.php b/mod/members/pages/members/search.php index 39b54990e..94127768a 100644 --- a/mod/members/pages/members/search.php +++ b/mod/members/pages/members/search.php @@ -19,16 +19,16 @@ if ($vars['search_type'] == 'tag') { $users = $results['entities']; $content = elgg_view_entity_list($users, $count, $offset, $limit, false, false, true); } else { - $name = get_input('name'); + $name = sanitize_string(get_input('name')); $title = elgg_echo('members:title:searchname', array($name)); - global $CONFIG; + $db_prefix = elgg_get_config('dbprefix'); $params = array( 'type' => 'user', 'full_view' => false, - 'joins' => array("join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid"), - 'wheres' => array("(u.name like \"%{$name}%\" or u.username like \"%{$name}%\")"), + 'joins' => array("JOIN {$db_prefix}users_entity u ON e.guid=u.guid"), + 'wheres' => array("(u.name LIKE \"%{$name}%\" OR u.username LIKE \"%{$name}%\")"), ); $content .= elgg_list_entities($params); } diff --git a/mod/messageboard/languages/en.php b/mod/messageboard/languages/en.php index d8ccbdeee..9027eb650 100644 --- a/mod/messageboard/languages/en.php +++ b/mod/messageboard/languages/en.php @@ -26,10 +26,7 @@ $english = array( /** * Message board widget river */ - 'messageboard:river:added' => "posted on", - 'messageboard:river:user' => "%s's", - 'messageboard:river:messageboard' => "message board", - + 'river:messageboard:user:default' => "%s posted on %s's message board", /** * Status messages diff --git a/mod/messageboard/pages/messageboard/owner.php b/mod/messageboard/pages/messageboard/owner.php index 58021c29e..241ad64f2 100644 --- a/mod/messageboard/pages/messageboard/owner.php +++ b/mod/messageboard/pages/messageboard/owner.php @@ -16,7 +16,8 @@ elgg_push_breadcrumb($page_owner->name, $page_owner->getURL()); $options = array( 'annotations_name' => 'messageboard', 'guid' => $page_owner_guid, - 'limit' => 10 + 'limit' => 10, + 'reverse_order_by' => true, ); if ($history_user) { diff --git a/mod/messageboard/views/default/forms/messageboard/add.php b/mod/messageboard/views/default/forms/messageboard/add.php index 87bec9b20..b219fd800 100644 --- a/mod/messageboard/views/default/forms/messageboard/add.php +++ b/mod/messageboard/views/default/forms/messageboard/add.php @@ -7,7 +7,7 @@ echo elgg_view('input/plaintext', array( 'name' => 'message_content', - 'class' => 'messageboard-input' + 'class' => 'messageboard-input mbs' )); echo elgg_view('input/hidden', array( diff --git a/mod/messageboard/views/default/river/object/messageboard/create.php b/mod/messageboard/views/default/river/object/messageboard/create.php index 0268930bf..975598805 100644 --- a/mod/messageboard/views/default/river/object/messageboard/create.php +++ b/mod/messageboard/views/default/river/object/messageboard/create.php @@ -3,22 +3,9 @@ * Messageboard river view */ -$performed_by = $vars['item']->getSubjectEntity(); -$performed_on = $vars['item']->getObjectEntity(); +$messageboard = $vars['item']->getAnnotation(); -$comment = $vars['item']->getAnnotation(); - -$link = elgg_view('output/url', array( - 'href' => $performed_on->getURL(), - 'text' => elgg_echo('messageboard:river:user', array($performed_on->name)), +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $messageboard->value, )); - -echo elgg_echo("messageboard:river:added"); -echo " $link "; -echo elgg_echo("messageboard:river:messageboard"); - -if ($comment) { - echo '<div class="elgg-river-content">'; - echo elgg_get_excerpt($comment->value); - echo '</div>'; -} diff --git a/mod/messages/pages/messages/read.php b/mod/messages/pages/messages/read.php index c5d1d4941..9bedbd08a 100644 --- a/mod/messages/pages/messages/read.php +++ b/mod/messages/pages/messages/read.php @@ -27,11 +27,11 @@ if ($page_owner->getGUID() == $message->toId) { elgg_push_breadcrumb($title); $buttons = ''; -$content = elgg_view_entity($message, true); +$content = elgg_view_entity($message, array('full_view' => true)); if ($inbox) { $form_params = array( 'id' => 'messages-reply-form', - 'class' => 'hidden', + 'class' => 'hidden mtl', 'action' => 'action/messages/send', ); $body_params = array('message' => $message); diff --git a/mod/pages/languages/en.php b/mod/pages/languages/en.php index f590afb9c..1c6d0318c 100644 --- a/mod/pages/languages/en.php +++ b/mod/pages/languages/en.php @@ -38,13 +38,12 @@ $english = array( * River **/ - 'pages:river:create' => 'created the page', - 'pages:river:created' => "%s wrote", - 'pages:river:updated' => "%s updated", - 'pages:river:posted' => "%s posted", - 'pages:river:update' => "a page titled", - 'river:commented:object:page' => 'the page', - 'river:commented:object:page_top' => 'the page', + 'river:create:object:page' => '%s created a page %s', + 'river:create:object:page_top' => '%s created a page %s', + 'river:update:object:page' => '%s updated a page %s', + 'river:update:object:page_top' => '%s updated a page %s', + 'river:comment:object:page' => '%s commented on a page titled %s', + 'river:comment:object:page_top' => '%s commented on a page titled %s', /** * Form fields diff --git a/mod/pages/pages/pages/view.php b/mod/pages/pages/pages/view.php index b73bc985c..06064d993 100644 --- a/mod/pages/pages/pages/view.php +++ b/mod/pages/pages/pages/view.php @@ -29,7 +29,7 @@ if (elgg_instanceof($container, 'group')) { pages_prepare_parent_breadcrumbs($page); elgg_push_breadcrumb($title); -$content = elgg_view_entity($page, true); +$content = elgg_view_entity($page, array('full_view' => true)); $content .= elgg_view_comments($page); $buttons = ''; diff --git a/mod/pages/views/default/object/page_top.php b/mod/pages/views/default/object/page_top.php index 2ad44e38c..8ba9fc298 100644 --- a/mod/pages/views/default/object/page_top.php +++ b/mod/pages/views/default/object/page_top.php @@ -82,6 +82,7 @@ if ($full) { 'subtitle' => $subtitle, 'tags' => $tags, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); $info = elgg_view_image_block($page_icon, $list_body); @@ -103,6 +104,7 @@ HTML; 'tags' => $tags, 'content' => $excerpt, ); + $params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); echo elgg_view_image_block($page_icon, $list_body); diff --git a/mod/pages/views/default/pages/group_module.php b/mod/pages/views/default/pages/group_module.php index 1d3437e18..7e2656ca3 100644 --- a/mod/pages/views/default/pages/group_module.php +++ b/mod/pages/views/default/pages/group_module.php @@ -17,9 +17,6 @@ $all_link = elgg_view('output/url', array( 'text' => elgg_echo('link:view:all'), )); -$header = "<span class=\"groups-widget-viewall\">$all_link</span>"; -$header .= '<h3>' . elgg_echo('pages:group') . '</h3>'; - elgg_push_context('widgets'); $options = array( @@ -37,12 +34,14 @@ if (!$content) { $content = '<p>' . elgg_echo('pages:none') . '</p>'; } -if ($group->canWriteToContainer()) { - $new_link = elgg_view('output/url', array( - 'href' => "pages/add/$group->guid", - 'text' => elgg_echo('pages:add'), - )); - $content .= "<span class='elgg-widget-more'>$new_link</span>"; -} +$new_link = elgg_view('output/url', array( + 'href' => "pages/add/$group->guid", + 'text' => elgg_echo('pages:add'), +)); -echo elgg_view_module('info', '', $content, array('header' => $header)); +echo elgg_view('groups/profile/module', array( + 'title' => elgg_echo('pages:group'), + 'content' => $content, + 'all_link' => $all_link, + 'add_link' => $new_link, +)); diff --git a/mod/pages/views/default/river/object/page/create.php b/mod/pages/views/default/river/object/page/create.php index 032046063..ca15ddea7 100644 --- a/mod/pages/views/default/river/object/page/create.php +++ b/mod/pages/views/default/river/object/page/create.php @@ -7,29 +7,7 @@ $object = $vars['item']->getObjectEntity(); $excerpt = strip_tags($object->description); $excerpt = elgg_get_excerpt($excerpt); -$params = array( - 'href' => $object->getURL(), - 'text' => $object->title, -); -$link = elgg_view('output/url', $params); - -$group_string = ''; -$container = $object->getContainerEntity(); -if ($container instanceof ElggGroup) { - $params = array( - 'href' => $container->getURL(), - 'text' => $container->name, - ); - $group_link = elgg_view('output/url', $params); - $group_string = elgg_echo('river:ingroup', array($group_link)); -} - -echo elgg_echo('pages:river:create'); - -echo " $link $group_string"; - -if ($excerpt) { - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $excerpt, +));
\ No newline at end of file diff --git a/mod/profile/views/default/profile/owner_block.php b/mod/profile/views/default/profile/owner_block.php index 48d7ff24f..5a65a3a26 100644 --- a/mod/profile/views/default/profile/owner_block.php +++ b/mod/profile/views/default/profile/owner_block.php @@ -35,7 +35,7 @@ if (elgg_is_admin_logged_in() && elgg_get_logged_in_user_guid() != elgg_get_page $text = elgg_echo('admin:options'); $admin_links = '<ul class="profile-admin-menu-wrapper">'; - $admin_links .= "<li><a class=\"elgg-toggler\" href=\"#profile-menu-admin\">$text…</a>"; + $admin_links .= "<li><a rel=\"toggle\" href=\"#profile-menu-admin\">$text…</a>"; $admin_links .= '<ul class="profile-admin-menu" id="profile-menu-admin">'; foreach ($admin as $menu_item) { $admin_links .= elgg_view('navigation/menu/elements/item', array('item' => $menu_item)); diff --git a/mod/reportedcontent/views/default/object/reported_content.php b/mod/reportedcontent/views/default/object/reported_content.php index b8c443450..6bcbf6e5d 100644 --- a/mod/reportedcontent/views/default/object/reported_content.php +++ b/mod/reportedcontent/views/default/object/reported_content.php @@ -58,7 +58,7 @@ if ($report->state == 'archived') { <?php echo elgg_view('output/url', array( 'href' => "#report-$report->guid", 'text' => elgg_echo('reportedcontent:moreinfo'), - 'class' => "elgg-toggler", + 'rel' => "toggle", )); ?> </p> diff --git a/mod/search/views/default/search/entity.php b/mod/search/views/default/search/entity.php index 2193a70d8..e04d08836 100644 --- a/mod/search/views/default/search/entity.php +++ b/mod/search/views/default/search/entity.php @@ -27,7 +27,7 @@ if (!$icon) { } else { // display a generic icon if no owner, though there will probably be // other problems if the owner can't be found. - $icon = elgg_view_entity($entity, 'tiny'); + $icon = elgg_view_entity_icon($entity, 'tiny'); } } diff --git a/mod/search/views/default/search/list.php b/mod/search/views/default/search/list.php index c5afaaa86..11860c094 100644 --- a/mod/search/views/default/search/list.php +++ b/mod/search/views/default/search/list.php @@ -82,7 +82,7 @@ $more = ($more_check > 0) ? $more_check : 0; if ($more) { $title_key = ($more == 1) ? 'comment' : 'comments'; $more_str = elgg_echo('search:more', array($count, $type_str)); - $more_link = "<li class='elgg-list-item'><a href=\"$url\">$more_str</a></li>"; + $more_link = "<li class='elgg-item'><a href=\"$url\">$more_str</a></li>"; } else { $more_link = ''; } @@ -98,7 +98,7 @@ if ($view) { $body .= '<ul class="elgg-list search-list">'; foreach ($entities as $entity) { $id = "elgg-{$entity->getType()}-{$entity->getGUID()}"; - $body .= "<li id=\"$id\" class=\"elgg-list-item\">"; + $body .= "<li id=\"$id\" class=\"elgg-item\">"; $body .= elgg_view($view, array( 'entity' => $entity, 'params' => $vars['params'], diff --git a/mod/thewire/languages/en.php b/mod/thewire/languages/en.php index 1b9d71c56..9716fc060 100644 --- a/mod/thewire/languages/en.php +++ b/mod/thewire/languages/en.php @@ -13,7 +13,7 @@ $english = array( 'thewire:user' => "%s's wire posts", 'thewire:friends' => "Friends' wire posts", 'thewire:reply' => "Reply", - 'thewire:replying' => "Replying to %s who wrote", + 'thewire:replying' => "Replying to %s (@%s) who wrote", 'thewire:thread' => "Thread", 'thewire:charleft' => "characters remaining", 'thewire:tags' => "Wire posts tagged with '%s'", @@ -29,7 +29,8 @@ $english = array( /** * The wire river */ - 'thewire:river:create' => "posted to the wire", + 'river:create:object:thewire' => "%s posted to the %s", + 'thewire:wire' => 'wire', /** * Wire widget diff --git a/mod/thewire/start.php b/mod/thewire/start.php index 0e6bd7794..9d3993b6f 100644 --- a/mod/thewire/start.php +++ b/mod/thewire/start.php @@ -278,6 +278,16 @@ function thewire_save_post($text, $userid, $access_id, $parent_guid = 0, $method if ($guid) { add_to_river('river/object/thewire/create', 'create', $post->owner_guid, $post->guid); + + // let other plugins know we are setting a user status + $params = array( + 'entity' => $post, + 'user' => $post->getOwnerEntity(), + 'message' => $post->description, + 'url' => $post->getURL(), + 'origin' => 'thewire', + ); + elgg_trigger_plugin_hook('status', 'user', $params); } return $guid; @@ -401,7 +411,7 @@ function thewire_setup_entity_menu_items($hook, $type, $value, $params) { 'text' => elgg_echo('thewire:previous'), 'href' => "thewire/previous/$entity->guid", 'priority' => 160, - 'class' => 'thewire-previous', + 'link_class' => 'thewire-previous', 'title' => elgg_echo('thewire:previous:help'), ); $value[] = ElggMenuItem::factory($options); diff --git a/mod/thewire/views/default/js/thewire.php b/mod/thewire/views/default/js/thewire.php index 1eda90bee..d9bf6d10e 100644 --- a/mod/thewire/views/default/js/thewire.php +++ b/mod/thewire/views/default/js/thewire.php @@ -30,7 +30,7 @@ elgg.thewire.init = function() { */ elgg.thewire.textCounter = function(textarea, status, limit) { - var remaining_chars = limit - textarea.value.length; + var remaining_chars = limit - $(textarea).val().length; status.html(remaining_chars); if (remaining_chars < 0) { @@ -83,4 +83,4 @@ elgg.thewire.viewPrevious = function(event) { event.preventDefault(); } -elgg.register_hook_handler('init', 'system', elgg.thewire.init);
\ No newline at end of file +elgg.register_hook_handler('init', 'system', elgg.thewire.init); diff --git a/mod/thewire/views/default/object/thewire.php b/mod/thewire/views/default/object/thewire.php index 3ae347711..2727df60d 100644 --- a/mod/thewire/views/default/object/thewire.php +++ b/mod/thewire/views/default/object/thewire.php @@ -51,6 +51,7 @@ $params = array( 'content' => thewire_filter($post->description), 'tags' => false, ); +$params = $params + $vars; $list_body = elgg_view('object/elements/summary', $params); echo elgg_view_image_block($owner_icon, $list_body); diff --git a/mod/thewire/views/default/river/object/thewire/create.php b/mod/thewire/views/default/river/object/thewire/create.php index d4dac38ee..c3c434858 100644 --- a/mod/thewire/views/default/river/object/thewire/create.php +++ b/mod/thewire/views/default/river/object/thewire/create.php @@ -7,18 +7,23 @@ $object = $vars['item']->getObjectEntity(); $excerpt = strip_tags($object->description); $excerpt = thewire_filter($excerpt); -$params = array( - 'href' => $object->getURL(), - 'text' => $object->title, -); -$link = elgg_view('output/url', $params); +$subject = $vars['item']->getSubjectEntity(); +$subject_link = elgg_view('output/url', array( + 'href' => $subject->getURL(), + 'text' => $subject->name, + 'class' => 'elgg-river-subject', +)); -echo elgg_echo('thewire:river:create'); +$object_link = elgg_view('output/url', array( + 'href' => "thewire/owner/$subject->username", + 'text' => elgg_echo('thewire:wire'), + 'class' => 'elgg-river-object', +)); -echo " $link"; +$summary = elgg_echo("river:create:object:thewire", array($subject_link, $object_link)); -if ($excerpt) { - echo '<div class="elgg-river-content">'; - echo $excerpt; - echo '</div>'; -} +echo elgg_view('river/item', array( + 'item' => $vars['item'], + 'message' => $excerpt, + 'summary' => $summary, +));
\ No newline at end of file diff --git a/mod/thewire/views/default/thewire/reply.php b/mod/thewire/views/default/thewire/reply.php index 3794e1454..341b691b1 100644 --- a/mod/thewire/views/default/thewire/reply.php +++ b/mod/thewire/views/default/thewire/reply.php @@ -5,7 +5,10 @@ $post = $vars['post']; $poster = $post->getOwnerEntity(); - +$poster_details = array( + htmlspecialchars($poster->name, ENT_QUOTES, 'UTF-8'), + htmlspecialchars($poster->username, ENT_QUOTES, 'UTF-8'), +); ?> -<b><?php echo elgg_echo('thewire:replying', array($poster->name)); ?>: </b> +<b><?php echo elgg_echo('thewire:replying', $poster_details); ?>: </b> <?php echo $post->description;
\ No newline at end of file diff --git a/mod/twitter/views/default/twitter/css.php b/mod/twitter/views/default/twitter/css.php index cb58e8fb1..eb0cda98a 100644 --- a/mod/twitter/views/default/twitter/css.php +++ b/mod/twitter/views/default/twitter/css.php @@ -54,7 +54,7 @@ p.twitter_username .input-text { padding:2px; margin:0 0 5px 0; } -#twitter_widget li a { +#twitter_widget li > a { display:block; margin:0 0 0 4px; } diff --git a/mod/twitter_api/graphics/sign-in-with-twitter-d.png b/mod/twitter_api/graphics/sign-in-with-twitter-d.png Binary files differnew file mode 100644 index 000000000..b49a0ba59 --- /dev/null +++ b/mod/twitter_api/graphics/sign-in-with-twitter-d.png diff --git a/mod/twitter_api/graphics/sign-in-with-twitter-l.png b/mod/twitter_api/graphics/sign-in-with-twitter-l.png Binary files differnew file mode 100644 index 000000000..834d43cfd --- /dev/null +++ b/mod/twitter_api/graphics/sign-in-with-twitter-l.png diff --git a/mod/twitter_api/languages/en.php b/mod/twitter_api/languages/en.php index 940a49d9b..3a422b043 100644 --- a/mod/twitter_api/languages/en.php +++ b/mod/twitter_api/languages/en.php @@ -11,7 +11,7 @@ $english = array( 'twitter_api:consumer_key' => 'Consumer Key', 'twitter_api:consumer_secret' => 'Consumer Secret', - 'twitter_api:settings:instructions' => 'You must obtain a consumer key and secret from <a href="https://twitter.com/oauth_clients" target="_blank">Twitter</a>. Most of the fields are self explanatory, the one piece of data you will need is the callback url which takes the form http://[yoursite]/action/twitterlogin/return - [yoursite] is the url of your Elgg network.', + 'twitter_api:settings:instructions' => 'You must obtain a consumer key and secret from <a href="https://dev.twitter.com/apps/new" target="_blank">Twitter</a>. Fill out the new app application. Select "Browser" as the application type and "Read & Write" for the access type. The callback url is %stwitter_api/authorize', 'twitter_api:usersettings:description' => "Link your %s account with Twitter.", 'twitter_api:usersettings:request' => "You must first <a href=\"%s\">authorize</a> %s to access your Twitter account.", diff --git a/mod/twitter_api/lib/twitter_api.php b/mod/twitter_api/lib/twitter_api.php index 0621c2b13..81aef38fb 100644 --- a/mod/twitter_api/lib/twitter_api.php +++ b/mod/twitter_api/lib/twitter_api.php @@ -24,9 +24,9 @@ function twitter_api_allow_sign_on_with_twitter() { } /** - * Forwards + * Forwards the user to twitter to authenticate * - * @todo what is this? + * This includes the login URL as the callback */ function twitter_api_forward() { // sanity check @@ -41,7 +41,18 @@ function twitter_api_forward() { } /** - * Log in a user with twitter. + * Log in a user referred from Twitter's OAuth API + * + * If the user has already linked their account with Twitter, it is a seamless + * login. If this is a first time login (or a user from deprecated twitter login + * plugin), we create a new account (update the account). + * + * If a plugin wants to be notified when someone logs in with twitter or a new + * twitter user signs up, register for the standard login or create user events + * and check for 'twitter_api' context. + * + * The user has to be redirected from Twitter for this to work. It depends on + * the Twitter OAuth data. */ function twitter_api_login() { @@ -64,32 +75,26 @@ function twitter_api_login() { 'access_key' => $token['oauth_token'], 'access_secret' => $token['oauth_token_secret'], ), - 'limit' => 0 + 'limit' => 0, ); $users = elgg_get_entities_from_plugin_user_settings($options); if ($users) { if (count($users) == 1 && login($users[0])) { - system_message(elgg_echo('twitter_api:login:success')); - - // trigger login hook - elgg_trigger_plugin_hook('login', 'twitter_api', array('user' => $users[0])); + system_message(elgg_echo('twitter_api:login:success')); } else { - system_message(elgg_echo('twitter_api:login:error')); + register_error(elgg_echo('twitter_api:login:error')); } - - forward(); - } else { - // need Twitter account credentials - elgg_load_library('twitter_oauth'); + forward(elgg_get_site_url()); + } else { $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); $api = new TwitterOAuth($consumer_key, $consumer_secret, $token['oauth_token'], $token['oauth_token_secret']); $twitter = $api->get('account/verify_credentials'); - // backward compatibility for stalled-development Twitter Login plugin + // backward compatibility for deprecated Twitter Login plugin $user = FALSE; if ($twitter_user = get_user_by_username($token['screen_name'])) { if (($screen_name = $twitter_user->twitter_screen_name) && ($screen_name == $token['screen_name'])) { @@ -101,47 +106,9 @@ function twitter_api_login() { // create new user if (!$user) { - // check new registration allowed - if (!twitter_api_allow_new_users_with_twitter()) { - register_error(elgg_echo('registerdisabled')); - forward(); - } - - // trigger a hook for plugin authors to intercept - if (!elgg_trigger_plugin_hook('new_twitter_user', 'twitter_service', array('account' => $twitter), TRUE)) { - // halt execution - register_error(elgg_echo('twitter_api:login:error')); - forward(); - } - - // Elgg-ify Twitter credentials - $username = $twitter->screen_name; - while (get_user_by_username($username)) { - $username = $twitter->screen_name . '_' . rand(1000, 9999); - } - - $password = generate_random_cleartext_password(); - $name = $twitter->name; - - $user = new ElggUser(); - $user->username = $username; - $user->name = $name; - $user->access_id = ACCESS_PUBLIC; - $user->salt = generate_random_cleartext_password(); - $user->password = generate_user_password($user, $password); - $user->owner_guid = 0; - $user->container_guid = 0; - - if (!$user->save()) { - register_error(elgg_echo('registerbad')); - forward(); - } - - // @todo require email address? - + $user = twitter_api_create_user($twitter); $site_name = elgg_get_site_entity()->name; system_message(elgg_echo('twitter_api:login:email', array($site_name))); - $forward = "settings/user/{$user->username}"; } @@ -156,9 +123,6 @@ function twitter_api_login() { // login new user if (login($user)) { system_message(elgg_echo('twitter_api:login:success')); - - // trigger login hook for new user - elgg_trigger_plugin_hook('first_login', 'twitter_api', array('user' => $user)); } else { system_message(elgg_echo('twitter_api:login:error')); } @@ -172,10 +136,50 @@ function twitter_api_login() { } /** + * Create a new user from Twitter information + * + * @param object $twitter Twitter OAuth response + * @return ElggUser + */ +function twitter_api_create_user($twitter) { + // check new registration allowed + if (!twitter_api_allow_new_users_with_twitter()) { + register_error(elgg_echo('registerdisabled')); + forward(); + } + + // Elgg-ify Twitter credentials + $username = $twitter->screen_name; + while (get_user_by_username($username)) { + // @todo I guess we just hope this is good enough + $username = $twitter->screen_name . '_' . rand(1000, 9999); + } + + $password = generate_random_cleartext_password(); + $name = $twitter->name; + + $user = new ElggUser(); + $user->username = $username; + $user->name = $name; + $user->access_id = ACCESS_PUBLIC; + $user->salt = generate_random_cleartext_password(); + $user->password = generate_user_password($user, $password); + $user->owner_guid = 0; + $user->container_guid = 0; + + if (!$user->save()) { + register_error(elgg_echo('registerbad')); + forward(); + } + + return $user; +} + +/** * Pull in the latest avatar from twitter. * - * @param unknown_type $user - * @param unknown_type $file_location + * @param ElggUser $user + * @param string $file_location */ function twitter_api_update_user_avatar($user, $file_location) { // twitter's images have a few suffixes: @@ -213,8 +217,6 @@ function twitter_api_update_user_avatar($user, $file_location) { // update user's icontime $user->icontime = time(); - - return TRUE; } /** @@ -243,7 +245,6 @@ function twitter_api_authorize() { ), 'limit' => 0 ); - $users = elgg_get_entities_from_plugin_user_settings($options); if ($users) { @@ -281,13 +282,12 @@ function twitter_api_revoke() { } /** - * Returns the url to authorize a user. + * Gets the url to authorize a user. * * @param string $callback The callback URL */ -function twitter_api_get_authorize_url($callback = NULL) { +function twitter_api_get_authorize_url($callback = NULL, $login = true) { global $SESSION; - elgg_load_library('twitter_oauth'); $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); @@ -302,7 +302,7 @@ function twitter_api_get_authorize_url($callback = NULL) { 'oauth_token_secret' => $token['oauth_token_secret'], ); - return $twitter->getAuthorizeURL($token['oauth_token']); + return $twitter->getAuthorizeURL($token['oauth_token'], $login); } /** @@ -312,7 +312,6 @@ function twitter_api_get_authorize_url($callback = NULL) { */ function twitter_api_get_access_token($oauth_verifier = FALSE) { global $SESSION; - elgg_load_library('twitter_oauth'); $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); diff --git a/mod/twitter_api/start.php b/mod/twitter_api/start.php index 8a49db719..0c71104b5 100644 --- a/mod/twitter_api/start.php +++ b/mod/twitter_api/start.php @@ -12,14 +12,14 @@ function twitter_api_init() { // require libraries $base = elgg_get_plugins_path() . 'twitter_api'; - elgg_register_library('twitter_oauth', "$base/vendors/twitteroauth/twitterOAuth.php"); + elgg_register_class('TwitterOAuth', "$base/vendors/twitteroauth/twitterOAuth.php"); elgg_register_library('twitter_api', "$base/lib/twitter_api.php"); - elgg_load_library('twitter_api'); // extend site views - elgg_extend_view('metatags', 'twitter_api/metatags'); - elgg_extend_view('css', 'twitter_api/css'); + //elgg_extend_view('metatags', 'twitter_api/metatags'); + elgg_extend_view('css/elgg', 'twitter_api/css'); + elgg_extend_view('css/admin', 'twitter_api/css'); // sign on with twitter if (twitter_api_allow_sign_on_with_twitter()) { @@ -34,14 +34,14 @@ function twitter_api_init() { // register Walled Garden public pages elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'twitter_api_public_pages'); - // allow plugin authors to hook into this service - elgg_register_plugin_hook_handler('tweet', 'twitter_service', 'twitter_api_tweet'); + // push status messages to twitter + elgg_register_plugin_hook_handler('status', 'user', 'twitter_api_tweet'); } /** * Handles old pg/twitterservice/ handler * - * @param array$page + * @param array $page */ function twitter_api_pagehandler_deprecated($page) { $url = elgg_get_site_url() . 'pg/twitter_api/authorize'; @@ -55,7 +55,7 @@ function twitter_api_pagehandler_deprecated($page) { /** * Serves pages for twitter. * - * @param array$page + * @param array $page */ function twitter_api_pagehandler($page) { if (!isset($page[0])) { @@ -82,53 +82,48 @@ function twitter_api_pagehandler($page) { } /** - * Push a tweet to twitter. + * Push a status update to twitter. * - * @param unknown_type $hook - * @param unknown_type $entity_type - * @param unknown_type $returnvalue - * @param unknown_type $params + * @param string $hook + * @param string $type + * @param null $returnvalue + * @param array $params */ -function twitter_api_tweet($hook, $entity_type, $returnvalue, $params) { - static $plugins; - if (!$plugins) { - $plugins = elgg_trigger_plugin_hook('plugin_list', 'twitter_service', NULL, array()); - } +function twitter_api_tweet($hook, $type, $returnvalue, $params) { - // ensure valid plugin - if (!in_array($params['plugin'], $plugins)) { - return NULL; + if (!elgg_instanceof($params['user'])) { + return; } + // @todo - allow admin to select origins? + // check admin settings $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); if (!($consumer_key && $consumer_secret)) { - return NULL; + return; } // check user settings - $user_id = elgg_get_logged_in_user_guid(); + $user_id = $params['user']->getGUID(); $access_key = elgg_get_plugin_user_setting('access_key', $user_id, 'twitter_api'); $access_secret = elgg_get_plugin_user_setting('access_secret', $user_id, 'twitter_api'); if (!($access_key && $access_secret)) { - return NULL; + return; } // send tweet $api = new TwitterOAuth($consumer_key, $consumer_secret, $access_key, $access_secret); $response = $api->post('statuses/update', array('status' => $params['message'])); - - return TRUE; } /** - * Return tweets for a user. + * Get tweets for a user. * - * @param int $user_id The Elgg user GUID + * @param int $user_id The Elgg user GUID * @param array $options */ -function twitter_api_fetch_tweets($user_guid, $options=array()) { +function twitter_api_fetch_tweets($user_guid, $options = array()) { // check admin settings $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api'); $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api'); @@ -151,10 +146,10 @@ function twitter_api_fetch_tweets($user_guid, $options=array()) { /** * Register as public pages for walled garden. * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $return_value - * @param unknown_type $params + * @param string $hook + * @param string $type + * @param array $return_value + * @param array $params */ function twitter_api_public_pages($hook, $type, $return_value, $params) { $return_value[] = 'twitter_api/forward'; diff --git a/mod/twitter_api/views/default/settings/twitter_api/edit.php b/mod/twitter_api/views/default/settings/twitter_api/edit.php index 9deac3989..4e52a5c9d 100644 --- a/mod/twitter_api/views/default/settings/twitter_api/edit.php +++ b/mod/twitter_api/views/default/settings/twitter_api/edit.php @@ -1,8 +1,9 @@ <?php /** - * + * Twitter API plugin settings */ -$insert_view = elgg_view('twittersettings/extend'); + +$instructions = elgg_echo('twitter_api:settings:instructions', array(elgg_get_site_url())); $consumer_key_string = elgg_echo('twitter_api:consumer_key'); $consumer_key_view = elgg_view('input/text', array( @@ -15,7 +16,7 @@ $consumer_secret_string = elgg_echo('twitter_api:consumer_secret'); $consumer_secret_view = elgg_view('input/text', array( 'name' => 'params[consumer_secret]', 'value' => $vars['entity']->consumer_secret, - 'class' => 'text_input', + 'class' => 'text_input twitter-secret', )); $sign_on_with_twitter_string = elgg_echo('twitter_api:login'); @@ -39,9 +40,9 @@ $new_users_with_twitter_view = elgg_view('input/dropdown', array( )); $settings = <<<__HTML -<div>$insert_view</div> -<div>$consumer_key_string $consumer_key_view</div> -<div>$consumer_secret_string $consumer_secret_view</div> +<div class="elgg-instructs mtm"><p>$instructions</p></div> +<div><label>$consumer_key_string</label><br /> $consumer_key_view</div> +<div><label>$consumer_secret_string</label><br /> $consumer_secret_view</div> <div>$sign_on_with_twitter_string $sign_on_with_twitter_view</div> <div>$new_users_with_twitter $new_users_with_twitter_view</div> __HTML; diff --git a/mod/twitter_api/views/default/twitter_api/css.php b/mod/twitter_api/views/default/twitter_api/css.php index 140ce6a52..04bbed668 100644 --- a/mod/twitter_api/views/default/twitter_api/css.php +++ b/mod/twitter_api/views/default/twitter_api/css.php @@ -4,9 +4,10 @@ */ ?> -#twitter_api_site_settings .text_input { - width: 350px; -} #login_with_twitter { padding: 10px 0 0 0; } + +.twitter-secret { + width: 400px; +}
\ No newline at end of file diff --git a/mod/twitter_api/views/default/twitter_api/login.php b/mod/twitter_api/views/default/twitter_api/login.php index d0aca87ac..17bd76d56 100644 --- a/mod/twitter_api/views/default/twitter_api/login.php +++ b/mod/twitter_api/views/default/twitter_api/login.php @@ -1,10 +1,10 @@ <?php /** - * + * Extension of login form for Twitter sign in */ $url = elgg_get_site_url() . 'twitter_api/forward'; -$img_url = elgg_get_site_url() . 'mod/twitter_api/graphics/sign_in_with_twitter.gif'; +$img_url = elgg_get_site_url() . 'mod/twitter_api/graphics/sign-in-with-twitter-d.png'; $login = <<<__HTML <div id="login_with_twitter"> diff --git a/mod/twitter_api/views/default/usersettings/twitter_api/edit.php b/mod/twitter_api/views/default/usersettings/twitter_api/edit.php index 77dd5cc5d..0898087ca 100644 --- a/mod/twitter_api/views/default/usersettings/twitter_api/edit.php +++ b/mod/twitter_api/views/default/usersettings/twitter_api/edit.php @@ -1,6 +1,6 @@ <?php /** - * + * User settings for Twitter API */ $user_id = elgg_get_logged_in_user_guid(); @@ -13,7 +13,7 @@ echo '<div>' . elgg_echo('twitter_api:usersettings:description', array($site_nam if (!$access_key || !$access_secret) { // send user off to validate account - $request_link = twitter_api_get_authorize_url(); + $request_link = twitter_api_get_authorize_url(null, false); echo '<div>' . elgg_echo('twitter_api:usersettings:request', array($request_link, $site_name)) . '</div>'; } else { $url = elgg_get_site_url() . "twitter_api/revoke"; |