From 1bcc2d793704bf43f6ecf9a01259e9cd6f6f8b2a Mon Sep 17 00:00:00 2001 From: cash Date: Fri, 4 Mar 2011 01:26:36 +0000 Subject: updated the group actions - edit group needs more work git-svn-id: http://code.elgg.org/elgg/trunk@8573 36083f99-b078-4883-b0ff-0f9b5a30f544 --- mod/groups/actions/addtogroup.php | 77 ---------- mod/groups/actions/delete.php | 32 ---- mod/groups/actions/edit.php | 161 --------------------- mod/groups/actions/featured.php | 27 ---- mod/groups/actions/groups/delete.php | 37 +++++ mod/groups/actions/groups/edit.php | 152 +++++++++++++++++++ mod/groups/actions/groups/featured.php | 26 ++++ mod/groups/actions/groups/membership/add.php | 42 ++++++ .../actions/groups/membership/delete_invite.php | 20 +++ .../actions/groups/membership/delete_request.php | 20 +++ mod/groups/actions/groups/membership/invite.php | 51 +++++++ mod/groups/actions/groups/membership/join.php | 70 +++++++++ mod/groups/actions/groups/membership/leave.php | 36 +++++ mod/groups/actions/groupskillinvitation.php | 20 --- mod/groups/actions/groupskillrequest.php | 20 --- mod/groups/actions/invite.php | 54 ------- mod/groups/actions/join.php | 50 ------- mod/groups/actions/joinrequest.php | 70 --------- mod/groups/actions/leave.php | 36 ----- mod/groups/start.php | 48 ++++-- .../views/default/groups/invitationrequests.php | 55 ++++--- .../views/default/groups/profile/buttons.php | 6 +- 22 files changed, 522 insertions(+), 588 deletions(-) delete mode 100644 mod/groups/actions/addtogroup.php delete mode 100644 mod/groups/actions/delete.php delete mode 100644 mod/groups/actions/edit.php delete mode 100644 mod/groups/actions/featured.php create mode 100644 mod/groups/actions/groups/delete.php create mode 100644 mod/groups/actions/groups/edit.php create mode 100644 mod/groups/actions/groups/featured.php create mode 100644 mod/groups/actions/groups/membership/add.php create mode 100644 mod/groups/actions/groups/membership/delete_invite.php create mode 100644 mod/groups/actions/groups/membership/delete_request.php create mode 100644 mod/groups/actions/groups/membership/invite.php create mode 100644 mod/groups/actions/groups/membership/join.php create mode 100644 mod/groups/actions/groups/membership/leave.php delete mode 100644 mod/groups/actions/groupskillinvitation.php delete mode 100644 mod/groups/actions/groupskillrequest.php delete mode 100644 mod/groups/actions/invite.php delete mode 100644 mod/groups/actions/join.php delete mode 100644 mod/groups/actions/joinrequest.php delete mode 100644 mod/groups/actions/leave.php diff --git a/mod/groups/actions/addtogroup.php b/mod/groups/actions/addtogroup.php deleted file mode 100644 index d75c5fdb8..000000000 --- a/mod/groups/actions/addtogroup.php +++ /dev/null @@ -1,77 +0,0 @@ -guid); - - if ($user && $group) { - - //if (elgg_get_logged_in_user_guid() == $group->owner_guid) - if ($group->canEdit()) { - - // If the group is open or the user has requested membership - if ( - (check_entity_relationship($user->guid, 'membership_request', $group->guid)) || - ($group->isPublicMembership()) - ) { - - if (!$group->isMember($user)) { - // Remove relationships - remove_entity_relationship($group->guid, 'invited', $user->guid); - remove_entity_relationship($user->guid, 'membership_request', $group->guid); - - //add_entity_relationship($user->guid, 'member', $group->guid); - $group->join($user); - - // send welcome email - notify_user($user->getGUID(), $group->owner_guid, - elgg_echo('groups:welcome:subject', array($group->name)), - elgg_echo('groups:welcome:body', array($user->name, $group->name, $group->getURL())), - NULL); - - system_message(elgg_echo('groups:addedtogroup')); - } - else - register_error(elgg_echo("groups:cantjoin")); - } - else { - if ($user->isFriend()) { - - // Create relationship - add_entity_relationship($group->guid, 'invited', $user->guid); - - // Send email - $url = elgg_get_site_url() . "pg/groups/invited?user_guid={$user->guid}&group_guid={$group->guid}"; - if (notify_user($user->getGUID(), $group->owner_guid, - elgg_echo('groups:invite:subject', array($user->name, $group->name)), - elgg_echo('groups:invite:body', array($user->name, $logged_in_user->name, $group->name, $url)), - NULL)) - system_message(elgg_echo("groups:userinvited")); - else - register_error(elgg_echo("groups:usernotinvited")); - } - else - register_error(elgg_echo("groups:usernotinvited")); - } - } - else - register_error(elgg_echo("groups:notowner")); - } - } -} - -forward(REFERER); diff --git a/mod/groups/actions/delete.php b/mod/groups/actions/delete.php deleted file mode 100644 index 6eed12a9c..000000000 --- a/mod/groups/actions/delete.php +++ /dev/null @@ -1,32 +0,0 @@ -owner_guid; - $prefix = "groups/" . $entity->guid; - $imagenames = array('.jpg', 'tiny.jpg', 'small.jpg', 'medium.jpg', 'large.jpg'); - $img = new ElggFile(); - $img->owner_guid = $owner_guid; - foreach ($imagenames as $name) { - $img->setFilename($prefix . $name); - $img->delete(); - } - - // delete group - if ($entity->delete()) { - system_message(elgg_echo('group:deleted')); - } else { - register_error(elgg_echo('group:notdeleted')); - } -} else { - register_error(elgg_echo('group:notdeleted')); -} - -$url_name = elgg_get_logged_in_user_entity()->username; -forward(elgg_get_site_url() . "pg/groups/member/{$url_name}"); diff --git a/mod/groups/actions/edit.php b/mod/groups/actions/edit.php deleted file mode 100644 index baa1a7065..000000000 --- a/mod/groups/actions/edit.php +++ /dev/null @@ -1,161 +0,0 @@ -group as $shortname => $valuetype) { - // another work around for Elgg's encoding problems: #561, #1963 - $input[$shortname] = get_input($shortname); - if (is_array($input[$shortname])) { - array_walk_recursive($input[$shortname], 'profile_array_decoder'); - } else { - $input[$shortname] = html_entity_decode($input[$shortname], ENT_COMPAT, 'UTF-8'); - } - - if ($valuetype == 'tags') { - $input[$shortname] = string_to_tag_array($input[$shortname]); - } -} - -$input['name'] = get_input('name'); -$input['name'] = html_entity_decode($input['name'], ENT_COMPAT, 'UTF-8'); - -$user = elgg_get_logged_in_user_entity(); - -$group_guid = (int)get_input('group_guid'); -$new_group_flag = $group_guid == 0; - -$group = new ElggGroup($group_guid); // load if present, if not create a new group -if (($group_guid) && (!$group->canEdit())) { - register_error(elgg_echo("groups:cantedit")); - - forward(REFERER); - exit; -} - -// Assume we can edit or this is a new group -if (sizeof($input) > 0) { - foreach($input as $shortname => $value) { - $group->$shortname = $value; - } -} - -// Validate create -if (!$group->name) { - register_error(elgg_echo("groups:notitle")); - - forward(REFERER); - exit; -} - -// Group membership - should these be treated with same constants as access permissions? -switch (get_input('membership')) { - case ACCESS_PUBLIC: - $group->membership = ACCESS_PUBLIC; - break; - default: - $group->membership = ACCESS_PRIVATE; -} - -// Set access - all groups are public from elgg's point of view, unless the override is in place -if (elgg_get_plugin_setting('hidden_groups', 'groups') == 'yes') { - $visibility = (int)get_input('vis','',false); - - $group->access_id = $visibility; -} else { - $group->access_id = ACCESS_PUBLIC; -} - -// Set group tool options -//$group->files_enable = get_input('files_enable', 'yes'); -//$group->pages_enable = get_input('pages_enable', 'yes'); -//$group->forum_enable = get_input('forum_enable', 'yes'); - -// Set group tool options -if (isset($CONFIG->group_tool_options)) { - foreach($CONFIG->group_tool_options as $group_option) { - $group_option_toggle_name = $group_option->name."_enable"; - if ($group_option->default_on) { - $group_option_default_value = 'yes'; - } else { - $group_option_default_value = 'no'; - } - $group->$group_option_toggle_name = get_input($group_option_toggle_name, $group_option_default_value); - } -} - -$group->save(); - -// group creator needs to be member of new group and river entry created -if ($new_group_flag) { - set_page_owner($group->guid); - $group->join($user); - add_to_river('river/group/create', 'create', $user->guid, $group->guid); -} - - - -// Now see if we have a file icon -if ((isset($_FILES['icon'])) && (substr_count($_FILES['icon']['type'],'image/'))) { - $prefix = "groups/".$group->guid; - - $filehandler = new ElggFile(); - $filehandler->owner_guid = $group->owner_guid; - $filehandler->setFilename($prefix . ".jpg"); - $filehandler->open("write"); - $filehandler->write(get_uploaded_file('icon')); - $filehandler->close(); - - $thumbtiny = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),25,25, true); - $thumbsmall = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),40,40, true); - $thumbmedium = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),100,100, true); - $thumblarge = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),200,200, false); - if ($thumbtiny) { - - $thumb = new ElggFile(); - $thumb->owner_guid = $group->owner_guid; - $thumb->setMimeType('image/jpeg'); - - $thumb->setFilename($prefix."tiny.jpg"); - $thumb->open("write"); - $thumb->write($thumbtiny); - $thumb->close(); - - $thumb->setFilename($prefix."small.jpg"); - $thumb->open("write"); - $thumb->write($thumbsmall); - $thumb->close(); - - $thumb->setFilename($prefix."medium.jpg"); - $thumb->open("write"); - $thumb->write($thumbmedium); - $thumb->close(); - - $thumb->setFilename($prefix."large.jpg"); - $thumb->open("write"); - $thumb->write($thumblarge); - $thumb->close(); - - $group->icontime = time(); - } -} - -system_message(elgg_echo("groups:saved")); - - -forward($group->getUrl()); - diff --git a/mod/groups/actions/featured.php b/mod/groups/actions/featured.php deleted file mode 100644 index 72ca7eebd..000000000 --- a/mod/groups/actions/featured.php +++ /dev/null @@ -1,27 +0,0 @@ -featured_group = "yes"; - system_message(elgg_echo('groups:featuredon')); - } - - if ($action == "unfeature") { - $group->featured_group = "no"; - system_message(elgg_echo('groups:unfeatured')); - } -} - -forward(REFERER); diff --git a/mod/groups/actions/groups/delete.php b/mod/groups/actions/groups/delete.php new file mode 100644 index 000000000..9ed7954dc --- /dev/null +++ b/mod/groups/actions/groups/delete.php @@ -0,0 +1,37 @@ +canEdit()) { + register_error(elgg_echo('group:notdeleted')); + forward(REFERER); +} + +if (($entity) && ($entity instanceof ElggGroup)) { + // delete group icons + $owner_guid = $entity->owner_guid; + $prefix = "groups/" . $entity->guid; + $imagenames = array('.jpg', 'tiny.jpg', 'small.jpg', 'medium.jpg', 'large.jpg'); + $img = new ElggFile(); + $img->owner_guid = $owner_guid; + foreach ($imagenames as $name) { + $img->setFilename($prefix . $name); + $img->delete(); + } + + // delete group + if ($entity->delete()) { + system_message(elgg_echo('group:deleted')); + } else { + register_error(elgg_echo('group:notdeleted')); + } +} else { + register_error(elgg_echo('group:notdeleted')); +} + +$url_name = elgg_get_logged_in_user_entity()->username; +forward(elgg_get_site_url() . "pg/groups/member/{$url_name}"); diff --git a/mod/groups/actions/groups/edit.php b/mod/groups/actions/groups/edit.php new file mode 100644 index 000000000..b3c39c461 --- /dev/null +++ b/mod/groups/actions/groups/edit.php @@ -0,0 +1,152 @@ +group as $shortname => $valuetype) { + // another work around for Elgg's encoding problems: #561, #1963 + $input[$shortname] = get_input($shortname); + if (is_array($input[$shortname])) { + array_walk_recursive($input[$shortname], 'profile_array_decoder'); + } else { + $input[$shortname] = html_entity_decode($input[$shortname], ENT_COMPAT, 'UTF-8'); + } + + if ($valuetype == 'tags') { + $input[$shortname] = string_to_tag_array($input[$shortname]); + } +} + +$input['name'] = get_input('name'); +$input['name'] = html_entity_decode($input['name'], ENT_COMPAT, 'UTF-8'); + +$user = elgg_get_logged_in_user_entity(); + +$group_guid = (int)get_input('group_guid'); +$new_group_flag = $group_guid == 0; + +$group = new ElggGroup($group_guid); // load if present, if not create a new group +if (($group_guid) && (!$group->canEdit())) { + register_error(elgg_echo("groups:cantedit")); + + forward(REFERER); +} + +// Assume we can edit or this is a new group +if (sizeof($input) > 0) { + foreach($input as $shortname => $value) { + $group->$shortname = $value; + } +} + +// Validate create +if (!$group->name) { + register_error(elgg_echo("groups:notitle")); + + forward(REFERER); +} + +// Group membership - should these be treated with same constants as access permissions? +switch (get_input('membership')) { + case ACCESS_PUBLIC: + $group->membership = ACCESS_PUBLIC; + break; + default: + $group->membership = ACCESS_PRIVATE; +} + +// Set access - all groups are public from elgg's point of view, unless the override is in place +if (elgg_get_plugin_setting('hidden_groups', 'groups') == 'yes') { + $visibility = (int)get_input('vis', '', false); + + $group->access_id = $visibility; +} else { + $group->access_id = ACCESS_PUBLIC; +} + +// Set group tool options +if (isset($CONFIG->group_tool_options)) { + foreach ($CONFIG->group_tool_options as $group_option) { + $group_option_toggle_name = $group_option->name . "_enable"; + if ($group_option->default_on) { + $group_option_default_value = 'yes'; + } else { + $group_option_default_value = 'no'; + } + $group->$group_option_toggle_name = get_input($group_option_toggle_name, $group_option_default_value); + } +} + +$group->save(); + +// group creator needs to be member of new group and river entry created +if ($new_group_flag) { + set_page_owner($group->guid); + $group->join($user); + add_to_river('river/group/create', 'create', $user->guid, $group->guid); +} + + + +// Now see if we have a file icon +if ((isset($_FILES['icon'])) && (substr_count($_FILES['icon']['type'],'image/'))) { + $prefix = "groups/".$group->guid; + + $filehandler = new ElggFile(); + $filehandler->owner_guid = $group->owner_guid; + $filehandler->setFilename($prefix . ".jpg"); + $filehandler->open("write"); + $filehandler->write(get_uploaded_file('icon')); + $filehandler->close(); + + $thumbtiny = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),25,25, true); + $thumbsmall = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),40,40, true); + $thumbmedium = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),100,100, true); + $thumblarge = get_resized_image_from_existing_file($filehandler->getFilenameOnFilestore(),200,200, false); + if ($thumbtiny) { + + $thumb = new ElggFile(); + $thumb->owner_guid = $group->owner_guid; + $thumb->setMimeType('image/jpeg'); + + $thumb->setFilename($prefix."tiny.jpg"); + $thumb->open("write"); + $thumb->write($thumbtiny); + $thumb->close(); + + $thumb->setFilename($prefix."small.jpg"); + $thumb->open("write"); + $thumb->write($thumbsmall); + $thumb->close(); + + $thumb->setFilename($prefix."medium.jpg"); + $thumb->open("write"); + $thumb->write($thumbmedium); + $thumb->close(); + + $thumb->setFilename($prefix."large.jpg"); + $thumb->open("write"); + $thumb->write($thumblarge); + $thumb->close(); + + $group->icontime = time(); + } +} + +system_message(elgg_echo("groups:saved")); + +forward($group->getUrl()); diff --git a/mod/groups/actions/groups/featured.php b/mod/groups/actions/groups/featured.php new file mode 100644 index 000000000..2d623b1e4 --- /dev/null +++ b/mod/groups/actions/groups/featured.php @@ -0,0 +1,26 @@ +featured_group = "yes"; + system_message(elgg_echo('groups:featuredon')); + } + + if ($action == "unfeature") { + $group->featured_group = "no"; + system_message(elgg_echo('groups:unfeatured')); + } +} + +forward(REFERER); diff --git a/mod/groups/actions/groups/membership/add.php b/mod/groups/actions/groups/membership/add.php new file mode 100644 index 000000000..de0cba613 --- /dev/null +++ b/mod/groups/actions/groups/membership/add.php @@ -0,0 +1,42 @@ +canEdit()) { + if (!$group->isMember($user)) { + if (groups_join_group($group, $user)) { + + // send welcome email to user + notify_user($user->getGUID(), $group->owner_guid, + elgg_echo('groups:welcome:subject', array($group->name)), + elgg_echo('groups:welcome:body', array( + $user->name, + $group->name, + $group->getURL()) + )); + + system_message(elgg_echo('groups:addedtogroup')); + } else { + // huh + } + } + } + } +} + +forward(REFERER); diff --git a/mod/groups/actions/groups/membership/delete_invite.php b/mod/groups/actions/groups/membership/delete_invite.php new file mode 100644 index 000000000..4b654f0b6 --- /dev/null +++ b/mod/groups/actions/groups/membership/delete_invite.php @@ -0,0 +1,20 @@ +guid, 'invited', $user->guid)) { + remove_entity_relationship($group->guid, 'invited', $user->guid); + system_message(elgg_echo("groups:invitekilled")); +} + +forward(REFERER); diff --git a/mod/groups/actions/groups/membership/delete_request.php b/mod/groups/actions/groups/membership/delete_request.php new file mode 100644 index 000000000..883c9d748 --- /dev/null +++ b/mod/groups/actions/groups/membership/delete_request.php @@ -0,0 +1,20 @@ +guid, 'membership_request', $group->guid)) { + remove_entity_relationship($user->guid, 'membership_request', $group->guid); + system_message(elgg_echo("groups:joinrequestkilled")); +} + +forward(REFERER); diff --git a/mod/groups/actions/groups/membership/invite.php b/mod/groups/actions/groups/membership/invite.php new file mode 100644 index 000000000..b106e4869 --- /dev/null +++ b/mod/groups/actions/groups/membership/invite.php @@ -0,0 +1,51 @@ +canEdit()) { + + if (!check_entity_relationship($group->guid, 'invited', $user->guid)) { + + // Create relationship + add_entity_relationship($group->guid, 'invited', $user->guid); + + // Send email + $url = elgg_normalize_url("pg/groups/invitations/$user->username"); + $result = notify_user($user->getGUID(), $group->owner_guid, + elgg_echo('groups:invite:subject', array($user->name, $group->name)), + elgg_echo('groups:invite:body', array( + $user->name, + $logged_in_user->name, + $group->name, + $url, + )), + NULL); + if ($result) { + system_message(elgg_echo("groups:userinvited")); + } else { + register_error(elgg_echo("groups:usernotinvited")); + } + } else { + register_error(elgg_echo("groups:useralreadyinvited")); + } + } + } +} + +forward(REFERER); diff --git a/mod/groups/actions/groups/membership/join.php b/mod/groups/actions/groups/membership/join.php new file mode 100644 index 000000000..3c4571a59 --- /dev/null +++ b/mod/groups/actions/groups/membership/join.php @@ -0,0 +1,70 @@ +isPublicMembership() || $group->canEdit($user->guid)) { + // anyone can join public groups and admins can join any group + $join = true; + } else { + if (check_entity_relationship($user->guid, 'membership_request', $group->guid)) { + // user has invite to closed group + $join = true; + } + } + + if ($join) { + if (groups_join_group($group, $user)) { + system_message(elgg_echo("groups:joined")); + forward($group->getURL()); + } else { + register_error(elgg_echo("groups:cantjoin")); + } + } else { + add_entity_relationship($user->guid, 'membership_request', $group->guid); + + // Notify group owner + $url = "{$CONFIG->url}mod/groups/membershipreq.php?group_guid={$group->guid}"; + $subject = elgg_echo('groups:request:subject', array( + $user->name, + $group->name, + )); + $body = elgg_echo('groups:request:body', array( + $group->getOwnerEntity()->name, + $user->name, + $group->name, + $user->getURL(), + $url, + )); + if (notify_user($group->owner_guid, $user->getGUID(), $subject, $body)) { + system_message(elgg_echo("groups:joinrequestmade")); + } else { + register_error(elgg_echo("groups:joinrequestnotmade")); + } + } +} else { + register_error(elgg_echo("groups:cantjoin")); +} + +forward(REFERER); diff --git a/mod/groups/actions/groups/membership/leave.php b/mod/groups/actions/groups/membership/leave.php new file mode 100644 index 000000000..390870df1 --- /dev/null +++ b/mod/groups/actions/groups/membership/leave.php @@ -0,0 +1,36 @@ +guid); + +if (($user instanceof ElggUser) && ($group instanceof ElggGroup)) { + if ($group->getOwnerGUID() != elgg_get_logged_in_user_guid()) { + if ($group->leave($user)) { + system_message(elgg_echo("groups:left")); + } else { + register_error(elgg_echo("groups:cantleave")); + } + } else { + register_error(elgg_echo("groups:cantleave")); + } +} else { + register_error(elgg_echo("groups:cantleave")); +} + +forward(REFERER); diff --git a/mod/groups/actions/groupskillinvitation.php b/mod/groups/actions/groupskillinvitation.php deleted file mode 100644 index 516490bc9..000000000 --- a/mod/groups/actions/groupskillinvitation.php +++ /dev/null @@ -1,20 +0,0 @@ -guid, 'invited', $user->guid)) { - remove_entity_relationship($group->guid, 'invited', $user->guid); - system_message(elgg_echo("groups:invitekilled")); -} - -forward(REFERER); diff --git a/mod/groups/actions/groupskillrequest.php b/mod/groups/actions/groupskillrequest.php deleted file mode 100644 index 9d45bb25f..000000000 --- a/mod/groups/actions/groupskillrequest.php +++ /dev/null @@ -1,20 +0,0 @@ -guid, 'membership_request', $group->guid)) { - remove_entity_relationship($user->guid, 'membership_request', $group->guid); - system_message(elgg_echo("groups:joinrequestkilled")); -} - -forward(REFERER); diff --git a/mod/groups/actions/invite.php b/mod/groups/actions/invite.php deleted file mode 100644 index 1f8281071..000000000 --- a/mod/groups/actions/invite.php +++ /dev/null @@ -1,54 +0,0 @@ -canEdit())) { - if (!check_entity_relationship($group->guid, 'invited', $user->guid)) { - if ($user->isFriend()) { - - // Create relationship - add_entity_relationship($group->guid, 'invited', $user->guid); - - // Send email - $url = elgg_normalize_url("pg/groups/invitations/$user->username"); - $result = notify_user($user->getGUID(), $group->owner_guid, - elgg_echo('groups:invite:subject', array($user->name, $group->name)), - elgg_echo('groups:invite:body', array($user->name, $logged_in_user->name, $group->name, $url)), - NULL); - if ($result) { - system_message(elgg_echo("groups:userinvited")); - } else { - register_error(elgg_echo("groups:usernotinvited")); - } - } else { - register_error(elgg_echo("groups:usernotinvited")); - } - } else { - register_error(elgg_echo("groups:useralreadyinvited")); - } - } else { - register_error(elgg_echo("groups:notowner")); - } - } - } -} - -forward(REFERER); diff --git a/mod/groups/actions/join.php b/mod/groups/actions/join.php deleted file mode 100644 index 72294c3ad..000000000 --- a/mod/groups/actions/join.php +++ /dev/null @@ -1,50 +0,0 @@ -guid); - -if (($user instanceof ElggUser) && ($group instanceof ElggGroup)) { - if ($group->isPublicMembership() || $group->canEdit($user->guid)) { - if ($group->join($user)) { - system_message(elgg_echo("groups:joined")); - - // Remove any invite or join request flags - remove_entity_relationship($group->guid, 'invited', $user->guid); - remove_entity_relationship($user->guid, 'membership_request', $group->guid); - - // add to river - add_to_river('river/relationship/member/create','join',$user->guid,$group->guid); - - forward($group->getURL()); - } else { - register_error(elgg_echo("groups:cantjoin")); - } - } else { - // Closed group, request membership - system_message(elgg_echo('groups:privategroup')); - forward(elgg_add_action_tokens_to_url("action/groups/joinrequest?user_guid=$user_guid&group_guid=$group_guid", FALSE)); - } -} else { - register_error(elgg_echo("groups:cantjoin")); -} - -forward(REFERER); - diff --git a/mod/groups/actions/joinrequest.php b/mod/groups/actions/joinrequest.php deleted file mode 100644 index 1631712b6..000000000 --- a/mod/groups/actions/joinrequest.php +++ /dev/null @@ -1,70 +0,0 @@ -guid); - -// If not a member of this group -if (($group) && ($user) && (!$group->isMember($user))) { - // If open group or invite exists - if ( - ($group->isPublicMembership()) || - (check_entity_relationship($group->guid, 'invited', $user->guid)) - ) { - //$ia = elgg_set_ignore_access(TRUE); - if ($group->join($user)) { - // Remove relationships - remove_entity_relationship($group->guid, 'invited', $user->guid); - remove_entity_relationship($user->guid, 'membership_request', $group->guid); - - // Group joined - system_message(elgg_echo('groups:joined')); - elgg_set_ignore_access($ia); - - forward($group->getURL()); - } else { - elgg_set_ignore_access($ia); - system_message(elgg_echo('groups:cantjoin')); - } - } else { - // If join request not already made - if (!check_entity_relationship($user->guid, 'membership_request', $group->guid)) { - // Add membership requested - add_entity_relationship($user->guid, 'membership_request', $group->guid); - - // Send email - $url = elgg_normalize_url("mod/groups/membershipreq.php?group_guid={$group->guid}"); - if (notify_user($group->owner_guid, $user->getGUID(), - elgg_echo('groups:request:subject', array($user->name, $group->name)), - elgg_echo('groups:request:body', array($group->getOwnerEntity()->name, $user->name, $group->name, $user->getURL(), $url)), - NULL)) { - system_message(elgg_echo("groups:joinrequestmade")); - } else { - register_error(elgg_echo("groups:joinrequestnotmade")); - } - } else { - system_message(elgg_echo("groups:joinrequestmade")); - } - } -} - -forward(REFERER); \ No newline at end of file diff --git a/mod/groups/actions/leave.php b/mod/groups/actions/leave.php deleted file mode 100644 index 390870df1..000000000 --- a/mod/groups/actions/leave.php +++ /dev/null @@ -1,36 +0,0 @@ -guid); - -if (($user instanceof ElggUser) && ($group instanceof ElggGroup)) { - if ($group->getOwnerGUID() != elgg_get_logged_in_user_guid()) { - if ($group->leave($user)) { - system_message(elgg_echo("groups:left")); - } else { - register_error(elgg_echo("groups:cantleave")); - } - } else { - register_error(elgg_echo("groups:cantleave")); - } -} else { - register_error(elgg_echo("groups:cantleave")); -} - -forward(REFERER); diff --git a/mod/groups/start.php b/mod/groups/start.php index fe3600dec..04f50919a 100644 --- a/mod/groups/start.php +++ b/mod/groups/start.php @@ -35,17 +35,18 @@ function groups_init() { elgg_register_page_handler('groupicon', 'groups_icon_handler'); // Register some actions - $action_base = elgg_get_plugins_path() . 'groups/actions'; + $action_base = elgg_get_plugins_path() . 'groups/actions/groups'; elgg_register_action("groups/edit", "$action_base/edit.php"); elgg_register_action("groups/delete", "$action_base/delete.php"); + elgg_register_action("groups/featured", "$action_base/featured.php", 'admin'); + + $action_base .= '/membership'; + 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/joinrequest", "$action_base/joinrequest.php"); - elgg_register_action("groups/killrequest", "$action_base/groupskillrequest.php"); - elgg_register_action("groups/killinvitation", "$action_base/groupskillinvitation.php"); - elgg_register_action("groups/addtogroup", "$action_base/addtogroup.php"); - elgg_register_action("groups/invite", "$action_base/invite.php"); - elgg_register_action("groups/featured", "$action_base/featured.php", 'admin'); + 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"); // Add some widgets elgg_register_widget_type('a_users_groups', elgg_echo('groups:widget:membership'), elgg_echo('groups:widgets:description')); @@ -393,24 +394,45 @@ function groups_user_leave_event_listener($event, $object_type, $object) { * Grabs groups by invitations * Have to override all access until there's a way override access to getter functions. * - * @param $user_guid - * @return unknown_type + * @param int $user_guid The user's guid + * @param bool $return_guids Return guids rather than ElggGroup objects + * + * @return array ElggGroups or guids depending on $return_guids */ function groups_get_invited_groups($user_guid, $return_guids = FALSE) { $ia = elgg_set_ignore_access(TRUE); - $invitations = elgg_get_entities_from_relationship(array('relationship' => 'invited', 'relationship_guid' => $user_guid, 'inverse_relationship' => TRUE, 'limit' => 9999)); + $groups = elgg_get_entities_from_relationship(array( + 'relationship' => 'invited', + 'relationship_guid' => $user_guid, + 'inverse_relationship' => TRUE, + 'limit' => 0, + )); elgg_set_ignore_access($ia); if ($return_guids) { $guids = array(); - foreach ($invitations as $invitation) { - $guids[] = $invitation->getGUID(); + foreach ($groups as $group) { + $guids[] = $group->getGUID(); } return $guids; } - return $invitations; + return $groups; +} + +function groups_join_group($group, $user) { + if ($group->join($user)) { + // Remove any invite or join request flags + remove_entity_relationship($group->guid, 'invited', $user->guid); + remove_entity_relationship($user->guid, 'membership_request', $group->guid); + + add_to_river('river/relationship/member/create', 'join', $user->guid, $group->guid); + + return true; + } + + return false; } /** diff --git a/mod/groups/views/default/groups/invitationrequests.php b/mod/groups/views/default/groups/invitationrequests.php index 60a0ec853..11cac52de 100644 --- a/mod/groups/views/default/groups/invitationrequests.php +++ b/mod/groups/views/default/groups/invitationrequests.php @@ -1,37 +1,44 @@ -
- "; - echo elgg_view_entity_icon($group, 'tiny', array('override' => 'true')); - echo "
"; + $icon = elgg_view_entity_icon($group, 'tiny', array('override' => 'true')); + + $group_title = elgg_view('output/url', array( + 'href' => $group->getURL(), + 'text' => $group->name, + )); $url = elgg_add_action_tokens_to_url(elgg_get_site_url()."action/groups/join?user_guid={$user->guid}&group_guid={$group->guid}"); - ?> -
- - "action/groups/killinvitation?user_guid={$user->getGUID()}&group_guid={$group->getGUID()}", + $accept_button = elgg_view('output/url', array( + 'href' => $url, + 'text' => elgg_echo('accept'), + 'class' => 'elgg-button elgg-button-submit', + )); + + $url = "action/groups/killinvitation?user_guid={$user->getGUID()}&group_guid={$group->getGUID()}"; + $delete_button = elgg_view('output/confirmlink', array( + 'href' => $url, 'confirm' => elgg_echo('groups:invite:remove:check'), 'text' => elgg_echo('delete'), - ))); - - echo "

getUrl() . "\">" . $group->name . "

"; - echo "

" . $group->briefdescription . "

"; + 'class' => 'elgg-button elgg-button-action elgg-state-disabled', + )); - ?> -
- $group_title

+

$group->briefdescription

+$accept_button $delete_button +HTML; + echo elgg_view_image_block($icon, $body); } - - } else { + } +} else { echo "

" . elgg_echo('groups:invitations:none') . "

"; } -?> \ No newline at end of file diff --git a/mod/groups/views/default/groups/profile/buttons.php b/mod/groups/views/default/groups/profile/buttons.php index 0aef3920b..32d9867ab 100644 --- a/mod/groups/views/default/groups/profile/buttons.php +++ b/mod/groups/views/default/groups/profile/buttons.php @@ -31,14 +31,12 @@ if ($vars['entity']->isMember($user)) { $actions[$url] = elgg_echo('groups:leave'); } else { // join - admins can always join. + $url = elgg_get_site_url() . "action/groups/join?group_guid={$vars['entity']->getGUID()}"; + $url = elgg_add_action_tokens_to_url($url); if ($vars['entity']->isPublicMembership() || $vars['entity']->canEdit()) { - $url = elgg_get_site_url() . "action/groups/join?group_guid={$vars['entity']->getGUID()}"; - $url = elgg_add_action_tokens_to_url($url); $actions[$url] = elgg_echo('groups:join'); } else { // request membership - $url = elgg_get_site_url() . "action/groups/joinrequest?group_guid={$vars['entity']->getGUID()}"; - $url = elgg_add_action_tokens_to_url($url); $actions[$url] = elgg_echo('groups:joinrequest'); } } -- cgit v1.2.3