For the schema browser, highlight structural object classes when showing attributes. Expose objectclass objects instead of names for objectclasses of a DN
This commit is contained in:
parent
05012c9e6c
commit
4dfebe9053
@ -5,27 +5,31 @@ namespace App\Classes\LDAP\Attribute;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
use App\Classes\LDAP\{Attribute,Server};
|
||||
use App\Classes\LDAP\Attribute;
|
||||
|
||||
/**
|
||||
* Represents an ObjectClass Attribute
|
||||
*/
|
||||
final class ObjectClass extends Attribute
|
||||
{
|
||||
// Which of the values is the structural object class
|
||||
protected Collection $structural;
|
||||
// The schema ObjectClasses for this objectclass of a DN
|
||||
protected Collection $oc_schema;
|
||||
|
||||
public function __construct(string $name,array $values)
|
||||
{
|
||||
parent::__construct($name,$values);
|
||||
|
||||
$this->structural = collect();
|
||||
$this->oc_schema = config('server')
|
||||
->schema('objectclasses')
|
||||
->filter(fn($item)=>$this->values->contains($item->name));
|
||||
}
|
||||
|
||||
// Determine which of the values is the structural objectclass
|
||||
foreach ($values as $oc) {
|
||||
if ((new Server)->schema('objectclasses',$oc)->isStructural())
|
||||
$this->structural->push($oc);
|
||||
}
|
||||
public function __get(string $key): mixed
|
||||
{
|
||||
return match ($key) {
|
||||
'structural' => $this->oc_schema->filter(fn($item) => $item->isStructural()),
|
||||
default => parent::__get($key),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -36,7 +40,9 @@ final class ObjectClass extends Attribute
|
||||
*/
|
||||
public function isStructural(string $value): bool
|
||||
{
|
||||
return $this->structural->contains($value);
|
||||
return $this->structural
|
||||
->map(fn($item)=>$item->name)
|
||||
->contains($value);
|
||||
}
|
||||
|
||||
public function render(bool $edit=FALSE,bool $old=FALSE,bool $new=FALSE): View
|
||||
|
@ -334,10 +334,10 @@ final class AttributeType extends Base {
|
||||
*
|
||||
* @param string $name The name of the objectClass to add.
|
||||
*/
|
||||
public function addUsedInObjectClass(string $name): void
|
||||
public function addUsedInObjectClass(string $name,bool $structural): void
|
||||
{
|
||||
if (! $this->used_in_object_classes->contains($name))
|
||||
$this->used_in_object_classes->push($name);
|
||||
if (! $this->used_in_object_classes->has($name))
|
||||
$this->used_in_object_classes->put($name,$structural);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -442,7 +442,7 @@ final class Server
|
||||
// Add Used In.
|
||||
foreach ($oclass_attrs as $attr_name)
|
||||
if ($this->attributetypes->has(strtolower($attr_name)))
|
||||
$this->attributetypes[strtolower($attr_name)]->addUsedInObjectClass($object_class->name);
|
||||
$this->attributetypes[strtolower($attr_name)]->addUsedInObjectClass($object_class->name,$object_class->isStructural());
|
||||
|
||||
// Add Required By.
|
||||
foreach ($must_attrs as $attr_name)
|
||||
|
@ -90,16 +90,21 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>@lang('Used by ObjectClasses')</td>
|
||||
<td><strong>
|
||||
<td>
|
||||
@if ($o->used_in_object_classes->count())
|
||||
@foreach ($o->used_in_object_classes as $class)
|
||||
@if ($loop->index)</strong> <strong>@endif
|
||||
@foreach ($o->used_in_object_classes as $class => $structural)
|
||||
@if($structural)
|
||||
<strong>
|
||||
@endif
|
||||
<a class="objectclass" id="{{ strtolower($class) }}" href="#{{ strtolower($class) }}">{{ $class }}</a>
|
||||
@if($structural)
|
||||
</strong>
|
||||
@endif
|
||||
@endforeach
|
||||
@else
|
||||
@lang('(none)')
|
||||
@endif
|
||||
</strong></td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>@lang('Force as MAY by config')</td><td><strong>@lang($o->forced_as_may ? 'Yes' : 'No')</strong></td>
|
||||
|
Loading…
x
Reference in New Issue
Block a user