@@ -48,28 +48,33 @@ public function index(Request $request): Response
4848 {
4949 $ this ->userHasPermission (PermissionType::BACKUP );
5050
51- return $ this ->render ('@admin/backup/main.twig ' , [
52- ...$ this ->getHeader ($ request ),
53- ...$ this ->getFooter (),
54- 'adminHeaderBackup ' => Translation::get (key: 'msgBackup ' ),
55- 'adminBackupCardHeader ' => Translation::get (key: 'ad_csv_head ' ),
56- 'adminBackupCardBody ' => Translation::get (key: 'ad_csv_make ' ),
57- 'adminBackupLinkData ' => Translation::get (key: 'ad_csv_linkdat ' ),
58- 'adminBackupLinkLogs ' => Translation::get (key: 'ad_csv_linklog ' ),
59- 'csrfToken ' => Token::getInstance ($ this ->container ->get (id: 'session ' ))->getTokenString ('restore ' ),
60- 'adminRestoreCardHeader ' => Translation::get (key: 'ad_csv_head2 ' ),
61- 'adminRestoreCardBody ' => Translation::get (key: 'ad_csv_restore ' ),
62- 'adminRestoreLabel ' => Translation::get (key: 'ad_csv_file ' ),
63- 'adminRestoreButton ' => Translation::get (key: 'ad_csv_ok ' ),
64- ]);
51+ return $ this ->render (
52+ file: '@admin/backup/main.twig ' ,
53+ context: [
54+ ...$ this ->getHeader ($ request ),
55+ ...$ this ->getFooter (),
56+ 'adminHeaderBackup ' => Translation::get (key: 'msgBackup ' ),
57+ 'adminBackupCardHeader ' => Translation::get (key: 'ad_csv_head ' ),
58+ 'adminBackupCardBody ' => Translation::get (key: 'ad_csv_make ' ),
59+ 'adminBackupLinkData ' => Translation::get (key: 'ad_csv_linkdat ' ),
60+ 'adminBackupLinkLogs ' => Translation::get (key: 'ad_csv_linklog ' ),
61+ 'csrfToken ' => Token::getInstance ($ this ->container ->get (id: 'session ' ))->getTokenString (
62+ page: 'restore ' ,
63+ ),
64+ 'adminRestoreCardHeader ' => Translation::get (key: 'ad_csv_head2 ' ),
65+ 'adminRestoreCardBody ' => Translation::get (key: 'ad_csv_restore ' ),
66+ 'adminRestoreLabel ' => Translation::get (key: 'ad_csv_file ' ),
67+ 'adminRestoreButton ' => Translation::get (key: 'ad_csv_ok ' ),
68+ ],
69+ );
6570 }
6671
6772 #[Route(path: '/backup/export/:type ' , name: 'admin.backup.export ' , methods: ['GET ' ])]
6873 public function export (Request $ request ): Response
6974 {
7075 $ this ->userHasPermission (PermissionType::BACKUP );
7176
72- $ type = $ request ->attributes ->get ('type ' );
77+ $ type = $ request ->attributes ->get (key: 'type ' );
7378 $ backup = $ this ->container ->get (id: 'phpmyfaq.backup ' );
7479
7580 switch ($ type ) {
@@ -94,8 +99,14 @@ public function export(Request $request): Response
9499 urlencode ($ backupFileName ),
95100 );
96101
97- $ response ->headers ->set ('Content-Type ' , 'application/octet-stream; charset=UTF-8 ' );
98- $ response ->headers ->set ('Content-Disposition ' , $ disposition );
102+ $ response ->headers ->set (
103+ key: 'Content-Type ' ,
104+ values: 'application/octet-stream; charset=UTF-8 ' ,
105+ );
106+ $ response ->headers ->set (
107+ key: 'Content-Disposition ' ,
108+ values: $ disposition ,
109+ );
99110
100111 return $ response ;
101112 } catch (SodiumException ) {
@@ -115,8 +126,14 @@ public function export(Request $request): Response
115126 urlencode ($ backupFileName ),
116127 );
117128
118- $ response ->headers ->set ('Content-Type ' , 'application/octet-stream; charset=UTF-8 ' );
119- $ response ->headers ->set ('Content-Disposition ' , $ disposition );
129+ $ response ->headers ->set (
130+ key: 'Content-Type ' ,
131+ values: 'application/octet-stream; charset=UTF-8 ' ,
132+ );
133+ $ response ->headers ->set (
134+ key: 'Content-Disposition ' ,
135+ values: $ disposition ,
136+ );
120137
121138 return $ response ;
122139 } catch (SodiumException ) {
@@ -136,28 +153,40 @@ public function restore(Request $request): Response
136153 {
137154 $ this ->userHasPermission (PermissionType::RESTORE );
138155
139- $ csrfToken = $ request ->query ->get ('csrf ' );
140- if (!Token::getInstance ($ this ->container ->get (id: 'session ' ))->verifyToken ('restore ' , $ csrfToken )) {
141- throw new UnauthorizedHttpException ('Invalid CSRF token ' );
156+ $ csrfToken = $ request ->query ->get (key: 'csrf ' );
157+ if (!Token::getInstance ($ this ->container ->get (id: 'session ' ))->verifyToken (
158+ page: 'restore ' ,
159+ requestToken: $ csrfToken ,
160+ )) {
161+ throw new UnauthorizedHttpException (challenge: 'Invalid CSRF token ' );
142162 }
143163
144- $ file = $ request ->files ->get ('userfile ' );
164+ $ file = $ request ->files ->get (key: 'userfile ' );
145165
146166 if (!$ file ) {
147- throw new RuntimeException ('No file uploaded ' );
167+ throw new RuntimeException (message: 'No file uploaded ' );
148168 }
149169
150170 $ templateVars = [
151171 'adminHeaderRestore ' => Translation::get (key: 'ad_csv_rest ' ),
152172 ];
153173
154- if ($ file && $ file ->isValid ()) {
174+ if ($ file ->isValid ()) {
155175 $ backup = $ this ->container ->get (id: 'phpmyfaq.backup ' );
156176
157- $ handle = fopen ($ file ->getPathname (), 'r ' );
158- $ backupData = fgets ($ handle , 65536 );
159- $ versionFound = Strings::substr ($ backupData , 0 , 9 );
160- $ versionExpected = '-- pmf ' . substr ($ this ->configuration ->getVersion (), 0 , 3 );
177+ $ handle = fopen ($ file ->getPathname (), mode: 'r ' );
178+ $ backupData = fgets ($ handle , length: 65536 );
179+ $ versionFound = Strings::substr (
180+ string: $ backupData ,
181+ start: 0 ,
182+ length: 9 ,
183+ );
184+ $ versionExpected = '-- pmf '
185+ . substr (
186+ string: $ this ->configuration ->getVersion (),
187+ offset: 0 ,
188+ length: 3 ,
189+ );
161190 $ queries = [];
162191
163192 $ fileName = $ file ->getClientOriginalName ();
@@ -193,8 +222,14 @@ public function restore(Request $request): Response
193222
194223 if ($ ok === 1 ) {
195224 // @todo: Start transaction for better recovery if something really bad happens
196- $ backupData = trim (Strings::substr ($ backupData , 11 ));
197- $ tables = explode (' ' , $ backupData );
225+ $ backupData = trim (Strings::substr (
226+ string: $ backupData ,
227+ start: 11 ,
228+ ));
229+ $ tables = explode (
230+ separator: ' ' ,
231+ string: $ backupData ,
232+ );
198233 $ numTables = count ($ tables );
199234 for ($ h = 0 ; $ h < $ numTables ; ++$ h ) {
200235 $ queries [] = sprintf ('DELETE FROM %s ' , $ tables [$ h ]);
@@ -209,16 +244,36 @@ public function restore(Request $request): Response
209244 ...$ templateVars ,
210245 'prepareMessage ' => Translation::get (key: 'ad_csv_prepare ' ),
211246 ];
212- while ($ backupData = fgets ($ handle , 65536 )) {
247+ while ($ backupData = fgets ($ handle , length: 65536 )) {
213248 $ backupData = trim ($ backupData );
214249 $ backupPrefixPattern = '-- pmftableprefix: ' ;
215250 $ backupPrefixPatternLength = Strings::strlen ($ backupPrefixPattern );
216- if (Strings::substr ($ backupData , 0 , $ backupPrefixPatternLength ) === $ backupPrefixPattern ) {
217- $ tablePrefix = trim (Strings::substr ($ backupData , $ backupPrefixPatternLength ));
251+ if (
252+ Strings::substr (
253+ string: $ backupData ,
254+ start: 0 ,
255+ length: $ backupPrefixPatternLength ,
256+ ) === $ backupPrefixPattern
257+ ) {
258+ $ tablePrefix = trim (Strings::substr (
259+ string: $ backupData ,
260+ start: $ backupPrefixPatternLength ,
261+ ));
218262 }
219263
220- if (Strings::substr ($ backupData , 0 , 2 ) !== '-- ' && $ backupData !== '' ) {
221- $ queries [] = trim (Strings::substr ($ backupData , 0 , -1 ));
264+ if (
265+ Strings::substr (
266+ string: $ backupData ,
267+ start: 0 ,
268+ length: 2 ,
269+ ) !== '-- '
270+ && $ backupData !== ''
271+ ) {
272+ $ queries [] = trim (Strings::substr (
273+ string: $ backupData ,
274+ start: 0 ,
275+ length: -1 ,
276+ ));
222277 }
223278 }
224279
@@ -292,10 +347,13 @@ public function restore(Request $request): Response
292347 ];
293348 }
294349
295- return $ this ->render ('@admin/backup/import.twig ' , [
296- ...$ this ->getHeader ($ request ),
297- ...$ this ->getFooter (),
298- ...$ templateVars ,
299- ]);
350+ return $ this ->render (
351+ file: '@admin/backup/import.twig ' ,
352+ context: [
353+ ...$ this ->getHeader ($ request ),
354+ ...$ this ->getFooter (),
355+ ...$ templateVars ,
356+ ],
357+ );
300358 }
301359}
0 commit comments