88use App \Entity \AdapterConfig ;
99use App \Entity \Backup ;
1010use App \Entity \Database ;
11+ use App \Entity \Embed \BackupTask ;
12+ use App \Entity \Enum \BackupTaskPeriodicity ;
1113use App \Entity \User ;
1214use App \Helper \DatabaseHelper ;
1315use App \Security \Voter \DatabaseVoter ;
1416use App \Service \BackupService ;
1517use App \Service \BackupStatus ;
18+ use DateTime ;
1619use Doctrine \ORM \EntityManagerInterface ;
1720use Doctrine \ORM \QueryBuilder ;
1821use EasyCorp \Bundle \EasyAdminBundle \Collection \FieldCollection ;
2730use EasyCorp \Bundle \EasyAdminBundle \Dto \SearchDto ;
2831use EasyCorp \Bundle \EasyAdminBundle \Field \AssociationField ;
2932use EasyCorp \Bundle \EasyAdminBundle \Field \ChoiceField ;
30- use EasyCorp \Bundle \EasyAdminBundle \Field \DateTimeField ;
33+ use EasyCorp \Bundle \EasyAdminBundle \Field \DateField ;
34+ use EasyCorp \Bundle \EasyAdminBundle \Field \FormField ;
35+ use EasyCorp \Bundle \EasyAdminBundle \Field \IntegerField ;
3136use EasyCorp \Bundle \EasyAdminBundle \Field \NumberField ;
3237use EasyCorp \Bundle \EasyAdminBundle \Field \TextField ;
3338use EasyCorp \Bundle \EasyAdminBundle \Filter \ChoiceFilter ;
3641use EasyCorp \Bundle \EasyAdminBundle \Filter \TextFilter ;
3742use EasyCorp \Bundle \EasyAdminBundle \Orm \EntityRepository ;
3843use EasyCorp \Bundle \EasyAdminBundle \Router \AdminUrlGenerator ;
44+ use function sprintf ;
3945use Symfony \Component \HttpFoundation \Response ;
4046use Symfony \Component \Translation \TranslatableMessage ;
47+ use Symfony \Contracts \Translation \TranslatorInterface ;
4148
4249/**
4350 * @method User|null getUser()
@@ -49,6 +56,7 @@ public function __construct(
4956 private readonly AdminUrlGenerator $ adminUrlGenerator ,
5057 private readonly DatabaseHelper $ databaseHelper ,
5158 private readonly EntityManagerInterface $ em ,
59+ private readonly TranslatorInterface $ translator ,
5260 ) {
5361 }
5462
@@ -212,6 +220,7 @@ public function configureCrud(Crud $crud): Crud
212220
213221 public function configureFields (string $ pageName ): iterable
214222 {
223+ yield FormField::addPanel ('database.panel.main_info ' , 'fas fa-info-circle ' );
215224 yield TextField::new ('name ' , 'database.field.name ' )
216225 ->hideOnIndex ()
217226 ->setColumns (4 );
@@ -244,8 +253,26 @@ public function configureFields(string $pageName): iterable
244253 })
245254 ->hideOnForm ();
246255
247- yield DateTimeField::new ('createdAt ' , 'database.field.created_at ' )
248- ->setFormat ('dd-MM-Y HH:mm ' )
256+ yield BadgeField::new ('backupTask ' , 'database.field.backup_task.periodicity ' )
257+ ->formatValue (function (BackupTask $ backupTask ) {
258+ $ plural = $ backupTask ->getPeriodicityNumber () > 1 ;
259+
260+ return sprintf (
261+ '%s %s %s ' ,
262+ $ this ->translator ->trans ($ backupTask ->getDescriptionPrefixTranslation ()),
263+ $ plural ? $ backupTask ->getPeriodicityNumber () : null ,
264+ $ this ->translator ->trans ($ backupTask ->getDescriptionSuffixTranslation ())
265+ );
266+ })
267+ ->hideOnForm ();
268+ yield BadgeField::new ('backupTask.nextIteration ' , 'database.field.backup_task.next_iteration ' )
269+ ->formatValue (function ($ value ) {
270+ return $ value ->format ($ this ->translator ->trans ('global.date_format ' ));
271+ })
272+ ->hideOnForm ();
273+
274+ yield DateField::new ('createdAt ' , 'database.field.created_at ' )
275+ ->setFormat ($ this ->translator ->trans ('global.easy_admin_date_format ' ))
249276 ->hideOnForm ();
250277 yield ChoiceField::new ('status ' , 'database.field.status ' )
251278 ->setChoices (array_combine (
@@ -258,5 +285,24 @@ public function configureFields(string $pageName): iterable
258285 Database::STATUS_UNKNOWN => 'secondary ' ,
259286 ])
260287 ->hideOnForm ();
288+
289+ if (Crud::PAGE_INDEX !== $ pageName ) {
290+ yield FormField::addPanel ('database.panel.task_configuration ' , 'fa-solid fa-calendar ' );
291+ yield IntegerField::new ('backupTask.periodicityNumber ' , 'database.field.backup_task.periodicity_number ' )
292+ ->setFormTypeOption ('attr ' , ['min ' => 1 , 'step ' => 1 ])
293+ ->setColumns (4 );
294+ yield ChoiceField::new ('backupTask.periodicity ' , 'database.field.backup_task.periodicity ' )
295+ ->setChoices (BackupTaskPeriodicity::cases ())
296+ ->setFormTypeOption ('choice_label ' , function (?BackupTaskPeriodicity $ periodicity ) {
297+ return $ this ->translator ->trans ($ periodicity ?->formLabel());
298+ })
299+ ->setFormTypeOption ('choice_value ' , function (?BackupTaskPeriodicity $ periodicity ) {
300+ return $ periodicity ?->value;
301+ })
302+ ->setColumns (4 );
303+ yield DateField::new ('backupTask.startFrom ' , 'database.field.backup_task.start_from ' )
304+ ->setFormTypeOption ('attr ' , ['min ' => (new DateTime ('tomorrow ' ))->format ('Y-m-d ' )])
305+ ->setColumns (4 );
306+ }
261307 }
262308}
0 commit comments