Merge pull request #364 from cuneytsenturk/master

Apps page show installed modules
This commit is contained in:
Cüneyt Şentürk
2018-05-29 12:55:46 +03:00
committed by GitHub
14 changed files with 197 additions and 6 deletions

View File

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Modules;
use App\Http\Controllers\Controller;
use App\Traits\Modules;
use App\Models\Module\Module;
use Illuminate\Routing\Route;
class Home extends Controller
@ -28,7 +29,8 @@ class Home extends Controller
$paid = $this->getPaidModules($data);
$new = $this->getNewModules($data);
$free = $this->getFreeModules($data);
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.home.index', compact('paid', 'new', 'free'));
return view('modules.home.index', compact('paid', 'new', 'free', 'installed'));
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Modules;
use App\Http\Controllers\Controller;
use App\Traits\Modules;
use App\Models\Module\Module;
use Illuminate\Routing\Route;
class My extends Controller
{
use Modules;
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$this->checkApiToken();
$purchased = $this->getMyModules();
$modules = $this->getInstalledModules();
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.my.index', compact('purchased', 'modules', 'installed'));
}
}

View File

@ -4,6 +4,7 @@ namespace App\Http\Controllers\Modules;
use App\Http\Controllers\Controller;
use App\Traits\Modules;
use App\Models\Module\Module;
use Illuminate\Routing\Route;
use Illuminate\Http\Request;
@ -26,8 +27,9 @@ class Tiles extends Controller
$title = $data->category->name;
$modules = $data->modules;
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.tiles.index', compact('title', 'modules'));
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
}
/**
@ -41,8 +43,9 @@ class Tiles extends Controller
$title = trans('modules.top_paid');
$modules = $this->getPaidModules();
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.tiles.index', compact('title', 'modules'));
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
}
/**
@ -56,8 +59,9 @@ class Tiles extends Controller
$title = trans('modules.new');
$modules = $this->getNewModules();
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.tiles.index', compact('title', 'modules'));
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
}
/**
@ -71,8 +75,9 @@ class Tiles extends Controller
$title = trans('modules.top_free');
$modules = $this->getFreeModules();
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.tiles.index', compact('title', 'modules'));
return view('modules.tiles.index', compact('title', 'modules', 'installed'));
}
/**
@ -94,7 +99,8 @@ class Tiles extends Controller
$title = trans('modules.search');
$modules = $this->getSearchModules($data);
$installed = Module::all()->pluck('status', 'alias')->toArray();
return view('modules.tiles.index', compact('title', 'modules', 'keyword'));
return view('modules.tiles.index', compact('title', 'modules', 'keyword', 'installed'));
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace App\Listeners\Updates;
use App\Events\UpdateFinished;
use App\Models\Auth\Role;
use App\Models\Auth\Permission;
class Version126 extends Listener
{
const ALIAS = 'core';
const VERSION = '1.2.6';
/**
* Handle the event.
*
* @param $event
* @return void
*/
public function handle(UpdateFinished $event)
{
// Check if should listen
if (!$this->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);
}
}
}

View File

@ -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',

View File

@ -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);

7
public/css/app.css vendored
View File

@ -604,3 +604,10 @@ input[type="number"] {
.user.user-menu, .user.user-menu a.dropdown-toggle {
min-height: 50px;
}
.module-installed {
position: absolute;
top: 50%;
margin-top: -5px;
margin-left: 10px;
}

View File

@ -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',
@ -40,9 +41,18 @@ return [
'install' => 'Installing :module files.',
],
'badge' => [
'installed' => 'Installed',
],
'button' => [
'uninstall' => 'Uninstall',
'disable' => 'Disable',
'enable' => 'Enable',
],
'my' => [
'purchased' => 'Purchased',
'installed' => 'Installed',
],
];

View File

@ -4,6 +4,7 @@
@section('new_button')
<span class="new-button"><a href="{{ url('apps/token/create') }}" class="btn btn-success btn-sm"><span class="fa fa-key"></span> &nbsp;{{ trans('modules.api_token') }}</a></span>
<span class="new-button"><a href="{{ url('apps/my') }}" class="btn btn-default btn-sm"><span class="fa fa-rocket"></span> &nbsp;{{ trans('modules.my_apps') }}</a></span>
@endsection
@section('content')

View File

@ -4,6 +4,7 @@
@section('new_button')
<span class="new-button"><a href="{{ url('apps/token/create') }}" class="btn btn-success btn-sm"><span class="fa fa-key"></span> &nbsp;{{ trans('modules.api_token') }}</a></span>
<span class="new-button"><a href="{{ url('apps/my') }}" class="btn btn-default btn-sm"><span class="fa fa-rocket"></span> &nbsp;{{ trans('modules.my_apps') }}</a></span>
@endsection
@section('content')

View File

@ -0,0 +1,34 @@
@extends('layouts.modules')
@section('title', trans_choice('general.modules', 2))
@section('new_button')
<span class="new-button"><a href="{{ url('apps/token/create') }}" class="btn btn-success btn-sm"><span class="fa fa-key"></span> &nbsp;{{ trans('modules.api_token') }}</a></span>
<span class="new-button"><a href="{{ url('apps/my') }}" class="btn btn-default btn-sm"><span class="fa fa-rocket"></span> &nbsp;{{ trans('modules.my_apps') }}</a></span>
@endsection
@section('content')
@include('partials.modules.bar')
<div class="row">
<div class="col-md-12">
<div class="content-header no-padding-left">
<h3>{{ trans('modules.my.purchased') }}</h3>
</div>
@foreach ($purchased as $module)
@include('partials.modules.item')
@endforeach
</div>
<div class="col-md-12">
<div class="content-header no-padding-left">
<h3>{{ trans('modules.my.installed') }}</h3>
</div>
@foreach ($modules as $module)
@include('partials.modules.item')
@endforeach
</div>
</div>
@endsection

View File

@ -4,6 +4,7 @@
@section('new_button')
<span class="new-button"><a href="{{ url('apps/token/create') }}" class="btn btn-success btn-sm"><span class="fa fa-key"></span> &nbsp;{{ trans('modules.api_token') }}</a></span>
<span class="new-button"><a href="{{ url('apps/my') }}" class="btn btn-default btn-sm"><span class="fa fa-rocket"></span> &nbsp;{{ trans('modules.my_apps') }}</a></span>
@endsection
@section('content')

View File

@ -2,6 +2,17 @@
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title"><a href="{{ url('apps/' . $module->slug) }}">{{ $module->name }}</a></h3>
@if (isset($installed[$module->slug]))
@php $color = 'bg-green'; @endphp
@if (!$installed[$module->slug])
@php $color = 'bg-yellow'; @endphp
@endif
<span class="module-installed">
<small class="label {{ $color }}">{{ trans('modules.badge.installed') }}</small>
</span>
@endif
<!-- /.box-tools -->
</div>
<!-- /.box-header -->

View File

@ -116,6 +116,7 @@ Route::group(['middleware' => 'language'], function () {
Route::group(['prefix' => 'apps'], function () {
Route::resource('token', 'Modules\Token');
Route::resource('home', 'Modules\Home');
Route::resource('my', 'Modules\My');
Route::get('categories/{alias}', 'Modules\Tiles@categoryModules');
Route::get('paid', 'Modules\Tiles@paidModules');
Route::get('new', 'Modules\Tiles@newModules');