diff --git a/app/Http/Controllers/Api/AccessoriesController.php b/app/Http/Controllers/Api/AccessoriesController.php
index fd21ebaf3..dc2130e98 100644
--- a/app/Http/Controllers/Api/AccessoriesController.php
+++ b/app/Http/Controllers/Api/AccessoriesController.php
@@ -26,7 +26,10 @@ class AccessoriesController extends Controller
*/
public function index(Request $request)
{
- $this->authorize('view', Accessory::class);
+ if ($request->user()->cannot('reports.view')) {
+ $this->authorize('view', Accessory::class);
+ }
+
// This array is what determines which fields should be allowed to be sorted on ON the table itself, no relations
// Relations will be handled in query scopes a little further down.
diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php
index 613158508..734125ff3 100644
--- a/app/Http/Controllers/Api/UsersController.php
+++ b/app/Http/Controllers/Api/UsersController.php
@@ -246,6 +246,7 @@ class UsersController extends Controller
'two_factor_optin',
'two_factor_enrolled',
'remote',
+ 'vip',
'start_date',
'end_date',
];
diff --git a/app/Http/Controllers/ReportsController.php b/app/Http/Controllers/ReportsController.php
index 8e2949860..41b2f257c 100644
--- a/app/Http/Controllers/ReportsController.php
+++ b/app/Http/Controllers/ReportsController.php
@@ -51,9 +51,8 @@ class ReportsController extends Controller
public function getAccessoryReport()
{
$this->authorize('reports.view');
- $accessories = Accessory::orderBy('created_at', 'DESC')->with('company')->get();
- return view('reports/accessories', compact('accessories'));
+ return view('reports/accessories');
}
/**
diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php
index 0c6ab8834..83f271362 100755
--- a/app/Http/Controllers/Users/UsersController.php
+++ b/app/Http/Controllers/Users/UsersController.php
@@ -272,6 +272,7 @@ class UsersController extends Controller
$user->activated = $request->input('activated', 0);
$user->zip = $request->input('zip', null);
$user->remote = $request->input('remote', 0);
+ $user->vip = $request->input('vip', 0);
$user->website = $request->input('website', null);
$user->start_date = $request->input('start_date', null);
$user->end_date = $request->input('end_date', null);
diff --git a/app/Models/User.php b/app/Models/User.php
index 73a30b229..249178ce0 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -64,6 +64,7 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'scim_externalid',
'avatar',
'gravatar',
+ 'vip',
];
protected $casts = [
@@ -71,6 +72,7 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo
'manager_id' => 'integer',
'location_id' => 'integer',
'company_id' => 'integer',
+ 'vip' => 'boolean',
];
diff --git a/app/Presenters/UserPresenter.php b/app/Presenters/UserPresenter.php
index bf4c81c80..4bfe4492f 100644
--- a/app/Presenters/UserPresenter.php
+++ b/app/Presenters/UserPresenter.php
@@ -85,6 +85,15 @@ class UserPresenter extends Presenter
'visible' => true,
'formatter' => 'usersLinkFormatter',
],
+ [
+ 'field' => 'vip',
+ 'searchable' => false,
+ 'sortable' => true,
+ 'switchable' => true,
+ 'title' => trans('admin/users/general.vip_label'),
+ 'visible' => false,
+ 'formatter' => 'trueFalseFormatter',
+ ],
[
'field' => 'remote',
'searchable' => false,
diff --git a/composer.lock b/composer.lock
index 525c6f866..c34d46ce6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,6 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
+ "content-hash": "590171872e4a6a29c78efde99fbbf00e",
"packages": [
{
"name": "alek13/slack",
@@ -1809,24 +1810,24 @@
},
{
"name": "dompdf/dompdf",
- "version": "v2.0.0",
+ "version": "v2.0.3",
"source": {
"type": "git",
"url": "https://github.com/dompdf/dompdf.git",
- "reference": "79573d8b8a141ec8a17312515de8740eed014fa9"
+ "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dompdf/dompdf/zipball/79573d8b8a141ec8a17312515de8740eed014fa9",
- "reference": "79573d8b8a141ec8a17312515de8740eed014fa9",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/e8d2d5e37e8b0b30f0732a011295ab80680d7e85",
+ "reference": "e8d2d5e37e8b0b30f0732a011295ab80680d7e85",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-mbstring": "*",
"masterminds/html5": "^2.0",
- "phenx/php-font-lib": "^0.5.4",
- "phenx/php-svg-lib": "^0.3.3 || ^0.4.0",
+ "phenx/php-font-lib": ">=0.5.4 <1.0.0",
+ "phenx/php-svg-lib": ">=0.3.3 <1.0.0",
"php": "^7.1 || ^8.0"
},
"require-dev": {
@@ -1857,25 +1858,17 @@
],
"authors": [
{
- "name": "Fabien Ménager",
- "email": "fabien.menager@gmail.com"
- },
- {
- "name": "Brian Sweeney",
- "email": "eclecticgeek@gmail.com"
- },
- {
- "name": "Gabriel Bull",
- "email": "me@gabrielbull.com"
+ "name": "The Dompdf Community",
+ "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
}
],
"description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
"homepage": "https://github.com/dompdf/dompdf",
"support": {
"issues": "https://github.com/dompdf/dompdf/issues",
- "source": "https://github.com/dompdf/dompdf/tree/v2.0.0"
+ "source": "https://github.com/dompdf/dompdf/tree/v2.0.3"
},
- "time": "2022-06-21T21:14:57+00:00"
+ "time": "2023-02-07T12:51:48+00:00"
},
{
"name": "dragonmantank/cron-expression",
@@ -5130,16 +5123,16 @@
},
{
"name": "masterminds/html5",
- "version": "2.7.5",
+ "version": "2.7.6",
"source": {
"type": "git",
"url": "https://github.com/Masterminds/html5-php.git",
- "reference": "f640ac1bdddff06ea333a920c95bbad8872429ab"
+ "reference": "897eb517a343a2281f11bc5556d6548db7d93947"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f640ac1bdddff06ea333a920c95bbad8872429ab",
- "reference": "f640ac1bdddff06ea333a920c95bbad8872429ab",
+ "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947",
+ "reference": "897eb517a343a2281f11bc5556d6548db7d93947",
"shasum": ""
},
"require": {
@@ -5193,9 +5186,9 @@
],
"support": {
"issues": "https://github.com/Masterminds/html5-php/issues",
- "source": "https://github.com/Masterminds/html5-php/tree/2.7.5"
+ "source": "https://github.com/Masterminds/html5-php/tree/2.7.6"
},
- "time": "2021-07-01T14:25:37+00:00"
+ "time": "2022-08-18T16:18:26+00:00"
},
{
"name": "maximebf/debugbar",
@@ -6430,21 +6423,21 @@
},
{
"name": "phenx/php-svg-lib",
- "version": "0.4.1",
+ "version": "0.5.0",
"source": {
"type": "git",
"url": "https://github.com/dompdf/php-svg-lib.git",
- "reference": "4498b5df7b08e8469f0f8279651ea5de9626ed02"
+ "reference": "76876c6cf3080bcb6f249d7d59705108166a6685"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/4498b5df7b08e8469f0f8279651ea5de9626ed02",
- "reference": "4498b5df7b08e8469f0f8279651ea5de9626ed02",
+ "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/76876c6cf3080bcb6f249d7d59705108166a6685",
+ "reference": "76876c6cf3080bcb6f249d7d59705108166a6685",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "php": "^7.1 || ^7.2 || ^7.3 || ^7.4 || ^8.0",
+ "php": "^7.1 || ^8.0",
"sabberworm/php-css-parser": "^8.4"
},
"require-dev": {
@@ -6470,9 +6463,9 @@
"homepage": "https://github.com/PhenX/php-svg-lib",
"support": {
"issues": "https://github.com/dompdf/php-svg-lib/issues",
- "source": "https://github.com/dompdf/php-svg-lib/tree/0.4.1"
+ "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.0"
},
- "time": "2022-03-07T12:52:04+00:00"
+ "time": "2022-09-06T12:16:56+00:00"
},
{
"name": "php-http/message-factory",
diff --git a/database/factories/AssetFactory.php b/database/factories/AssetFactory.php
index 24021921b..6f3cce872 100644
--- a/database/factories/AssetFactory.php
+++ b/database/factories/AssetFactory.php
@@ -44,7 +44,7 @@ class AssetFactory extends Factory
'user_id' => 1,
'asset_tag' => $this->faker->unixTime('now'),
'notes' => 'Created by DB seeder',
- 'purchase_date' => $this->faker->dateTimeBetween('-1 years', 'now', date_default_timezone_get()),
+ 'purchase_date' => $this->faker->dateTimeBetween('-1 years', 'now', date_default_timezone_get())->format('Y-m-d'),
'purchase_cost' => $this->faker->randomFloat(2, '299.99', '2999.99'),
'order_number' => $this->faker->numberBetween(1000000, 50000000),
'supplier_id' => Supplier::all()->random()->id,
diff --git a/database/migrations/2023_01_23_232933_add_vip_to_users.php b/database/migrations/2023_01_23_232933_add_vip_to_users.php
new file mode 100644
index 000000000..344f35d24
--- /dev/null
+++ b/database/migrations/2023_01_23_232933_add_vip_to_users.php
@@ -0,0 +1,34 @@
+boolean('vip')->nullable()->default(0);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('users', function (Blueprint $table) {
+ if (Schema::hasColumn('users', 'vip')) {
+ $table->dropColumn('vip');
+ }
+ });
+ }
+}
diff --git a/resources/lang/en/admin/users/general.php b/resources/lang/en/admin/users/general.php
index bdd9401da..a3b1699e2 100644
--- a/resources/lang/en/admin/users/general.php
+++ b/resources/lang/en/admin/users/general.php
@@ -43,6 +43,8 @@ return [
'remote' => 'Remote',
'remote_help' => 'This can be useful if you need to filter by remote users who never or rarely come into your physical locations.',
'not_remote_label' => 'This is not a remote user',
+ 'vip_label' => 'VIP user',
+ 'vip_help' => 'This can be helpful to mark important people if you would like',
'create_user' => 'Create a user',
'create_user_page_explanation' => 'This is the account information you will use to access the site for the first time.',
'email_credentials' => 'Email credentials',
diff --git a/resources/views/reports/accessories.blade.php b/resources/views/reports/accessories.blade.php
index 49db62c7f..44f90682b 100644
--- a/resources/views/reports/accessories.blade.php
+++ b/resources/views/reports/accessories.blade.php
@@ -27,6 +27,7 @@
data-sort-order="asc"
id="accessoriesReport"
class="table table-striped snipe-table"
+ data-url="{{ route('api.accessories.index') }}"
data-export-options='{
"fileName": "accessory-report-{{ date('Y-m-d') }}",
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
@@ -34,27 +35,17 @@
-
{{ trans('admin/companies/table.title') }}
- {{ trans('admin/accessories/table.title') }}
- {{ trans('general.model_no') }}
- {{ trans('admin/accessories/general.total') }}
- {{ trans('admin/accessories/general.remaining') }}
+ {{ trans('admin/companies/table.title') }}
+ {{ trans('admin/accessories/table.title') }}
+ {{ trans('general.model_no') }}
+ {{ trans('admin/accessories/general.total') }}
+ {{ trans('admin/accessories/general.remaining') }}
{{ trans('admin/users/general.vip_help') }} +
+