files = $files; } /** * Execute the console command. * * @return void */ public function fire() { $tags = $this->option('tag'); $tags = $tags ?: [null]; foreach ($tags as $tag) { $this->publishTag($tag); } } /** * Publishes the assets for a tag. * * @param string $tag * @return mixed */ private function publishTag($tag) { $paths = ServiceProvider::pathsToPublish( $this->option('provider'), $tag ); if (empty($paths)) { return $this->comment("Nothing to publish for tag [{$tag}]."); } foreach ($paths as $from => $to) { if ($this->files->isFile($from)) { $this->publishFile($from, $to); } elseif ($this->files->isDirectory($from)) { $this->publishDirectory($from, $to); } else { $this->error("Can't locate path: <{$from}>"); } } $this->info("Publishing complete for tag [{$tag}]!"); } /** * Publish the file to the given path. * * @param string $from * @param string $to * @return void */ protected function publishFile($from, $to) { if ($this->files->exists($to) && ! $this->option('force')) { return; } $this->createParentDirectory(dirname($to)); $this->files->copy($from, $to); $this->status($from, $to, 'File'); } /** * Publish the directory to the given directory. * * @param string $from * @param string $to * @return void */ protected function publishDirectory($from, $to) { $manager = new MountManager([ 'from' => new Flysystem(new LocalAdapter($from)), 'to' => new Flysystem(new LocalAdapter($to)), ]); foreach ($manager->listContents('from://', true) as $file) { if ($file['type'] === 'file' && (! $manager->has('to://'.$file['path']) || $this->option('force'))) { $manager->put('to://'.$file['path'], $manager->read('from://'.$file['path'])); } } $this->status($from, $to, 'Directory'); } /** * Create the directory to house the published files if needed. * * @param string $directory * @return void */ protected function createParentDirectory($directory) { if (! $this->files->isDirectory($directory)) { $this->files->makeDirectory($directory, 0755, true); } } /** * Write a status message to the console. * * @param string $from * @param string $to * @param string $type * @return void */ protected function status($from, $to, $type) { $from = str_replace(base_path(), '', realpath($from)); $to = str_replace(base_path(), '', realpath($to)); $this->line('Copied '.$type.' ['.$from.'] To ['.$to.']'); } }