85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\ldap\schemas;
 | 
						|
 | 
						|
use nulib\output\log;
 | 
						|
 | 
						|
class LseAttribute extends LseParser {
 | 
						|
  protected $data;
 | 
						|
 | 
						|
  const BOOL_ATTRS = [
 | 
						|
    "single_value",
 | 
						|
    "no_user_modification",
 | 
						|
    "x_ordered",
 | 
						|
    "obsolete",
 | 
						|
  ];
 | 
						|
 | 
						|
  protected function reset(): array {
 | 
						|
    return $this->data = [
 | 
						|
      "oid" => null,
 | 
						|
      "names" => [],
 | 
						|
      "desc" => null,
 | 
						|
      "sups" => [],
 | 
						|
      "equality" => null,
 | 
						|
      "substr" => null,
 | 
						|
      "ordering" => null,
 | 
						|
      "syntax" => null,
 | 
						|
      "single_value" => null,
 | 
						|
      "no_user_modification" => null,
 | 
						|
      "usage" => null,
 | 
						|
      "x_ordered" => null,
 | 
						|
      "x_origin" => null,
 | 
						|
      "obsolete" => null,
 | 
						|
    ];
 | 
						|
  }
 | 
						|
 | 
						|
  function parse(?string $s=null): array {
 | 
						|
    if ($s !== null) $this->s = $s;
 | 
						|
    $data = $this->reset();
 | 
						|
    $this->skipLiteral('(');
 | 
						|
    $data["oid"] = self::fix_oid($this->parseName());
 | 
						|
    while ($this->isName()) {
 | 
						|
      $okey = $this->parseName();
 | 
						|
      $key = str_replace("-", "_", strtolower($okey));
 | 
						|
      switch ($key) {
 | 
						|
      case "name":
 | 
						|
        $data["${key}s"] = $this->parseStrings();
 | 
						|
        break;
 | 
						|
      case "sup":
 | 
						|
        $data["${key}s"] = $this->parseNames();
 | 
						|
        break;
 | 
						|
      case "desc":
 | 
						|
      case "x_ordered":
 | 
						|
      case "x_origin":
 | 
						|
        $data[$key] = $this->parseString();
 | 
						|
        break;
 | 
						|
      case "equality":
 | 
						|
      case "substr":
 | 
						|
      case "ordering":
 | 
						|
      case "usage":
 | 
						|
        $data[$key] = $this->parseName();
 | 
						|
        break;
 | 
						|
      case "syntax":
 | 
						|
        $data[$key] = self::fix_oid($this->parseName());
 | 
						|
        break;
 | 
						|
      case "single_value":
 | 
						|
      case "no_user_modification":
 | 
						|
      case "obsolete":
 | 
						|
        $data[$key] = true;
 | 
						|
        break;
 | 
						|
      default:
 | 
						|
        log::warning("unknown key $okey in |$s|");
 | 
						|
        $data["unknown_keys"][] = $okey;
 | 
						|
        break;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    $this->skipLiteral(')');
 | 
						|
    # ne pas mettre de suite les valeurs false: elle sont mises à jour dans
 | 
						|
    # LdapSchemaExtractor
 | 
						|
    ## puis mettre à jour les valeurs booléennes
 | 
						|
    #foreach (self::BOOL_ATTRS as $name) {
 | 
						|
    #  $data[$name] = boolval($data[$name]);
 | 
						|
    #}
 | 
						|
    return $data;
 | 
						|
  }
 | 
						|
}
 |