require_once 'HTML/FlexyFramework/Page.php'; require_once 'DataObjects/Objectclass.php'; require_once 'DataObjects/Matching.php'; require_once 'DataObjects/Syntax.php'; require_once 'DataObjects/Attribute.php'; require_once 'DataObjects/Topic.php'; require_once 'DataObjects/Article.php'; class Ldap_convertldap extends HTML_FlexyFramework_Page { var $masterTemplate = "master.html"; var $loadmodules = array("Navigation"); function getAuth() { // authenitcaiton lets in authenicated users // if (!$this->auth->getAuth()) // return "login"; } function start($request) { // what it has to do:: // load all objectclasses from database- echo "
starting";
$convert= array(
'objectclass' => 'DataObjects_Objectclass',
'attribute' => 'DataObjects_Attribute',
'matching' => 'DataObjects_Matching',
'syntax' => 'DataObjects_Syntax'
);
DB_DataObject::debugLevel(1);
foreach ($convert as $type=>$class) {
$ldap = new $class;
$ldap->query("delete from $type");
$topic = DataObjects_Topic::staticGet('name',$type);
$list = DataObjects_Article::listTopic($topic->id);
while($list->fetch()) {
print_r($list);
echo "converting $type : {$list->name}
";
$syn = $this->parseSyntax($list->abstract);
print_r($syn);
if (!trim(strlen($syn->definition))) {
continue;
}
$ldap = new $class;
$ldap->setFrom($syn);
$find = $ldap;
if ($find->find()) {
$find->delete();
echo "found it?";
}
$ldap->longdescription = $list->content;
print_r($ldap);
$ldap->rfc = $list->url;
DB_DataObject::debugLevel(1);
if (!$ldap->insert()) {
print_r($ldap);
echo "FAILED";
}
//LDAP_DataObject::debugLevel(0);
}
}
echo "loaded";
exit;
}
function parseSyntax($syntax) {
$syntax = trim($syntax);
$syntax = ereg_replace("^\(", "", $syntax);
$syntax = ereg_replace("\)$", "", $syntax);
$syntax = str_replace("\n", " ", $syntax);
$syntax = str_replace("\r", " ", $syntax);
$syntax = str_replace("\t", " ", $syntax);
$syntax = str_replace(" ", " ", $syntax);
//echo "
NOW " .$syntax;
$spaced = explode(" ", $syntax);
$j =0;
$currentstring = "";
$closing = "";
$finalstring = array();
$end_strings= array(
"'"=>"'",
"("=>")"
);
// merge quoted strings
for($i=0;$i < count($spaced);$i++) {
$item = trim($spaced[$i]);
//echo "ITEM = $item
";
if (!trim($item)) continue;
if (!$closing) {
if (@$end_strings[$item{0}]) {
//echo "START checking ". $item{strlen($item)-1} ."==".$end_strings[$item{0}]."
";
if ($item{strlen($item)-1} == $end_strings[$item{0}]) {
//echo "ADD () $item
";
$closing = "";
$finalstring[] = substr($item,1,-1);
continue;
} else {
$closing = $end_strings[$item{0}] ;
$currentstring = $spaced[$i];
continue;
}
} else {
// not escaped
//echo "ADD $item
";
$closing = "";
$finalstring[] = $item;
continue;
}
}
// inside a string
//echo "checking ". $item{strlen($item)-1} ."==".$closing."
";
if ($item{strlen($item)-1} == $closing ) {
$closing = "";
//echo "ADD $currentstring $item
";
$finalstring[] = trim(substr($currentstring . " " . $item,1,-1));
continue;
}
$currentstring .= " " . $spaced[$i];
} // end for each of the spaces!
if ($currentstring)
$finalstring[] = $currentstring;
// now parse for common elements!
$element = new StdClass();
$element->definition = $syntax;
$element->uid = $finalstring[0];
for ($i = 0; $i < count($finalstring); $i++) {
$item = $finalstring[$i];
$tag = strtolower($item);
$tag =str_replace("-","_",$tag);
switch ( $item) {
case "DESC":
$element->description = $finalstring[$i+1];
$i++;
break;
case "NAME":
$element->cn = $finalstring[$i+1];
$i++;
break;
case "EQUALITY":
case "SYNTAX":
case "SUBSTR":
case "SUP":
case "USAGE":
//echo "
Assign $tag to " . $finalstring[$i+1];
$element->$tag = $finalstring[$i+1];
$i++;
break;
case "MUST":
case "MAY":
$vals = preg_split('/\w*\$\w*/',$finalstring[$i+1]);
$set = array();
foreach ($vals as $val) {
$set[] = trim($val);
}
$element->$tag = $set;
$i++;
break;
case "SINGLE-VALUE":
$element->singleValue = 1;
break;
case "AUXILIARY":
case "STRUCTURAL":
//echo "
Assign $tag to " . $tag;
$element->$tag = 1;
break;
} //end switch
// print "---" . $finalstring[$i] . "---
";
}
if (@$element->syntax && strpos($element->syntax,'{')) {
preg_match("/\{[^}]{0,9}\}/", $element->syntax,$matches);
$element->length = substr($matches[0],1,-1);
$element->syntax = str_replace($matches[0],'',$element->syntax );
}
// $element->syntax = ereg_replace("\{[^}]{0,9}\}", "", $element->syntax);
//$element->full_syntax = @$element->syntax;
//if (@$element->syntax && ereg("\{", $element->syntax)) {
// $element->syntax = ereg_replace("\{[^}]{0,9}\}", "", $element->syntax);
//}
//$element->syntax = @trim($element->syntax );
foreach(get_object_vars($element) as $k=>$v) {
if (is_array($v)) {
$element->$k = ':'.implode(':',$v) . ":";
}
}
return $element;
}
}
?>