Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
33d96940e6 | |||
06b7c204b0 | |||
7854cbdabd | |||
32514c9ab1 | |||
db600a28d3 |
@ -4,6 +4,7 @@ namespace App\Classes\LDAP\Attribute;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
use App\Classes\LDAP\Attribute;
|
use App\Classes\LDAP\Attribute;
|
||||||
use App\Traits\MD5Updates;
|
use App\Traits\MD5Updates;
|
||||||
@ -17,6 +18,15 @@ final class Certificate extends Attribute
|
|||||||
|
|
||||||
private array $_object = [];
|
private array $_object = [];
|
||||||
|
|
||||||
|
public function authority_key_identifier(int $key=0): string
|
||||||
|
{
|
||||||
|
$data = collect(explode("\n",$this->cert_info('extensions.authorityKeyIdentifier',$key)));
|
||||||
|
return $data
|
||||||
|
->filter(fn($item)=>Str::startsWith($item,'keyid:'))
|
||||||
|
->map(fn($item)=>Str::after($item,'keyid:'))
|
||||||
|
->first();
|
||||||
|
}
|
||||||
|
|
||||||
public function certificate(int $key=0): string
|
public function certificate(int $key=0): string
|
||||||
{
|
{
|
||||||
return sprintf("-----BEGIN CERTIFICATE-----\n%s\n-----END CERTIFICATE-----",
|
return sprintf("-----BEGIN CERTIFICATE-----\n%s\n-----END CERTIFICATE-----",
|
||||||
@ -29,19 +39,23 @@ final class Certificate extends Attribute
|
|||||||
if (! array_key_exists($key,$this->_object))
|
if (! array_key_exists($key,$this->_object))
|
||||||
$this->_object[$key] = openssl_x509_parse(openssl_x509_read($this->certificate($key)));
|
$this->_object[$key] = openssl_x509_parse(openssl_x509_read($this->certificate($key)));
|
||||||
|
|
||||||
|
|
||||||
return Arr::get($this->_object[$key],$index);
|
return Arr::get($this->_object[$key],$index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function expires($key=0): Carbon
|
public function expires(int $key=0): Carbon
|
||||||
{
|
{
|
||||||
return Carbon::createFromTimestampUTC($this->cert_info('validTo_time_t',$key));
|
return Carbon::createFromTimestampUTC($this->cert_info('validTo_time_t',$key));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function subject($key=0): string
|
public function subject(int $key=0): string
|
||||||
{
|
{
|
||||||
$subject = collect($this->cert_info('subject',$key))->reverse();
|
$subject = collect($this->cert_info('subject',$key))->reverse();
|
||||||
|
|
||||||
return $subject->map(fn($item,$key)=>sprintf("%s=%s",$key,$item))->join(',');
|
return $subject->map(fn($item,$key)=>sprintf("%s=%s",$key,$item))->join(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function subject_key_identifier(int $key=0): string
|
||||||
|
{
|
||||||
|
return $this->cert_info('extensions.subjectKeyIdentifier',$key);
|
||||||
|
}
|
||||||
}
|
}
|
44
app/Http/Middleware/AcceptLanguage.php
Normal file
44
app/Http/Middleware/AcceptLanguage.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class AcceptLanguage
|
||||||
|
{
|
||||||
|
public function handle(Request $request,Closure $next): mixed
|
||||||
|
{
|
||||||
|
if ($locale=$this->parseHttpLocale($request)) {
|
||||||
|
Log::debug(sprintf('Accept Language changed from [%s] to [%s] from Browser (%s)',app()->getLocale(),$locale,$request->header('Accept-Language')));
|
||||||
|
|
||||||
|
app()->setLocale($locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function parseHttpLocale(Request $request): string
|
||||||
|
{
|
||||||
|
$list = explode(',',$request->server('HTTP_ACCEPT_LANGUAGE',''));
|
||||||
|
|
||||||
|
$locales = Collection::make($list)
|
||||||
|
->map(function ($locale) {
|
||||||
|
$parts = explode(';',$locale);
|
||||||
|
$mapping = [];
|
||||||
|
|
||||||
|
$mapping['locale'] = trim($parts[0]);
|
||||||
|
$mapping['factor'] = isset($parts[1])
|
||||||
|
? Arr::get(explode('=',$parts[1]),1)
|
||||||
|
: 1;
|
||||||
|
|
||||||
|
return $mapping;
|
||||||
|
})
|
||||||
|
->sortByDesc(fn($locale)=>$locale['factor']);
|
||||||
|
|
||||||
|
return Arr::get($locales->first(),'locale');
|
||||||
|
}
|
||||||
|
}
|
@ -4,7 +4,7 @@ use Illuminate\Foundation\Application;
|
|||||||
use Illuminate\Foundation\Configuration\Exceptions;
|
use Illuminate\Foundation\Configuration\Exceptions;
|
||||||
use Illuminate\Foundation\Configuration\Middleware;
|
use Illuminate\Foundation\Configuration\Middleware;
|
||||||
|
|
||||||
use App\Http\Middleware\{AllowAnonymous,ApplicationSession,CheckUpdate,SwapinAuthUser,ViewVariables};
|
use App\Http\Middleware\{AcceptLanguage,AllowAnonymous,ApplicationSession,CheckUpdate,SwapinAuthUser,ViewVariables};
|
||||||
|
|
||||||
return Application::configure(basePath: dirname(__DIR__))
|
return Application::configure(basePath: dirname(__DIR__))
|
||||||
->withRouting(
|
->withRouting(
|
||||||
@ -17,6 +17,7 @@ return Application::configure(basePath: dirname(__DIR__))
|
|||||||
group: 'web',
|
group: 'web',
|
||||||
middleware: [
|
middleware: [
|
||||||
ApplicationSession::class,
|
ApplicationSession::class,
|
||||||
|
AcceptLanguage::class,
|
||||||
AllowAnonymous::class,
|
AllowAnonymous::class,
|
||||||
SwapinAuthUser::class,
|
SwapinAuthUser::class,
|
||||||
ViewVariables::class,
|
ViewVariables::class,
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
"laravel/ui": "^4.5"
|
"laravel/ui": "^4.5"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"amirami/localizator": "^0.14@dev",
|
||||||
"barryvdh/laravel-debugbar": "^3.6",
|
"barryvdh/laravel-debugbar": "^3.6",
|
||||||
"fakerphp/faker": "^1.23",
|
"fakerphp/faker": "^1.23",
|
||||||
"mockery/mockery": "^1.6",
|
"mockery/mockery": "^1.6",
|
||||||
|
84
composer.lock
generated
84
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "fe524438312a0b5d565ad83c191eac6a",
|
"content-hash": "baf49824fa0f2a2a61b7915204b18d2c",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "brick/math",
|
"name": "brick/math",
|
||||||
@ -5848,6 +5848,84 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
|
{
|
||||||
|
"name": "amirami/localizator",
|
||||||
|
"version": "v0.14.0-alpha",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/amiranagram/localizator.git",
|
||||||
|
"reference": "30aae5e51d3aaa95105e3834d481b8c37efaab40"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/amiranagram/localizator/zipball/30aae5e51d3aaa95105e3834d481b8c37efaab40",
|
||||||
|
"reference": "30aae5e51d3aaa95105e3834d481b8c37efaab40",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"illuminate/config": "^8.0|^9.0|^10.0|^11.0|^12.0",
|
||||||
|
"illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0",
|
||||||
|
"illuminate/filesystem": "^8.0|^9.0|^10.0|^11.0|^12.0",
|
||||||
|
"illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0",
|
||||||
|
"php": "^7.2.5|^8.0",
|
||||||
|
"symfony/finder": "^5.1|^6.0|^7.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"mockery/mockery": "^1.3.3",
|
||||||
|
"orchestra/testbench": "^6.6|^7.0|^8.0|^9.0|^10.0",
|
||||||
|
"phpunit/phpunit": "^9.5|^10.0|^11.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"Amirami\\Localizator\\ServiceProvider"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/helpers.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Amirami\\Localizator\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Amir Rami",
|
||||||
|
"email": "me@amirrami.com",
|
||||||
|
"homepage": "https://amirrami.com",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Localizator is a small tool for Laravel that gives you the ability to extract untranslated strings from project files. It works using the artisan command line and the provided localize command.",
|
||||||
|
"homepage": "https://github.com/amiranagram/localizator",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/amiranagram/localizator/issues",
|
||||||
|
"source": "https://github.com/amiranagram/localizator/tree/v0.14.0-alpha"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://m.do.co/c/f38828dd20f8",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://www.buymeacoffee.com/amirami/",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/amiranagram",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-03-06T12:49:02+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "barryvdh/laravel-debugbar",
|
"name": "barryvdh/laravel-debugbar",
|
||||||
"version": "v3.15.4",
|
"version": "v3.15.4",
|
||||||
@ -8461,7 +8539,9 @@
|
|||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": {},
|
"stability-flags": {
|
||||||
|
"amirami/localizator": 20
|
||||||
|
},
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": {
|
"platform": {
|
||||||
|
59
config/localizator.php
Normal file
59
config/localizator.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Localize types of translation strings.
|
||||||
|
*/
|
||||||
|
'localize' => [
|
||||||
|
/**
|
||||||
|
* Short keys. This is the default for Laravel.
|
||||||
|
* They are stored in PHP files inside folders name by their locale code.
|
||||||
|
* Laravel comes with default: auth.php, pagination.php, passwords.php and validation.php
|
||||||
|
*/
|
||||||
|
'default' => true,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translations strings as key.
|
||||||
|
* They are stored in JSON file for each locale.
|
||||||
|
*/
|
||||||
|
'json' => true,
|
||||||
|
],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search criteria for files.
|
||||||
|
*/
|
||||||
|
'search' => [
|
||||||
|
/**
|
||||||
|
* Directories which should be looked inside.
|
||||||
|
*/
|
||||||
|
'dirs' => ['app','resources/views'],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subdirectories which will be excluded.
|
||||||
|
* The values must be relative to the included directory paths.
|
||||||
|
*/
|
||||||
|
'exclude' => [
|
||||||
|
//
|
||||||
|
],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Patterns by which files should be queried.
|
||||||
|
* The values can be a regular expression, glob, or just a string.
|
||||||
|
*/
|
||||||
|
'patterns' => ['*.php'],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Functions that the strings will be extracted from.
|
||||||
|
* Add here any custom defined functions.
|
||||||
|
* NOTE: The translation string should always be the first argument.
|
||||||
|
*/
|
||||||
|
'functions' => ['__', 'trans', '@lang']
|
||||||
|
],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the localize command sort extracted strings alphabetically?
|
||||||
|
*/
|
||||||
|
'sort' => true,
|
||||||
|
|
||||||
|
];
|
6
public/css/fixes.css
vendored
6
public/css/fixes.css
vendored
@ -262,4 +262,10 @@ select2-container--bootstrap-5 .select2-selection--multiple .select2-selection__
|
|||||||
/* limit selection to inside the modal */
|
/* limit selection to inside the modal */
|
||||||
body.modal-open {
|
body.modal-open {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix our search results, implementing a scroll bar */
|
||||||
|
#search_results ul.typeahead.dropdown-menu {
|
||||||
|
overflow-y: scroll;
|
||||||
|
max-height: 300px;
|
||||||
}
|
}
|
@ -1,6 +1,45 @@
|
|||||||
This directory contains language translation files for PLA.
|
This directory contains language translation files for PLA. PLA should automatically detect your language based on your
|
||||||
|
browser configuration, and if the language is not available it will fall back to the language used internally (English).
|
||||||
|
|
||||||
Language files named by 2 letter iso language name (suffixed with .json)
|
Language files are named by 2 letter iso language name (suffixed with .json) represent the translations for that
|
||||||
represent the translations for that language.
|
language.
|
||||||
|
Where a language is spoken in multiple countries, but has local country differences (eg: `en-US` vs `en-GB`,
|
||||||
|
or `zh-CN` vs `zh-TW`), then the language filename is suffixed with `-` and a two letter country, eg:
|
||||||
|
|
||||||
eg: en.json
|
* `en.json` for English (General),
|
||||||
|
* `en-GB.json` for English (Great Britain),
|
||||||
|
* `zh-CN.json` for Chinese (China),
|
||||||
|
* `zh-TW.json` for Chinese (Taiwan), etc
|
||||||
|
|
||||||
|
The language file `zz.json` is an example language file, with each translated string prefixed with the letter "Z". Its
|
||||||
|
used to identify any default language text (in english) that is not in a translated configuration. Text strings enclosed
|
||||||
|
in `@lang()`, or `__()` functions are translatable to other languages.
|
||||||
|
|
||||||
|
If you want to update the language text for your language, then:
|
||||||
|
|
||||||
|
* If your language file **exists** (eg: `fr.json` for French), then:
|
||||||
|
* Identify the missing tags (compare it to `zz.json`),
|
||||||
|
* Insert the missing tags into the language file (eg: `fr.json` for French) - ensure you keep the file in English
|
||||||
|
Alphabetical order.
|
||||||
|
|
||||||
|
* If your language file **doesnt** exist (eg; `fr.json` for French), then
|
||||||
|
* Copy the default language file `zz.json` to `fr.json`
|
||||||
|
* Translate the strings
|
||||||
|
|
||||||
|
The structure of the json files is:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Untranslated string1": "Translated string1",
|
||||||
|
"Untranslated string2": "Translated string2"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Some important notes:
|
||||||
|
* `Untranslated string` is the string as it appears in PLA, wrapped in either a `__()` or `@lang()` function, normally and english phrase
|
||||||
|
* `Translated string` is the translation for your language
|
||||||
|
* Each translated string must be comma terminated *EXCEPT* the last string
|
||||||
|
|
||||||
|
Please submit a pull request with your translations, so that others users can benefit from the translation.
|
||||||
|
|
||||||
|
If you find any strings that you are not translatable, or translated incorrectly, please submit a bug report.
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"Email": "DEV:Email",
|
|
||||||
"Home": "DEV:Home",
|
|
||||||
"Password": "DEV:Password",
|
|
||||||
"Please enter your email": "DEV:Please enter your email",
|
|
||||||
"Please enter your password": "DEV:Please enter your password",
|
|
||||||
"Server Info": "DEV:Server Info",
|
|
||||||
"Server Name": "DEV:Server Name",
|
|
||||||
"Sign in to <strong>:server</strong>": "DEV:Sign in to <strong>:server</strong>"
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Authentication Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are used during authentication for various
|
|
||||||
| messages that we need to display to the user. You are free to modify
|
|
||||||
| these language lines according to your application's requirements.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'failed' => 'These credentials do not match our records.',
|
|
||||||
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
|
|
||||||
|
|
||||||
];
|
|
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Pagination Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are used by the paginator library to build
|
|
||||||
| the simple pagination links. You are free to change them to anything
|
|
||||||
| you want to customize your views to better match your application.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'previous' => '« Previous',
|
|
||||||
'next' => 'Next »',
|
|
||||||
|
|
||||||
];
|
|
@ -1,22 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Password Reset Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are the default lines which match reasons
|
|
||||||
| that are given by the password broker for a password update attempt
|
|
||||||
| has failed, such as for an invalid token or invalid new password.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'reset' => 'Your password has been reset!',
|
|
||||||
'sent' => 'We have emailed your password reset link!',
|
|
||||||
'throttled' => 'Please wait before retrying.',
|
|
||||||
'token' => 'This password reset token is invalid.',
|
|
||||||
'user' => "We can't find a user with that email address.",
|
|
||||||
|
|
||||||
];
|
|
@ -1,151 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Validation Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines contain the default error messages used by
|
|
||||||
| the validator class. Some of these rules have multiple versions such
|
|
||||||
| as the size rules. Feel free to tweak each of these messages here.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'accepted' => 'The :attribute must be accepted.',
|
|
||||||
'active_url' => 'The :attribute is not a valid URL.',
|
|
||||||
'after' => 'The :attribute must be a date after :date.',
|
|
||||||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
|
||||||
'alpha' => 'The :attribute may only contain letters.',
|
|
||||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
|
|
||||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
|
||||||
'array' => 'The :attribute must be an array.',
|
|
||||||
'before' => 'The :attribute must be a date before :date.',
|
|
||||||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
|
||||||
'between' => [
|
|
||||||
'numeric' => 'The :attribute must be between :min and :max.',
|
|
||||||
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
|
||||||
'string' => 'The :attribute must be between :min and :max characters.',
|
|
||||||
'array' => 'The :attribute must have between :min and :max items.',
|
|
||||||
],
|
|
||||||
'boolean' => 'The :attribute field must be true or false.',
|
|
||||||
'confirmed' => 'The :attribute confirmation does not match.',
|
|
||||||
'date' => 'The :attribute is not a valid date.',
|
|
||||||
'date_equals' => 'The :attribute must be a date equal to :date.',
|
|
||||||
'date_format' => 'The :attribute does not match the format :format.',
|
|
||||||
'different' => 'The :attribute and :other must be different.',
|
|
||||||
'digits' => 'The :attribute must be :digits digits.',
|
|
||||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
|
||||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
|
||||||
'distinct' => 'The :attribute field has a duplicate value.',
|
|
||||||
'email' => 'The :attribute must be a valid email address.',
|
|
||||||
'ends_with' => 'The :attribute must end with one of the following: :values.',
|
|
||||||
'exists' => 'The selected :attribute is invalid.',
|
|
||||||
'file' => 'The :attribute must be a file.',
|
|
||||||
'filled' => 'The :attribute field must have a value.',
|
|
||||||
'gt' => [
|
|
||||||
'numeric' => 'The :attribute must be greater than :value.',
|
|
||||||
'file' => 'The :attribute must be greater than :value kilobytes.',
|
|
||||||
'string' => 'The :attribute must be greater than :value characters.',
|
|
||||||
'array' => 'The :attribute must have more than :value items.',
|
|
||||||
],
|
|
||||||
'gte' => [
|
|
||||||
'numeric' => 'The :attribute must be greater than or equal :value.',
|
|
||||||
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
|
|
||||||
'string' => 'The :attribute must be greater than or equal :value characters.',
|
|
||||||
'array' => 'The :attribute must have :value items or more.',
|
|
||||||
],
|
|
||||||
'image' => 'The :attribute must be an image.',
|
|
||||||
'in' => 'The selected :attribute is invalid.',
|
|
||||||
'in_array' => 'The :attribute field does not exist in :other.',
|
|
||||||
'integer' => 'The :attribute must be an integer.',
|
|
||||||
'ip' => 'The :attribute must be a valid IP address.',
|
|
||||||
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
|
||||||
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
|
||||||
'json' => 'The :attribute must be a valid JSON string.',
|
|
||||||
'lt' => [
|
|
||||||
'numeric' => 'The :attribute must be less than :value.',
|
|
||||||
'file' => 'The :attribute must be less than :value kilobytes.',
|
|
||||||
'string' => 'The :attribute must be less than :value characters.',
|
|
||||||
'array' => 'The :attribute must have less than :value items.',
|
|
||||||
],
|
|
||||||
'lte' => [
|
|
||||||
'numeric' => 'The :attribute must be less than or equal :value.',
|
|
||||||
'file' => 'The :attribute must be less than or equal :value kilobytes.',
|
|
||||||
'string' => 'The :attribute must be less than or equal :value characters.',
|
|
||||||
'array' => 'The :attribute must not have more than :value items.',
|
|
||||||
],
|
|
||||||
'max' => [
|
|
||||||
'numeric' => 'The :attribute may not be greater than :max.',
|
|
||||||
'file' => 'The :attribute may not be greater than :max kilobytes.',
|
|
||||||
'string' => 'The :attribute may not be greater than :max characters.',
|
|
||||||
'array' => 'The :attribute may not have more than :max items.',
|
|
||||||
],
|
|
||||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
|
||||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
|
||||||
'min' => [
|
|
||||||
'numeric' => 'The :attribute must be at least :min.',
|
|
||||||
'file' => 'The :attribute must be at least :min kilobytes.',
|
|
||||||
'string' => 'The :attribute must be at least :min characters.',
|
|
||||||
'array' => 'The :attribute must have at least :min items.',
|
|
||||||
],
|
|
||||||
'not_in' => 'The selected :attribute is invalid.',
|
|
||||||
'not_regex' => 'The :attribute format is invalid.',
|
|
||||||
'numeric' => 'The :attribute must be a number.',
|
|
||||||
'password' => 'The password is incorrect.',
|
|
||||||
'present' => 'The :attribute field must be present.',
|
|
||||||
'regex' => 'The :attribute format is invalid.',
|
|
||||||
'required' => 'The :attribute field is required.',
|
|
||||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
|
||||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
|
||||||
'required_with' => 'The :attribute field is required when :values is present.',
|
|
||||||
'required_with_all' => 'The :attribute field is required when :values are present.',
|
|
||||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
|
||||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
|
||||||
'same' => 'The :attribute and :other must match.',
|
|
||||||
'size' => [
|
|
||||||
'numeric' => 'The :attribute must be :size.',
|
|
||||||
'file' => 'The :attribute must be :size kilobytes.',
|
|
||||||
'string' => 'The :attribute must be :size characters.',
|
|
||||||
'array' => 'The :attribute must contain :size items.',
|
|
||||||
],
|
|
||||||
'starts_with' => 'The :attribute must start with one of the following: :values.',
|
|
||||||
'string' => 'The :attribute must be a string.',
|
|
||||||
'timezone' => 'The :attribute must be a valid zone.',
|
|
||||||
'unique' => 'The :attribute has already been taken.',
|
|
||||||
'uploaded' => 'The :attribute failed to upload.',
|
|
||||||
'url' => 'The :attribute format is invalid.',
|
|
||||||
'uuid' => 'The :attribute must be a valid UUID.',
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Custom Validation Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Here you may specify custom validation messages for attributes using the
|
|
||||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
|
||||||
| specify a specific custom language line for a given attribute rule.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'custom' => [
|
|
||||||
'attribute-name' => [
|
|
||||||
'rule-name' => 'custom-message',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Custom Validation Attributes
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are used to swap our attribute placeholder
|
|
||||||
| with something more reader friendly such as "E-Mail Address" instead
|
|
||||||
| of "email". This simply helps us make our message more expressive.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'attributes' => [],
|
|
||||||
|
|
||||||
];
|
|
143
resources/lang/zz.json
Normal file
143
resources/lang/zz.json
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
{
|
||||||
|
"(no description)": "Z(no description)",
|
||||||
|
"(none)": "Z(none)",
|
||||||
|
"(not applicable)": "Z(not applicable)",
|
||||||
|
"(not specified)": "Z(not specified)",
|
||||||
|
"(unknown syntax)": "Z(unknown syntax)",
|
||||||
|
"Add New Attribute": "ZAdd New Attribute",
|
||||||
|
"Add Objectclass": "ZAdd Objectclass",
|
||||||
|
"Add Value": "ZAdd Value",
|
||||||
|
"Aliases": "ZAliases",
|
||||||
|
"Attributes": "ZAttributes",
|
||||||
|
"attributes(s)": "Zattributes(s)",
|
||||||
|
"Attribute Types": "ZAttribute Types",
|
||||||
|
"Authority Key Identifier": "ZAuthority Key Identifier",
|
||||||
|
"Certificate Subject": "ZCertificate Subject",
|
||||||
|
"Check": "ZCheck",
|
||||||
|
"Check Password": "ZCheck Password",
|
||||||
|
"Close": "ZClose",
|
||||||
|
"Collective": "ZCollective",
|
||||||
|
"Copy\/Move": "ZCopy\/Move",
|
||||||
|
"Create Child Entry": "ZCreate Child Entry",
|
||||||
|
"Created": "ZCreated",
|
||||||
|
"Create Entry": "ZCreate Entry",
|
||||||
|
"Create New Entry": "ZCreate New Entry",
|
||||||
|
"Create new LDAP item here": "ZCreate new LDAP item here",
|
||||||
|
"Delete": "ZDelete",
|
||||||
|
"Deleted": "ZDeleted",
|
||||||
|
"Delete Entry": "ZDelete Entry",
|
||||||
|
"Deleting this DN will permanently delete it from your LDAP server.": "ZDeleting this DN will permanently delete it from your LDAP server.",
|
||||||
|
"Description": "ZDescription",
|
||||||
|
"DN": "ZDN",
|
||||||
|
"Download": "ZDownload",
|
||||||
|
"Do you want to make the following changes?": "ZDo you want to make the following changes?",
|
||||||
|
"dynamic": "Zdynamic",
|
||||||
|
"Edit Entry": "ZEdit Entry",
|
||||||
|
"Entry": "ZEntry",
|
||||||
|
"Entry updated": "ZEntry updated",
|
||||||
|
"Equality": "ZEquality",
|
||||||
|
"Error": "ZError",
|
||||||
|
"Expired": "ZExpired",
|
||||||
|
"Expires": "ZExpires",
|
||||||
|
"Export": "ZExport",
|
||||||
|
"Exported by": "ZExported by",
|
||||||
|
"Force as MAY by config": "ZForce as MAY by config",
|
||||||
|
"Generated by": "ZGenerated by",
|
||||||
|
"Home": "ZHome",
|
||||||
|
"Ignoring blank value": "ZIgnoring blank value",
|
||||||
|
"Import Result": "ZImport Result",
|
||||||
|
"Inherits from": "ZInherits from",
|
||||||
|
"Internal": "ZInternal",
|
||||||
|
"Invalid Password": "ZInvalid Password",
|
||||||
|
"KRB_DISALLOW_ALL_TIX": "ZKRB_DISALLOW_ALL_TIX",
|
||||||
|
"KRB_DISALLOW_DUP_SKEY": "ZKRB_DISALLOW_DUP_SKEY",
|
||||||
|
"KRB_DISALLOW_FORWARDABLE": "ZKRB_DISALLOW_FORWARDABLE",
|
||||||
|
"KRB_DISALLOW_POSTDATED": "ZKRB_DISALLOW_POSTDATED",
|
||||||
|
"KRB_DISALLOW_PROXIABLE": "ZKRB_DISALLOW_PROXIABLE",
|
||||||
|
"KRB_DISALLOW_RENEWABLE": "ZKRB_DISALLOW_RENEWABLE",
|
||||||
|
"KRB_DISALLOW_SVR": "ZKRB_DISALLOW_SVR",
|
||||||
|
"KRB_DISALLOW_TGT_BASED": "ZKRB_DISALLOW_TGT_BASED",
|
||||||
|
"KRB_PWCHANGE_SERVICE": "ZKRB_PWCHANGE_SERVICE",
|
||||||
|
"KRB_REQUIRES_HW_AUTH": "ZKRB_REQUIRES_HW_AUTH",
|
||||||
|
"KRB_REQUIRES_PRE_AUTH": "ZKRB_REQUIRES_PRE_AUTH",
|
||||||
|
"KRB_REQUIRES_PWCHANGE": "ZKRB_REQUIRES_PWCHANGE",
|
||||||
|
"LDAP Authentication Error": "ZLDAP Authentication Error",
|
||||||
|
"LDAP Entry": "ZLDAP Entry",
|
||||||
|
"LDAP Server Error Code": "ZLDAP Server Error Code",
|
||||||
|
"LDAP Server Unavailable": "ZLDAP Server Unavailable",
|
||||||
|
"LDIF": "ZLDIF",
|
||||||
|
"LDIF Import": "ZLDIF Import",
|
||||||
|
"LDIF Import Result": "ZLDIF Import Result",
|
||||||
|
"Line": "ZLine",
|
||||||
|
"locale": "ZZ",
|
||||||
|
"Matching Rules": "ZMatching Rules",
|
||||||
|
"Maximum file size": "ZMaximum file size",
|
||||||
|
"Maximum Length": "ZMaximum Length",
|
||||||
|
"NEW": "ZNEW",
|
||||||
|
"New Value": "ZNew Value",
|
||||||
|
"Next": "ZNext",
|
||||||
|
"No attributes changed": "ZNo attributes changed",
|
||||||
|
"No description available, can you help with one?": "ZNo description available, can you help with one?",
|
||||||
|
"No Server Name Yet": "ZNo Server Name Yet",
|
||||||
|
"NOT DEFINED": "ZNOT DEFINED",
|
||||||
|
"Not Implemented": "ZNot Implemented",
|
||||||
|
"Object Classes": "ZObject Classes",
|
||||||
|
"Object Identifier": "ZObject Identifier",
|
||||||
|
"Obsolete": "ZObsolete",
|
||||||
|
"Optional Attributes": "ZOptional Attributes",
|
||||||
|
"Ordering": "ZOrdering",
|
||||||
|
"Or upload LDIF file": "ZOr upload LDIF file",
|
||||||
|
"Parent to": "ZParent to",
|
||||||
|
"Paste in your LDIF here": "ZPaste in your LDIF here",
|
||||||
|
"Possible Causes": "ZPossible Causes",
|
||||||
|
"Process": "ZProcess",
|
||||||
|
"rdn": "Zrdn",
|
||||||
|
"RDN is required": "ZRDN is required",
|
||||||
|
"RDN is required.": "ZRDN is required.",
|
||||||
|
"RDN value is required.": "ZRDN value is required.",
|
||||||
|
"Rename": "ZRename",
|
||||||
|
"Replace": "ZReplace",
|
||||||
|
"required": "Zrequired",
|
||||||
|
"Required Attribute by ObjectClass(es)": "ZRequired Attribute by ObjectClass(es)",
|
||||||
|
"Required Attributes": "ZRequired Attributes",
|
||||||
|
"Required by ObjectClasses": "ZRequired by ObjectClasses",
|
||||||
|
"Reset": "ZReset",
|
||||||
|
"Result": "ZResult",
|
||||||
|
"Schema Information": "ZSchema Information",
|
||||||
|
"Search Filter": "ZSearch Filter",
|
||||||
|
"Search Scope": "ZSearch Scope",
|
||||||
|
"Select a Structural ObjectClass...": "ZSelect a Structural ObjectClass...",
|
||||||
|
"Select attribute...": "ZSelect attribute...",
|
||||||
|
"Select from": "ZSelect from",
|
||||||
|
"Serial Number": "ZSerial Number",
|
||||||
|
"Server": "ZServer",
|
||||||
|
"Server Info": "ZServer Info",
|
||||||
|
"Single Valued": "ZSingle Valued",
|
||||||
|
"Step": "ZStep",
|
||||||
|
"structural": "Zstructural",
|
||||||
|
"Subject Key Identifier": "ZSubject Key Identifier",
|
||||||
|
"Substring Rule": "ZSubstring Rule",
|
||||||
|
"Syntax": "ZSyntax",
|
||||||
|
"Syntaxes": "ZSyntaxes",
|
||||||
|
"These are dynamic values present as a result of another attribute": "ZThese are dynamic values present as a result of another attribute",
|
||||||
|
"This attribute is required for the RDN": "ZThis attribute is required for the RDN",
|
||||||
|
"To Server": "ZTo Server",
|
||||||
|
"Total Entries": "ZTotal Entries",
|
||||||
|
"Type": "ZType",
|
||||||
|
"Unknown": "ZUnknown",
|
||||||
|
"Untrapped Error": "ZUntrapped Error",
|
||||||
|
"Update": "ZUpdate",
|
||||||
|
"Updated": "ZUpdated",
|
||||||
|
"Upload JpegPhoto": "ZUpload JpegPhoto",
|
||||||
|
"Usage": "ZUsage",
|
||||||
|
"Used by Attributes": "ZUsed by Attributes",
|
||||||
|
"Used by ObjectClasses": "ZUsed by ObjectClasses",
|
||||||
|
"User Modification": "ZUser Modification",
|
||||||
|
"Validation Errors": "ZValidation Errors",
|
||||||
|
"Version": "ZVersion",
|
||||||
|
"WARNING": "ZWARNING",
|
||||||
|
"Your DNS server cannot resolve that hostname": "ZYour DNS server cannot resolve that hostname",
|
||||||
|
"Your LDAP server hostname is incorrect": "ZYour LDAP server hostname is incorrect",
|
||||||
|
"Your LDAP server is not connectable": "ZYour LDAP server is not connectable",
|
||||||
|
"Your Resolver is not pointing to your DNS server": "ZYour Resolver is not pointing to your DNS server"
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html translate="no">
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" translate="no">
|
||||||
@section('htmlheader')
|
@section('htmlheader')
|
||||||
@include('architect::layouts.partials.htmlheader')
|
@include('architect::layouts.partials.htmlheader')
|
||||||
@show
|
@show
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
<span></span>
|
<span></span>
|
||||||
<div id="searching" class="d-none"><i class="fas fa-fw fa-spinner fa-pulse text-light"></i></div>
|
<div id="searching" class="d-none"><i class="fas fa-fw fa-spinner fa-pulse text-light"></i></div>
|
||||||
</button>
|
</button>
|
||||||
<div id="search_results" class="overflow-scroll" style="height: 300px;"></div>
|
<div id="search_results"></div>
|
||||||
</div>
|
</div>
|
||||||
<button class="btn-close"></button>
|
<button class="btn-close"></button>
|
||||||
</div>
|
</div>
|
||||||
@ -164,13 +164,6 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
@section('page-scripts')
|
@section('page-scripts')
|
||||||
<style>
|
|
||||||
#search_results ul.typeahead.dropdown-menu {
|
|
||||||
overflow: scroll;
|
|
||||||
max-height: 300px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('button[id^="link-"]').on('click',function(item) {
|
$('button[id^="link-"]').on('click',function(item) {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<!-- $o=Certificate::class -->
|
<!-- $o=Certificate::class -->
|
||||||
<x-attribute.layout :edit="$edit" :new="$new" :o="$o">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o">
|
||||||
@foreach($o->tagValuesOld('binary') as $key => $value)
|
@foreach($o->tagValuesOld('binary') as $key => $value)
|
||||||
<!-- If this attribute is not handle, it'll be an Attribute::class, we'll just render it normally -->
|
<!-- If this attribute is not handled, it'll be an Attribute::class, we'll just render it normally -->
|
||||||
@if(($o instanceof Certificate) && $edit)
|
@if(($o instanceof Certificate) && $edit)
|
||||||
<input type="hidden" name="name={{ $o->name_lc }}[binary][]" value="{{ md5($value) }}">
|
<input type="hidden" name="name={{ $o->name_lc }}[binary][]" value="{{ md5($value) }}">
|
||||||
|
|
||||||
@ -16,9 +16,29 @@
|
|||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-helper">
|
<div class="input-helper small">
|
||||||
@lang('Certificate Subject'): <strong>{{ $o->subject($loop->index) }}</strong><br/>
|
<table class="table table-borderless w-75">
|
||||||
{{ ($expire=$o->expires($loop->index))->isPast() ? __('Expired') : __('Expires') }}: <strong>{{ $expire->format(config('pla.datetime_format','Y-m-d H:i:s')) }}</strong>
|
<tr >
|
||||||
|
<td class="p-0">@lang('Certificate Subject')</td>
|
||||||
|
<th class="p-0">{{ $o->subject($loop->index) }}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="p-0">{{ ($expire=$o->expires($loop->index))->isPast() ? __('Expired') : __('Expires') }}</td>
|
||||||
|
<th class="p-0">{{ $expire->format(config('pla.datetime_format','Y-m-d H:i:s')) }}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="p-0">@lang('Serial Number')</td>
|
||||||
|
<th class="p-0">{{ $o->cert_info('serialNumberHex',$loop->index) }}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="p-0">@lang('Subject Key Identifier')</td>
|
||||||
|
<th class="p-0">{{ $o->subject_key_identifier($loop->index) }}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="p-0">@lang('Authority Key Identifier')</td>
|
||||||
|
<th class="p-0">{{ $o->authority_key_identifier($loop->index) }}</th>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@else
|
@else
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
<!-- $o=CertificateList::class -->
|
<!-- $o=CertificateList::class -->
|
||||||
<x-attribute.layout :edit="$edit" :new="$new" :o="$o">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o">
|
||||||
@foreach($o->tagValuesOld('binary') as $key => $value)
|
@foreach($o->tagValuesOld('binary') as $key => $value)
|
||||||
<!-- If this attribute is not handle, it'll be an Attribute::class, we'll just render it normally -->
|
<div class="input-group has-validation mb-3">
|
||||||
<span class="form-control mb-1"><pre class="m-0">{{ $o->render_item_old('binary.'.$key) }}</pre></span>
|
<textarea class="form-control mb-1 font-size-md font-monospace overflow-hidden" rows="{{ count(explode("\n",$x=$o->render_item_old('binary.'.$key))) }}" disabled>{{ $x }}</textarea>
|
||||||
|
|
||||||
|
<div class="invalid-feedback pb-2">
|
||||||
|
@if($e=$errors->get($o->name_lc.'.binary.'.$loop->index))
|
||||||
|
{{ join('|',$e) }}
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
</x-attribute.layout>
|
</x-attribute.layout>
|
@ -44,6 +44,12 @@
|
|||||||
<td>Root URL</td>
|
<td>Root URL</td>
|
||||||
<td>{{ request()->root() }}</td>
|
<td>{{ request()->root() }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<!-- Locale -->
|
||||||
|
<tr>
|
||||||
|
<td>Locale</td>
|
||||||
|
<td>{{ __('locale') }} [{{ config('app.locale') }}]</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
@ -8,13 +8,13 @@
|
|||||||
<div class="d-none round" id="newattr-select">
|
<div class="d-none round" id="newattr-select">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 bg-dark text-light p-2 rounded-2">
|
<div class="col-12 bg-dark text-light p-2 rounded-2">
|
||||||
<i class="fas fa-plus-circle"></i> Add New Attribute
|
<i class="fas fa-plus-circle"></i> @lang('Add New Attribute')
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 pt-2">
|
<div class="col-12 pt-2">
|
||||||
<x-form.select id="newattr" label="Select from..." :options="$o->getMissingAttributes()->sortBy('name')->unique('name')->map(fn($item)=>['id'=>$item->name,'value'=>$item->name])"/>
|
<x-form.select id="newattr" :label="__('Select from').'...'" :options="$o->getMissingAttributes()->sortBy('name')->unique('name')->map(fn($item)=>['id'=>$item->name,'value'=>$item->name])"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
<div class="row d-none pt-3">
|
<div class="row d-none pt-3">
|
||||||
<div class="col-12 {{ $step > 1 ? 'offset-sm-2' : '' }} col-lg-10">
|
<div class="col-12 {{ $step > 1 ? 'offset-sm-2' : '' }} col-lg-10">
|
||||||
<x-form.reset form="dn-create"/>
|
<x-form.reset form="dn-create"/>
|
||||||
<x-form.submit action="Next" form="dn-create"/>
|
<x-form.submit :action="__('Next')" form="dn-create"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -50,10 +50,6 @@
|
|||||||
<div class="alert alert-danger p-2">
|
<div class="alert alert-danger p-2">
|
||||||
This entry has [<strong>{!! $x->flatten()->join('</strong>, <strong>') !!}</strong>] tags used by [<strong>{!! $x->keys()->join('</strong>, <strong>') !!}</strong>] that cant be managed by PLA. You can though manage those tags with an LDIF import.
|
This entry has [<strong>{!! $x->flatten()->join('</strong>, <strong>') !!}</strong>] tags used by [<strong>{!! $x->keys()->join('</strong>, <strong>') !!}</strong>] that cant be managed by PLA. You can though manage those tags with an LDIF import.
|
||||||
</div>
|
</div>
|
||||||
@elseif(($x=$o->getLangMultiTags())->count())
|
|
||||||
<div class="alert alert-danger p-2">
|
|
||||||
This entry has multi-language tags used by [<strong>{!! $x->keys()->join('</strong>, <strong>') !!}</strong>] that cant be managed by PLA. You can though manage those lang tags with an LDIF import.
|
|
||||||
</div>
|
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<x-note/>
|
<x-note/>
|
||||||
@ -124,7 +120,7 @@
|
|||||||
<div class="row d-none pt-3">
|
<div class="row d-none pt-3">
|
||||||
<div class="col-12 offset-sm-2 col-sm-4 col-lg-2">
|
<div class="col-12 offset-sm-2 col-sm-4 col-lg-2">
|
||||||
<x-form.reset form="dn-edit"/>
|
<x-form.reset form="dn-edit"/>
|
||||||
<x-form.submit action="Update" form="dn-edit"/>
|
<x-form.submit :action="__('Update')" form="dn-edit"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<span class="ms-auto">
|
<span class="ms-auto">
|
||||||
<x-form.submit action="Process" form="import-form"/>
|
<x-form.submit :action="__('Process')" form="import-form"/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -64,7 +64,7 @@
|
|||||||
<div class="row p-3">
|
<div class="row p-3">
|
||||||
<div class="col-12 offset-sm-2 col-sm-4 col-lg-2 mx-auto">
|
<div class="col-12 offset-sm-2 col-sm-4 col-lg-2 mx-auto">
|
||||||
<x-form.cancel/>
|
<x-form.cancel/>
|
||||||
<x-form.submit action="Update" form="dn-update"/>
|
<x-form.submit :action="__('Update')" form="dn-update"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user