public function requireDefaultRecords() { parent::requireDefaultRecords(); // Setup Discussion Page $page = DiscussionHolder::get()->first(); if (!$page) { $page = new DiscussionHolder(); $page->Title = "Discussions"; $page->URLSegment = "discussions"; $page->Sort = 3; $page->write(); $page->publish('Stage', 'Live'); DB::alteration_message('Discussions Holder Created', 'created'); } }
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(); } } } }
/** * Get all Discussion Groups and set relevent links for each * * @return DataList */ public function getMenu() { // Get the current associated discussion holder $discussion_holder = DiscussionHolder::get()->filter("SideBar.ID", $this->ParentID)->first(); $menu = new ArrayList(); $menu->add(new ArrayData(array("ID" => 0, "Title" => _t('Discussions.All', "All"), "Link" => $discussion_holder->Link()))); $menu->add(new ArrayData(array("ID" => 10, "Title" => _t('Discussions.Liked', "Liked"), "Link" => $discussion_holder->Link("liked")))); $menu->add(new ArrayData(array("ID" => 20, "Title" => _t('Discussions.Started', "I started"), "Link" => $discussion_holder->Link("my")))); $this->extend("updateMenu", $menu); return $menu->sort("ID", "ASC"); }
/** * Add default records to database. * * This function is called whenever the database is built, after the * database tables have all been created. */ public function requireDefaultRecords() { parent::requireDefaultRecords(); // Add default poster group if it doesn't exist $poster = Group::get()->filter("Code", 'discussions-posters')->first(); if (!$poster) { $poster = new Group(); $poster->Code = 'discussions-posters'; $poster->Title = _t('Discussions.DefaultGroupTitlePosters', 'Discussion Posters'); $poster->Sort = 1; $poster->write(); Permission::grant($poster->ID, 'DISCUSSIONS_REPLY'); DB::alteration_message('Discussion Poster Group Created', 'created'); } // Add default modrator group if none exists $moderator = Permission::get_groups_by_permission('DISCUSSIONS_MODERATION')->first(); if (!$moderator) { $moderator = new Group(); $moderator->Code = 'discussions-moderators'; $moderator->Title = _t('Discussions.DefaultGroupTitleModerators', 'Discussion Moderators'); $moderator->Sort = 0; $moderator->write(); Permission::grant($moderator->ID, 'DISCUSSIONS_MODERATION'); DB::alteration_message('Discussion Moderator Group Created', 'created'); } // Now add these groups to a discussion holder (if one exists) foreach (DiscussionHolder::get() as $page) { if (!$page->PosterGroups()->count()) { $page->PosterGroups()->add($poster); $page->write(); DB::alteration_message('Added Poster Group to Discussions Holder', 'created'); } if (!$page->ModeratorGroups()->count()) { $page->ModeratorGroups()->add($moderator); $page->write(); DB::alteration_message('Added Moderator Group to Discussions Holder', 'created'); } } }
/** * 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)); }
/** * Get all Discussion Groups and set relevent links for each * * @return DataList */ public function getCategories() { // Get the current associated discussion holder $discussion_holder = DiscussionHolder::get()->filter("SideBar.ID", $this->ParentID)->first(); return $discussion_holder->Categories(); }