aboutsummaryrefslogtreecommitdiff
path: root/actions/tasks/comments/add.php
diff options
context:
space:
mode:
Diffstat (limited to 'actions/tasks/comments/add.php')
-rw-r--r--actions/tasks/comments/add.php169
1 files changed, 169 insertions, 0 deletions
diff --git a/actions/tasks/comments/add.php b/actions/tasks/comments/add.php
new file mode 100644
index 000000000..6221eccbd
--- /dev/null
+++ b/actions/tasks/comments/add.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * Tasks add comment action
+ *
+ * @package ElggTasks
+ */
+
+group_gatekeeper();
+
+elgg_load_library('elgg:tasks');
+
+$entity_guid = (int) get_input('entity_guid');
+$comment_text = get_input('generic_comment');
+$state_action = get_input('state_action', false);
+
+
+// Let's see if we can get an entity with the specified GUID
+$entity = get_entity($entity_guid);
+if (!$entity) {
+ register_error(elgg_echo("generic_comment:notfound"));
+ forward(REFERER);
+}
+
+$user = elgg_get_logged_in_user_entity();
+
+if($comment_text) {
+ $annotation = create_annotation($entity->guid,
+ 'generic_comment',
+ $comment_text,
+ "",
+ $user->guid,
+ $entity->access_id);
+
+ // tell user annotation posted
+ if (!$annotation) {
+ register_error(elgg_echo("generic_comment:failure"));
+ forward(REFERER);
+ }
+}
+switch ($state_action) {
+ case 'assign':
+ add_entity_relationship(elgg_get_logged_in_user_guid(), 'subscribes', $entity_guid);
+ break;
+ case 'activate':
+ add_entity_relationship(elgg_get_logged_in_user_guid(), 'is_doing', $entity_guid);
+ break;
+ case 'assign_and_activate':
+ add_entity_relationship(elgg_get_logged_in_user_guid(), 'subscribes', $entity_guid);
+ add_entity_relationship(elgg_get_logged_in_user_guid(), 'is_doing', $entity_guid);
+ break;
+ case 'deactivate':
+ remove_entity_relationship(elgg_get_logged_in_user_guid(), 'is_doing', $entity_guid);
+ break;
+ case 'leave':
+ remove_entity_relationship(elgg_get_logged_in_user_guid(), 'is_doing', $entity_guid);
+ remove_entity_relationship(elgg_get_logged_in_user_guid(), 'subscribes', $entity_guid);
+ break;
+ case 'reopen':
+ remove_entity_relationships($entity_guid, 'is_doing', true);
+ remove_entity_relationships($entity_guid, 'subscribes', true);
+ break;
+}
+
+if (in_array($state_action, array('activate', 'assign_and_activate'))) {
+ if($active_task = tasks_get_user_active_task($user->guid)) {
+ $active_task->status = 'assigned';
+
+ create_annotation($active_task->guid,
+ 'task_state_changed',
+ 'assigned',
+ "",
+ $user->guid,
+ $active_task->access_id);
+ }
+}
+
+$new_state = tasks_get_state_from_action($state_action);
+
+if ($state_action == 'leave') {
+ $have_participants_yet = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'subscribes',
+ 'relationship_guid' => $entity->guid,
+ 'inverse_relationship' => true,
+ 'count' => true,
+ ));
+ if ($have_participants_yet) {
+ $new_state = $entity->status;
+ }
+}
+
+if ($state_action == 'deactivate') {
+ $have_participants_yet = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'is_doing',
+ 'relationship_guid' => $entity->guid,
+ 'inverse_relationship' => true,
+ 'count' => true,
+ ));
+ if ($have_participants_yet) {
+ $new_state = $entity->status;
+ }
+}
+
+if ($state_action == 'assign' && $entity->status == 'active') {
+ $new_state = $entity->status;
+}
+
+if($new_state) {
+ $entity->status = $new_state;
+ create_annotation($entity->guid,
+ 'task_state_changed',
+ $state_action,
+ "",
+ $user->guid,
+ $entity->access_id);
+}
+
+// notify if poster wasn't owner
+if ($entity->owner_guid != $user->guid) {
+
+ if($new_state) {
+ notify_user($entity->owner_guid,
+ $user->guid,
+ elgg_echo('tasks:email:subject'),
+ elgg_echo('tasks:email:body', array(
+ $user->name,
+ $entity->title,
+ $new_state,
+ $comment_text,
+ $entity->getURL(),
+ $user->name,
+ $user->getURL()
+ ))
+ );
+ } else {
+ notify_user($entity->owner_guid,
+ $user->guid,
+ elgg_echo('generic_comment:email:subject'),
+ elgg_echo('generic_comment:email:body', array(
+ $entity->title,
+ $user->name,
+ $comment_text,
+ $entity->getURL(),
+ $user->name,
+ $user->getURL()
+ ))
+ );
+ }
+}
+
+if ($new_state) {
+ system_message(elgg_echo("tasks:status:changed"));
+ $action = $state_action;
+} else {
+ system_message(elgg_echo("generic_comment:posted"));
+ $action = 'comment';
+}
+
+//add to river
+if (!in_array($state_action, array('activate', 'deactivate'))) {
+ $river = 'river/annotation/generic_comment/create';
+ add_to_river($river, $action, $user->guid, $entity->guid, "", 0, $annotation);
+}
+
+if ($new_state) {
+ echo "{\"new_state\": \"$new_state\"}";
+}
+
+// Forward to the page the action occurred on
+forward(REFERER);