Also some minor fixes when returning from a post for a DN with attribute tags.
This commit is contained in:
parent
c4d28c8a23
commit
1bf8830887
@ -242,6 +242,10 @@ class Attribute implements \Countable, \ArrayAccess
|
|||||||
if ($this->required()->count())
|
if ($this->required()->count())
|
||||||
$result->put(__('required'),sprintf('%s: %s',__('Required Attribute by ObjectClass(es)'),$this->required()->join(', ')));
|
$result->put(__('required'),sprintf('%s: %s',__('Required Attribute by ObjectClass(es)'),$this->required()->join(', ')));
|
||||||
|
|
||||||
|
// If this attribute is a dynamic attribute
|
||||||
|
if ($this->isDynamic())
|
||||||
|
$result->put(__('dynamic'),__('These are dynamic values present as a result of another attribute'));
|
||||||
|
|
||||||
return $result->toArray();
|
return $result->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,6 +261,19 @@ class Attribute implements \Countable, \ArrayAccess
|
|||||||
|| ($a->diff($b)->count() !== 0);
|
|| ($a->diff($b)->count() !== 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are these values as a result of a dynamic attribute
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isDynamic(): bool
|
||||||
|
{
|
||||||
|
return $this->schema->used_in_object_classes
|
||||||
|
->keys()
|
||||||
|
->intersect($this->schema->heirachy($this->oc))
|
||||||
|
->count() === 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Work out if this attribute is an RDN attribute
|
* Work out if this attribute is an RDN attribute
|
||||||
*
|
*
|
||||||
|
@ -486,6 +486,28 @@ final class AttributeType extends Base {
|
|||||||
return $this->used_in_object_classes;
|
return $this->used_in_object_classes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For a list of objectclasses return all parent objectclasses as well
|
||||||
|
*
|
||||||
|
* @param Collection $ocs
|
||||||
|
* @return Collection
|
||||||
|
*/
|
||||||
|
public function heirachy(Collection $ocs): Collection
|
||||||
|
{
|
||||||
|
$result = collect();
|
||||||
|
|
||||||
|
foreach ($ocs as $oc) {
|
||||||
|
$schema = config('server')
|
||||||
|
->schema('objectclasses',$oc)
|
||||||
|
->getParents(TRUE)
|
||||||
|
->pluck('name');
|
||||||
|
|
||||||
|
$result = $result->merge($schema)->push($oc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
* @deprecated use $this->forced_as_may
|
* @deprecated use $this->forced_as_may
|
||||||
@ -555,15 +577,9 @@ final class AttributeType extends Base {
|
|||||||
public function validation(array $array): ?array
|
public function validation(array $array): ?array
|
||||||
{
|
{
|
||||||
// For each item in array, we need to get the OC hierarchy
|
// For each item in array, we need to get the OC hierarchy
|
||||||
$heirachy = collect($array)
|
$heirachy = $this->heirachy(collect($array)
|
||||||
->flatten()
|
->flatten()
|
||||||
->filter()
|
->filter());
|
||||||
->map(fn($item)=>config('server')
|
|
||||||
->schema('objectclasses',$item)
|
|
||||||
->getSupClasses()
|
|
||||||
->push($item))
|
|
||||||
->flatten()
|
|
||||||
->unique();
|
|
||||||
|
|
||||||
// Get any config validation
|
// Get any config validation
|
||||||
$validation = collect(Arr::get(config('ldap.validation'),$this->name_lc,[]));
|
$validation = collect(Arr::get(config('ldap.validation'),$this->name_lc,[]));
|
||||||
|
@ -13,15 +13,17 @@ class AttributeType extends Component
|
|||||||
{
|
{
|
||||||
private LDAPAttribute $o;
|
private LDAPAttribute $o;
|
||||||
private bool $new;
|
private bool $new;
|
||||||
|
private bool $edit;
|
||||||
private string $langtag;
|
private string $langtag;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new component instance.
|
* Create a new component instance.
|
||||||
*/
|
*/
|
||||||
public function __construct(LDAPAttribute $o,bool $new=FALSE,string $langtag=Entry::TAG_NOTAG)
|
public function __construct(LDAPAttribute $o,bool $new=FALSE,bool $edit=FALSE,string $langtag=Entry::TAG_NOTAG)
|
||||||
{
|
{
|
||||||
$this->o = $o;
|
$this->o = $o;
|
||||||
$this->new = $new;
|
$this->new = $new;
|
||||||
|
$this->edit = $edit;
|
||||||
$this->langtag = $langtag;
|
$this->langtag = $langtag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,6 +35,7 @@ class AttributeType extends Component
|
|||||||
return view('components.attribute-type')
|
return view('components.attribute-type')
|
||||||
->with('o',$this->o)
|
->with('o',$this->o)
|
||||||
->with('new',$this->new)
|
->with('new',$this->new)
|
||||||
|
->with('edit',$this->edit)
|
||||||
->with('langtag',$this->langtag);
|
->with('langtag',$this->langtag);
|
||||||
}
|
}
|
||||||
}
|
}
|
2
public/css/custom.css
vendored
2
public/css/custom.css
vendored
@ -2,7 +2,7 @@
|
|||||||
attribute#userPassword .select2-container--bootstrap-5 .select2-selection {
|
attribute#userPassword .select2-container--bootstrap-5 .select2-selection {
|
||||||
font-size: inherit;
|
font-size: inherit;
|
||||||
width: 9em;
|
width: 9em;
|
||||||
border: #444054 1px solid;
|
border: var(--bs-gray-500) 1px solid;
|
||||||
background-color: #f0f0f0;
|
background-color: #f0f0f0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<x-attribute :o="$o" :edit="true" :new="$new ?? FALSE" :langtag="$langtag"/>
|
<x-attribute :o="$o" :edit="$edit" :new="$new" :langtag="$langtag"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<!-- $o=Attribute::class -->
|
<!-- $o=Attribute::class -->
|
||||||
<x-attribute.layout :edit="$edit ?? FALSE" :new="$new ?? FALSE" :o="$o">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
@foreach(Arr::get(old($o->name_lc,[$langtag=>($new ?? FALSE) ? [NULL] : $o->tagValues($langtag)]),$langtag) as $key => $value)
|
@foreach(Arr::get(old($o->name_lc,[$langtag=>$new ? [NULL] : $o->tagValues($langtag)]),$langtag,[]) as $key => $value)
|
||||||
@if(($edit ?? FALSE) && ! $o->is_rdn)
|
@if($edit && (! $o->is_rdn))
|
||||||
<div class="input-group has-validation">
|
<div class="input-group has-validation">
|
||||||
<input type="text" @class(['form-control','is-invalid'=>($e=$errors->get($o->name_lc.'.'.$langtag.'.'.$loop->index)),'mb-1','border-focus'=>! ($tv=$o->tagValuesOld($langtag))->contains($value)]) name="{{ $o->name_lc }}[{{ $langtag }}][]" value="{{ $value }}" placeholder="{{ ! is_null($x=$tv->get($loop->index)) ? $x : '['.__('NEW').']' }}" @readonly(! ($new ?? FALSE))>
|
<input type="text" @class(['form-control','is-invalid'=>($e=$errors->get($o->name_lc.'.'.$langtag.'.'.$loop->index)),'mb-1','border-focus'=>! ($tv=$o->tagValuesOld($langtag))->contains($value)]) name="{{ $o->name_lc }}[{{ $langtag }}][]" value="{{ $value }}" placeholder="{{ ! is_null($x=$tv->get($loop->index)) ? $x : '['.__('NEW').']' }}" @readonly(! $new) @disabled($o->isDynamic())>
|
||||||
|
|
||||||
<div class="invalid-feedback pb-2">
|
<div class="invalid-feedback pb-2">
|
||||||
@if($e)
|
@if($e)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<!-- @todo We are not handling redirect backs yet with updated photos -->
|
<!-- @todo We are not handling redirect backs yet with updated photos -->
|
||||||
<!-- $o=Binary\JpegPhoto::class -->
|
<!-- $o=Binary\JpegPhoto::class -->
|
||||||
<x-attribute.layout :edit="$edit ?? FALSE" :new="$new ?? FALSE" :o="$o" :langtag="$langtag">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o" :langtag="$langtag">
|
||||||
<table class="table table-borderless p-0 m-0">
|
<table class="table table-borderless p-0 m-0">
|
||||||
@foreach($o->tagValuesOld() as $key => $value)
|
@foreach($o->tagValuesOld() as $key => $value)
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<!-- @todo We are not handling redirect backs yet with updated passwords -->
|
<!-- @todo We are not handling redirect backs yet with updated passwords -->
|
||||||
<!-- $o=KrbPrincipleKey::class -->
|
<!-- $o=KrbPrincipleKey::class -->
|
||||||
<x-attribute.layout :edit="$edit ?? FALSE" :new="$new ?? FALSE" :o="$o" :langtag="$langtag">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o" :langtag="$langtag">
|
||||||
@foreach($o->tagValuesOld($langtag) as $key => $value)
|
@foreach($o->tagValuesOld($langtag) as $key => $value)
|
||||||
@if($edit)
|
@if($edit)
|
||||||
<div class="input-group has-validation mb-3">
|
<div class="input-group has-validation mb-3">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- $o=KrbTicketFlags::class -->
|
<!-- $o=KrbTicketFlags::class -->
|
||||||
<x-attribute.layout :edit="$edit ?? FALSE" :new="$new ?? FALSE" :o="$o">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o">
|
||||||
@foreach(Arr::get(old($o->name_lc,[$langtag=>$o->tagValues($langtag)]),$langtag,[]) as $key => $value)
|
@foreach(Arr::get(old($o->name_lc,[$langtag=>$o->tagValues($langtag)]),$langtag,[]) as $key => $value)
|
||||||
@if($edit)
|
@if($edit)
|
||||||
<div id="32"></div>
|
<div id="32"></div>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<!-- $o=Attribute/ObjectClass::class -->
|
<!-- $o=Attribute/ObjectClass::class -->
|
||||||
<x-attribute.layout :edit="$edit" :new="$new" :o="$o" :langtag="$langtag">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o" :langtag="$langtag">
|
||||||
@foreach(Arr::get(old($o->name_lc,[$langtag=>($new ?? FALSE) ? [NULL] : $o->tagValues($langtag)]),$langtag) as $key => $value)
|
@foreach(Arr::get(old($o->name_lc,[$langtag=>$new ? [NULL] : $o->tagValues($langtag)]),$langtag,[]) as $key => $value)
|
||||||
@if($edit)
|
@if($edit)
|
||||||
<x-attribute.widget.objectclass :o="$o" :edit="$edit" :new="$new" :loop="$loop" :value="$value" :langtag="$langtag"/>
|
<x-attribute.widget.objectclass :o="$o" :edit="$edit" :new="$new" :loop="$loop" :value="$value" :langtag="$langtag"/>
|
||||||
@else
|
@else
|
||||||
{{ $o->render_item_old($langtag.'.'.$key) }}
|
{{ $o->render_item_old($key) }}
|
||||||
@if ($o->isStructural($value))
|
@if ($o->isStructural($value))
|
||||||
<input type="hidden" name="{{ $o->name_lc }}[{{ $langtag }}][]" value="{{ $value }}">
|
<input type="hidden" name="{{ $o->name_lc }}[{{ $langtag }}][]" value="{{ $value }}">
|
||||||
<span class="float-end">@lang('structural')</span>
|
<span class="float-end">@lang('structural')</span>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<!-- @todo We are not handling redirect backs yet with updated passwords -->
|
<!-- @todo We are not handling redirect backs yet with updated passwords -->
|
||||||
<!-- $o=Password::class -->
|
<!-- $o=Password::class -->
|
||||||
<x-attribute.layout :edit="$edit ?? FALSE" :new="$new ?? FALSE" :o="$o" :langtag="$langtag">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o" :langtag="$langtag">
|
||||||
@foreach($o->tagValuesOld($langtag) as $key => $value)
|
@foreach($o->tagValuesOld($langtag) as $key => $value)
|
||||||
@if($edit)
|
@if($edit)
|
||||||
<div class="input-group has-validation mb-3">
|
<div class="input-group has-validation mb-3">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- $o=RDN::class -->
|
<!-- $o=RDN::class -->
|
||||||
<x-attribute.layout :edit="$edit ?? FALSE" :new="$new ?? FALSE" :o="$o">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o">
|
||||||
@foreach(($o->values->count() ? $o->values : ['']) as $value)
|
@foreach(($o->values->count() ? $o->values : ['']) as $value)
|
||||||
@if($edit)
|
@if($edit)
|
||||||
<div class="input-group has-validation mb-3">
|
<div class="input-group has-validation mb-3">
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
<!-- $o=UserCertificate::class -->
|
<!-- $o=UserCertificate::class -->
|
||||||
<x-attribute.layout :edit="$edit ?? FALSE" :new="$new ?? FALSE" :o="$o" langtag="binary">
|
<x-attribute.layout :edit="$edit" :new="$new" :o="$o" langtag="binary">
|
||||||
@foreach($o->tagValuesOld('binary') as $key => $value)
|
@foreach($o->tagValuesOld('binary') as $key => $value)
|
||||||
@if($edit)
|
@if($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) }}">
|
||||||
|
|
||||||
<div class="input-group has-validation mb-3">
|
<div class="input-group has-validation mb-3">
|
||||||
<textarea class="form-control mb-1 font-monospace" rows="{{ count(explode("\n",$x=$o->certificate())) }}" style="overflow:hidden" disabled>{{ $x }}</textarea>
|
<textarea class="form-control mb-1 font-monospace" rows="{{ count(explode("\n",$x=$o->certificate())) }}" style="overflow: hidden; font-size: 90%;" disabled>{{ $x }}</textarea>
|
||||||
|
|
||||||
<div class="invalid-feedback pb-2">
|
<div class="invalid-feedback pb-2">
|
||||||
@if($e=$errors->get($o->name_lc.'.'.$langtag.'.'.$loop->index))
|
@if($e=$errors->get($o->name_lc.'.'.$langtag.'.'.$loop->index))
|
||||||
|
@ -244,6 +244,7 @@
|
|||||||
|
|
||||||
<!-- All other attributes -->
|
<!-- All other attributes -->
|
||||||
@default
|
@default
|
||||||
|
@if($o->isDynamic()) @break @endif
|
||||||
@php($clone=TRUE)
|
@php($clone=TRUE)
|
||||||
<span @class(['btn','btn-sm','btn-outline-primary','mt-3','addable','d-none'=>(! $new)]) id="{{ $o->name }}-addnew"><i class="fas fa-fw fa-plus"></i> @lang('Add Value')</span>
|
<span @class(['btn','btn-sm','btn-outline-primary','mt-3','addable','d-none'=>(! $new)]) id="{{ $o->name }}-addnew"><i class="fas fa-fw fa-plus"></i> @lang('Add Value')</span>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- $o=Attribute::class -->
|
<!-- $o=Attribute::class -->
|
||||||
<x-attribute.layout :edit="false" :new="false" :detail="true" :o="$o">
|
<x-attribute.layout :edit="false" :new="false" :o="$o" :detail="true">
|
||||||
@foreach(Arr::get(old($o->name_lc,[$langtag=>$o->tagValues($langtag)]),$langtag,[]) as $value)
|
@foreach(Arr::get(old($o->name_lc,[$langtag=>$o->tagValues($langtag)]),$langtag,[]) as $value)
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" class="form-control mb-1" value="{{ \Carbon\Carbon::createFromTimestamp(strtotime($value))->format(config('pla.datetime_format','Y-m-d H:i:s')) }}" disabled>
|
<input type="text" class="form-control mb-1" value="{{ \Carbon\Carbon::createFromTimestamp(strtotime($value))->format(config('pla.datetime_format','Y-m-d H:i:s')) }}" disabled>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- $o=Attribute::class -->
|
<!-- $o=Attribute::class -->
|
||||||
<x-attribute.layout :edit="false" :new="false" :detail="true" :o="$o">
|
<x-attribute.layout :edit="false" :new="false" :o="$o" :detail="true">
|
||||||
@foreach(Arr::get(old($o->name_lc,[$langtag=>$o->tagValues($langtag)]),$langtag,[]) as $value)
|
@foreach(Arr::get(old($o->name_lc,[$langtag=>$o->tagValues($langtag)]),$langtag,[]) as $value)
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" class="form-control mb-1" value="{{ $value }}" disabled>
|
<input type="text" class="form-control mb-1" value="{{ $value }}" disabled>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user