From 5f6dc365a8445a48156b45912827eac39fd64fc5 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Sun, 16 Mar 2014 21:01:42 -0300 Subject: Squashed 'mod/subgroups/' content from commit 835015b git-subtree-dir: mod/subgroups git-subtree-split: 835015b66b9de6dc6de91ab39f95e1f09b2dbf84 --- start.php | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 start.php (limited to 'start.php') diff --git a/start.php b/start.php new file mode 100644 index 000000000..803567f18 --- /dev/null +++ b/start.php @@ -0,0 +1,211 @@ +canEdit() || elgg_is_admin_logged_in()) { + $url = elgg_get_site_url() . "subgroups/edit/{$page_owner->getGUID()}"; + elgg_register_menu_item('page', array( + 'name' => 'subgroups', + 'text' => elgg_echo('subgroups:add'), + 'href' => $url, + )); + } + } + } +} + +/** + * Dispatches subgroups pages. + * URLs take the form of + * + * Group view subgroups: subgroups/owner/ + * Group manage subgroups: subgroups/manage/ + * + * @param array $page + * @return NULL + */ +function subgroups_page_handler($page){ + $pages_path = elgg_get_plugins_path() . "subgroups/pages"; + + switch($page[0]) { + case 'add': + case 'edit': + elgg_set_page_owner_guid($page[1]); + include($pages_path."/subgroups/edit.php"); + break; + case 'owner': + elgg_set_page_owner_guid($page[1]); + include($pages_path."/subgroups/owner.php"); + break; + case 'new': + $group = new ElggGroup((int)$page[1]); + + if (!$group->guid) { + register_error(elgg_echo('error:default')); + return false; + } + + elgg_load_library('elgg:groups'); + $title = elgg_echo('subgroups:new:of', array($group->name)); + + elgg_push_breadcrumb(elgg_echo('groups'), "groups/all"); + elgg_push_breadcrumb($group->name, $group->getURL()); + elgg_push_breadcrumb(elgg_echo('subgroups:new')); + + set_input('container_guid', $group->guid); + + $body = elgg_view_layout('content', array( + 'content' => elgg_view('groups/edit'), + 'title' => $title, + 'filter' => '', + )); + echo elgg_view_page($title, $body); + + break; + default: + return false; + } + return true; +} + +function subgroups_menu_setup($hook, $type, $return, $params){ + + $group = elgg_get_page_owner_entity(); + $othergroup = $params['entity']; + + if($group instanceof ElggGroup && $group->canEdit() && + $othergroup instanceof ElggGroup && + elgg_in_context('subgroups')){ + + // Delete all previous links + $return = array(); + + $url = elgg_http_add_url_query_elements('action/subgroups/remove', array( + 'group' => $group->guid, + 'othergroup' => $othergroup->guid, + )); + + $options = array( + 'name' => 'delete', + 'href' => $url, + 'text' => "", + 'confirm' => elgg_echo('deleteconfirm'), + 'text_encode' => false, + ); + $return[] = ElggMenuItem::factory($options); + } + return $return; +} + +/** + * Unset container guid when a group is created. Triggered on group save. + * Using SQL since event is triggered on save() function and we can't do + * call the function again. + * + */ +function subgroups_unset_group_container($event, $object_type, $entity) { + global $CONFIG; + if (!elgg_instanceof($entity->getContainerEntity(), 'group')) { + $query = "UPDATE {$CONFIG->dbprefix}entities set" + . " container_guid=0 where guid={$entity->guid}"; + return !!(update_data($query)); + } + return true; +} + +function subgroups_add_container_field($hook, $type, $return, $params) { + $return['container_guid'] = 'hidden'; + return $return; +} + +/** + * Hook to listen to read access control requests and return parent groups. + */ +function subgroups_read_acl_plugin_hook($hook, $entity_type, $returnvalue, $params) { + $page_owner = elgg_get_page_owner_entity(); + $user_guid = $params['user_id']; + $user = get_entity($user_guid); + if (!$user) { + return $returnvalue; + } + + // only insert group access for current group + if ($page_owner instanceof ElggGroup) { + $parent_group = $page_owner->getContainerEntity(); + while ($parent_group) { + $returnvalue[$parent_group->group_acl] = elgg_echo('groups:group') . ': ' . $parent_group->name; + $parent_group = $parent_group->getContainerEntity(); + } + } + + return $returnvalue; +} -- cgit v1.2.3