diff --git a/app/Interfaces/Update/ShouldUpdateAllCompanies.php b/app/Interfaces/Update/ShouldUpdateAllCompanies.php new file mode 100644 index 000000000..f9611ffcd --- /dev/null +++ b/app/Interfaces/Update/ShouldUpdateAllCompanies.php @@ -0,0 +1,8 @@ +company_id = $company_id; } - /** - * Execute the job. - * - * @return string - */ - public function handle() + public function handle(): void { - if ($this->alias == 'core') { - $companies = [$this->company_id]; - } else { - // Get company list from modules table - $companies = Module::alias($this->alias)->allCompanies()->cursor(); - } + $companies = $this->getCompanies(); foreach ($companies as $company) { $company_id = is_object($company) ? $company->company_id : $company; @@ -58,4 +50,63 @@ class FinishUpdate extends Job } } } + + public function getCompanies() + { + if ($this->alias == 'core') { + return [$this->company_id]; + } + + return $this->getCompaniesOfModule(); + } + + public function getCompaniesOfModule() + { + $listener = $this->getListenerTypeOfModule(); + + if ($listener == 'none') { + return []; + } + + if ($listener == 'one') { + return [$this->company_id]; + } + + // Get company list from modules table + return Module::alias($this->alias)->allCompanies()->cursor(); + } + + public function getListenerTypeOfModule(): string + { + $listener = 'none'; + + $module = module($this->alias); + $filesystem = app(Filesystem::class); + + $updates_folder = $module->getPath() . '/Listeners/Update'; + + foreach ($filesystem->allFiles($updates_folder) as $file) { + $path = str_replace([$module->getPath(), '.php'], '', $file->getPathname()); + + // Thank you PSR-4 + $class = '\Modules\\' . $module->getStudlyName() . str_replace('/', '\\', $path); + + // Skip if listener is same or lower than old version + if (version_compare($class::VERSION, $this->old, '=<')) { + continue; + } + + if (app($class) instanceof ShouldUpdateAllCompanies) { + // Going to update data + $listener = 'all'; + + break; + } else { + // Going to update tables/files + $listener = 'one'; + } + } + + return $listener; + } }