mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Add ability to enable\disable modules
This commit is contained in:
parent
4a94633add
commit
5b80e32fa7
@ -704,9 +704,27 @@ class AccountController extends BaseController
|
|||||||
return AccountController::saveTaxRates();
|
return AccountController::saveTaxRates();
|
||||||
} elseif ($section === ACCOUNT_PAYMENT_TERMS) {
|
} elseif ($section === ACCOUNT_PAYMENT_TERMS) {
|
||||||
return AccountController::savePaymetTerms();
|
return AccountController::savePaymetTerms();
|
||||||
|
} elseif ($section === ACCOUNT_MANAGEMENT) {
|
||||||
|
return AccountController::saveAccountManagement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
|
*/
|
||||||
|
private function saveAccountManagement()
|
||||||
|
{
|
||||||
|
$account = Auth::user()->account;
|
||||||
|
$modules = Input::get('modules');
|
||||||
|
|
||||||
|
$account->enabled_modules = $modules ? array_sum($modules) : 0;
|
||||||
|
$account->save();
|
||||||
|
|
||||||
|
Session::flash('message', trans('texts.updated_settings'));
|
||||||
|
|
||||||
|
return Redirect::to('settings/'.ACCOUNT_MANAGEMENT);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
* @return \Illuminate\Http\RedirectResponse
|
||||||
*/
|
*/
|
||||||
|
@ -95,7 +95,7 @@ class ClientController extends BaseController
|
|||||||
if($user->can('create', ENTITY_TASK)){
|
if($user->can('create', ENTITY_TASK)){
|
||||||
$actionLinks[] = ['label' => trans('texts.new_task'), 'url' => URL::to('/tasks/create/'.$client->public_id)];
|
$actionLinks[] = ['label' => trans('texts.new_task'), 'url' => URL::to('/tasks/create/'.$client->public_id)];
|
||||||
}
|
}
|
||||||
if (Utils::hasFeature(FEATURE_QUOTES) && $user->can('create', ENTITY_INVOICE)) {
|
if (Utils::hasFeature(FEATURE_QUOTES) && $user->can('create', ENTITY_QUOTE)) {
|
||||||
$actionLinks[] = ['label' => trans('texts.new_quote'), 'url' => URL::to('/quotes/create/'.$client->public_id)];
|
$actionLinks[] = ['label' => trans('texts.new_quote'), 'url' => URL::to('/quotes/create/'.$client->public_id)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,18 +103,18 @@ class Account extends Eloquent
|
|||||||
];
|
];
|
||||||
|
|
||||||
public static $modules = [
|
public static $modules = [
|
||||||
1 => ENTITY_RECURRING_INVOICE,
|
ENTITY_RECURRING_INVOICE => 1,
|
||||||
2 => ENTITY_CREDIT,
|
ENTITY_CREDIT => 2,
|
||||||
4 => ENTITY_QUOTE,
|
ENTITY_QUOTE => 4,
|
||||||
8 => ENTITY_TASK,
|
ENTITY_TASK => 8,
|
||||||
16 => ENTITY_EXPENSE,
|
ENTITY_EXPENSE => 16,
|
||||||
32 => ENTITY_VENDOR,
|
ENTITY_VENDOR => 32,
|
||||||
];
|
];
|
||||||
|
|
||||||
public static $dashboardSections = [
|
public static $dashboardSections = [
|
||||||
1 => 'total_revenue',
|
'total_revenue' => 1,
|
||||||
2 => 'average_invoice',
|
'average_invoice' => 2,
|
||||||
4 => 'outstanding',
|
'outstanding' => 4,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1846,6 +1846,20 @@ class Account extends Eloquent
|
|||||||
public function getFontFolders(){
|
public function getFontFolders(){
|
||||||
return array_map(function($item){return $item['folder'];}, $this->getFontsData());
|
return array_map(function($item){return $item['folder'];}, $this->getFontsData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isModuleEnabled($entityType)
|
||||||
|
{
|
||||||
|
if (in_array($entityType, [
|
||||||
|
ENTITY_CLIENT,
|
||||||
|
ENTITY_INVOICE,
|
||||||
|
ENTITY_PRODUCT,
|
||||||
|
ENTITY_PAYMENT,
|
||||||
|
])) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->enabled_modules & static::$modules[$entityType];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Account::updated(function ($account)
|
Account::updated(function ($account)
|
||||||
|
@ -93,7 +93,7 @@ class ClientDatatable extends EntityDatatable
|
|||||||
return URL::to("quotes/create/{$model->public_id}");
|
return URL::to("quotes/create/{$model->public_id}");
|
||||||
},
|
},
|
||||||
function ($model) {
|
function ($model) {
|
||||||
return Auth::user()->hasFeature(FEATURE_QUOTES) && Auth::user()->can('create', ENTITY_INVOICE);
|
return Auth::user()->hasFeature(FEATURE_QUOTES) && Auth::user()->can('create', ENTITY_QUOTE);
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
@ -16,7 +16,11 @@ class EntityPolicy
|
|||||||
* @param User $user
|
* @param User $user
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function create(User $user) {
|
public static function create(User $user, $item) {
|
||||||
|
if ( ! static::checkModuleEnabled($user, $item)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return $user->hasPermission('create_all');
|
return $user->hasPermission('create_all');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,6 +31,10 @@ class EntityPolicy
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function edit(User $user, $item) {
|
public static function edit(User $user, $item) {
|
||||||
|
if ( ! static::checkModuleEnabled($user, $item)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return $user->hasPermission('edit_all') || $user->owns($item);
|
return $user->hasPermission('edit_all') || $user->owns($item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,6 +45,10 @@ class EntityPolicy
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function view(User $user, $item) {
|
public static function view(User $user, $item) {
|
||||||
|
if ( ! static::checkModuleEnabled($user, $item)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return $user->hasPermission('view_all') || $user->owns($item);
|
return $user->hasPermission('view_all') || $user->owns($item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,4 +69,10 @@ class EntityPolicy
|
|||||||
public static function editByOwner(User $user, $ownerUserId) {
|
public static function editByOwner(User $user, $ownerUserId) {
|
||||||
return $user->hasPermission('edit_all') || $user->id == $ownerUserId;
|
return $user->hasPermission('edit_all') || $user->id == $ownerUserId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function checkModuleEnabled(User $user, $item)
|
||||||
|
{
|
||||||
|
$entityType = is_string($item) ? $item : $item->getEntityType();
|
||||||
|
return $user->account->isModuleEnabled($entityType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@ class ExpensePolicy extends EntityPolicy
|
|||||||
* @param User $user
|
* @param User $user
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function create(User $user) {
|
public static function create(User $user, $item) {
|
||||||
if ( ! parent::create($user)) {
|
if ( ! parent::create($user, $item)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,11 +50,26 @@ class GenericEntityPolicy
|
|||||||
* @return bool|mixed
|
* @return bool|mixed
|
||||||
*/
|
*/
|
||||||
public static function create(User $user, $itemType) {
|
public static function create(User $user, $itemType) {
|
||||||
$itemType = Utils::getEntityName($itemType);
|
$entityName = Utils::getEntityName($itemType);
|
||||||
if (method_exists("App\\Policies\\{$itemType}Policy", 'create')) {
|
if (method_exists("App\\Policies\\{$entityName}Policy", 'create')) {
|
||||||
return call_user_func(["App\\Policies\\{$itemType}Policy", 'create'], $user);
|
return call_user_func(["App\\Policies\\{$entityName}Policy", 'create'], $user, $itemType);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
* @param $itemType
|
||||||
|
* @return bool|mixed
|
||||||
|
*/
|
||||||
|
public static function view(User $user, $itemType) {
|
||||||
|
$entityName = Utils::getEntityName($itemType);
|
||||||
|
if (method_exists("App\\Policies\\{$entityName}Policy", 'view')) {
|
||||||
|
return call_user_func(["App\\Policies\\{$entityName}Policy", 'view'], $user, $itemType);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -10,8 +10,8 @@ class QuotePolicy extends EntityPolicy
|
|||||||
* @param User $user
|
* @param User $user
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function create(User $user) {
|
public static function create(User $user, $item) {
|
||||||
if ( ! parent::create($user)) {
|
if ( ! parent::create($user, $item)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,8 +10,8 @@ class TaskPolicy extends EntityPolicy
|
|||||||
* @param User $user
|
* @param User $user
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function create(User $user) {
|
public static function create(User $user, $item) {
|
||||||
if ( ! parent::create($user)) {
|
if ( ! parent::create($user, $item)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,8 +10,8 @@ class VendorPolicy extends EntityPolicy
|
|||||||
* @param User $user
|
* @param User $user
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function create(User $user) {
|
public static function create(User $user, $item) {
|
||||||
if ( ! parent::create($user)) {
|
if ( ! parent::create($user, $item)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2173,6 +2173,7 @@ $LANG = array(
|
|||||||
'white_label_license_key' => 'License Key',
|
'white_label_license_key' => 'License Key',
|
||||||
'invalid_white_label_license' => 'The white label license is not valid',
|
'invalid_white_label_license' => 'The white label license is not valid',
|
||||||
'created_by' => 'Created by :name',
|
'created_by' => 'Created by :name',
|
||||||
|
'modules' => 'Modules',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -140,6 +140,35 @@
|
|||||||
@endif
|
@endif
|
||||||
{!! Former::close() !!}
|
{!! Former::close() !!}
|
||||||
|
|
||||||
|
|
||||||
|
{!! Former::open('settings/account_management') !!}
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">{!! trans('texts.modules') !!}</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="modules" class="control-label col-lg-4 col-sm-4"></label>
|
||||||
|
<div class="col-lg-8 col-sm-8">
|
||||||
|
@foreach (\App\Models\Account::$modules as $entityType => $value)
|
||||||
|
<div class="checkbox">
|
||||||
|
<label for="modules_{{ $value}}">
|
||||||
|
<input name="modules[]" id="modules_{{ $value}}" type="checkbox" {{ Auth::user()->account->isModuleEnabled($entityType) ? 'checked="checked"' : '' }} value="{{ $value }}">{{ trans("texts.{$entityType}s") }}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="modules" class="control-label col-lg-4 col-sm-4"></label>
|
||||||
|
<div class="col-lg-8 col-sm-8">
|
||||||
|
{!! Button::success(trans('texts.save'))->submit()->large()->appendIcon(Icon::create('floppy-disk')) !!}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{!! Former::close() !!}
|
||||||
|
|
||||||
{!! Former::open('settings/cancel_account')->addClass('cancel-account') !!}
|
{!! Former::open('settings/cancel_account')->addClass('cancel-account') !!}
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
|
@ -506,6 +506,7 @@
|
|||||||
'settings',
|
'settings',
|
||||||
//'self-update'
|
//'self-update'
|
||||||
] as $option)
|
] as $option)
|
||||||
|
@if (in_array($option, ['dashboard', 'settings']) || Auth::user()->can('view', substr($option, 0, -1)))
|
||||||
<li class="{{ Request::is("{$option}*") ? 'active' : '' }}">
|
<li class="{{ Request::is("{$option}*") ? 'active' : '' }}">
|
||||||
@if ($option == 'settings')
|
@if ($option == 'settings')
|
||||||
<a type="button" class="btn btn-default btn-sm pull-right"
|
<a type="button" class="btn btn-default btn-sm pull-right"
|
||||||
@ -530,6 +531,7 @@
|
|||||||
@endif
|
@endif
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@endif
|
||||||
@endforeach
|
@endforeach
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user