function binLogin($name) { /* Variablen setzen */ $_SESSION['username'] = $name; $_SESSION['roles'] = array(); foreach (__executeSQL("get_role_by_user", array($name), true) as $role) { $_SESSION['roles'][] = $role['name']; } /* Leeren Array zur�ckgeben */ return array(); }
function __sql($context, $query, $params = array()) { /* Parameter erstellen */ $paramsStr = array(); foreach ($params as $item) { $paramsStr[] = $GLOBALS['XQDB_Storage']->toString($item); } /* Query auswerten */ $result = __executeSQL(__toString($query), $paramsStr, true); /* Dokument mit den Lösungen erstellen */ $document = $GLOBALS['XQDB_Storage']->createDoc("tmp://" . md5(uniqid(microtime()) . rand())); foreach ($result as $key => $tupel) { $element = $GLOBALS['XQDB_Storage']->registerItem(new Element("tupel_" . $key)); $GLOBALS['XQDB_Storage']->insertItem($element, $document[0]); foreach ($tupel as $name => $value) { $id = $GLOBALS['XQDB_Storage']->registerItem(new Element($name)); $GLOBALS['XQDB_Storage']->insertItem($id, $element); $text = $GLOBALS['XQDB_Storage']->registerItem(new Text($value)); $GLOBALS['XQDB_Storage']->insertItem($text, $id); } } /* Neu erstelltes Dokument zurückgeben */ return $document; }
function properties() { /* Falls das Item noch nicht im Cache ist */ if ($this->properties == null) { /* Nur die Datenbankressource kann nachgeladen werden */ if ($this->storage != "db") { PEAR::raiseError("Der Storage '" . $this->storage . "' wird nicht unterstützt!"); } /* Objekt aus DB laden */ $tupel = __executeSQL("node_select_node", array($this->uri, $this->type, $this->id), true); $this->axis['parent'] = $tupel[0]['parent']; switch ($this->type) { case "element": $this->properties = new Element($tupel[0]['nodeName'], $tupel[0]['typeName'], $tupel[0]['stringValue']); break; case "pi": $this->properties = new PI($tupel[0]['target']); break; case "attribute": $this->properties = new Attribute($tupel[0]['nodeName'], $tupel[0]['typeName'], $tupel[0]['stringValue'], $tupel[0]['typedValue']); break; case "text": $this->properties = new Text($tupel[0]['content']); break; case "comment": $this->properties = new Comment($tupel[0]['content']); break; default: PEAR::raiseError("Der Knotentype '" . $this->type . "' kann nicht geladen werden!"); } } /* Werte zurückgeben */ return $this->properties; }
function checkSession() { /* Hash erstellen */ $hash = md5(uniqid(microtime() + rand())); $newSession = false; /* Überprüfen ob bereits eine Session existiert */ if (isset($_COOKIE['xqdbSessHash']) == false) { $newSession = true; } else { __executeSQL("session_update", array($hash, session_id(), $_COOKIE['xqdbSessHash'])); if ($GLOBALS['XQDB_DB']->affectedRows() == 0) { __executeSQL("session_delete", array(session_id())); $newSession = true; } } /* Cookie setzen */ setcookie("xqdbSessHash", $hash, 0, "/"); /* Neues Session erstellen, falls nötig */ if ($newSession == true) { __executeSQL("session_insert", array(session_id(), $hash)); $_SESSION['username'] = "******"; $_SESSION['roles'] = array("GUEST"); $_SESSION['variables'] = array(); } }
function commit($uri) { /* Überprüfen ob das Dokument existiert */ $properties = $this->cache[$uri]->properties(); if (isset($this->doc[$this->cache[$uri]->storage() . "://" . $properties->documentURI]) == false) { PEAR::raiseError("Es existiert kein Dokument mit dem URI '" . $uri . "'!"); } /* Knoten Registrieren */ foreach ($this->changelog as $id => $item) { if ($this->cache[$id]->storage() == $this->cache[$uri]->storage() and $this->cache[$id]->uri() == $this->cache[$uri]->uri()) { switch ($this->cache[$id]->storage()) { /* Dokumente, die aus PHPariablen erstellt wurden */ case "php": /* Vorfahren der Variablen suchen */ $ancestor = $this->axis($id, "ancestor"); /* Zeil bestimmen */ $parts = explode("/", $this->cache[$id]->uri()); $target =& $GLOBALS[$parts[0]]; foreach (array_slice($parts, 1) as $step) { $target =& $target[$step]; } /* Varerelemente laden */ foreach ($ancestor as $node) { if ($this->cache[$node]->type() == "element") { $properties = $this->cache[$node]->properties(); $target =& $target[$properties->nodeName]; } } /* Falls der Ast nicht existiert, Fehler ausgeben */ if ($target === null) { PEAR::raiseError("Commit fehlgeschalgaen"); } /* Aktion ausführen */ $properties = $this->cache[$id]->properties(); if ($item['Action'] == "insert") { switch ($this->cache[$id]->type()) { case "element": $target[$properties->nodeName] = array(); break; case "text": $target = $properties->content; break; case "atomicvalue": $target = $properties->value; break; } } elseif ($this->cache[$id]->type() == "atomicvalue") { $target = $properties->value; } break; /* Dokumente, die in der Datenbank gespeichert sind */ /* Dokumente, die in der Datenbank gespeichert sind */ case "db": /* Variablen löschen */ $class = $mode = null; // Aktionen ausführen switch ($item['Action']) { /* Knoten löschen*/ case "renew": $item['URI'] = $this->cache[$id]->uri(); $item['class'] = get_class($this->cache[$id]->properties()); case "delete": if (get_class($this->cache[$id]->properties()) == "document") { __executeSQL("node_delete_document", array($id)); } else { __executeSQL("node_delete_node", array($item['URI'], $item['class'], $id)); } __executeSQL("node_delete_index_attribute", array($item['URI'], $id)); __executeSQL("node_delete_index_child_by_parent", array($item['URI'], $id)); __executeSQL("node_delete_index_descandant_by_parent", array($item['URI'], $id)); /* Bei Renew muss der Knoten neu eingefügt werden */ if ($item['Action'] == "delete") { break; } /* Knoten einfügen */ /* Knoten einfügen */ case "insert": $class = get_class($this->cache[$id]->properties()); $mode = "insert"; break; /* Teile des Knotens ändern */ /* Teile des Knotens ändern */ case "update": switch ($item['Target']) { case "attribute": __executeSQL("node_delete_index_attribute", array($this->cache[$id]->uri(), $id)); foreach ($this->cache[$id]->axis("attribute") as $attribue) { __executeSQL("node_insert_index_attribute", array($this->cache[$id]->uri(), $id, $attribue)); } break; case "child": __executeSQL("node_delete_index_child_by_parent", array($this->cache[$id]->uri(), $id)); foreach ($this->cache[$id]->axis("child") as $order => $child) { __executeSQL("node_insert_index_child", array($this->cache[$id]->uri(), $id, $child, $order, get_class($this->cache[$id]->properties()), get_class($this->cache[$child]->properties()))); } // ancestor müssen noch upgedatet werden break; case "properties": $class = get_class($this->cache[$id]->properties()); $mode = "update"; break; } break; default: PEAR::raiseError("Die Aktion '" . $item['Action'] . "' ist nicht erlaubt!"); } /* Insert und Update ausfürhen */ if ($mode != null) { unset($body); $body =& $this->cache[$id]->properties(); switch ($class) { case "document": /* neues Dokument erstellen */ if ($mode == "insert") { __executeSQL("node_insert_document", array($body->documentURI, $this->cache[$id]->uri(), $body->typeName, $body->stringValue, $body->typedValue, $id)); __executeSQL("create_element", array($this->cache[$id]->uri())); __executeSQL("create_attribute", array($this->cache[$id]->uri())); __executeSQL("create_text", array($this->cache[$id]->uri())); __executeSQL("create_comment", array($this->cache[$id]->uri())); __executeSQL("create_access", array($this->cache[$id]->uri())); __executeSQL("create_index_attribute", array($this->cache[$id]->uri())); __executeSQL("create_index_access", array($this->cache[$id]->uri())); __executeSQL("create_index_child", array($this->cache[$id]->uri())); /* Dokumentknoten updaten */ } else { __executeSQL("node_update_document", array($body->documentURI, $this->cache[$id]->uri(), $body->typeName, $body->stringValue, $body->typedValue, $id)); } break; case "element": __executeSQL("node_" . $mode . "_element", array($this->cache[$id]->uri(), $body->nodeName, $body->typeName, $body->stringValue, $this->cache[$id]->axis('parent'), get_class($this->cache[$this->cache[$id]->axis('parent')]->properties()), $id)); break; case "pi": __executeSQL("node_" . $mode . "_pi", array($this->cache[$id]->uri(), $body->target, $this->cache[$id]->axis('parent'), get_class($this->cache[$this->cache[$id]->axis('parent')]->properties()), $id)); break; case "attribute": __executeSQL("node_" . $mode . "_attribute", array($this->cache[$id]->uri(), $body->nodeName, $body->typeName, $body->stringValue, $body->typedValue, $this->cache[$id]->axis('parent'), get_class($this->cache[$this->cache[$id]->axis('parent')]->properties), $id)); __executeSQL("node_insert_index_attribute", array($this->cache[$id]->uri(), $this->cache[$id]->axis('parent'), $id)); break; case "attribute": __executeSQL("node_" . $mode . "_attribute", array($this->cache[$id]->uri(), $body->nodeName, $body->nodeType, $body->stringValue, $body->typedValue, $this->cache[$id]->axis('parent'), $id)); break; case "text": case "comment": __executeSQL("node_" . $mode . "_text_comment", array($this->cache[$id]->uri(), get_class($body), $body->content, $this->cache[$id]->axis('parent'), get_class($this->cache[$this->cache[$id]->axis('parent')]->properties()), $id)); break; default: PEAR::raiseError("Der Knotentype '" . $class . "' kann nicht verarbeitet werden!"); } /* Index updaten */ if (in_array($class, array('element', 'pi', 'text', 'comment')) and $mode == "insert") { __executeSQL("node_insert_index_child", array($this->cache[$id]->uri(), $this->cache[$id]->axis('parent'), $id, array_search($id, $this->cache[$this->cache[$id]->axis('parent')]->axis('child')), $class, get_class($this->cache[$this->cache[$id]->axis('parent')]->properties()))); } } break; /* Alle andern Datenquellen können nicht gespeicher werden! */ /* Alle andern Datenquellen können nicht gespeicher werden! */ default: PEAR::raiseError("Der Storage '" . $this->cache[$id]->storage() . "' kann nicht gespeichert werden!"); } /* Aktion aus dem Log löschen */ unset($this->changelog[$id]); } } }