diff options
Diffstat (limited to 'mod/thewire')
31 files changed, 1079 insertions, 838 deletions
diff --git a/mod/thewire/actions/add.php b/mod/thewire/actions/add.php index f32f7e555..6b3d8d5ba 100644 --- a/mod/thewire/actions/add.php +++ b/mod/thewire/actions/add.php @@ -1,33 +1,34 @@ -<?php
-/**
- * Action for adding a wire post
- *
- */
-
-// Get input data
-$body = get_input('body', '', false); // don't filter since we strip and filter escapes some characters
-$access_id = ACCESS_PUBLIC;
-$method = 'site';
-$parent_guid = (int) get_input('parent_guid');
-
-// make sure the post isn't blank
-if (empty($body)) {
- register_error(elgg_echo("thewire:blank"));
- forward(REFERER);
-}
-
-$guid = thewire_save_post($body, get_loggedin_userid(), $access_id, $parent_guid, $method);
-if (!$guid) {
- register_error(elgg_echo("thewire:error"));
- forward(REFERER);
-}
-
-// Send response to original poster if not already registered to receive notification
-if ($parent_guid) {
- thewire_send_response_notification($guid, $parent_guid, $user);
- $parent = get_entity($parent_guid);
- forward("pg/thewire/thread/$parent->wire_thread");
-}
-
-system_message(elgg_echo("thewire:posted"));
-forward(REFERER);
+<?php +/** + * Action for adding a wire post + * + */ + +// don't filter since we strip and filter escapes some characters +$body = get_input('body', '', false); + +$access_id = ACCESS_PUBLIC; +$method = 'site'; +$parent_guid = (int) get_input('parent_guid'); + +// make sure the post isn't blank +if (empty($body)) { + register_error(elgg_echo("thewire:blank")); + forward(REFERER); +} + +$guid = thewire_save_post($body, elgg_get_logged_in_user_guid(), $access_id, $parent_guid, $method); +if (!$guid) { + register_error(elgg_echo("thewire:error")); + forward(REFERER); +} + +// Send response to original poster if not already registered to receive notification +if ($parent_guid) { + thewire_send_response_notification($guid, $parent_guid, $user); + $parent = get_entity($parent_guid); + forward("thewire/thread/$parent->wire_thread"); +} + +system_message(elgg_echo("thewire:posted")); +forward(REFERER); diff --git a/mod/thewire/actions/delete.php b/mod/thewire/actions/delete.php index 7758b4b03..38355d25e 100644 --- a/mod/thewire/actions/delete.php +++ b/mod/thewire/actions/delete.php @@ -1,39 +1,39 @@ -<?php
-/**
- * Action for deleting a wire post
- *
- */
-
-// Get input data
-$guid = (int) get_input('guid');
-
-// Make sure we actually have permission to edit
-$thewire = get_entity($guid);
-if ($thewire->getSubtype() == "thewire" && $thewire->canEdit()) {
-
- // unset reply metadata on children
- $children = elgg_get_entities_from_relationship(array(
- 'relationship' => 'parent',
- 'relationship_guid' => $post_guid,
- 'inverse_relationship' => true,
- ));
- if ($children) {
- foreach ($children as $child) {
- $child->reply = false;
- }
- }
-
- // Get owning user
- $owner = get_entity($thewire->getOwner());
-
- // Delete it
- $rowsaffected = $thewire->delete();
- if ($rowsaffected > 0) {
- // Success message
- system_message(elgg_echo("thewire:deleted"));
- } else {
- register_error(elgg_echo("thewire:notdeleted"));
- }
-
- forward("pg/thewire/owner/" . $owner->username);
-}
+<?php +/** + * Action for deleting a wire post + * + */ + +// Get input data +$guid = (int) get_input('guid'); + +// Make sure we actually have permission to edit +$thewire = get_entity($guid); +if ($thewire->getSubtype() == "thewire" && $thewire->canEdit()) { + + // unset reply metadata on children + $children = elgg_get_entities_from_relationship(array( + 'relationship' => 'parent', + 'relationship_guid' => $post_guid, + 'inverse_relationship' => true, + )); + if ($children) { + foreach ($children as $child) { + $child->reply = false; + } + } + + // Get owning user + $owner = get_entity($thewire->getOwnerGUID()); + + // Delete it + $rowsaffected = $thewire->delete(); + if ($rowsaffected > 0) { + // Success message + system_message(elgg_echo("thewire:deleted")); + } else { + register_error(elgg_echo("thewire:notdeleted")); + } + + forward("thewire/owner/" . $owner->username); +} diff --git a/mod/thewire/activate.php b/mod/thewire/activate.php new file mode 100644 index 000000000..1cc64ceb1 --- /dev/null +++ b/mod/thewire/activate.php @@ -0,0 +1,10 @@ +<?php +/** + * Register the ElggWire class for the object/thewire subtype + */ + +if (get_subtype_id('object', 'thewire')) { + update_subtype('object', 'thewire', 'ElggWire'); +} else { + add_subtype('object', 'thewire', 'ElggWire'); +} diff --git a/mod/thewire/classes/ElggWire.php b/mod/thewire/classes/ElggWire.php new file mode 100644 index 000000000..9c92dd8f2 --- /dev/null +++ b/mod/thewire/classes/ElggWire.php @@ -0,0 +1,40 @@ +<?php +/** + * ElggWire Class + * + * @property string $method The method used to create the wire post (site, sms, api) + * @property bool $reply Whether this wire post was a reply to another post + * @property int $wire_thread The identifier of the thread for this wire post + */ +class ElggWire extends ElggObject { + + /** + * Set subtype to thewire + * + * @return void + */ + protected function initializeAttributes() { + parent::initializeAttributes(); + + $this->attributes['subtype'] = 'thewire'; + } + + /** + * Can a user comment on this wire post? + * + * @see ElggObject::canComment() + * + * @param int $user_guid User guid (default is logged in user) + * @return bool + * @since 1.8.0 + */ + public function canComment($user_guid = 0) { + $result = parent::canComment($user_guid); + if ($result == false) { + return $result; + } + + return false; + } + +} diff --git a/mod/thewire/deactivate.php b/mod/thewire/deactivate.php new file mode 100644 index 000000000..3e20207a1 --- /dev/null +++ b/mod/thewire/deactivate.php @@ -0,0 +1,6 @@ +<?php +/** + * Deregister the ElggWire class + */ + +update_subtype('object', 'thewire');
\ No newline at end of file diff --git a/mod/thewire/languages/en.php b/mod/thewire/languages/en.php index 8978c6739..3c83d145f 100644 --- a/mod/thewire/languages/en.php +++ b/mod/thewire/languages/en.php @@ -13,17 +13,25 @@ $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:previous' => "Previous", 'thewire:charleft' => "characters remaining", 'thewire:tags' => "Wire posts tagged with '%s'", 'thewire:noposts' => "No wire posts yet", + 'item:object:thewire' => "Wire posts", + 'thewire:update' => 'Update', + 'thewire:by' => 'Wire post by %s', + + 'thewire:previous' => "Previous", + 'thewire:hide' => "Hide", + 'thewire:previous:help' => "View previous post", + 'thewire:hide:help' => "Hide previous post", /** * The wire river */ - 'thewire:river:create' => "posted to the wire", + 'river:create:object:thewire' => "%s posted to the %s", + 'thewire:wire' => 'wire', /** * Wire widget @@ -37,10 +45,17 @@ $english = array( */ 'thewire:posted' => "Your message was successfully posted to the wire.", 'thewire:deleted' => "The wire post was successfully deleted.", - 'thewire:blank' => "Sorry; you need to actually put something in the textbox before we can save it.", - 'thewire:notfound' => "Sorry; we could not find the specified wire post.", + 'thewire:blank' => "Sorry, you need to enter some text before we can post this.", + 'thewire:notfound' => "Sorry, we could not find the specified wire post.", 'thewire:notdeleted' => "Sorry. We could not delete this wire post.", + /** + * Notifications + */ + 'thewire:notify:subject' => "New wire post", + 'thewire:notify:reply' => '%s responded to %s on the wire:', + 'thewire:notify:post' => '%s posted on the wire:', + ); add_translation("en", $english); diff --git a/mod/thewire/manifest.xml b/mod/thewire/manifest.xml index 87a044364..962ed12f1 100644 --- a/mod/thewire/manifest.xml +++ b/mod/thewire/manifest.xml @@ -3,13 +3,15 @@ <name>The Wire</name> <author>JHU/APL and core developers</author> <version>1.8</version> + <category>bundled</category> + <category>content</category> <description>Microblogging for Elgg</description> <website>http://www.elgg.org/</website> <copyright>See COPYRIGHT.txt</copyright> - <license>GNU Public License version 2</license> + <license>GNU General Public License version 2</license> <requires> - <type>elgg_version</type> - <version>2010030101</version> + <type>elgg_release</type> + <version>1.8</version> </requires> - <admin_interface>simple</admin_interface> + <activate_on_install>true</activate_on_install> </plugin_manifest> diff --git a/mod/thewire/pages/friends.php b/mod/thewire/pages/friends.php deleted file mode 100644 index 239359ec2..000000000 --- a/mod/thewire/pages/friends.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php
-/**
- * Wire posts of your friends
- */
-
-$owner = elgg_get_page_owner_entity();
-
-$title = elgg_echo('thewire:friends');
-
-elgg_push_breadcrumb(elgg_echo('thewire'), "pg/thewire/all/");
-elgg_push_breadcrumb($owner->name, "pg/thewire/owner/$owner->username");
-elgg_push_breadcrumb(elgg_echo('friends'));
-
-$content = list_user_friends_objects($owner->guid, 'thewire', 15, false);
-
-$body = elgg_view_layout('content', array(
- 'filter_context' => 'friends',
- 'content' => $content,
- 'title' => $title,
- 'buttons' => false,
-));
-
-echo elgg_view_page($title, $body);
diff --git a/mod/thewire/pages/everyone.php b/mod/thewire/pages/thewire/everyone.php index 75abd282d..c7438747e 100644 --- a/mod/thewire/pages/everyone.php +++ b/mod/thewire/pages/thewire/everyone.php @@ -1,29 +1,31 @@ -<?php
-/**
- * All wire posts
- *
- */
-
-elgg_push_breadcrumb(elgg_echo('thewire'));
-
-$title = elgg_echo('thewire:everyone');
-
-if (elgg_is_logged_in()) {
- $content .= elgg_view_form('thewire/add');
- $content .= elgg_view('input/urlshortener');
-}
-
-$content .= elgg_list_entities(array(
- 'type' => 'object',
- 'subtype' => 'thewire',
- 'limit' => 15,
-));
-
-$body = elgg_view_layout('content', array(
- 'filter_context' => 'all',
- 'content' => $content,
- 'title' => $title,
- 'buttons' => false,
-));
-
-echo elgg_view_page($title, $body);
+<?php +/** + * All wire posts + * + */ + +elgg_push_breadcrumb(elgg_echo('thewire')); + +$title = elgg_echo('thewire:everyone'); + +$content = ''; +if (elgg_is_logged_in()) { + $form_vars = array('class' => 'thewire-form'); + $content .= elgg_view_form('thewire/add', $form_vars); + $content .= elgg_view('input/urlshortener'); +} + +$content .= elgg_list_entities(array( + 'type' => 'object', + 'subtype' => 'thewire', + 'limit' => get_input('limit', 15), +)); + +$body = elgg_view_layout('content', array( + 'filter_context' => 'all', + 'content' => $content, + 'title' => $title, + 'sidebar' => elgg_view('thewire/sidebar'), +)); + +echo elgg_view_page($title, $body); diff --git a/mod/thewire/pages/thewire/friends.php b/mod/thewire/pages/thewire/friends.php new file mode 100644 index 000000000..efa7e7a56 --- /dev/null +++ b/mod/thewire/pages/thewire/friends.php @@ -0,0 +1,31 @@ +<?php +/** + * Wire posts of your friends + */ + +$owner = elgg_get_page_owner_entity(); +if (!$owner) { + forward('', '404'); +} + +$title = elgg_echo('thewire:friends'); + +elgg_push_breadcrumb(elgg_echo('thewire'), "thewire/all"); +elgg_push_breadcrumb($owner->name, "thewire/owner/$owner->username"); +elgg_push_breadcrumb(elgg_echo('friends')); + +if (elgg_get_logged_in_user_guid() == $owner->guid) { + $form_vars = array('class' => 'thewire-form'); + $content = elgg_view_form('thewire/add', $form_vars); + $content .= elgg_view('input/urlshortener'); +} + +$content .= list_user_friends_objects($owner->guid, 'thewire', 15, false); + +$body = elgg_view_layout('content', array( + 'filter_context' => 'friends', + 'content' => $content, + 'title' => $title, +)); + +echo elgg_view_page($title, $body); diff --git a/mod/thewire/pages/user.php b/mod/thewire/pages/thewire/owner.php index cc966697f..dc25940e1 100644 --- a/mod/thewire/pages/user.php +++ b/mod/thewire/pages/thewire/owner.php @@ -1,33 +1,39 @@ -<?php
-/**
- * User's wire posts
- *
- */
-
-$owner = elgg_get_page_owner_entity();
-
-$title = elgg_echo('thewire:user', array($owner->name));
-
-elgg_push_breadcrumb(elgg_echo('thewire'), "pg/thewire/all/");
-elgg_push_breadcrumb($owner->name);
-
-if (get_loggedin_userid() == $owner->guid) {
- $content = elgg_view_form('thewire/add');
- $content .= elgg_view('input/urlshortener');
-}
-
-$content .= elgg_list_entities(array(
- 'type' => 'object',
- 'subtype' => 'thewire',
- 'owner_guid' => $owner->guid,
- 'limit' => 15,
-));
-
-$body = elgg_view_layout('content', array(
- 'filter_context' => 'mine',
- 'content' => $content,
- 'title' => $title,
- 'buttons' => false,
-));
-
-echo elgg_view_page($title, $body);
+<?php +/** + * User's wire posts + * + */ + +$owner = elgg_get_page_owner_entity(); +if (!$owner) { + forward('', '404'); +} + +$title = elgg_echo('thewire:user', array($owner->name)); + +elgg_push_breadcrumb(elgg_echo('thewire'), "thewire/all"); +elgg_push_breadcrumb($owner->name); + +$context = ''; +if (elgg_get_logged_in_user_guid() == $owner->guid) { + $form_vars = array('class' => 'thewire-form'); + $content = elgg_view_form('thewire/add', $form_vars); + $content .= elgg_view('input/urlshortener'); + $context = 'mine'; +} + +$content .= elgg_list_entities(array( + 'type' => 'object', + 'subtype' => 'thewire', + 'owner_guid' => $owner->guid, + 'limit' => get_input('limit', 15), +)); + +$body = elgg_view_layout('content', array( + 'filter_context' => $context, + 'content' => $content, + 'title' => $title, + 'sidebar' => elgg_view('thewire/sidebar'), +)); + +echo elgg_view_page($title, $body); diff --git a/mod/thewire/pages/thewire/previous.php b/mod/thewire/pages/thewire/previous.php new file mode 100644 index 000000000..a3f1cb01c --- /dev/null +++ b/mod/thewire/pages/thewire/previous.php @@ -0,0 +1,20 @@ +<?php +/** + * Serve up html for a post's parent + */ + +$guid = (int) get_input('guid'); +$title = elgg_echo('thewire:previous'); + +$parent = thewire_get_parent($guid); +if ($parent) { + $body = elgg_view_entity($parent); +} + +$body = elgg_view_layout('content', array( + 'filter' => false, + 'content' => $body, + 'title' => $title, +)); + +echo elgg_view_page($title, $body);
\ No newline at end of file diff --git a/mod/thewire/pages/reply.php b/mod/thewire/pages/thewire/reply.php index e349761f2..df4511c51 100644 --- a/mod/thewire/pages/reply.php +++ b/mod/thewire/pages/thewire/reply.php @@ -1,28 +1,28 @@ -<?php
-/**
- * Reply page
- *
- */
-
-gatekeeper();
-
-$post = get_entity(get_input('guid'));
-
-$title = elgg_echo('thewire:reply');
-
-elgg_push_breadcrumb(elgg_echo('thewire'), 'pg/thewire/all');
-elgg_push_breadcrumb($title);
-
-$content = elgg_view('thewire/reply', array('post' => $post));
-$content .= elgg_view_form('thewire/add', array(), array('post' => $post));
-$content .= elgg_view('input/urlshortener');
-
-
-$body = elgg_view_layout('content', array(
- 'filter' => false,
- 'content' => $content,
- 'title' => $title,
- 'buttons' => false,
-));
-
-echo elgg_view_page($title, $body);
+<?php +/** + * Reply page + * + */ + +gatekeeper(); + +$post = get_entity(get_input('guid')); + +$title = elgg_echo('thewire:reply'); + +elgg_push_breadcrumb(elgg_echo('thewire'), 'thewire/all'); +elgg_push_breadcrumb($title); + +$content = elgg_view('thewire/reply', array('post' => $post)); +$form_vars = array('class' => 'thewire-form'); +$content .= elgg_view_form('thewire/add', $form_vars, array('post' => $post)); +$content .= elgg_view('input/urlshortener'); + + +$body = elgg_view_layout('content', array( + 'filter' => false, + 'content' => $content, + 'title' => $title, +)); + +echo elgg_view_page($title, $body); diff --git a/mod/thewire/pages/tag.php b/mod/thewire/pages/thewire/tag.php index 7e62a33de..1c88030ec 100644 --- a/mod/thewire/pages/tag.php +++ b/mod/thewire/pages/thewire/tag.php @@ -5,10 +5,10 @@ $tag = get_input('tag'); if (!$tag) { - forward('pg/thewire/all'); + forward('thewire/all'); } -elgg_push_breadcrumb(elgg_echo('thewire'), 'pg/thewire/all'); +elgg_push_breadcrumb(elgg_echo('thewire'), 'thewire/all'); elgg_push_breadcrumb('#' . $tag); // remove # from tag @@ -30,7 +30,6 @@ $body = elgg_view_layout('content', array( 'filter' => false, 'content' => $content, 'title' => $title, - 'buttons' => false, )); echo elgg_view_page($title, $body); diff --git a/mod/thewire/pages/thread.php b/mod/thewire/pages/thewire/thread.php index 49ca3afd1..ec2709430 100644 --- a/mod/thewire/pages/thread.php +++ b/mod/thewire/pages/thewire/thread.php @@ -1,28 +1,27 @@ -<?php
-/**
- * View conversation thread
- */
-
-$thread_id = get_input('thread_id');
-
-$title = elgg_echo('thewire:thread');
-
-elgg_push_breadcrumb(elgg_echo('thewire'), 'pg/thewire/all');
-elgg_push_breadcrumb($title);
-
-$content = elgg_list_entities_from_metadata(array(
- "metadata_name" => "wire_thread",
- "metadata_value" => $thread_id,
- "type" => "object",
- "subtype" => "thewire",
- "limit" => 20,
-));
-
-$body = elgg_view_layout('content', array(
- 'filter' => false,
- 'content' => $content,
- 'title' => $title,
- 'buttons' => false,
-));
-
-echo elgg_view_page($title, $body);
+<?php +/** + * View conversation thread + */ + +$thread_id = get_input('thread_id'); + +$title = elgg_echo('thewire:thread'); + +elgg_push_breadcrumb(elgg_echo('thewire'), 'thewire/all'); +elgg_push_breadcrumb($title); + +$content = elgg_list_entities_from_metadata(array( + "metadata_name" => "wire_thread", + "metadata_value" => $thread_id, + "type" => "object", + "subtype" => "thewire", + "limit" => 20, +)); + +$body = elgg_view_layout('content', array( + 'filter' => false, + 'content' => $content, + 'title' => $title, +)); + +echo elgg_view_page($title, $body); diff --git a/mod/thewire/pages/thewire/view.php b/mod/thewire/pages/thewire/view.php new file mode 100644 index 000000000..1709e5e9a --- /dev/null +++ b/mod/thewire/pages/thewire/view.php @@ -0,0 +1,31 @@ +<?php +/** + * View individual wire post + */ + +$post = get_entity(get_input('guid')); +if (!$post) { + register_error(elgg_echo('noaccess')); + $_SESSION['last_forward_from'] = current_page_url(); + forward(''); +} +$owner = $post->getOwnerEntity(); +if (!$owner) { + forward(); +} + +$title = elgg_echo('thewire:by', array($owner->name)); + +elgg_push_breadcrumb(elgg_echo('thewire'), 'thewire/all'); +elgg_push_breadcrumb($owner->name, 'thewire/owner/' . $owner->username); +elgg_push_breadcrumb($title); + +$content = elgg_view_entity($post); + +$body = elgg_view_layout('content', array( + 'filter' => false, + 'content' => $content, + 'title' => $title, +)); + +echo elgg_view_page($title, $body); diff --git a/mod/thewire/start.php b/mod/thewire/start.php index 7450ea78a..8b01cc57a 100644 --- a/mod/thewire/start.php +++ b/mod/thewire/start.php @@ -1,358 +1,475 @@ -<?php
-/**
- * Elgg wire plugin
- *
- * Forked from Curverider's version
- *
- * JHU/APL Contributors:
- * Cash Costello
- * Clark Updike
- * John Norton
- * Nathan Koterba
- */
-
-register_elgg_event_handler('init', 'system', 'thewire_init');
-
-function thewire_init() {
- global $CONFIG;
-
- // add a site navigation item
- $item = new ElggMenuItem('thewire', elgg_echo('thewire'), 'pg/thewire/all');
- elgg_register_menu_item('site', $item);
-
- // Extend system CSS with our own styles, which are defined in the thewire/css view
- elgg_extend_view('css', 'thewire/css');
-
- //extend views
- elgg_extend_view('activity/thewire', 'thewire/activity_view');
- elgg_extend_view('profile/status', 'thewire/profile_status');
- elgg_extend_view('js/initialise_elgg', 'thewire/js/textcounter');
-
- // Register a page handler, so we can have nice URLs
- elgg_register_page_handler('thewire', 'thewire_page_handler');
-
- // Register a URL handler for thewire posts
- elgg_register_entity_url_handler('object', 'thewire', 'thewire_url');
-
- // Your thewire widget
- add_widget_type('thewire', elgg_echo('thewire'), elgg_echo("thewire:widget:desc"));
-
- // Register entity type
- elgg_register_entity_type('object', 'thewire');
-
- // Register granular notification for this type
- register_notification_object('object', 'thewire', elgg_echo('thewire:notify:subject'));
-
- // Listen to notification events and supply a more useful message
- register_plugin_hook('notify:entity:message', 'object', 'thewire_notify_message');
-
- // Register actions
- $action_base = $CONFIG->pluginspath . 'thewire/actions';
- register_action("thewire/add", false, "$action_base/add.php");
- register_action("thewire/delete", false, "$action_base/delete.php");
-
- register_plugin_hook('unit_test', 'system', 'thewire_test');
-}
-
-/**
- * The wire page handler
- *
- * Supports:
- * pg/thewire/all View site wire posts
- * pg/thewire/owner/<username> View this user's wire posts
- * pg/thewire/following/<username> View the posts of those this user follows
- * pg/thewire/reply/<guid> Reply to a post
- * pg/thewire/view/<guid> View a conversation thread
- * pg/thewire/tag/<tag> View wire posts tagged with <tag>
- *
- * @param array $page From the page_handler function
- * @return true|false Depending on success
- */
-function thewire_page_handler($page) {
-
- // if just pg/thewire/ go to global view in the else statement
- if (isset($page[0]) && $page[0]) {
-
- switch ($page[0]) {
- case "all":
- include dirname(__FILE__) . "/pages/everyone.php";
- break;
-
- case "friends":
- if (isset($page[1])) {
- set_input('username', $page[1]);
- }
- include dirname(__FILE__) . "/pages/friends.php";
- break;
-
- case "owner":
- if (isset($page[1])) {
- set_input('username', $page[1]);
- }
- include dirname(__FILE__) . "/pages/user.php";
- break;
-
- case "thread":
- if (isset($page[1])) {
- set_input('thread_id', $page[1]);
- }
- include dirname(__FILE__) . "/pages/thread.php";
- break;
- case "reply":
- if (isset($page[1])) {
- set_input('guid', $page[1]);
- }
- include dirname(__FILE__) . "/pages/reply.php";
- break;
- case "tag":
- if (isset($page[1])) {
- set_input('tag', $page[1]);
- }
- include dirname(__FILE__) . "/pages/tag.php";
- break;
- case "previous":
- if (isset($page[1])) {
- set_input('guid', $page[1]);
- }
- include dirname(__FILE__) . "/pages/previous.php";
- break;
- }
- } else {
- include dirname(__FILE__) . "/pages/everyone.php";
- }
-
- return true;
-}
-
-/**
- * Override the url for a wire post to return the thread
- *
- * @param $thewirepost - wire post object
- */
-function thewire_url($thewirepost) {
- global $CONFIG;
- return $CONFIG->url . "pg/thewire/view/" . $thewirepost->guid;
-}
-
-/**
- * Returns the notification body
- *
- * @param string $hook
- * @param string $entity_type
- * @param string $returnvalue
- * @param array $params
- * @return $string
- */
-function thewire_notify_message($hook, $entity_type, $returnvalue, $params) {
- global $CONFIG;
-
- $entity = $params['entity'];
- if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'thewire')) {
- $descr = $entity->description;
- $owner = $entity->getOwnerEntity();
- if ($entity->reply) {
- // have to do this because of poor design of Elgg notification system
- $parent_post = get_entity(get_input('parent_guid'));
- if ($parent_post) {
- $parent_owner = $parent_post->getOwnerEntity();
- }
- $body = sprintf(elgg_echo('thewire:notify:reply'), $owner->name, $parent_owner->name);
- } else {
- $body = sprintf(elgg_echo('thewire:notify:post'), $owner->name);
- }
- $body .= "\n\n" . $descr . "\n\n";
- $body .= elgg_echo('thewire') . ": {$CONFIG->url}pg/thewire/";
- return $body;
- }
- return $returnvalue;
-}
-
-/**
- * Get an array of hashtags from a text string
- *
- * @param string $text
- * @return array
- */
-function thewire_get_hashtags($text) {
- // beginning of text or white space followed by hashtag
- // hashtag must begin with # and contain at least one character not digit, space, or punctuation
- $matches = array();
- preg_match_all('/(^|[^\w])#(\w*[^\s\d!-\/:-@]+\w*)/', $text, $matches);
- return $matches[2];
-}
-
-/**
- * Replace urls, hash tags, and @'s by links
- *
- * @param $text
- * @return string
- */
-function thewire_filter($text) {
- global $CONFIG;
-
- $text = ' ' . $text;
-
- // email addresses
- $text = preg_replace(
- '/(^|[^\w])([\w\-\.]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})/i',
- '$1<a href="mailto:$2@$3">$2@$3</a>',
- $text);
-
- // links
- $text = parse_urls($text);
-
- // usernames
- $text = preg_replace(
- '/(^|[^\w])@([\w]+)/',
- '$1<a href="' . $CONFIG->wwwroot . 'pg/thewire/owner/$2">@$2</a>',
- $text);
-
- // hashtags
- $text = preg_replace(
- '/(^|[^\w])#(\w*[^\s\d!-\/:-@]+\w*)/',
- '$1<a href="' . $CONFIG->wwwroot . 'pg/thewire/tag/$2">#$2</a>',
- $text);
-
- $text = trim($text);
-
- return $text;
-}
-
-/**
- * Create a new wire post.
- *
- * @param string $text The post text
- * @param int $userid The user's guid
- * @param int $access_id Public/private etc
- * @param int $parent_guid Parent post guid (if any)
- * @param string $method The method (default: 'site')
- * @return guid or false if failure
- */
-function thewire_save_post($text, $userid, $access_id, $parent_guid = 0, $method = "site") {
- $post = new ElggObject();
-
- $post->subtype = "thewire";
- $post->owner_guid = $userid;
- $post->access_id = $access_id;
-
- // only 200 characters allowed
- $text = elgg_substr($text, 0, 200);
-
- // no html tags allowed so we escape
- $post->description = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
-
- $post->method = $method; //method: site, email, api, ...
-
- $tags = thewire_get_hashtags($text);
- if ($tags) {
- $post->tags = $tags;
- }
-
- // must do this before saving so notifications pick up that this is a reply
- if ($parent_guid) {
- $post->reply = true;
- }
-
- $guid = $post->save();
-
- // set thread guid
- if ($parent_guid) {
- $post->addRelationship($parent_guid, 'parent');
-
- // name conversation threads by guid of first post (works even if first post deleted)
- $parent_post = get_entity($parent_guid);
- $post->wire_thread = $parent_post->wire_thread;
- } else {
- // first post in this thread
- $post->wire_thread = $guid;
- }
-
- if ($guid) {
- add_to_river('river/object/thewire/create', 'create', $post->owner_guid, $post->guid);
- }
-
- return $guid;
-}
-
-/**
- * Send notification to poster of parent post if not notified already
- *
- * @param int $guid
- * @param int $parent_guid
- * @param ElggUser $user
- */
-function thewire_send_response_notification($guid, $parent_guid, $user) {
- $parent_owner = get_entity($parent_guid)->getOwnerEntity();
- $user = get_loggedin_user();
-
- // check to make sure user is not responding to self
- if ($parent_owner->guid != $user->guid) {
- // check if parent owner has notification for this user
- $send_response = true;
- global $NOTIFICATION_HANDLERS;
- foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
- if (check_entity_relationship($parent_owner->guid, 'notify' . $method, $user->guid)) {
- $send_response = false;
- }
- }
-
- // create the notification message
- if ($send_response) {
- // grab same notification message that goes to everyone else
- $params = array(
- 'entity' => get_entity($guid),
- 'method' => "email",
- );
- $msg = thewire_notify_message("", "", "", $params);
-
- notify_user(
- $parent_owner->guid,
- $user->guid,
- elgg_echo('thewire:notify:subject'),
- $msg);
- }
- }
-}
-
-/**
- * Get the latest wire guid - used for ajax update
- * @return guid
- */
-function thewire_latest_guid() {
- $post = elgg_get_entities(array(
- 'type' => 'object',
- 'subtype' => 'thewire',
- 'limit' => 1,
- ));
- if ($post) {
- return $post[0]->guid;
- } else {
- return 0;
- }
-}
-
-/**
- * Get the parent of a wire post
- *
- * @param ElggObject $post
- * @return ElggObject or null
- */
-function thewire_get_parent($post_guid) {
- $parents = elgg_get_entities_from_relationship(array(
- 'relationship' => 'parent',
- 'relationship_guid' => $post_guid,
- ));
- if ($parents) {
- return $parents[0];
- }
- return null;
-}
-
-/**
- * Runs unit tests for the wire
- */
-function thewire_test($hook, $type, $value, $params) {
- global $CONFIG;
- $value[] = $CONFIG->pluginspath . 'thewire/tests/regex.php';
- return $value;
+<?php +/** + * Elgg wire plugin + * + * Forked from Curverider's version + * + * JHU/APL Contributors: + * Cash Costello + * Clark Updike + * John Norton + * Max Thomas + * Nathan Koterba + */ + +elgg_register_event_handler('init', 'system', 'thewire_init'); + +/** + * The Wire initialization + */ +function thewire_init() { + + // register the wire's JavaScript + $thewire_js = elgg_get_simplecache_url('js', 'thewire'); + elgg_register_simplecache_view('js/thewire'); + elgg_register_js('elgg.thewire', $thewire_js, 'footer'); + + elgg_register_ajax_view('thewire/previous'); + + // add a site navigation item + $item = new ElggMenuItem('thewire', elgg_echo('thewire'), 'thewire/all'); + elgg_register_menu_item('site', $item); + + // owner block menu + elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'thewire_owner_block_menu'); + + // remove edit and access and add thread, reply, view previous + elgg_register_plugin_hook_handler('register', 'menu:entity', 'thewire_setup_entity_menu_items'); + + // Extend system CSS with our own styles, which are defined in the thewire/css view + elgg_extend_view('css/elgg', 'thewire/css'); + + //extend views + elgg_extend_view('activity/thewire', 'thewire/activity_view'); + elgg_extend_view('profile/status', 'thewire/profile_status'); + elgg_extend_view('js/initialise_elgg', 'thewire/js/textcounter'); + + // Register a page handler, so we can have nice URLs + elgg_register_page_handler('thewire', 'thewire_page_handler'); + + // Register a URL handler for thewire posts + elgg_register_entity_url_handler('object', 'thewire', 'thewire_url'); + + elgg_register_widget_type('thewire', elgg_echo('thewire'), elgg_echo("thewire:widget:desc")); + + // Register for search + elgg_register_entity_type('object', 'thewire'); + + // Register granular notification for this type + register_notification_object('object', 'thewire', elgg_echo('thewire:notify:subject')); + + // Listen to notification events and supply a more useful message + elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'thewire_notify_message'); + + // Register actions + $action_base = elgg_get_plugins_path() . 'thewire/actions'; + elgg_register_action("thewire/add", "$action_base/add.php"); + elgg_register_action("thewire/delete", "$action_base/delete.php"); + + elgg_register_plugin_hook_handler('unit_test', 'system', 'thewire_test'); + + elgg_register_event_handler('upgrade', 'system', 'thewire_run_upgrades'); +} + +/** + * The wire page handler + * + * Supports: + * thewire/all View site wire posts + * thewire/owner/<username> View this user's wire posts + * thewire/following/<username> View the posts of those this user follows + * thewire/reply/<guid> Reply to a post + * thewire/view/<guid> View a post + * thewire/thread/<id> View a conversation thread + * thewire/tag/<tag> View wire posts tagged with <tag> + * + * @param array $page From the page_handler function + * @return bool + */ +function thewire_page_handler($page) { + + $base_dir = elgg_get_plugins_path() . 'thewire/pages/thewire'; + + if (!isset($page[0])) { + $page = array('all'); + } + + switch ($page[0]) { + case "all": + include "$base_dir/everyone.php"; + break; + + case "friends": + include "$base_dir/friends.php"; + break; + + case "owner": + include "$base_dir/owner.php"; + break; + + case "view": + if (isset($page[1])) { + set_input('guid', $page[1]); + } + include "$base_dir/view.php"; + break; + + case "thread": + if (isset($page[1])) { + set_input('thread_id', $page[1]); + } + include "$base_dir/thread.php"; + break; + + case "reply": + if (isset($page[1])) { + set_input('guid', $page[1]); + } + include "$base_dir/reply.php"; + break; + + case "tag": + if (isset($page[1])) { + set_input('tag', $page[1]); + } + include "$base_dir/tag.php"; + break; + + case "previous": + if (isset($page[1])) { + set_input('guid', $page[1]); + } + include "$base_dir/previous.php"; + break; + + default: + return false; + } + return true; +} + +/** + * Override the url for a wire post to return the thread + * + * @param ElggObject $thewirepost Wire post object + */ +function thewire_url($thewirepost) { + global $CONFIG; + return $CONFIG->url . "thewire/view/" . $thewirepost->guid; +} + +/** + * Returns the notification body + * + * @return $string + */ +function thewire_notify_message($hook, $entity_type, $returnvalue, $params) { + global $CONFIG; + + $entity = $params['entity']; + if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'thewire')) { + $descr = $entity->description; + $owner = $entity->getOwnerEntity(); + if ($entity->reply) { + // have to do this because of poor design of Elgg notification system + $parent_post = get_entity(get_input('parent_guid')); + if ($parent_post) { + $parent_owner = $parent_post->getOwnerEntity(); + } + $body = sprintf(elgg_echo('thewire:notify:reply'), $owner->name, $parent_owner->name); + } else { + $body = sprintf(elgg_echo('thewire:notify:post'), $owner->name); + } + $body .= "\n\n" . $descr . "\n\n"; + $body .= elgg_echo('thewire') . ": {$CONFIG->url}thewire"; + return $body; + } + return $returnvalue; +} + +/** + * Get an array of hashtags from a text string + * + * @param string $text The text of a post + * @return array + */ +function thewire_get_hashtags($text) { + // beginning of text or white space followed by hashtag + // hashtag must begin with # and contain at least one character not digit, space, or punctuation + $matches = array(); + preg_match_all('/(^|[^\w])#(\w*[^\s\d!-\/:-@]+\w*)/', $text, $matches); + return $matches[2]; +} + +/** + * Replace urls, hash tags, and @'s by links + * + * @param string $text The text of a post + * @return string + */ +function thewire_filter($text) { + global $CONFIG; + + $text = ' ' . $text; + + // email addresses + $text = preg_replace( + '/(^|[^\w])([\w\-\.]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})/i', + '$1<a href="mailto:$2@$3">$2@$3</a>', + $text); + + // links + $text = parse_urls($text); + + // usernames + $text = preg_replace( + '/(^|[^\w])@([\p{L}\p{Nd}._]+)/u', + '$1<a href="' . $CONFIG->wwwroot . 'thewire/owner/$2">@$2</a>', + $text); + + // hashtags + $text = preg_replace( + '/(^|[^\w])#(\w*[^\s\d!-\/:-@]+\w*)/', + '$1<a href="' . $CONFIG->wwwroot . 'thewire/tag/$2">#$2</a>', + $text); + + $text = trim($text); + + return $text; +} + +/** + * Create a new wire post. + * + * @param string $text The post text + * @param int $userid The user's guid + * @param int $access_id Public/private etc + * @param int $parent_guid Parent post guid (if any) + * @param string $method The method (default: 'site') + * @return guid or false if failure + */ +function thewire_save_post($text, $userid, $access_id, $parent_guid = 0, $method = "site") { + $post = new ElggObject(); + + $post->subtype = "thewire"; + $post->owner_guid = $userid; + $post->access_id = $access_id; + + // only 200 characters allowed + $text = elgg_substr($text, 0, 200); + + // no html tags allowed so we escape + $post->description = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8'); + + $post->method = $method; //method: site, email, api, ... + + $tags = thewire_get_hashtags($text); + if ($tags) { + $post->tags = $tags; + } + + // must do this before saving so notifications pick up that this is a reply + if ($parent_guid) { + $post->reply = true; + } + + $guid = $post->save(); + + // set thread guid + if ($parent_guid) { + $post->addRelationship($parent_guid, 'parent'); + + // name conversation threads by guid of first post (works even if first post deleted) + $parent_post = get_entity($parent_guid); + $post->wire_thread = $parent_post->wire_thread; + } else { + // first post in this thread + $post->wire_thread = $guid; + } + + 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; +} + +/** + * Send notification to poster of parent post if not notified already + * + * @param int $guid The guid of the reply wire post + * @param int $parent_guid The guid of the original wire post + * @param ElggUser $user The user who posted the reply + * @return void + */ +function thewire_send_response_notification($guid, $parent_guid, $user) { + $parent_owner = get_entity($parent_guid)->getOwnerEntity(); + $user = elgg_get_logged_in_user_entity(); + + // check to make sure user is not responding to self + if ($parent_owner->guid != $user->guid) { + // check if parent owner has notification for this user + $send_response = true; + global $NOTIFICATION_HANDLERS; + foreach ($NOTIFICATION_HANDLERS as $method => $foo) { + if (check_entity_relationship($parent_owner->guid, 'notify' . $method, $user->guid)) { + $send_response = false; + } + } + + // create the notification message + if ($send_response) { + // grab same notification message that goes to everyone else + $params = array( + 'entity' => get_entity($guid), + 'method' => "email", + ); + $msg = thewire_notify_message("", "", "", $params); + + notify_user( + $parent_owner->guid, + $user->guid, + elgg_echo('thewire:notify:subject'), + $msg); + } + } +} + +/** + * Get the latest wire guid - used for ajax update + * + * @return guid + */ +function thewire_latest_guid() { + $post = elgg_get_entities(array( + 'type' => 'object', + 'subtype' => 'thewire', + 'limit' => 1, + )); + if ($post) { + return $post[0]->guid; + } else { + return 0; + } +} + +/** + * Get the parent of a wire post + * + * @param int $post_guid The guid of the reply + * @return ElggObject or null + */ +function thewire_get_parent($post_guid) { + $parents = elgg_get_entities_from_relationship(array( + 'relationship' => 'parent', + 'relationship_guid' => $post_guid, + )); + if ($parents) { + return $parents[0]; + } + return null; +} + +/** + * Sets up the entity menu for thewire + * + * Adds reply, thread, and view previous links. Removes edit and access. + * + * @param string $hook Hook name + * @param string $type Hook type + * @param array $value Array of menu items + * @param array $params Array with the entity + * @return array + */ +function thewire_setup_entity_menu_items($hook, $type, $value, $params) { + $handler = elgg_extract('handler', $params, false); + if ($handler != 'thewire') { + return $value; + } + + foreach ($value as $index => $item) { + $name = $item->getName(); + if ($name == 'access' || $name == 'edit') { + unset($value[$index]); + } + } + + $entity = $params['entity']; + + if (elgg_is_logged_in()) { + $options = array( + 'name' => 'reply', + 'text' => elgg_echo('thewire:reply'), + 'href' => "thewire/reply/$entity->guid", + 'priority' => 150, + ); + $value[] = ElggMenuItem::factory($options); + } + + if ($entity->reply) { + $options = array( + 'name' => 'previous', + 'text' => elgg_echo('thewire:previous'), + 'href' => "thewire/previous/$entity->guid", + 'priority' => 160, + 'link_class' => 'thewire-previous', + 'title' => elgg_echo('thewire:previous:help'), + ); + $value[] = ElggMenuItem::factory($options); + } + + $options = array( + 'name' => 'thread', + 'text' => elgg_echo('thewire:thread'), + 'href' => "thewire/thread/$entity->wire_thread", + 'priority' => 170, + ); + $value[] = ElggMenuItem::factory($options); + + return $value; +} + +/** + * Add a menu item to an ownerblock + * + * @return array + */ +function thewire_owner_block_menu($hook, $type, $return, $params) { + if (elgg_instanceof($params['entity'], 'user')) { + $url = "thewire/owner/{$params['entity']->username}"; + $item = new ElggMenuItem('thewire', elgg_echo('item:object:thewire'), $url); + $return[] = $item; + } + + return $return; +} + +/** + * Runs unit tests for the wire + * + * @return array + */ +function thewire_test($hook, $type, $value, $params) { + global $CONFIG; + $value[] = $CONFIG->pluginspath . 'thewire/tests/regex.php'; + return $value; +} + +function thewire_run_upgrades() { + $path = dirname(__FILE__) . '/upgrades/'; + $files = elgg_get_upgrade_files($path); + + foreach ($files as $file) { + include $path . $file; + } }
\ No newline at end of file diff --git a/mod/thewire/tests/regex.php b/mod/thewire/tests/regex.php index 5b53c69d6..c73e06bdc 100644 --- a/mod/thewire/tests/regex.php +++ b/mod/thewire/tests/regex.php @@ -38,22 +38,46 @@ class TheWireRegexTest extends ElggCoreUnitTest { parent::__destruct(); } + /** + * Get the link for a user's wire page + * + * @param string $username Username + * @return string + */ protected function getUserWireLink($username) { - $url = "pg/thewire/owner/$username"; + $url = "thewire/owner/$username"; $url = elgg_normalize_url($url); return "<a href=\"$url\">@$username</a>"; } + /** + * Get the link for a hashtag page + * + * @param string $tag Tag string + * @return string + */ protected function getHashtagLink($tag) { - $url = "pg/thewire/tag/$tag"; + $url = "thewire/tag/$tag"; $url = elgg_normalize_url($url); return "<a href=\"$url\">#$tag</a>"; } + /** + * Get a link for an email address mailto + * + * @param string $address Email address + * @return string + */ protected function getEmailLink($address) { return "<a href=\"mailto:$address\">$address</a>"; } + /** + * Get the html for a link + * + * @param string $address URL + * @return string + */ protected function getLink($address) { return parse_urls($address); } @@ -103,6 +127,12 @@ class TheWireRegexTest extends ElggCoreUnitTest { $expected = "test (" . $this->getUserWireLink('user') . ") test"; $result = thewire_filter($text); $this->assertEqual($result, $expected); + + // utf8 characters + $text = "@tyúkanyó"; + $expected = $this->getUserWireLink('tyúkanyó'); + $result = thewire_filter($text); + $this->assertEqual($result, $expected); } /** diff --git a/mod/thewire/upgrades/2012122701-fix_entity_class.php b/mod/thewire/upgrades/2012122701-fix_entity_class.php new file mode 100644 index 000000000..a1f382712 --- /dev/null +++ b/mod/thewire/upgrades/2012122701-fix_entity_class.php @@ -0,0 +1,8 @@ +<?php +/** + * Register thewire objects with the ElggWire class. + */ + +if (get_subtype_id('object', 'thewire')) { + update_subtype('object', 'thewire', 'ElggWire'); +}
\ No newline at end of file diff --git a/mod/thewire/views/default/forms/thewire/add.php b/mod/thewire/views/default/forms/thewire/add.php index 54d5a5ea7..8607b3662 100644 --- a/mod/thewire/views/default/forms/thewire/add.php +++ b/mod/thewire/views/default/forms/thewire/add.php @@ -5,6 +5,8 @@ * @uses $vars['post'] */ +elgg_load_js('elgg.thewire'); + $post = elgg_extract('post', $vars); $text = elgg_echo('post'); @@ -18,47 +20,22 @@ if ($post) { 'value' => $post->guid, )); } + +echo elgg_view('input/plaintext', array( + 'name' => 'body', + 'class' => 'mtm', + 'id' => 'thewire-textarea', +)); ?> -<textarea id="thewire-textarea" name="body" class="mtm"></textarea> <div id="thewire-characters-remaining"> <span>140</span> <?php echo elgg_echo('thewire:charleft'); ?> </div> +<div class="elgg-foot mts"> <?php echo elgg_view('input/submit', array( 'value' => $text, 'id' => 'thewire-submit-button', )); - ?> -<script type="text/javascript"> - -$(document).ready(function() { - $("#thewire-textarea").bind('keydown', function() { - textCounter(this, $("#thewire-characters-remaining span"), 140); - }); - $("#thewire-textarea").bind('keyup', function() { - textCounter(this, $("#thewire-characters-remaining span"), 140); - }); -}); - -function textCounter(textarea, status, limit) { - - var remaining_chars = limit - textarea.value.length; - status.html(remaining_chars); - - if (remaining_chars < 0) { - status.parent().css("color", "#D40D12"); - $("#thewire-submit-button").attr('disabled', 'disabled'); - $("#thewire-submit-button").css('background', '#999999'); - $("#thewire-submit-button").css('border-color', '#999999'); - $("#thewire-submit-button").css('cursor', 'default'); - } else { - status.parent().css("color", ""); - $("#thewire-submit-button").removeAttr('disabled', 'disabled'); - $("#thewire-submit-button").css('background', '#4690d6'); - $("#thewire-submit-button").css('border-color', '#4690d6'); - $("#thewire-submit-button").css('cursor', 'pointer'); - } -} -</script> +</div>
\ No newline at end of file diff --git a/mod/thewire/views/default/js/thewire.php b/mod/thewire/views/default/js/thewire.php new file mode 100644 index 000000000..ba8f35050 --- /dev/null +++ b/mod/thewire/views/default/js/thewire.php @@ -0,0 +1,86 @@ +<?php +/** + * The wire's JavaScript + */ + +$site_url = elgg_get_site_url(); + +?> + +elgg.provide('elgg.thewire'); + +elgg.thewire.init = function() { + $("#thewire-textarea").live('keydown', function() { + elgg.thewire.textCounter(this, $("#thewire-characters-remaining span"), 140); + }); + $("#thewire-textarea").live('keyup', function() { + elgg.thewire.textCounter(this, $("#thewire-characters-remaining span"), 140); + }); + + $(".thewire-previous").live('click', elgg.thewire.viewPrevious); +}; + +/** + * Update the number of characters left with every keystroke + * + * @param {Object} textarea + * @param {Object} status + * @param {integer} limit + * @return void + */ +elgg.thewire.textCounter = function(textarea, status, limit) { + + var remaining_chars = limit - $(textarea).val().length; + status.html(remaining_chars); + + if (remaining_chars < 0) { + status.parent().addClass("thewire-characters-remaining-warning"); + $("#thewire-submit-button").attr('disabled', 'disabled'); + $("#thewire-submit-button").addClass('elgg-state-disabled'); + } else { + status.parent().removeClass("thewire-characters-remaining-warning"); + $("#thewire-submit-button").removeAttr('disabled', 'disabled'); + $("#thewire-submit-button").removeClass('elgg-state-disabled'); + } +}; + +/** + * Display the previous wire post + * + * Makes Ajax call to load the html and handles changing the previous link + * + * @param {Object} event + * @return void + */ +elgg.thewire.viewPrevious = function(event) { + var $link = $(this); + var postGuid = $link.attr("href").split("/").pop(); + var $previousDiv = $("#thewire-previous-" + postGuid); + + if ($link.html() == elgg.echo('thewire:hide')) { + $link.html(elgg.echo('thewire:previous')); + $link.attr("title", elgg.echo('thewire:previous:help')); + $previousDiv.slideUp(400); + } else { + $link.html(elgg.echo('thewire:hide')); + $link.attr("title", elgg.echo('thewire:hide:help')); + + $.ajax({type: "GET", + url: elgg.config.wwwroot + "ajax/view/thewire/previous", + dataType: "html", + cache: false, + data: {guid: postGuid}, + success: function(htmlData) { + if (htmlData.length > 0) { + $previousDiv.html(htmlData); + $previousDiv.slideDown(600); + } + } + }); + + } + + event.preventDefault(); +}; + +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 6be137dff..134c87243 100644 --- a/mod/thewire/views/default/object/thewire.php +++ b/mod/thewire/views/default/object/thewire.php @@ -5,8 +5,9 @@ * @uses $vars['entity'] */ +elgg_load_js('elgg.thewire'); -$full = elgg_extract('full', $vars, FALSE); +$full = elgg_extract('full_view', $vars, FALSE); $post = elgg_extract('entity', $vars, FALSE); if (!$post) { @@ -23,15 +24,18 @@ $owner = $post->getOwnerEntity(); $owner_icon = elgg_view_entity_icon($owner, 'tiny'); $owner_link = elgg_view('output/url', array( - 'href' => "pg/thewire/owner/$owner->username", + 'href' => "thewire/owner/$owner->username", 'text' => $owner->name, + 'is_trusted' => true, )); -$author_text = elgg_echo('blog:author_by_line', array($owner_link)); +$author_text = elgg_echo('byline', array($owner_link)); $date = elgg_view_friendly_time($post->time_created); -$metadata = elgg_view('thewire/metadata', array( +$metadata = elgg_view_menu('entity', array( 'entity' => $post, 'handler' => 'thewire', + 'sort_by' => 'priority', + 'class' => 'elgg-menu-hz', )); $subtitle = "$author_text $date"; @@ -48,6 +52,12 @@ $params = array( 'content' => thewire_filter($post->description), 'tags' => false, ); -$list_body = elgg_view('layout/objects/list/body', $params); +$params = $params + $vars; +$list_body = elgg_view('object/elements/summary', $params); echo elgg_view_image_block($owner_icon, $list_body); + +if ($post->reply) { + echo "<div class=\"thewire-parent hidden\" id=\"thewire-previous-{$post->guid}\">"; + echo "</div>"; +} diff --git a/mod/thewire/views/default/river/object/thewire/create.php b/mod/thewire/views/default/river/object/thewire/create.php index d4dac38ee..c75a42b3f 100644 --- a/mod/thewire/views/default/river/object/thewire/create.php +++ b/mod/thewire/views/default/river/object/thewire/create.php @@ -7,18 +7,25 @@ $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', + 'is_trusted' => true, +)); -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', + 'is_trusted' => true, +)); -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/elements/layout', array( + 'item' => $vars['item'], + 'message' => $excerpt, + 'summary' => $summary, +));
\ No newline at end of file diff --git a/mod/thewire/views/default/thewire/css.php b/mod/thewire/views/default/thewire/css.php index c1c7b5bcb..d11cce74a 100644 --- a/mod/thewire/views/default/thewire/css.php +++ b/mod/thewire/views/default/thewire/css.php @@ -5,7 +5,7 @@ ?> /******************************** - The Wire +The Wire *********************************/ #thewire-textarea { height: 40px; @@ -27,100 +27,9 @@ text-align: right; background: white; } -<?php -return true; -?> - -/* new wire post form */ -.new_wire_post { - margin:10px 0 15px 0; - padding-bottom:15px; - border-bottom: 1px solid #dedede; -} -.new_wire_post input[type="submit"] { - margin:3px 0 0 0; - float:right; -} -.new_wire_post textarea { - width: 719px; - height: 52px; - padding: 2px 5px 5px 5px; - font-size: 120%; - color:#333333; -} -.character_count { - width: 642px; - color:#666666; -} -.character_count input { - color:#666666; - border:none; - font-size: 100%; - font-weight: bold; - padding:0 2px 0 0; - margin:0; - text-align: right; - background: white; -} -.character_count input:focus { - border:none; - background:white; -} - - -/* wire posts listings */ -.wire_post { - padding-bottom:10px; - margin-bottom:5px; - background-image: url(<?php echo elgg_get_site_url(); ?>mod/thewire/graphics/thewire_speech_bubble.gif); - background-repeat: no-repeat; - background-position: right bottom; -} -.members-list .wire_post { /* when displayed in lists of friends */ - margin-top:4px; -} -.wire_post_contents { - background-color: #eeeeee; - margin:0; - padding:5px; - line-height: 1.2em; - min-height: 34px; - position: relative; -} -.wire_post_icon { - float:left; - margin-right:8px; +.thewire-characters-remaining-warning { + color: #D40D12 !important; } -.wire_post_info { - margin-top:-3px; - float:left; - width:620px; - overflow: hidden; -} -.wire_post_options { - float:right; - width:65px; -} -.wire_post_options .elgg-button-action.reply.small { - float:right; -} -.wire_post_options .delete-button { - position: absolute; - bottom:5px; - right:5px; -} - - -/* latest wire post on profile page */ -.wire_post .elgg-button-action.update.small { - float:right; - padding:4px; - position: absolute; - bottom:5px; - right:5px; -} - -/* river wire entry */ -.river_item .reply_link { - display:block; +.thewire-parent { + margin-left: 40px; } diff --git a/mod/thewire/views/default/thewire/metadata.php b/mod/thewire/views/default/thewire/metadata.php deleted file mode 100644 index da749c97f..000000000 --- a/mod/thewire/views/default/thewire/metadata.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** - * - */ - -$entity = $vars['entity']; -$handler = elgg_extract('handler', $vars, ''); - -?> -<ul class="elgg-list-metadata"> -<?php -if (elgg_is_logged_in()) { - echo '<li>'; - echo elgg_view('output/url', array( - 'href' => "pg/thewire/reply/$entity->guid", - 'text' => elgg_echo('thewire:reply'), - )); - echo '</li>'; -} - -if ($entity->reply) { - echo '<li>'; - echo elgg_view('output/url', array( - 'href' => "pg/thewire/previous/$entity->guid", - 'text' => elgg_echo('thewire:previous'), - )); - echo '</li>'; -} - -echo '<li>'; -echo elgg_view('output/url', array( - 'href' => 'pg/thewire/thread/' . $entity->wire_thread, - 'text' => elgg_echo('thewire:thread'), -)); -echo '</li>'; - - -// links to delete or edit. -if ($entity->canEdit() && $handler) { - - $delete_url = "action/$handler/delete?guid={$entity->getGUID()}"; - $delete_link = elgg_view('output/confirmlink', array( - 'href' => $delete_url, - 'text' => '<span class="elgg-icon elgg-icon-delete"></span>', - 'title' => elgg_echo('delete'), - 'confirm' => elgg_echo('deleteconfirm'), - 'text_encode' => false, - )); - echo "<li>$delete_link</li>"; -} - -$likes = elgg_view_likes($entity); -echo "<li>$likes</li>"; - -?> -</ul>
\ No newline at end of file diff --git a/mod/thewire/pages/previous.php b/mod/thewire/views/default/thewire/previous.php index 05fc3267e..e1ca83e24 100644 --- a/mod/thewire/pages/previous.php +++ b/mod/thewire/views/default/thewire/previous.php @@ -1,6 +1,6 @@ <?php /** - * Server up html for a post + * Serve up html for a post */ $guid = (int) get_input('guid'); @@ -8,4 +8,4 @@ $guid = (int) get_input('guid'); $parent = thewire_get_parent($guid); if ($parent) { echo elgg_view_entity($parent); -}
\ No newline at end of file +} diff --git a/mod/thewire/views/default/thewire/profile_status.php b/mod/thewire/views/default/thewire/profile_status.php index 9ff0c4d59..26e1403fe 100644 --- a/mod/thewire/views/default/thewire/profile_status.php +++ b/mod/thewire/views/default/thewire/profile_status.php @@ -1,15 +1,16 @@ <?php /** * Latest wire post on profile page + * + * @uses $vars['entity'] User that owns this profile page */ - + $owner = $vars['entity']->guid; -$url_to_wire = elgg_get_site_url() . "pg/thewire/owner/" . $vars['entity']->username; //grab the user's latest from the wire $params = array( - 'types' => 'object', - 'subtypes' => 'thewire', + 'type' => 'object', + 'subtype' => 'thewire', 'owner_guid' => $owner, 'limit' => 1, ); @@ -18,14 +19,26 @@ $latest_wire = elgg_get_entities($params); if ($latest_wire && count($latest_wire) > 0) { $latest_wire = $latest_wire[0]; $content = thewire_filter($latest_wire->description); - $time = "<p class='entity-subtext'> (" . elgg_view_friendly_time($latest_wire->time_created) . ")</p>"; + $time = "<p class='elgg-subtext'>(" . elgg_view_friendly_time($latest_wire->time_created) . ")</p>"; - echo "<div class='wire_post'><div class='wire_post_contents clearfix radius8'>"; - echo $content; + $button = ''; if ($owner == elgg_get_logged_in_user_guid()) { - $text = elgg_echo('thewire:update'); - echo "<a class='elgg-button-action update small' href=\"{$url_to_wire}\">$text</a>"; + $url_to_wire = "thewire/owner/" . $vars['entity']->username; + $button = elgg_view('output/url', array( + 'text' => elgg_echo('thewire:update'), + 'href' => $url_to_wire, + 'class' => 'elgg-button elgg-button-action float-alt', + 'is_trusted' => true, + )); } - echo $time; - echo "</div></div>"; + + $body = $content . $time; + $content = elgg_view_image_block('', $body, array('image_alt' => $button)); + + echo <<< HTML +<div class="wire-status elgg-border-plain pam mbm clearfix"> + $content +</div> +HTML; + } 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/thewire/views/default/thewire/sidebar.php b/mod/thewire/views/default/thewire/sidebar.php new file mode 100644 index 000000000..a8aadd1f8 --- /dev/null +++ b/mod/thewire/views/default/thewire/sidebar.php @@ -0,0 +1,9 @@ +<?php +/** + * The wire sidebar + */ + +echo elgg_view('page/elements/tagcloud_block', array( + 'subtypes' => 'thewire', + 'owner_guid' => elgg_get_page_owner_guid(), +)); diff --git a/mod/thewire/views/default/widgets/thewire/content.php b/mod/thewire/views/default/widgets/thewire/content.php index a8471a4b1..7212d4397 100644 --- a/mod/thewire/views/default/widgets/thewire/content.php +++ b/mod/thewire/views/default/widgets/thewire/content.php @@ -18,10 +18,11 @@ $content = elgg_list_entities($options); echo $content; if ($content) { - $owner_url = "pg/thewire/owner/" . elgg_get_page_owner_entity()->username; + $owner_url = "thewire/owner/" . elgg_get_page_owner_entity()->username; $more_link = elgg_view('output/url', array( 'href' => $owner_url, 'text' => elgg_echo('thewire:moreposts'), + 'is_trusted' => true, )); echo "<span class=\"elgg-widget-more\">$more_link</span>"; } else { diff --git a/mod/thewire/views/rss/object/thewire.php b/mod/thewire/views/rss/object/thewire.php index fbbb670b7..8fddb8aa8 100644 --- a/mod/thewire/views/rss/object/thewire.php +++ b/mod/thewire/views/rss/object/thewire.php @@ -2,47 +2,35 @@ /** * Elgg thewire rss view * - * @package Elgg - * @subpackage Core + * @package ElggTheWire */ $owner = $vars['entity']->getOwnerEntity(); -if ($owner) { - $title = elgg_echo('thewire:by', array($owner->name)); -} else { - $subtitle = strip_tags($vars['entity']->description); - $title = substr($subtitle,0,32); - if (strlen($subtitle) > 32) { - $title .= " ..."; - } +if (!$owner) { + return true; } -?> +$title = elgg_echo('thewire:by', array($owner->name)); +$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8'); +$pubdate = date('r', $vars['entity']->getTimeCreated()); + +$description = elgg_autop($vars['entity']->description); + +$creator = elgg_view('page/components/creator', $vars); +$georss = elgg_view('page/components/georss', $vars); +$extension = elgg_view('extensions/item', $vars); + +$item = <<<__HTML <item> -<guid isPermaLink='false'><?php echo $vars['entity']->getGUID(); ?></guid> -<pubDate><?php echo date("r",$vars['entity']->time_created) ?></pubDate> -<link><?php echo htmlspecialchars($vars['entity']->getURL()); ?></link> -<title><![CDATA[<?php echo $title; ?>]]></title> -<description><![CDATA[<?php echo (autop($vars['entity']->description)); ?>]]></description> -<?php - $owner = $vars['entity']->getOwnerEntity(); - if ($owner) { -?> -<dc:creator><?php echo $owner->name; ?></dc:creator> -<?php - } -?> -<?php - if ( - ($vars['entity'] instanceof Locatable) && - ($vars['entity']->getLongitude()) && - ($vars['entity']->getLatitude()) - ) { - ?> - <georss:point><?php echo $vars['entity']->getLatitude(); ?> <?php echo $vars['entity']->getLongitude(); ?></georss:point> - <?php - } -?> -<?php echo elgg_view('extensions/item'); ?> + <guid isPermaLink="true">$permalink</guid> + <pubDate>$pubdate</pubDate> + <link>$permalink</link> + <title><![CDATA[$title]]></title> + <description><![CDATA[$description]]></description> + $creator$georss$extension </item> + +__HTML; + +echo $item; |
