]> source.dussan.org Git - nextcloud-server.git/commitdiff
Added db4app lib, and apps test_db that shows how it works.
authorCôme BERNIGAUD <come.bernigaud@laposte.net>
Sat, 27 Aug 2011 16:09:14 +0000 (18:09 +0200)
committerCôme BERNIGAUD <come.bernigaud@laposte.net>
Sat, 27 Aug 2011 16:09:14 +0000 (18:09 +0200)
Also fixed a typo in db.php

apps/test_db/appinfo/app.php [new file with mode: 0644]
apps/test_db/appinfo/info.xml [new file with mode: 0644]
apps/test_db/appinfo/install.php [new file with mode: 0644]
apps/test_db/index.php [new file with mode: 0644]
apps/test_db/templates/index.php [new file with mode: 0644]
lib/db.php
lib/db4app.php [new file with mode: 0644]

diff --git a/apps/test_db/appinfo/app.php b/apps/test_db/appinfo/app.php
new file mode 100644 (file)
index 0000000..b1ec4c4
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+OC_App::register( array( 
+  'order' => 11,
+  'id' => 'test_db',
+  'name' => 'Test' ));
+  
+OC_App::addNavigationEntry( array( 
+  'id' => 'test_db_index',
+  'order' => 11,
+  'href' => OC_Helper::linkTo( 'test_db', 'index.php' ),
+/*
+  'icon' => OC_Helper::imagePath( 'openstreetgame', 'icon.svg' ),
+*/
+  'name' => 'Test DB' ));
+  
+?>
diff --git a/apps/test_db/appinfo/info.xml b/apps/test_db/appinfo/info.xml
new file mode 100644 (file)
index 0000000..06c7164
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<info>
+       <id>test_db</id>
+       <name>Test DB</name>
+       <description>A test of the db</description>
+       <version>0.1</version>
+       <licence>AGPL</licence>
+       <author>Côme BERNIGAUD</author>
+       <require>2</require>
+</info>
diff --git a/apps/test_db/appinfo/install.php b/apps/test_db/appinfo/install.php
new file mode 100644 (file)
index 0000000..034bf35
--- /dev/null
@@ -0,0 +1,7 @@
+<?php
+//do some dummy stuff to test the newly created tables
+/*
+$query=OC_DB::prepare("INSERT INTO *PREFIX*test_dummy(foo_name,foo_value) VALUES(?,?)");
+$query->execute(array('bar',42));
+*/
+?>
diff --git a/apps/test_db/index.php b/apps/test_db/index.php
new file mode 100644 (file)
index 0000000..2569aed
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+require_once('../../lib/base.php');
+
+// Check if we are a user
+if( !OC_User::isLoggedIn()){
+       header( "Location: ".OC_Helper::linkTo( '', 'index.php' ));
+       exit();
+}
+
+class Test {
+    private $test1;
+    private $test2;
+    public function init() {
+        $this->test1 = "test1";
+        $this->test2 = 2;
+    }
+    public function show() {
+        echo "test1:".$this->test1."<br/>test2:".$this->test2."<br/>";
+    }
+};
+
+$tmpl = new OC_Template( 'test_db', 'index', 'user' );
+
+$tmpl->printPage();
+?>
diff --git a/apps/test_db/templates/index.php b/apps/test_db/templates/index.php
new file mode 100644 (file)
index 0000000..3209e4d
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+$t1 = new Test();
+$t1->init();
+$t1->show();
+$testid = OC_DB4App::store('test_db','main',OC_User::getUser(),$t1);
+echo "id in db is $testid<br/>\n";
+
+$t2 = OC_DB4App::get_object('test_db','main',$testid);
+$t2->show();
+
+print_r(OC_DB4App::get_objects('test_db','main',OC_User::getUser()));
+
+OC_DB4App::delete_object('test_db','main',$testid);
+
+OC_DB4App::drop('test_db','main');
+?>
index 76d3fe5efcb2079afed0455f7670d0654018938a..414525ae20706103b7f1e4d9288d3552440a05b8 100644 (file)
@@ -129,7 +129,7 @@ class OC_DB {
                // Die if we have an error (error means: bad query, not 0 results!)
                if( PEAR::isError($result)) {
                        $entry = 'DB Error: "'.$result->getMessage().'"<br />';
-                       $entry .= 'Offending command was: '.$cmd.'<br />';
+                       $entry .= 'Offending command was: '.$query.'<br />';
                        error_log( $entry );
                        die( $entry );
                }
diff --git a/lib/db4app.php b/lib/db4app.php
new file mode 100644 (file)
index 0000000..1200652
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Côme BERNIGAUD
+ * @copyright 2011 Côme BERNIGAUD come.bernigaud@laposte.net
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+require_once('base.php');
+
+/**
+ * This class manages the access to the database from apps. It basically is a wrapper for
+ * OC_DB. It allows that apps doesn't contains SQL code.
+ */
+class OC_DB4App {
+       /**
+        * @brief Store an object in the database
+        * @param $appname  Name of the application
+        * @param $table    Name of the database table
+        * @param $userid   Id of owner of the object
+        * @param $object   Object to save in the database
+        * @returns id of the object in the database
+        *
+        */
+    static public function store($appname,$tablename,$userid,$object) {
+        $table = $appname."_".$tablename;
+        if(OC_DB::connect()) {
+            $CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
+            if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){
+                $idline = "id INTEGER PRIMARY KEY AUTOINCREMENT";
+            } else {
+                $idline = "id int NOT NULL AUTO_INCREMENT";
+            }
+            $query = "CREATE TABLE IF NOT EXISTS *PREFIX*$table ($idline,uid int REFERENCES user(id),object text)";
+            OC_DB::query($query);
+            $query = "INSERT INTO *PREFIX*$table (uid,object) VALUES ('$userid','".OC_DB::escape(base64_encode(serialize($object)))."')";
+            OC_DB::query($query);
+            return OC_DB::insertid();
+        } else {
+            die ("could not connect to database");
+        }
+    }
+    
+       /**
+        * @brief Get an object from the database
+        * @param $appname  Name of the application
+        * @param $table    Name of the database table
+        * @param $objectid Id of the object
+        * @returns the object
+        *
+        */
+    static public function get_object($appname,$tablename,$objectid) {
+        $table = $appname."_".$tablename;
+        if(OC_DB::connect()) {
+            $query = "SELECT object FROM *PREFIX*$table WHERE id='".OC_DB::escape($objectid)."'";
+            $q = OC_DB::prepare($query);
+            $result = $q->execute()->fetchOne();
+            return unserialize(base64_decode($result));
+        } else {
+            die ("could not connect to database");
+        }
+        
+    }
+    
+    static public function get_objects($appname,$tablename,$userid) {
+        $table = $appname."_".$tablename;
+        if(OC_DB::connect()) {
+            $query = "SELECT id FROM *PREFIX*$table WHERE uid='".OC_DB::escape($userid)."'";
+            $q = OC_DB::prepare($query);
+            $result = $q->execute()->fetchAll();
+            return $result;
+        } else {
+            die ("could not connect to database");
+        }
+    }
+    
+    static public function delete_object($appname,$tablename,$objectid) {
+        $table = $appname."_".$tablename;
+        if(OC_DB::connect()) {
+            $query = "DELETE FROM *PREFIX*$table WHERE id='".OC_DB::escape($objectid)."'";
+            $q = OC_DB::prepare($query);
+            $q->execute();
+            return true;
+        } else {
+            die ("could not connect to database");
+        }
+        
+    }
+    
+    static public function drop($appname,$tablename) {
+        $table = $appname."_".$tablename;
+        if(OC_DB::connect()) {
+            $query = "DROP TABLE *PREFIX*$table";
+            $q = OC_DB::prepare($query);
+            $q->execute();
+            return true;
+        } else {
+            die ("could not connect to database");
+        }
+        
+    }
+}
+?>