diff options
Diffstat (limited to 'mod/messageboard/start.php')
| -rw-r--r-- | mod/messageboard/start.php | 119 |
1 files changed, 96 insertions, 23 deletions
diff --git a/mod/messageboard/start.php b/mod/messageboard/start.php index 197504d0e..0c65edc4f 100644 --- a/mod/messageboard/start.php +++ b/mod/messageboard/start.php @@ -1,47 +1,94 @@ <?php - /** * Elgg Message board * This plugin allows users and groups to attach a message board to their profile for other users * to post comments. * - * @package ElggMessageBoard + * @package MessageBoard */ /** * MessageBoard initialisation */ function messageboard_init() { + // js + elgg_extend_view('js/elgg', 'messageboard/js'); - // Extend system CSS with our own styles, which are defined in the messageboard/css view - elgg_extend_view('css/screen', 'messageboard/css'); + // css + elgg_extend_view('css/elgg', 'messageboard/css'); - // Register a page handler, so we can have nice URLs - register_page_handler('messageboard', 'messageboard_page_handler'); + elgg_register_page_handler('messageboard', 'messageboard_page_handler'); - // add a messageboard widget - only for profile - add_widget_type('messageboard', elgg_echo("messageboard:board"), elgg_echo("messageboard:desc"), "profile"); + // messageboard widget - only for profile for now + elgg_register_widget_type('messageboard', elgg_echo("messageboard:board"), elgg_echo("messageboard:desc"), "profile"); - // Register actions - $action_path = elgg_get_plugin_path() . 'messageboard/actions'; + // actions + $action_path = dirname(__FILE__) . '/actions'; elgg_register_action("messageboard/add", "$action_path/add.php"); elgg_register_action("messageboard/delete", "$action_path/delete.php"); + + // delete annotations for posts + elgg_register_plugin_hook_handler('register', 'menu:annotation', 'messageboard_annotation_menu_setup'); } /** - * Messageboard page handler + * Messageboard dispatcher for flat message board. + * Profile (and eventually group) widgets handle their own. * - * @param array $page Array of page elements, forwarded by the page handling mechanism + * URLs take the form of + * User's messageboard: messageboard/owner/<username> + * Y's history of posts on X's board: messageboard/owner/<X>/history/<Y> + * New post: messageboard/add/<guid> (container: user or group) + * Group messageboard: messageboard/group/<guid>/all (not implemented) + * + * @param array $page Array of page elements + * @return bool */ function messageboard_page_handler($page) { + $new_section_one = array('owner', 'add', 'group'); - // The username should be the first array entry - if (isset($page[0])) { - set_input('username', $page[0]); + // if the first part is a username, forward to new format + if (isset($page[0]) && !in_array($page[0], $new_section_one) && get_user_by_username($page[0])) { + register_error(elgg_echo("changebookmark")); + $url = "messageboard/owner/{$page[0]}"; + forward($url); } - // Include the standard messageboard index - include(elgg_get_plugin_path() . "messageboard/index.php"); + $pages = dirname(__FILE__) . '/pages/messageboard'; + + switch ($page[0]) { + case 'owner': + //@todo if they have the widget disabled, don't allow this. + $owner_name = elgg_extract(1, $page); + $owner = get_user_by_username($owner_name); + set_input('page_owner_guid', $owner->guid); + $history = elgg_extract(2, $page); + $username = elgg_extract(3, $page); + + if ($history && $username) { + set_input('history_username', $username); + } + + include "$pages/owner.php"; + break; + + case 'add': + $container_guid = elgg_extract(1, $page); + set_input('container_guid', $container_guid); + include "$pages/add.php"; + break; + + case 'group': + group_gatekeeper(); + $owner_guid = elgg_extract(1, $page); + set_input('page_owner_guid', $owner_guid); + include "$pages/owner.php"; + break; + + default: + return false; + } + return true; } /** @@ -54,10 +101,10 @@ function messageboard_page_handler($page) { * @return bool */ function messageboard_add($poster, $owner, $message, $access_id = ACCESS_PUBLIC) { - $result = $owner->annotate('messageboard', $message, $access_id, $poster->guid); + if (!$result) { - return FALSE; + return false; } add_to_river('river/object/messageboard/create', @@ -74,7 +121,7 @@ function messageboard_add($poster, $owner, $message, $access_id = ACCESS_PUBLIC) $body = elgg_echo('messageboard:email:body', array( $poster->name, $message, - elgg_get_site_url() . "pg/messageboard/" . $owner->username, + elgg_get_site_url() . "messageboard/" . $owner->username, $poster->name, $poster->getURL() )); @@ -82,9 +129,35 @@ function messageboard_add($poster, $owner, $message, $access_id = ACCESS_PUBLIC) notify_user($owner->guid, $poster->guid, $subject, $body); } - return TRUE; + return $result; } -// Register initialisation callback -elgg_register_event_handler('init', 'system', 'messageboard_init'); +/** + * Add edit and delete links for forum replies + */ +function messageboard_annotation_menu_setup($hook, $type, $return, $params) { + $annotation = $params['annotation']; + if ($annotation->name != 'messageboard') { + return $return; + } + + if ($annotation->canEdit()) { + $url = elgg_http_add_url_query_elements('action/messageboard/delete', array( + 'annotation_id' => $annotation->id, + )); + + $options = array( + 'name' => 'delete', + 'href' => $url, + 'text' => "<span class=\"elgg-icon elgg-icon-delete\"></span>", + 'confirm' => elgg_echo('deleteconfirm'), + 'encode_text' => false + ); + $return[] = ElggMenuItem::factory($options); + } + + return $return; +} + +elgg_register_event_handler('init', 'system', 'messageboard_init');
\ No newline at end of file |
