1717use CodeIgniter \CLI \CLI ;
1818use CodeIgniter \Exceptions \LogicException ;
1919use Config \App ;
20+ use ErrorException ;
21+ use FilesystemIterator ;
2022use Locale ;
2123use RecursiveDirectoryIterator ;
2224use RecursiveIteratorIterator ;
@@ -87,31 +89,45 @@ public function run(array $params)
8789 $ this ->languagePath = SUPPORTPATH . 'Language ' ;
8890 }
8991
90- $ this ->process ($ optionLocale , $ optionTargetLocale );
91-
92- CLI :: write ( ' All operations done! ' );
92+ if ( $ this ->process ($ optionLocale , $ optionTargetLocale ) === EXIT_SUCCESS ) {
93+ CLI :: write ( ' All operations done! ' );
94+ }
9395
9496 return EXIT_SUCCESS ;
9597 }
9698
97- private function process (string $ originalLocale , string $ targetLocale ): void
99+ private function process (string $ originalLocale , string $ targetLocale ): int
98100 {
99101 $ originalLocaleDir = $ this ->languagePath . DIRECTORY_SEPARATOR . $ originalLocale ;
100102 $ targetLocaleDir = $ this ->languagePath . DIRECTORY_SEPARATOR . $ targetLocale ;
101103
102104 if (! is_dir ($ originalLocaleDir )) {
103105 CLI ::error (
104- 'Error: The " ' . $ originalLocaleDir . '" directory was not found. '
106+ 'Error: The " ' . clean_path ( $ originalLocaleDir) . '" directory was not found. '
105107 );
108+
109+ return EXIT_ERROR ;
106110 }
107111
108- if (! is_dir ($ targetLocaleDir ) && ! mkdir ($ targetLocaleDir , 0775 )) {
112+ // Unifying the error - mkdir() may cause an exception.
113+ try {
114+ if (! is_dir ($ targetLocaleDir ) && ! mkdir ($ targetLocaleDir , 0775 )) {
115+ throw new ErrorException ();
116+ }
117+ } catch (ErrorException $ e ) {
109118 CLI ::error (
110- 'Error: The target directory " ' . $ targetLocaleDir . '" cannot be accessed. '
119+ 'Error: The target directory " ' . clean_path ( $ targetLocaleDir) . '" cannot be accessed. '
111120 );
121+
122+ return EXIT_ERROR ;
112123 }
113124
114- $ iterator = new RecursiveIteratorIterator (new RecursiveDirectoryIterator ($ originalLocaleDir ));
125+ $ iterator = new RecursiveIteratorIterator (
126+ new RecursiveDirectoryIterator (
127+ $ originalLocaleDir ,
128+ FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS
129+ )
130+ );
115131
116132 /**
117133 * @var list<SplFileInfo> $files
@@ -120,7 +136,7 @@ private function process(string $originalLocale, string $targetLocale): void
120136 ksort ($ files );
121137
122138 foreach ($ files as $ originalLanguageFile ) {
123- if ($ this -> isIgnoredFile ( $ originalLanguageFile ) ) {
139+ if ($ originalLanguageFile -> getExtension () !== ' php ' ) {
124140 continue ;
125141 }
126142
@@ -138,6 +154,8 @@ private function process(string $originalLocale, string $targetLocale): void
138154 $ content = "<?php \n\nreturn " . var_export ($ targetLanguageKeys , true ) . "; \n" ;
139155 file_put_contents ($ targetLanguageFile , $ content );
140156 }
157+
158+ return EXIT_SUCCESS ;
141159 }
142160
143161 /**
@@ -179,9 +197,4 @@ private function mergeLanguageKeys(array $originalLanguageKeys, array $targetLan
179197
180198 return $ mergedLanguageKeys ;
181199 }
182-
183- private function isIgnoredFile (SplFileInfo $ file ): bool
184- {
185- return $ file ->isDir () || $ file ->getFilename () === '. ' || $ file ->getFilename () === '.. ' || $ file ->getExtension () !== 'php ' ;
186- }
187200}
0 commit comments