예제 #1
0
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();
}
예제 #2
0
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;
}
예제 #3
0
 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;
 }
예제 #4
0
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();
    }
}
예제 #5
0
 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]);
         }
     }
 }