1414namespace DatabaseBackup \Utility ;
1515
1616use Cake \Core \Configure ;
17- use Cake \Filesystem \Folder ;
1817use Cake \I18n \FrozenTime ;
1918use Cake \Mailer \Email ;
2019use Cake \ORM \Entity ;
2120use DatabaseBackup \BackupTrait ;
2221use InvalidArgumentException ;
22+ use Symfony \Component \Finder \Finder ;
23+ use Symfony \Component \Finder \SplFileInfo ;
2324
2425/**
2526 * Utility to manage database backups
@@ -54,9 +55,9 @@ public function delete($filename)
5455 */
5556 public function deleteAll ()
5657 {
57- return array_filter (array_map (function ($ file ) {
58- return !$ this ->delete ($ file -> filename ) ?: $ file -> filename ;
59- }, $ this ->index ()->toList ()));
58+ return array_filter (array_map (function ($ filename ) {
59+ return !$ this ->delete ($ filename ) ?: $ filename ;
60+ }, $ this ->index ()->extract ( ' filename ' )-> toList ()));
6061 }
6162
6263 /**
@@ -67,19 +68,17 @@ public function deleteAll()
6768 */
6869 public function index ()
6970 {
70- $ target = $ this ->getTarget ();
71+ $ finder = ( new Finder ())-> files ()-> name ( ' /\.sql(\.(gz|bz2))?$/ ' )-> in ( $ this ->getTarget () );
7172
72- return collection ((new Folder ($ target ))->find ('.+\.sql(\.(gz|bz2))? ' ))
73- ->map (function ($ filename ) use ($ target ) {
74- return new Entity ([
75- 'filename ' => $ filename ,
76- 'extension ' => $ this ->getExtension ($ filename ),
77- 'compression ' => $ this ->getCompression ($ filename ),
78- 'size ' => filesize ($ target . DS . $ filename ),
79- 'datetime ' => new FrozenTime (date ('Y-m-d H:i:s ' , filemtime ($ target . DS . $ filename ))),
80- ]);
81- })
82- ->sortBy ('datetime ' );
73+ return collection ($ finder )->map (function (SplFileInfo $ file ) {
74+ return new Entity ([
75+ 'filename ' => $ file ->getFilename (),
76+ 'extension ' => $ this ->getExtension ($ file ->getFilename ()),
77+ 'compression ' => $ this ->getCompression ($ file ->getFilename ()),
78+ 'size ' => $ file ->getSize (),
79+ 'datetime ' => FrozenTime::createFromTimestamp ($ file ->getMTime ()),
80+ ]);
81+ })->sortBy ('datetime ' );
8382 }
8483
8584 /**
@@ -102,13 +101,9 @@ public function rotate($rotate)
102101 InvalidArgumentException::class
103102 );
104103 $ backupsToBeDeleted = $ this ->index ()->skip ((int )$ rotate );
104+ array_map ([$ this , 'delete ' ], $ backupsToBeDeleted ->extract ('filename ' )->toList ());
105105
106- //Deletes
107- foreach ($ backupsToBeDeleted as $ backup ) {
108- $ this ->delete ($ backup ->filename );
109- }
110-
111- return $ backupsToBeDeleted ->toArray ();
106+ return $ backupsToBeDeleted ->toList ();
112107 }
113108
114109 /**
0 commit comments