public static function setDBseparator($sep = ", ")
 {
     self::$dbseparator = $sep;
 }
 /**
  * @return FieldList
  */
 public function getCMSFields()
 {
     /** =========================================
          * Requirements
         ===========================================*/
     Requirements::css('roster/css/rosterAdmin.css');
     $fields = parent::getCMSFields();
     $endDate = $this->EndDate;
     $startDate = $this->StartDate;
     /** =========================================
         * Date
         ==========================================*/
     /** @var MultiDateField $holidayField */
     $holidayField = MultiDateField::create('Holidays');
     $holidayField->setConfig('dateformat', 'dd-MM-yyyy');
     $holidayField->setConfig('showcalendar', true);
     $holidayField->setConfig('separator', ', ');
     $holidayField->setConfig('min', $startDate);
     $holidayField->setConfig('max', $endDate);
     /** @var DateField $dateField */
     $dateField = DateField::create('StartDate');
     $dateField->setConfig('dateformat', 'dd-MM-yyyy');
     $fields->addFieldsToTab('Root.Main', array($dateField, $holidayField));
     /** @var $dateField DateField */
     $dateField->setConfig('showcalendar', true);
     /** =========================================
          * Staff Roster
         ===========================================*/
     $fields->removeByName(array('WeeklyRosters', 'StaffLeave', 'EndDate'));
     /** -----------------------------------------
          * Variables
         -------------------------------------------*/
     $roles = JobRole::get();
     $numberOfDays = Config::inst()->get('Roster', 'number_of_days') ?: 5;
     /** @var DataList $staffMembers */
     $staffMembers = Group::get()->filter(array('Code' => 'staff-members'))->first()->Members();
     $staffMap = $staffMembers->count() ? $staffMembers->map('ID', 'Initials')->toArray() : array();
     /** -----------------------------------------
          * Fields
         -------------------------------------------*/
     if ($roles->count()) {
         /** -----------------------------------------
              * Weekly Rosters
             -------------------------------------------*/
         if ($this->WeeklyRosters()->count()) {
             $editableColumns = new GridFieldEditableColumns();
             $editableColumns->setDisplayFields(array('Title' => array('title' => 'Role', 'field' => 'ReadonlyField'), 'StaffAm0' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'AM', $staffMap)->setMultiple(true);
             }, 'StaffPm0' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'PM', $staffMap)->setMultiple(true);
             }, 'StaffAm1' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'AM', $staffMap)->setMultiple(true);
             }, 'StaffPm1' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'PM', $staffMap)->setMultiple(true);
             }, 'StaffAm2' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'AM', $staffMap)->setMultiple(true);
             }, 'StaffPm2' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'PM', $staffMap)->setMultiple(true);
             }, 'StaffAm3' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'AM', $staffMap)->setMultiple(true);
             }, 'StaffPm3' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'PM', $staffMap)->setMultiple(true);
             }, 'StaffAm4' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'AM', $staffMap)->setMultiple(true);
             }, 'StaffPm4' => function ($record, $column, $grid) use($staffMap) {
                 return ListboxField::create($column, 'PM', $staffMap)->setMultiple(true);
             }));
             // Adjust the WeeklyRoster gridfield
             $grid = GridField::create('WeeklyRosters', sprintf('Weekly Roster for %s - %s', $this->dbObject('StartDate')->Format('D jS M'), $this->dbObject('EndDate')->Format('D jS M')), $this->WeeklyRosters(), GridFieldConfig::create()->addComponent(new GridFieldToolbarHeader())->addComponent(new RosterGridFieldTitleHeader($this->dbObject('StartDate'), $this->getHolidayArray()))->addComponent($editableColumns))->addExtraClass('roster-gridfield');
             $fields->addFieldToTab('Root.Main', $grid);
         } else {
             $fields->addFieldToTab('Root.Main', LiteralField::create('', sprintf('<div class="message notice"><p>%s</p></div>', _t('Roster.SaveFirstNotice', 'Choose a starting date, then press the green "Save" button at the bottom of the screen.'))));
             $this->WeeklyRosters()->addMany($roles);
         }
         /** -----------------------------------------
              * Staff Leave
             -------------------------------------------*/
         if ($this->StaffLeave()->count()) {
             $editableColumns = new GridFieldEditableColumns();
             $editableColumns->setDisplayFields(array('Title' => array('title' => 'Staff Member', 'field' => 'ReadonlyField'), 'Leave' => function ($record, $column, $grid) use($staffMap, $startDate, $endDate) {
                 return MultiDateField::create($column)->setConfig('dateformat', 'dd-MM-yyyy')->setConfig('showcalendar', true)->setConfig('separator', ', ')->setConfig('min', $startDate)->setConfig('max', $endDate);
             }));
             $grid = GridField::create('StaffLeave', sprintf('Staff Leave for %s - %s', $this->dbObject('StartDate')->Format('D jS M'), $this->dbObject('EndDate')->Format('D jS M')), $this->StaffLeave(), GridFieldConfig::create()->addComponent(new GridFieldToolbarHeader())->addComponent(new GridFieldTitleHeader())->addComponent($editableColumns))->addExtraClass('staff-leave-gridfield');
             $fields->addFieldToTab('Root.Main', $grid);
         } else {
             $this->StaffLeave()->addMany($staffMembers);
         }
     } else {
         // If no job roles exist, display a warning
         $fields->addFieldToTab('Root.Main', LiteralField::create('', sprintf('<div class="message warning"><p>%s</p></div>', _t('Roster.NoRoleWarning', 'Can&apos;t create roster; no job roles exist. Add new roles under the "Job Roles" tab.'))));
     }
     return $fields;
 }