diff --git a/apps/test_db/appinfo/app.php b/apps/test_db/appinfo/app.php
new file mode 100644
index 0000000000..b1ec4c4639
--- /dev/null
+++ b/apps/test_db/appinfo/app.php
@@ -0,0 +1,17 @@
+ 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
index 0000000000..06c716453c
--- /dev/null
+++ b/apps/test_db/appinfo/info.xml
@@ -0,0 +1,10 @@
+
+
+ test_db
+ Test DB
+ A test of the db
+ 0.1
+ AGPL
+ Côme BERNIGAUD
+ 2
+
diff --git a/apps/test_db/appinfo/install.php b/apps/test_db/appinfo/install.php
new file mode 100644
index 0000000000..034bf35914
--- /dev/null
+++ b/apps/test_db/appinfo/install.php
@@ -0,0 +1,7 @@
+execute(array('bar',42));
+*/
+?>
diff --git a/apps/test_db/index.php b/apps/test_db/index.php
new file mode 100644
index 0000000000..2569aedb9b
--- /dev/null
+++ b/apps/test_db/index.php
@@ -0,0 +1,26 @@
+test1 = "test1";
+ $this->test2 = 2;
+ }
+ public function show() {
+ echo "test1:".$this->test1."
test2:".$this->test2."
";
+ }
+};
+
+$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
index 0000000000..3209e4d4b7
--- /dev/null
+++ b/apps/test_db/templates/index.php
@@ -0,0 +1,17 @@
+init();
+$t1->show();
+$testid = OC_DB4App::store('test_db','main',OC_User::getUser(),$t1);
+echo "id in db is $testid
\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');
+?>
diff --git a/core/css/styles.css b/core/css/styles.css
index b7eb62c4c4..205bf1bb96 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -80,7 +80,7 @@ input[type="submit"].highlight{ background:#ffc100; border:1px solid #db0; text-
/* NAVIGATION ------------------------------------------------------------- */
-#navigation { position:fixed; top:3.5em; float:left; width:12.5em; padding:0; z-index:75; height:100%; background:#eee; border-right: 1px #ccc solid; -moz-box-shadow: -3px 0 7px #000; -webkit-box-shadow: -3px 0 7px #000; box-shadow: -3px 0 7px #000; }
+#navigation { position:fixed; top:3.5em; float:left; width:12.5em; padding:0; z-index:75; height:100%; background:#eee; border-right: 1px #ccc solid; -moz-box-shadow: -3px 0 7px #000; -webkit-box-shadow: -3px 0 7px #000; box-shadow: -3px 0 7px #000; overflow:hidden;}
#navigation a { display:block; padding:.6em .5em .4em 2.5em; background:#eee 1em center no-repeat; border-bottom:1px solid #ddd; border-top:1px solid #fff; text-decoration:none; font-size:1.2em; color:#666; text-shadow:#f8f8f8 0 1px 0; -webkit-transition:background 300ms; -moz-transition:background 300ms; -o-transition:background 300ms; transition:background 300ms; }
#navigation a.active, #navigation a:hover, #navigation a:focus { background-color:#dbdbdb; border-top:1px solid #d4d4d4; border-bottom:1px solid #ccc; color:#333; }
#navigation a.active { background-color:#ddd; }
diff --git a/lib/db.php b/lib/db.php
index 76d3fe5efc..414525ae20 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -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().'"
';
- $entry .= 'Offending command was: '.$cmd.'
';
+ $entry .= 'Offending command was: '.$query.'
';
error_log( $entry );
die( $entry );
}
diff --git a/lib/db4app.php b/lib/db4app.php
new file mode 100644
index 0000000000..1200652fad
--- /dev/null
+++ b/lib/db4app.php
@@ -0,0 +1,117 @@
+.
+ *
+ */
+
+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");
+ }
+
+ }
+}
+?>