Skip to content

Commit

Permalink
added listener to install extra modules
Browse files Browse the repository at this point in the history
  • Loading branch information
denisdulici committed Dec 24, 2020
1 parent a1f0f62 commit 5fa882b
Show file tree
Hide file tree
Showing 9 changed files with 104 additions and 6 deletions.
3 changes: 2 additions & 1 deletion app/Console/Stubs/Modules/json.stub
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"requires": [],
"reports": [],
"widgets": [],
"settings": []
"settings": [],
"extra-modules": {}
}
6 changes: 5 additions & 1 deletion app/Events/Module/Installed.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,19 @@ class Installed extends Event

public $company_id;

public $locale;

/**
* Create a new event instance.
*
* @param $alias
* @param $company_id
* @param $locale
*/
public function __construct($alias, $company_id)
public function __construct($alias, $company_id, $locale)
{
$this->alias = $alias;
$this->company_id = $company_id;
$this->locale = $locale;
}
}
41 changes: 41 additions & 0 deletions app/Jobs/Install/DownloadModule.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

namespace App\Jobs\Install;

use App\Abstracts\Job;
use App\Utilities\Console;

class DownloadModule extends Job
{
protected $alias;

protected $company_id;

/**
* Create a new job instance.
*
* @param $alias
* @param $company_id
*/
public function __construct($alias, $company_id = null)
{
$this->alias = $alias;
$this->company_id = $company_id ?: session('company_id');
}

/**
* Execute the job.
*
* @return string
*/
public function handle()
{
$command = "module:download {$this->alias} {$this->company_id}";

$result = Console::run($command);

if ($result !== true) {
throw new \Exception($result);
}
}
}
48 changes: 48 additions & 0 deletions app/Listeners/Module/InstallExtraModules.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

namespace App\Listeners\Module;

use App\Events\Module\Installed as Event;
use App\Jobs\Install\DownloadModule;
use App\Jobs\Install\InstallModule;
use App\Traits\Jobs;

class InstallExtraModules
{
use Jobs;

/**
* Handle the event.
*
* @param $event
* @return void
*/
public function handle(Event $event)
{
$module = module($event->alias);

$extra_modules = $module->get('extra-modules');

if (empty($extra_modules)) {
return;
}

foreach ($extra_modules as $alias => $level) {
// Don't install if the module is "suggested"
if ($level != 'required') {
continue;
}

try {
$this->dispatch(new DownloadModule($alias, $event->company_id));

$this->dispatch(new InstallModule($alias, $event->company_id, $event->locale));
} catch (\Exception $e) {
logger($e->getMessage());

// Stop the propagation of event if the required module failed to install
return false;
}
}
}
}
1 change: 1 addition & 0 deletions app/Providers/Event.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class Event extends Provider
'App\Listeners\Menu\AddPortalItems',
],
'App\Events\Module\Installed' => [
'App\Listeners\Module\InstallExtraModules',
'App\Listeners\Module\FinishInstallation',
],
];
Expand Down
3 changes: 2 additions & 1 deletion modules/BC21/module.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
"requires": [],
"reports": [],
"widgets": [],
"settings": []
"settings": [],
"extra-modules": {}
}
3 changes: 2 additions & 1 deletion modules/OfflinePayments/module.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"requires": [],
"reports": [],
"widgets": [],
"settings": []
"settings": [],
"extra-modules": {}
}
3 changes: 2 additions & 1 deletion modules/PaypalStandard/module.json
Original file line number Diff line number Diff line change
Expand Up @@ -97,5 +97,6 @@
"attributes": {},
"rules": "required|integer"
}
]
],
"extra-modules": {}
}
2 changes: 1 addition & 1 deletion overrides/akaunting/module/Commands/InstallCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public function handle()

$this->createHistory('installed');

event(new Installed($this->alias, $this->company_id));
event(new Installed($this->alias, $this->company_id, $this->locale));

$this->revertRuntime();

Expand Down

0 comments on commit 5fa882b

Please sign in to comment.