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"); + } + + } +} +?>