Hosted feature implementation

This commit is contained in:
= 2021-03-07 21:14:53 +11:00
parent 616dea2c9d
commit f4d1917f32
3 changed files with 22 additions and 5 deletions

View File

@ -504,4 +504,18 @@ class BaseController extends Controller
return redirect('/setup'); return redirect('/setup');
} }
public function checkFeature($feature)
{
if(auth()->user()->account->hasFeature($feature))
return true;
return false;
}
public function featureFailure()
{
return response()->json(['message' => 'Upgrade to a paid plan for this feature.'], 403);
}
} }

View File

@ -30,6 +30,7 @@ use App\Jobs\Entity\EmailEntity;
use App\Jobs\Invoice\StoreInvoice; use App\Jobs\Invoice\StoreInvoice;
use App\Jobs\Invoice\ZipInvoices; use App\Jobs\Invoice\ZipInvoices;
use App\Jobs\Util\UnlinkFile; use App\Jobs\Util\UnlinkFile;
use App\Models\Account;
use App\Models\Client; use App\Models\Client;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Quote; use App\Models\Quote;
@ -906,7 +907,9 @@ class InvoiceController extends BaseController
*/ */
public function upload(UploadInvoiceRequest $request, Invoice $invoice) public function upload(UploadInvoiceRequest $request, Invoice $invoice)
{ {
if(!$this->checkFeature(Account::FEATURE_DOCUMENTS))
return $this->featureFailure();
if ($request->has('documents')) if ($request->has('documents'))
$this->saveDocuments($request->file('documents'), $invoice); $this->saveDocuments($request->file('documents'), $invoice);

View File

@ -167,17 +167,17 @@ class Account extends BaseModel
// Enterprise; No Trial allowed; grandfathered for old pro users // Enterprise; No Trial allowed; grandfathered for old pro users
case self::FEATURE_USERS:// Grandfathered for old Pro users case self::FEATURE_USERS:// Grandfathered for old Pro users
if ($planDetails && $planDetails['trial']) { if ($plan_details && $plan_details['trial']) {
// Do they have a non-trial plan? // Do they have a non-trial plan?
$planDetails = $this->getPlanDetails(false, false); $plan_details = $this->getPlanDetails(false, false);
} }
return $self_host || ! empty($planDetails) && ($planDetails['plan'] == self::PLAN_ENTERPRISE); return $self_host || ! empty($plan_details) && ($plan_details['plan'] == self::PLAN_ENTERPRISE);
// Enterprise; No Trial allowed // Enterprise; No Trial allowed
case self::FEATURE_DOCUMENTS: case self::FEATURE_DOCUMENTS:
case self::FEATURE_USER_PERMISSIONS: case self::FEATURE_USER_PERMISSIONS:
return $self_host || ! empty($planDetails) && $planDetails['plan'] == self::PLAN_ENTERPRISE && ! $planDetails['trial']; return $self_host || ! empty($plan_details) && $plan_details['plan'] == self::PLAN_ENTERPRISE && ! $plan_details['trial'];
default: default:
return false; return false;