diff options
Diffstat (limited to 'mod/thewire/start.php')
-rw-r--r-- | mod/thewire/start.php | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/mod/thewire/start.php b/mod/thewire/start.php new file mode 100644 index 000000000..2d65bb517 --- /dev/null +++ b/mod/thewire/start.php @@ -0,0 +1,214 @@ +<?php
+
+ /**
+ * Elgg wire plugin
+ * The wire is simple twitter like plugin that allows users to post notes to the wire
+ *
+ * @package ElggTheWire
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider <info@elgg.com>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.com/
+ */
+
+ /**
+ * thewire initialisation
+ *
+ * These parameters are required for the event API, but we won't use them:
+ *
+ * @param unknown_type $event
+ * @param unknown_type $object_type
+ * @param unknown_type $object
+ */
+
+ function thewire_init() {
+
+ // Load system configuration
+ global $CONFIG;
+
+ // Set up menu for logged in users
+ if (isloggedin()) {
+
+ add_menu(elgg_echo('thewire'), $CONFIG->wwwroot . "mod/thewire/everyone.php");
+
+ }
+
+ // Extend system CSS with our own styles, which are defined in the thewire/css view
+ extend_view('css','thewire/css');
+
+ //extend views
+ extend_view('activity/thewire', 'thewire/activity_view');
+ extend_view('profile/status', 'thewire/profile_status');
+
+ // Register a page handler, so we can have nice URLs
+ register_page_handler('thewire','thewire_page_handler');
+
+ // Register a URL handler for thewire posts
+ register_entity_url_handler('thewire_url','object','thewire');
+
+ // Your thewire widget
+ add_widget_type('thewire',elgg_echo("thewire:read"),elgg_echo("thewire:yourdesc"));
+
+ // Register entity type
+ register_entity_type('object','thewire');
+
+ // Listen for SMS create event
+ register_elgg_event_handler('create','object','thewire_incoming_sms');
+
+ // Register granular notification for this type
+ if (is_callable('register_notification_object'))
+ register_notification_object('object', 'thewire', elgg_echo('thewire:newpost'));
+
+ // Listen to notification events and supply a more useful message for SMS'
+ register_plugin_hook('notify:entity:message', 'object', 'thewire_notify_message');
+ }
+
+ function thewire_pagesetup() {
+
+ global $CONFIG;
+
+ //add submenu options
+ if (get_context() == "thewire") {
+ if ((page_owner() == $_SESSION['guid'] || !page_owner()) && isloggedin()) {
+ add_submenu_item(elgg_echo('thewire:read'),$CONFIG->wwwroot."pg/thewire/" . $_SESSION['user']->username);
+ add_submenu_item(elgg_echo('thewire:everyone'),$CONFIG->wwwroot."mod/thewire/everyone.php");
+ add_submenu_item(elgg_echo('thewire:add'),$CONFIG->wwwroot."mod/thewire/add.php");
+ }
+ }
+
+ }
+
+ /**
+ * thewire page handler; allows the use of fancy URLs
+ *
+ * @param array $page From the page_handler function
+ * @return true|false Depending on success
+ */
+ function thewire_page_handler($page) {
+
+ // The first component of a thewire URL is the username
+ if (isset($page[0])) {
+ set_input('username',$page[0]);
+ }
+
+ // The second part dictates what we're doing
+ if (isset($page[1])) {
+ switch($page[1]) {
+ case "friends": // TODO: add friends thewire page here
+ break;
+ }
+ // If the URL is just 'thewire/username', or just 'thewire/', load the standard thewire index
+ } else {
+ @include(dirname(__FILE__) . "/index.php");
+ return true;
+ }
+
+ return false;
+
+ }
+
+ function thewire_url($thewirepost) {
+
+ global $CONFIG;
+ return $CONFIG->url . "pg/thewire/" . $thewirepost->getOwnerEntity()->username;
+
+ }
+
+ /**
+ * Returns a more meaningful message for SMS messages.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ */
+ function thewire_notify_message($hook, $entity_type, $returnvalue, $params)
+ {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+ if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'thewire'))
+ {
+ $descr = $entity->description;
+ if ($method == 'sms') {
+ $owner = $entity->getOwnerEntity();
+ return $owner->username . ': ' . $descr;
+ }
+ if ($method == 'email') {
+ $owner = $entity->getOwnerEntity();
+ return $owner->username . ': ' . $descr . "\n\n" . $entity->getURL();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Create a new wire post.
+ *
+ * @param string $post The post
+ * @param int $access_id Public/private etc
+ * @param int $parent Parent post (if any)
+ * @param string $method The method (default: 'site')
+ * @return bool
+ */
+ function thewire_save_post($post, $access_id, $parent=0, $method = "site")
+ {
+ // Initialise a new ElggObject
+ $thewire = new ElggObject();
+
+ // Tell the system it's a thewire post
+ $thewire->subtype = "thewire";
+
+ // Set its owner to the current user
+ $thewire->owner_guid = get_loggedin_userid();
+
+ // For now, set its access to public (we'll add an access dropdown shortly)
+ $thewire->access_id = $access_id;
+
+ // Set its description appropriately
+ $thewire->description = $post;
+
+ // add some metadata
+ $thewire->method = $method; //method, e.g. via site, sms etc
+ $thewire->parent = $parent; //used if the note is a reply
+
+ //save
+ $save = $thewire->save();
+
+ if($save)
+ add_to_river('river/object/thewire/create','create',$_SESSION['user']->guid,$thewire->guid);
+
+ return $save;
+
+ }
+
+ /**
+ * Listen and process incoming SMS'
+ */
+ function thewire_incoming_sms($event, $object_type, $object)
+ {
+ if (($object) && ($object->subtype == get_subtype_id('object', 'sms')))
+ {
+ // Get user from phone number
+ if ((is_plugin_enabled('smsclient')) && (is_plugin_enabled('smslogin')))
+ {
+ // By this stage the owner should be logged in (requires SMS Login)
+ if (thewire_save_post($object->description, 2, 0, 'sms'))
+ return false;
+
+ }
+ }
+
+ return true; // always create the shout even if it can't be sent
+ }
+
+ // Make sure the thewire initialisation function is called on initialisation
+ register_elgg_event_handler('init','system','thewire_init');
+ register_elgg_event_handler('pagesetup','system','thewire_pagesetup');
+
+ // Register actions
+ global $CONFIG;
+ register_action("thewire/add",false,$CONFIG->pluginspath . "thewire/actions/add.php");
+ register_action("thewire/delete",false,$CONFIG->pluginspath . "thewire/actions/delete.php");
+
+?>
\ No newline at end of file |