Skip to content

Commit c47297e

Browse files
authored
Merge pull request #7 from imbus/pre_develop
Pre develop
2 parents 5436e77 + a651922 commit c47297e

File tree

63 files changed

+4327
-642
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+4327
-642
lines changed

.github/workflows/imbus_ci.yml

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,140 @@ jobs:
8080
APP_ENV: testing
8181
run: php artisan test --env=testing
8282

83+
tests-sqlite:
84+
name: SQLite • PHP ${{ matrix.php }}
85+
runs-on: ubuntu-latest
86+
strategy:
87+
fail-fast: false
88+
matrix:
89+
php: ['8.2','8.3','8.4']
90+
91+
steps:
92+
- uses: actions/checkout@v4
93+
94+
- name: Setup PHP
95+
uses: shivammathur/setup-php@v2
96+
with:
97+
php-version: ${{ matrix.php }}
98+
coverage: none
99+
tools: composer, sqlite
100+
101+
- name: Cache Composer
102+
id: composer-cache
103+
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
104+
- uses: actions/cache@v4
105+
with:
106+
path: ${{ steps.composer-cache.outputs.dir }}
107+
key: ${{ runner.os }}-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }}
108+
restore-keys: |
109+
${{ runner.os }}-${{ matrix.php }}-composer-
110+
111+
- name: Prepare .env.testing (SQLite)
112+
run: |
113+
cp -v .env.testing-ci .env.testing || cp -v .env.testing.example .env.testing
114+
sed -i 's/^APP_ENV=.*/APP_ENV=testing/' .env.testing || echo "APP_ENV=testing" >> .env.testing
115+
sed -i 's/^DB_CONNECTION=.*/DB_CONNECTION=sqlite/' .env.testing || echo "DB_CONNECTION=sqlite" >> .env.testing
116+
sed -i 's|^DB_DATABASE=.*|DB_DATABASE=database/testing.sqlite|' .env.testing || echo "DB_DATABASE=database/testing.sqlite" >> .env.testing
117+
mkdir -p database && touch database/testing.sqlite
118+
119+
- name: Install Dependencies
120+
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
121+
122+
- name: Migrate & Prepare
123+
env:
124+
APP_ENV: testing
125+
run: |
126+
php artisan key:generate --env=testing
127+
php artisan config:clear
128+
php artisan migrate --env=testing --force
129+
php artisan passport:install --env=testing --no-interaction || true
130+
chmod -R 777 storage bootstrap/cache
131+
132+
- name: Run Tests (SQLite)
133+
env:
134+
APP_ENV: testing
135+
run: php artisan test --env=testingname: imbus_ci
136+
137+
on:
138+
push:
139+
branches: ['develope, master']
140+
pull_request:
141+
workflow_dispatch:
142+
143+
concurrency:
144+
group: imbus-main-ci-${{ github.ref }}
145+
cancel-in-progress: true
146+
147+
jobs:
148+
tests-mysql:
149+
name: MySQL • PHP ${{ matrix.php }}
150+
runs-on: ubuntu-latest
151+
strategy:
152+
fail-fast: false
153+
matrix:
154+
php: ['8.2','8.3','8.4']
155+
156+
services:
157+
mysql:
158+
image: mysql:5.7
159+
env:
160+
MYSQL_ALLOW_EMPTY_PASSWORD: yes
161+
MYSQL_DATABASE: snipeit_test
162+
ports:
163+
- 33306:3306
164+
options:
165+
--health-cmd="mysqladmin ping"
166+
--health-interval=10s --health-timeout=5s --health-retries=5
167+
168+
steps:
169+
- uses: actions/checkout@v4
170+
171+
- name: Setup PHP
172+
uses: shivammathur/setup-php@v2
173+
with:
174+
php-version: ${{ matrix.php }}
175+
coverage: none
176+
tools: composer
177+
178+
- name: Cache Composer
179+
id: composer-cache
180+
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
181+
- uses: actions/cache@v4
182+
with:
183+
path: ${{ steps.composer-cache.outputs.dir }}
184+
key: ${{ runner.os }}-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }}
185+
restore-keys: |
186+
${{ runner.os }}-${{ matrix.php }}-composer-
187+
188+
- name: Prepare .env.testing (MySQL)
189+
run: |
190+
cp -v .env.testing-ci .env.testing || cp -v .env.testing.example .env.testing
191+
sed -i 's/^APP_ENV=.*/APP_ENV=testing/' .env.testing || echo "APP_ENV=testing" >> .env.testing
192+
sed -i 's/^DB_CONNECTION=.*/DB_CONNECTION=mysql/' .env.testing
193+
sed -i 's/^DB_HOST=.*/DB_HOST=127.0.0.1/' .env.testing
194+
sed -i 's/^DB_PORT=.*/DB_PORT=${{ job.services.mysql.ports[3306] }}/' .env.testing
195+
sed -i 's/^DB_DATABASE=.*/DB_DATABASE=snipeit_test/' .env.testing
196+
sed -i 's/^DB_USERNAME=.*/DB_USERNAME=root/' .env.testing
197+
sed -i 's/^DB_PASSWORD=.*/DB_PASSWORD=/' .env.testing
198+
199+
- name: Install Dependencies
200+
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
201+
202+
- name: Migrate & Prepare
203+
env:
204+
APP_ENV: testing
205+
run: |
206+
php artisan key:generate --env=testing
207+
php artisan config:clear
208+
php artisan migrate --env=testing --force
209+
php artisan passport:install --env=testing --no-interaction || true
210+
chmod -R 777 storage bootstrap/cache
211+
212+
- name: Run Tests (MySQL)
213+
env:
214+
APP_ENV: testing
215+
run: php artisan test --env=testing
216+
83217
tests-sqlite:
84218
name: SQLite • PHP ${{ matrix.php }}
85219
runs-on: ubuntu-latest

app/Console/Commands/Purge.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use App\Models\License;
1313
use App\Models\Location;
1414
use App\Models\Manufacturer;
15+
use App\Models\PredefinedFilter;
1516
use App\Models\Statuslabel;
1617
use App\Models\Supplier;
1718
use App\Models\User;
@@ -178,6 +179,14 @@ public function handle()
178179
$this->info('- Status Label "'.$status_label->name.'" deleted.');
179180
$status_label->forceDelete();
180181
}
182+
183+
$predefined_filters = PredefinedFilter::whereNotNull('deleted_at')->withTrashed()->get();
184+
$this->info($predefined_filters->count().' predefined filters purged.');
185+
foreach ($predefined_filters as $predefined_filter) {
186+
$this->info('- Predefined Filter "'.$predefined_filter->name.'" deleted.');
187+
$predefined_filter->forceDelete();
188+
}
189+
181190
} else {
182191
$this->info('Action canceled. Nothing was purged.');
183192
}

app/Exceptions/Handler.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,8 @@ public function render($request, Throwable $e)
162162
$route = 'licenses.index';
163163
} elseif (($route === 'customfieldsets.index') || ($route === 'customfields.index')) {
164164
$route = 'fields.index';
165+
} elseif ($route === 'predefinedfilters.index') {
166+
$route = 'predefined-filters.index';
165167
}
166168

167169
return redirect()

app/Http/Controllers/Api/AssetsController.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use App\Models\CustomField;
2626
use App\Models\License;
2727
use App\Models\Location;
28+
use App\Models\PredefinedFilter;
2829
use App\Models\Setting;
2930
use App\Models\User;
3031
use Carbon\Carbon;
@@ -436,6 +437,18 @@ public function index(Request $request, $action = null, $upcoming_status = null)
436437
break;
437438
}
438439

440+
// Filter with predefinedFilter if one is given
441+
if (isset($request->predefinedFilter)) {
442+
$id = $request->predefinedFilter;
443+
$predefinedFilters = PredefinedFilter::where('id', $id)
444+
->where('created_by', auth()->user()->id)
445+
->first();
446+
447+
if ($predefinedFilters) {
448+
$assets = $predefinedFilters->filterAssets($assets);
449+
}
450+
}
451+
439452

440453
// Make sure the offset and limit are actually integers and do not exceed system limits
441454
$offset = ($request->input('offset') > $assets->count()) ? $assets->count() : app('api_offset_value');

app/Http/Controllers/Api/GroupsController.php

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use App\Helpers\Helper;
66
use App\Http\Controllers\Controller;
77
use App\Http\Transformers\GroupsTransformer;
8+
use App\Http\Transformers\SelectlistTransformer;
89
use App\Models\Group;
910
use Illuminate\Http\Request;
1011
use Illuminate\Http\JsonResponse;
@@ -18,7 +19,7 @@ class GroupsController extends Controller
1819
* @author [A. Gianotto] [<snipe@snipe.net>]
1920
* @since [v4.0]
2021
*/
21-
public function index(Request $request) : JsonResponse | array
22+
public function index(Request $request): JsonResponse|array
2223
{
2324
$this->authorize('superadmin');
2425

@@ -71,7 +72,7 @@ public function index(Request $request) : JsonResponse | array
7172
* @since [v4.0]
7273
* @param \Illuminate\Http\Request $request
7374
*/
74-
public function store(Request $request) : JsonResponse
75+
public function store(Request $request): JsonResponse
7576
{
7677
$this->authorize('superadmin');
7778
$group = new Group;
@@ -98,7 +99,7 @@ public function store(Request $request) : JsonResponse
9899
* @since [v4.0]
99100
* @param int $id
100101
*/
101-
public function show($id) : array
102+
public function show($id): array
102103
{
103104
$this->authorize('superadmin');
104105
$group = Group::findOrFail($id);
@@ -113,7 +114,7 @@ public function show($id) : array
113114
* @param \Illuminate\Http\Request $request
114115
* @param int $id
115116
*/
116-
public function update(Request $request, $id) : JsonResponse
117+
public function update(Request $request, $id): JsonResponse
117118
{
118119
$this->authorize('superadmin');
119120
$group = Group::findOrFail($id);
@@ -136,12 +137,41 @@ public function update(Request $request, $id) : JsonResponse
136137
* @since [v4.0]
137138
* @param int $id
138139
*/
139-
public function destroy($id) : JsonResponse
140+
public function destroy($id): JsonResponse
140141
{
141142
$this->authorize('superadmin');
142143
$group = Group::findOrFail($id);
143144
$group->delete();
144145

145146
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/groups/message.delete.success')));
146147
}
148+
149+
/**
150+
* Selectlist method that returns all groups wherere the user is member of
151+
*/
152+
public function selectlist(Request $request): array
153+
{
154+
$user = auth()->user();
155+
156+
$this->authorize('superadmin');
157+
$this->authorize('view', Group::class);
158+
159+
// Start with groups the user belongs to
160+
$groups = Group::whereHas('users', function ($query) use ($user) {
161+
$query->where('user_id', $user->id);
162+
})
163+
->select('id', 'name');
164+
165+
// Search filter
166+
if ($request->filled('search')) {
167+
$groups = $groups->where('permission_groups.name', 'LIKE', '%' . $request->get('search') . '%');
168+
}
169+
170+
// Apply sorting
171+
$groups = $groups->orderBy('name', 'ASC')->paginate(50);
172+
173+
// Transform output to match selectlist style
174+
return (new SelectlistTransformer)->transformSelectlist($groups);
175+
}
176+
147177
}

0 commit comments

Comments
 (0)