public function onBeforeWrite() { if ($this->owner->BaseClass == "Discussion" && $this->owner->ID == 0) { $discussion = Discussion::get()->byID($this->owner->ParentID); $discussion_author = $discussion->Author(); $holder = $discussion->Parent(); $author = Member::get()->byID($this->owner->AuthorID); // Get our default email from address if (DiscussionHolder::config()->send_emails_from) { $from = DiscussionHolder::config()->send_email_from; } else { $from = Email::config()->admin_email; } // Vars for the emails $vars = array("Title" => $discussion->Title, "Author" => $author, "Comment" => $this->owner->Comment, 'Link' => Controller::join_links($holder->Link("view"), $discussion->ID, "#comments-holder")); // Send email to discussion owner if ($discussion_author && $discussion_author->Email && $discussion_author->RecieveCommentEmails && $discussion_author->ID != $this->owner->AuthorID) { $subject = _t("Discussions.NewCreatedReplySubject", "{Nickname} replied to your discussion", null, array("Nickname" => $author->Nickname)); $email = new Email($from, $discussion_author->Email, $subject); $email->setTemplate('NewCreatedReplyEmail'); $email->populateTemplate($vars); $email->send(); } // Send to anyone who liked this, if they want notifications foreach ($discussion->LikedBy() as $liked) { if ($liked->RecieveLikedReplyEmails && $liked->Email && $liked->ID != $author->ID) { $subject = _t("Discussions.NewLikedReplySubject", "{Nickname} replied to your liked discussion", null, array("Nickname" => $author->Nickname)); $email = new Email($from, $liked->Email, $subject); $email->setTemplate('NewLikedReplyEmail'); $email->populateTemplate($vars); $email->send(); } } } }
public function getTagsCollection() { $allTags = new ArrayList(); $max = 0; $member = Member::currentUser(); // Find if we need to filter tags by current discussion page $controller = Controller::curr(); if (method_exists($controller, "data")) { $page = $controller->data(); } else { $page = null; } if ($page != null && $page instanceof DiscussionPage) { $discussions = $page->Discussions(); } else { $discussions = Discussion::get(); } if ($discussions) { foreach ($discussions as $discussion) { if ($discussion->canView($member)) { $theseTags = preg_split(" *, *", trim($discussion->Tags)); foreach ($theseTags as $tag) { if ($tag) { if ($allTags->find("Tag", $tag)) { $allTags->find("Tag", $tag)->Count++; } else { $allTags->push(new ArrayData(array("Tag" => $tag, "Count" => 1, "Link" => Controller::join_links($discussion->Parent()->Link("tag"), Convert::raw2url($tag))))); } $tag_count = $allTags->find("Tag", $tag)->Count; $max = $tag_count > $max ? $tag_count : $max; } } } } if ($allTags->exists()) { // First sort our tags $allTags->sort($this->SortParam, $this->SortOrder); // Now if a limit has been set, limit the list if ($this->Limit) { $allTags = $allTags->limit($this->Limit); } } return $allTags; } return; }
/** * Process the submitted form data and save to database * * @return Redirect */ public function post(array $data, Form $form) { $discussion = null; $page = DiscussionHolder::get()->byID($this->controller->ID); $member = Member::currentUser(); if ($this->controller->canStartDiscussions($member)) { // Check if we are editing or creating if (isset($data['ID']) && $data['ID']) { $discussion = Discussion::get()->byID($data['ID']); } if (!$discussion || $discussion == null) { $discussion = Discussion::create(); } $form->saveInto($discussion); $discussion->AuthorID = $member->ID; $discussion->ParentID = $page->ID; $form->saveInto($discussion); $discussion->write(); $discussion_url = Controller::join_links($this->controller->Link("view"), $discussion->ID); return $this->controller->redirect($discussion_url); } else { return $this->controller->httpError(404); } }
/** * Like a particular discussion by ID * */ public function like() { $member = Member::currentUser(); $discussion = Discussion::get()->byID($this->request->param("ID")); if ($discussion && $discussion->canView($member)) { $this->setSessionMessage("message good", _t("Discussions.Liked", "Liked") . " '{$discussion->Title}'"); $member->LikedDiscussions()->add($discussion); $member->write(); $author = $discussion->Author(); // Send a notification (if the author wants it) if ($author && $author->RecieveLikedEmails && $author->Email && $member->ID != $author->ID) { if (DiscussionHolder::config()->send_email_from) { $from = DiscussionHolder::config()->send_email_from; } else { $from = Email::config()->admin_email; } $subject = _t("Discussions.LikedDiscussionSubject", "{Nickname} liked your discussion", null, array("Nickname" => $member->Nickname)); // Vars for the emails $vars = array("Title" => $discussion->Title, "Member" => $member, 'Link' => Controller::join_links($this->Link("view"), $discussion->ID, "#comments-holder")); $email = new Email($from, $author->Email, $subject); $email->setTemplate('LikedDiscussionEmail'); $email->populateTemplate($vars); $email->send(); } } return $this->redirect(Controller::join_links($this->Link("view"), $discussion->ID)); }