copyEnums(); $this->copyExceptions(); } private function copyExceptions(): void { $this->info('Copy Exceptions'); $this->copyToFolder([ CrmException::class ], 'Exceptions'); } private function copyEnums(): void { $this->info('Copy Enums'); $this->copyToFolder([ ApiError::class, ApiStatus::class, ArcadiaMailType::class, ArcadiaOrderType::class ], 'Enums'); } /** * Copy Classes to specified folder * * @param array $classes * @param string $folder * @return void */ private function copyToFolder(array $classes, string $folder): void { $rootTarget = app_path('../' . self::TARGET); foreach ($classes as $class) { $classFileName = \str_replace("App\\$folder\\", '', sprintf('%s.php', $class)); $classFileName = \str_replace('\\', '/', $classFileName); $classBasename = class_basename($class); $source = \app_path("$folder/$classFileName"); $dest = "$rootTarget/$folder/$classBasename.php"; if (File::exists($dest)) { File::delete($dest); } File::copy($source, $dest); $this->replaceNamespaceinPhpFile($dest); } } private function replaceNamespaceinPhpFile(string $source): void { $search = 'namespace App'; $replace = 'namespace ' . self::CLIENTNAMESPACE; $fContent = File::get($source); $pos = strpos($fContent, $search); if ($pos !== false) { File::put($source, substr_replace($fContent, $replace, $pos, strlen($search))); } } }