/**
  * 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");
 }
 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');
     }
 }
 /**
  * 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);
     }
 }
 /**
  * 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();
 }