diff options
Diffstat (limited to 'mod/groups/actions')
-rw-r--r-- | mod/groups/actions/addtogroup.php | 96 | ||||
-rw-r--r-- | mod/groups/actions/delete.php | 19 | ||||
-rw-r--r-- | mod/groups/actions/edit.php | 153 | ||||
-rw-r--r-- | mod/groups/actions/featured.php | 44 | ||||
-rw-r--r-- | mod/groups/actions/forums/addpost.php | 58 | ||||
-rw-r--r-- | mod/groups/actions/forums/addtopic.php | 81 | ||||
-rw-r--r-- | mod/groups/actions/forums/deletepost.php | 44 | ||||
-rw-r--r-- | mod/groups/actions/forums/deletetopic.php | 45 | ||||
-rw-r--r-- | mod/groups/actions/forums/editpost.php | 53 | ||||
-rw-r--r-- | mod/groups/actions/forums/edittopic.php | 87 | ||||
-rw-r--r-- | mod/groups/actions/groupskillinvitation.php | 32 | ||||
-rw-r--r-- | mod/groups/actions/groupskillrequest.php | 32 | ||||
-rw-r--r-- | mod/groups/actions/invite.php | 69 | ||||
-rw-r--r-- | mod/groups/actions/join.php | 65 | ||||
-rw-r--r-- | mod/groups/actions/joinrequest.php | 84 | ||||
-rw-r--r-- | mod/groups/actions/leave.php | 43 |
16 files changed, 1005 insertions, 0 deletions
diff --git a/mod/groups/actions/addtogroup.php b/mod/groups/actions/addtogroup.php new file mode 100644 index 000000000..0b99ea917 --- /dev/null +++ b/mod/groups/actions/addtogroup.php @@ -0,0 +1,96 @@ +<?php + + /** + * Add a user to a group + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Load configuration + global $CONFIG; + + gatekeeper(); + + $logged_in_user = get_loggedin_user(); + + $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) { + + //if (get_loggedin_userid() == $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, + sprintf(elgg_echo('groups:welcome:subject'), $group->name), + sprintf(elgg_echo('groups:welcome:body'), $user->name, $logged_in_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 = "{$CONFIG->url}pg/groups/invited?user_guid={$user->guid}&group_guid={$group->guid}"; + if (notify_user($user->getGUID(), $group->owner_guid, + sprintf(elgg_echo('groups:invite:subject'), $user->name, $group->name), + sprintf(elgg_echo('groups:invite:body'), $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($_SERVER['HTTP_REFERER']); + +?> diff --git a/mod/groups/actions/delete.php b/mod/groups/actions/delete.php new file mode 100644 index 000000000..b4bc71838 --- /dev/null +++ b/mod/groups/actions/delete.php @@ -0,0 +1,19 @@ +<?php + global $CONFIG; + + $guid = (int)get_input('group_guid'); + $entity = get_entity($guid); + + if (($entity) && ($entity instanceof ElggGroup)) + { + 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 = $_SESSION['user']->username; + forward("{$vars['url']}pg/groups/member/{$url_name}"); +?>
\ No newline at end of file diff --git a/mod/groups/actions/edit.php b/mod/groups/actions/edit.php new file mode 100644 index 000000000..b6eb3eb71 --- /dev/null +++ b/mod/groups/actions/edit.php @@ -0,0 +1,153 @@ +<?php + /** + * Elgg groups plugin edit action. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Load configuration + global $CONFIG; + + // Get group fields + $input = array(); + foreach($CONFIG->group as $shortname => $valuetype) { + $input[$shortname] = get_input($shortname); + if ($valuetype == 'tags') + $input[$shortname] = string_to_tag_array($input[$shortname]); + } + + $user_guid = get_input('user_guid'); + $user = NULL; + if (!$user_guid) $user = $_SESSION['user']; + else + $user = get_entity($user_guid); + + $group_guid = get_input('group_guid'); + + $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($_SERVER['HTTP_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($_SERVER['HTTP_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 (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(); + + if (!$group->isMember($user)) + $group->join($user); // Creator always a member + + + // 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 to the user's profile + forward($group->getUrl()); + exit; +?> diff --git a/mod/groups/actions/featured.php b/mod/groups/actions/featured.php new file mode 100644 index 000000000..2d16113df --- /dev/null +++ b/mod/groups/actions/featured.php @@ -0,0 +1,44 @@ +<?php + + /** + * Join a group action. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Load configuration + global $CONFIG; + + admin_gatekeeper(); + + $group_guid = get_input('group_guid'); + $action = get_input('action'); + + $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("pg/groups/world/"); + +?>
\ No newline at end of file diff --git a/mod/groups/actions/forums/addpost.php b/mod/groups/actions/forums/addpost.php new file mode 100644 index 000000000..c277b795d --- /dev/null +++ b/mod/groups/actions/forums/addpost.php @@ -0,0 +1,58 @@ +<?php + +/** + * Elgg groups: add post to a topic + * + * @package ElggGroups + * @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-2010 + * @link http://elgg.org/ + */ + +// Make sure we're logged in and have a CSRF token +gatekeeper(); + +// Get input +$topic_guid = (int) get_input('topic_guid'); +$group_guid = (int) get_input('group_guid'); +$post = get_input('topic_post'); + + +// make sure we have text in the post +if (!$post) { + register_error(elgg_echo("grouppost:nopost")); + forward($_SERVER['HTTP_REFERER']); +} + + +// Check that user is a group member +$group = get_entity($group_guid); +$user = get_loggedin_user(); +if (!$group->isMember($user)) { + register_error(elgg_echo("groups:notmember")); + forward($_SERVER['HTTP_REFERER']); +} + + +// Let's see if we can get an form topic with the specified GUID, and that it's a group forum topic +$topic = get_entity($topic_guid); +if (!$topic || $topic->getSubtype() != "groupforumtopic") { + register_error(elgg_echo("grouptopic:notfound")); + forward($_SERVER['HTTP_REFERER']); +} + + +// add the post to the forum topic +$post_id = $topic->annotate('group_topic_post', $post, $topic->access_id, $user->guid); +if ($post_id == false) { + system_message(elgg_echo("groupspost:failure")); + forward($_SERVER['HTTP_REFERER']); +} + +// add to river +add_to_river('river/forum/create', 'create', $user->guid, $topic_guid, "", 0, $post_id); + +system_message(elgg_echo("groupspost:success")); + +forward($_SERVER['HTTP_REFERER']); diff --git a/mod/groups/actions/forums/addtopic.php b/mod/groups/actions/forums/addtopic.php new file mode 100644 index 000000000..740ea17aa --- /dev/null +++ b/mod/groups/actions/forums/addtopic.php @@ -0,0 +1,81 @@ +<?php + + /** + * Elgg groups plugin add topic action. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Make sure we're logged in; forward to the front page if not + if (!isloggedin()) forward(); + + // Check the user is a group member + $group_entity = get_entity(get_input('group_guid')); + if (!$group_entity->isMember($vars['user'])) forward(); + + // Get input data + $title = get_input('topictitle'); + $message = get_input('topicmessage'); + $tags = get_input('topictags'); + $access = get_input('access_id'); + $group_guid = (int) get_input('group_guid'); + $user = $_SESSION['user']->getGUID(); // you need to be logged in to comment on a group forum + $status = get_input('status'); // sticky, resolved, closed + + // Convert string of tags into a preformatted array + $tagarray = string_to_tag_array($tags); + + // Make sure the title / message aren't blank + if (empty($title) || empty($message)) { + register_error(elgg_echo("grouptopic:blank")); + forward("pg/groups/forum/{$group_guid}/"); + + // Otherwise, save the topic + } else { + + // Initialise a new ElggObject + $grouptopic = new ElggObject(); + // Tell the system it's a group forum topic + $grouptopic->subtype = "groupforumtopic"; + // Set its owner to the current user + $grouptopic->owner_guid = $user; + // Set the group it belongs to + $grouptopic->container_guid = $group_guid; + // For now, set its access to public (we'll add an access dropdown shortly) + $grouptopic->access_id = $access; + // Set its title and description appropriately + $grouptopic->title = $title; + // Before we can set metadata, we need to save the topic + if (!$grouptopic->save()) { + register_error(elgg_echo("grouptopic:error")); + forward("pg/groups/forum/{$group_guid}/"); + } + // Now let's add tags. We can pass an array directly to the object property! Easy. + if (is_array($tagarray)) { + $grouptopic->tags = $tagarray; + } + // add metadata + $grouptopic->status = $status; // the current status i.e sticky, closed, resolved, open + + // now add the topic message as an annotation + $grouptopic->annotate('group_topic_post',$message,$access, $user); + + // add to river + add_to_river('river/forum/topic/create','create',$_SESSION['user']->guid,$grouptopic->guid); + + // Success message + system_message(elgg_echo("grouptopic:created")); + + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "pg/groups/forum/{$group_guid}/"; + forward($url); + + } + +?> + diff --git a/mod/groups/actions/forums/deletepost.php b/mod/groups/actions/forums/deletepost.php new file mode 100644 index 000000000..4066b7456 --- /dev/null +++ b/mod/groups/actions/forums/deletepost.php @@ -0,0 +1,44 @@ +<?php + + /** + * Elgg Groups: delete topic comment action + * + * @package ElggGroups + * @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-2010 + * @link http://elgg.org/ + */ + + // Ensure we're logged in + if (!isloggedin()) forward(); + + + // Make sure we can get the comment in question + $post_id = (int) get_input('post'); + $group_guid = (int) get_input('group'); + $topic_guid = (int) get_input('topic'); + + if ($post = get_annotation($post_id)) { + + //check that the user can edit as well as admin + if ($post->canEdit() || ($post->owner_guid == $_SESSION['user']->guid)) { + + //delete + $post->delete(); + //display confirmation message + system_message(elgg_echo("grouppost:deleted")); + + } + + } else { + $url = ""; + system_message(elgg_echo("grouppost:notdeleted")); + } + + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "mod/groups/topicposts.php?topic={$topic_guid}&group_guid={$group_guid}"; + forward($url); + +?>
\ No newline at end of file diff --git a/mod/groups/actions/forums/deletetopic.php b/mod/groups/actions/forums/deletetopic.php new file mode 100644 index 000000000..1095fc44a --- /dev/null +++ b/mod/groups/actions/forums/deletetopic.php @@ -0,0 +1,45 @@ +<?php + + /** + * Elgg Groups: delete topic action + * + * @package ElggGroups + * @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-2010 + * @link http://elgg.org/ + */ + + // Make sure we're logged in; forward to the front page if not + if (!isloggedin()) forward(); + + // Check the user is a group member + $group_entity = get_entity(get_input('group')); + if (!$group_entity->isMember($vars['user'])) forward(); + + // Get input data + $topic_guid = (int) get_input('topic'); + $group_guid = (int) get_input('group'); + + // Make sure we actually have permission to edit + $topic = get_entity($topic_guid); + if ($topic->getSubtype() == "groupforumtopic") { + + // Get owning user + // $owner = get_entity($topic->getOwner()); + // Delete it! + $rowsaffected = $topic->delete(); + if ($rowsaffected > 0) { + // Success message + system_message(elgg_echo("groupstopic:deleted")); + } else { + system_message(elgg_echo("groupstopic:notdeleted")); + } + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "pg/groups/forum/{$group_guid}/"; + forward($url); + + } + +?>
\ No newline at end of file diff --git a/mod/groups/actions/forums/editpost.php b/mod/groups/actions/forums/editpost.php new file mode 100644 index 000000000..d30fad31f --- /dev/null +++ b/mod/groups/actions/forums/editpost.php @@ -0,0 +1,53 @@ +<?php + + /** + * Elgg groups plugin edit post action. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Make sure we're logged in (send us to the front page if not) + if (!isloggedin()) forward(); + + // Check the user is a group member + $group_guid = get_input('group'); + $group_entity = get_entity($group_guid); + if (!$group_entity->isMember($vars['user'])) forward(); + + //get the required variables + $post = get_input("post"); + $field_num = get_input("field_num"); + $post_comment = get_input("postComment{$field_num}"); + $annotation = get_annotation($post); + $commentOwner = $annotation->owner_guid; + $access_id = $annotation->access_id; + $topic = get_input("topic"); + + if($annotation){ + + //can edit? Either the comment owner or admin can + if(groups_can_edit_discussion($annotation, page_owner_entity()->owner_guid)){ + + update_annotation($post, "group_topic_post", $post_comment, "",$commentOwner, $access_id); + system_message(elgg_echo("groups:forumpost:edited")); + + }else{ + system_message(elgg_echo("groups:forumpost:error")); + } + + }else{ + + system_message(elgg_echo("groups:forumpost:error")); + } + + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "mod/groups/topicposts.php?topic={$topic}&group_guid={$group_guid}/"; + forward($url); + + +?>
\ No newline at end of file diff --git a/mod/groups/actions/forums/edittopic.php b/mod/groups/actions/forums/edittopic.php new file mode 100644 index 000000000..2898c31dc --- /dev/null +++ b/mod/groups/actions/forums/edittopic.php @@ -0,0 +1,87 @@ +<?php + + /** + * Elgg groups plugin edit topic action. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Make sure we're logged in (send us to the front page if not) + if (!isloggedin()) forward(); + + // Check the user is a group member + $group_entity = get_entity(get_input('group_guid')); + if (!$group_entity->isMember($vars['user'])) forward(); + + + // Get input data + $title = get_input('topictitle'); + $message = get_input('topicmessage'); + $message_id = get_input('message_id'); + $tags = get_input('topictags'); + $topic_guid = get_input('topic'); + $access = get_input('access_id'); + $group_guid = get_input('group_guid'); + //$user = $_SESSION['user']->getGUID(); // you need to be logged in to comment on a group forum + $status = get_input('status'); // sticky, resolved, closed + + // Convert string of tags into a preformatted array + $tagarray = string_to_tag_array($tags); + + // Make sure we actually have permission to edit + $topic = get_entity($topic_guid); + if ($topic) + { + + $user = $topic->getOwner(); + + if ($topic->getSubtype() == "groupforumtopic") { + + // Convert string of tags into a preformatted array + $tagarray = string_to_tag_array($tags); + + // Make sure the title isn't blank + if (empty($title) || empty($message)) { + register_error(elgg_echo("groupstopic:blank")); + + // Otherwise, save the forum + } else { + + $topic->access_id = $access; + + // Set its title + $topic->title = $title; + + // if no tags are present, clear existing ones + if (is_array($tagarray)) { + $topic->tags = $tagarray; + } else $topic->clearMetadata('tags'); + + // edit metadata + $topic->status = $status; // the current status i.e sticky, closed, resolved + + // now let's edit the message annotation + update_annotation($message_id, "group_topic_post", $message, "",$user, $access); + + // save the changes + if (!$topic->save()) { + // register_error(elgg_echo("forumtopic:error")); + } + + // Success message + system_message(elgg_echo("groups:forumtopic:edited")); + + } + } + } + // Forward to the group forum page + global $CONFIG; + $url = $CONFIG->wwwroot . "pg/groups/forum/{$group_guid}/"; + forward($url); + +?> + diff --git a/mod/groups/actions/groupskillinvitation.php b/mod/groups/actions/groupskillinvitation.php new file mode 100644 index 000000000..78c920df0 --- /dev/null +++ b/mod/groups/actions/groupskillinvitation.php @@ -0,0 +1,32 @@ +<?php + /** + * Delete an invitation to join a closed group. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Load configuration + global $CONFIG; + + gatekeeper(); + + $user_guid = get_input('user_guid', get_loggedin_userid()); + $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:joinrequestkilled")); + } + + forward($_SERVER['HTTP_REFERER']); + +?>
\ No newline at end of file diff --git a/mod/groups/actions/groupskillrequest.php b/mod/groups/actions/groupskillrequest.php new file mode 100644 index 000000000..03a318e4a --- /dev/null +++ b/mod/groups/actions/groupskillrequest.php @@ -0,0 +1,32 @@ +<?php + /** + * Delete a user request to join a closed group. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Load configuration + global $CONFIG; + + gatekeeper(); + + $user_guid = get_input('user_guid', get_loggedin_userid()); + $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($_SERVER['HTTP_REFERER']); + +?>
\ No newline at end of file diff --git a/mod/groups/actions/invite.php b/mod/groups/actions/invite.php new file mode 100644 index 000000000..d2fd75c28 --- /dev/null +++ b/mod/groups/actions/invite.php @@ -0,0 +1,69 @@ +<?php + +/** + * Invite a user to join a group + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + +// Load configuration +global $CONFIG; + +gatekeeper(); + +$logged_in_user = get_loggedin_user(); + +$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) { + + if (get_loggedin_userid() == $group->owner_guid) + { + 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 = "{$CONFIG->url}pg/groups/invitations/{$user->username}"; + if (notify_user($user->getGUID(), $group->owner_guid, + sprintf(elgg_echo('groups:invite:subject'), $user->name, $group->name), + sprintf(elgg_echo('groups:invite:body'), $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:useralreadyinvited")); + } + else + register_error(elgg_echo("groups:notowner")); + } + } +} + +forward($_SERVER['HTTP_REFERER']); + +?> diff --git a/mod/groups/actions/join.php b/mod/groups/actions/join.php new file mode 100644 index 000000000..3947f8efc --- /dev/null +++ b/mod/groups/actions/join.php @@ -0,0 +1,65 @@ +<?php + /** + * Join a group action. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Load configuration + global $CONFIG; + + gatekeeper(); + + $user_guid = get_input('user_guid', get_loggedin_userid()); + $group_guid = get_input('group_guid'); + + // @todo fix for #287 + // disable access to get entity. + $invitations = groups_get_invited_groups($user_guid, TRUE); + + if (in_array($group_guid, $invitations)) { + $ia = elgg_set_ignore_access(TRUE); + } + + $user = get_entity($user_guid); + $group = get_entity($group_guid); + + if (($user instanceof ElggUser) && ($group instanceof ElggGroup)) + { + if ($group->isPublicMembership()) + { + 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/group/create','join',$user->guid,$group->guid); + + forward($group->getURL()); + exit; + } + 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($CONFIG->url . "action/groups/joinrequest?user_guid=$user_guid&group_guid=$group_guid")); + exit; + } + } + else + register_error(elgg_echo("groups:cantjoin")); + + forward($_SERVER['HTTP_REFERER']); + exit; +?> diff --git a/mod/groups/actions/joinrequest.php b/mod/groups/actions/joinrequest.php new file mode 100644 index 000000000..51c400223 --- /dev/null +++ b/mod/groups/actions/joinrequest.php @@ -0,0 +1,84 @@ +<?php +/** + * User requests to join a closed group. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + +// Load configuration +global $CONFIG; + +gatekeeper(); + +$user_guid = get_input('user_guid', get_loggedin_userid()); +$group_guid = get_input('group_guid'); + + +// @todo fix for #287 +// disable access to get entity. +$invitations = groups_get_invited_groups($user_guid, TRUE); + +if (in_array($group_guid, $invitations)) { + $ia = elgg_set_ignore_access(TRUE); +} + + +$user = get_entity($user_guid); +$group = get_entity($group_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()); + exit; + } + 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 = "{$CONFIG->url}mod/groups/membershipreq.php?group_guid={$group->guid}"; + if (notify_user($group->owner_guid, $user->getGUID(), + sprintf(elgg_echo('groups:request:subject'), $user->name, $group->name), + sprintf(elgg_echo('groups:request:body'), $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($_SERVER['HTTP_REFERER']);
\ No newline at end of file diff --git a/mod/groups/actions/leave.php b/mod/groups/actions/leave.php new file mode 100644 index 000000000..b68eb7607 --- /dev/null +++ b/mod/groups/actions/leave.php @@ -0,0 +1,43 @@ +<?php + /** + * Leave a group action. + * + * @package ElggGroups + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Curverider Ltd + * @copyright Curverider Ltd 2008-2010 + * @link http://elgg.com/ + */ + + // Load configuration + global $CONFIG; + + gatekeeper(); + + $user_guid = get_input('user_guid'); + $group_guid = get_input('group_guid'); + + $user = NULL; + if (!$user_guid) $user = $_SESSION['user']; + else + $user = get_entity($user_guid); + + $group = get_entity($group_guid); + + if (($user instanceof ElggUser) && ($group instanceof ElggGroup)) + { + if ($group->getOwner() != $_SESSION['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($_SERVER['HTTP_REFERER']); + exit; +?>
\ No newline at end of file |