• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

visavi / rotor / 28323582235

28 Jun 2026 01:20PM UTC coverage: 16.474% (+0.06%) from 16.419%
28323582235

push

github

visavi
Переход на datetime

19 of 66 new or added lines in 23 files covered. (28.79%)

9 existing lines in 8 files now uncovered.

984 of 5973 relevant lines covered (16.47%)

2.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/app/Http/Controllers/Admin/StickerController.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace App\Http\Controllers\Admin;
6

7
use App\Classes\Validator;
8
use App\Models\Sticker;
9
use App\Models\StickersCategory;
10
use Illuminate\Http\RedirectResponse;
11
use Illuminate\Http\Request;
12
use Illuminate\Support\Facades\DB;
13
use Illuminate\Support\Str;
14
use Illuminate\View\View;
15

16
class StickerController extends AdminController
17
{
18
    /**
19
     * Главная страница
20
     */
21
    public function index(): View
×
22
    {
23
        $categories = StickersCategory::query()
×
24
            ->selectRaw('sc.id, sc.name, count(s.id) cnt')
×
25
            ->from('stickers_categories as sc')
×
26
            ->leftJoin('stickers as s', 's.category_id', 'sc.id')
×
27
            ->groupBy('sc.id')
×
28
            ->orderBy('sc.id')
×
29
            ->get();
×
30

31
        return view('admin/stickers/index', compact('categories'));
×
32
    }
33

34
    /**
35
     * Просмотр стикеров по категориям
36
     */
37
    public function category(int $id): View
×
38
    {
39
        $category = StickersCategory::query()->where('id', $id)->first();
×
40

41
        if (! $category) {
×
42
            abort(404, __('stickers.category_not_exist'));
×
43
        }
44

45
        $stickers = Sticker::query()
×
46
            ->where('category_id', $id)
×
47
            ->orderBy(DB::raw('CHAR_LENGTH(code)'))
×
48
            ->orderBy('name')
×
49
            ->with('category')
×
50
            ->paginate(setting('stickerlist'));
×
51

52
        return view('admin/stickers/category', compact('category', 'stickers'));
×
53
    }
54

55
    /**
56
     * Создание категории
57
     */
58
    public function create(Request $request, Validator $validator): RedirectResponse
×
59
    {
60
        $name = $request->input('name');
×
61

62
        $validator->length($name, 3, 50, ['name' => __('validator.text')]);
×
63

64
        if ($validator->isValid()) {
×
65
            $category = StickersCategory::query()->create([
×
NEW
66
                'name' => $name,
×
67
            ]);
×
68

69
            setFlash('success', __('stickers.category_success_created'));
×
70

71
            return redirect('admin/stickers/' . $category->id);
×
72
        }
73

74
        setInput($request->all());
×
75
        setFlash('danger', $validator->getErrors());
×
76

77
        return redirect('admin/stickers');
×
78
    }
79

80
    /**
81
     * Редактирование категории
82
     */
83
    public function edit(int $id, Request $request, Validator $validator): View|RedirectResponse
×
84
    {
85
        $category = StickersCategory::query()->find($id);
×
86

87
        if (! $category) {
×
88
            abort(404, __('stickers.category_not_exist'));
×
89
        }
90

91
        if ($request->isMethod('post')) {
×
92
            $name = $request->input('name');
×
93

94
            $validator->length($name, 3, 50, ['name' => __('validator.text')]);
×
95

96
            if ($validator->isValid()) {
×
97
                $category->update([
×
NEW
98
                    'name' => $name,
×
99
                ]);
×
100

101
                setFlash('success', __('stickers.category_success_changed'));
×
102

103
                return redirect('admin/stickers');
×
104
            }
105

106
            setInput($request->all());
×
107
            setFlash('danger', $validator->getErrors());
×
108
        }
109

110
        return view('admin/stickers/edit_category', compact('category'));
×
111
    }
112

113
    /**
114
     * Удаление категории
115
     */
116
    public function delete(int $id, Request $request, Validator $validator): RedirectResponse
×
117
    {
118
        $category = StickersCategory::query()->find($id);
×
119

120
        if (! $category) {
×
121
            abort(404, __('stickers.category_not_exist'));
×
122
        }
123

124
        $sticker = Sticker::query()->where('category_id', $category->id)->first();
×
125
        if ($sticker) {
×
126
            $validator->addError(__('stickers.category_has_stickers'));
×
127
        }
128

129
        if ($validator->isValid()) {
×
130
            $category->delete();
×
131

132
            setFlash('success', __('stickers.category_success_deleted'));
×
133
        } else {
134
            setFlash('danger', $validator->getErrors());
×
135
        }
136

137
        return redirect('admin/stickers');
×
138
    }
139

140
    /**
141
     * Добавление стикера
142
     */
143
    public function createSticker(Request $request, Validator $validator): View|RedirectResponse
×
144
    {
145
        $cid = int($request->input('cid'));
×
146

147
        $categories = StickersCategory::query()->get();
×
148

149
        if ($categories->isEmpty()) {
×
150
            abort(200, __('stickers.empty_categories'));
×
151
        }
152

153
        if (! is_writable(public_path('uploads/stickers'))) {
×
154
            abort(200, __('main.directory_not_writable'));
×
155
        }
156

157
        if ($request->isMethod('post')) {
×
158
            $code = Str::lower((string) $request->input('code'));
×
159
            $sticker = $request->file('sticker');
×
160

161
            $validator
×
162
                ->length($code, 2, 20, ['code' => __('stickers.sticker_length')])
×
163
                ->regex($code, '|^[\p{L}\p{N}_\-]+$|iu', ['code' => __('stickers.valid_sticker_code')]);
×
164

165
            $category = StickersCategory::query()->where('id', $cid)->first();
×
166
            $validator->notEmpty($category, ['category' => __('stickers.category_not_exist')]);
×
167

168
            $duplicate = Sticker::query()->where('code', $code)->first();
×
169
            $validator->empty($duplicate, ['code' => __('stickers.sticker_exists')]);
×
170

171
            $rules = [
×
172
                'maxsize'    => setting('stickermaxsize'),
×
173
                'maxweight'  => setting('stickermaxweight'),
×
174
                'minweight'  => setting('stickerminweight'),
×
175
                'extensions' => explode(',', setting('media_extensions')),
×
176
            ];
×
177

178
            $validator->file($sticker, $rules, ['sticker' => __('validator.image_upload_failed')]);
×
179

180
            if ($validator->isValid()) {
×
181
                $newName = uniqueName($sticker->getClientOriginalExtension());
×
182
                $path = (new Sticker())->uploadPath . '/' . $newName;
×
183
                $sticker->move(public_path((new Sticker())->uploadPath), $newName);
×
184

185
                Sticker::query()->create([
×
186
                    'category_id' => $cid,
×
187
                    'name'        => $path,
×
188
                    'code'        => $code,
×
189
                ]);
×
190

191
                clearCache(['stickers', 'stickers_map']);
×
192
                setFlash('success', __('stickers.sticker_success_created'));
×
193

194
                return redirect('admin/stickers/' . $cid);
×
195
            }
196

197
            return redirect('/admin/stickers/sticker/create')
×
198
                ->withErrors($validator->getErrors())
×
199
                ->withInput();
×
200
        }
201

202
        return view('admin/stickers/create_sticker', compact('categories', 'cid'));
×
203
    }
204

205
    /**
206
     * Редактирование стикера
207
     */
208
    public function editSticker(int $id, Request $request, Validator $validator): View|RedirectResponse
×
209
    {
210
        $sticker = Sticker::query()->find($id);
×
211
        $page = int($request->input('page', 1));
×
212

213
        if (! $sticker) {
×
214
            abort(404, __('stickers.sticker_not_exist'));
×
215
        }
216

217
        if ($request->isMethod('post')) {
×
218
            $code = Str::lower((string) $request->input('code'));
×
219
            $cid = int($request->input('cid'));
×
220

221
            $validator
×
222
                ->length($code, 2, 20, ['code' => __('stickers.sticker_length')])
×
223
                ->regex($code, '|^[\p{L}\p{N}_\-]+$|iu', ['code' => __('stickers.valid_sticker_code')]);
×
224

225
            $duplicate = Sticker::query()->where('code', $code)->where('id', '<>', $sticker->id)->first();
×
226
            $validator->empty($duplicate, ['code' => __('stickers.sticker_exists')]);
×
227

228
            $category = StickersCategory::query()->where('id', $cid)->first();
×
229
            $validator->notEmpty($category, ['category' => __('stickers.category_not_exist')]);
×
230

231
            if ($validator->isValid()) {
×
232
                $sticker->update([
×
233
                    'code'        => $code,
×
234
                    'category_id' => $cid,
×
235
                ]);
×
236

237
                clearCache(['stickers', 'stickers_map']);
×
238
                setFlash('success', __('stickers.sticker_success_changed'));
×
239

240
                return redirect('admin/stickers/' . $cid . '?page=' . $page);
×
241
            }
242

243
            setInput($request->all());
×
244
            setFlash('danger', $validator->getErrors());
×
245
        }
246

247
        $categories = StickersCategory::query()->get();
×
248

249
        return view('admin/stickers/edit_sticker', compact('sticker', 'categories', 'page'));
×
250
    }
251

252
    /**
253
     * Удаление стикера
254
     s*/
255
    public function deleteSticker(int $id, Request $request): RedirectResponse
×
256
    {
257
        if (! is_writable(public_path('uploads/stickers'))) {
×
258
            abort(200, __('main.directory_not_writable'));
×
259
        }
260

261
        $sticker = Sticker::query()->where('id', $id)->first();
×
262

263
        if (! $sticker) {
×
264
            abort(404, __('stickers.sticker_not_exist'));
×
265
        }
266

267
        $page = int($request->input('page', 1));
×
268
        $category = $sticker->category->id;
×
269

270
        deleteFile(public_path($sticker->name));
×
271
        $sticker->delete();
×
272

273
        clearCache(['stickers', 'stickers_map']);
×
274
        setFlash('success', __('stickers.sticker_success_deleted'));
×
275

276
        return redirect('admin/stickers/' . $category . '?page=' . $page);
×
277
    }
278
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc