function formatEvent($event, $showProject = false) { switch ($event->getEventTypeID()) { case 'create_user': $formatted = sprintf("%s registered for %s.", formatUserLink($event->getUser1ID()), '<a href="' . Url::base() . '">' . PIPELINE_NAME . '</a>'); break; case 'send_message': $formatted = sprintf("%s sent a message to %s.", formatUserLink($event->getUser1ID()), formatUserLink($event->getUser2ID())); break; case 'accept_member_invitation': $predicate = $showProject ? 'the project ' . formatProjectLink($event->getProjectID()) : "this project"; $formatted = sprintf("%s accepted %s's invitation to join %s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), formatUserLink($event->getUser2ID(), $event->getProjectID()), $predicate); break; case 'trust_member': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s trusted %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), formatUserLink($event->getUser2ID(), $event->getProjectID()), $predicate); break; case 'untrust_member': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s untrusted %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), formatUserLink($event->getUser2ID(), $event->getProjectID()), $predicate); break; case 'join_project': $predicate = $showProject ? ' ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s joined the project%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), $predicate); break; case 'leave_project': $predicate = $showProject ? ' ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s left the project%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), $predicate); break; case 'follow_project': $predicate = $showProject ? ' ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s followed the project%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), $predicate); break; case 'unfollow_project': $predicate = $showProject ? ' ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s unfollowed the project%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), $predicate); break; case 'ban_user': $predicate = $showProject ? ' from the project ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s banned %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), formatUserLink($event->getUser2ID(), $event->getProjectID()), $predicate); break; case 'unban_user': $predicate = $showProject ? ' from the project ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s unbanned %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), formatUserLink($event->getUser2ID(), $event->getProjectID()), $predicate); break; case 'create_project': $predicate = $showProject ? 'the project ' . formatProjectLink($event->getProjectID()) : 'this project'; $formatted = sprintf("%s created %s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), formatProjectLink($event->getProjectID())); break; case 'edit_pitch': $predicate = $showProject ? ' for the project ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s edited the %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . Url::pitch($event->getProjectID()) . '">pitch</a>', $predicate); break; case 'edit_specs': $predicate = $showProject ? ' for the project ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s edited the %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . Url::specs($event->getProjectID()) . '">specs</a>', $predicate); break; case 'edit_rules': $predicate = $showProject ? ' for the project ' . formatProjectLink($event->getProjectID()) : ''; $formatted = sprintf("%s edited the %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . Url::rules($event->getProjectID()) . '">rules</a>', $predicate); break; case 'edit_project_status': $predicate = $showProject ? 'the project ' . formatProjectLink($event->getProjectID()) : 'this project'; $status = $event->getData2(); $formatted = sprintf("%s changed the %s of %s to “%s.”", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . Url::status($event->getProjectID()) . '">status</a>', $predicate, formatProjectStatus($status)); break; case 'edit_project_deadline': $deadline = $event->getData2(); if ($deadline != null) { $predicate = $showProject ? 'the project ' . formatProjectLink($event->getProjectID()) : 'this project'; $formatted = sprintf("%s changed the %s of %s to %s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . Url::deadline($event->getProjectID()) . '">deadline</a>', $predicate, strftime("%a, %b %d, %Y", strtotime($deadline))); } else { $predicate = $showProject ? 'the project ' . formatProjectLink($event->getProjectID()) : 'this project'; $formatted = sprintf("%s removed the %s for %s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . Url::deadline($event->getProjectID()) . '">deadline</a>', $predicate); } break; case 'create_discussion': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $discussion = Discussion::load($event->getItem1ID()); $title = $discussion->getTitle(); $url = Url::discussion($discussion->getID()); $formatted = sprintf("%s posted the discussion %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'lock_discussion': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $discussion = Discussion::load($event->getItem1ID()); $title = $discussion->getTitle(); $url = Url::discussion($discussion->getID()); $formatted = sprintf("%s locked the discussion %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'unlock_discussion': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $discussion = Discussion::load($event->getItem1ID()); $title = $discussion->getTitle(); $url = Url::discussion($discussion->getID()); $formatted = sprintf("%s unlocked the discussion %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'create_discussion_reply': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $discussion = Discussion::load($event->getItem2ID()); $title = $discussion->getTitle(); $url = Url::discussion($discussion->getID()); $formatted = sprintf("%s replied to the discussion %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'create_task': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem1ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $formatted = sprintf("%s created the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'edit_task_title': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem1ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $formatted = sprintf("%s edited the name of the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'edit_task_status': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem1ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $status = $event->getData2(); if ($status == Task::STATUS_CLOSED) { $formatted = sprintf("%s closed the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); } else { $formatted = sprintf("%s opened the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); } break; case 'edit_task_num_needed': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem1ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $numNeeded = $event->getData2(); if ($numNeeded != '') { $formatted = sprintf("%s changed the # people needed for the task %s%s to %s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate, $numNeeded); } else { $formatted = sprintf("%s changed the # people needed for the task %s%s to ∞.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate, $numNeeded); } break; case 'edit_task_leader': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem1ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $formatted = sprintf("%s changed the leader of the task %s%s to %s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate, formatUserLink($event->getUser2ID(), $event->getProjectID())); break; case 'edit_task_description': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem1ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $formatted = sprintf("%s edited the instructions for the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'edit_task_uploads': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem1ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $formatted = sprintf("%s edited the attached files for the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'edit_task_deadline': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem1ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $deadline = $event->getData2(); if ($deadline != '') { $formatted = sprintf("%s changed the deadline for the task %s%s to %s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate, strftime("%a, %b %d, %Y", strtotime($deadline))); } else { $formatted = sprintf("%s removed the deadline for the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); } break; case 'accept_task': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $accepted = Accepted::load($event->getItem1ID()); //$acceptedUrl = Url::updates($accepted->getID()); $task = Task::load($event->getItem2ID()); $taskTitle = $task->getTitle(); $taskUrl = Url::task($task->getID()); $formatted = sprintf("%s joined the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $taskUrl . '">' . $taskTitle . '</a>', $predicate); break; case 'release_task': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $accepted = Accepted::load($event->getItem1ID()); //$acceptedUrl = Url::updates($accepted->getID()); $task = Task::load($event->getItem2ID()); $taskTitle = $task->getTitle(); $taskUrl = Url::task($task->getID()); $formatted = sprintf("%s left the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $taskUrl . '">' . $taskTitle . '</a>', $predicate); break; case 'edit_accepted_status': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $update = Update::load($event->getItem1ID()); $updateTitle = $update->getTitle(); $updateUrl = Url::update($update->getID()); $accepted = Accepted::load($event->getItem2ID()); $task = Task::load($event->getItem3ID()); $taskTitle = $task->getTitle(); $taskUrl = Url::task($task->getID()); $status = $event->getData2(); if ($status == Accepted::STATUS_FEEDBACK) { $formatted = sprintf("%s is seeking feedback on his/her work on the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $taskUrl . '">' . $taskTitle . '</a>', $predicate); } elseif ($status == Accepted::STATUS_COMPLETED) { $formatted = sprintf("%s is finished working on the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $taskUrl . '">' . $taskTitle . '</a>', $predicate); } elseif ($status == Accepted::STATUS_PROGRESS) { $formatted = sprintf("%s is working on the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $taskUrl . '">' . $taskTitle . '</a>', $predicate); } break; case 'create_task_comment': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem2ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $formatted = sprintf("%s commented on the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'create_task_comment_reply': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $task = Task::load($event->getItem3ID()); $title = $task->getTitle(); $url = Url::task($task->getID()); $formatted = sprintf("%s replied to a comment on the task %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'create_update_comment': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $update = Update::load($event->getItem2ID()); $title = $update->getTitle(); $url = Url::update($update->getID()); $formatted = sprintf("%s commented on the contribution %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'create_update_comment_reply': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $update = Update::load($event->getItem3ID()); $title = $update->getTitle(); $url = Url::update($update->getID()); $formatted = sprintf("%s replied to a comment on the contribution %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $url . '">' . $title . '</a>', $predicate); break; case 'create_update': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $update = Update::load($event->getItem1ID()); $updateTitle = $update->getTitle(); $updateUrl = Url::update($update->getID()); $formatted = sprintf("%s created the contribution %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $updateUrl . '">' . $updateTitle . '</a>', $predicate); break; case 'edit_update_title': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $update = Update::load($event->getItem1ID()); $updateTitle = $update->getTitle(); $updateUrl = Url::update($update->getID()); $formatted = sprintf("%s edited the title of the contribution %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $updateUrl . '">' . $updateTitle . '</a>', $predicate); break; case 'edit_update_message': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $update = Update::load($event->getItem1ID()); $updateTitle = $update->getTitle(); $updateUrl = Url::update($update->getID()); $formatted = sprintf("%s edited the contents of the contribution %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $updateUrl . '">' . $updateTitle . '</a>', $predicate); break; case 'edit_update_uploads': $predicate = $showProject ? ' in the project ' . formatProjectLink($event->getProjectID()) : ''; $update = Update::load($event->getItem1ID()); $updateTitle = $update->getTitle(); $updateUrl = Url::update($update->getID()); $formatted = sprintf("%s edited the attached files for the contribution %s%s.", formatUserLink($event->getUser1ID(), $event->getProjectID()), '<a href="' . $updateUrl . '">' . $updateTitle . '</a>', $predicate); break; default: $formatted = 'Event type "' . $event->getEventTypeID() . '" not found.'; } return $formatted; }
$json = array('error' => 'Your reply cannot be empty.'); exit(json_encode($json)); } else { // post the comment $reply = new Comment(array('creator_id' => Session::getUserID(), 'project_id' => $project->getID(), 'update_id' => $updateID, 'parent_id' => $commentID, 'message' => $message)); $reply->save(); // log it $logEvent = new Event(array('event_type_id' => 'create_update_comment_reply', 'project_id' => $project->getID(), 'user_1_id' => Session::getUserID(), 'item_1_id' => $commentID, 'item_2_id' => $reply->getID(), 'item_3_id' => $updateID, 'data_1' => $message)); $logEvent->save(); // send email notification, if desired $creator = User::load($update->getCreatorID()); if ($creator->getID() != Session::getUserID()) { // don't email yourself if ($creator->getNotifyCommentTaskUpdate()) { // compose email $msg = "<p>" . formatUserLink(Session::getUserID()) . ' replied to a comment on your task update <a href="' . Url::update($updateID) . '">' . $update->getTitle() . '</a> in the project ' . formatProjectLink($project->getID()) . '. The reply was:</p>'; $msg .= "<blockquote>" . formatUpdate($message) . "</blockquote>"; $email = array('to' => $creator->getEmail(), 'subject' => '[' . PIPELINE_NAME . '] New comment reply on your task update in ' . $project->getTitle(), 'message' => $msg); // send email Email::send($email); } } // send us back Session::setMessage('You replied to a comment on this update.'); $json = array('success' => '1'); echo json_encode($json); } } else { $json = array('error' => 'Action not recognized.'); exit(json_encode($json)); }
$body .= "<blockquote>" . formatComment($message) . "</blockquote>"; $email = array('to' => $leader->getEmail(), 'subject' => '[' . PIPELINE_NAME . '] New comment reply on a task you are leading in ' . $project->getTitle(), 'message' => $body); // send email Email::send($email); } } // to task crew $crew = Accepted::getByTaskID($taskID); if ($crew != null) { foreach ($crew as $c) { $user = User::load($c->getCreatorID()); if ($user->getID() != Session::getUserID()) { // don't email yourself if ($user->getNotifyCommentTaskAccepted()) { // compose email $body = "<p>" . formatUserLink(Session::getUserID()) . ' replied to a comment on the task <a href="' . Url::task($taskID) . '">' . $task->getTitle() . '</a> in the project ' . formatProjectLink($project->getID()) . '. The reply was:</p>'; $body .= "<blockquote>" . formatComment($message) . "</blockquote>"; $email = array('to' => $user->getEmail(), 'subject' => '[' . PIPELINE_NAME . '] New comment reply on a task you joined in ' . $project->getTitle(), 'message' => $body); // send email Email::send($email); } } } } // send us back Session::setMessage('You replied to a comment on this task.'); $json = array('success' => '1'); echo json_encode($json); } } else { $json = array('error' => 'Invalid action.');
$email = array('to' => $u->getEmail(), 'subject' => '[' . PIPELINE_NAME . '] Invitation to join the project ' . $project->getTitle(), 'message' => $body); // send email Email::send($email); } } foreach ($emails as $e) { // generate code // $code = sha1(microtime(true).mt_rand(10000,90000)); // send invitation $invite = new Invitation(array('inviter_id' => Session::getUserID(), 'invitee_email' => $e, 'project_id' => $project->getID(), 'trusted' => $trusted, 'invitation_message' => $message)); $invite->save(); // log event $logEvent = new Event(array('event_type_id' => 'invite_member_email', 'project_id' => $project->getID(), 'user_1_id' => Session::getUserID(), 'item_1_id' => $invite->getID(), 'data_1' => $e, 'data_2' => $message, 'data_3' => $trusted)); $logEvent->save(); // compose email $body = "<p>" . formatUserLink(Session::getUserID()) . ' invited you to join the project ' . formatProjectLink($project->getID()) . '.</p>'; if (!empty($message)) { $body .= '<blockquote>' . formatInvitationMessage($message) . '</blockquote>'; } if ($trusted) { $body .= '<p>If you accept this invitation, you will become a <a href="' . Url::help() . '">trusted member</a> of this project.</p>'; } $body .= '<p>To respond to this invitation, <a href="' . Url::consent($e) . '">register</a> a free account on ' . PIPELINE_NAME . ' using this email address (' . $e . ').</p>'; $email = array('to' => $e, 'subject' => '[' . PIPELINE_NAME . '] Invitation to join the project ' . $project->getTitle(), 'message' => $body); // send email Email::send($email); } // send us back $numInvitations = count($users) + count($emails); Session::setMessage(formatCount($numInvitations, 'invitation', 'invitations') . ' sent.'); $json = array('success' => '1');
if (empty($unrespondedInvites)) { echo '<li class="none">(none)</li>'; } foreach ($invitations as $i) { // project title $project = Project::load($i->getProjectID()); $projectTitle = $project->getTitle(); if ($i->getResponse() != null) { echo '<li id="invitation-' . $i->getID() . '" class="responded hidden">'; } else { echo '<li id="invitation-' . $i->getID() . '">'; } if ($i->getTrusted()) { echo '<p class="project">' . formatUserLink($i->getInviterID(), $project->getID()) . ' invited you to join the project ' . formatProjectLink($i->getProjectID()) . ' as a <a href="' . Url::help() . '">trusted member</a>. (' . formatTimeTag($i->getDateCreated()) . ')</p>'; } else { echo '<p class="project">' . formatUserLink($i->getInviterID(), $project->getID()) . ' invited you to join the project ' . formatProjectLink($i->getProjectID()) . '. (' . formatTimeTag($i->getDateCreated()) . ')</p>'; } // show the invitation message, if it exists if ($i->getInvitationMessage() != null) { echo '<blockquote>' . formatInvitationMessage($i->getInvitationMessage()) . '</blockquote>'; } // only show response buttons if user hasn't responded yet if ($i->getResponse() === null) { echo '<div class="buttons">'; // don't allow accept invitation if already affiliated if (!$project->isAffiliated($i->getInviteeID())) { echo '<input class="accept" type="button" value="Accept" /> '; } echo '<input class="decline" type="button" value="Decline" /></div>'; } else { //echo '<div class="line"></div>';
if ($creator->getNotifyDiscussionStarted()) { // compose email $body = "<p>" . formatUserLink(Session::getUserID()) . ' replied to your discussion <a href="' . Url::discussion($discussionID) . '">' . $discussion->getTitle() . '</a> in the project ' . formatProjectLink($project->getID()) . '. The reply was:</p>'; $body .= "<blockquote>" . formatDiscussionReply($message) . "</blockquote>"; $email = array('to' => $creator->getEmail(), 'subject' => '[' . PIPELINE_NAME . '] New reply to your discussion in ' . $project->getTitle(), 'message' => $body); // send email Email::send($email); } } // others who replied to discussion $repliers = $discussion->getDistinctRepliers(); foreach ($repliers as $r) { if ($r->getID() != Session::getUserID()) { // don't email yourself if ($r->getNotifyDiscussionReply()) { // compose email $body = "<p>" . formatUserLink(Session::getUserID()) . ' replied to the discussion <a href="' . Url::discussion($discussionID) . '">' . $discussion->getTitle() . '</a> in the project ' . formatProjectLink($project->getID()) . '. The reply was:</p>'; $body .= "<blockquote>" . formatDiscussionReply($message) . "</blockquote>"; $email = array('to' => $r->getEmail(), 'subject' => '[' . PIPELINE_NAME . '] New reply to a discussion in ' . $project->getTitle(), 'message' => $body); // send email Email::send($email); } } } $json = array('success' => '1'); Session::setMessage("You replied to the discussion."); echo json_encode($json); } else { $json = array('error' => 'Invalid action.'); exit(json_encode($json)); }
?> <?php $SOUP->render('site/partial/massEmail', array()); ?> </td> <td class="right"> <?php $data = array(); foreach ($projects as $p) { $data[] = array(formatProjectLink($p->getID()), formatUserLink($p->getCreatorID()), formatTimeTag($p->getDateCreated()), '<a href="' . Url::activity($p->getID()) . '">' . count(Event::getByProjectID($p->getID())) . '</a>'); } $SOUP->render('site/partial/itemTable', array('title' => 'All Projects (' . count($projects) . ')', 'ths' => array('Title', 'Creator', 'Created', '# Events'), 'data' => $data)); ?> <?php $data = array(); foreach ($users as $u) { $data[] = array(formatUserLink($u->getID()), formatTimeTag($u->getDateCreated()), count(Event::getUserEvents($u->getID()))); } $SOUP->render('site/partial/itemTable', array('title' => 'All Users (' . count($users) . ')', 'ths' => array('Username', 'Registered', '# Events'), 'data' => $data)); ?> </td> <?php