-
Notifications
You must be signed in to change notification settings - Fork 74
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
817b1f5
commit b6fea5d
Showing
4 changed files
with
221 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,23 +15,30 @@ | |
use SilverStripe\Forms\GridField\GridFieldAddNewButton; | ||
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor; | ||
use SilverStripe\Forms\GridField\GridFieldDataColumns; | ||
use SilverStripe\Forms\GridField\GridFieldFilterHeader; | ||
use SilverStripe\Forms\GridField\GridFieldPageCount; | ||
use SilverStripe\Forms\GridField\GridFieldToolbarHeader; | ||
use SilverStripe\Forms\TextareaField; | ||
use SilverStripe\ORM\DataList; | ||
use SilverStripe\ORM\FieldType\DBDatetime; | ||
use SilverStripe\Security\Permission; | ||
use SilverStripe\Security\Security; | ||
use Symbiote\QueuedJobs\DataObjects\QueuedJobDescriptor; | ||
use Symbiote\QueuedJobs\Forms\GridFieldQueuedJobExecute; | ||
use Symbiote\QueuedJobs\Services\AbstractQueuedJob; | ||
use Symbiote\QueuedJobs\Services\QueuedJob; | ||
use Symbiote\QueuedJobs\Services\QueuedJobService; | ||
use Terraformers\RichFilterHeader\Form\GridField\RichFilterHeader; | ||
|
||
/** | ||
* @author Marcus Nyeholt <[email protected]> | ||
* @license BSD http://silverstripe.org/bsd-license/ | ||
*/ | ||
class QueuedJobsAdmin extends ModelAdmin | ||
{ | ||
const SCHEDULED_FILTER_FUTURE = 'future'; | ||
const SCHEDULED_FILTER_PAST = 'past'; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
|
@@ -74,6 +81,16 @@ class QueuedJobsAdmin extends ModelAdmin | |
*/ | ||
private static $date_format_european = 'dd/MM/yyyy'; | ||
|
||
/** | ||
* Enables advanced admin UI | ||
* Note that this requires optional module | ||
* silverstripe-terraformers/gridfield-rich-filter-header | ||
* | ||
* @config | ||
* @var bool | ||
*/ | ||
private static $advanced_admin_ui = false; | ||
|
||
/** | ||
* @var QueuedJobService | ||
*/ | ||
|
@@ -167,6 +184,10 @@ public function getEditForm($id = null, $fields = null) | |
); | ||
} | ||
|
||
if ($this->config()->get('advanced_admin_ui')) { | ||
$this->enableAdvancedAdminUi($grid); | ||
} | ||
|
||
$this->extend('updateEditForm', $form); | ||
|
||
return $form; | ||
|
@@ -213,4 +234,161 @@ public function createjob($data, Form $form) | |
} | ||
return $this->redirectBack(); | ||
} | ||
|
||
/** | ||
* @param GridField $gridField | ||
*/ | ||
private function enableAdvancedAdminUi(GridField $gridField) | ||
{ | ||
if (!class_exists(RichFilterHeader::class)) { | ||
return; | ||
} | ||
|
||
$config = $gridField->getConfig(); | ||
|
||
/** @var GridFieldDataColumns $gridFieldColumns */ | ||
$gridFieldColumns = $config->getComponentByType(GridFieldDataColumns::class); | ||
|
||
$gridFieldColumns->setDisplayFields([ | ||
'getImplementationSummary' => 'Type', | ||
'JobTypeString' => 'Queue', | ||
'JobStatus' => 'Status', | ||
'JobTitle' => 'Description', | ||
'Created' => 'Added', | ||
'StartAfter' => 'Scheduled', | ||
'JobFinished' => 'Finished', | ||
]); | ||
|
||
$config->removeComponentsByType(GridFieldFilterHeader::class); | ||
|
||
$filter = new RichFilterHeader(); | ||
$filter | ||
->setFilterConfig([ | ||
'getImplementationSummary' => 'Implementation', | ||
'Description' => 'JobTitle', | ||
'Status' => [ | ||
'title' => 'JobStatus', | ||
'filter' => 'ExactMatchFilter', | ||
], | ||
'JobTypeString' => [ | ||
'title' => 'JobType', | ||
'filter' => 'ExactMatchFilter', | ||
], | ||
'Created' => 'Added', | ||
'StartAfter' => 'Scheduled', | ||
]) | ||
->setFilterFields([ | ||
'JobType' => $queueType = DropdownField::create( | ||
'', | ||
'', | ||
$this->getQueueTypes() | ||
), | ||
'JobStatus' => $jobStatus = DropdownField::create( | ||
'', | ||
'', | ||
$this->getJobStatuses() | ||
), | ||
'Added' => $added = DropdownField::create( | ||
'', | ||
'', | ||
$this->getAddedDates() | ||
), | ||
'Scheduled' => $scheduled = DropdownField::create( | ||
'', | ||
'', | ||
[ | ||
self::SCHEDULED_FILTER_FUTURE => self::SCHEDULED_FILTER_FUTURE, | ||
self::SCHEDULED_FILTER_PAST => self::SCHEDULED_FILTER_PAST, | ||
] | ||
), | ||
]) | ||
->setFilterMethods([ | ||
'Added' => static function (DataList $list, $name, $value) { | ||
if ($value) { | ||
$added = DBDatetime::now()->modify($value); | ||
|
||
return $list->filter(['Created:LessThanOrEqual' => $added->Rfc2822()]); | ||
} | ||
|
||
return $list; | ||
}, | ||
'Scheduled' => static function (DataList $list, $name, $value) { | ||
if ($value === static::SCHEDULED_FILTER_FUTURE) { | ||
return $list->filter([ | ||
'StartAfter:GreaterThan' => DBDatetime::now()->Rfc2822(), | ||
]); | ||
} | ||
|
||
if ($value === static::SCHEDULED_FILTER_PAST) { | ||
return $list->filter([ | ||
'StartAfter:LessThanOrEqual' => DBDatetime::now()->Rfc2822(), | ||
]); | ||
} | ||
|
||
return $list; | ||
}, | ||
]); | ||
|
||
foreach ([$jobStatus, $queueType, $added, $scheduled] as $dropDownField) { | ||
/** @var DropdownField $dropDownField */ | ||
$dropDownField->setEmptyString('-- select --'); | ||
} | ||
|
||
$config->addComponent($filter, GridFieldPaginator::class); | ||
} | ||
|
||
/** | ||
* Queue types options for drop down field | ||
* | ||
* @return array | ||
*/ | ||
private function getQueueTypes() | ||
{ | ||
/** @var QueuedJobDescriptor $job */ | ||
$job = QueuedJobDescriptor::singleton(); | ||
$map = $job->getJobTypeValues(); | ||
$values = array_values($map); | ||
$keys = []; | ||
|
||
foreach (array_keys($map) as $key) { | ||
$keys[] = (int) $key; | ||
} | ||
|
||
return array_combine($keys, $values); | ||
} | ||
|
||
/** | ||
* All possible job statuses (this list is not exposed by the module) | ||
* intended to be used in a drop down field | ||
* | ||
* @return array | ||
*/ | ||
private function getJobStatuses() | ||
{ | ||
/** @var QueuedJobDescriptor $job */ | ||
$job = QueuedJobDescriptor::singleton(); | ||
$statuses = $job->getJobStatusValues(); | ||
|
||
sort($statuses, SORT_STRING); | ||
|
||
$statuses = array_combine($statuses, $statuses); | ||
|
||
return $statuses; | ||
} | ||
|
||
/** | ||
* Date options for added dates drop down field | ||
* | ||
* @return array | ||
*/ | ||
private function getAddedDates() | ||
{ | ||
return [ | ||
'-1 day' => '1 day or older', | ||
'-3 day' => '3 days or older', | ||
'-7 day' => '7 days or older', | ||
'-14 day' => '14 days or older', | ||
'-1 month' => '1 month or older', | ||
]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters