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't create roster; no job roles exist. Add new roles under the "Job Roles" tab.')))); } return $fields; }