diff --git a/app/Http/Controllers/Modules/My.php b/app/Http/Controllers/Modules/My.php new file mode 100644 index 000000000..f42c6f645 --- /dev/null +++ b/app/Http/Controllers/Modules/My.php @@ -0,0 +1,29 @@ +checkApiToken(); + + $purchased = $this->getMyModules(); + $modules = $this->getInstalledModules(); + $installed = Module::all()->pluck('status', 'alias')->toArray(); + + return view('modules.my.index', compact('purchased', 'modules', 'installed')); + } +} diff --git a/app/Listeners/Updates/Version126.php b/app/Listeners/Updates/Version126.php new file mode 100644 index 000000000..33f674828 --- /dev/null +++ b/app/Listeners/Updates/Version126.php @@ -0,0 +1,48 @@ +check($event)) { + return; + } + + // Create permission + $permission = Permission::firstOrCreate([ + 'name' => 'read-modules-my', + 'display_name' => 'Read Modules My', + 'description' => 'Read Modules My', + ]); + + // Attach permission to roles + $roles = Role::all(); + + foreach ($roles as $role) { + $allowed = ['admin', 'manager']; + + if (!in_array($role->name, $allowed)) { + continue; + } + + $role->attachPermission($permission); + } + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 00ca6aaee..0443b7322 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -23,6 +23,7 @@ class EventServiceProvider extends ServiceProvider 'App\Listeners\Updates\Version113', 'App\Listeners\Updates\Version119', 'App\Listeners\Updates\Version120', + 'App\Listeners\Updates\Version126', ], 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\Auth\Login', diff --git a/app/Traits/Modules.php b/app/Traits/Modules.php index fb6b4eca3..7444eb29a 100644 --- a/app/Traits/Modules.php +++ b/app/Traits/Modules.php @@ -78,6 +78,45 @@ trait Modules return []; } + public function getMyModules($data = []) + { + $response = $this->getRemote('apps/my', 'GET', $data); + + if ($response && ($response->getStatusCode() == 200)) { + return json_decode($response->getBody())->data; + } + + return []; + } + + public function getInstalledModules($data = []) + { + $company_id = session('company_id'); + + $cache = 'installed.' . $company_id . '.module'; + + $installed = Cache::get($cache); + + if ($installed) { + return $installed; + } + + $installed = []; + $modules = Module::all(); + + foreach ($modules as $module) { + $result = $this->getModule($module->alias); + + if ($result) { + $installed[] = $result; + } + } + + Cache::put($cache, $installed, Date::now()->addHour(6)); + + return $installed; + } + public function getPaidModules($data = []) { $response = $this->getRemote('apps/paid', 'GET', $data); diff --git a/resources/lang/en-GB/modules.php b/resources/lang/en-GB/modules.php index 7352547e3..738bb46ee 100644 --- a/resources/lang/en-GB/modules.php +++ b/resources/lang/en-GB/modules.php @@ -4,6 +4,7 @@ return [ 'title' => 'API Token', 'api_token' => 'Token', + 'my_apps' => 'My Apps', 'top_paid' => 'Top Paid', 'new' => 'New', 'top_free' => 'Top Free', @@ -49,4 +50,9 @@ return [ 'disable' => 'Disable', 'enable' => 'Enable', ], + + 'my' => [ + 'purchased' => 'Purchased', + 'installed' => 'Installed', + ], ]; diff --git a/resources/views/modules/home/index.blade.php b/resources/views/modules/home/index.blade.php index 258448efb..29fac4061 100644 --- a/resources/views/modules/home/index.blade.php +++ b/resources/views/modules/home/index.blade.php @@ -4,6 +4,7 @@ @section('new_button') + @endsection @section('content') diff --git a/resources/views/modules/item/show.blade.php b/resources/views/modules/item/show.blade.php index da255406e..3da96943f 100644 --- a/resources/views/modules/item/show.blade.php +++ b/resources/views/modules/item/show.blade.php @@ -4,6 +4,7 @@ @section('new_button') + @endsection @section('content') diff --git a/resources/views/modules/my/index.blade.php b/resources/views/modules/my/index.blade.php new file mode 100644 index 000000000..7c3f23000 --- /dev/null +++ b/resources/views/modules/my/index.blade.php @@ -0,0 +1,34 @@ +@extends('layouts.modules') + +@section('title', trans_choice('general.modules', 2)) + +@section('new_button') + + +@endsection + +@section('content') + @include('partials.modules.bar') + +