Compare commits

...

17 Commits

16 changed files with 747 additions and 203 deletions

View File

@ -9,65 +9,65 @@ on:
- main
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
php-version: [ '8.3' ]
node-version: ['20.x']
composer-version: ['2.6.6']
steps:
- uses: actions/checkout@v4
- name: Set up PHP ${{ matrix.php-version }} with extensions and tools
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
coverage: xdebug
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite
tools: composer:${{ matrix.composer-version }}
ini-values: opcache.enable_cli=1, opcache.jit=tracing, opcache.jit_buffer_size=64M
env:
debug: true
- name: PHP Security Checker
uses: StephaneBour/actions-php-security-checker@1.1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Add keys
run: |
sudo curl -o ~/.composer/keys.tags.pub -sL https://composer.github.io/releases.pub
sudo curl -o ~/.composer/keys.dev.pub -sL https://composer.github.io/snapshots.pub
- name: Install dependencies
env:
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH_JSON }}
run: composer install
- name: Setup project
run: make setup-ci
- name: Check lint
run: make lint
- name: Check tests
run: make test
# build:
# runs-on: ubuntu-latest
#
# strategy:
# matrix:
# php-version: [ '8.3' ]
# node-version: ['20.x']
# composer-version: ['2.6.6']
#
# steps:
# - uses: actions/checkout@v4
#
# - name: Set up PHP ${{ matrix.php-version }} with extensions and tools
# uses: shivammathur/setup-php@v2
# with:
# php-version: ${{ matrix.php-version }}
# coverage: xdebug
# extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite
# tools: composer:${{ matrix.composer-version }}
# ini-values: opcache.enable_cli=1, opcache.jit=tracing, opcache.jit_buffer_size=64M
# env:
# debug: true
#
# - name: PHP Security Checker
# uses: StephaneBour/actions-php-security-checker@1.1
#
# - name: Use Node.js ${{ matrix.node-version }}
# uses: actions/setup-node@v3
# with:
# node-version: ${{ matrix.node-version }}
#
# - name: Add keys
# run: |
# sudo curl -o ~/.composer/keys.tags.pub -sL https://composer.github.io/releases.pub
# sudo curl -o ~/.composer/keys.dev.pub -sL https://composer.github.io/snapshots.pub
#
# - name: Install dependencies
# env:
# COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH_JSON }}
# run: composer install
#
# - name: Setup project
# run: make setup-ci
#
# - name: Check lint
# run: make lint
#
# - name: Check tests
# run: make test
deploy:
needs: build
# needs: build
runs-on: ubuntu-latest
steps:
- name: deploy to test server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.HOST }}
host: http://gitea.mkgtu.ru
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}

View File

@ -8,6 +8,7 @@ use App\Models\Direction;
use App\Models\EntranceExamination;
use App\Models\Faculty;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
class CalculatorController extends Controller
{
@ -32,60 +33,79 @@ class CalculatorController extends Controller
$department = Department::find($direction->department_id);
$faculty = Faculty::find($department->faculty_id);
// phpcs:disable
$fon_3 = URL::to('img/front-page/bakalavr-special/fon3_blok.png');
return "{$acc} <tr class=\"\">
<td id=\"faculty\"> {$faculty->name} </td>
<td>
<a class=\" border border-white rounded-3 p-2 hover1\" type=\"button\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#offcanvasScrolling-{$direction->id}{$direction->id }\" aria-controls=\"offcanvasScrolling\" role=\"button\">{$direction->name}</a>
<div class=\"offcanvas offcanvas-bottom text-dark\" data-bs-scroll=\"true\" data-bs-backdrop=\"false\" tabindex=\"-1\" id=\"offcanvasScrolling-{$direction->id }{$direction->id }\" aria-labelledby=\"offcanvasScrollingLabel-{$direction->id}{$direction->id }\" style=\"height: 100%; font-family: Geologica-Medium;overflow-y: auto ;\">
<div class=\"mx-5\">
<div class=\"offcanvas offcanvas-bottom\" data-bs-scroll=\"true\" data-bs-backdrop=\"false\" tabindex=\"-1\" id=\"offcanvasScrolling-{$direction->id }{$direction->id}\" aria-labelledby=\"offcanvasScrollingLabel-{$direction->id}{$direction->id}\" style=\"height: 100%; font-family: Geologica-Medium; overflow-y: auto ; background-image: url({$fon_3}); color: #004329\">
<div class=\"mx-5 \">
<div class=\"col-12 d-flex justify-content-end mt-4\">
<button type=\"button\" class=\"btn-close text-reset\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\"></button>
<button type=\"button\" class=\"btn-close text-reset\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\">
</button>
</div>
<div class=\"row\">
<div class=\"col-xl-3 col-12\">
<div class=\"display-5 \" style=\"font-family: Geologica-Light\"> {$direction->code} </div>
<div class='row'>
<div class='col-md-6 col-12 d-block'>
<div class=\"\">
<div class=\"display-6 \" style=\"font-family: Geologica-Light\"> {$direction->code} </div>
<div class=\"display-5 \" > {$direction->name}</div>
</div>
</div>
<div class=\"row\">
<div class=\"col-xl-3 col-12\">
<br>
<br>
<div> Уровень образования: <span style=\"font-family: Geologica-Light\">{$direction->educationLevel->name} </span> </div>
<div> Форма обучения: <span style=\"font-family: Geologica-Light\">{$direction->educationForm->name} </span></div>
</div>
<div class=\"col-xl-3 col-12\">
<br>
<br>
<div> Бюджетные места: <span style=\"font-family: Geologica-Light\">{$direction->budget_places} </span> </div>
<div> Квота: <span style=\"font-family: Geologica-Light\">{$direction->quota} </span></div>
</div>
<div class=\"col-xl-3 col-12\">
<br>
<br>
<div> Места на контракт: <span style=\"font-family: Geologica-Light\">{$direction->paid_places} </span> </div>
<div> Стоимость платного обучения: <span style=\"font-family: Geologica-Light\">{$direction->cost_paid_place} </span></div>
</div>
<div class=\"col-xl-3 col-12\">
<br>
<br>
<div> Период обучения (в годах): <span style=\"font-family: Geologica-Light\">{$direction->period} </span> </div>
</div>
<div class=\"mt-4\">
<p style=\"text-align: justify;\">{$direction->description}</p>
</div>
</div>
<div class='col-md-6 col-12 d-flex justify-content-center align-items-center'>
<div class=\"p-3 px-5 border-success fs-4\" style='border-radius: 50px; border: 2px solid;'>
<div > Уровень образования:
<strong>{$direction->educationLevel->name} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Форма обучения:
<strong>{$direction->educationForm->name} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Бюджетные места:
<strong >{$direction->budget_places} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Квота:
<strong >{$direction->quota} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Места на контракт:
<strong >{$direction->paid_places} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Стоимость платного обучения:
<strong >{$direction->cost_paid_place} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Период обучения (в годах):
<strong>{$direction->period} </span>
</div>
</div>
</div>
</div>
<div class=\"offcanvas-body mt-2\" style=\"font-family: Geologica-ExtraLight\">
<p style=\"text-align: justify;\">{$direction->description}</p>
</div>
</div>
</div>
</div>
</div>
</td>
<td class=\"text-end\"> {$direction->period} </td>

View File

@ -36,7 +36,11 @@ class DirectionController extends Controller
{
$levels = EducationLevel::pluck('name', 'id');
$forms = EducationForm::pluck('name', 'id');
$departments = Department::pluck('name', 'id');
$departments = Department::all()
->reduce(function (?array $carry, $department) {
$carry[$department->id] = "{$department->name} - {$department->faculty->name}";
return $carry;
});
$examination_types = ExaminationType::pluck('name', 'id');
$subjects = Subject::pluck('name', 'id');
$subjectTypes = SubjectType::pluck('name', 'id');
@ -150,7 +154,11 @@ class DirectionController extends Controller
{
$levels = EducationLevel::pluck('name', 'id');
$forms = EducationForm::pluck('name', 'id');
$departments = Department::pluck('name', 'id');
$departments = Department::all()
->reduce(function (?array $carry, $department) {
$carry[$department->id] = "{$department->name} - {$department->faculty->name}";
return $carry;
});
$examination_types = ExaminationType::pluck('name', 'id');
$subjects = Subject::pluck('name', 'id');
$subjectTypes = SubjectType::pluck('name', 'id');
@ -234,19 +242,9 @@ class DirectionController extends Controller
public function destroy(Direction $direction): RedirectResponse
{
if ($direction->entranceExaminations()->exists()) {
Log::channel('app')
->error(
'NOT DELETE напр. подготовки {direction} - user {user}',
[
'user' => Auth::user()->name,
'direction' => $direction->name,
'data' => $direction->toArray(),
]
);
return back();
}
$direction->entranceExaminations()->each(fn ($entranceExamination) => $entranceExamination->delete());
$direction->directionProfiles()->detach();
$direction->delete();
Log::channel('app')
->critical(
'DELETE напр. подготовки {direction} - user {user}',
@ -256,8 +254,6 @@ class DirectionController extends Controller
'data' => $direction->toArray(),
]
);
$direction->directionProfiles()->detach();
$direction->delete();
return redirect()->route('directions.index');
}

View File

@ -16,7 +16,7 @@ class StoreDepartmentRequest extends FormRequest
{
return [
'position' => 'required|int|numeric|max:255',
'name' => 'required|string|max:255|unique:departments,name',
'name' => 'required|string|max:255',
'description' => 'nullable|string',
'slug' => 'nullable|string|max:255|unique:departments,slug',
'faculty_id' => 'required|numeric|int|max:1000',

View File

@ -25,8 +25,7 @@ class UpdateDepartmentRequest extends FormRequest
'name' => [
'required',
'string',
'max:255',
"unique:departments,name,{$this->department->id}",
'max:255'
],
];
}

View File

@ -3,6 +3,7 @@
namespace App\Services;
use App\Models\Direction;
use Illuminate\Support\Facades\URL;
class DirectonHtmlBuilder
{
@ -16,55 +17,74 @@ class DirectonHtmlBuilder
// phpcs:disable
$direction = $this->direction;
return "<div class=\"offcanvas offcanvas-bottom\" data-bs-scroll=\"true\" data-bs-backdrop=\"false\" tabindex=\"-1\" id=\"offcanvasScrolling-{$direction->id }\" aria-labelledby=\"offcanvasScrollingLabel-{$direction->id}\" style=\"height: 100%; font-family: Geologica-Medium;overflow-y: auto ;\">
<div class=\"mx-5\">
$fon_3 = URL::to('img/front-page/bakalavr-special/fon3_blok.png');
return "<div class=\"offcanvas offcanvas-bottom\" data-bs-scroll=\"true\" data-bs-backdrop=\"false\" tabindex=\"-1\" id=\"offcanvasScrolling-{$direction->id }\" aria-labelledby=\"offcanvasScrollingLabel-{$direction->id}\" style=\"height: 100%; font-family: Geologica-Medium; overflow-y: auto ; background-image: url({$fon_3}); color: #004329\">
<div class=\"mx-5 \">
<div class=\"col-12 d-flex justify-content-end mt-4\">
<button type=\"button\" class=\"btn-close text-reset\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\"></button>
<button type=\"button\" class=\"btn-close text-reset\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\">
</button>
</div>
<div class=\"row\">
<div class=\"col-xl-3 col-12\">
<div class=\"display-5 \" style=\"font-family: Geologica-Light\"> {$direction->code} </div>
<div class='row'>
<div class='col-md-6 col-12 d-block'>
<div class=\"\">
<div class=\"display-6 \" style=\"font-family: Geologica-Light\"> {$direction->code} </div>
<div class=\"display-5 \" > {$direction->name}</div>
</div>
</div>
<div class=\"row\">
<div class=\"col-xl-3 col-12\">
<br>
<br>
<div> Уровень образования: <span style=\"font-family: Geologica-Light\">{$direction->educationLevel->name} </span> </div>
<div> Форма обучения: <span style=\"font-family: Geologica-Light\">{$direction->educationForm->name} </span></div>
</div>
<div class=\"col-xl-3 col-12\">
<br>
<br>
<div> Бюджетные места: <span style=\"font-family: Geologica-Light\">{$direction->budget_places} </span> </div>
<div> Квота: <span style=\"font-family: Geologica-Light\">{$direction->quota} </span></div>
</div>
<div class=\"col-xl-3 col-12\">
<br>
<br>
<div> Места на контракт: <span style=\"font-family: Geologica-Light\">{$direction->paid_places} </span> </div>
<div> Стоимость платного обучения: <span style=\"font-family: Geologica-Light\">{$direction->cost_paid_place} </span></div>
</div>
<div class=\"col-xl-3 col-12\">
<br>
<br>
<div> Период обучения (в годах): <span style=\"font-family: Geologica-Light\">{$direction->period} </span> </div>
</div>
<div class=\"mt-4\">
<p style=\"text-align: justify;\">{$direction->description}</p>
</div>
</div>
<div class='col-md-6 col-12 d-flex justify-content-center align-items-center'>
<div class=\"p-3 px-5 border-success fs-4\" style='border-radius: 50px; border: 2px solid;'>
<div > Уровень образования:
<strong>{$direction->educationLevel->name} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Форма обучения:
<strong>{$direction->educationForm->name} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Бюджетные места:
<strong >{$direction->budget_places} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Квота:
<strong >{$direction->quota} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Места на контракт:
<strong >{$direction->paid_places} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Стоимость платного обучения:
<strong >{$direction->cost_paid_place} </strong>
</div>
<hr class='d-block d-md-none'><br>
<div > Период обучения (в годах):
<strong>{$direction->period} </span>
</div>
</div>
</div>
</div>
<div class=\"offcanvas-body mt-2\" style=\"font-family: Geologica-ExtraLight\">
<p style=\"text-align: justify;\">{$direction->description}</p>
</div>
</div>
</div>
</div>
</div> ";
}
// phpcs:enable

View File

@ -12,26 +12,28 @@
"fakerphp/faker": "^1.23.1",
"guzzlehttp/guzzle": "^7.8.1",
"imangazaliev/didom": "^2.0.1",
"laravel/framework": "^10.47.0",
"laravel/framework": "^10.48.2",
"laravel/sanctum": "^3.3.3",
"laravel/tinker": "^2.9.0",
"laravel/ui": "^4.5.0",
"laravelcollective/html": "^6.4.1",
"league/flysystem": "^3.25.0",
"maatwebsite/excel": "^3.1.55",
"rap2hpoutre/laravel-log-viewer": "^2.3",
"twbs/bootstrap": "5.2.3"
"twbs/bootstrap": "5.2.3",
"ext-zip": "*"
},
"require-dev": {
"laravel/breeze": "^1.29.1",
"laravel/pint": "^1.14.0",
"laravel/sail": "^1.28.2",
"mockery/mockery": "^1.6.7",
"laravel/sail": "^1.29.0",
"mockery/mockery": "^1.6.9",
"nunomaduro/collision": "^7.10.0",
"phpunit/phpunit": "^10.5.12",
"phpunit/phpunit": "^10.5.13",
"spatie/laravel-ignition": "^2.4.2",
"barryvdh/laravel-ide-helper": "^2.15.1",
"squizlabs/php_codesniffer": "^3.9.0",
"phpstan/phpstan": "^1.10.60"
"phpstan/phpstan": "^1.10.62"
},
"autoload": {
"psr-4": {

578
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "510b89acb2330588f3b2a70ee33a7e2e",
"content-hash": "d5970627f595d4d501a76767ce6e8dae",
"packages": [
{
"name": "brick/math",
@ -130,6 +130,87 @@
],
"time": "2023-12-11T17:09:12+00:00"
},
{
"name": "composer/semver",
"version": "3.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
"reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.4",
"symfony/phpunit-bridge": "^4.2 || ^5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Semver\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
"homepage": "http://www.naderman.de"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
},
{
"name": "Rob Bast",
"email": "rob.bast@gmail.com",
"homepage": "http://robbast.nl"
}
],
"description": "Semver library that offers utilities, version constraint parsing and validation.",
"keywords": [
"semantic",
"semver",
"validation",
"versioning"
],
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.4.0"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2023-08-31T09:50:34+00:00"
},
{
"name": "dflydev/dot-access-data",
"version": "v3.0.2",
@ -501,6 +582,67 @@
],
"time": "2023-10-06T06:47:41+00:00"
},
{
"name": "ezyang/htmlpurifier",
"version": "v4.17.0",
"source": {
"type": "git",
"url": "https://github.com/ezyang/htmlpurifier.git",
"reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c",
"reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c",
"shasum": ""
},
"require": {
"php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
},
"require-dev": {
"cerdic/css-tidy": "^1.7 || ^2.0",
"simpletest/simpletest": "dev-master"
},
"suggest": {
"cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.",
"ext-bcmath": "Used for unit conversion and imagecrash protection",
"ext-iconv": "Converts text to and from non-UTF-8 encodings",
"ext-tidy": "Used for pretty-printing HTML"
},
"type": "library",
"autoload": {
"files": [
"library/HTMLPurifier.composer.php"
],
"psr-0": {
"HTMLPurifier": "library/"
},
"exclude-from-classmap": [
"/library/HTMLPurifier/Language/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1-or-later"
],
"authors": [
{
"name": "Edward Z. Yang",
"email": "admin@htmlpurifier.org",
"homepage": "http://ezyang.com"
}
],
"description": "Standards compliant HTML filter written in PHP",
"homepage": "http://htmlpurifier.org/",
"keywords": [
"html"
],
"support": {
"issues": "https://github.com/ezyang/htmlpurifier/issues",
"source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0"
},
"time": "2023-11-17T15:01:25+00:00"
},
{
"name": "fakerphp/faker",
"version": "v1.23.1",
@ -1162,16 +1304,16 @@
},
{
"name": "laravel/framework",
"version": "v10.47.0",
"version": "v10.48.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "fce29b8de62733cdecbe12e3bae801f83fff2ea4"
"reference": "32a8bb151d748b579c3794dea53b56bd40dfbbd3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/fce29b8de62733cdecbe12e3bae801f83fff2ea4",
"reference": "fce29b8de62733cdecbe12e3bae801f83fff2ea4",
"url": "https://api.github.com/repos/laravel/framework/zipball/32a8bb151d748b579c3794dea53b56bd40dfbbd3",
"reference": "32a8bb151d748b579c3794dea53b56bd40dfbbd3",
"shasum": ""
},
"require": {
@ -1219,6 +1361,7 @@
"conflict": {
"carbonphp/carbon-doctrine-types": ">=3.0",
"doctrine/dbal": ">=4.0",
"mockery/mockery": "1.6.8",
"phpunit/phpunit": ">=11.0.0",
"tightenco/collect": "<5.5.33"
},
@ -1364,7 +1507,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2024-03-05T15:18:36+00:00"
"time": "2024-03-12T16:35:43+00:00"
},
{
"name": "laravel/prompts",
@ -2144,6 +2287,275 @@
],
"time": "2024-01-28T23:22:08+00:00"
},
{
"name": "maatwebsite/excel",
"version": "3.1.55",
"source": {
"type": "git",
"url": "https://github.com/SpartnerNL/Laravel-Excel.git",
"reference": "6d9d791dcdb01a9b6fd6f48d46f0d5fff86e6260"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/6d9d791dcdb01a9b6fd6f48d46f0d5fff86e6260",
"reference": "6d9d791dcdb01a9b6fd6f48d46f0d5fff86e6260",
"shasum": ""
},
"require": {
"composer/semver": "^3.3",
"ext-json": "*",
"illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0",
"php": "^7.0||^8.0",
"phpoffice/phpspreadsheet": "^1.18",
"psr/simple-cache": "^1.0||^2.0||^3.0"
},
"require-dev": {
"laravel/scout": "^7.0||^8.0||^9.0||^10.0",
"orchestra/testbench": "^6.0||^7.0||^8.0||^9.0",
"predis/predis": "^1.1"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Maatwebsite\\Excel\\ExcelServiceProvider"
],
"aliases": {
"Excel": "Maatwebsite\\Excel\\Facades\\Excel"
}
}
},
"autoload": {
"psr-4": {
"Maatwebsite\\Excel\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Patrick Brouwers",
"email": "patrick@spartner.nl"
}
],
"description": "Supercharged Excel exports and imports in Laravel",
"keywords": [
"PHPExcel",
"batch",
"csv",
"excel",
"export",
"import",
"laravel",
"php",
"phpspreadsheet"
],
"support": {
"issues": "https://github.com/SpartnerNL/Laravel-Excel/issues",
"source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.55"
},
"funding": [
{
"url": "https://laravel-excel.com/commercial-support",
"type": "custom"
},
{
"url": "https://github.com/patrickbrouwers",
"type": "github"
}
],
"time": "2024-02-20T08:27:10+00:00"
},
{
"name": "maennchen/zipstream-php",
"version": "3.1.0",
"source": {
"type": "git",
"url": "https://github.com/maennchen/ZipStream-PHP.git",
"reference": "b8174494eda667f7d13876b4a7bfef0f62a7c0d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/b8174494eda667f7d13876b4a7bfef0f62a7c0d1",
"reference": "b8174494eda667f7d13876b4a7bfef0f62a7c0d1",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"ext-zlib": "*",
"php-64bit": "^8.1"
},
"require-dev": {
"ext-zip": "*",
"friendsofphp/php-cs-fixer": "^3.16",
"guzzlehttp/guzzle": "^7.5",
"mikey179/vfsstream": "^1.6",
"php-coveralls/php-coveralls": "^2.5",
"phpunit/phpunit": "^10.0",
"vimeo/psalm": "^5.0"
},
"suggest": {
"guzzlehttp/psr7": "^2.4",
"psr/http-message": "^2.0"
},
"type": "library",
"autoload": {
"psr-4": {
"ZipStream\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Paul Duncan",
"email": "pabs@pablotron.org"
},
{
"name": "Jonatan Männchen",
"email": "jonatan@maennchen.ch"
},
{
"name": "Jesse Donat",
"email": "donatj@gmail.com"
},
{
"name": "András Kolesár",
"email": "kolesar@kolesar.hu"
}
],
"description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
"keywords": [
"stream",
"zip"
],
"support": {
"issues": "https://github.com/maennchen/ZipStream-PHP/issues",
"source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.0"
},
"funding": [
{
"url": "https://github.com/maennchen",
"type": "github"
},
{
"url": "https://opencollective.com/zipstream",
"type": "open_collective"
}
],
"time": "2023-06-21T14:59:35+00:00"
},
{
"name": "markbaker/complex",
"version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/MarkBaker/PHPComplex.git",
"reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
"reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "dev-master",
"phpcompatibility/php-compatibility": "^9.3",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
"squizlabs/php_codesniffer": "^3.7"
},
"type": "library",
"autoload": {
"psr-4": {
"Complex\\": "classes/src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mark Baker",
"email": "mark@lange.demon.co.uk"
}
],
"description": "PHP Class for working with complex numbers",
"homepage": "https://github.com/MarkBaker/PHPComplex",
"keywords": [
"complex",
"mathematics"
],
"support": {
"issues": "https://github.com/MarkBaker/PHPComplex/issues",
"source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2"
},
"time": "2022-12-06T16:21:08+00:00"
},
{
"name": "markbaker/matrix",
"version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/MarkBaker/PHPMatrix.git",
"reference": "728434227fe21be27ff6d86621a1b13107a2562c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c",
"reference": "728434227fe21be27ff6d86621a1b13107a2562c",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "dev-master",
"phpcompatibility/php-compatibility": "^9.3",
"phpdocumentor/phpdocumentor": "2.*",
"phploc/phploc": "^4.0",
"phpmd/phpmd": "2.*",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
"sebastian/phpcpd": "^4.0",
"squizlabs/php_codesniffer": "^3.7"
},
"type": "library",
"autoload": {
"psr-4": {
"Matrix\\": "classes/src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mark Baker",
"email": "mark@demon-angel.eu"
}
],
"description": "PHP Class for working with matrices",
"homepage": "https://github.com/MarkBaker/PHPMatrix",
"keywords": [
"mathematics",
"matrix",
"vector"
],
"support": {
"issues": "https://github.com/MarkBaker/PHPMatrix/issues",
"source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1"
},
"time": "2022-12-02T22:17:43+00:00"
},
{
"name": "monolog/monolog",
"version": "3.5.0",
@ -2644,6 +3056,111 @@
],
"time": "2023-02-08T01:06:31+00:00"
},
{
"name": "phpoffice/phpspreadsheet",
"version": "1.29.0",
"source": {
"type": "git",
"url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
"reference": "fde2ccf55eaef7e86021ff1acce26479160a0fa0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/fde2ccf55eaef7e86021ff1acce26479160a0fa0",
"reference": "fde2ccf55eaef7e86021ff1acce26479160a0fa0",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-dom": "*",
"ext-fileinfo": "*",
"ext-gd": "*",
"ext-iconv": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-simplexml": "*",
"ext-xml": "*",
"ext-xmlreader": "*",
"ext-xmlwriter": "*",
"ext-zip": "*",
"ext-zlib": "*",
"ezyang/htmlpurifier": "^4.15",
"maennchen/zipstream-php": "^2.1 || ^3.0",
"markbaker/complex": "^3.0",
"markbaker/matrix": "^3.0",
"php": "^7.4 || ^8.0",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0",
"psr/simple-cache": "^1.0 || ^2.0 || ^3.0"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "dev-main",
"dompdf/dompdf": "^1.0 || ^2.0",
"friendsofphp/php-cs-fixer": "^3.2",
"mitoteam/jpgraph": "^10.3",
"mpdf/mpdf": "^8.1.1",
"phpcompatibility/php-compatibility": "^9.3",
"phpstan/phpstan": "^1.1",
"phpstan/phpstan-phpunit": "^1.0",
"phpunit/phpunit": "^8.5 || ^9.0 || ^10.0",
"squizlabs/php_codesniffer": "^3.7",
"tecnickcom/tcpdf": "^6.5"
},
"suggest": {
"dompdf/dompdf": "Option for rendering PDF with PDF Writer",
"ext-intl": "PHP Internationalization Functions",
"mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
"mpdf/mpdf": "Option for rendering PDF with PDF Writer",
"tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer"
},
"type": "library",
"autoload": {
"psr-4": {
"PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Maarten Balliauw",
"homepage": "https://blog.maartenballiauw.be"
},
{
"name": "Mark Baker",
"homepage": "https://markbakeruk.net"
},
{
"name": "Franck Lefevre",
"homepage": "https://rootslabs.net"
},
{
"name": "Erik Tilt"
},
{
"name": "Adrien Crivelli"
}
],
"description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
"homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
"keywords": [
"OpenXML",
"excel",
"gnumeric",
"ods",
"php",
"spreadsheet",
"xls",
"xlsx"
],
"support": {
"issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
"source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.0"
},
"time": "2023-06-14T22:48:31+00:00"
},
{
"name": "phpoption/phpoption",
"version": "1.9.2",
@ -6935,16 +7452,16 @@
},
{
"name": "laravel/sail",
"version": "v1.28.2",
"version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
"reference": "057777403b8ab79222dcc04983beaab10b6de6a0"
"reference": "e40cc7ffb5186c45698dbd47e9477e0e429396d0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/sail/zipball/057777403b8ab79222dcc04983beaab10b6de6a0",
"reference": "057777403b8ab79222dcc04983beaab10b6de6a0",
"url": "https://api.github.com/repos/laravel/sail/zipball/e40cc7ffb5186c45698dbd47e9477e0e429396d0",
"reference": "e40cc7ffb5186c45698dbd47e9477e0e429396d0",
"shasum": ""
},
"require": {
@ -6993,11 +7510,11 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
"time": "2024-03-04T14:58:29+00:00"
"time": "2024-03-08T16:32:33+00:00"
},
{
"name": "mockery/mockery",
"version": "1.6.7",
"version": "1.6.9",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
@ -7511,16 +8028,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.10.60",
"version": "1.10.62",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "95dcea7d6c628a3f2f56d091d8a0219485a86bbe"
"reference": "cd5c8a1660ed3540b211407c77abf4af193a6af9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/95dcea7d6c628a3f2f56d091d8a0219485a86bbe",
"reference": "95dcea7d6c628a3f2f56d091d8a0219485a86bbe",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/cd5c8a1660ed3540b211407c77abf4af193a6af9",
"reference": "cd5c8a1660ed3540b211407c77abf4af193a6af9",
"shasum": ""
},
"require": {
@ -7569,20 +8086,20 @@
"type": "tidelift"
}
],
"time": "2024-03-07T13:30:19+00:00"
"time": "2024-03-13T12:27:20+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "10.1.13",
"version": "10.1.14",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "d51c3aec14896d5e80b354fad58e998d1980f8f8"
"reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d51c3aec14896d5e80b354fad58e998d1980f8f8",
"reference": "d51c3aec14896d5e80b354fad58e998d1980f8f8",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
"reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
"shasum": ""
},
"require": {
@ -7639,7 +8156,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.13"
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
},
"funding": [
{
@ -7647,7 +8164,7 @@
"type": "github"
}
],
"time": "2024-03-09T16:54:15+00:00"
"time": "2024-03-12T15:33:41+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -7894,16 +8411,16 @@
},
{
"name": "phpunit/phpunit",
"version": "10.5.12",
"version": "10.5.13",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "41a9886b85ac7bf3929853baf96b95361cd69d2b"
"reference": "20a63fc1c6db29b15da3bd02d4b6cf59900088a7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/41a9886b85ac7bf3929853baf96b95361cd69d2b",
"reference": "41a9886b85ac7bf3929853baf96b95361cd69d2b",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/20a63fc1c6db29b15da3bd02d4b6cf59900088a7",
"reference": "20a63fc1c6db29b15da3bd02d4b6cf59900088a7",
"shasum": ""
},
"require": {
@ -7975,7 +8492,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.12"
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.13"
},
"funding": [
{
@ -7991,7 +8508,7 @@
"type": "tidelift"
}
],
"time": "2024-03-09T12:04:07+00:00"
"time": "2024-03-12T15:37:41+00:00"
},
{
"name": "psr/cache",
@ -9472,7 +9989,8 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8"
"php": "^8",
"ext-zip": "*"
},
"platform-dev": [],
"plugin-api-version": "2.6.0"

View File

@ -10,7 +10,7 @@ return new class extends Migration
{
Schema::create('departments', function (Blueprint $table) {
$table->id();
$table->string('name', 255)->unique();
$table->string('name', 255);
$table->text('description')->nullable();
$table->smallInteger('position');
$table->string('slug', 255)->unique();

View File

@ -24,7 +24,14 @@
@foreach($directions as $direction)
<tr class="">
<th scope="row">{{ $direction->position }}</th>
<td><a href="{{ route('directions.show', $direction) }}">{{ $direction->name }}</a></td>
<td><a href="{{ route('directions.show', $direction) }}">{{ $direction->name }}</a>
<br>
<p @style(['font-size: 0.7em', 'color: grey'])>
@foreach($direction->directionProfiles as $directionProfile)
{{ $directionProfile->name }}
@endforeach
</p>
</td>
<td>{{ Str::words($direction->description, 10, '...') }}</td>
<td>{{ $direction->slug }}</td>
<td>{{ $direction->department->name }}</td>

View File

@ -12,7 +12,7 @@
<span class="text-danger">*</span>
</div>
<div class="mt-2">
{{ Form::text('position', PositionHelper::educationalInstitution(), ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.educational_institutions.position'), 'required']) }}
{{ Form::number('position', PositionHelper::educationalInstitution(), ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.educational_institutions.position'), 'required']) }}
<div class="invalid-feedback">
Поле "Позиция" обязательно!
</div>
@ -28,7 +28,7 @@
<span class="text-danger">*</span>
</div>
<div class="mt-2">
{{ Form::number('name', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.educational_institutions.name'), 'required']) }}
{{ Form::text('name', '', ['class' => 'form-control', 'data-bs-toggle' => "tooltip", 'data-bs-title' => __('tooltips.educational_institutions.name'), 'required']) }}
<div class="invalid-feedback">
Поле "Название" обязательно!
</div>

View File

@ -3,6 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta name="csrf-param" content="_token"/>
<title>Панель администратора</title>

View File

View File

@ -18,6 +18,7 @@ use Rap2hpoutre\LaravelLogViewer\LogViewerController;
Route::middleware(['auth', 'verified'])->prefix('admin')->group(function () {
Route::get('/logs', [LogViewerController::class, 'index']);
Route::get('/exportExcel', [LogViewerController::class, 'index']);
Route::get('/dashboard', function () {
return view('admin');

View File

@ -130,27 +130,4 @@ class DirectionTest extends TestCase
$this->assertDatabaseMissing('directions', $this->direction->toArray());
}
public function testNotDestroyDirectionWithEntranceExamination(): void
{
$response = $this->actingAs($this->user)
->withSession(['banned' => false])
->delete(route('directions.destroy', $this->direction));
$response->assertStatus(302);
$this->assertDatabaseHas(
'directions',
$this->direction->only([
'position',
'name',
'description',
'code',
'slug',
'education_level_id',
'education_form_id',
'department_id',
])
);
}
}