diff --git a/.github/dev_bug_report.md b/.github/dev_bug_report.md new file mode 100755 index 0000000..ef93e56 --- /dev/null +++ b/.github/dev_bug_report.md @@ -0,0 +1,35 @@ +--- +name: Dev Bug Report +about: Create a report to help us improve +title: '' +labels: stat_backlog, type_bug +assignees: '' + +--- + +# Bug Description +A clear and concise description of what the bug is. + +# How to Reproduce + +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +## Minimal Code Example + +``` +// your code ... +``` + +# Expected Behavior +A clear and concise description of what you expected to happen. + +# Screenshots +If applicable, add screenshots to help explain your problem. + +# Additional Information +Add any other context about the problem here. diff --git a/.github/dev_feature_request.md b/.github/dev_feature_request.md new file mode 100755 index 0000000..9573c35 --- /dev/null +++ b/.github/dev_feature_request.md @@ -0,0 +1,18 @@ +--- +name: Dev Feature Request +about: Suggest an idea for this project +title: '' +labels: stat_backlog, type_feature +assignees: '' + +--- + +# What is the feature you request +* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] +* A clear and concise description of what you want to happen. + +# Alternatives +A clear and concise description of any alternative solutions or features you've considered. + +# Additional Information +Add any other context or screenshots about the feature request here. diff --git a/.github/user_bug_report.md b/.github/user_bug_report.md new file mode 100755 index 0000000..4b92a8e --- /dev/null +++ b/.github/user_bug_report.md @@ -0,0 +1,40 @@ +--- +name: User Bug Report +about: Create a report to help us improve +title: '' +labels: stat_backlog, type_bug +assignees: '' + +--- + +# Bug Description + +A clear and concise description of what the bug is. + +# How to Reproduce + +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +# Expected Behavior + +A clear and concise description of what you expected to happen. + +# Screenshots + +If applicable, add screenshots to help explain your problem. + +# System Information + +- System: [e.g. PC or iPhone11, ...] +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- KarakaVersion [e.g. 22] + +# Additional Information + +Add any other context about the problem here. diff --git a/.github/user_feature_request.md b/.github/user_feature_request.md new file mode 100755 index 0000000..c9595e8 --- /dev/null +++ b/.github/user_feature_request.md @@ -0,0 +1,21 @@ +--- +name: User Feature Request +about: Suggest an idea for this project +title: '' +labels: stat_backlog, type_feature +assignees: '' + +--- + +# What is the feature you request + +* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] +* A clear and concise description of what you want to happen. + +# Alternatives + +A clear and concise description of any alternative solutions or features you've considered. + +# Additional Information + +Add any other context or screenshots about the feature request here. diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml new file mode 100755 index 0000000..adb8716 --- /dev/null +++ b/.github/workflows/greetings.yml @@ -0,0 +1,13 @@ +name: Greetings + +on: [pull_request, issues] + +jobs: + greeting: + runs-on: ubuntu-latest + steps: + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: 'Thank you for createing this issue. We will check it as soon as possible.' + pr-message: 'Thank you for your pull request. We will check it as soon as possible.' diff --git a/.github/workflows/image.yml b/.github/workflows/image.yml new file mode 100755 index 0000000..6f8f14a --- /dev/null +++ b/.github/workflows/image.yml @@ -0,0 +1,10 @@ +name: Image optimization + +on: [push, pull_request] + +jobs: + general_image_workflow: + uses: Karaka-Management/Karaka/.github/workflows/image.yml@develop + secrets: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_PAT: ${{ secrets.GH_PAT }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100755 index 0000000..1dacd12 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,20 @@ +name: CI + +on: + push: + branches: + - master + - develop + pull_request: + branches: + - master + - develop + schedule: + - cron: '0 0 1,15 * *' + +jobs: + general_module_workflow: + uses: Karaka-Management/Karaka/.github/workflows/php_template.yml@develop + secrets: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_PAT: ${{ secrets.GH_PAT }} diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..bd6cef1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +Build +*.cache +.directory +Vagrantfile +vendor +bower_components +node_modules +*.log +.vagrant +.vscode +.sass-cache +cache +Cache +Libraries +.idea \ No newline at end of file diff --git a/Admin/Install/Media.install.json b/Admin/Install/Media.install.json new file mode 100755 index 0000000..c012cd3 --- /dev/null +++ b/Admin/Install/Media.install.json @@ -0,0 +1,30 @@ +[ + { + "type": "type", + "name": "vehicle_profile_image", + "l11n": [ + { + "title": "Profile image", + "lang": "en" + }, + { + "title": "Profilbild", + "lang": "de" + } + ] + }, + { + "type": "collection", + "create_directory": true, + "name": "FleetManagement", + "virtualPath": "/Modules", + "user": 1 + }, + { + "type": "collection", + "create_directory": true, + "name": "Vehicle", + "virtualPath": "/Modules/FleetManagement", + "user": 1 + } +] \ No newline at end of file diff --git a/Admin/Install/Media.php b/Admin/Install/Media.php new file mode 100755 index 0000000..5cb9e50 --- /dev/null +++ b/Admin/Install/Media.php @@ -0,0 +1,43 @@ + __DIR__ . '/Media.install.json']); + } +} diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json new file mode 100755 index 0000000..355e599 --- /dev/null +++ b/Admin/Install/Navigation.install.json @@ -0,0 +1,248 @@ +[ + { + "id": 1003501001, + "pid": "/", + "type": 2, + "subtype": 0, + "name": "FleetManagement", + "uri": null, + "target": "self", + "icon": "fa fa-car", + "order": 80, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 0, + "children": [ + { + "id": 1003502001, + "pid": "/", + "type": 2, + "subtype": 1, + "name": "Vehicles", + "uri": "{/base}/fleet/vehicle/list", + "target": "self", + "icon": null, + "order": 1, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003501001, + "children": [ + { + "id": 1003502101, + "pid": "/fleet/vehicle", + "type": 3, + "subtype": 1, + "name": "List", + "uri": "{/base}/fleet/vehicle/list", + "target": "self", + "icon": null, + "order": 1, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003502001, + "children": [] + }, + { + "id": 1003502201, + "pid": "/fleet/vehicle", + "type": 3, + "subtype": 1, + "name": "Create", + "uri": "{/base}/fleet/vehicle/create?{?}", + "target": "self", + "icon": null, + "order": 1, + "from": "FleetManagement", + "permission": { "permission": 4, "category": null, "element": null }, + "parent": 1003502001, + "children": [] + } + ] + }, + { + "id": 1003503001, + "pid": "/", + "type": 2, + "subtype": 1, + "name": "Drivers", + "uri": "{/base}/fleet/driver/list", + "target": "self", + "icon": null, + "order": 1, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003501001, + "children": [ + { + "id": 1003503101, + "pid": "/fleet/driver", + "type": 3, + "subtype": 1, + "name": "List", + "uri": "{/base}/fleet/driver/list", + "target": "self", + "icon": null, + "order": 1, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003503001, + "children": [] + }, + { + "id": 1003503201, + "pid": "/fleet/driver", + "type": 3, + "subtype": 1, + "name": "Create", + "uri": "{/base}/fleet/driver/create?{?}", + "target": "self", + "icon": null, + "order": 1, + "from": "FleetManagement", + "permission": { "permission": 4, "category": null, "element": null }, + "parent": 1003503001, + "children": [] + } + ] + }, + { + "id": 1003504001, + "pid": "/", + "type": 2, + "subtype": 1, + "name": "Inspections", + "uri": "{/base}/fleet/inspection/list", + "target": "self", + "icon": null, + "order": 1, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003501001, + "children": [ + { + "id": 1003504101, + "pid": "/fleet/inspection", + "type": 3, + "subtype": 1, + "name": "List", + "uri": "{/base}/fleet/inspection/list", + "target": "self", + "icon": null, + "order": 1, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003504001, + "children": [] + }, + { + "id": 1003504201, + "pid": "/fleet/inspection", + "type": 3, + "subtype": 1, + "name": "VehicleInspectionTypes", + "uri": "{/base}/fleet/inspection/type/list?{?}", + "target": "self", + "icon": null, + "order": 5, + "from": "FleetManagement", + "permission": { "permission": 4, "category": null, "element": null }, + "parent": 1003504001, + "children": [] + } + ] + }, + { + "id": 1003505001, + "pid": "/", + "type": 2, + "subtype": 1, + "name": "VehicleAttributes", + "uri": "{/base}/fleet/vehicle/attribute/type/list?{?}", + "target": "self", + "icon": null, + "order": 5, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003501001, + "children": [ + { + "id": 1003505101, + "pid": "/fleet/vehicle/attribute", + "type": 3, + "subtype": 1, + "name": "Types", + "uri": "{/base}/fleet/vehicle/attribute/type/list?{?}", + "target": "self", + "icon": null, + "order": 15, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003505001, + "children": [] + }, + { + "id": 1003505201, + "pid": "/fleet/vehicle/attribute", + "type": 3, + "subtype": 1, + "name": "Values", + "uri": "{/base}/fleet/vehicle/attribute/value/list?{?}", + "target": "self", + "icon": null, + "order": 15, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003505001, + "children": [] + } + ] + }, + { + "id": 1003506001, + "pid": "/", + "type": 2, + "subtype": 1, + "name": "DriverAttributes", + "uri": "{/base}/fleet/driver/attribute/type/list?{?}", + "target": "self", + "icon": null, + "order": 5, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003501001, + "children": [ + { + "id": 1003506101, + "pid": "/fleet/driver/attribute", + "type": 3, + "subtype": 1, + "name": "Types", + "uri": "{/base}/fleet/driver/attribute/type/list?{?}", + "target": "self", + "icon": null, + "order": 15, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003506001, + "children": [] + }, + { + "id": 1003506201, + "pid": "/fleet/driver/attribute", + "type": 3, + "subtype": 1, + "name": "Values", + "uri": "{/base}/fleet/driver/attribute/value/list?{?}", + "target": "self", + "icon": null, + "order": 15, + "from": "FleetManagement", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1003506001, + "children": [] + } + ] + } + ] + } +] diff --git a/Admin/Install/Navigation.php b/Admin/Install/Navigation.php new file mode 100755 index 0000000..83a251f --- /dev/null +++ b/Admin/Install/Navigation.php @@ -0,0 +1,43 @@ + __DIR__ . '/Navigation.install.json']); + } +} diff --git a/Admin/Install/attributes.json b/Admin/Install/attributes.json new file mode 100644 index 0000000..dec23c1 --- /dev/null +++ b/Admin/Install/attributes.json @@ -0,0 +1,285 @@ +[ + { + "name": "license_plate", + "l11n": { + "en": "License plate", + "de": "Kennzeichen" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "insurance_provider", + "l11n": { + "en": "Insurance provider", + "de": "Versicherung" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "insurance_number", + "l11n": { + "en": "Insurance number", + "de": "Versicherungsnummer" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "leasing_provider", + "l11n": { + "en": "Leasing provider", + "de": "Leasingsnummer" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "leasing_number", + "l11n": { + "en": "Leasing number", + "de": "Leasingsnummer" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "leasing_end", + "l11n": { + "en": "Leasing end", + "de": "Leasingende" + }, + "value_type": 4, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "leasing_milage", + "l11n": { + "en": "Leasing milage", + "de": "Laufleistung" + }, + "value_type": 1, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "insurance_milage", + "l11n": { + "en": "Insurance milage", + "de": "Versicherungslaufleistung" + }, + "value_type": 1, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "engine_size", + "l11n": { + "en": "Engine size", + "de": "Hubraum" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "vin", + "l11n": { + "en": "VIN", + "de": "Fahrgestellnummer" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "make", + "l11n": { + "en": "Make", + "de": "Marke" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "model", + "l11n": { + "en": "Model", + "de": "Modell" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "color", + "l11n": { + "en": "Color", + "de": "Farbe" + }, + "value_type": 2, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "build", + "l11n": { + "en": "Build year", + "de": "Baujahr" + }, + "value_type": 4, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "ownership_start", + "l11n": { + "en": "Ownership start", + "de": "Besitzbeginn" + }, + "value_type": 4, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "ownership_end", + "l11n": { + "en": "Ownership end", + "de": "Besitzende" + }, + "value_type": 4, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "fuel_type", + "l11n": { + "en": "Fuel type", + "de": "Kraftstoffart" + }, + "value_type": 1, + "is_custom_allowed": false, + "validation_pattern": "", + "is_required": true, + "default_value": "", + "values": [ + { + "value": 1, + "l11n": { + "en": "None", + "de": "Kein" + } + }, + { + "value": 2, + "l11n": { + "en": "Gas", + "de": "Benzin" + } + }, + { + "value": 3, + "l11n": { + "en": "Diesel", + "de": "Diesel" + } + }, + { + "value": 4, + "l11n": { + "en": "Electric", + "de": "Elektro" + } + }, + { + "value": 5, + "l11n": { + "en": "Hydrogen", + "de": "Wasserstoff" + } + } + ] + }, + { + "name": "purchase_price", + "l11n": { + "en": "Purchase price", + "de": "Kaufpreis" + }, + "value_type": 1, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + }, + { + "name": "leasing_residual_value", + "l11n": { + "en": "Leasing residual value", + "de": "Leasing Restwert" + }, + "value_type": 1, + "is_custom_allowed": true, + "validation_pattern": "", + "is_required": false, + "default_value": "", + "values": [] + } +] \ No newline at end of file diff --git a/Admin/Install/db.json b/Admin/Install/db.json new file mode 100755 index 0000000..25133e0 --- /dev/null +++ b/Admin/Install/db.json @@ -0,0 +1,1046 @@ +{ + "fleetmgmt_fuel_type": { + "name": "fleetmgmt_fuel_type", + "fields": { + "fleetmgmt_fuel_type_id": { + "name": "fleetmgmt_fuel_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_fuel_type_name": { + "name": "fleetmgmt_fuel_type_name", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "fleetmgmt_fuel_type_l11n": { + "name": "fleetmgmt_fuel_type_l11n", + "fields": { + "fleetmgmt_fuel_type_l11n_id": { + "name": "fleetmgmt_fuel_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_fuel_type_l11n_title": { + "name": "fleetmgmt_fuel_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_fuel_type_l11n_type": { + "name": "fleetmgmt_fuel_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_fuel_type", + "foreignKey": "fleetmgmt_fuel_type_id" + }, + "fleetmgmt_fuel_type_l11n_lang": { + "name": "fleetmgmt_fuel_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_vehicle_type": { + "name": "fleetmgmt_vehicle_type", + "fields": { + "fleetmgmt_vehicle_type_id": { + "name": "fleetmgmt_vehicle_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_type_name": { + "name": "fleetmgmt_vehicle_type_name", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "fleetmgmt_vehicle_type_l11n": { + "name": "fleetmgmt_vehicle_type_l11n", + "fields": { + "fleetmgmt_vehicle_type_l11n_id": { + "name": "fleetmgmt_vehicle_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_type_l11n_title": { + "name": "fleetmgmt_vehicle_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_vehicle_type_l11n_type": { + "name": "fleetmgmt_vehicle_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_vehicle_type", + "foreignKey": "fleetmgmt_vehicle_type_id" + }, + "fleetmgmt_vehicle_type_l11n_lang": { + "name": "fleetmgmt_vehicle_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_inspection_type": { + "name": "fleetmgmt_inspection_type", + "fields": { + "fleetmgmt_inspection_type_id": { + "name": "fleetmgmt_inspection_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_inspection_type_name": { + "name": "fleetmgmt_inspection_type_name", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "fleetmgmt_inspection_type_l11n": { + "name": "fleetmgmt_inspection_type_l11n", + "fields": { + "fleetmgmt_inspection_type_l11n_id": { + "name": "fleetmgmt_inspection_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_inspection_type_l11n_title": { + "name": "fleetmgmt_inspection_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_inspection_type_l11n_type": { + "name": "fleetmgmt_inspection_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_inspection_type", + "foreignKey": "fleetmgmt_inspection_type_id" + }, + "fleetmgmt_inspection_type_l11n_lang": { + "name": "fleetmgmt_inspection_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_vehicle": { + "name": "fleetmgmt_vehicle", + "fields": { + "fleetmgmt_vehicle_id": { + "name": "fleetmgmt_vehicle_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_name": { + "name": "fleetmgmt_vehicle_name", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_vehicle_status": { + "name": "fleetmgmt_vehicle_status", + "type": "TINYINT", + "null": false + }, + "fleetmgmt_vehicle_type": { + "name": "fleetmgmt_vehicle_type", + "type": "INT", + "foreignTable": "fleetmgmt_vehicle_type", + "foreignKey": "fleetmgmt_vehicle_type_id" + }, + "fleetmgmt_vehicle_fuel": { + "name": "fleetmgmt_vehicle_fuel", + "type": "INT", + "foreignTable": "fleetmgmt_fuel_type", + "foreignKey": "fleetmgmt_fuel_type_id" + }, + "fleetmgmt_vehicle_info": { + "name": "fleetmgmt_vehicle_info", + "type": "TEXT", + "null": false + }, + "fleetmgmt_vehicle_created_at": { + "name": "fleetmgmt_vehicle_created_at", + "type": "DATETIME", + "null": false + }, + "fleetmgmt_vehicle_responsible": { + "name": "fleetmgmt_vehicle_responsible", + "type": "INT", + "null": true, + "default": true, + "foreignTable": "account", + "foreignKey": "account_id" + }, + "fleetmgmt_vehicle_unit": { + "name": "fleetmgmt_vehicle_unit", + "type": "INT", + "default": null, + "null": true, + "foreignTable": "unit", + "foreignKey": "unit_id" + } + } + }, + "fleetmgmt_vehicle_inspection": { + "name": "fleetmgmt_vehicle_inspection", + "fields": { + "fleetmgmt_vehicle_inspection_id": { + "name": "fleetmgmt_vehicle_inspection_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_inspection_description": { + "name": "fleetmgmt_vehicle_inspection_description", + "type": "TEXT", + "null": false + }, + "fleetmgmt_vehicle_inspection_status": { + "name": "fleetmgmt_vehicle_inspection_status", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_vehicle_inspection_interval": { + "name": "fleetmgmt_vehicle_inspection_interval", + "type": "INT", + "null": false + }, + "fleetmgmt_vehicle_inspection_next": { + "name": "fleetmgmt_vehicle_inspection_next", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_vehicle_inspection_date": { + "name": "fleetmgmt_vehicle_inspection_date", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_vehicle_inspection_type": { + "name": "fleetmgmt_vehicle_inspection_type", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_inspection_type", + "foreignKey": "fleetmgmt_inspection_type_id" + }, + "fleetmgmt_vehicle_inspection_vehicle": { + "name": "fleetmgmt_vehicle_inspection_vehicle", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_vehicle", + "foreignKey": "fleetmgmt_vehicle_id" + } + } + }, + "fleetmgmt_driver_inspection_type": { + "name": "fleetmgmt_driver_inspection_type", + "fields": { + "fleetmgmt_driver_inspection_type_id": { + "name": "fleetmgmt_driver_inspection_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_inspection_type_name": { + "name": "fleetmgmt_driver_inspection_type_name", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "fleetmgmt_driver_inspection_type_l11n": { + "name": "fleetmgmt_driver_inspection_type_l11n", + "fields": { + "fleetmgmt_driver_inspection_type_l11n_id": { + "name": "fleetmgmt_driver_inspection_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_inspection_type_l11n_title": { + "name": "fleetmgmt_driver_inspection_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_driver_inspection_type_l11n_type": { + "name": "fleetmgmt_driver_inspection_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_driver_inspection_type", + "foreignKey": "fleetmgmt_driver_inspection_type_id" + }, + "fleetmgmt_driver_inspection_type_l11n_lang": { + "name": "fleetmgmt_driver_inspection_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_driver": { + "name": "fleetmgmt_driver", + "fields": { + "fleetmgmt_driver_id": { + "name": "fleetmgmt_driver_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_status": { + "name": "fleetmgmt_driver_status", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_account": { + "name": "fleetmgmt_driver_account", + "type": "INT", + "null": true, + "default": true, + "foreignTable": "account", + "foreignKey": "account_id" + } + } + }, + "fleetmgmt_driver_inspection": { + "name": "fleetmgmt_driver_inspection", + "fields": { + "fleetmgmt_driver_inspection_id": { + "name": "fleetmgmt_driver_inspection_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_inspection_description": { + "name": "fleetmgmt_driver_inspection_description", + "type": "TEXT", + "null": false + }, + "fleetmgmt_driver_inspection_status": { + "name": "fleetmgmt_driver_inspection_status", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_inspection_interval": { + "name": "fleetmgmt_driver_inspection_interval", + "type": "INT", + "null": false + }, + "fleetmgmt_driver_inspection_next": { + "name": "fleetmgmt_driver_inspection_next", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_driver_inspection_date": { + "name": "fleetmgmt_driver_inspection_date", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_driver_inspection_type": { + "name": "fleetmgmt_driver_inspection_type", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_driver_inspection_type", + "foreignKey": "fleetmgmt_driver_inspection_type_id" + }, + "fleetmgmt_driver_inspection_driver": { + "name": "fleetmgmt_driver_inspection_driver", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + } + } + }, + "fleetmgmt_vehicle_usage": { + "name": "fleetmgmt_vehicle_usage", + "fields": { + "fleetmgmt_vehicle_usage_id": { + "name": "fleetmgmt_vehicle_usage_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_usage_type": { + "name": "fleetmgmt_vehicle_usage_type", + "type": "INT", + "null": false + }, + "fleetmgmt_vehicle_usage_account": { + "name": "fleetmgmt_vehicle_usage_account", + "type": "INT", + "null": false, + "foreignTable": "account", + "foreignKey": "account_id" + }, + "fleetmgmt_vehicle_usage_start": { + "name": "fleetmgmt_vehicle_usage_start", + "type": "DATETIME", + "null": false + }, + "fleetmgmt_vehicle_usage_end": { + "name": "fleetmgmt_vehicle_usage_end", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_vehicle_usage_distance": { + "name": "fleetmgmt_vehicle_usage_distance", + "type": "INT", + "null": false + } + } + }, + "fleetmgmt_attr_type": { + "name": "fleetmgmt_attr_type", + "fields": { + "fleetmgmt_attr_type_id": { + "name": "fleetmgmt_attr_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_attr_type_name": { + "name": "fleetmgmt_attr_type_name", + "type": "VARCHAR(255)", + "null": false, + "unique": true + }, + "fleetmgmt_attr_type_datatype": { + "name": "fleetmgmt_attr_type_datatype", + "type": "INT(11)", + "null": false + }, + "fleetmgmt_attr_type_fields": { + "name": "fleetmgmt_attr_type_fields", + "type": "INT(11)", + "null": false + }, + "fleetmgmt_attr_type_custom": { + "name": "fleetmgmt_attr_type_custom", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_attr_type_required": { + "description": "Every vehicle must have this attribute type if set to true.", + "name": "fleetmgmt_attr_type_required", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_attr_type_pattern": { + "description": "This is a regex validation pattern.", + "name": "fleetmgmt_attr_type_pattern", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "fleetmgmt_attr_type_l11n": { + "name": "fleetmgmt_attr_type_l11n", + "fields": { + "fleetmgmt_attr_type_l11n_id": { + "name": "fleetmgmt_attr_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_attr_type_l11n_title": { + "name": "fleetmgmt_attr_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_attr_type_l11n_type": { + "name": "fleetmgmt_attr_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_type", + "foreignKey": "fleetmgmt_attr_type_id" + }, + "fleetmgmt_attr_type_l11n_lang": { + "name": "fleetmgmt_attr_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_attr_value": { + "name": "fleetmgmt_attr_value", + "fields": { + "fleetmgmt_attr_value_id": { + "name": "fleetmgmt_attr_value_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_attr_value_default": { + "name": "fleetmgmt_attr_value_default", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_attr_value_valueStr": { + "name": "fleetmgmt_attr_value_valueStr", + "type": "VARCHAR(255)", + "null": true, + "default": null + }, + "fleetmgmt_attr_value_valueInt": { + "name": "fleetmgmt_attr_value_valueInt", + "type": "INT(11)", + "null": true, + "default": null + }, + "fleetmgmt_attr_value_valueDec": { + "name": "fleetmgmt_attr_value_valueDec", + "type": "DECIMAL(19,5)", + "null": true, + "default": null + }, + "fleetmgmt_attr_value_valueDat": { + "name": "fleetmgmt_attr_value_valueDat", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_attr_value_unit": { + "name": "fleetmgmt_attr_value_unit", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_attr_value_deptype": { + "name": "fleetmgmt_attr_value_deptype", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_attr_type", + "foreignKey": "fleetmgmt_attr_type_id" + }, + "fleetmgmt_attr_value_depvalue": { + "name": "fleetmgmt_attr_value_depvalue", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_attr_value", + "foreignKey": "fleetmgmt_attr_value_id" + } + } + }, + "fleetmgmt_attr_value_l11n": { + "name": "fleetmgmt_attr_value_l11n", + "fields": { + "fleetmgmt_attr_value_l11n_id": { + "name": "fleetmgmt_attr_value_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_attr_value_l11n_title": { + "name": "fleetmgmt_attr_value_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_attr_value_l11n_value": { + "name": "fleetmgmt_attr_value_l11n_value", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_value", + "foreignKey": "fleetmgmt_attr_value_id" + }, + "fleetmgmt_attr_value_l11n_lang": { + "name": "fleetmgmt_attr_value_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_vehicle_attr_default": { + "name": "fleetmgmt_vehicle_attr_default", + "fields": { + "fleetmgmt_vehicle_attr_default_id": { + "name": "fleetmgmt_vehicle_attr_default_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_attr_default_type": { + "name": "fleetmgmt_vehicle_attr_default_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_type", + "foreignKey": "fleetmgmt_attr_type_id" + }, + "fleetmgmt_vehicle_attr_default_value": { + "name": "fleetmgmt_vehicle_attr_default_value", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_value", + "foreignKey": "fleetmgmt_attr_value_id" + } + } + }, + "fleetmgmt_vehicle_attr": { + "name": "fleetmgmt_vehicle_attr", + "fields": { + "fleetmgmt_vehicle_attr_id": { + "name": "fleetmgmt_vehicle_attr_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_attr_vehicle": { + "name": "fleetmgmt_vehicle_attr_vehicle", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_vehicle", + "foreignKey": "fleetmgmt_vehicle_id" + }, + "fleetmgmt_vehicle_attr_type": { + "name": "fleetmgmt_vehicle_attr_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_type", + "foreignKey": "fleetmgmt_attr_type_id" + }, + "fleetmgmt_vehicle_attr_value": { + "name": "fleetmgmt_vehicle_attr_value", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_attr_value", + "foreignKey": "fleetmgmt_attr_value_id" + } + } + }, + "fleetmgmt_vehicle_media": { + "name": "fleetmgmt_vehicle_media", + "fields": { + "fleetmgmt_vehicle_media_id": { + "name": "fleetmgmt_vehicle_media_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_media_vehicle": { + "name": "fleetmgmt_vehicle_media_vehicle", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_vehicle", + "foreignKey": "fleetmgmt_vehicle_id" + }, + "fleetmgmt_vehicle_media_media": { + "name": "fleetmgmt_vehicle_media_media", + "type": "INT", + "null": false, + "foreignTable": "media", + "foreignKey": "media_id" + } + } + }, + "fleetmgmt_vehicle_note": { + "name": "fleetmgmt_vehicle_note", + "fields": { + "fleetmgmt_vehicle_note_id": { + "name": "fleetmgmt_vehicle_note_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_vehicle_note_vehicle": { + "name": "fleetmgmt_vehicle_note_vehicle", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_vehicle", + "foreignKey": "fleetmgmt_vehicle_id" + }, + "fleetmgmt_vehicle_note_doc": { + "name": "fleetmgmt_vehicle_note_doc", + "type": "INT", + "null": false, + "foreignTable": "editor_doc", + "foreignKey": "editor_doc_id" + } + } + }, + "fleetmgmt_driver_attr_type": { + "name": "fleetmgmt_driver_attr_type", + "fields": { + "fleetmgmt_driver_attr_type_id": { + "name": "fleetmgmt_driver_attr_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_type_name": { + "name": "fleetmgmt_driver_attr_type_name", + "type": "VARCHAR(255)", + "null": false, + "unique": true + }, + "fleetmgmt_driver_attr_type_datatype": { + "name": "fleetmgmt_driver_attr_type_datatype", + "type": "INT(11)", + "null": false + }, + "fleetmgmt_driver_attr_type_fields": { + "name": "fleetmgmt_driver_attr_type_fields", + "type": "INT(11)", + "null": false + }, + "fleetmgmt_driver_attr_type_custom": { + "name": "fleetmgmt_driver_attr_type_custom", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_attr_type_required": { + "description": "Every driver must have this attribute type if set to true.", + "name": "fleetmgmt_driver_attr_type_required", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_attr_type_pattern": { + "description": "This is a regex validation pattern.", + "name": "fleetmgmt_driver_attr_type_pattern", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "fleetmgmt_driver_attr_type_l11n": { + "name": "fleetmgmt_driver_attr_type_l11n", + "fields": { + "fleetmgmt_driver_attr_type_l11n_id": { + "name": "fleetmgmt_driver_attr_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_type_l11n_title": { + "name": "fleetmgmt_driver_attr_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_driver_attr_type_l11n_type": { + "name": "fleetmgmt_driver_attr_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_driver_attr_type", + "foreignKey": "fleetmgmt_driver_attr_type_id" + }, + "fleetmgmt_driver_attr_type_l11n_lang": { + "name": "fleetmgmt_driver_attr_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_driver_attr_value": { + "name": "fleetmgmt_driver_attr_value", + "fields": { + "fleetmgmt_driver_attr_value_id": { + "name": "fleetmgmt_driver_attr_value_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_value_default": { + "name": "fleetmgmt_driver_attr_value_default", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_driver_attr_value_valueStr": { + "name": "fleetmgmt_driver_attr_value_valueStr", + "type": "VARCHAR(255)", + "null": true, + "default": null + }, + "fleetmgmt_driver_attr_value_valueInt": { + "name": "fleetmgmt_driver_attr_value_valueInt", + "type": "INT(11)", + "null": true, + "default": null + }, + "fleetmgmt_driver_attr_value_valueDec": { + "name": "fleetmgmt_driver_attr_value_valueDec", + "type": "DECIMAL(19,5)", + "null": true, + "default": null + }, + "fleetmgmt_driver_attr_value_valueDat": { + "name": "fleetmgmt_driver_attr_value_valueDat", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_driver_attr_value_unit": { + "name": "fleetmgmt_driver_attr_value_unit", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_driver_attr_value_deptype": { + "name": "fleetmgmt_driver_attr_value_deptype", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_driver_attr_type", + "foreignKey": "fleetmgmt_driver_attr_type_id" + }, + "fleetmgmt_driver_attr_value_depvalue": { + "name": "fleetmgmt_driver_attr_value_depvalue", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_driver_attr_value", + "foreignKey": "fleetmgmt_driver_attr_value_id" + } + } + }, + "fleetmgmt_driver_attr_value_l11n": { + "name": "fleetmgmt_driver_attr_value_l11n", + "fields": { + "fleetmgmt_driver_attr_value_l11n_id": { + "name": "fleetmgmt_driver_attr_value_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_value_l11n_title": { + "name": "fleetmgmt_driver_attr_value_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "fleetmgmt_driver_attr_value_l11n_value": { + "name": "fleetmgmt_driver_attr_value_l11n_value", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_driver_attr_value", + "foreignKey": "fleetmgmt_driver_attr_value_id" + }, + "fleetmgmt_driver_attr_value_l11n_lang": { + "name": "fleetmgmt_driver_attr_value_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "fleetmgmt_driver_attr_default": { + "name": "fleetmgmt_driver_attr_default", + "fields": { + "fleetmgmt_driver_attr_default_id": { + "name": "fleetmgmt_driver_attr_default_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_default_type": { + "name": "fleetmgmt_driver_attr_default_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_type", + "foreignKey": "fleetmgmt_attr_type_id" + }, + "fleetmgmt_driver_attr_default_value": { + "name": "fleetmgmt_driver_attr_default_value", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_value", + "foreignKey": "fleetmgmt_attr_value_id" + } + } + }, + "fleetmgmt_driver_attr": { + "name": "fleetmgmt_driver_attr", + "fields": { + "fleetmgmt_driver_attr_id": { + "name": "fleetmgmt_driver_attr_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_attr_driver": { + "name": "fleetmgmt_driver_attr_driver", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + }, + "fleetmgmt_driver_attr_type": { + "name": "fleetmgmt_driver_attr_type", + "type": "INT(11)", + "null": false, + "foreignTable": "fleetmgmt_attr_type", + "foreignKey": "fleetmgmt_attr_type_id" + }, + "fleetmgmt_driver_attr_value": { + "name": "fleetmgmt_driver_attr_value", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_attr_value", + "foreignKey": "fleetmgmt_attr_value_id" + } + } + }, + "fleetmgmt_driver_media": { + "name": "fleetmgmt_driver_media", + "fields": { + "fleetmgmt_driver_media_id": { + "name": "fleetmgmt_driver_media_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_media_vehicle": { + "name": "fleetmgmt_driver_media_vehicle", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + }, + "fleetmgmt_driver_media_media": { + "name": "fleetmgmt_driver_media_media", + "type": "INT", + "null": false, + "foreignTable": "media", + "foreignKey": "media_id" + } + } + }, + "fleetmgmt_driver_note": { + "name": "fleetmgmt_driver_note", + "fields": { + "fleetmgmt_driver_note_id": { + "name": "fleetmgmt_driver_note_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_driver_note_driver": { + "name": "fleetmgmt_driver_note_driver", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + }, + "fleetmgmt_driver_note_doc": { + "name": "fleetmgmt_driver_note_doc", + "type": "INT", + "null": false, + "foreignTable": "editor_doc", + "foreignKey": "editor_doc_id" + } + } + }, + "fleetmgmt_milage": { + "name": "fleetmgmt_milage", + "fields": { + "fleetmgmt_milage_id": { + "name": "fleetmgmt_milage_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "fleetmgmt_milage_status": { + "name": "fleetmgmt_milage_status", + "type": "TINYINT(1)", + "null": false + }, + "fleetmgmt_milage_description": { + "name": "fleetmgmt_milage_description", + "type": "TEXT", + "null": false + }, + "fleetmgmt_milage_start": { + "name": "fleetmgmt_milage_start", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_milage_end": { + "name": "fleetmgmt_milage_end", + "type": "DATETIME", + "null": true, + "default": null + }, + "fleetmgmt_milage_milage": { + "name": "fleetmgmt_milage_milage", + "type": "INT", + "null": false + }, + "fleetmgmt_milage_fuel": { + "name": "fleetmgmt_milage_fuel", + "type": "INT", + "null": false + }, + "fleetmgmt_milage_driver": { + "name": "fleetmgmt_milage_driver", + "type": "INT", + "null": true, + "default": null, + "foreignTable": "fleetmgmt_driver", + "foreignKey": "fleetmgmt_driver_id" + }, + "fleetmgmt_milage_vehicle": { + "name": "fleetmgmt_milage_vehicle", + "type": "INT", + "null": false, + "foreignTable": "fleetmgmt_vehicle", + "foreignKey": "fleetmgmt_vehicle_id" + } + } + } +} \ No newline at end of file diff --git a/Admin/Install/driverinspectiontype.json b/Admin/Install/driverinspectiontype.json new file mode 100644 index 0000000..a9a1672 --- /dev/null +++ b/Admin/Install/driverinspectiontype.json @@ -0,0 +1,9 @@ +[ + { + "name": "license", + "l11n": { + "en": "License", + "de": "Führerschein" + } + } +] \ No newline at end of file diff --git a/Admin/Install/fueltype.json b/Admin/Install/fueltype.json new file mode 100644 index 0000000..76747be --- /dev/null +++ b/Admin/Install/fueltype.json @@ -0,0 +1,135 @@ +[ + { + "name": "gasoline", + "l11n": { + "en": "Gasoline", + "de": "Benzin" + } + }, + { + "name": "diesel", + "l11n": { + "en": "Diesel", + "de": "Diesel" + } + }, + { + "name": "electirc", + "l11n": { + "en": "Electric", + "de": "Elektrisch" + } + }, + { + "name": "hydrogen", + "l11n": { + "en": "Hydrogen", + "de": "Wasserstoff" + } + }, + { + "name": "ethanol", + "l11n": { + "en": "Ethanol", + "de": "Ethanol" + } + }, + { + "name": "kerosene", + "l11n": { + "en": "Kerosene", + "de": "Kerosin" + } + }, + { + "name": "lpg", + "l11n": { + "en": "LPG", + "de": "Autogas" + } + }, + { + "name": "methanol", + "l11n": { + "en": "Methanol", + "de": "Methanol" + } + }, + { + "name": "methane", + "l11n": { + "en": "Methane", + "de": "Methan" + } + }, + { + "name": "nitromethane", + "l11n": { + "en": "Nitromethane", + "de": "Nitromethan" + } + }, + { + "name": "coal", + "l11n": { + "en": "Coal", + "de": "Kohle" + } + }, + { + "name": "wood", + "l11n": { + "en": "Wood", + "de": "Holz" + } + }, + { + "name": "petroleum", + "l11n": { + "en": "Petroleum", + "de": "Petroleum" + } + }, + { + "name": "coaltar", + "l11n": { + "en": "Coaltar", + "de": "Steinkohlenteer" + } + }, + { + "name": "coke", + "l11n": { + "en": "Coke", + "de": "Koks" + } + }, + { + "name": "charcoale", + "l11n": { + "en": "Charcoale", + "de": "Holzkohle" + } + }, + { + "name": "naturalgas", + "l11n": { + "en": "Naturalgas", + "de": "Erdgas" + } + }, + { + "name": "biogas", + "l11n": { + "en": "Biogas", + "de": "Biogas" + } + }, + { + "name": "biodiesel", + "l11n": { + "en": "Biodiesel", + "de": "Biodiesel" + } + } +] \ No newline at end of file diff --git a/Admin/Install/inspectiontype.json b/Admin/Install/inspectiontype.json new file mode 100644 index 0000000..033e032 --- /dev/null +++ b/Admin/Install/inspectiontype.json @@ -0,0 +1,37 @@ +[ + { + "name": "tire_change", + "l11n": { + "en": "Tire change", + "de": "Reifenwechsel" + } + }, + { + "name": "oil_change", + "l11n": { + "en": "Oil change", + "de": "Ölwechsel" + } + }, + { + "name": "mot", + "l11n": { + "en": "MOT test", + "de": "TÜV" + } + }, + { + "name": "emissions_test", + "l11n": { + "en": "Emissions test", + "de": "Abgasuntersuchung" + } + }, + { + "name": "general", + "l11n": { + "en": "General", + "de": "Allgemein" + } + } +] \ No newline at end of file diff --git a/Admin/Install/vehicletype.json b/Admin/Install/vehicletype.json new file mode 100644 index 0000000..e68fed8 --- /dev/null +++ b/Admin/Install/vehicletype.json @@ -0,0 +1,93 @@ +[ + { + "name": "car", + "l11n": { + "en": "Car", + "de": "Auto" + } + }, + { + "name": "truck", + "l11n": { + "en": "Truck", + "de": "LKW" + } + }, + { + "name": "motorcycle", + "l11n": { + "en": "Motorcycle", + "de": "Motorrad" + } + }, + { + "name": "bicycle", + "l11n": { + "en": "Bicycle", + "de": "Fahrrad" + } + }, + { + "name": "bus", + "l11n": { + "en": "Bus", + "de": "Bus" + } + }, + { + "name": "boat", + "l11n": { + "en": "Boat", + "de": "Boot" + } + }, + { + "name": "airplane", + "l11n": { + "en": "Airplane", + "de": "Flugzeug" + } + }, + { + "name": "helicopter", + "l11n": { + "en": "Helicopter", + "de": "Hubschrauber" + } + }, + { + "name": "train", + "l11n": { + "en": "Train", + "de": "Zug" + } + }, + { + "name": "scooter", + "l11n": { + "en": "Scooter", + "de": "Roller" + } + }, + { + "name": "moped", + "l11n": { + "en": "Moped", + "de": "Moped" + } + }, + { + "name": "tractor", + "l11n": { + "en": "Tractor", + "de": "Traktor" + } + }, + { + "name": "forklift", + "l11n": { + "en": "Forklift", + "de": "Gabelstapler" + } + } +] diff --git a/Admin/Installer.php b/Admin/Installer.php new file mode 100755 index 0000000..b329158 --- /dev/null +++ b/Admin/Installer.php @@ -0,0 +1,484 @@ + $fuelTypes */ + $fuelTypes = []; + + /** @var \Modules\FleetManagement\Controller\ApiVehicleController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicle'); + + /** @var array $type */ + foreach ($types as $type) { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('name', $type['name'] ?? ''); + $request->setData('title', \reset($type['l11n'])); + $request->setData('language', \array_keys($type['l11n'])[0] ?? 'en'); + + $module->apiFuelTypeCreate($request, $response); + + $responseData = $response->get(''); + if (!\is_array($responseData)) { + continue; + } + + $fuelTypes[$type['name']] = \is_array($responseData['response']) + ? $responseData['response'] + : $responseData['response']->toArray(); + + $isFirst = true; + foreach ($type['l11n'] as $language => $l11n) { + if ($isFirst) { + $isFirst = false; + continue; + } + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', $l11n); + $request->setData('language', $language); + $request->setData('type', $fuelTypes[$type['name']]['id']); + + $module->apiFuelTypeL11nCreate($request, $response); + } + } + + return $fuelTypes; + } + + /** + * Install vehicle type + * + * @param ApplicationAbstract $app Application + * @param array $types Attribute definition + * + * @return array + * + * @since 1.0.0 + */ + private static function createVehicleTypes(ApplicationAbstract $app, array $types) : array + { + /** @var array $vehicleTypes */ + $vehicleTypes = []; + + /** @var \Modules\FleetManagement\Controller\ApiVehicleController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicle'); + + /** @var array $type */ + foreach ($types as $type) { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('name', $type['name'] ?? ''); + $request->setData('title', \reset($type['l11n'])); + $request->setData('language', \array_keys($type['l11n'])[0] ?? 'en'); + + $module->apiVehicleTypeCreate($request, $response); + + $responseData = $response->get(''); + if (!\is_array($responseData)) { + continue; + } + + $vehicleTypes[$type['name']] = \is_array($responseData['response']) + ? $responseData['response'] + : $responseData['response']->toArray(); + + $isFirst = true; + foreach ($type['l11n'] as $language => $l11n) { + if ($isFirst) { + $isFirst = false; + continue; + } + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', $l11n); + $request->setData('language', $language); + $request->setData('type', $vehicleTypes[$type['name']]['id']); + + $module->apiVehicleTypeL11nCreate($request, $response); + } + } + + return $vehicleTypes; + } + + /** + * Install inspection type + * + * @param ApplicationAbstract $app Application + * @param array $types Attribute definition + * + * @return array + * + * @since 1.0.0 + */ + private static function createInspectionTypes(ApplicationAbstract $app, array $types) : array + { + /** @var array $inspectionTypes */ + $inspectionTypes = []; + + /** @var \Modules\FleetManagement\Controller\ApiVehicleController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicle'); + + /** @var array $type */ + foreach ($types as $type) { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('name', $type['name'] ?? ''); + $request->setData('title', \reset($type['l11n'])); + $request->setData('language', \array_keys($type['l11n'])[0] ?? 'en'); + + $module->apiInspectionTypeCreate($request, $response); + + $responseData = $response->get(''); + if (!\is_array($responseData)) { + continue; + } + + $inspectionTypes[$type['name']] = \is_array($responseData['response']) + ? $responseData['response'] + : $responseData['response']->toArray(); + + $isFirst = true; + foreach ($type['l11n'] as $language => $l11n) { + if ($isFirst) { + $isFirst = false; + continue; + } + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', $l11n); + $request->setData('language', $language); + $request->setData('type', $inspectionTypes[$type['name']]['id']); + + $module->apiInspectionTypeL11nCreate($request, $response); + } + } + + return $inspectionTypes; + } + + /** + * Install inspection type + * + * @param ApplicationAbstract $app Application + * @param array $types Attribute definition + * + * @return array + * + * @since 1.0.0 + */ + private static function createDriverInspectionTypes(ApplicationAbstract $app, array $types) : array + { + /** @var array $inspectionTypes */ + $inspectionTypes = []; + + /** @var \Modules\FleetManagement\Controller\ApiDriverController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiDriver'); + + /** @var array $type */ + foreach ($types as $type) { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('name', $type['name'] ?? ''); + $request->setData('title', \reset($type['l11n'])); + $request->setData('language', \array_keys($type['l11n'])[0] ?? 'en'); + + $module->apiDriverInspectionTypeCreate($request, $response); + + $responseData = $response->get(''); + if (!\is_array($responseData)) { + continue; + } + + $inspectionTypes[$type['name']] = \is_array($responseData['response']) + ? $responseData['response'] + : $responseData['response']->toArray(); + + $isFirst = true; + foreach ($type['l11n'] as $language => $l11n) { + if ($isFirst) { + $isFirst = false; + continue; + } + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', $l11n); + $request->setData('language', $language); + $request->setData('type', $inspectionTypes[$type['name']]['id']); + + $module->apiDriverInspectionTypeL11nCreate($request, $response); + } + } + + return $inspectionTypes; + } + + /** + * Install default attribute types + * + * @param ApplicationAbstract $app Application + * @param array $attributes Attribute definition + * + * @return array + * + * @since 1.0.0 + */ + private static function createAttributeTypes(ApplicationAbstract $app, array $attributes) : array + { + /** @var array $itemAttrType */ + $itemAttrType = []; + + /** @var \Modules\FleetManagement\Controller\ApiVehicleAttributeController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicleAttribute'); + + /** @var array $attribute */ + foreach ($attributes as $attribute) { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('name', $attribute['name'] ?? ''); + $request->setData('title', \reset($attribute['l11n'])); + $request->setData('language', \array_keys($attribute['l11n'])[0] ?? 'en'); + $request->setData('is_required', $attribute['is_required'] ?? false); + $request->setData('custom', $attribute['is_custom_allowed'] ?? false); + $request->setData('validation_pattern', $attribute['validation_pattern'] ?? ''); + $request->setData('datatype', (int) $attribute['value_type']); + + $module->apiVehicleAttributeTypeCreate($request, $response); + + $responseData = $response->get(''); + if (!\is_array($responseData)) { + continue; + } + + $itemAttrType[$attribute['name']] = \is_array($responseData['response']) + ? $responseData['response'] + : $responseData['response']->toArray(); + + $isFirst = true; + foreach ($attribute['l11n'] as $language => $l11n) { + if ($isFirst) { + $isFirst = false; + continue; + } + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', $l11n); + $request->setData('language', $language); + $request->setData('type', $itemAttrType[$attribute['name']]['id']); + + $module->apiVehicleAttributeTypeL11nCreate($request, $response); + } + } + + return $itemAttrType; + } + + /** + * Create default attribute values for types + * + * @param ApplicationAbstract $app Application + * @param array $itemAttrType Attribute types + * @param array, is_required?:bool, is_custom_allowed?:bool, validation_pattern?:string, value_type?:string, values?:array}> $attributes Attribute definition + * + * @return array + * + * @since 1.0.0 + */ + private static function createAttributeValues(ApplicationAbstract $app, array $itemAttrType, array $attributes) : array + { + /** @var array $itemAttrValue */ + $itemAttrValue = []; + + /** @var \Modules\FleetManagement\Controller\ApiVehicleAttributeController $module */ + $module = $app->moduleManager->getModuleInstance('FleetManagement', 'ApiVehicleAttribute'); + + foreach ($attributes as $attribute) { + $itemAttrValue[$attribute['name']] = []; + + /** @var array $value */ + foreach ($attribute['values'] as $value) { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('value', $value['value'] ?? ''); + $request->setData('unit', $value['unit'] ?? ''); + $request->setData('default', true); // always true since all defined values are possible default values + $request->setData('type', $itemAttrType[$attribute['name']]['id']); + + if (isset($value['l11n']) && !empty($value['l11n'])) { + $request->setData('title', \reset($value['l11n'])); + $request->setData('language', \array_keys($value['l11n'])[0] ?? 'en'); + } + + $module->apiVehicleAttributeValueCreate($request, $response); + + $responseData = $response->get(''); + if (!\is_array($responseData)) { + continue; + } + + $attrValue = \is_array($responseData['response']) + ? $responseData['response'] + : $responseData['response']->toArray(); + + $itemAttrValue[$attribute['name']][] = $attrValue; + + $isFirst = true; + foreach (($value['l11n'] ?? []) as $language => $l11n) { + if ($isFirst) { + $isFirst = false; + continue; + } + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', $l11n); + $request->setData('language', $language); + $request->setData('value', $attrValue['id']); + + $module->apiVehicleAttributeValueL11nCreate($request, $response); + } + } + } + + return $itemAttrValue; + } +} diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php new file mode 100644 index 0000000..f01c3b2 --- /dev/null +++ b/Admin/Routes/Web/Api.php @@ -0,0 +1,116 @@ + [ + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleController:apiVehicleFind', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + + '^.*/fleet/vehicle/attribute.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleAttributeController:apiVehicleAttributeCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleAttributeController:apiVehicleAttributeUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + + '^.*/fleet/driver/attribute.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiDriverAttributeController:apiDriverAttributeCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::DRIVER, + ], + ], + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiDriverAttributeController:apiDriverAttributeUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::DRIVER, + ], + ], + ], + + '^.*/fleet/vehicle/note.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleController:apiNoteCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiVehicleController:apiNoteUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + + '^.*/fleet/driver/note.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiDriverController:apiNoteCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::DRIVER, + ], + ], + [ + 'dest' => '\Modules\FleetManagement\Controller\ApiDriverController:apiNoteUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => Controller::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::DRIVER, + ], + ], + ], +]; diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php new file mode 100755 index 0000000..08bf0dc --- /dev/null +++ b/Admin/Routes/Web/Backend.php @@ -0,0 +1,179 @@ + [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementAttributeTypeList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/vehicle/attribute/type\?.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementAttributeType', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + + '^.*/fleet/vehicle/list.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementVehicleList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/vehicle/create.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementVehicleCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/vehicle/profile.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementVehicleProfile', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + + '^.*/fleet/driver/attribute/type/list.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementDriverAttributeTypeList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/driver/attribute/type\?.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementDriverAttributeType', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + + '^.*/fleet/driver/list.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementDriverList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/driver/create.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementDriverCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/driver/profile.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementDriverProfile', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + + '^.*/fleet/inspection/list.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementInspectionList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/inspection/type/list.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementInspectionTypeList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/inspection/create.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementInspectionCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], + '^.*/fleet/inspection/profile.*$' => [ + [ + 'dest' => '\Modules\FleetManagement\Controller\BackendController:viewFleetManagementInspectionProfile', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::VEHICLE, + ], + ], + ], +]; diff --git a/Admin/Status.php b/Admin/Status.php new file mode 100755 index 0000000..a059599 --- /dev/null +++ b/Admin/Status.php @@ -0,0 +1,36 @@ +validateAttributeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attribute = $this->createAttributeFromRequest($request); + $this->createModel($request->header->account, $attribute, DriverAttributeMapper::class, 'attribute', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attribute); + } + + /** + * Api method to create driver attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrL11n = $this->createAttributeTypeL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, DriverAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrL11n); + } + + /** + * Api method to create driver attribute type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrType = $this->createAttributeTypeFromRequest($request); + $this->createModel($request->header->account, $attrType, DriverAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrType); + } + + /** + * Api method to create driver attribute value + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\Attribute\Models\AttributeType $type */ + $type = DriverAttributeTypeMapper::get() + ->where('id', $request->getDataInt('type') ?? 0) + ->execute(); + + $attrValue = $this->createAttributeValueFromRequest($request, $type); + $this->createModel($request->header->account, $attrValue, DriverAttributeValueMapper::class, 'attr_value', $request->getOrigin()); + + if ($attrValue->isDefault) { + $this->createModelRelation( + $request->header->account, + (int) $request->getData('type'), + $attrValue->id, + DriverAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() + ); + } + + $this->createStandardCreateResponse($request, $response, $attrValue); + } + + /** + * Api method to create driver attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, DriverAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrL11n); + } + + /** + * Api method to update DriverAttribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var Attribute $old */ + $old = DriverAttributeMapper::get() + ->with('type') + ->with('type/defaults') + ->with('value') + ->where('id', (int) $request->getData('id')) + ->execute(); + + $new = $this->updateAttributeFromRequest($request, clone $old); + + if ($new->id === 0) { + // Set response header to invalid request because of invalid data + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $new); + + return; + } + + $this->updateModel($request->header->account, $old, $new, DriverAttributeMapper::class, 'driver_attribute', $request->getOrigin()); + + if ($new->value->getValue() !== $old->value->getValue() + && $new->type->custom + ) { + $this->updateModel($request->header->account, $old->value, $new->value, DriverAttributeValueMapper::class, 'attribute_value', $request->getOrigin()); + } + + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete DriverAttribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + $driverAttribute = DriverAttributeMapper::get() + ->with('type') + ->where('id', (int) $request->getData('id')) + ->execute(); + + if ($driverAttribute->type->isRequired) { + $this->createInvalidDeleteResponse($request, $response, []); + + return; + } + + $this->deleteModel($request->header->account, $driverAttribute, DriverAttributeMapper::class, 'driver_attribute', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $driverAttribute); + } + + /** + * Api method to update DriverAttributeTypeL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeTypeL11nUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $old */ + $old = DriverAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateAttributeTypeL11nFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, DriverAttributeTypeL11nMapper::class, 'driver_attribute_type_l11n', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete DriverAttributeTypeL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeTypeL11nDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $driverAttributeTypeL11n */ + $driverAttributeTypeL11n = DriverAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $driverAttributeTypeL11n, DriverAttributeTypeL11nMapper::class, 'driver_attribute_type_l11n', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $driverAttributeTypeL11n); + } + + /** + * Api method to update DriverAttributeType + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeTypeUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var AttributeType $old */ + $old = DriverAttributeTypeMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateAttributeTypeFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, DriverAttributeTypeMapper::class, 'driver_attribute_type', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete DriverAttributeType + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @todo: implement + * + * @since 1.0.0 + */ + public function apiDriverAttributeTypeDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var AttributeType $driverAttributeType */ + $driverAttributeType = DriverAttributeTypeMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $driverAttributeType, DriverAttributeTypeMapper::class, 'driver_attribute_type', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $driverAttributeType); + } + + /** + * Api method to update DriverAttributeValue + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeValueUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var AttributeValue $old */ + $old = DriverAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute(); + + /** @var \Modules\Attribute\Models\Attribute $attr */ + $attr = DriverAttributeMapper::get() + ->with('type') + ->where('id', $request->getDataInt('attribute') ?? 0) + ->execute(); + + $new = $this->updateAttributeValueFromRequest($request, clone $old, $attr); + + $this->updateModel($request->header->account, $old, $new, DriverAttributeValueMapper::class, 'driver_attribute_value', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete DriverAttributeValue + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeValueDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + // @todo: I don't think values can be deleted? Only Attributes + // However, It should be possible to remove UNUSED default values + // either here or other function? + // if (!empty($val = $this->validateAttributeValueDelete($request))) { + // $response->header->status = RequestStatusCode::R_400; + // $this->createInvalidDeleteResponse($request, $response, $val); + + // return; + // } + + // /** @var \Modules\FleetManagement\Models\DriverAttributeValue $driverAttributeValue */ + // $driverAttributeValue = DriverAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute(); + // $this->deleteModel($request->header->account, $driverAttributeValue, DriverAttributeValueMapper::class, 'driver_attribute_value', $request->getOrigin()); + // $this->createStandardDeleteResponse($request, $response, $driverAttributeValue); + } + + /** + * Api method to update DriverAttributeValueL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeValueL11nUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $old */ + $old = DriverAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id')); + $new = $this->updateAttributeValueL11nFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, DriverAttributeValueL11nMapper::class, 'driver_attribute_value_l11n', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete DriverAttributeValueL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverAttributeValueL11nDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $driverAttributeValueL11n */ + $driverAttributeValueL11n = DriverAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $driverAttributeValueL11n, DriverAttributeValueL11nMapper::class, 'driver_attribute_value_l11n', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $driverAttributeValueL11n); + } +} diff --git a/Controller/ApiDriverController.php b/Controller/ApiDriverController.php new file mode 100644 index 0000000..a02bc67 --- /dev/null +++ b/Controller/ApiDriverController.php @@ -0,0 +1,673 @@ +validateInspectionCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var Inspection $inspection */ + $inspection = $this->createInspectionFromRequest($request); + $this->createModel($request->header->account, $inspection, DriverInspectionMapper::class, 'inspection', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $inspection); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return Inspection Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createInspectionFromRequest(RequestAbstract $request) : Inspection + { + $inspection = new Inspection(); + $inspection->reference = (int) $request->getData('ref'); + $inspection->description = $request->getDataString('description') ?? ''; + $inspection->status = $request->getDataInt('status') ?? InspectionStatus::TODO; + $inspection->next = $request->getDataDateTime('next') ?? null; + $inspection->date = $request->getDataDateTime('date') ?? null; + $inspection->interval = $request->getDataInt('interval') ?? 0; + $inspection->type = new NullBaseStringL11nType((int) $request->getData('type')); + + return $inspection; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateInspectionCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['ref'] = !$request->hasData('ref'))) { + return $val; + } + + return []; + } + + /** + * Api method to create a driver + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateDriverCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var Driver $driver */ + $driver = $this->createDriverFromRequest($request); + $this->createModel($request->header->account, $driver, DriverMapper::class, 'driver', $request->getOrigin()); + + if (!empty($request->files) + || !empty($request->getDataJson('media')) + ) { + $this->createDriverMedia($driver, $request); + } + + $this->createStandardCreateResponse($request, $response, $driver); + } + + /** + * Method to create driver from request. + * + * @param RequestAbstract $request Request + * + * @return Driver Returns the created driver from the request + * + * @since 1.0.0 + */ + public function createDriverFromRequest(RequestAbstract $request) : Driver + { + $driver = new Driver(); + $driver->account = new NullAccount($request->getDataInt('account') ?? 1); + $driver->status = $request->getDataInt('status') ?? DriverStatus::INACTIVE; + + return $driver; + } + + /** + * Create media files for driver + * + * @param Driver $driver Driver + * @param RequestAbstract $request Request incl. media do upload + * + * @return void + * + * @since 1.0.0 + */ + private function createDriverMedia(Driver $driver, RequestAbstract $request) : void + { + $path = $this->createDriverDir($driver); + + if (!empty($uploadedFiles = $request->files)) { + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + names: [], + fileNames: [], + files: $uploadedFiles, + account: $request->header->account, + basePath: __DIR__ . '/../../../Modules/Media/Files' . $path, + virtualPath: $path, + pathSettings: PathSettings::FILE_PATH + ); + + $collection = null; + foreach ($uploaded as $media) { + $this->createModelRelation( + $request->header->account, + $driver->id, + $media->id, + DriverMapper::class, + 'files', + '', + $request->getOrigin() + ); + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $media->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + + if (!empty($mediaFiles = $request->getDataJson('media'))) { + $collection = null; + + foreach ($mediaFiles as $file) { + /** @var \Modules\Media\Models\Media $media */ + $media = MediaMapper::get()->where('id', (int) $file)->limit(1)->execute(); + + $this->createModelRelation( + $request->header->account, + $driver->id, + $media->id, + DriverMapper::class, + 'files', + '', + $request->getOrigin() + ); + + $ref = new Reference(); + $ref->name = $media->name; + $ref->source = new NullMedia($media->id); + $ref->createdBy = new NullAccount($request->header->account); + $ref->setVirtualPath($path); + + $this->createModel($request->header->account, $ref, ReferenceMapper::class, 'media_reference', $request->getOrigin()); + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $ref->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + } + + /** + * Validate driver create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateDriverCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['account'] = !$request->hasData('account')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create a bill + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiMediaAddToDriver(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateMediaAddToDriver($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidAddResponse($request, $response, $val); + + return; + } + + /** @var \Modules\FleetManagement\Models\Driver\Driver $driver */ + $driver = DriverMapper::get()->where('id', (int) $request->getData('driver'))->execute(); + $path = $this->createDriverDir($driver); + + $uploaded = []; + if (!empty($uploadedFiles = $request->files)) { + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + names: [], + fileNames: [], + files: $uploadedFiles, + account: $request->header->account, + basePath: __DIR__ . '/../../../Modules/Media/Files' . $path, + virtualPath: $path, + pathSettings: PathSettings::FILE_PATH, + hasAccountRelation: false, + readContent: $request->getDataBool('parse_content') ?? false + ); + + $collection = null; + foreach ($uploaded as $media) { + $this->createModelRelation( + $request->header->account, + $driver->id, + $media->id, + DriverMapper::class, + 'files', + '', + $request->getOrigin() + ); + + if ($request->hasData('type')) { + $this->createModelRelation( + $request->header->account, + $media->id, + $request->getDataInt('type'), + MediaMapper::class, + 'types', + '', + $request->getOrigin() + ); + } + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path, + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $media->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + + if (!empty($mediaFiles = $request->getDataJson('media'))) { + foreach ($mediaFiles as $media) { + $this->createModelRelation( + $request->header->account, + $driver->id, + (int) $media, + DriverMapper::class, + 'files', + '', + $request->getOrigin() + ); + } + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Media', 'Media added to driver.', [ + 'upload' => $uploaded, + 'media' => $mediaFiles, + ]); + } + + /** + * Create media directory path + * + * @param Driver $driver Driver + * + * @return string + * + * @since 1.0.0 + */ + private function createDriverDir(Driver $driver) : string + { + return '/Modules/FleetManagement/Driver/' + . $this->app->unitId . '/' + . $driver->id; + } + + /** + * Method to validate bill creation from request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateMediaAddToDriver(RequestAbstract $request) : array + { + $val = []; + if (($val['media'] = (!$request->hasData('media') && empty($request->files))) + || ($val['driver'] = !$request->hasData('driver')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create a driver + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverInspectionTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateDriverInspectionTypeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11nType $inspection */ + $inspection = $this->createDriverInspectionTypeFromRequest($request); + $this->createModel($request->header->account, $inspection, DriverInspectionTypeMapper::class, 'driver_inspection_type', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $inspection); + } + + /** + * Method to create driver from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11nType Returns the created driver from the request + * + * @since 1.0.0 + */ + public function createDriverInspectionTypeFromRequest(RequestAbstract $request) : BaseStringL11nType + { + $type = new BaseStringL11nType(); + $type->title = $request->getDataString('name') ?? ''; + $type->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + + return $type; + } + + /** + * Validate driver create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateDriverInspectionTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = !$request->hasData('name')) + || ($val['title'] = !$request->hasData('title')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create driver attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiDriverInspectionTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateDriverInspectionTypeL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $typeL11n = $this->createDriverInspectionTypeL11nFromRequest($request); + $this->createModel($request->header->account, $typeL11n, DriverInspectionTypeL11nMapper::class, 'driver_inspection_type_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $typeL11n); + } + + /** + * Method to create driver attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createDriverInspectionTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $typeL11n = new BaseStringL11n(); + $typeL11n->ref = $request->getDataInt('type') ?? 0; + $typeL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $typeL11n->content = $request->getDataString('title') ?? ''; + + return $typeL11n; + } + + /** + * Validate driver attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateDriverInspectionTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['type'] = !$request->hasData('type')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create notes + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateNoteCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $request->setData('virtualpath', '/Modules/FleetManagement/Driver/' . $request->getData('id'), true); + $this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data); + + if ($response->header->status !== RequestStatusCode::R_200) { + return; + } + + $responseData = $response->get($request->uri->__toString()); + if (!\is_array($responseData)) { + return; + } + + $model = $responseData['response']; + $this->createModelRelation($request->header->account, (int) $request->getData('id'), $model->id, DriverMapper::class, 'notes', '', $request->getOrigin()); + } + + /** + * Validate item note create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateNoteCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['id'] = !$request->hasData('id')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to update note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + $this->app->moduleManager->get('Editor', 'Api')->apiEditorUpdate($request, $response, $data); + + if ($response->header->status !== RequestStatusCode::R_200) { + return; + } + + $responseData = $response->get($request->uri->__toString()); + if (!\is_array($responseData)) { + return; + } + } +} diff --git a/Controller/ApiVehicleAttributeController.php b/Controller/ApiVehicleAttributeController.php new file mode 100644 index 0000000..fb55865 --- /dev/null +++ b/Controller/ApiVehicleAttributeController.php @@ -0,0 +1,523 @@ +validateAttributeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attribute = $this->createAttributeFromRequest($request); + $this->createModel($request->header->account, $attribute, VehicleAttributeMapper::class, 'attribute', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attribute); + } + + /** + * Api method to create vehicle attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrL11n = $this->createAttributeTypeL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, VehicleAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrL11n); + } + + /** + * Api method to create vehicle attribute type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrType = $this->createAttributeTypeFromRequest($request); + $this->createModel($request->header->account, $attrType, VehicleAttributeTypeMapper::class, 'attr_type', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrType); + } + + /** + * Api method to create vehicle attribute value + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\Attribute\Models\AttributeType $type */ + $type = VehicleAttributeTypeMapper::get() + ->where('id', $request->getDataInt('type') ?? 0) + ->execute(); + + $attrValue = $this->createAttributeValueFromRequest($request, $type); + $this->createModel($request->header->account, $attrValue, VehicleAttributeValueMapper::class, 'attr_value', $request->getOrigin()); + + if ($attrValue->isDefault) { + $this->createModelRelation( + $request->header->account, + (int) $request->getData('type'), + $attrValue->id, + VehicleAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() + ); + } + + $this->createStandardCreateResponse($request, $response, $attrValue); + } + + /** + * Api method to create vehicle attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, VehicleAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $attrL11n); + } + + /** + * Api method to update VehicleAttribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var Attribute $old */ + $old = VehicleAttributeMapper::get() + ->with('type') + ->with('type/defaults') + ->with('value') + ->where('id', (int) $request->getData('id')) + ->execute(); + + $new = $this->updateAttributeFromRequest($request, clone $old); + + if ($new->id === 0) { + // Set response header to invalid request because of invalid data + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $new); + + return; + } + + $this->updateModel($request->header->account, $old, $new, VehicleAttributeMapper::class, 'vehicle_attribute', $request->getOrigin()); + + if ($new->value->getValue() !== $old->value->getValue() + && $new->type->custom + ) { + $this->updateModel($request->header->account, $old->value, $new->value, VehicleAttributeValueMapper::class, 'attribute_value', $request->getOrigin()); + } + + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete VehicleAttribute + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + $vehicleAttribute = VehicleAttributeMapper::get() + ->with('type') + ->where('id', (int) $request->getData('id')) + ->execute(); + + if ($vehicleAttribute->type->isRequired) { + $this->createInvalidDeleteResponse($request, $response, []); + + return; + } + + $this->deleteModel($request->header->account, $vehicleAttribute, VehicleAttributeMapper::class, 'vehicle_attribute', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $vehicleAttribute); + } + + /** + * Api method to update VehicleAttributeTypeL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeTypeL11nUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $old */ + $old = VehicleAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateAttributeTypeL11nFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, VehicleAttributeTypeL11nMapper::class, 'vehicle_attribute_type_l11n', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete VehicleAttributeTypeL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeTypeL11nDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeL11nDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $vehicleAttributeTypeL11n */ + $vehicleAttributeTypeL11n = VehicleAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $vehicleAttributeTypeL11n, VehicleAttributeTypeL11nMapper::class, 'vehicle_attribute_type_l11n', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $vehicleAttributeTypeL11n); + } + + /** + * Api method to update VehicleAttributeType + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeTypeUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var AttributeType $old */ + $old = VehicleAttributeTypeMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $new = $this->updateAttributeTypeFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, VehicleAttributeTypeMapper::class, 'vehicle_attribute_type', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete VehicleAttributeType + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @todo: implement + * + * @since 1.0.0 + */ + public function apiVehicleAttributeTypeDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeTypeDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var AttributeType $vehicleAttributeType */ + $vehicleAttributeType = VehicleAttributeTypeMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $vehicleAttributeType, VehicleAttributeTypeMapper::class, 'vehicle_attribute_type', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $vehicleAttributeType); + } + + /** + * Api method to update VehicleAttributeValue + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeValueUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var AttributeValue $old */ + $old = VehicleAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute(); + + /** @var \Modules\Attribute\Models\Attribute $attr */ + $attr = VehicleAttributeMapper::get() + ->with('type') + ->where('id', $request->getDataInt('attribute') ?? 0) + ->execute(); + + $new = $this->updateAttributeValueFromRequest($request, clone $old, $attr); + + $this->updateModel($request->header->account, $old, $new, VehicleAttributeValueMapper::class, 'vehicle_attribute_value', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete VehicleAttributeValue + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeValueDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + // @todo: I don't think values can be deleted? Only Attributes + // However, It should be possible to remove UNUSED default values + // either here or other function? + // if (!empty($val = $this->validateAttributeValueDelete($request))) { + // $response->header->status = RequestStatusCode::R_400; + // $this->createInvalidDeleteResponse($request, $response, $val); + + // return; + // } + + // /** @var \Modules\FleetManagement\Models\VehicleAttributeValue $vehicleAttributeValue */ + // $vehicleAttributeValue = VehicleAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute(); + // $this->deleteModel($request->header->account, $vehicleAttributeValue, VehicleAttributeValueMapper::class, 'vehicle_attribute_value', $request->getOrigin()); + // $this->createStandardDeleteResponse($request, $response, $vehicleAttributeValue); + } + + /** + * Api method to update VehicleAttributeValueL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeValueL11nUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nUpdate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidUpdateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $old */ + $old = VehicleAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id')); + $new = $this->updateAttributeValueL11nFromRequest($request, clone $old); + + $this->updateModel($request->header->account, $old, $new, VehicleAttributeValueL11nMapper::class, 'vehicle_attribute_value_l11n', $request->getOrigin()); + $this->createStandardUpdateResponse($request, $response, $new); + } + + /** + * Api method to delete VehicleAttributeValueL11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleAttributeValueL11nDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateAttributeValueL11nDelete($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidDeleteResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11n $vehicleAttributeValueL11n */ + $vehicleAttributeValueL11n = VehicleAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id'))->execute(); + $this->deleteModel($request->header->account, $vehicleAttributeValueL11n, VehicleAttributeValueL11nMapper::class, 'vehicle_attribute_value_l11n', $request->getOrigin()); + $this->createStandardDeleteResponse($request, $response, $vehicleAttributeValueL11n); + } +} diff --git a/Controller/ApiVehicleController.php b/Controller/ApiVehicleController.php new file mode 100755 index 0000000..ade5276 --- /dev/null +++ b/Controller/ApiVehicleController.php @@ -0,0 +1,1058 @@ +validateMilageCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\FleetManagement\Models\Milage $milage */ + $milage = $this->createMilageFromRequest($request); + $this->createModel($request->header->account, $milage, MilageMapper::class, 'milage', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $milage); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return Milage Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createMilageFromRequest(RequestAbstract $request) : Milage + { + $milage = new Milage(); + $milage->vehicle = (int) $request->getData('vehicle'); + $milage->driver = $request->hasData('driver') ? new NullDriver((int) $request->getData('driver')) : null; + $milage->milage = $request->getDataInt('milage') ?? 0; + $milage->status = $request->getDataInt('status') ?? 0; + $milage->fuelUsage = $request->getDataInt('fuel') ?? 0; + $milage->description = $request->getDataString('description') ?? ''; + $milage->from = $request->getDataString('from') ?? ''; + $milage->to = $request->getDataString('to') ?? ''; + $milage->start = $request->getDataDateTime('start'); + $milage->end = $request->getDataDateTime('end'); + + return $milage; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateMilageCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['vehicle'] = !$request->hasData('vehicle'))) { + return $val; + } + + return []; + } + + /** + * Api method to create a vehicle + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiInspectionCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateInspectionCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var \Modules\FleetManagement\Models\Inspection $inspection */ + $inspection = $this->createInspectionFromRequest($request); + $this->createModel($request->header->account, $inspection, InspectionMapper::class, 'inspection', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $inspection); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return Inspection Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createInspectionFromRequest(RequestAbstract $request) : Inspection + { + $inspection = new Inspection(); + $inspection->reference = (int) $request->getData('ref'); + $inspection->description = $request->getDataString('description') ?? ''; + $inspection->status = $request->getDataInt('status') ?? InspectionStatus::TODO; + $inspection->next = $request->getDataDateTime('next') ?? null; + $inspection->date = $request->getDataDateTime('date') ?? null; + $inspection->interval = $request->getDataInt('interval') ?? 0; + $inspection->type = new NullBaseStringL11nType((int) $request->getData('type')); + + return $inspection; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateInspectionCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['ref'] = !$request->hasData('ref'))) { + return $val; + } + + return []; + } + + /** + * Api method to create a vehicle + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateVehicleTypeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11nType $vehicle */ + $vehicle = $this->createVehicleTypeFromRequest($request); + $this->createModel($request->header->account, $vehicle, VehicleTypeMapper::class, 'vehicle_type', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $vehicle); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11nType Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createVehicleTypeFromRequest(RequestAbstract $request) : BaseStringL11nType + { + $type = new BaseStringL11nType(); + $type->title = $request->getDataString('name') ?? ''; + $type->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + + return $type; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateVehicleTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = !$request->hasData('name')) + || ($val['title'] = !$request->hasData('title')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create vehicle attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateVehicleTypeL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $typeL11n = $this->createVehicleTypeL11nFromRequest($request); + $this->createModel($request->header->account, $typeL11n, VehicleTypeL11nMapper::class, 'vehicle_type_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $typeL11n); + } + + /** + * Method to create vehicle attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createVehicleTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $typeL11n = new BaseStringL11n(); + $typeL11n->ref = $request->getDataInt('type') ?? 0; + $typeL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $typeL11n->content = $request->getDataString('title') ?? ''; + + return $typeL11n; + } + + /** + * Validate vehicle attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateVehicleTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['type'] = !$request->hasData('type')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create a vehicle + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiFuelTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateFuelTypeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11nType $vehicle */ + $vehicle = $this->createFuelTypeFromRequest($request); + $this->createModel($request->header->account, $vehicle, FuelTypeMapper::class, 'fuel_type', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $vehicle); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11nType Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createFuelTypeFromRequest(RequestAbstract $request) : BaseStringL11nType + { + $type = new BaseStringL11nType(); + $type->title = $request->getDataString('name') ?? ''; + $type->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + + return $type; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateFuelTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = !$request->hasData('name')) + || ($val['title'] = !$request->hasData('title')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create vehicle attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiFuelTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateFuelTypeL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $typeL11n = $this->createFuelTypeL11nFromRequest($request); + $this->createModel($request->header->account, $typeL11n, FuelTypeL11nMapper::class, 'fuel_type_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $typeL11n); + } + + /** + * Method to create vehicle attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createFuelTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $typeL11n = new BaseStringL11n(); + $typeL11n->ref = $request->getDataInt('type') ?? 0; + $typeL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $typeL11n->content = $request->getDataString('title') ?? ''; + + return $typeL11n; + } + + /** + * Validate vehicle attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateFuelTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['type'] = !$request->hasData('type')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create a vehicle + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiVehicleCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateVehicleCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var Vehicle $vehicle */ + $vehicle = $this->createVehicleFromRequest($request); + $this->createModel($request->header->account, $vehicle, VehicleMapper::class, 'vehicle', $request->getOrigin()); + + if (!empty($request->files) + || !empty($request->getDataJson('media')) + ) { + $this->createVehicleMedia($vehicle, $request); + } + + $this->createStandardCreateResponse($request, $response, $vehicle); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return Vehicle Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createVehicleFromRequest(RequestAbstract $request) : Vehicle + { + $vehicle = new Vehicle(); + $vehicle->name = $request->getDataString('name') ?? ''; + $vehicle->info = $request->getDataString('info') ?? ''; + $vehicle->type = new NullBaseStringL11nType((int) ($request->getDataInt('type') ?? 0)); + $vehicle->fuelType = new NullBaseStringL11nType((int) ($request->getDataInt('fuel') ?? 0)); + $vehicle->status = $request->getDataInt('status') ?? VehicleStatus::INACTIVE; + $vehicle->unit = $request->getDataInt('unit') ?? $this->app->unitId; + + return $vehicle; + } + + /** + * Create media files for vehicle + * + * @param Vehicle $vehicle Vehicle + * @param RequestAbstract $request Request incl. media do upload + * + * @return void + * + * @since 1.0.0 + */ + private function createVehicleMedia(Vehicle $vehicle, RequestAbstract $request) : void + { + $path = $this->createVehicleDir($vehicle); + + if (!empty($uploadedFiles = $request->files)) { + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + names: [], + fileNames: [], + files: $uploadedFiles, + account: $request->header->account, + basePath: __DIR__ . '/../../../Modules/Media/Files' . $path, + virtualPath: $path, + pathSettings: PathSettings::FILE_PATH + ); + + $collection = null; + foreach ($uploaded as $media) { + $this->createModelRelation( + $request->header->account, + $vehicle->id, + $media->id, + VehicleMapper::class, + 'files', + '', + $request->getOrigin() + ); + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $media->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + + if (!empty($mediaFiles = $request->getDataJson('media'))) { + $collection = null; + + foreach ($mediaFiles as $file) { + /** @var \Modules\Media\Models\Media $media */ + $media = MediaMapper::get()->where('id', (int) $file)->limit(1)->execute(); + + $this->createModelRelation( + $request->header->account, + $vehicle->id, + $media->id, + VehicleMapper::class, + 'files', + '', + $request->getOrigin() + ); + + $ref = new Reference(); + $ref->name = $media->name; + $ref->source = new NullMedia($media->id); + $ref->createdBy = new NullAccount($request->header->account); + $ref->setVirtualPath($path); + + $this->createModel($request->header->account, $ref, ReferenceMapper::class, 'media_reference', $request->getOrigin()); + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $ref->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateVehicleCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = !$request->hasData('name')) + || ($val['type'] = !$request->hasData('type')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create a bill + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiMediaAddToVehicle(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateMediaAddToVehicle($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidAddResponse($request, $response, $val); + + return; + } + + /** @var \Modules\FleetManagement\Models\Vehicle $vehicle */ + $vehicle = VehicleMapper::get()->where('id', (int) $request->getData('vehicle'))->execute(); + $path = $this->createVehicleDir($vehicle); + + $uploaded = []; + if (!empty($uploadedFiles = $request->files)) { + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + names: [], + fileNames: [], + files: $uploadedFiles, + account: $request->header->account, + basePath: __DIR__ . '/../../../Modules/Media/Files' . $path, + virtualPath: $path, + pathSettings: PathSettings::FILE_PATH, + hasAccountRelation: false, + readContent: $request->getDataBool('parse_content') ?? false + ); + + $collection = null; + foreach ($uploaded as $media) { + $this->createModelRelation( + $request->header->account, + $vehicle->id, + $media->id, + VehicleMapper::class, + 'files', + '', + $request->getOrigin() + ); + + if ($request->hasData('type')) { + $this->createModelRelation( + $request->header->account, + $media->id, + $request->getDataInt('type'), + MediaMapper::class, + 'types', + '', + $request->getOrigin() + ); + } + + if ($collection === null) { + /** @var \Modules\Media\Models\Collection $collection */ + $collection = MediaMapper::getParentCollection($path)->limit(1)->execute(); + + if ($collection->id === 0) { + $collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection( + $path, + $request->header->account, + __DIR__ . '/../../../Modules/Media/Files' . $path, + ); + } + } + + $this->createModelRelation( + $request->header->account, + $collection->id, + $media->id, + CollectionMapper::class, + 'sources', + '', + $request->getOrigin() + ); + } + } + + if (!empty($mediaFiles = $request->getDataJson('media'))) { + foreach ($mediaFiles as $media) { + $this->createModelRelation( + $request->header->account, + $vehicle->id, + (int) $media, + VehicleMapper::class, + 'files', + '', + $request->getOrigin() + ); + } + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Media', 'Media added to vehicle.', [ + 'upload' => $uploaded, + 'media' => $mediaFiles, + ]); + } + + /** + * Create media directory path + * + * @param Vehicle $vehicle Vehicle + * + * @return string + * + * @since 1.0.0 + */ + private function createVehicleDir(Vehicle $vehicle) : string + { + return '/Modules/FleetManagement/Vehicle/' + . $this->app->unitId . '/' + . $vehicle->id; + } + + /** + * Method to validate bill creation from request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateMediaAddToVehicle(RequestAbstract $request) : array + { + $val = []; + if (($val['media'] = (!$request->hasData('media') && empty($request->files))) + || ($val['vehicle'] = !$request->hasData('vehicle')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create a vehicle + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiInspectionTypeCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateInspectionTypeCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + /** @var BaseStringL11nType $inspection */ + $inspection = $this->createInspectionTypeFromRequest($request); + $this->createModel($request->header->account, $inspection, InspectionTypeMapper::class, 'inspection_type', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $inspection); + } + + /** + * Method to create vehicle from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11nType Returns the created vehicle from the request + * + * @since 1.0.0 + */ + public function createInspectionTypeFromRequest(RequestAbstract $request) : BaseStringL11nType + { + $type = new BaseStringL11nType(); + $type->title = $request->getDataString('name') ?? ''; + $type->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + + return $type; + } + + /** + * Validate vehicle create request + * + * @param RequestAbstract $request Request + * + * @return array Returns the validation array of the request + * + * @since 1.0.0 + */ + private function validateInspectionTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['name'] = !$request->hasData('name')) + || ($val['title'] = !$request->hasData('title')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create vehicle attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiInspectionTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateInspectionTypeL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $typeL11n = $this->createInspectionTypeL11nFromRequest($request); + $this->createModel($request->header->account, $typeL11n, InspectionTypeL11nMapper::class, 'inspection_type_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $typeL11n); + } + + /** + * Method to create vehicle attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createInspectionTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $typeL11n = new BaseStringL11n(); + $typeL11n->ref = $request->getDataInt('type') ?? 0; + $typeL11n->setLanguage( + $request->getDataString('language') ?? $request->header->l11n->language + ); + $typeL11n->content = $request->getDataString('title') ?? ''; + + return $typeL11n; + } + + /** + * Validate vehicle attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateInspectionTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = !$request->hasData('title')) + || ($val['type'] = !$request->hasData('type')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create notes + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateNoteCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $request->setData('virtualpath', '/Modules/FleetManagement/Vehicle/' . $request->getData('id'), true); + $this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data); + + if ($response->header->status !== RequestStatusCode::R_200) { + return; + } + + $responseData = $response->get($request->uri->__toString()); + if (!\is_array($responseData)) { + return; + } + + $model = $responseData['response']; + $this->createModelRelation($request->header->account, (int) $request->getData('id'), $model->id, VehicleMapper::class, 'notes', '', $request->getOrigin()); + } + + /** + * Validate item note create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateNoteCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['id'] = !$request->hasData('id')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to update Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + // @todo: check permissions + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDocUpdate($request, $response, $data); + } + + /** + * Api method to delete Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + // @todo: check permissions + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDocDelete($request, $response, $data); + } +} diff --git a/Controller/BackendController.php b/Controller/BackendController.php new file mode 100755 index 0000000..79e03e2 --- /dev/null +++ b/Controller/BackendController.php @@ -0,0 +1,569 @@ +app->l11nManager, $request, $response); + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/attribute-type-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003503001, $request, $response); + + /** @var \Modules\Attribute\Models\AttributeType[] $attributes */ + $attributes = VehicleAttributeTypeMapper::getAll() + ->with('l11n') + ->where('l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['attributes'] = $attributes; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementDriverAttributeTypeList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/attribute-type-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003503001, $request, $response); + + /** @var \Modules\Attribute\Models\AttributeType[] $attributes */ + $attributes = VehicleAttributeTypeMapper::getAll() + ->with('l11n') + ->where('l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['attributes'] = $attributes; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementVehicleList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/vehicle-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + $list = VehicleMapper::getAll() + ->with('type') + ->with('type/l11n') + ->where('type/l11n/language', $response->header->l11n->language) + ->sort('id', 'DESC') + ->execute(); + + $view->data['vehicles'] = $list; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementDriverList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/driver-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + $list = DriverMapper::getAll() + ->with('account') + ->sort('id', 'DESC') + ->execute(); + + $view->data['drivers'] = $list; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementInspectionList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/inspection-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + $list = InspectionMapper::getAll() + ->sort('id', 'DESC') + ->execute(); + + $view->data['inspectionss'] = $list; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementInspectionTypeList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/inspection-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + $list = InspectionMapper::getAll() + ->sort('id', 'DESC') + ->execute(); + + $view->data['inspectionss'] = $list; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementInspectionCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/inspection-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + $list = InspectionMapper::getAll() + ->sort('id', 'DESC') + ->execute(); + + $view->data['inspectionss'] = $list; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementAttributeType(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/attribute-type'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004801001, $request, $response); + + /** @var \Modules\Attribute\Models\AttributeType $attribute */ + $attribute = VehicleAttributeTypeMapper::get() + ->with('l11n') + ->where('id', (int) $request->getData('id')) + ->where('l11n/language', $response->header->l11n->language) + ->execute(); + + $l11ns = VehicleAttributeTypeL11nMapper::getAll() + ->where('ref', $attribute->id) + ->execute(); + + $view->data['attribute'] = $attribute; + $view->data['l11ns'] = $l11ns; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementDriverAttributeType(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/attribute-type'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004801001, $request, $response); + + /** @var \Modules\Attribute\Models\AttributeType $attribute */ + $attribute = VehicleAttributeTypeMapper::get() + ->with('l11n') + ->where('id', (int) $request->getData('id')) + ->where('l11n/language', $response->header->l11n->language) + ->execute(); + + $l11ns = VehicleAttributeTypeL11nMapper::getAll() + ->where('ref', $attribute->id) + ->execute(); + + $view->data['attribute'] = $attribute; + $view->data['l11ns'] = $l11ns; + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementVehicleCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/vehicle-profile'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + /** @var \Model\Setting $settings */ + $settings = $this->app->appSettings->get(null, [ + SettingsEnum::DEFAULT_LOCALIZATION, + ]); + + $view->data['attributeView'] = new \Modules\Attribute\Theme\Backend\Components\AttributeView($this->app->l11nManager, $request, $response); + $view->data['attributeView']->data['defaultlocalization'] = LocalizationMapper::get()->where('id', (int) $settings->id)->execute(); + + $view->data['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); + $view->data['vehicle-notes'] = new \Modules\Editor\Theme\Backend\Components\Compound\BaseView($this->app->l11nManager, $request, $response); + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementDriverCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/vehicle-profile'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + /** @var \Model\Setting $settings */ + $settings = $this->app->appSettings->get(null, [ + SettingsEnum::DEFAULT_LOCALIZATION, + ]); + + $view->data['attributeView'] = new \Modules\Attribute\Theme\Backend\Components\AttributeView($this->app->l11nManager, $request, $response); + $view->data['attributeView']->data['defaultlocalization'] = LocalizationMapper::get()->where('id', (int) $settings->id)->execute(); + + $view->data['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); + $view->data['vehicle-notes'] = new \Modules\Editor\Theme\Backend\Components\Compound\BaseView($this->app->l11nManager, $request, $response); + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementInspectionProfile(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/inspection-profile'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementVehicleProfile(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/vehicle-profile'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + // @todo: This langauge filtering doesn't work. But it was working with the old mappers. Maybe there is a bug in the where() definition. Need to inspect the actual query. + $vehicle = VehicleMapper::get() + ->with('attributes') + ->with('attributes/type') + ->with('attributes/value') + ->with('attributes/type/l11n') + ->with('files') + ->with('files/types') + ->with('type') + ->with('type/l11n') + ->with('fuelType') + ->with('fuelType/l11n') + ->where('id', (int) $request->getData('id')) + ->where('type/l11n/language', $response->header->l11n->language) + ->where('fuelType/l11n/language', $response->header->l11n->language) + ->where('attributes/type/l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['vehicle'] = $vehicle; + + $inspections = InspectionMapper::getAll() + ->with('type') + ->with('type/l11n') + ->where('reference', $vehicle->id) + ->where('type/l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['inspections'] = $inspections; + + $query = new Builder($this->app->dbPool->get()); + $results = $query->selectAs(VehicleMapper::HAS_MANY['files']['external'], 'file') + ->from(VehicleMapper::TABLE) + ->leftJoin(VehicleMapper::HAS_MANY['files']['table']) + ->on(VehicleMapper::HAS_MANY['files']['table'] . '.' . VehicleMapper::HAS_MANY['files']['self'], '=', VehicleMapper::TABLE . '.' . VehicleMapper::PRIMARYFIELD) + ->leftJoin(MediaMapper::TABLE) + ->on(VehicleMapper::HAS_MANY['files']['table'] . '.' . VehicleMapper::HAS_MANY['files']['external'], '=', MediaMapper::TABLE . '.' . MediaMapper::PRIMARYFIELD) + ->leftJoin(MediaMapper::HAS_MANY['types']['table']) + ->on(MediaMapper::TABLE . '.' . MediaMapper::PRIMARYFIELD, '=', MediaMapper::HAS_MANY['types']['table'] . '.' . MediaMapper::HAS_MANY['types']['self']) + ->leftJoin(MediaTypeMapper::TABLE) + ->on(MediaMapper::HAS_MANY['types']['table'] . '.' . MediaMapper::HAS_MANY['types']['external'], '=', MediaTypeMapper::TABLE . '.' . MediaTypeMapper::PRIMARYFIELD) + ->where(VehicleMapper::HAS_MANY['files']['self'], '=', $vehicle->id) + ->where(MediaTypeMapper::TABLE . '.' . MediaTypeMapper::getColumnByMember('name'), '=', 'vehicle_profile_image'); + + $vehicleImage = MediaMapper::get() + ->with('types') + ->where('id', $results) + ->limit(1) + ->execute(); + + $view->data['vehicleImage'] = $vehicleImage; + + $vehicleTypes = VehicleTypeMapper::getAll() + ->with('l11n') + ->where('l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['types'] = $vehicleTypes; + + $units = UnitMapper::getAll() + ->execute(); + + $view->data['units'] = $units; + + /** @var \Model\Setting $settings */ + $settings = $this->app->appSettings->get(null, [ + SettingsEnum::DEFAULT_LOCALIZATION, + ]); + + $view->data['attributeView'] = new \Modules\Attribute\Theme\Backend\Components\AttributeView($this->app->l11nManager, $request, $response); + $view->data['attributeView']->data['defaultlocalization'] = LocalizationMapper::get()->where('id', (int) $settings->id)->execute(); + + $view->data['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); + $view->data['vehicle-notes'] = new \Modules\Editor\Theme\Backend\Components\Compound\BaseView($this->app->l11nManager, $request, $response); + + return $view; + } + + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Returns a renderable object + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewFleetManagementDriverProfile(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + + $view->setTemplate('/Modules/FleetManagement/Theme/Backend/driver-profile'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1003502001, $request, $response); + + // @todo: This langauge filtering doesn't work. But it was working with the old mappers. Maybe there is a bug in the where() definition. Need to inspect the actual query. + $driver = DriverMapper::get() + ->with('attributes') + ->with('attributes/type') + ->with('attributes/value') + ->with('attributes/type/l11n') + ->with('files') + ->with('files/types') + ->where('id', (int) $request->getData('id')) + ->where('attributes/type/l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['driver'] = $driver; + + $query = new Builder($this->app->dbPool->get()); + $results = $query->selectAs(DriverMapper::HAS_MANY['files']['external'], 'file') + ->from(DriverMapper::TABLE) + ->leftJoin(DriverMapper::HAS_MANY['files']['table']) + ->on(DriverMapper::HAS_MANY['files']['table'] . '.' . DriverMapper::HAS_MANY['files']['self'], '=', DriverMapper::TABLE . '.' . DriverMapper::PRIMARYFIELD) + ->leftJoin(MediaMapper::TABLE) + ->on(DriverMapper::HAS_MANY['files']['table'] . '.' . DriverMapper::HAS_MANY['files']['external'], '=', MediaMapper::TABLE . '.' . MediaMapper::PRIMARYFIELD) + ->leftJoin(MediaMapper::HAS_MANY['types']['table']) + ->on(MediaMapper::TABLE . '.' . MediaMapper::PRIMARYFIELD, '=', MediaMapper::HAS_MANY['types']['table'] . '.' . MediaMapper::HAS_MANY['types']['self']) + ->leftJoin(MediaTypeMapper::TABLE) + ->on(MediaMapper::HAS_MANY['types']['table'] . '.' . MediaMapper::HAS_MANY['types']['external'], '=', MediaTypeMapper::TABLE . '.' . MediaTypeMapper::PRIMARYFIELD) + ->where(DriverMapper::HAS_MANY['files']['self'], '=', $driver->id) + ->where(MediaTypeMapper::TABLE . '.' . MediaTypeMapper::getColumnByMember('name'), '=', 'driver_profile_image'); + + $driverImage = MediaMapper::get() + ->with('types') + ->where('id', $results) + ->limit(1) + ->execute(); + + $view->data['driverImage'] = $driverImage; + + /** @var \Model\Setting $settings */ + $settings = $this->app->appSettings->get(null, [ + SettingsEnum::DEFAULT_LOCALIZATION, + ]); + + $view->data['attributeView'] = new \Modules\Attribute\Theme\Backend\Components\AttributeView($this->app->l11nManager, $request, $response); + $view->data['attributeView']->data['defaultlocalization'] = LocalizationMapper::get()->where('id', (int) $settings->id)->execute(); + + $view->data['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); + $view->data['driver-notes'] = new \Modules\Editor\Theme\Backend\Components\Compound\BaseView($this->app->l11nManager, $request, $response); + + return $view; + } +} diff --git a/Controller/Controller.php b/Controller/Controller.php new file mode 100755 index 0000000..477d5a1 --- /dev/null +++ b/Controller/Controller.php @@ -0,0 +1,76 @@ + + */ +final class DriverAttributeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_id' => ['name' => 'fleetmgmt_driver_attr_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_driver' => ['name' => 'fleetmgmt_driver_attr_driver', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_driver_attr_type' => ['name' => 'fleetmgmt_driver_attr_type', 'type' => 'int', 'internal' => 'type'], + 'fleetmgmt_driver_attr_value' => ['name' => 'fleetmgmt_driver_attr_value', 'type' => 'int', 'internal' => 'value'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'type' => [ + 'mapper' => DriverAttributeTypeMapper::class, + 'external' => 'fleetmgmt_driver_attr_type', + ], + 'value' => [ + 'mapper' => DriverAttributeValueMapper::class, + 'external' => 'fleetmgmt_driver_attr_value', + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = Attribute::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_id'; +} diff --git a/Models/Attribute/DriverAttributeTypeL11nMapper.php b/Models/Attribute/DriverAttributeTypeL11nMapper.php new file mode 100644 index 0000000..70b2653 --- /dev/null +++ b/Models/Attribute/DriverAttributeTypeL11nMapper.php @@ -0,0 +1,69 @@ + + */ +final class DriverAttributeTypeL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_type_l11n_id' => ['name' => 'fleetmgmt_driver_attr_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_type_l11n_title' => ['name' => 'fleetmgmt_driver_attr_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_driver_attr_type_l11n_type' => ['name' => 'fleetmgmt_driver_attr_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_driver_attr_type_l11n_lang' => ['name' => 'fleetmgmt_driver_attr_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/Attribute/DriverAttributeTypeMapper.php b/Models/Attribute/DriverAttributeTypeMapper.php new file mode 100644 index 0000000..92fd7c5 --- /dev/null +++ b/Models/Attribute/DriverAttributeTypeMapper.php @@ -0,0 +1,94 @@ + + */ +final class DriverAttributeTypeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_type_id' => ['name' => 'fleetmgmt_driver_attr_type_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_type_name' => ['name' => 'fleetmgmt_driver_attr_type_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], + 'fleetmgmt_driver_attr_type_datatype' => ['name' => 'fleetmgmt_driver_attr_type_datatype', 'type' => 'int', 'internal' => 'datatype'], + 'fleetmgmt_driver_attr_type_fields' => ['name' => 'fleetmgmt_driver_attr_type_fields', 'type' => 'int', 'internal' => 'fields'], + 'fleetmgmt_driver_attr_type_custom' => ['name' => 'fleetmgmt_driver_attr_type_custom', 'type' => 'bool', 'internal' => 'custom'], + 'fleetmgmt_driver_attr_type_pattern' => ['name' => 'fleetmgmt_driver_attr_type_pattern', 'type' => 'string', 'internal' => 'validationPattern'], + 'fleetmgmt_driver_attr_type_required' => ['name' => 'fleetmgmt_driver_attr_type_required', 'type' => 'bool', 'internal' => 'isRequired'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => DriverAttributeTypeL11nMapper::class, + 'table' => 'fleetmgmt_driver_attr_type_l11n', + 'self' => 'fleetmgmt_driver_attr_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + 'defaults' => [ + 'mapper' => DriverAttributeValueMapper::class, + 'table' => 'fleetmgmt_driver_attr_default', + 'self' => 'fleetmgmt_driver_attr_default_type', + 'external' => 'fleetmgmt_driver_attr_default_value', + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = AttributeType::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_type_id'; +} diff --git a/Models/Attribute/DriverAttributeValueL11nMapper.php b/Models/Attribute/DriverAttributeValueL11nMapper.php new file mode 100644 index 0000000..a9ca0de --- /dev/null +++ b/Models/Attribute/DriverAttributeValueL11nMapper.php @@ -0,0 +1,69 @@ + + */ +final class DriverAttributeValueL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_value_l11n_id' => ['name' => 'fleetmgmt_driver_attr_value_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_value_l11n_title' => ['name' => 'fleetmgmt_driver_attr_value_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_driver_attr_value_l11n_value' => ['name' => 'fleetmgmt_driver_attr_value_l11n_value', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_driver_attr_value_l11n_lang' => ['name' => 'fleetmgmt_driver_attr_value_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr_value_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_value_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/Attribute/DriverAttributeValueMapper.php b/Models/Attribute/DriverAttributeValueMapper.php new file mode 100644 index 0000000..7f0b898 --- /dev/null +++ b/Models/Attribute/DriverAttributeValueMapper.php @@ -0,0 +1,89 @@ + + */ +final class DriverAttributeValueMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_attr_value_id' => ['name' => 'fleetmgmt_driver_attr_value_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_attr_value_default' => ['name' => 'fleetmgmt_driver_attr_value_default', 'type' => 'bool', 'internal' => 'isDefault'], + 'fleetmgmt_driver_attr_value_valueStr' => ['name' => 'fleetmgmt_driver_attr_value_valueStr', 'type' => 'string', 'internal' => 'valueStr'], + 'fleetmgmt_driver_attr_value_valueInt' => ['name' => 'fleetmgmt_driver_attr_value_valueInt', 'type' => 'int', 'internal' => 'valueInt'], + 'fleetmgmt_driver_attr_value_valueDec' => ['name' => 'fleetmgmt_driver_attr_value_valueDec', 'type' => 'float', 'internal' => 'valueDec'], + 'fleetmgmt_driver_attr_value_valueDat' => ['name' => 'fleetmgmt_driver_attr_value_valueDat', 'type' => 'DateTime', 'internal' => 'valueDat'], + 'fleetmgmt_driver_attr_value_unit' => ['name' => 'fleetmgmt_driver_attr_value_unit', 'type' => 'string', 'internal' => 'unit'], + 'fleetmgmt_driver_attr_value_deptype' => ['name' => 'fleetmgmt_driver_attr_value_deptype', 'type' => 'int', 'internal' => 'dependingAttributeType'], + 'fleetmgmt_driver_attr_value_depvalue' => ['name' => 'fleetmgmt_driver_attr_value_depvalue', 'type' => 'int', 'internal' => 'dependingAttributeValue'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => DriverAttributeValueL11nMapper::class, + 'table' => 'fleetmgmt_driver_attr_value_l11n', + 'self' => 'fleetmgmt_driver_attr_value_l11n_value', + 'external' => null, + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = AttributeValue::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_attr_value'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_attr_value_id'; +} diff --git a/Models/Attribute/VehicleAttributeMapper.php b/Models/Attribute/VehicleAttributeMapper.php new file mode 100644 index 0000000..ea68063 --- /dev/null +++ b/Models/Attribute/VehicleAttributeMapper.php @@ -0,0 +1,86 @@ + + */ +final class VehicleAttributeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_vehicle_attr_id' => ['name' => 'fleetmgmt_vehicle_attr_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_vehicle_attr_vehicle' => ['name' => 'fleetmgmt_vehicle_attr_vehicle', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_vehicle_attr_type' => ['name' => 'fleetmgmt_vehicle_attr_type', 'type' => 'int', 'internal' => 'type'], + 'fleetmgmt_vehicle_attr_value' => ['name' => 'fleetmgmt_vehicle_attr_value', 'type' => 'int', 'internal' => 'value'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'type' => [ + 'mapper' => VehicleAttributeTypeMapper::class, + 'external' => 'fleetmgmt_vehicle_attr_type', + ], + 'value' => [ + 'mapper' => VehicleAttributeValueMapper::class, + 'external' => 'fleetmgmt_vehicle_attr_value', + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = Attribute::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_vehicle_attr'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_vehicle_attr_id'; +} diff --git a/Models/Attribute/VehicleAttributeTypeL11nMapper.php b/Models/Attribute/VehicleAttributeTypeL11nMapper.php new file mode 100644 index 0000000..9748327 --- /dev/null +++ b/Models/Attribute/VehicleAttributeTypeL11nMapper.php @@ -0,0 +1,69 @@ + + */ +final class VehicleAttributeTypeL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_attr_type_l11n_id' => ['name' => 'fleetmgmt_attr_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_attr_type_l11n_title' => ['name' => 'fleetmgmt_attr_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_attr_type_l11n_type' => ['name' => 'fleetmgmt_attr_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_attr_type_l11n_lang' => ['name' => 'fleetmgmt_attr_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_attr_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_attr_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/Attribute/VehicleAttributeTypeMapper.php b/Models/Attribute/VehicleAttributeTypeMapper.php new file mode 100644 index 0000000..63be3db --- /dev/null +++ b/Models/Attribute/VehicleAttributeTypeMapper.php @@ -0,0 +1,94 @@ + + */ +final class VehicleAttributeTypeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_attr_type_id' => ['name' => 'fleetmgmt_attr_type_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_attr_type_name' => ['name' => 'fleetmgmt_attr_type_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], + 'fleetmgmt_attr_type_datatype' => ['name' => 'fleetmgmt_attr_type_datatype', 'type' => 'int', 'internal' => 'datatype'], + 'fleetmgmt_attr_type_fields' => ['name' => 'fleetmgmt_attr_type_fields', 'type' => 'int', 'internal' => 'fields'], + 'fleetmgmt_attr_type_custom' => ['name' => 'fleetmgmt_attr_type_custom', 'type' => 'bool', 'internal' => 'custom'], + 'fleetmgmt_attr_type_pattern' => ['name' => 'fleetmgmt_attr_type_pattern', 'type' => 'string', 'internal' => 'validationPattern'], + 'fleetmgmt_attr_type_required' => ['name' => 'fleetmgmt_attr_type_required', 'type' => 'bool', 'internal' => 'isRequired'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => VehicleAttributeTypeL11nMapper::class, + 'table' => 'fleetmgmt_attr_type_l11n', + 'self' => 'fleetmgmt_attr_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + 'defaults' => [ + 'mapper' => VehicleAttributeValueMapper::class, + 'table' => 'fleetmgmt_vehicle_attr_default', + 'self' => 'fleetmgmt_vehicle_attr_default_type', + 'external' => 'fleetmgmt_vehicle_attr_default_value', + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = AttributeType::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_attr_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_attr_type_id'; +} diff --git a/Models/Attribute/VehicleAttributeValueL11nMapper.php b/Models/Attribute/VehicleAttributeValueL11nMapper.php new file mode 100644 index 0000000..dfee443 --- /dev/null +++ b/Models/Attribute/VehicleAttributeValueL11nMapper.php @@ -0,0 +1,69 @@ + + */ +final class VehicleAttributeValueL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_attr_value_l11n_id' => ['name' => 'fleetmgmt_attr_value_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_attr_value_l11n_title' => ['name' => 'fleetmgmt_attr_value_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_attr_value_l11n_value' => ['name' => 'fleetmgmt_attr_value_l11n_value', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_attr_value_l11n_lang' => ['name' => 'fleetmgmt_attr_value_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_attr_value_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_attr_value_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/Attribute/VehicleAttributeValueMapper.php b/Models/Attribute/VehicleAttributeValueMapper.php new file mode 100644 index 0000000..2948e3f --- /dev/null +++ b/Models/Attribute/VehicleAttributeValueMapper.php @@ -0,0 +1,89 @@ + + */ +final class VehicleAttributeValueMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_attr_value_id' => ['name' => 'fleetmgmt_attr_value_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_attr_value_default' => ['name' => 'fleetmgmt_attr_value_default', 'type' => 'bool', 'internal' => 'isDefault'], + 'fleetmgmt_attr_value_valueStr' => ['name' => 'fleetmgmt_attr_value_valueStr', 'type' => 'string', 'internal' => 'valueStr'], + 'fleetmgmt_attr_value_valueInt' => ['name' => 'fleetmgmt_attr_value_valueInt', 'type' => 'int', 'internal' => 'valueInt'], + 'fleetmgmt_attr_value_valueDec' => ['name' => 'fleetmgmt_attr_value_valueDec', 'type' => 'float', 'internal' => 'valueDec'], + 'fleetmgmt_attr_value_valueDat' => ['name' => 'fleetmgmt_attr_value_valueDat', 'type' => 'DateTime', 'internal' => 'valueDat'], + 'fleetmgmt_attr_value_unit' => ['name' => 'fleetmgmt_attr_value_unit', 'type' => 'string', 'internal' => 'unit'], + 'fleetmgmt_attr_value_deptype' => ['name' => 'fleetmgmt_attr_value_deptype', 'type' => 'int', 'internal' => 'dependingAttributeType'], + 'fleetmgmt_attr_value_depvalue' => ['name' => 'fleetmgmt_attr_value_depvalue', 'type' => 'int', 'internal' => 'dependingAttributeValue'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => VehicleAttributeValueL11nMapper::class, + 'table' => 'fleetmgmt_attr_value_l11n', + 'self' => 'fleetmgmt_attr_value_l11n_value', + 'external' => null, + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = AttributeValue::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_attr_value'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_attr_value_id'; +} diff --git a/Models/Cost.php b/Models/Cost.php new file mode 100644 index 0000000..b724492 --- /dev/null +++ b/Models/Cost.php @@ -0,0 +1,48 @@ + $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/CostType.php b/Models/CostType.php new file mode 100644 index 0000000..52d49f6 --- /dev/null +++ b/Models/CostType.php @@ -0,0 +1,48 @@ + $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/Driver/Driver.php b/Models/Driver/Driver.php new file mode 100644 index 0000000..829b960 --- /dev/null +++ b/Models/Driver/Driver.php @@ -0,0 +1,79 @@ + $this->id, + 'status' => $this->status, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } + + use \Modules\Media\Models\MediaListTrait; + use \Modules\Editor\Models\EditorDocListTrait; + use \Modules\Attribute\Models\AttributeHolderTrait; +} diff --git a/Models/Driver/DriverInspectionMapper.php b/Models/Driver/DriverInspectionMapper.php new file mode 100644 index 0000000..f7be7bd --- /dev/null +++ b/Models/Driver/DriverInspectionMapper.php @@ -0,0 +1,86 @@ + + */ +final class DriverInspectionMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_inspection_id' => ['name' => 'fleetmgmt_driver_inspection_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_inspection_driver' => ['name' => 'fleetmgmt_driver_inspection_driver', 'type' => 'int', 'internal' => 'reference'], + 'fleetmgmt_driver_inspection_description' => ['name' => 'fleetmgmt_driver_inspection_description', 'type' => 'string', 'internal' => 'description'], + 'fleetmgmt_driver_inspection_status' => ['name' => 'fleetmgmt_driver_inspection_status', 'type' => 'int', 'internal' => 'status'], + 'fleetmgmt_driver_inspection_interval' => ['name' => 'fleetmgmt_driver_inspection_interval', 'type' => 'int', 'internal' => 'interval'], + 'fleetmgmt_driver_inspection_next' => ['name' => 'fleetmgmt_driver_inspection_next', 'type' => 'DateTime', 'internal' => 'next'], + 'fleetmgmt_driver_inspection_date' => ['name' => 'fleetmgmt_driver_inspection_date', 'type' => 'DateTime', 'internal' => 'date'], + 'fleetmgmt_driver_inspection_type' => ['name' => 'fleetmgmt_driver_inspection_type', 'type' => 'int', 'internal' => 'type'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'type' => [ + 'mapper' => DriverInspectionTypeMapper::class, + 'external' => 'fleetmgmt_driver_inspection_type', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_inspection'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_inspection_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = Inspection::class; +} diff --git a/Models/Driver/DriverInspectionTypeL11nMapper.php b/Models/Driver/DriverInspectionTypeL11nMapper.php new file mode 100644 index 0000000..0f6396f --- /dev/null +++ b/Models/Driver/DriverInspectionTypeL11nMapper.php @@ -0,0 +1,69 @@ + + */ +final class DriverInspectionTypeL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_inspection_type_l11n_id' => ['name' => 'fleetmgmt_driver_inspection_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_inspection_type_l11n_title' => ['name' => 'fleetmgmt_driver_inspection_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_driver_inspection_type_l11n_type' => ['name' => 'fleetmgmt_driver_inspection_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_driver_inspection_type_l11n_lang' => ['name' => 'fleetmgmt_driver_inspection_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_inspection_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_inspection_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/Driver/DriverInspectionTypeMapper.php b/Models/Driver/DriverInspectionTypeMapper.php new file mode 100644 index 0000000..9646a6b --- /dev/null +++ b/Models/Driver/DriverInspectionTypeMapper.php @@ -0,0 +1,83 @@ + + */ +final class DriverInspectionTypeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_inspection_type_id' => ['name' => 'fleetmgmt_driver_inspection_type_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_inspection_type_name' => ['name' => 'fleetmgmt_driver_inspection_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => DriverInspectionTypeL11nMapper::class, + 'table' => 'fleetmgmt_driver_inspection_type_l11n', + 'self' => 'fleetmgmt_driver_inspection_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11nType::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver_inspection_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_inspection_type_id'; +} diff --git a/Models/Driver/DriverMapper.php b/Models/Driver/DriverMapper.php new file mode 100644 index 0000000..9994024 --- /dev/null +++ b/Models/Driver/DriverMapper.php @@ -0,0 +1,103 @@ + + */ +final class DriverMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_driver_id' => ['name' => 'fleetmgmt_driver_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_driver_status' => ['name' => 'fleetmgmt_driver_status', 'type' => 'int', 'internal' => 'status'], + 'fleetmgmt_driver_account' => ['name' => 'fleetmgmt_driver_account', 'type' => 'int', 'internal' => 'account'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'files' => [ + 'mapper' => MediaMapper::class, + 'table' => 'fleetmgmt_driver_media', + 'external' => 'fleetmgmt_driver_media_media', + 'self' => 'fleetmgmt_driver_media_vehicle', + ], + 'attributes' => [ + 'mapper' => DriverAttributeMapper::class, + 'table' => 'fleetmgmt_driver_attr', + 'self' => 'fleetmgmt_driver_attr_driver', + 'external' => null, + ], + 'notes' => [ + 'mapper' => EditorDocMapper::class, /* mapper of the related object */ + 'table' => 'fleetmgmt_driver_note', /* table of the related object, null if no relation table is used (many->1) */ + 'external' => 'fleetmgmt_driver_note_doc', + 'self' => 'fleetmgmt_driver_note_driver', + ], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'account' => [ + 'mapper' => AccountMapper::class, + 'external' => 'fleetmgmt_driver_account', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_driver'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_driver_id'; +} diff --git a/Models/Driver/DriverStatus.php b/Models/Driver/DriverStatus.php new file mode 100644 index 0000000..798051b --- /dev/null +++ b/Models/Driver/DriverStatus.php @@ -0,0 +1,34 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/Driver/NullDriverInspection.php b/Models/Driver/NullDriverInspection.php new file mode 100644 index 0000000..bda51a0 --- /dev/null +++ b/Models/Driver/NullDriverInspection.php @@ -0,0 +1,48 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/FuelTypeL11nMapper.php b/Models/FuelTypeL11nMapper.php new file mode 100644 index 0000000..0ff1136 --- /dev/null +++ b/Models/FuelTypeL11nMapper.php @@ -0,0 +1,69 @@ + + */ +final class FuelTypeL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_fuel_type_l11n_id' => ['name' => 'fleetmgmt_fuel_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_fuel_type_l11n_title' => ['name' => 'fleetmgmt_fuel_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_fuel_type_l11n_type' => ['name' => 'fleetmgmt_fuel_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_fuel_type_l11n_lang' => ['name' => 'fleetmgmt_fuel_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_fuel_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_fuel_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/FuelTypeMapper.php b/Models/FuelTypeMapper.php new file mode 100644 index 0000000..22adc74 --- /dev/null +++ b/Models/FuelTypeMapper.php @@ -0,0 +1,83 @@ + + */ +final class FuelTypeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_fuel_type_id' => ['name' => 'fleetmgmt_fuel_type_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_fuel_type_name' => ['name' => 'fleetmgmt_fuel_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => FuelTypeL11nMapper::class, + 'table' => 'fleetmgmt_fuel_type_l11n', + 'self' => 'fleetmgmt_fuel_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11nType::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_fuel_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_fuel_type_id'; +} diff --git a/Models/Inspection.php b/Models/Inspection.php new file mode 100644 index 0000000..38f58d7 --- /dev/null +++ b/Models/Inspection.php @@ -0,0 +1,90 @@ +type = new BaseStringL11nType(); + } + + /** + * {@inheritdoc} + */ + public function toArray() : array + { + return [ + 'id' => $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } + + use \Modules\Media\Models\MediaListTrait; +} diff --git a/Models/InspectionMapper.php b/Models/InspectionMapper.php new file mode 100644 index 0000000..d6af791 --- /dev/null +++ b/Models/InspectionMapper.php @@ -0,0 +1,85 @@ + + */ +final class InspectionMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_vehicle_inspection_id' => ['name' => 'fleetmgmt_vehicle_inspection_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_vehicle_inspection_vehicle' => ['name' => 'fleetmgmt_vehicle_inspection_vehicle', 'type' => 'int', 'internal' => 'reference'], + 'fleetmgmt_vehicle_inspection_description' => ['name' => 'fleetmgmt_vehicle_inspection_description', 'type' => 'string', 'internal' => 'description'], + 'fleetmgmt_vehicle_inspection_status' => ['name' => 'fleetmgmt_vehicle_inspection_status', 'type' => 'int', 'internal' => 'status'], + 'fleetmgmt_vehicle_inspection_interval' => ['name' => 'fleetmgmt_vehicle_inspection_interval', 'type' => 'int', 'internal' => 'interval'], + 'fleetmgmt_vehicle_inspection_next' => ['name' => 'fleetmgmt_vehicle_inspection_next', 'type' => 'DateTime', 'internal' => 'next'], + 'fleetmgmt_vehicle_inspection_date' => ['name' => 'fleetmgmt_vehicle_inspection_date', 'type' => 'DateTime', 'internal' => 'date'], + 'fleetmgmt_vehicle_inspection_type' => ['name' => 'fleetmgmt_vehicle_inspection_type', 'type' => 'int', 'internal' => 'type'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'type' => [ + 'mapper' => InspectionTypeMapper::class, + 'external' => 'fleetmgmt_vehicle_inspection_type', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_vehicle_inspection'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_vehicle_inspection_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = Inspection::class; +} diff --git a/Models/InspectionStatus.php b/Models/InspectionStatus.php new file mode 100644 index 0000000..ea62429 --- /dev/null +++ b/Models/InspectionStatus.php @@ -0,0 +1,36 @@ + + */ +final class InspectionTypeL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_inspection_type_l11n_id' => ['name' => 'fleetmgmt_inspection_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_inspection_type_l11n_title' => ['name' => 'fleetmgmt_inspection_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_inspection_type_l11n_type' => ['name' => 'fleetmgmt_inspection_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_inspection_type_l11n_lang' => ['name' => 'fleetmgmt_inspection_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_inspection_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_inspection_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/InspectionTypeMapper.php b/Models/InspectionTypeMapper.php new file mode 100644 index 0000000..e818f14 --- /dev/null +++ b/Models/InspectionTypeMapper.php @@ -0,0 +1,83 @@ + + */ +final class InspectionTypeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_inspection_type_id' => ['name' => 'fleetmgmt_inspection_type_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_inspection_type_name' => ['name' => 'fleetmgmt_inspection_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => InspectionTypeL11nMapper::class, + 'table' => 'fleetmgmt_inspection_type_l11n', + 'self' => 'fleetmgmt_inspection_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11nType::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_inspection_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_inspection_type_id'; +} diff --git a/Models/License.php b/Models/License.php new file mode 100644 index 0000000..927a319 --- /dev/null +++ b/Models/License.php @@ -0,0 +1,46 @@ + $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/LicenseType.php b/Models/LicenseType.php new file mode 100644 index 0000000..f090e41 --- /dev/null +++ b/Models/LicenseType.php @@ -0,0 +1,46 @@ + $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/Milage.php b/Models/Milage.php new file mode 100644 index 0000000..4874b71 --- /dev/null +++ b/Models/Milage.php @@ -0,0 +1,78 @@ + $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/MilageMapper.php b/Models/MilageMapper.php new file mode 100644 index 0000000..69d8163 --- /dev/null +++ b/Models/MilageMapper.php @@ -0,0 +1,91 @@ + + */ +final class MilageMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_milage_id' => ['name' => 'fleetmgmt_milage_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_milage_description' => ['name' => 'fleetmgmt_milage_description', 'type' => 'string', 'internal' => 'description'], + 'fleetmgmt_milage_status' => ['name' => 'fleetmgmt_milage_status', 'type' => 'int', 'internal' => 'status'], + 'fleetmgmt_milage_driver' => ['name' => 'fleetmgmt_milage_driver', 'type' => 'int', 'internal' => 'driver'], + 'fleetmgmt_milage_vehicle' => ['name' => 'fleetmgmt_milage_vehicle', 'type' => 'int', 'internal' => 'vehicle'], + 'fleetmgmt_milage_start' => ['name' => 'fleetmgmt_milage_start', 'type' => 'DateTime', 'internal' => 'start'], + 'fleetmgmt_milage_end' => ['name' => 'fleetmgmt_milage_end', 'type' => 'DateTime', 'internal' => 'end'], + 'fleetmgmt_milage_milage' => ['name' => 'fleetmgmt_milage_milage', 'type' => 'int', 'internal' => 'milage'], + 'fleetmgmt_milage_fuel' => ['name' => 'fleetmgmt_milage_fuel', 'type' => 'int', 'internal' => 'fuelUsage'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'driver' => [ + 'mapper' => DriverMapper::class, + 'external' => 'fleetmgmt_milage_driver', + ], + 'vehicle' => [ + 'mapper' => VehicleMapper::class, + 'external' => 'fleetmgmt_milage_vehicle', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_milage'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_milage_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = Milage::class; +} diff --git a/Models/NullInspection.php b/Models/NullInspection.php new file mode 100644 index 0000000..44acde6 --- /dev/null +++ b/Models/NullInspection.php @@ -0,0 +1,46 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/NullVehicle.php b/Models/NullVehicle.php new file mode 100644 index 0000000..656899c --- /dev/null +++ b/Models/NullVehicle.php @@ -0,0 +1,47 @@ +id = $id; + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php new file mode 100755 index 0000000..8db498a --- /dev/null +++ b/Models/PermissionCategory.php @@ -0,0 +1,48 @@ +createdAt = new \DateTimeImmutable('now'); + $this->type = new BaseStringL11nType(); + $this->fuelType = new BaseStringL11nType(); + } + + /** + * {@inheritdoc} + */ + public function toArray() : array + { + return [ + 'id' => $this->id, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } + + use \Modules\Media\Models\MediaListTrait; + use \Modules\Editor\Models\EditorDocListTrait; + use \Modules\Attribute\Models\AttributeHolderTrait; +} diff --git a/Models/VehicleMapper.php b/Models/VehicleMapper.php new file mode 100644 index 0000000..d0c9b36 --- /dev/null +++ b/Models/VehicleMapper.php @@ -0,0 +1,120 @@ + + */ +final class VehicleMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_vehicle_id' => ['name' => 'fleetmgmt_vehicle_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_vehicle_name' => ['name' => 'fleetmgmt_vehicle_name', 'type' => 'string', 'internal' => 'name'], + 'fleetmgmt_vehicle_status' => ['name' => 'fleetmgmt_vehicle_status', 'type' => 'int', 'internal' => 'status'], + 'fleetmgmt_vehicle_info' => ['name' => 'fleetmgmt_vehicle_info', 'type' => 'string', 'internal' => 'info'], + 'fleetmgmt_vehicle_unit' => ['name' => 'fleetmgmt_vehicle_unit', 'type' => 'int', 'internal' => 'unit'], + 'fleetmgmt_vehicle_type' => ['name' => 'fleetmgmt_vehicle_type', 'type' => 'int', 'internal' => 'type'], + 'fleetmgmt_vehicle_fuel' => ['name' => 'fleetmgmt_vehicle_fuel', 'type' => 'int', 'internal' => 'fuelType'], + 'fleetmgmt_vehicle_responsible' => ['name' => 'fleetmgmt_vehicle_responsible', 'type' => 'int', 'internal' => 'responsible'], + 'fleetmgmt_vehicle_created_at' => ['name' => 'fleetmgmt_vehicle_created_at', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt', 'readonly' => true], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'files' => [ + 'mapper' => MediaMapper::class, + 'table' => 'fleetmgmt_vehicle_media', + 'external' => 'fleetmgmt_vehicle_media_media', + 'self' => 'fleetmgmt_vehicle_media_vehicle', + ], + 'attributes' => [ + 'mapper' => VehicleAttributeMapper::class, + 'table' => 'fleetmgmt_vehicle_attr', + 'self' => 'fleetmgmt_vehicle_attr_vehicle', + 'external' => null, + ], + 'notes' => [ + 'mapper' => EditorDocMapper::class, /* mapper of the related object */ + 'table' => 'fleetmgmt_vehicle_note', /* table of the related object, null if no relation table is used (many->1) */ + 'external' => 'fleetmgmt_vehicle_note_doc', + 'self' => 'fleetmgmt_vehicle_note_vehicle', + ], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'type' => [ + 'mapper' => VehicleTypeMapper::class, + 'external' => 'fleetmgmt_vehicle_type', + ], + 'fuelType' => [ + 'mapper' => FuelTypeMapper::class, + 'external' => 'fleetmgmt_vehicle_fuel', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_vehicle'; + + /** + * Created at. + * + * @var string + * @since 1.0.0 + */ + public const CREATED_AT = 'fleetmgmt_vehicle_created_at'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_vehicle_id'; +} diff --git a/Models/VehicleStatus.php b/Models/VehicleStatus.php new file mode 100644 index 0000000..060a263 --- /dev/null +++ b/Models/VehicleStatus.php @@ -0,0 +1,38 @@ + + */ +final class VehicleTypeL11nMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_vehicle_type_l11n_id' => ['name' => 'fleetmgmt_vehicle_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_vehicle_type_l11n_title' => ['name' => 'fleetmgmt_vehicle_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'fleetmgmt_vehicle_type_l11n_type' => ['name' => 'fleetmgmt_vehicle_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'fleetmgmt_vehicle_type_l11n_lang' => ['name' => 'fleetmgmt_vehicle_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_vehicle_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_vehicle_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/VehicleTypeMapper.php b/Models/VehicleTypeMapper.php new file mode 100644 index 0000000..0498203 --- /dev/null +++ b/Models/VehicleTypeMapper.php @@ -0,0 +1,84 @@ + + */ +final class VehicleTypeMapper extends DataMapperFactory +{ + /** + * Columns. + * + * @var array + * @since 1.0.0 + */ + public const COLUMNS = [ + 'fleetmgmt_vehicle_type_id' => ['name' => 'fleetmgmt_vehicle_type_id', 'type' => 'int', 'internal' => 'id'], + 'fleetmgmt_vehicle_type_name' => ['name' => 'fleetmgmt_vehicle_type_name', 'type' => 'string', 'internal' => 'title', 'autocomplete' => true], + + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => VehicleTypeL11nMapper::class, + 'table' => 'fleetmgmt_vehicle_type_l11n', + 'self' => 'fleetmgmt_vehicle_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + ]; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11nType::class; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'fleetmgmt_vehicle_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'fleetmgmt_vehicle_type_id'; +} diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/Theme/Backend/Lang/Navigation.ar.lang.php b/Theme/Backend/Lang/Navigation.ar.lang.php new file mode 100755 index 0000000..a5d8750 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.ar.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'عميل', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'منطقة', + 'SalesRep' => 'مندول المبيعات', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.cs.lang.php b/Theme/Backend/Lang/Navigation.cs.lang.php new file mode 100755 index 0000000..30bec4e --- /dev/null +++ b/Theme/Backend/Lang/Navigation.cs.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Klienta', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Kraj', + 'SalesRep' => 'Obchodní zástupce', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.da.lang.php b/Theme/Backend/Lang/Navigation.da.lang.php new file mode 100755 index 0000000..a94b956 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.da.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Klient', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Område', + 'SalesRep' => 'Salgsrepræsentant', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.de.lang.php b/Theme/Backend/Lang/Navigation.de.lang.php new file mode 100755 index 0000000..ce0694c --- /dev/null +++ b/Theme/Backend/Lang/Navigation.de.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Klient', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Region', + 'SalesRep' => 'VerkäufeRep', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.el.lang.php b/Theme/Backend/Lang/Navigation.el.lang.php new file mode 100755 index 0000000..bea8d38 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.el.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Πελάτης', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Περιοχή', + 'SalesRep' => 'Αντιπρόσωπος Πωλήσεων', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.en.lang.php b/Theme/Backend/Lang/Navigation.en.lang.php new file mode 100755 index 0000000..4997c05 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.en.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => '', + 'DriverAttributes' => 'Driver Attributes', + 'DriverInspectionTypes' => 'Driver Inspection Types', + 'Drivers' => 'Drivers', + 'FleetManagement' => 'Fleet Management', + 'Inspections' => 'Inspections', + 'Region' => '', + 'SalesRep' => '', + 'VehicleAttributes' => 'Vehicle Attributes', + 'VehicleInspectionTypes' => 'Vehicle Inspection Types', + 'Vehicles' => 'Vehicles', +]]; diff --git a/Theme/Backend/Lang/Navigation.es.lang.php b/Theme/Backend/Lang/Navigation.es.lang.php new file mode 100755 index 0000000..878f53b --- /dev/null +++ b/Theme/Backend/Lang/Navigation.es.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Cliente', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Región', + 'SalesRep' => 'Vendedores', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.fi.lang.php b/Theme/Backend/Lang/Navigation.fi.lang.php new file mode 100755 index 0000000..09cb774 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.fi.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Asiakas', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Alue', + 'SalesRep' => 'Myyntiedustaja', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.fr.lang.php b/Theme/Backend/Lang/Navigation.fr.lang.php new file mode 100755 index 0000000..2fd5b82 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.fr.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Client', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Région', + 'SalesRep' => 'Représentant commercial', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.hu.lang.php b/Theme/Backend/Lang/Navigation.hu.lang.php new file mode 100755 index 0000000..c7e7202 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.hu.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Ügyfél', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Vidék', + 'SalesRep' => 'Értékesítés', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.it.lang.php b/Theme/Backend/Lang/Navigation.it.lang.php new file mode 100755 index 0000000..e26a884 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.it.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Cliente', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Regione', + 'SalesRep' => 'Rappresentante delle vendite', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.ja.lang.php b/Theme/Backend/Lang/Navigation.ja.lang.php new file mode 100755 index 0000000..ca5ca08 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.ja.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'クライアント', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => '領域', + 'SalesRep' => 'セールスレート', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.ko.lang.php b/Theme/Backend/Lang/Navigation.ko.lang.php new file mode 100755 index 0000000..0c9b4e6 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.ko.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => '고객', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => '지역', + 'SalesRep' => '매출액', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.no.lang.php b/Theme/Backend/Lang/Navigation.no.lang.php new file mode 100755 index 0000000..e7e0b71 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.no.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Klient', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Region', + 'SalesRep' => 'SalesRep.', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.pl.lang.php b/Theme/Backend/Lang/Navigation.pl.lang.php new file mode 100755 index 0000000..4cb69a7 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.pl.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Klient', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Region', + 'SalesRep' => 'Przedstawiciel handlowy', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.pt.lang.php b/Theme/Backend/Lang/Navigation.pt.lang.php new file mode 100755 index 0000000..a77a9ae --- /dev/null +++ b/Theme/Backend/Lang/Navigation.pt.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Cliente', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Região', + 'SalesRep' => 'Representante de vendas', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.ru.lang.php b/Theme/Backend/Lang/Navigation.ru.lang.php new file mode 100755 index 0000000..f48386f --- /dev/null +++ b/Theme/Backend/Lang/Navigation.ru.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Клиент', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Область', + 'SalesRep' => 'Торговый представитель', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.sv.lang.php b/Theme/Backend/Lang/Navigation.sv.lang.php new file mode 100755 index 0000000..0852be9 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.sv.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Klient', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Område', + 'SalesRep' => 'Säljare', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.th.lang.php b/Theme/Backend/Lang/Navigation.th.lang.php new file mode 100755 index 0000000..9586a16 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.th.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'ลูกค้า', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'ภูมิภาค', + 'SalesRep' => 'ตัวแทนฝ่ายขาย', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.tr.lang.php b/Theme/Backend/Lang/Navigation.tr.lang.php new file mode 100755 index 0000000..b07419c --- /dev/null +++ b/Theme/Backend/Lang/Navigation.tr.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Müşteri', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Bölge', + 'SalesRep' => 'Satıcı', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.uk.lang.php b/Theme/Backend/Lang/Navigation.uk.lang.php new file mode 100755 index 0000000..cfb55b1 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.uk.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => 'Клієнт', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => 'Регіон', + 'SalesRep' => 'Торговий представник', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/Navigation.zh.lang.php b/Theme/Backend/Lang/Navigation.zh.lang.php new file mode 100755 index 0000000..e36b980 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.zh.lang.php @@ -0,0 +1,27 @@ + [ + 'Client' => '客户', + 'DriverAttributes' => '', + 'DriverInspectionTypes' => '', + 'Drivers' => '', + 'FleetManagement' => '', + 'Inspections' => '', + 'Region' => '地区', + 'SalesRep' => '销售代表', + 'VehicleAttributes' => '', + 'VehicleInspectionTypes' => '', + 'Vehicles' => '', +]]; diff --git a/Theme/Backend/Lang/ar.lang.php b/Theme/Backend/Lang/ar.lang.php new file mode 100755 index 0000000..c6543d0 --- /dev/null +++ b/Theme/Backend/Lang/ar.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'محاسبة', + 'Addition' => 'إضافة', + 'Address' => 'تبوك', + 'Addresses' => 'عناوين', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'مدير المنطقة', + 'Articlegroup' => 'articlegroup.', + 'Articles' => 'مقالات', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'الرصيد', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'علاوة', + 'Business' => 'اعمال', + 'CIS' => '#VALUE!', + 'CLV' => 'قذيفة', + 'Calendar' => 'تقويم', + 'City' => 'مدينة', + 'Client' => 'عميل', + 'ClientID' => '#VALUE!', + 'Clients' => 'عملاء', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'اتصل', + 'Costs' => '', + 'Country' => 'دولة', + 'Created' => 'خلقت', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'التصنيف الائتماني', + 'Creditcard' => 'بطاقة إئتمان', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'تاريخ', + 'Default' => 'تقصير', + 'Delivery' => 'توصيل', + 'Description' => '', + 'Discount' => 'خصم', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'خصم ٪', + 'Documents' => 'وثائق', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'بسبب', + 'Email' => 'بريد الالكتروني', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'فاكس', + 'Files' => 'الملفات', + 'Filter' => 'منقي', + 'Freightage' => 'شحن', + 'From' => '', + 'Group' => 'مجموعة', + 'History' => '', + 'ID' => 'بطاقة تعريف', + 'Info' => 'معلومات', + 'Inspections' => '', + 'Invoice' => 'فاتورة', + 'Invoices' => 'الفواتير', + 'IsDefault' => 'افتراضي؟', + 'Items' => '#VALUE!', + 'LastContact' => 'آخر اتصال', + 'LastOrder' => 'آخر طلب', + 'LeasingFee' => '', + 'Log' => 'سجل', + 'Logs' => 'السجلات', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'مرر', + 'MTDSales' => 'مبيعات MTD', + 'Make' => '', + 'Margin' => 'هامش', + 'Messages' => 'رسائل', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'تم التعديل', + 'Modules' => 'وحدات', + 'Name' => 'اسم', + 'Name1' => 'اسم 1.', + 'Name2' => 'اسم 2.', + 'Name3' => 'اسم 3.', + 'Net' => 'شبكة', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'ملحوظات', + 'Number' => 'عدد', + 'Office' => 'مكتب. مقر. مركز', + 'Other' => '#VALUE!', + 'Payment' => 'دفع', + 'PaymentTerm' => 'مصطلح الدفع', + 'Permission' => 'إذن', + 'Phone' => 'هاتف', + 'Postal' => 'بريدي', + 'Price' => 'السعر', + 'Prices' => 'الأسعار.', + 'Private' => 'نشر', + 'Productgroup' => 'productgroup.', + 'Profile' => 'الملف الشخصي', + 'Profit' => '#VALUE!', + 'Purchase' => 'شراء', + 'PurchasePrice' => '', + 'Quantity' => 'كمية', + 'RecentInvoices' => 'الفواتير الأخيرة', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'مبيعات', + 'Segment' => 'قطعة', + 'Segments' => 'شرائح', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'النوع الفرعي', + 'Support' => 'يدعم', + 'Tags' => 'كذا', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'نوع', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'موقع إلكتروني', + 'Wire' => 'الأسلاك', + 'YTDSales' => 'مبيعات YTD', + 'Zip' => 'أزيز', +]]; diff --git a/Theme/Backend/Lang/cs.lang.php b/Theme/Backend/Lang/cs.lang.php new file mode 100755 index 0000000..1459f6a --- /dev/null +++ b/Theme/Backend/Lang/cs.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Účetnictví', + 'Addition' => 'Přidání', + 'Address' => 'Adresa', + 'Addresses' => 'Adresy', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Oblastní manažer', + 'Articlegroup' => 'Článek', + 'Articles' => 'Články', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Zůstatek', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bonus', + 'Business' => 'Business.', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv.', + 'Calendar' => 'Kalendář', + 'City' => 'Město', + 'Client' => 'Klienta', + 'ClientID' => '#VALUE!', + 'Clients' => 'Klienti', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Kontakt', + 'Costs' => '', + 'Country' => 'Země', + 'Created' => 'Vytvořený', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Úvěrový rating', + 'Creditcard' => 'Kreditní karta', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'datum', + 'Default' => 'Výchozí hodnota', + 'Delivery' => 'dodávka', + 'Description' => '', + 'Discount' => 'Sleva', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Sleva%', + 'Documents' => 'Dokumenty', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Způsoben', + 'Email' => 'E-mailem', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Fax', + 'Files' => 'Soubory', + 'Filter' => 'Filtr', + 'Freightage' => 'Dopravné', + 'From' => '', + 'Group' => 'Skupina', + 'History' => '', + 'ID' => 'ID.', + 'Info' => 'Info.', + 'Inspections' => '', + 'Invoice' => 'Faktura', + 'Invoices' => 'Faktury', + 'IsDefault' => 'Je výchozí?', + 'Items' => '#VALUE!', + 'LastContact' => 'Poslední kontakt', + 'LastOrder' => 'Poslední objednávka', + 'LeasingFee' => '', + 'Log' => 'Log', + 'Logs' => 'Protokoly', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Mrr.', + 'MTDSales' => 'Prodej MTD.', + 'Make' => '', + 'Margin' => 'Okraj', + 'Messages' => 'Zprávy', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Upravený', + 'Modules' => 'Moduly', + 'Name' => 'název', + 'Name1' => 'Jméno1.', + 'Name2' => 'Jméno2.', + 'Name3' => 'Jméno3.', + 'Net' => 'Síť', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Poznámky', + 'Number' => 'Číslo', + 'Office' => 'Kancelář', + 'Other' => '#VALUE!', + 'Payment' => 'Způsob platby', + 'PaymentTerm' => 'Platební termín', + 'Permission' => 'Povolení', + 'Phone' => 'Telefon', + 'Postal' => 'Poštovní', + 'Price' => 'Cena', + 'Prices' => 'Ceny', + 'Private' => 'Soukromý', + 'Productgroup' => 'ProductSgroup.', + 'Profile' => 'Profil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Nákup', + 'PurchasePrice' => '', + 'Quantity' => 'Množství', + 'RecentInvoices' => 'Nedávné faktury', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Odbyt', + 'Segment' => 'Segment', + 'Segments' => 'Segmenty', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Podtyp', + 'Support' => 'Podpěra, podpora', + 'Tags' => 'Tagy', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Typ', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'webová stránka', + 'Wire' => 'Drát', + 'YTDSales' => 'Prodej YTD.', + 'Zip' => 'Zip', +]]; diff --git a/Theme/Backend/Lang/da.lang.php b/Theme/Backend/Lang/da.lang.php new file mode 100755 index 0000000..de2249f --- /dev/null +++ b/Theme/Backend/Lang/da.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Regnskab', + 'Addition' => 'Tilsætning', + 'Address' => 'Adresse', + 'Addresses' => 'Adresser', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Områdechef', + 'Articlegroup' => 'ArticleGroup.', + 'Articles' => 'Artikler', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Balance', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bonus', + 'Business' => 'Forretning', + 'CIS' => '#VALUE!', + 'CLV' => 'CLV.', + 'Calendar' => 'Kalender', + 'City' => 'City.', + 'Client' => 'Klient', + 'ClientID' => '#VALUE!', + 'Clients' => 'Klienter.', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Kontakt', + 'Costs' => '', + 'Country' => 'Land', + 'Created' => 'Oprettet', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Kreditvurdering', + 'Creditcard' => 'Kreditkort', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'Dato', + 'Default' => 'Standard', + 'Delivery' => 'Levering', + 'Description' => '', + 'Discount' => 'Rabat', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Rabat%', + 'Documents' => 'Dokumenter', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'På grund', + 'Email' => 'Email.', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Fax', + 'Files' => 'Filer.', + 'Filter' => 'Filter', + 'Freightage' => 'Gods', + 'From' => '', + 'Group' => 'Gruppe', + 'History' => '', + 'ID' => 'ID.', + 'Info' => 'Info.', + 'Inspections' => '', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturaer.', + 'IsDefault' => 'Er standard?', + 'Items' => '#VALUE!', + 'LastContact' => 'Sidste kontakt', + 'LastOrder' => 'Sidste ordre', + 'LeasingFee' => '', + 'Log' => 'Log', + 'Logs' => 'Logs.', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR.', + 'MTDSales' => 'MTD Sales.', + 'Make' => '', + 'Margin' => 'Margin.', + 'Messages' => 'Beskeder', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Modificeret', + 'Modules' => 'Moduler.', + 'Name' => 'Navn', + 'Name1' => 'NAME1.', + 'Name2' => 'NAME2.', + 'Name3' => 'NAME3.', + 'Net' => 'Net', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Noter.', + 'Number' => 'Nummer', + 'Office' => 'Kontor', + 'Other' => '#VALUE!', + 'Payment' => 'Betaling', + 'PaymentTerm' => 'Betalingsbetingelser', + 'Permission' => 'Tilladelse', + 'Phone' => 'telefon', + 'Postal' => 'Postal.', + 'Price' => 'Pris', + 'Prices' => 'Priser.', + 'Private' => 'Privat', + 'Productgroup' => 'Produktgruppe', + 'Profile' => 'Profil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Køb', + 'PurchasePrice' => '', + 'Quantity' => 'Antal', + 'RecentInvoices' => 'Nylige fakturaer.', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'SALG', + 'Segment' => 'Segment', + 'Segments' => 'Segmenter.', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Subtype.', + 'Support' => 'Support', + 'Tags' => 'Tags.', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Type', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Internet side', + 'Wire' => 'Tråd', + 'YTDSales' => 'YTD SALG', + 'Zip' => 'Zip.', +]]; diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php new file mode 100755 index 0000000..5e81bad --- /dev/null +++ b/Theme/Backend/Lang/de.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => 'Aktiv', + ':status2' => 'Inaktiv', + ':status3' => 'Beschädigt', + ':status4' => 'Außer Betrieb', + 'Accounting' => '', + 'Addition' => '', + 'Address' => '', + 'Addresses' => '', + 'Africa' => '', + 'AllCustomers' => '', + 'America' => '', + 'Analyse' => '', + 'AreaManager' => '', + 'Articlegroup' => '', + 'Articles' => '', + 'Asia' => '', + 'Attribute' => '', + 'Attributes' => 'Attribute', + 'Balance' => '', + 'BaseTime' => '', + 'Bills' => '', + 'Bonus' => '', + 'Business' => '', + 'CIS' => '', + 'CLV' => '', + 'Calendar' => '', + 'City' => '', + 'Client' => '', + 'ClientID' => '', + 'Clients' => '', + 'ComparisonTime' => '', + 'Contact' => '', + 'Costs' => 'Kosten', + 'Country' => '', + 'Created' => '', + 'CreatedAt' => '', + 'CreditRating' => '', + 'Creditcard' => '', + 'Customers' => '', + 'DSO' => '', + 'Date' => 'Datum', + 'Default' => '', + 'Delivery' => '', + 'Description' => '', + 'Discount' => '', + 'DiscountBonus' => '', + 'DiscountP' => '', + 'Documents' => '', + 'Driver' => 'Fahrer', + 'Drivers' => 'Fahrer', + 'Due' => '', + 'Email' => '', + 'End' => 'Ende', + 'Europe' => '', + 'Fax' => '', + 'Files' => 'Dateien', + 'Filter' => '', + 'Freightage' => '', + 'From' => '', + 'Group' => '', + 'History' => 'Historie', + 'ID' => '', + 'Info' => '', + 'Inspections' => 'Inspektionen', + 'Invoice' => '', + 'Invoices' => '', + 'IsDefault' => '', + 'Items' => '', + 'LastContact' => '', + 'LastOrder' => '', + 'LeasingFee' => 'Leasingkosten', + 'Log' => '', + 'Logs' => '', + 'LostCustomers' => '', + 'MRR' => '', + 'MTDSales' => '', + 'Make' => 'Marke', + 'Margin' => '', + 'Messages' => '', + 'Milage' => 'Tacho', + 'Model' => 'Modell', + 'Modified' => '', + 'Modules' => '', + 'Name' => 'Name', + 'Name1' => '', + 'Name2' => '', + 'Name3' => '', + 'Net' => '', + 'NewCustomers' => '', + 'Notes' => 'Notizen', + 'Number' => '', + 'Office' => '', + 'Other' => '', + 'Payment' => '', + 'PaymentTerm' => '', + 'Permission' => '', + 'Phone' => '', + 'Postal' => '', + 'Price' => '', + 'Prices' => '', + 'Private' => '', + 'Productgroup' => '', + 'Profile' => 'Profile', + 'Profit' => '', + 'Purchase' => '', + 'PurchasePrice' => 'Kaufpreis', + 'Quantity' => '', + 'RecentInvoices' => '', + 'Region' => '', + 'Rep' => '', + 'Responsible' => 'Verantwortlich', + 'Retention' => '', + 'Sales' => '', + 'Segment' => '', + 'Segments' => '', + 'Start' => 'Start', + 'Status' => 'Status', + 'Subtype' => '', + 'Support' => '', + 'Tags' => '', + 'Title' => '', + 'To' => '', + 'Total' => '', + 'TotalPrice' => '', + 'Type' => 'Typ', + 'UnitPrice' => '', + 'Upcoming' => 'Upcoming', + 'VIN' => '', + 'Value' => '', + 'Vehicle' => 'Fahrzeug', + 'Vehicles' => 'Fahrzeuge', + 'Vin' => 'Vin', + 'Website' => '', + 'Wire' => '', + 'YTDSales' => '', + 'Zip' => '', +]]; diff --git a/Theme/Backend/Lang/el.lang.php b/Theme/Backend/Lang/el.lang.php new file mode 100755 index 0000000..61d52ec --- /dev/null +++ b/Theme/Backend/Lang/el.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Λογιστική', + 'Addition' => 'Πρόσθεση', + 'Address' => 'Διεύθυνση', + 'Addresses' => 'Διευθύνσεις', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Διευθυντής περιοχής', + 'Articlegroup' => 'Ομιλία', + 'Articles' => 'Είδη', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Ισορροπία', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Δώρο', + 'Business' => 'Επιχείρηση', + 'CIS' => '#VALUE!', + 'CLV' => 'Σολλίζω', + 'Calendar' => 'Ημερολόγιο', + 'City' => 'Πόλη', + 'Client' => 'Πελάτης', + 'ClientID' => '#VALUE!', + 'Clients' => 'Πελάτες', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Επικοινωνία', + 'Costs' => '', + 'Country' => 'Χώρα', + 'Created' => 'Δημιουργήθηκε', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Αξιολόγησης της πιστοληπτικής ικανότητας', + 'Creditcard' => 'Πιστωτική κάρτα', + 'Customers' => '#VALUE!', + 'DSO' => 'ΔΣΟ', + 'Date' => 'Ημερομηνία', + 'Default' => 'Προκαθορισμένο', + 'Delivery' => 'Διανομή', + 'Description' => '', + 'Discount' => 'Εκπτωση', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Έκπτωση%', + 'Documents' => 'Εγγραφα', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Λόγω', + 'Email' => 'ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Φαξ', + 'Files' => 'Αρχεία', + 'Filter' => 'Φίλτρο', + 'Freightage' => 'Ναύλος', + 'From' => '', + 'Group' => 'Ομάδα', + 'History' => '', + 'ID' => 'ταυτότητα', + 'Info' => 'Πληροφορία', + 'Inspections' => '', + 'Invoice' => 'Τιμολόγιο', + 'Invoices' => 'Τιμολόγια', + 'IsDefault' => 'Είναι προεπιλογή;', + 'Items' => '#VALUE!', + 'LastContact' => 'Τελευταία επαφή', + 'LastOrder' => 'Τελευταία παραγγελία', + 'LeasingFee' => '', + 'Log' => 'Κούτσουρο', + 'Logs' => 'Κούτσουρα', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR', + 'MTDSales' => 'Πωλήσεις MTD', + 'Make' => '', + 'Margin' => 'Περιθώριο', + 'Messages' => 'Μηνύματα', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Τροποποιημένος', + 'Modules' => 'Ενότητες', + 'Name' => 'Ονομα', + 'Name1' => 'Όνομα1', + 'Name2' => 'Όνομα2', + 'Name3' => 'Όνομα', + 'Net' => 'Καθαρά', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Σημειώνει', + 'Number' => 'Αριθμός', + 'Office' => 'Γραφείο', + 'Other' => '#VALUE!', + 'Payment' => 'Πληρωμή', + 'PaymentTerm' => 'Ορος πληρωμής', + 'Permission' => 'Αδεια', + 'Phone' => 'Τηλέφωνο', + 'Postal' => 'Ταχυδρομικός', + 'Price' => 'Τιμή', + 'Prices' => 'Τιμές', + 'Private' => 'Ιδιωτικός', + 'Productgroup' => 'Ομοιόμορφη ομάδα', + 'Profile' => 'Προφίλ', + 'Profit' => '#VALUE!', + 'Purchase' => 'Αγορά', + 'PurchasePrice' => '', + 'Quantity' => 'Ποσότητα', + 'RecentInvoices' => 'Πρόσφατα τιμολόγια', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Εκπτώσεις', + 'Segment' => 'Τμήμα', + 'Segments' => 'Τμήματα', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Υποτύπωμα', + 'Support' => 'Υποστήριξη', + 'Tags' => 'Ετικέτες', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Τύπος', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Δικτυακός τόπος', + 'Wire' => 'Σύρμα', + 'YTDSales' => 'Ytd πωλήσεις', + 'Zip' => 'Φερμουάρ', +]]; diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php new file mode 100755 index 0000000..0e838b0 --- /dev/null +++ b/Theme/Backend/Lang/en.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => 'Active', + ':status2' => 'Inactive', + ':status3' => 'Damaged', + ':status4' => 'Out of order', + 'Accounting' => '', + 'Addition' => '', + 'Address' => '', + 'Addresses' => '', + 'Africa' => '', + 'AllCustomers' => '', + 'America' => '', + 'Analyse' => '', + 'AreaManager' => '', + 'Articlegroup' => '', + 'Articles' => '', + 'Asia' => '', + 'Attribute' => '', + 'Attributes' => 'Attributes', + 'Balance' => '', + 'BaseTime' => '', + 'Bills' => '', + 'Bonus' => '', + 'Business' => '', + 'CIS' => '', + 'CLV' => '', + 'Calendar' => '', + 'City' => '', + 'Client' => '', + 'ClientID' => '', + 'Clients' => '', + 'ComparisonTime' => '', + 'Contact' => '', + 'Costs' => 'Costs', + 'Country' => '', + 'Created' => '', + 'CreatedAt' => '', + 'CreditRating' => '', + 'Creditcard' => '', + 'Customers' => '', + 'DSO' => '', + 'Date' => 'Date', + 'Default' => '', + 'Delivery' => '', + 'Description' => '', + 'Discount' => '', + 'DiscountBonus' => '', + 'DiscountP' => '', + 'Documents' => '', + 'Driver' => 'Driver', + 'Drivers' => 'Drivers', + 'Due' => '', + 'Email' => '', + 'End' => 'End', + 'Europe' => '', + 'Fax' => '', + 'Files' => 'Files', + 'Filter' => '', + 'Freightage' => '', + 'From' => '', + 'Group' => '', + 'History' => 'History', + 'ID' => '', + 'Info' => '', + 'Inspections' => 'Inspections', + 'Invoice' => '', + 'Invoices' => '', + 'IsDefault' => '', + 'Items' => '', + 'LastContact' => '', + 'LastOrder' => '', + 'LeasingFee' => 'Leasing Fee', + 'Log' => '', + 'Logs' => '', + 'LostCustomers' => '', + 'MRR' => '', + 'MTDSales' => '', + 'Make' => 'Make', + 'Margin' => '', + 'Messages' => '', + 'Milage' => 'Milage', + 'Model' => 'Model', + 'Modified' => '', + 'Modules' => '', + 'Name' => 'Name', + 'Name1' => '', + 'Name2' => '', + 'Name3' => '', + 'Net' => '', + 'NewCustomers' => '', + 'Notes' => 'Notes', + 'Number' => '', + 'Office' => '', + 'Other' => '', + 'Payment' => '', + 'PaymentTerm' => '', + 'Permission' => '', + 'Phone' => '', + 'Postal' => '', + 'Price' => '', + 'Prices' => '', + 'Private' => '', + 'Productgroup' => '', + 'Profile' => 'Profile', + 'Profit' => '', + 'Purchase' => '', + 'PurchasePrice' => 'Purchase Price', + 'Quantity' => '', + 'RecentInvoices' => '', + 'Region' => '', + 'Rep' => '', + 'Responsible' => 'Responsible', + 'Retention' => '', + 'Sales' => '', + 'Segment' => '', + 'Segments' => '', + 'Start' => 'Start', + 'Status' => 'Status', + 'Subtype' => '', + 'Support' => '', + 'Tags' => '', + 'Title' => '', + 'To' => '', + 'Total' => '', + 'TotalPrice' => '', + 'Type' => 'Type', + 'UnitPrice' => '', + 'Upcoming' => 'Upcoming', + 'VIN' => '', + 'Value' => '', + 'Vehicle' => 'Vehicle', + 'Vehicles' => 'Vehicles', + 'Vin' => 'Vin', + 'Website' => '', + 'Wire' => '', + 'YTDSales' => '', + 'Zip' => '', +]]; diff --git a/Theme/Backend/Lang/es.lang.php b/Theme/Backend/Lang/es.lang.php new file mode 100755 index 0000000..f842008 --- /dev/null +++ b/Theme/Backend/Lang/es.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Contabilidad', + 'Addition' => 'Adición', + 'Address' => 'Habla a', + 'Addresses' => 'Direcciones', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Gerente de área', + 'Articlegroup' => 'Grupo articulo', + 'Articles' => 'Artículos', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Equilibrio', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Prima', + 'Business' => 'Negocio', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv', + 'Calendar' => 'Calendario', + 'City' => 'Ciudad', + 'Client' => 'Cliente', + 'ClientID' => '#VALUE!', + 'Clients' => 'Clientela', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Contacto', + 'Costs' => '', + 'Country' => 'País', + 'Created' => 'Creado', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Calificación crediticia', + 'Creditcard' => 'Tarjeta de crédito', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'Fecha', + 'Default' => 'Defecto', + 'Delivery' => 'Entrega', + 'Description' => '', + 'Discount' => 'Descuento', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Descuento%', + 'Documents' => 'Documentos', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Vencer', + 'Email' => 'Correo electrónico', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Fax', + 'Files' => 'Archivos', + 'Filter' => 'Filtrar', + 'Freightage' => 'Flete', + 'From' => '', + 'Group' => 'Grupo', + 'History' => '', + 'ID' => 'IDENTIFICACIÓN', + 'Info' => 'Información', + 'Inspections' => '', + 'Invoice' => 'Factura', + 'Invoices' => 'Facturas', + 'IsDefault' => 'Es por defecto?', + 'Items' => '#VALUE!', + 'LastContact' => 'Último contacto', + 'LastOrder' => 'Último pedido', + 'LeasingFee' => '', + 'Log' => 'Tronco', + 'Logs' => 'Registros', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Mrr', + 'MTDSales' => 'Ventas MTD', + 'Make' => '', + 'Margin' => 'Margen', + 'Messages' => 'Mensajes', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Modificado', + 'Modules' => 'Módulos', + 'Name' => 'Nombre', + 'Name1' => 'Nombre1', + 'Name2' => 'Nombre2', + 'Name3' => 'Nombre3', + 'Net' => 'Red', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Notas', + 'Number' => 'Número', + 'Office' => 'Oficina', + 'Other' => '#VALUE!', + 'Payment' => 'Pago', + 'PaymentTerm' => 'Plazo de pago', + 'Permission' => 'Permiso', + 'Phone' => 'Teléfono', + 'Postal' => 'Postal', + 'Price' => 'Precio', + 'Prices' => 'Precios', + 'Private' => 'Privado', + 'Productgroup' => 'Grupo de productos', + 'Profile' => 'Perfil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Compra', + 'PurchasePrice' => '', + 'Quantity' => 'Cantidad', + 'RecentInvoices' => 'Facturas recientes', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Ventas', + 'Segment' => 'Segmento', + 'Segments' => 'Segmentos', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Subtipo', + 'Support' => 'Apoyo', + 'Tags' => 'Etiquetas', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Escribe', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Sitio web', + 'Wire' => 'Cable', + 'YTDSales' => 'Ytd ventas', + 'Zip' => 'Cremallera', +]]; diff --git a/Theme/Backend/Lang/fi.lang.php b/Theme/Backend/Lang/fi.lang.php new file mode 100755 index 0000000..48a170e --- /dev/null +++ b/Theme/Backend/Lang/fi.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Kirjanpito', + 'Addition' => 'Lisäys', + 'Address' => 'Osoite', + 'Addresses' => 'Osoitteet', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Aluejohtaja', + 'Articlegroup' => 'ArticleGroup', + 'Articles' => 'Artikkelit', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Saldo', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bonus', + 'Business' => 'Liiketoiminta', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv', + 'Calendar' => 'Kalenteri', + 'City' => 'Kaupunki', + 'Client' => 'Asiakas', + 'ClientID' => '#VALUE!', + 'Clients' => 'Asiakkaat', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Ottaa yhteyttä', + 'Costs' => '', + 'Country' => 'Maa', + 'Created' => 'Luotu', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Luottoluokitus', + 'Creditcard' => 'Luottokortti', + 'Customers' => '#VALUE!', + 'DSO' => 'Dso', + 'Date' => 'Päivämäärä', + 'Default' => 'Oletusarvo', + 'Delivery' => 'Toimitus', + 'Description' => '', + 'Discount' => 'Alennus', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Alennus %', + 'Documents' => 'Asiakirjat', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Takia', + 'Email' => 'Sähköposti', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Faksi', + 'Files' => 'Tiedostot', + 'Filter' => 'Suodattaa', + 'Freightage' => 'Rahti', + 'From' => '', + 'Group' => 'Ryhmä', + 'History' => '', + 'ID' => 'Id', + 'Info' => 'Tiedot', + 'Inspections' => '', + 'Invoice' => 'Lasku', + 'Invoices' => 'Laskut', + 'IsDefault' => 'On oletusarvo?', + 'Items' => '#VALUE!', + 'LastContact' => 'Viimeinen yhteystieto', + 'LastOrder' => 'Viimeinen tilaus', + 'LeasingFee' => '', + 'Log' => 'Hirsi', + 'Logs' => 'Lokit', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Mrr', + 'MTDSales' => 'MTD-myynti', + 'Make' => '', + 'Margin' => 'Marginaali', + 'Messages' => 'Viestit', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Muokattu', + 'Modules' => 'Moduulit', + 'Name' => 'Nimi', + 'Name1' => 'Nimi1', + 'Name2' => 'Nimi2', + 'Name3' => 'Nimi33', + 'Net' => 'Netto', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Toteaa', + 'Number' => 'Määrä', + 'Office' => 'Toimisto', + 'Other' => '#VALUE!', + 'Payment' => 'Maksu', + 'PaymentTerm' => 'Maksuehto', + 'Permission' => 'Lupa', + 'Phone' => 'Puhelin', + 'Postal' => 'Posti-', + 'Price' => 'Hinta', + 'Prices' => 'Hinnat', + 'Private' => 'Yksityinen', + 'Productgroup' => 'Tuoteryhmä', + 'Profile' => 'Profiili', + 'Profit' => '#VALUE!', + 'Purchase' => 'Ostaa', + 'PurchasePrice' => '', + 'Quantity' => 'Määrä', + 'RecentInvoices' => 'Viimeaikaiset laskut', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Myynti', + 'Segment' => 'Segmentti', + 'Segments' => 'Segmentit', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Alatyyppi', + 'Support' => 'Tuki', + 'Tags' => 'Tunnisteet', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Tyyppi', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Verkkosivusto', + 'Wire' => 'Lanka', + 'YTDSales' => 'YTD-myynti', + 'Zip' => 'Postinumero', +]]; diff --git a/Theme/Backend/Lang/fr.lang.php b/Theme/Backend/Lang/fr.lang.php new file mode 100755 index 0000000..01b1209 --- /dev/null +++ b/Theme/Backend/Lang/fr.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Comptabilité', + 'Addition' => 'Une addition', + 'Address' => 'Adresse', + 'Addresses' => 'Adresses', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Chef de secteur', + 'Articlegroup' => 'Articlegroup', + 'Articles' => 'Des articles', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Équilibre', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Prime', + 'Business' => 'Entreprise', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv', + 'Calendar' => 'Calendrier', + 'City' => 'Ville', + 'Client' => 'Client', + 'ClientID' => '#VALUE!', + 'Clients' => 'Clients', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Contact', + 'Costs' => '', + 'Country' => 'Pays', + 'Created' => 'Établi', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Cote de crédit', + 'Creditcard' => 'Carte de crédit', + 'Customers' => '#VALUE!', + 'DSO' => 'Dso', + 'Date' => 'Date', + 'Default' => 'Défaut', + 'Delivery' => 'Livraison', + 'Description' => '', + 'Discount' => 'Remise', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Remise %', + 'Documents' => 'Documents', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Dû', + 'Email' => 'E-mail', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Fax', + 'Files' => 'Des dossiers', + 'Filter' => 'Filtre', + 'Freightage' => 'Fret', + 'From' => '', + 'Group' => 'Grouper', + 'History' => '', + 'ID' => 'identifiant', + 'Info' => 'Info', + 'Inspections' => '', + 'Invoice' => 'Facture d\'achat', + 'Invoices' => 'Factures', + 'IsDefault' => 'Est par défaut?', + 'Items' => '#VALUE!', + 'LastContact' => 'Dernier contact', + 'LastOrder' => 'Dernière commande', + 'LeasingFee' => '', + 'Log' => 'Enregistrer', + 'Logs' => 'Journaux', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Mrr', + 'MTDSales' => 'Ventes MTD', + 'Make' => '', + 'Margin' => 'Marge', + 'Messages' => 'messages', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Modifié', + 'Modules' => 'Modules', + 'Name' => 'Nom', + 'Name1' => 'Nom1', + 'Name2' => 'Nom2', + 'Name3' => 'Nom3', + 'Net' => 'Rapporter', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Remarques', + 'Number' => 'Nombre', + 'Office' => 'Bureau', + 'Other' => '#VALUE!', + 'Payment' => 'Paiement', + 'PaymentTerm' => 'Terme de paiement', + 'Permission' => 'Autorisation', + 'Phone' => 'Téléphoner', + 'Postal' => 'Postal', + 'Price' => 'Prix', + 'Prices' => 'Des prix', + 'Private' => 'Privé', + 'Productgroup' => 'Groupe de produits', + 'Profile' => 'Profil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Acheter', + 'PurchasePrice' => '', + 'Quantity' => 'Quantité', + 'RecentInvoices' => 'Factures récentes', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Ventes', + 'Segment' => 'Segment', + 'Segments' => 'Segments', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Sous-type', + 'Support' => 'Soutien', + 'Tags' => 'Mots clés', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Taper', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Site Internet', + 'Wire' => 'Fil', + 'YTDSales' => 'Ventes YTD', + 'Zip' => 'Zipper', +]]; diff --git a/Theme/Backend/Lang/hu.lang.php b/Theme/Backend/Lang/hu.lang.php new file mode 100755 index 0000000..4c78940 --- /dev/null +++ b/Theme/Backend/Lang/hu.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Könyvelés', + 'Addition' => 'Kiegészítés', + 'Address' => 'Cím', + 'Addresses' => 'Címek', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Területi menedzser', + 'Articlegroup' => 'Gyerekcsoport', + 'Articles' => 'Árucikkek', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Egyensúly', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bónusz', + 'Business' => 'Üzleti', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv', + 'Calendar' => 'Naptár', + 'City' => 'Város', + 'Client' => 'Ügyfél', + 'ClientID' => '#VALUE!', + 'Clients' => 'Kliensek', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Kapcsolatba lépni', + 'Costs' => '', + 'Country' => 'Ország', + 'Created' => 'Létrehozott', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Hitelminősítő', + 'Creditcard' => 'Hitelkártya', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'Dátum', + 'Default' => 'Alapértelmezett', + 'Delivery' => 'Szállítás', + 'Description' => '', + 'Discount' => 'Kedvezmény', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Árengedmény%', + 'Documents' => 'Dokumentumok', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Esedékes', + 'Email' => 'Email', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Fax', + 'Files' => 'Fájlok', + 'Filter' => 'Szűrő', + 'Freightage' => 'Fuvardíj', + 'From' => '', + 'Group' => 'Csoport', + 'History' => '', + 'ID' => 'Idézés', + 'Info' => 'Információ', + 'Inspections' => '', + 'Invoice' => 'Számla', + 'Invoices' => 'Számlák', + 'IsDefault' => 'Alapértelmezett?', + 'Items' => '#VALUE!', + 'LastContact' => 'Utolsó kapcsolat', + 'LastOrder' => 'Utolsó rendelés', + 'LeasingFee' => '', + 'Log' => 'Napló', + 'Logs' => 'Naplók', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Mrr', + 'MTDSales' => 'MTD értékesítés', + 'Make' => '', + 'Margin' => 'Árrés', + 'Messages' => 'üzenetek', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Módosított', + 'Modules' => 'Modulok', + 'Name' => 'Név', + 'Name1' => 'Név1', + 'Name2' => 'NAME2', + 'Name3' => 'Név3', + 'Net' => 'Háló', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Jegyzetek', + 'Number' => 'Szám', + 'Office' => 'Hivatal', + 'Other' => '#VALUE!', + 'Payment' => 'Fizetés', + 'PaymentTerm' => 'Fizetési határidő', + 'Permission' => 'Engedély', + 'Phone' => 'Telefon', + 'Postal' => 'Postai', + 'Price' => 'Ár', + 'Prices' => 'Árak', + 'Private' => 'Magán', + 'Productgroup' => 'Termékcsoport', + 'Profile' => 'Profil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Vásárlás', + 'PurchasePrice' => '', + 'Quantity' => 'Mennyiség', + 'RecentInvoices' => 'Legutóbbi számlák', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Értékesítés', + 'Segment' => 'Szegmens', + 'Segments' => 'Szegmensek', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Altípus', + 'Support' => 'Támogatás', + 'Tags' => 'Címkék', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'típus', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Weboldal', + 'Wire' => 'Huzal', + 'YTDSales' => 'YTD értékesítés', + 'Zip' => 'Postai irányítószám', +]]; diff --git a/Theme/Backend/Lang/it.lang.php b/Theme/Backend/Lang/it.lang.php new file mode 100755 index 0000000..6eb9b3c --- /dev/null +++ b/Theme/Backend/Lang/it.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Contabilità', + 'Addition' => 'Aggiunta', + 'Address' => 'Indirizzo', + 'Addresses' => 'Indirizzi', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Area Manager', + 'Articlegroup' => 'Art.group.', + 'Articles' => 'Artificio', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Bilancia', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bonus.', + 'Business' => 'Affare', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv.', + 'Calendar' => 'Calendario', + 'City' => 'Città', + 'Client' => 'Cliente', + 'ClientID' => '#VALUE!', + 'Clients' => 'Clienti', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Contatto', + 'Costs' => '', + 'Country' => 'Nazione', + 'Created' => 'Creato', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Rating del credito', + 'Creditcard' => 'Carta di credito', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'Data', + 'Default' => 'Predefinito', + 'Delivery' => 'Consegna', + 'Description' => '', + 'Discount' => 'Sconto', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Sconto%', + 'Documents' => 'Documenti', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Dovuto', + 'Email' => 'E-mail', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Fax', + 'Files' => 'File', + 'Filter' => 'Filtro', + 'Freightage' => 'Liberare', + 'From' => '', + 'Group' => 'Gruppo', + 'History' => '', + 'ID' => 'ID', + 'Info' => 'Informazioni', + 'Inspections' => '', + 'Invoice' => 'Fattura', + 'Invoices' => 'Fatture', + 'IsDefault' => 'È predefinito?', + 'Items' => '#VALUE!', + 'LastContact' => 'Ultimo contatto', + 'LastOrder' => 'Ultimo ordine', + 'LeasingFee' => '', + 'Log' => 'Tronco d\'albero', + 'Logs' => 'Logs.', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Mrr.', + 'MTDSales' => 'Vendite di mtd.', + 'Make' => '', + 'Margin' => 'Margine', + 'Messages' => 'Messaggi', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Modificati', + 'Modules' => 'Moduli', + 'Name' => 'Nome', + 'Name1' => 'Nome1.', + 'Name2' => 'Nome2.', + 'Name3' => 'Nome3.', + 'Net' => 'Rete', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Appunti', + 'Number' => 'Numero', + 'Office' => 'Ufficio', + 'Other' => '#VALUE!', + 'Payment' => 'Pagamento', + 'PaymentTerm' => 'Termine di pagamento', + 'Permission' => 'Autorizzazione', + 'Phone' => 'Telefono', + 'Postal' => 'postale', + 'Price' => 'Prezzo', + 'Prices' => 'Prezzi', + 'Private' => 'Privato', + 'Productgroup' => 'Gruppo di prodotti', + 'Profile' => 'Profilo', + 'Profit' => '#VALUE!', + 'Purchase' => 'Acquistare', + 'PurchasePrice' => '', + 'Quantity' => 'Quantità', + 'RecentInvoices' => 'Recenti fatture', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Saldi', + 'Segment' => 'Segmento', + 'Segments' => 'Segmenti', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Sottotipo', + 'Support' => 'Supporto', + 'Tags' => 'Tags.', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Tipo', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Sito web', + 'Wire' => 'Filo', + 'YTDSales' => 'Vendite di ytd.', + 'Zip' => 'Cerniera lampo', +]]; diff --git a/Theme/Backend/Lang/ja.lang.php b/Theme/Backend/Lang/ja.lang.php new file mode 100755 index 0000000..0eaa6c9 --- /dev/null +++ b/Theme/Backend/Lang/ja.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => '会計', + 'Addition' => '添加', + 'Address' => '住所', + 'Addresses' => 'アドレス', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'エリアマネージャー', + 'Articlegroup' => '記事グループ', + 'Articles' => 'articles', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'バランス', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'ボーナス', + 'Business' => '仕事', + 'CIS' => '#VALUE!', + 'CLV' => 'cl cl', + 'Calendar' => 'カレンダー', + 'City' => '市', + 'Client' => 'クライアント', + 'ClientID' => '#VALUE!', + 'Clients' => 'クライアント', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'コンタクト', + 'Costs' => '', + 'Country' => '国', + 'Created' => '作成した', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => '信用格付け', + 'Creditcard' => 'クレジットカード', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => '日にち', + 'Default' => 'ディフォルト', + 'Delivery' => '配達', + 'Description' => '', + 'Discount' => '割引', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => '割引 %', + 'Documents' => '文書', + 'Driver' => '', + 'Drivers' => '', + 'Due' => '期限', + 'Email' => 'Eメール', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'ファックス', + 'Files' => 'ファイル', + 'Filter' => 'フィルター', + 'Freightage' => 'fre fre', + 'From' => '', + 'Group' => 'グループ', + 'History' => '', + 'ID' => 'id', + 'Info' => '情報', + 'Inspections' => '', + 'Invoice' => '請求書', + 'Invoices' => '請求書', + 'IsDefault' => 'デフォルトですか?', + 'Items' => '#VALUE!', + 'LastContact' => '最後の連絡先', + 'LastOrder' => '最後の順序', + 'LeasingFee' => '', + 'Log' => 'ログ', + 'Logs' => 'ログ', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR.', + 'MTDSales' => 'MTDセールス', + 'Make' => '', + 'Margin' => 'マージン', + 'Messages' => 'メッセージ', + 'Milage' => '', + 'Model' => '', + 'Modified' => '修正された', + 'Modules' => 'モジュール', + 'Name' => '名前', + 'Name1' => '名前1', + 'Name2' => '名前2', + 'Name3' => '名前3', + 'Net' => 'ネット', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'ノート', + 'Number' => '番号', + 'Office' => 'オフィス', + 'Other' => '#VALUE!', + 'Payment' => '支払い', + 'PaymentTerm' => '支払条件', + 'Permission' => '許可', + 'Phone' => '電話', + 'Postal' => '郵便', + 'Price' => '価格', + 'Prices' => '価格', + 'Private' => '民間', + 'Productgroup' => '製品グループ', + 'Profile' => 'プロフィール', + 'Profit' => '#VALUE!', + 'Purchase' => '購入', + 'PurchasePrice' => '', + 'Quantity' => '量', + 'RecentInvoices' => '最近の請求書', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => '売り返り', + 'Segment' => 'セグメント', + 'Segments' => 'セグメント', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'サブタイプ', + 'Support' => 'サポート', + 'Tags' => 'タグ', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'タイプ', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Webサイト', + 'Wire' => 'ワイヤー', + 'YTDSales' => 'ytd売上高', + 'Zip' => 'ジップ', +]]; diff --git a/Theme/Backend/Lang/ko.lang.php b/Theme/Backend/Lang/ko.lang.php new file mode 100755 index 0000000..46ca9ee --- /dev/null +++ b/Theme/Backend/Lang/ko.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => '회계', + 'Addition' => '덧셈', + 'Address' => '주소', + 'Addresses' => '구애', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => '구역 책임자', + 'Articlegroup' => '기사 그룹', + 'Articles' => '조항', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => '균형', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => '보너스', + 'Business' => '사업', + 'CIS' => '#VALUE!', + 'CLV' => 'CLV.', + 'Calendar' => '달력', + 'City' => '도시', + 'Client' => '고객', + 'ClientID' => '#VALUE!', + 'Clients' => '클라이언트', + 'ComparisonTime' => '#VALUE!', + 'Contact' => '연락하다', + 'Costs' => '', + 'Country' => '국가', + 'Created' => '만들어진', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => '신용 등급', + 'Creditcard' => '신용 카드', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => '날짜', + 'Default' => '기본', + 'Delivery' => '배달', + 'Description' => '', + 'Discount' => '할인', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => '할인 %', + 'Documents' => '서류', + 'Driver' => '', + 'Drivers' => '', + 'Due' => '로 인한', + 'Email' => '이메일', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => '팩스', + 'Files' => '파일', + 'Filter' => '필터', + 'Freightage' => '화물', + 'From' => '', + 'Group' => '그룹', + 'History' => '', + 'ID' => 'ID', + 'Info' => '정보', + 'Inspections' => '', + 'Invoice' => '송장', + 'Invoices' => '송장', + 'IsDefault' => '기본값은 무엇입니까?', + 'Items' => '#VALUE!', + 'LastContact' => '마지막 연락처', + 'LastOrder' => '마지막 주문', + 'LeasingFee' => '', + 'Log' => '통나무', + 'Logs' => '로그인', + 'LostCustomers' => '#VALUE!', + 'MRR' => '부서', + 'MTDSales' => 'MTD 판매', + 'Make' => '', + 'Margin' => '여유', + 'Messages' => '메시지', + 'Milage' => '', + 'Model' => '', + 'Modified' => '수정', + 'Modules' => '모듈', + 'Name' => '이름', + 'Name1' => 'name1.', + 'Name2' => 'name2.', + 'Name3' => 'Name3.', + 'Net' => '그물', + 'NewCustomers' => '#VALUE!', + 'Notes' => '노트', + 'Number' => '숫자', + 'Office' => '사무실', + 'Other' => '#VALUE!', + 'Payment' => '지불', + 'PaymentTerm' => '지불 기간', + 'Permission' => '허가', + 'Phone' => '핸드폰', + 'Postal' => '우편 엽서', + 'Price' => '가격', + 'Prices' => '물가', + 'Private' => '사적인', + 'Productgroup' => '제품 그룹', + 'Profile' => '프로필', + 'Profit' => '#VALUE!', + 'Purchase' => '구입', + 'PurchasePrice' => '', + 'Quantity' => '수량', + 'RecentInvoices' => '최근 송장', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => '매상', + 'Segment' => '분절', + 'Segments' => '세그먼트', + 'Start' => '', + 'Status' => '', + 'Subtype' => '하위 유형', + 'Support' => '지원하다', + 'Tags' => '태그', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => '유형', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => '웹 사이트', + 'Wire' => '철사', + 'YTDSales' => 'YTD 판매', + 'Zip' => '지퍼', +]]; diff --git a/Theme/Backend/Lang/no.lang.php b/Theme/Backend/Lang/no.lang.php new file mode 100755 index 0000000..ebacbd6 --- /dev/null +++ b/Theme/Backend/Lang/no.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Regnskap', + 'Addition' => 'Addisjon', + 'Address' => 'Adresse', + 'Addresses' => 'Adresser', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Områdeansvarlig', + 'Articlegroup' => 'Articregroup.', + 'Articles' => 'Artikler', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Balansere', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bonus', + 'Business' => 'Virksomhet', + 'CIS' => '#VALUE!', + 'CLV' => 'CLV.', + 'Calendar' => 'Kalender', + 'City' => 'By', + 'Client' => 'Klient', + 'ClientID' => '#VALUE!', + 'Clients' => 'Klienter', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Kontakt', + 'Costs' => '', + 'Country' => 'Land', + 'Created' => 'Opprettet', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Kredittvurdering', + 'Creditcard' => 'Kredittkort', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'Dato', + 'Default' => 'Misligholde', + 'Delivery' => 'Leveranse', + 'Description' => '', + 'Discount' => 'Rabatt', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Rabatt%', + 'Documents' => 'Dokumenter', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'På grunn av det', + 'Email' => 'E-post', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Faks', + 'Files' => 'Filer', + 'Filter' => 'Filter', + 'Freightage' => 'Frakt', + 'From' => '', + 'Group' => 'Gruppe', + 'History' => '', + 'ID' => 'Id.', + 'Info' => 'Info.', + 'Inspections' => '', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturaer', + 'IsDefault' => 'Er standard?', + 'Items' => '#VALUE!', + 'LastContact' => 'Siste kontakt', + 'LastOrder' => 'Siste bestilling', + 'LeasingFee' => '', + 'Log' => 'Logg', + 'Logs' => 'Tømmerstokker', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR.', + 'MTDSales' => 'MTD-salg', + 'Make' => '', + 'Margin' => 'Margin', + 'Messages' => 'Meldinger', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Endret', + 'Modules' => 'Moduler', + 'Name' => 'Navn', + 'Name1' => 'Navn1.', + 'Name2' => 'NAME2.', + 'Name3' => 'Navn3.', + 'Net' => 'Nett', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Notater', + 'Number' => 'Nummer', + 'Office' => 'Kontor', + 'Other' => '#VALUE!', + 'Payment' => 'innbetaling', + 'PaymentTerm' => 'Betalingsperiode', + 'Permission' => 'Tillatelse', + 'Phone' => 'Telefonen', + 'Postal' => 'Postal.', + 'Price' => 'Pris', + 'Prices' => 'Prisene', + 'Private' => 'Privat', + 'Productgroup' => 'Produktgruppe', + 'Profile' => 'Profil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Kjøp', + 'PurchasePrice' => '', + 'Quantity' => 'Mengde', + 'RecentInvoices' => 'Nylige fakturaer', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Salg', + 'Segment' => 'Segmentet', + 'Segments' => 'Segmenter', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Subtype.', + 'Support' => 'Brukerstøtte', + 'Tags' => 'Tags.', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Type', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Nettside', + 'Wire' => 'Metalltråd', + 'YTDSales' => 'YTD-salg', + 'Zip' => 'Glidelås', +]]; diff --git a/Theme/Backend/Lang/pl.lang.php b/Theme/Backend/Lang/pl.lang.php new file mode 100755 index 0000000..7e0d63a --- /dev/null +++ b/Theme/Backend/Lang/pl.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Rachunkowość', + 'Addition' => 'Dodatek', + 'Address' => 'Adres', + 'Addresses' => 'Adresy', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Dyrektor Regionalny', + 'Articlegroup' => 'Artykuł', + 'Articles' => 'Artykuły', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Balansować', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Premia', + 'Business' => 'Biznes', + 'CIS' => '#VALUE!', + 'CLV' => 'CLV.', + 'Calendar' => 'Kalendarz', + 'City' => 'Miasto', + 'Client' => 'Klient', + 'ClientID' => '#VALUE!', + 'Clients' => 'Klienci.', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Kontakt', + 'Costs' => '', + 'Country' => 'Kraj', + 'Created' => 'Utworzony', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Rating kredytowy', + 'Creditcard' => 'Karta kredytowa', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'Data', + 'Default' => 'Domyślna', + 'Delivery' => 'Dostawa', + 'Description' => '', + 'Discount' => 'Zniżka', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Zniżka %', + 'Documents' => 'Dokumenty', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Z powodu', + 'Email' => 'E-mail', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Faks', + 'Files' => 'Pliki', + 'Filter' => 'Filtr', + 'Freightage' => 'Frachtowanie', + 'From' => '', + 'Group' => 'Grupa', + 'History' => '', + 'ID' => 'ID', + 'Info' => 'Info', + 'Inspections' => '', + 'Invoice' => 'Faktura', + 'Invoices' => 'Faktury', + 'IsDefault' => 'Jest domyślnie?', + 'Items' => '#VALUE!', + 'LastContact' => 'Ostatni kontakt', + 'LastOrder' => 'Ostatnie zamówienie', + 'LeasingFee' => '', + 'Log' => 'Dziennik', + 'Logs' => 'Kłody', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR.', + 'MTDSales' => 'Sprzedaż MTD.', + 'Make' => '', + 'Margin' => 'Margines', + 'Messages' => 'Wiadomości', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Modyfikowany', + 'Modules' => 'Moduły', + 'Name' => 'Nazwa', + 'Name1' => 'Nazwa1.', + 'Name2' => 'Nazwa2.', + 'Name3' => 'Nazwa3.', + 'Net' => 'Internet', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Notatki', + 'Number' => 'Numer', + 'Office' => 'Gabinet', + 'Other' => '#VALUE!', + 'Payment' => 'Zapłata', + 'PaymentTerm' => 'Termin płatności', + 'Permission' => 'Pozwolenie', + 'Phone' => 'Telefon', + 'Postal' => 'Pocztowy', + 'Price' => 'Cena £', + 'Prices' => 'Ceny', + 'Private' => 'Prywatny', + 'Productgroup' => 'Grupa produktów', + 'Profile' => 'Profil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Zakup', + 'PurchasePrice' => '', + 'Quantity' => 'Ilość', + 'RecentInvoices' => 'Ostatnie faktury.', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Obroty', + 'Segment' => 'Człon', + 'Segments' => 'Segmenty', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Podtyp', + 'Support' => 'Wsparcie', + 'Tags' => 'Tagi.', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Rodzaj', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Stronie internetowej', + 'Wire' => 'Drut', + 'YTDSales' => 'Sprzedaż Ytd.', + 'Zip' => 'Zamek błyskawiczny', +]]; diff --git a/Theme/Backend/Lang/pt.lang.php b/Theme/Backend/Lang/pt.lang.php new file mode 100755 index 0000000..21b4391 --- /dev/null +++ b/Theme/Backend/Lang/pt.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Contabilidade', + 'Addition' => 'Adição', + 'Address' => 'Endereço', + 'Addresses' => 'Endereços', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Gerente da área', + 'Articlegroup' => 'ArticleGroup', + 'Articles' => 'Artigos', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Equilíbrio', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bônus', + 'Business' => 'O negócio', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv.', + 'Calendar' => 'Calendário', + 'City' => 'Cidade', + 'Client' => 'Cliente', + 'ClientID' => '#VALUE!', + 'Clients' => 'Clientes', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Contato', + 'Costs' => '', + 'Country' => 'País', + 'Created' => 'Criado', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Rating de crédito', + 'Creditcard' => 'Cartão de crédito', + 'Customers' => '#VALUE!', + 'DSO' => 'Dso.', + 'Date' => 'Encontro', + 'Default' => 'Padrão', + 'Delivery' => 'Entrega', + 'Description' => '', + 'Discount' => 'Desconto', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Desconto%', + 'Documents' => 'Documentos', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Vencimento', + 'Email' => 'E-mail', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Fax', + 'Files' => 'arquivos', + 'Filter' => 'Filtro', + 'Freightage' => 'Freightage', + 'From' => '', + 'Group' => 'Grupo', + 'History' => '', + 'ID' => 'identificação', + 'Info' => 'Info', + 'Inspections' => '', + 'Invoice' => 'Fatura', + 'Invoices' => 'Faturas', + 'IsDefault' => 'É padrão?', + 'Items' => '#VALUE!', + 'LastContact' => 'Último contato.', + 'LastOrder' => 'Último pedido', + 'LeasingFee' => '', + 'Log' => 'Registro', + 'Logs' => 'Histórico', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR.', + 'MTDSales' => 'Sales Mtd.', + 'Make' => '', + 'Margin' => 'Margem', + 'Messages' => 'Mensagens', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Modificado', + 'Modules' => 'Módulos.', + 'Name' => 'Nome', + 'Name1' => 'Nome1.', + 'Name2' => 'Nome2.', + 'Name3' => 'Nome3.', + 'Net' => 'Internet', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Notas', + 'Number' => 'Número', + 'Office' => 'Escritório', + 'Other' => '#VALUE!', + 'Payment' => 'Pagamento', + 'PaymentTerm' => 'Termo de pagamento', + 'Permission' => 'Permissão', + 'Phone' => 'Telefone', + 'Postal' => 'Postal', + 'Price' => 'Preço', + 'Prices' => 'Preços', + 'Private' => 'Privado', + 'Productgroup' => 'Grupo de produtos', + 'Profile' => 'Perfil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Comprar', + 'PurchasePrice' => '', + 'Quantity' => 'Quantidade', + 'RecentInvoices' => 'Faturas recentes', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Vendas', + 'Segment' => 'Segmento', + 'Segments' => 'Segmentos', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Subtipo', + 'Support' => 'Apoio, suporte', + 'Tags' => 'Tag', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Modelo', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Local na rede Internet', + 'Wire' => 'Fio', + 'YTDSales' => 'Vendas do ano', + 'Zip' => 'Fecho eclair', +]]; diff --git a/Theme/Backend/Lang/ru.lang.php b/Theme/Backend/Lang/ru.lang.php new file mode 100755 index 0000000..4ec258f --- /dev/null +++ b/Theme/Backend/Lang/ru.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Учет', + 'Addition' => 'Добавление', + 'Address' => 'Адрес', + 'Addresses' => 'Адреса', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Региональный менеджер', + 'Articlegroup' => 'Staregroup.', + 'Articles' => 'Статьи', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Остаток средств', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Бонус', + 'Business' => 'Бизнес', + 'CIS' => '#VALUE!', + 'CLV' => 'Каблук', + 'Calendar' => 'Календарь', + 'City' => 'Город', + 'Client' => 'Клиент', + 'ClientID' => '#VALUE!', + 'Clients' => 'Клиенты', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Контакт', + 'Costs' => '', + 'Country' => 'Страна', + 'Created' => 'Созданный', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Кредитный рейтинг', + 'Creditcard' => 'Кредитная карта', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'Дата', + 'Default' => 'Дефолт', + 'Delivery' => 'Доставка', + 'Description' => '', + 'Discount' => 'Скидка', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Скидка %', + 'Documents' => 'Документы', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Должное', + 'Email' => 'Электронное письмо', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Факс', + 'Files' => 'Файлы', + 'Filter' => 'Фильтр', + 'Freightage' => 'Фрахты', + 'From' => '', + 'Group' => 'Группа', + 'History' => '', + 'ID' => 'Я БЫ', + 'Info' => 'Информация', + 'Inspections' => '', + 'Invoice' => 'Счет', + 'Invoices' => 'Счета', + 'IsDefault' => 'По умолчанию?', + 'Items' => '#VALUE!', + 'LastContact' => 'Последний контакт', + 'LastOrder' => 'Последний заказ', + 'LeasingFee' => '', + 'Log' => 'Бревно', + 'Logs' => 'Журналы', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR', + 'MTDSales' => 'MTD Sales.', + 'Make' => '', + 'Margin' => 'Допуск', + 'Messages' => 'Сообщения', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Модифицированный', + 'Modules' => 'Модули', + 'Name' => 'Имя', + 'Name1' => 'Имя1.', + 'Name2' => 'Имя2.', + 'Name3' => 'Имя3.', + 'Net' => 'Сеть', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Примечания', + 'Number' => 'Число', + 'Office' => 'Офис', + 'Other' => '#VALUE!', + 'Payment' => 'Оплата', + 'PaymentTerm' => 'Условия оплаты', + 'Permission' => 'Разрешение', + 'Phone' => 'Телефон', + 'Postal' => 'Почтовый', + 'Price' => 'Цена', + 'Prices' => 'Цены', + 'Private' => 'Частный', + 'Productgroup' => 'Группа товаров', + 'Profile' => 'Профиль', + 'Profit' => '#VALUE!', + 'Purchase' => 'Покупка', + 'PurchasePrice' => '', + 'Quantity' => 'Количество', + 'RecentInvoices' => 'Недавние счета', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Продажи', + 'Segment' => 'Сегмент', + 'Segments' => 'Сегменты', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Подтип', + 'Support' => 'Служба поддержки', + 'Tags' => 'Теги', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Тип', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Веб-сайт', + 'Wire' => 'Проволока', + 'YTDSales' => 'YTD Sales.', + 'Zip' => 'Zip.', +]]; diff --git a/Theme/Backend/Lang/sv.lang.php b/Theme/Backend/Lang/sv.lang.php new file mode 100755 index 0000000..eca57dc --- /dev/null +++ b/Theme/Backend/Lang/sv.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Bokföring', + 'Addition' => 'Tillägg', + 'Address' => 'Adress', + 'Addresses' => 'Adresser', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Områdeschef', + 'Articlegroup' => 'Artikelgrupp', + 'Articles' => 'Artiklar', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Balans', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bonus', + 'Business' => 'Företag', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv', + 'Calendar' => 'Kalender', + 'City' => 'Stad', + 'Client' => 'Klient', + 'ClientID' => '#VALUE!', + 'Clients' => 'Klienter', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Kontakt', + 'Costs' => '', + 'Country' => 'Land', + 'Created' => 'Skapad', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Kreditvärdighet', + 'Creditcard' => 'Kreditkort', + 'Customers' => '#VALUE!', + 'DSO' => 'Do', + 'Date' => 'Datum', + 'Default' => 'Standard', + 'Delivery' => 'Leverans', + 'Description' => '', + 'Discount' => 'Rabatt', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Rabatt%', + 'Documents' => 'Dokument', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'På grund av', + 'Email' => 'E-post', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Fax', + 'Files' => 'Filer', + 'Filter' => 'Filtrera', + 'Freightage' => 'Frakt', + 'From' => '', + 'Group' => 'Grupp', + 'History' => '', + 'ID' => 'Id', + 'Info' => 'Info', + 'Inspections' => '', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturor', + 'IsDefault' => 'Är standard?', + 'Items' => '#VALUE!', + 'LastContact' => 'Senaste kontakten', + 'LastOrder' => 'Sista beställningen', + 'LeasingFee' => '', + 'Log' => 'Logga', + 'Logs' => 'Loggar', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Mrr', + 'MTDSales' => 'MTD-försäljning', + 'Make' => '', + 'Margin' => 'Marginal', + 'Messages' => 'Budskap', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Ändrad', + 'Modules' => 'Moduler', + 'Name' => 'namn', + 'Name1' => 'Namn1', + 'Name2' => 'Namn2', + 'Name3' => 'Namn3', + 'Net' => 'Netto', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Anteckningar', + 'Number' => 'siffra', + 'Office' => 'Kontor', + 'Other' => '#VALUE!', + 'Payment' => 'Betalning', + 'PaymentTerm' => 'Betalningsvillkor', + 'Permission' => 'Tillstånd', + 'Phone' => 'Telefon', + 'Postal' => 'Post', + 'Price' => 'Pris', + 'Prices' => 'Priser', + 'Private' => 'Privat', + 'Productgroup' => 'Produktgrupp', + 'Profile' => 'Profil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Inköp', + 'PurchasePrice' => '', + 'Quantity' => 'Kvantitet', + 'RecentInvoices' => 'Nya fakturor', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Försäljning', + 'Segment' => 'Segmentet', + 'Segments' => 'Segment', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Subtyp', + 'Support' => 'Stöd', + 'Tags' => 'Tagg', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Typ', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Hemsida', + 'Wire' => 'Tråd', + 'YTDSales' => 'YTD-försäljning', + 'Zip' => 'Blixtlås', +]]; diff --git a/Theme/Backend/Lang/th.lang.php b/Theme/Backend/Lang/th.lang.php new file mode 100755 index 0000000..52faf86 --- /dev/null +++ b/Theme/Backend/Lang/th.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'การบัญชี', + 'Addition' => 'ส่วนที่เพิ่มเข้าไป', + 'Address' => 'ที่อยู่', + 'Addresses' => 'ที่อยู่', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'ผู้จัดการพื้นที่', + 'Articlegroup' => 'ArticleGroup', + 'Articles' => 'บทความ', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'สมดุล', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'โบนัส', + 'Business' => 'ธุรกิจ', + 'CIS' => '#VALUE!', + 'CLV' => 'clv', + 'Calendar' => 'ปฏิทิน', + 'City' => 'เมือง', + 'Client' => 'ลูกค้า', + 'ClientID' => '#VALUE!', + 'Clients' => 'ลูกค้า', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'ติดต่อ', + 'Costs' => '', + 'Country' => 'ประเทศ', + 'Created' => 'สร้าง', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'การจัดอันดับเครดิต', + 'Creditcard' => 'บัตรเครดิต', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'วันที่', + 'Default' => 'ค่าเริ่มต้น', + 'Delivery' => 'จัดส่ง', + 'Description' => '', + 'Discount' => 'การลดราคา', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'การลดราคา %', + 'Documents' => 'เอกสาร', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'เนื่องจาก', + 'Email' => 'อีเมล', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'แฟกซ์', + 'Files' => 'ไฟล์', + 'Filter' => 'กรอง', + 'Freightage' => 'การขนส่งสินค้า', + 'From' => '', + 'Group' => 'กลุ่ม', + 'History' => '', + 'ID' => 'id', + 'Info' => 'ข้อมูล', + 'Inspections' => '', + 'Invoice' => 'ใบแจ้งหนี้', + 'Invoices' => 'ใบแจ้งหนี้', + 'IsDefault' => 'เป็นค่าเริ่มต้น?', + 'Items' => '#VALUE!', + 'LastContact' => 'ติดต่อล่าสุด', + 'LastOrder' => 'คำสั่งสุดท้าย', + 'LeasingFee' => '', + 'Log' => 'บันทึก', + 'Logs' => 'การบันทึก', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR', + 'MTDSales' => 'ขาย MTD', + 'Make' => '', + 'Margin' => 'ระยะขอบ', + 'Messages' => 'ข้อความ', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'ที่ได้รับการแก้ไข', + 'Modules' => 'โมดูล', + 'Name' => 'ชื่อ', + 'Name1' => 'ชื่อ 1', + 'Name2' => 'ชื่อ 2', + 'Name3' => 'ชื่อ 3', + 'Net' => 'สุทธิ', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'หมายเหตุ', + 'Number' => 'ตัวเลข', + 'Office' => 'สำนักงาน', + 'Other' => '#VALUE!', + 'Payment' => 'การชำระเงิน', + 'PaymentTerm' => 'เงื่อนไขการชำระเงิน', + 'Permission' => 'การอนุญาต', + 'Phone' => 'โทรศัพท์', + 'Postal' => 'เกี่ยวกับการไปรษณีย์', + 'Price' => 'ราคา', + 'Prices' => 'ราคา', + 'Private' => 'ส่วนตัว', + 'Productgroup' => 'กลุ่มผลิตภัณฑ์', + 'Profile' => 'ประวัติโดยย่อ', + 'Profit' => '#VALUE!', + 'Purchase' => 'ซื้อ', + 'PurchasePrice' => '', + 'Quantity' => 'ปริมาณ', + 'RecentInvoices' => 'ใบแจ้งหนี้ล่าสุด', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'ฝ่ายขาย', + 'Segment' => 'ส่วน', + 'Segments' => 'กลุ่ม', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'ประเภทย่อย', + 'Support' => 'สนับสนุน', + 'Tags' => 'แท็ก', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'พิมพ์', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'เว็บไซต์', + 'Wire' => 'ลวด', + 'YTDSales' => 'ขาย YTD', + 'Zip' => 'ซิป', +]]; diff --git a/Theme/Backend/Lang/tr.lang.php b/Theme/Backend/Lang/tr.lang.php new file mode 100755 index 0000000..a0e6ff3 --- /dev/null +++ b/Theme/Backend/Lang/tr.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Muhasebe', + 'Addition' => 'İlave', + 'Address' => 'Adres', + 'Addresses' => 'Adresler', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Alan müdürü', + 'Articlegroup' => 'Makale grubu', + 'Articles' => 'Nesne', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Denge', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Bonus', + 'Business' => 'İşletme', + 'CIS' => '#VALUE!', + 'CLV' => 'Clv', + 'Calendar' => 'Takvim', + 'City' => 'Şehir', + 'Client' => 'Müşteri', + 'ClientID' => '#VALUE!', + 'Clients' => 'Müşteriler', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Temas', + 'Costs' => '', + 'Country' => 'Ülke', + 'Created' => 'Yaratılmış', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Kredi notu', + 'Creditcard' => 'Kredi kartı', + 'Customers' => '#VALUE!', + 'DSO' => 'Dso', + 'Date' => 'Tarih', + 'Default' => 'Varsayılan', + 'Delivery' => 'Teslimat', + 'Description' => '', + 'Discount' => 'İndirim', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'İndirim %', + 'Documents' => 'Belgeler', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Vadesi dolmuş', + 'Email' => 'E-posta', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Faks', + 'Files' => 'Dosyalar', + 'Filter' => 'Filtrelemek', + 'Freightage' => 'Yük', + 'From' => '', + 'Group' => 'Grup', + 'History' => '', + 'ID' => 'İD', + 'Info' => 'Bilgi', + 'Inspections' => '', + 'Invoice' => 'Fatura', + 'Invoices' => 'Faturalar', + 'IsDefault' => 'Varsayılan mı?', + 'Items' => '#VALUE!', + 'LastContact' => 'Son iletişim', + 'LastOrder' => 'Son sipariş', + 'LeasingFee' => '', + 'Log' => 'Kayıt', + 'Logs' => 'Kütükler', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Mrr', + 'MTDSales' => 'Mtd satışları', + 'Make' => '', + 'Margin' => 'Marj', + 'Messages' => 'Mesaj', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Değiştirilmiş', + 'Modules' => 'Modüller', + 'Name' => 'İsim', + 'Name1' => 'İsim1', + 'Name2' => 'İsim2', + 'Name3' => 'İsim3', + 'Net' => 'Ağ', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Notalar', + 'Number' => 'Numara', + 'Office' => 'Ofis', + 'Other' => '#VALUE!', + 'Payment' => 'Ödeme', + 'PaymentTerm' => 'Ödeme koşulu', + 'Permission' => 'İzin', + 'Phone' => 'Telefon', + 'Postal' => 'Posta', + 'Price' => 'Fiyat', + 'Prices' => 'Fiyat:% s', + 'Private' => 'Özel', + 'Productgroup' => 'Ürün grubu', + 'Profile' => 'Profil', + 'Profit' => '#VALUE!', + 'Purchase' => 'Satın alma', + 'PurchasePrice' => '', + 'Quantity' => 'Miktar', + 'RecentInvoices' => 'Son Faturalar', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Satış', + 'Segment' => 'Segment', + 'Segments' => 'Segmentler', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Alt tip', + 'Support' => 'Destek', + 'Tags' => 'Etiketler', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Tip', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'İnternet sitesi', + 'Wire' => 'Tel', + 'YTDSales' => 'YTD satışları', + 'Zip' => 'Zip', +]]; diff --git a/Theme/Backend/Lang/uk.lang.php b/Theme/Backend/Lang/uk.lang.php new file mode 100755 index 0000000..880c089 --- /dev/null +++ b/Theme/Backend/Lang/uk.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => 'Бухгалтерський облік', + 'Addition' => 'Додавання', + 'Address' => 'Адреса', + 'Addresses' => 'Адреси', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => 'Менеджер області', + 'Articlegroup' => 'Статтюгрупи', + 'Articles' => 'Статті', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => 'Баланс', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => 'Бонус', + 'Business' => 'Бізнес', + 'CIS' => '#VALUE!', + 'CLV' => 'Клоп', + 'Calendar' => 'Календар', + 'City' => 'Місто', + 'Client' => 'Клієнт', + 'ClientID' => '#VALUE!', + 'Clients' => 'Клієнти', + 'ComparisonTime' => '#VALUE!', + 'Contact' => 'Контакт', + 'Costs' => '', + 'Country' => 'Країна', + 'Created' => 'Створений', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => 'Кредитний рейтинг', + 'Creditcard' => 'Кредитна карта', + 'Customers' => '#VALUE!', + 'DSO' => 'Дз', + 'Date' => 'Дата', + 'Default' => 'За замовчуванням', + 'Delivery' => 'Доставка', + 'Description' => '', + 'Discount' => 'Знижка', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => 'Знижка%', + 'Documents' => 'Документи', + 'Driver' => '', + 'Drivers' => '', + 'Due' => 'Заборгованість', + 'Email' => 'Електронна пошта', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => 'Факс', + 'Files' => 'Файли', + 'Filter' => 'Фільтрувати', + 'Freightage' => 'Фрахт', + 'From' => '', + 'Group' => 'Група', + 'History' => '', + 'ID' => 'Ідентифікатор', + 'Info' => 'Інформація', + 'Inspections' => '', + 'Invoice' => 'Рахунок-фактура', + 'Invoices' => 'Рахунки-фактури', + 'IsDefault' => 'Чи є за замовчуванням?', + 'Items' => '#VALUE!', + 'LastContact' => 'Останній контакт', + 'LastOrder' => 'Остання замовлення', + 'LeasingFee' => '', + 'Log' => 'Журнал', + 'Logs' => 'Журнали', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'Пан', + 'MTDSales' => 'Продажі MTD', + 'Make' => '', + 'Margin' => 'Маржа', + 'Messages' => 'Повідомлень', + 'Milage' => '', + 'Model' => '', + 'Modified' => 'Модифікований', + 'Modules' => 'Модулі', + 'Name' => 'Назва', + 'Name1' => 'Name1', + 'Name2' => 'Name2', + 'Name3' => 'Name3', + 'Net' => 'Сітка', + 'NewCustomers' => '#VALUE!', + 'Notes' => 'Ноти', + 'Number' => 'Число', + 'Office' => 'Офіс', + 'Other' => '#VALUE!', + 'Payment' => 'Платіж', + 'PaymentTerm' => 'Термін оплати', + 'Permission' => 'Дозвіл', + 'Phone' => 'Телефон', + 'Postal' => 'Поштовий', + 'Price' => 'Ціна', + 'Prices' => 'Ціни', + 'Private' => 'Приватний', + 'Productgroup' => 'Група продуктів', + 'Profile' => 'Профіль', + 'Profit' => '#VALUE!', + 'Purchase' => 'Придбання', + 'PurchasePrice' => '', + 'Quantity' => 'Кількість', + 'RecentInvoices' => 'Останні рахунки-фактури', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => 'Продаж', + 'Segment' => 'Сегмент', + 'Segments' => 'Сегменти', + 'Start' => '', + 'Status' => '', + 'Subtype' => 'Підтип', + 'Support' => 'Підтримка', + 'Tags' => 'Теги', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => 'Тип', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => 'Веб-сайт', + 'Wire' => 'Дріт', + 'YTDSales' => 'Ytd продажі', + 'Zip' => 'Блиск', +]]; diff --git a/Theme/Backend/Lang/zh.lang.php b/Theme/Backend/Lang/zh.lang.php new file mode 100755 index 0000000..4392416 --- /dev/null +++ b/Theme/Backend/Lang/zh.lang.php @@ -0,0 +1,152 @@ + [ + ':status1' => '', + ':status2' => '', + ':status3' => '', + ':status4' => '', + 'Accounting' => '会计', + 'Addition' => '添加', + 'Address' => '地址', + 'Addresses' => '地址', + 'Africa' => '#VALUE!', + 'AllCustomers' => '#VALUE!', + 'America' => '#VALUE!', + 'Analyse' => '#VALUE!', + 'AreaManager' => '区域经理', + 'Articlegroup' => '商品组', + 'Articles' => '文章', + 'Asia' => '#VALUE!', + 'Attribute' => '#VALUE!', + 'Attributes' => '#VALUE!', + 'Balance' => '平衡', + 'BaseTime' => '#VALUE!', + 'Bills' => '#VALUE!', + 'Bonus' => '奖金', + 'Business' => '商业', + 'CIS' => '#VALUE!', + 'CLV' => 'CLV.', + 'Calendar' => '日历', + 'City' => '城市', + 'Client' => '客户', + 'ClientID' => '#VALUE!', + 'Clients' => '客户', + 'ComparisonTime' => '#VALUE!', + 'Contact' => '接触', + 'Costs' => '', + 'Country' => '国家', + 'Created' => '创造了', + 'CreatedAt' => '#VALUE!', + 'CreditRating' => '信用评级', + 'Creditcard' => '信用卡', + 'Customers' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => '日期', + 'Default' => '默认', + 'Delivery' => '交货', + 'Description' => '', + 'Discount' => '折扣', + 'DiscountBonus' => '#VALUE!', + 'DiscountP' => '折扣 %', + 'Documents' => '文件', + 'Driver' => '', + 'Drivers' => '', + 'Due' => '到期的', + 'Email' => '电子邮件', + 'End' => '', + 'Europe' => '#VALUE!', + 'Fax' => '传真', + 'Files' => '文件', + 'Filter' => '筛选', + 'Freightage' => 'FRIGUTAGE.', + 'From' => '', + 'Group' => '团体', + 'History' => '', + 'ID' => 'ID', + 'Info' => '信息', + 'Inspections' => '', + 'Invoice' => '发票', + 'Invoices' => '发票', + 'IsDefault' => '默认为默认情况下?', + 'Items' => '#VALUE!', + 'LastContact' => '最后联系人', + 'LastOrder' => '最后的订单', + 'LeasingFee' => '', + 'Log' => '日志', + 'Logs' => '日志', + 'LostCustomers' => '#VALUE!', + 'MRR' => 'MRR.', + 'MTDSales' => 'MTD销售', + 'Make' => '', + 'Margin' => '利润', + 'Messages' => '消息', + 'Milage' => '', + 'Model' => '', + 'Modified' => '修改的', + 'Modules' => '模块', + 'Name' => '名称', + 'Name1' => '名称1', + 'Name2' => '名称2.', + 'Name3' => '名称3.', + 'Net' => '网', + 'NewCustomers' => '#VALUE!', + 'Notes' => '笔记', + 'Number' => '数字', + 'Office' => '办公室', + 'Other' => '#VALUE!', + 'Payment' => '支付', + 'PaymentTerm' => '付款期限', + 'Permission' => '允许', + 'Phone' => '电话', + 'Postal' => '邮政', + 'Price' => '价格', + 'Prices' => '价格', + 'Private' => '私人的', + 'Productgroup' => '产品组', + 'Profile' => '轮廓', + 'Profit' => '#VALUE!', + 'Purchase' => '购买', + 'PurchasePrice' => '', + 'Quantity' => '数量', + 'RecentInvoices' => '最近的发票', + 'Region' => '#VALUE!', + 'Rep' => '#VALUE!', + 'Responsible' => '', + 'Retention' => '#VALUE!', + 'Sales' => '销售量', + 'Segment' => '分割', + 'Segments' => '段', + 'Start' => '', + 'Status' => '', + 'Subtype' => '亚型', + 'Support' => '支持', + 'Tags' => '标签', + 'Title' => '#VALUE!', + 'To' => '', + 'Total' => '#VALUE!', + 'TotalPrice' => '#VALUE!', + 'Type' => '类型', + 'UnitPrice' => '#VALUE!', + 'Upcoming' => '', + 'VIN' => '', + 'Value' => '#VALUE!', + 'Vehicle' => '', + 'Vehicles' => '', + 'Vin' => '', + 'Website' => '网站', + 'Wire' => '金属丝', + 'YTDSales' => 'ytd销售', + 'Zip' => '压缩', +]]; diff --git a/Theme/Backend/attribute-type-list.tpl.php b/Theme/Backend/attribute-type-list.tpl.php new file mode 100755 index 0000000..34276fd --- /dev/null +++ b/Theme/Backend/attribute-type-list.tpl.php @@ -0,0 +1,71 @@ +data['attributes']; + +echo $this->data['nav']->render(); ?> + +
+
+
+
getHtml('AttributeTypes', 'Attribute', 'Backend'); ?>
+
+ + + + + $value) : ++$count; + $url = UriFactory::build('{/base}/fleet/vehicle/attribute/type?{?}&id=' . $value->id); + ?> + +
getHtml('ID', '0', '0'); ?> + + + + getHtml('Name'); ?> + + + +
id; ?> + printHtml($value->getL11n()); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/Theme/Backend/attribute-type.tpl.php b/Theme/Backend/attribute-type.tpl.php new file mode 100755 index 0000000..391c75f --- /dev/null +++ b/Theme/Backend/attribute-type.tpl.php @@ -0,0 +1,98 @@ +data['attribute']; +$l11ns = $this->data['l11ns']; + +echo $this->data['nav']->render(); ?> + +
+
+
+
getHtml('Attribute', 'Attribute', 'Backend'); ?>
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ +
+
+
+
+ +
+
+
getHtml('Language', '0', '0'); ?>
+ + + + + $value) : ++$c; ?> + +
+ + getHtml('Language', '0', '0'); ?> + getHtml('Title', 'Attribute', 'Backend'); ?> +
+ + getLanguage())); ?> + content; ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
diff --git a/Theme/Backend/driver-list.tpl.php b/Theme/Backend/driver-list.tpl.php new file mode 100644 index 0000000..feafd15 --- /dev/null +++ b/Theme/Backend/driver-list.tpl.php @@ -0,0 +1,100 @@ +data['drivers'] ?? []; + +echo $this->data['nav']->render(); ?> +
+
+
+
getHtml('Drivers'); ?>
+
+ + + + + $value) : + ++$count; + $url = UriFactory::build('{/base}/fleet/driver/profile?{?}&id=' . $value->id); + ?> + +
+ getHtml('ID', '0', '0'); ?> + + + + getHtml('Status'); ?> + + + + getHtml('Name'); ?> + + + + getHtml('Type'); ?> + + + +
+ printHtml((string) $value->id); ?> + getHtml(':status' . $value->status); ?> + printHtml($value->name); ?> + printHtml($value->type->getL11n()); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/Theme/Backend/driver-profile.tpl.php b/Theme/Backend/driver-profile.tpl.php new file mode 100644 index 0000000..ac5c914 --- /dev/null +++ b/Theme/Backend/driver-profile.tpl.php @@ -0,0 +1,318 @@ +data['driver'] ?? new NullDriver(); +$files = $driver->files; +$driverImage = $this->data['driverImage'] ?? new NullMedia(); +$attributeView = $this->data['attributeView']; + +/** + * @var \phpOMS\Views\View $this + */ +echo $this->data['nav']->render(); +?> +
+
+ +
+
+ request->uri->fragment === 'c-tab-1' ? ' checked' : ''; ?>> +
+
+
+
+
getHtml('Profile'); ?>
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ id === 0) : ?> + + + + +
+
+
+ +
+
+
+ +
+
+
+
+
+ + request->uri->fragment === 'c-tab-2' ? ' checked' : ''; ?>> +
+
+ render( + $driver->attributes, + $this->data['attributeTypes'] ?? [], + [], + '{/api}fleet/driver/attribute' + ); + ?> +
+
+ + request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>> +
+ data['media-upload']->render('driver-file', 'files', '', $driver->files); ?> +
+ + request->uri->fragment === 'c-tab-4' ? ' checked' : ''; ?>> +
+ data['driver-notes']->render('driver-notes', '', $driver->notes); ?> +
+ + request->uri->fragment === 'c-tab-5' ? ' checked' : ''; ?>> +
+ +
+
+
+
getHtml('Upcoming'); ?>
+ + + + + +
getHtml('Date'); ?> + getHtml('Type'); ?> + getHtml('Responsible'); ?> +
+ + +
+
+
+ +
+
+
getHtml('History'); ?>
+ + + + + +
getHtml('Date'); ?> + getHtml('Type'); ?> + getHtml('Responsible'); ?> +
+ + +
+
+
+
+
+ + request->uri->fragment === 'c-tab-7' ? ' checked' : ''; ?>> +
+
+
+
+
+
getHtml('Milage'); ?>
+
+
+ + +
+ +
+ +
+
+ + + + +
+ 0) : ?> + + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +

+                                
+
+
+ + + +
+
+
+
+ +
+
+
getHtml('Milage'); ?>
+
+ + + + + + $value) : ++$c; ?> + + +
+ getHtml('ID', '0', '0'); ?> + getHtml('Driver'); ?> + getHtml('Milage'); ?> + getHtml('Start'); ?> + getHtml('End'); ?> +
+ + type->isRequired) : ?> + + + + + + + + id; ?> + printHtml($value->type->getL11n()); ?> + value->getValue() instanceof \DateTime ? $value->value->getValue()->format('Y-m-d') : $this->printHtml((string) $value->value->getValue()); ?> + printHtml($value->value->unit); ?> + printHtml($value->value->unit); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
+
+ + request->uri->fragment === 'c-tab-8' ? ' checked' : ''; ?>> +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/Theme/Backend/vehicle-list.tpl.php b/Theme/Backend/vehicle-list.tpl.php new file mode 100755 index 0000000..e0b4939 --- /dev/null +++ b/Theme/Backend/vehicle-list.tpl.php @@ -0,0 +1,100 @@ +data['vehicles'] ?? []; + +echo $this->data['nav']->render(); ?> +
+
+
+
getHtml('Vehicles'); ?>
+
+ + + + + $value) : + ++$count; + $url = UriFactory::build('{/base}/fleet/vehicle/profile?{?}&id=' . $value->id); + ?> + +
+ getHtml('ID', '0', '0'); ?> + + + + getHtml('Status'); ?> + + + + getHtml('Name'); ?> + + + + getHtml('Type'); ?> + + + +
+ printHtml((string) $value->id); ?> + getHtml(':status' . $value->status); ?> + printHtml($value->name); ?> + printHtml($value->type->getL11n()); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/Theme/Backend/vehicle-profile.tpl.php b/Theme/Backend/vehicle-profile.tpl.php new file mode 100755 index 0000000..58c288c --- /dev/null +++ b/Theme/Backend/vehicle-profile.tpl.php @@ -0,0 +1,365 @@ +data['vehicle'] ?? new NullVehicle(); +$files = $vehicle->files; +$vehicleImage = $this->data['vehicleImage'] ?? new NullMedia(); +$vehicleTypes = $this->data['types'] ?? []; +$attributeView = $this->data['attributeView']; + +/** + * @var \phpOMS\Views\View $this + */ +echo $this->data['nav']->render(); +?> +
+
+ +
+
+ request->uri->fragment === 'c-tab-1' ? ' checked' : ''; ?>> +
+
+
+
+
getHtml('Profile'); ?>
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ id === 0) : ?> + + + + +
+
+
+ +
+
+
+ +
+
+
+
+
+ + request->uri->fragment === 'c-tab-2' ? ' checked' : ''; ?>> +
+
+ render( + $vehicle->attributes, + $this->data['attributeTypes'] ?? [], + $this->data['units'] ?? [], + '{/api}fleet/vehicle/attribute' + ); + ?> +
+
+ + request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>> +
+ data['media-upload']->render('vehicle-file', 'files', '', $vehicle->files); ?> +
+ + request->uri->fragment === 'c-tab-4' ? ' checked' : ''; ?>> +
+ data['vehicle-notes']->render('vehicle-notes', '', $vehicle->notes); ?> +
+ + request->uri->fragment === 'c-tab-5' ? ' checked' : ''; ?>> +
+ +
+
+
+
getHtml('Upcoming'); ?>
+ + + + + data['inspections'] as $inspection) : ?> + +
getHtml('Date'); ?> + getHtml('Type'); ?> + getHtml('Responsible'); ?> +
next?->format('Y-m-d H:i'); ?> + printHtml($inspection->type->getL11n()); ?> + + +
+
+
+ +
+
+
getHtml('History'); ?>
+ + + + + +
getHtml('Date'); ?> + getHtml('Type'); ?> + getHtml('Responsible'); ?> +
+ + +
+
+
+
+
+ + request->uri->fragment === 'c-tab-7' ? ' checked' : ''; ?>> +
+
+
+
+
+
getHtml('Milage'); ?>
+
+
+ + +
+ +
+ +
+
+ + + + +
+ 0) : ?> + + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +

+                                
+
+
+ + + +
+
+
+
+ +
+
+
getHtml('Milage'); ?>
+
+ + + + + + $value) : ++$c; ?> + + +
+ getHtml('ID', '0', '0'); ?> + getHtml('Driver'); ?> + getHtml('Milage'); ?> + getHtml('Start'); ?> + getHtml('End'); ?> +
+ + type->isRequired) : ?> + + + + + + + + id; ?> + printHtml($value->type->getL11n()); ?> + value->getValue() instanceof \DateTime ? $value->value->getValue()->format('Y-m-d') : $this->printHtml((string) $value->value->getValue()); ?> + printHtml($value->value->unit); ?> + printHtml($value->value->unit); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
+
+ + request->uri->fragment === 'c-tab-8' ? ' checked' : ''; ?>> +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100755 index 0000000..2e47a08 --- /dev/null +++ b/composer.json @@ -0,0 +1,23 @@ +{ + "name": "karaka/module", + "description": "Module for Jingga.", + "authors": [ + { + "name": "Dennis Eichhorn", + "email": "spl1nes.com@googlemail.com" + } + ], + "require-dev": { + "phpunit/phpunit": ">=9.4", + "friendsofphp/php-cs-fixer": ">=3.8", + "squizlabs/php_codesniffer": ">=3.6", + "phpmd/phpmd": ">=2.9", + "phpstan/phpstan": ">=1.8.6", + "phan/phan": ">=3.2.6", + "phploc/phploc": ">=7.0", + "phpmetrics/phpmetrics": ">=2.8", + "rector/rector": ">=0.18.0" + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100755 index 0000000..d019236 --- /dev/null +++ b/composer.lock @@ -0,0 +1,4856 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "eb4ece0277f659c497f1d85019ebb6b0", + "packages": [], + "packages-dev": [ + { + "name": "composer/pcre", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.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": "2022-11-17T09:50:14+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": "composer/xdebug-handler", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + }, + "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": "2022-02-25T21:32:43+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" + }, + "time": "2023-06-03T09:27:29+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + }, + "time": "2021-06-11T22:34:44+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.28.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "113e09fea3d2306319ffaa2423fe3de768b28cff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/113e09fea3d2306319ffaa2423fe3de768b28cff", + "reference": "113e09fea3d2306319ffaa2423fe3de768b28cff", + "shasum": "" + }, + "require": { + "composer/semver": "^3.3", + "composer/xdebug-handler": "^3.0.3", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "sebastian/diff": "^4.0 || ^5.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" + }, + "require-dev": { + "facile-it/paraunit": "^1.3 || ^2.0", + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.16", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", + "symfony/yaml": "^5.4 || ^6.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.28.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2023-09-22T20:43:40+00:00" + }, + { + "name": "microsoft/tolerant-php-parser", + "version": "v0.1.2", + "source": { + "type": "git", + "url": "https://github.com/microsoft/tolerant-php-parser.git", + "reference": "3eccfd273323aaf69513e2f1c888393f5947804b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/3eccfd273323aaf69513e2f1c888393f5947804b", + "reference": "3eccfd273323aaf69513e2f1c888393f5947804b", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.15" + }, + "type": "library", + "autoload": { + "psr-4": { + "Microsoft\\PhpParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Lourens", + "email": "roblou@microsoft.com" + } + ], + "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios", + "support": { + "issues": "https://github.com/microsoft/tolerant-php-parser/issues", + "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.2" + }, + "time": "2022-10-05T17:30:19+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v4.2.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" + }, + "time": "2023-04-09T17:37:40+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.17.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + }, + "time": "2023-08-13T19:53:39+00:00" + }, + { + "name": "pdepend/pdepend", + "version": "2.15.0", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "0d4d8fb87aa74c358c1c4364514017f34b4a68b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/0d4d8fb87aa74c358c1c4364514017f34b4a68b9", + "reference": "0d4d8fb87aa74c358c1c4364514017f34b4a68b9", + "shasum": "" + }, + "require": { + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4|^5|^6.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" + }, + "require-dev": { + "easy-doc/easy-doc": "0.0.0|^1.2.3", + "gregwar/rst": "^1.0", + "phpunit/phpunit": "^4.8.36|^5.7.27", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "bin": [ + "src/bin/pdepend" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "PDepend\\": "src/main/php/PDepend" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Official version of pdepend to be handled with Composer", + "keywords": [ + "PHP Depend", + "PHP_Depend", + "dev", + "pdepend" + ], + "support": { + "issues": "https://github.com/pdepend/pdepend/issues", + "source": "https://github.com/pdepend/pdepend/tree/2.15.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend", + "type": "tidelift" + } + ], + "time": "2023-09-22T02:30:39+00:00" + }, + { + "name": "phan/phan", + "version": "5.4.2", + "source": { + "type": "git", + "url": "https://github.com/phan/phan.git", + "reference": "4f2870ed6fea320f62f3c3c63f3274d357a7980e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phan/phan/zipball/4f2870ed6fea320f62f3c3c63f3274d357a7980e", + "reference": "4f2870ed6fea320f62f3c3c63f3274d357a7980e", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4|^2.0|^3.0", + "composer/xdebug-handler": "^2.0|^3.0", + "ext-filter": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.4", + "microsoft/tolerant-php-parser": "0.1.2", + "netresearch/jsonmapper": "^1.6.0|^2.0|^3.0|^4.0", + "php": "^7.2.0|^8.0.0", + "sabre/event": "^5.1.3", + "symfony/console": "^3.2|^4.0|^5.0|^6.0", + "symfony/polyfill-mbstring": "^1.11.0", + "symfony/polyfill-php80": "^1.20.0", + "tysonandre/var_representation_polyfill": "^0.0.2|^0.1.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.0" + }, + "suggest": { + "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.16+ is recommended.", + "ext-iconv": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", + "ext-igbinary": "Improves performance of polyfill when ext-ast is unavailable", + "ext-mbstring": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", + "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.", + "ext-var_representation": "Suggested for converting values to strings in issue messages" + }, + "bin": [ + "phan", + "phan_client", + "tocheckstyle" + ], + "type": "project", + "autoload": { + "psr-4": { + "Phan\\": "src/Phan" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tyson Andre" + }, + { + "name": "Rasmus Lerdorf" + }, + { + "name": "Andrew S. Morrison" + } + ], + "description": "A static analyzer for PHP", + "keywords": [ + "analyzer", + "php", + "static" + ], + "support": { + "issues": "https://github.com/phan/phan/issues", + "source": "https://github.com/phan/phan/tree/5.4.2" + }, + "time": "2023-03-03T17:20:24+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" + }, + "time": "2023-08-12T11:01:26+00:00" + }, + { + "name": "phploc/phploc", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phploc.git", + "reference": "af0d5fc84f3f7725513ba59cdcbe670ac2a4532a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phploc/zipball/af0d5fc84f3f7725513ba59cdcbe670ac2a4532a", + "reference": "af0d5fc84f3f7725513ba59cdcbe670ac2a4532a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0", + "sebastian/cli-parser": "^1.0", + "sebastian/version": "^3.0" + }, + "bin": [ + "phploc" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "A tool for quickly measuring the size of a PHP project.", + "homepage": "https://github.com/sebastianbergmann/phploc", + "support": { + "issues": "https://github.com/sebastianbergmann/phploc/issues", + "source": "https://github.com/sebastianbergmann/phploc/tree/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2020-12-07T05:51:20+00:00" + }, + { + "name": "phpmd/phpmd", + "version": "2.13.0", + "source": { + "type": "git", + "url": "https://github.com/phpmd/phpmd.git", + "reference": "dad0228156856b3ad959992f9748514fa943f3e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/dad0228156856b3ad959992f9748514fa943f3e3", + "reference": "dad0228156856b3ad959992f9748514fa943f3e3", + "shasum": "" + }, + "require": { + "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", + "ext-xml": "*", + "pdepend/pdepend": "^2.12.1", + "php": ">=5.3.9" + }, + "require-dev": { + "easy-doc/easy-doc": "0.0.0 || ^1.3.2", + "ext-json": "*", + "ext-simplexml": "*", + "gregwar/rst": "^1.0", + "mikey179/vfsstream": "^1.6.8", + "phpunit/phpunit": "^4.8.36 || ^5.7.27", + "squizlabs/php_codesniffer": "^2.0" + }, + "bin": [ + "src/bin/phpmd" + ], + "type": "library", + "autoload": { + "psr-0": { + "PHPMD\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "https://phpmd.org/", + "keywords": [ + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" + ], + "support": { + "irc": "irc://irc.freenode.org/phpmd", + "issues": "https://github.com/phpmd/phpmd/issues", + "source": "https://github.com/phpmd/phpmd/tree/2.13.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd", + "type": "tidelift" + } + ], + "time": "2022-09-10T08:44:15+00:00" + }, + { + "name": "phpmetrics/phpmetrics", + "version": "v2.8.2", + "source": { + "type": "git", + "url": "https://github.com/phpmetrics/PhpMetrics.git", + "reference": "4b77140a11452e63c7a9b98e0648320bf6710090" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmetrics/PhpMetrics/zipball/4b77140a11452e63c7a9b98e0648320bf6710090", + "reference": "4b77140a11452e63c7a9b98e0648320bf6710090", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^3|^4", + "php": ">=5.5" + }, + "replace": { + "halleck45/php-metrics": "*", + "halleck45/phpmetrics": "*" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14", + "sebastian/comparator": ">=1.2.3", + "squizlabs/php_codesniffer": "^3.5", + "symfony/dom-crawler": "^3.0 || ^4.0 || ^5.0" + }, + "bin": [ + "bin/phpmetrics" + ], + "type": "library", + "autoload": { + "files": [ + "./src/functions.php" + ], + "psr-0": { + "Hal\\": "./src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jean-François Lépine", + "email": "lepinejeanfrancois@yahoo.fr", + "homepage": "http://www.lepine.pro", + "role": "Copyright Holder" + } + ], + "description": "Static analyzer tool for PHP : Coupling, Cyclomatic complexity, Maintainability Index, Halstead's metrics... and more !", + "homepage": "http://www.phpmetrics.org", + "keywords": [ + "analysis", + "qa", + "quality", + "testing" + ], + "support": { + "issues": "https://github.com/PhpMetrics/PhpMetrics/issues", + "source": "https://github.com/phpmetrics/PhpMetrics/tree/v2.8.2" + }, + "time": "2023-03-08T15:03:36+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.24.1", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "9f854d275c2dbf84915a5c0ec9a2d17d2cd86b01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9f854d275c2dbf84915a5c0ec9a2d17d2cd86b01", + "reference": "9f854d275c2dbf84915a5c0ec9a2d17d2cd86b01", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.1" + }, + "time": "2023-09-18T12:18:02+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.10.35", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "e730e5facb75ffe09dfb229795e8c01a459f26c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e730e5facb75ffe09dfb229795e8c01a459f26c3", + "reference": "e730e5facb75ffe09dfb229795e8c01a459f26c3", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2023-09-19T15:27:56+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.29", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "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/9.2.29" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-09-19T04:57:46+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.13", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f3d767f7f9e191eab4189abe41ab37797e30b1be", + "reference": "f3d767f7f9e191eab4189abe41ab37797e30b1be", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.28", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.13" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-09-19T05:39:22+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "rector/rector", + "version": "0.18.3", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "ba7988e3e028e68e07191d75b0d5473ac320c5e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/ba7988e3e028e68e07191d75b0d5473ac320c5e7", + "reference": "ba7988e3e028e68e07191d75b0d5473ac320c5e7", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.10.31" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/0.18.3" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2023-09-12T20:18:14+00:00" + }, + { + "name": "sabre/event", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/event.git", + "reference": "d7da22897125d34d7eddf7977758191c06a74497" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497", + "reference": "d7da22897125d34d7eddf7977758191c06a74497", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.17.1", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + }, + "type": "library", + "autoload": { + "files": [ + "lib/coroutine.php", + "lib/Loop/functions.php", + "lib/Promise/functions.php" + ], + "psr-4": { + "Sabre\\Event\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "sabre/event is a library for lightweight event-based programming", + "homepage": "http://sabre.io/event/", + "keywords": [ + "EventEmitter", + "async", + "coroutine", + "eventloop", + "events", + "hooks", + "plugin", + "promise", + "reactor", + "signal" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/event/issues", + "source": "https://github.com/fruux/sabre-event" + }, + "time": "2021-11-04T06:51:17+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-05-07T05:35:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bde739e7565280bda77be70044ac1047bc007e34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", + "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-02T09:26:13+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.7.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2023-02-22T23:07:41+00:00" + }, + { + "name": "symfony/config", + "version": "v6.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", + "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v6.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-19T20:22:16+00:00" + }, + { + "name": "symfony/console", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-08-16T10:10:12+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "68a5a9570806a087982f383f6109c5e925892a49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/68a5a9570806a087982f383f6109c5e925892a49", + "reference": "68a5a9570806a087982f383f6109c5e925892a49", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.2.10" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.1", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<6.3", + "symfony/yaml": "<5.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.1", + "symfony/expression-language": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v6.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-08-16T17:55:17+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-06T06:56:43+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-06-01T08:30:39+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-31T08:31:44+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-12T14:21:09+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "875e90aeea2777b6f135677f618529449334a612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "42292d99c55abe617799667f454222c54c60e229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-28T09:04:16+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/process", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-08-07T10:39:22+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "reference": "fc47f1015ec80927ff64ba9094dfe8b9d48fe9f2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-16T10:14:28+00:00" + }, + { + "name": "symfony/string", + "version": "v6.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "53d1a83225002635bca3482fcbf963001313fb68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", + "reference": "53d1a83225002635bca3482fcbf963001313fb68", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-05T08:41:27+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df1f8aac5751871b83d30bf3e2c355770f8f0691", + "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/var-dumper": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v6.3.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-08-16T18:14:47+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "tysonandre/var_representation_polyfill", + "version": "0.1.3", + "source": { + "type": "git", + "url": "https://github.com/TysonAndre/var_representation_polyfill.git", + "reference": "e9116c2c352bb0835ca428b442dde7767c11ad32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/e9116c2c352bb0835ca428b442dde7767c11ad32", + "reference": "e9116c2c352bb0835ca428b442dde7767c11ad32", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.2.0|^8.0.0" + }, + "provide": { + "ext-var_representation": "*" + }, + "require-dev": { + "phan/phan": "^5.4.1", + "phpunit/phpunit": "^8.5.0" + }, + "suggest": { + "ext-var_representation": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.3-dev" + } + }, + "autoload": { + "files": [ + "src/var_representation.php" + ], + "psr-4": { + "VarRepresentation\\": "src/VarRepresentation" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tyson Andre" + } + ], + "description": "Polyfill for var_representation: convert a variable to a string in a way that fixes the shortcomings of var_export", + "keywords": [ + "var_export", + "var_representation" + ], + "support": { + "issues": "https://github.com/TysonAndre/var_representation_polyfill/issues", + "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.1.3" + }, + "time": "2022-08-31T12:59:22+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.2.0" +} diff --git a/info.json b/info.json new file mode 100755 index 0000000..a5aa7bb --- /dev/null +++ b/info.json @@ -0,0 +1,49 @@ +{ + "name": { + "id": 1003500000, + "internal": "FleetManagement", + "external": "Fleet Management" + }, + "category": "Fleet", + "version": "1.0.0", + "requirements": { + "phpOMS": "1.0.0", + "phpOMS-db": "1.0.0" + }, + "creator": { + "name": "Jingga", + "website": "jingga.app" + }, + "description": "The buisness module.", + "directory": "FleetManagement", + "dependencies": { + "Admin": "1.0.0", + "Profile": "1.0.0", + "Media": "1.0.0", + "Editor": "1.0.0" + }, + "providing": { + "Navigation": "*", + "Media": "*" + }, + "load": [ + { + "pid": [ + "/fleet" + ], + "type": 4, + "for": 0, + "from": "FleetManagement", + "file": "FleetManagement" + }, + { + "pid": [ + "/" + ], + "type": 5, + "from": "FleetManagement", + "for": "Navigation", + "file": "Navigation" + } + ] +} diff --git a/tests/Admin/AdminTest.php b/tests/Admin/AdminTest.php new file mode 100755 index 0000000..808ff14 --- /dev/null +++ b/tests/Admin/AdminTest.php @@ -0,0 +1,27 @@ + [ + 'core' => [ + 'masters' => [ + 'admin' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'insert' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'select' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'update' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'delete' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'schema' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + ], + 'postgresql' => [ + 'admin' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'insert' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'select' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'update' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'delete' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'schema' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + ], + 'sqlite' => [ + 'admin' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'insert' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'select' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'update' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'delete' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'schema' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/../Karaka/phpOMS/Localization/Defaults/localization.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + ], + 'mssql' => [ + 'admin' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'c0MplicatedP@ssword', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'insert' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'c0MplicatedP@ssword', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'select' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'c0MplicatedP@ssword', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'update' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'c0MplicatedP@ssword', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'delete' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'c0MplicatedP@ssword', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + 'schema' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'c0MplicatedP@ssword', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + 'datetimeformat' => 'Y-m-d H:i:s', + ], + ], + ], + ], + 'cache' => [ + 'redis' => [ + 'db' => 1, + 'host' => '127.0.0.1', + 'port' => 6379, + ], + 'memcached' => [ + 'host' => '127.0.0.1', + 'port' => 11211, + ], + ], + 'mail' => [ + 'imap' => [ + 'host' => '127.0.0.1', + 'port' => 143, + 'ssl' => false, + 'user' => 'test', + 'password' => '123456', + ], + 'pop3' => [ + 'host' => '127.0.0.1', + 'port' => 25, + 'ssl' => false, + 'user' => 'test', + 'password' => '123456', + ], + ], + 'log' => [ + 'file' => [ + 'path' => __DIR__ . '/Logs', + ], + ], + 'page' => [ + 'root' => '/', + 'https' => false, + ], + 'app' => [ + 'path' => __DIR__, + 'default' => [ + 'app' => 'Backend', + 'id' => 'backend', + 'lang' => 'en', + 'theme' => 'Backend', + 'org' => 1, + ], + 'domains' => [ + '127.0.0.1' => [ + 'app' => 'Backend', + 'id' => 'backend', + 'lang' => 'en', + 'theme' => 'Backend', + 'org' => 1, + ], + ], + ], + 'socket' => [ + 'master' => [ + 'host' => '127.0.0.1', + 'limit' => 300, + 'port' => 4310, + ], + ], + 'language' => [ + 'en', + ], + 'apis' => [ + ], +]; + +// Reset database +if (\defined('RESET') && RESET === '1') { + if (\extension_loaded('pdo_mysql')) { + try { + $db = new \PDO('mysql:host=' . + $CONFIG['db']['core']['masters']['admin']['host'], + $CONFIG['db']['core']['masters']['admin']['login'], + $CONFIG['db']['core']['masters']['admin']['password'] + ); + $db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']); + $db->exec('CREATE DATABASE IF NOT EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']); + $db = null; + } catch (\Throwable $_) { + echo "\nCouldn't connect to MYSQL DB\n"; + } + } + + if (\extension_loaded('pdo_pgsql')) { + try { + $db = new \PDO('pgsql:host=' . + $CONFIG['db']['core']['postgresql']['admin']['host'], + $CONFIG['db']['core']['postgresql']['admin']['login'], + $CONFIG['db']['core']['postgresql']['admin']['password'] + ); + $db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['postgresql']['admin']['database']); + $db->exec('CREATE DATABASE ' . $CONFIG['db']['core']['postgresql']['admin']['database']); + $db = null; + } catch (\Throwable $_) { + echo "\nCouldn't connect to POSTGRESQL DB\n"; + } + } + + if (\extension_loaded('pdo_sqlsrv')) { + try { + $db = new \PDO('sqlsrv:Server=' . + $CONFIG['db']['core']['mssql']['admin']['host'], + $CONFIG['db']['core']['mssql']['admin']['login'], + $CONFIG['db']['core']['mssql']['admin']['password'] + ); + $db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['mssql']['admin']['database']); + $db->exec('CREATE DATABASE ' . $CONFIG['db']['core']['mssql']['admin']['database']); + $db = null; + } catch (\Throwable $_) { + echo "\nCouldn't connect to MSSQL DB\n"; + } + } +} + +$httpSession = new HttpSession(); +$GLOBALS['session'] = $httpSession; + +$GLOBALS['dbpool'] = new DatabasePool(); +$GLOBALS['dbpool']->create('admin', $CONFIG['db']['core']['masters']['admin']); +$GLOBALS['dbpool']->create('select', $CONFIG['db']['core']['masters']['select']); +$GLOBALS['dbpool']->create('insert', $CONFIG['db']['core']['masters']['insert']); +$GLOBALS['dbpool']->create('update', $CONFIG['db']['core']['masters']['update']); +$GLOBALS['dbpool']->create('delete', $CONFIG['db']['core']['masters']['delete']); +$GLOBALS['dbpool']->create('schema', $CONFIG['db']['core']['masters']['schema']); + +DataMapperFactory::db($GLOBALS['dbpool']->get()); + +$GLOBALS['frameworkpath'] = '/phpOMS/'; + +function phpServe() : void +{ + // OS detection + $isWindows = \stristr(\php_uname('s'), 'Windows') !== false; + + // Command that starts the built-in web server + if ($isWindows) { + $command = \sprintf( + 'wmic process call create "php -S %s:%d -t %s" | find "ProcessId"', + WEB_SERVER_HOST, + WEB_SERVER_PORT, + __DIR__ . '/../' . WEB_SERVER_DOCROOT + ); + + $killCommand = 'taskkill /f /pid '; + } else { + $command = \sprintf( + 'php -S %s:%d -t %s >/dev/null 2>&1 & echo $!', + WEB_SERVER_HOST, + WEB_SERVER_PORT, + WEB_SERVER_DOCROOT + ); + + $killCommand = 'kill '; + } + + // Execute the command and store the process ID + $output = []; + echo 'Starting server...' . \PHP_EOL; + echo \sprintf(' Current directory: %s', \getcwd()) . \PHP_EOL; + echo \sprintf(' %s', $command); + \exec($command, $output); + + // Get PID + if ($isWindows) { + $pid = \explode('=', $output[0]); + $pid = \str_replace(' ', '', $pid[1]); + $pid = \str_replace(';', '', $pid); + } else { + $pid = (int) $output[0]; + } + + // Log + echo \sprintf( + ' %s - Web server started on %s:%d with PID %d', + \date('r'), + WEB_SERVER_HOST, + WEB_SERVER_PORT, + $pid + ) . \PHP_EOL; + + // Kill the web server when the process ends + \register_shutdown_function(function() use ($killCommand, $pid) : void { + echo \PHP_EOL . 'Stopping server...' . \PHP_EOL; + echo \sprintf(' %s - Killing process with ID %d', \date('r'), $pid) . \PHP_EOL; + \exec($killCommand . $pid); + }); +} + +try { + \phpServe(); +} catch(\Throwable $t) { + echo $t->getMessage(); +} diff --git a/tests/Controller/Api/ApiControllerAttributeTrait.php b/tests/Controller/Api/ApiControllerAttributeTrait.php new file mode 100644 index 0000000..0091863 --- /dev/null +++ b/tests/Controller/Api/ApiControllerAttributeTrait.php @@ -0,0 +1,222 @@ +header->account = 1; + $request->setData('name', 'test_attribute'); + $request->setData('title', 'EN:1'); + $request->setData('language', ISO639x1Enum::_EN); + + $this->attrModule->apiVehicleAttributeTypeCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->id); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeTypeL11nCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('title', 'DE:2'); + $request->setData('type', '1'); + $request->setData('language', ISO639x1Enum::_DE); + + $this->attrModule->apiVehicleAttributeTypeL11nCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->id); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeValueIntCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('default', '1'); + $request->setData('type', '1'); + $request->setData('value', '1'); + $request->setData('language', ISO639x1Enum::_DE); + $request->setData('country', ISO3166TwoEnum::_DEU); + + $this->attrModule->apiVehicleAttributeValueCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->id); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeValueStrCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('type', '1'); + $request->setData('value', '1'); + $request->setData('language', ISO639x1Enum::_DE); + $request->setData('country', ISO3166TwoEnum::_DEU); + + $this->attrModule->apiVehicleAttributeValueCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->id); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeValueFloatCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('type', '1'); + $request->setData('value', '1.1'); + $request->setData('language', ISO639x1Enum::_DE); + $request->setData('country', ISO3166TwoEnum::_DEU); + + $this->attrModule->apiVehicleAttributeValueCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->id); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeValueDatCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('type', '1'); + $request->setData('value', '2020-08-02'); + $request->setData('language', ISO639x1Enum::_DE); + $request->setData('country', ISO3166TwoEnum::_DEU); + + $this->attrModule->apiVehicleAttributeValueCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->id); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeCreate() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('ref', '1'); + $request->setData('value', '1'); + $request->setData('type', '1'); + + $this->attrModule->apiVehicleAttributeCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->id); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeValueCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->attrModule->apiVehicleAttributeValueCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeTypeCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->attrModule->apiVehicleAttributeTypeCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeTypeL11nCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->attrModule->apiVehicleAttributeTypeL11nCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } + + /** + * @covers Modules\FleetManagement\Controller\ApiVehicleAttributeController + * @group module + */ + public function testApiVehicleAttributeCreateInvalidData() : void + { + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $request->header->account = 1; + $request->setData('invalid', '1'); + + $this->attrModule->apiVehicleAttributeCreate($request, $response); + self::assertEquals(RequestStatusCode::R_400, $response->header->status); + } +} diff --git a/tests/Controller/Api/ApiControllerVehicleTrait.php b/tests/Controller/Api/ApiControllerVehicleTrait.php new file mode 100644 index 0000000..8c62084 --- /dev/null +++ b/tests/Controller/Api/ApiControllerVehicleTrait.php @@ -0,0 +1,53 @@ +execute(); + $vehicleTypeCount = \count($vehicleType); + $fuelTypeCount = FuelTypeMapper::count()->execute(); + + $response = new HttpResponse(); + $request = new HttpRequest(new HttpUri('')); + + $LOREM = \array_slice(Text::LOREM_IPSUM, 0, 25); + $LOREM_COUNT = \count($LOREM) - 1; + + $request->header->account = 1; + $request->setData('name', \ucfirst(Text::LOREM_IPSUM[\mt_rand(0, $LOREM_COUNT - 1)])); + $request->setData('type', \mt_rand(1, $vehicleTypeCount)); + $request->setData('fuel', \mt_rand(1, $fuelTypeCount)); + $request->setData('status', 1); + + $this->module->apiVehicleCreate($request, $response); + self::assertGreaterThan(0, $response->get('')['response']->id); + } +} diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php new file mode 100755 index 0000000..4f2ac37 --- /dev/null +++ b/tests/Controller/ApiControllerTest.php @@ -0,0 +1,99 @@ +app = new class() extends ApplicationAbstract + { + protected string $appName = 'Api'; + }; + + $this->app->dbPool = $GLOBALS['dbpool']; + $this->app->unitId = 1; + $this->app->accountManager = new AccountManager($GLOBALS['session']); + $this->app->appSettings = new CoreSettings(); + $this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../../Modules/'); + $this->app->dispatcher = new Dispatcher($this->app); + $this->app->eventManager = new EventManager($this->app->dispatcher); + $this->app->eventManager->importFromFile(__DIR__ . '/../../../../Web/Api/Hooks.php'); + $this->app->sessionManager = new HttpSession(36000); + $this->app->l11nManager = new L11nManager(); + + $account = new Account(); + TestUtils::setMember($account, 'id', 1); + + $permission = new AccountPermission(); + $permission->unit = 1; + $permission->app = 2; + $permission->setPermission( + PermissionType::READ + | PermissionType::CREATE + | PermissionType::MODIFY + | PermissionType::DELETE + | PermissionType::PERMISSION + ); + + $account->addPermission($permission); + + $this->app->accountManager->add($account); + $this->app->router = new WebRouter(); + + $this->module = $this->app->moduleManager->get('FleetManagement', 'ApiVehicle'); + $this->attrModule = $this->app->moduleManager->get('FleetManagement', 'ApiVehicleAttribute'); + + TestUtils::setMember($this->module, 'app', $this->app); + TestUtils::setMember($this->attrModule, 'app', $this->app); + } + + use ApiControllerVehicleTrait; + use ApiControllerAttributeTrait; +} diff --git a/tests/Models/Vehicle.php b/tests/Models/Vehicle.php new file mode 100755 index 0000000..1b4fc32 --- /dev/null +++ b/tests/Models/Vehicle.php @@ -0,0 +1,20 @@ + + + + + ../ + + + ../vendor* + ../MainRepository* + ../Admin/Install/Application* + ../phpOMS* + ../tests* + ../*/tests* + ../**/tests* + */tests* + ../* + ../* + ../* + ../* + ../* + ../**/test* + ../**/Theme* + ../**/Admin/Routes* + ../**/Admin/Hooks* + ../**/Admin/Install* + ../Media/Files* + + + + + + + + + ../MainRepository/Install/tests* + + + ../tests* + + + + + volume + maybe + + + + + + + + + + + + + +