added update interface for companies

This commit is contained in:
Denis Duliçi 2021-09-09 22:41:44 +03:00
parent 67f8be51c6
commit 640cafb133
2 changed files with 71 additions and 12 deletions

View File

@ -0,0 +1,8 @@
<?php
namespace App\Interfaces\Update;
interface ShouldUpdateAllCompanies
{
//
}

View File

@ -3,8 +3,10 @@
namespace App\Jobs\Install;
use App\Abstracts\Job;
use App\Interfaces\Update\ShouldUpdateAllCompanies;
use App\Models\Module\Module;
use App\Utilities\Console;
use Illuminate\Filesystem\Filesystem;
class FinishUpdate extends Job
{
@ -32,19 +34,9 @@ class FinishUpdate extends Job
$this->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;
}
}