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();
 }