call('cache:clear'); // Create a symlink for the module (or all modules) $module_alias = $this->argument('module_alias'); if (!$module_alias) { $modules = \Module::all(); $modules_aliases = []; foreach ($modules as $module) { $modules_aliases[] = $module->name; } if (!$modules_aliases) { $this->error('No modules found'); return; } $install_all = $this->confirm('You have not specified a module alias, would you like to install all available modules ('.implode(', ', $modules_aliases).')?'); if (!$install_all) { return; } } if ($install_all) { foreach ($modules as $module) { $this->line('Module: '.$module->getName()); $this->call('module:migrate', ['module' => $module->getName()]); $this->createModulePublicSymlink($module); } } else { $module = \Module::findByAlias($module_alias); if (!$module) { $this->error('Module with the specified alias not found: '.$module_alias); return; } $this->call('module:migrate', ['module' => $module->getName(), '--force' => true]); $this->createModulePublicSymlink($module); } $this->line('Clearing cache...'); $this->call('freescout:clear-cache'); } // There is similar function in \App\Module. public function createModulePublicSymlink($module) { $from = public_path('modules').DIRECTORY_SEPARATOR.$module->alias; $to = $module->getExtraPath('Public'); // file_exists() may throw "open_basedir restriction in effect". try { // If module's Public is symlink. if (is_link($to)) { @unlink($to); } // Symlimk may exist but lead to the module folder in a wrong case. // So we need first try to remove it. if (!file_exists($from) || !is_link($from)) { if (is_dir($from)) { @rename($from, $from.'_'.date('YmdHis')); } else { @unlink($from); } } if (file_exists($from)) { return $this->info('Public symlink already exists'); } // Check target. if (!file_exists($to)) { // Try to create Public folder. try { \File::makeDirectory($to, \Helper::DIR_PERMISSIONS); } catch (\Exception $e) { // If it's a broken symlink. if (is_link($to)) { @unlink($to); } } } try { symlink($to, $from); } catch (\Exception $e) { $this->error('Error occurred creating ['.$from.' » '.$to.'] symlink: '.$e->getMessage()); } } catch (\Exception $e) { $this->error('Error occurred creating ['.$from.' » '.$to.'] symlink: '.$e->getMessage()); } $this->info('The ['.$from.'] symlink has been created'); } }