Compare commits

...

3 Commits

Author SHA1 Message Date
a7be4e00b4 Fix rendering new attributes, so that they dont render as dynamic. Fix adding new objectClasses to entries, need langtag to render the component
All checks were successful
Create Docker Image / Test Application (x86_64) (push) Successful in 28s
Create Docker Image / Build Docker Image (x86_64) (push) Successful in 1m28s
Create Docker Image / Build Docker Image (arm64) (push) Successful in 4m47s
Create Docker Image / Final Docker Image Manifest (push) Successful in 9s
2025-04-08 22:04:48 +10:00
2abc321eca Fix for showing no_lang_tag attrs (which are displayed without values) on a lang_tag attr pane when viewing a DN 2025-04-08 14:50:23 +10:00
6b2fb8dee4 Dont add hints for internal attributes. Our hints now also returns a collection. 2025-04-08 11:04:31 +10:00
10 changed files with 36 additions and 25 deletions

View File

@ -226,12 +226,15 @@ class Attribute implements \Countable, \ArrayAccess
/**
* Return the hints about this attribute, ie: RDN, Required, etc
*
* @return array
* @return Collection
*/
public function hints(): array
public function hints(): Collection
{
$result = collect();
if ($this->is_internal)
return $result;
// Is this Attribute an RDN
if ($this->is_rdn)
$result->put(__('rdn'),__('This attribute is required for the RDN'));
@ -246,7 +249,7 @@ class Attribute implements \Countable, \ArrayAccess
if ($this->isDynamic())
$result->put(__('dynamic'),__('These are dynamic values present as a result of another attribute'));
return $result->toArray();
return $result;
}
/**

View File

@ -6,6 +6,7 @@ use Illuminate\Contracts\View\View;
use Illuminate\Support\Collection;
use App\Classes\LDAP\Attribute;
use App\Ldap\Entry;
/**
* Represents an ObjectClass Attribute
@ -74,6 +75,7 @@ final class ObjectClass extends Attribute
return view('components.attribute.objectclass')
->with('o',$this)
->with('edit',$edit)
->with('langtag',Entry::TAG_NOTAG)
->with('old',$old)
->with('new',$new);
}

View File

@ -24,11 +24,11 @@ final class RDN extends Attribute
};
}
public function hints(): array
public function hints(): Collection
{
return [
return collect([
'required' => __('RDN is required')
];
]);
}
public function render(bool $edit=FALSE,bool $old=FALSE,bool $new=FALSE): View

View File

@ -66,6 +66,7 @@ class LDIF extends Import
$m = [];
preg_match('/^([a-zA-Z0-9;-]+)(:+)\s+(.*)$/',$line,$m);
dump(['m'=>$m,'line'=>$line]);
switch (Arr::get($m,1)) {
case 'changetype':
@ -156,7 +157,7 @@ class LDIF extends Import
return $result;
}
public function readEntry() {
public function xreadEntry() {
static $haveVersion = FALSE;
if ($lines = $this->nextLines()) {
@ -218,7 +219,7 @@ class LDIF extends Import
default:
if (! $server->dnExists($dn))
return $this->error(_('Unkown change type'),$lines);
return $this->error(_('Unknown change type'),$lines);
}
} else

View File

@ -97,7 +97,6 @@ class APIController extends Controller
/**
* Return the required and additional attributes for an object class
*
* @param Request $request
* @param string $objectclass
* @return array
*/

View File

@ -93,10 +93,12 @@ class HomeController extends Controller
return $request->noheader
? view(sprintf('components.attribute.widget.%s',$id))
->with('o',Factory::create($dn,$id,[],$request->objectclasses))
->with('o',Factory::create(dn: $dn,attribute: $id,values: [],oc: $request->objectclasses))
->with('value',$request->value)
->with('langtag',Entry::TAG_NOTAG)
->with('loop',$xx)
: new AttributeType(Factory::create($dn,$id,[],$request->objectclasses),TRUE)->render();
: new AttributeType(Factory::create($dn,$id,[],$request->objectclasses),new: TRUE,edit: TRUE)
->render();
}
public function entry_create(EntryAddRequest $request): \Illuminate\Http\RedirectResponse

View File

@ -422,22 +422,22 @@ class Entry extends Model
/**
* Return this list of user attributes
*
* @param string|null $tag If null return all tags
* @param string $tag If null return all tags
* @return Collection
*/
public function getVisibleAttributes(?string $tag=NULL): Collection
public function getVisibleAttributes(string $tag=''): Collection
{
static $cache = NULL;
static $cache = [];
if (is_null($cache)) {
if (! Arr::get($cache,$tag ?: '_all_')) {
$ot = $this->getOtherTags();
$cache = $this->objects
->filter(fn($item)=>! $item->is_internal)
->filter(fn($item)=>is_null($tag) || $ot->has($item->name_lc) || count($item->tagValues($tag)) > 0);
$cache[$tag ?: '_all_'] = $this->objects
->filter(fn($item)=>(! $item->is_internal) && ((! $item->no_attr_tags) || (! $tag) || ($tag === Entry::TAG_NOTAG)))
->filter(fn($item)=>(! $tag) || $ot->has($item->name_lc) || count($item->tagValues($tag)) > 0);
}
return $cache;
return $cache[$tag ?: '_all_'];
}
public function hasAttribute(int|string $key): bool

View File

@ -2,6 +2,8 @@
namespace App\View\Components;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
use App\Classes\LDAP\Attribute as LDAPAttribute;
@ -32,13 +34,13 @@ class Attribute extends Component
/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\Contracts\View\View|\Closure|string
* @return View|string
*/
public function render()
public function render(): View|string
{
return $this->o
? $this->o
->render($this->edit,$this->old,$this->new)
->render(edit: $this->edit,old: $this->old,new: $this->new)
: $this->na;
}
}

View File

@ -2,7 +2,6 @@
namespace App\View\Components;
use Closure;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
@ -30,7 +29,7 @@ class AttributeType extends Component
/**
* Get the view / contents that represent the component.
*/
public function render(): View|Closure|string
public function render(): View
{
return view('components.attribute-type')
->with('o',$this->o)

View File

@ -46,6 +46,9 @@
if (added_oc.indexOf(item) !== -1)
return;
// Add our new OC to the list of OCs
oc.push(item);
// Add attribute to the page
$.ajax({
method: 'POST',