diff options
author | cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2011-03-04 01:26:36 +0000 |
---|---|---|
committer | cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2011-03-04 01:26:36 +0000 |
commit | 1bcc2d793704bf43f6ecf9a01259e9cd6f6f8b2a (patch) | |
tree | 21bbc06d2e8dec46c6396cfbfd8d1e499f2733d8 /mod/groups/actions/groups | |
parent | 1b9a059d96265ddb058be4f73c6989c318181f8d (diff) | |
download | elgg-1bcc2d793704bf43f6ecf9a01259e9cd6f6f8b2a.tar.gz elgg-1bcc2d793704bf43f6ecf9a01259e9cd6f6f8b2a.tar.bz2 |
updated the group actions - edit group needs more work
git-svn-id: http://code.elgg.org/elgg/trunk@8573 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'mod/groups/actions/groups')
-rw-r--r-- | mod/groups/actions/groups/delete.php | 37 | ||||
-rw-r--r-- | mod/groups/actions/groups/edit.php | 152 | ||||
-rw-r--r-- | mod/groups/actions/groups/featured.php | 26 | ||||
-rw-r--r-- | mod/groups/actions/groups/membership/add.php | 42 | ||||
-rw-r--r-- | mod/groups/actions/groups/membership/delete_invite.php | 20 | ||||
-rw-r--r-- | mod/groups/actions/groups/membership/delete_request.php | 20 | ||||
-rw-r--r-- | mod/groups/actions/groups/membership/invite.php | 51 | ||||
-rw-r--r-- | mod/groups/actions/groups/membership/join.php | 70 | ||||
-rw-r--r-- | mod/groups/actions/groups/membership/leave.php | 36 |
9 files changed, 454 insertions, 0 deletions
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 @@ +<?php +/** + * Delete a group + */ + +$guid = (int) get_input('group_guid'); +$entity = get_entity($guid); + +if (!$entity->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 @@ +<?php +/** + * Elgg groups plugin edit action. + * + * @package ElggGroups + */ + +// Load configuration +global $CONFIG; + +/** + * wrapper for recursive array walk decoding + */ +function profile_array_decoder(&$v) { + $v = html_entity_decode($v, ENT_COMPAT, 'UTF-8'); +} + +// Get group fields +$input = array(); +foreach ($CONFIG->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 @@ +<?php +/** + * Feature a group + * + * @package ElggGroups + */ + +$group_guid = get_input('group_guid'); +$action = get_input('action_type'); + +$group = get_entity($group_guid); + +if ($group) { + //get the action, is it to feature or unfeature + if ($action == "feature") { + $group->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 @@ +<?php +/** + * Add users to a group + * + * @package ElggGroups + */ +$logged_in_user = elgg_get_logged_in_user_entity(); + +$user_guid = get_input('user_guid'); +if (!is_array($user_guid)) { + $user_guid = array($user_guid); +} +$group_guid = get_input('group_guid'); +$group = get_entity($group_guid); + +if (sizeof($user_guid)) { + foreach ($user_guid as $u_id) { + $user = get_user($u_id); + + if ($user && $group && $group->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 @@ +<?php +/** + * Delete an invitation to join a group. + * + * @package ElggGroups + */ + +$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid()); +$group_guid = get_input('group_guid'); + +$user = get_entity($user_guid); +$group = get_entity($group_guid); + +// If join request made +if (check_entity_relationship($group->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 @@ +<?php +/** + * Delete a request to join a closed group. + * + * @package ElggGroups + */ + +$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid()); +$group_guid = get_input('group_guid'); + +$user = get_entity($user_guid); +$group = get_entity($group_guid); + +// If join request made +if (check_entity_relationship($user->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 @@ +<?php +/** + * Invite users to join a group + * + * @package ElggGroups + */ + +$logged_in_user = elgg_get_logged_in_user_entity(); + +$user_guid = get_input('user_guid'); +if (!is_array($user_guid)) { + $user_guid = array($user_guid); +} +$group_guid = get_input('group_guid'); + +if (sizeof($user_guid)) { + foreach ($user_guid as $u_id) { + $user = get_entity($u_id); + $group = get_entity($group_guid); + + if ($user && $group && ($group instanceof ElggGroup) && $group->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 @@ +<?php +/** + * Join a group + * + * Three states: + * open group so user joins + * closed group so request sent to group owner + * closed group with invite so user joins + * + * @package ElggGroups + */ + +$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid()); +$group_guid = get_input('group_guid'); + +$user = get_entity($user_guid); + +// @todo investigate if the access bypass is needed +$ia = elgg_set_ignore_access(true); +$group = get_entity($group_guid); +elgg_set_ignore_access($ia); + +if (($user instanceof ElggUser) && ($group instanceof ElggGroup)) { + + // join or request + $join = false; + if ($group->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 @@ +<?php +/** + * Leave a group action. + * + * @package ElggGroups + */ + +$user_guid = get_input('user_guid'); +$group_guid = get_input('group_guid'); + +$user = NULL; +if (!$user_guid) { + $user = elgg_get_logged_in_user_entity(); +} else { + $user = get_entity($user_guid); +} + +$group = get_entity($group_guid); + +set_page_owner($group->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); |