Browse Source
Added db4app lib, and apps test_db that shows how it works.
Added db4app lib, and apps test_db that shows how it works.
Also fixed a typo in db.phpremotes/origin/stable
7 changed files with 195 additions and 1 deletions
-
17apps/test_db/appinfo/app.php
-
10apps/test_db/appinfo/info.xml
-
7apps/test_db/appinfo/install.php
-
26apps/test_db/index.php
-
17apps/test_db/templates/index.php
-
2lib/db.php
-
117lib/db4app.php
@ -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' )); |
|||
|
|||
?>
|
|||
@ -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> |
|||
@ -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)); |
|||
*/ |
|||
?>
|
|||
@ -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(); |
|||
?>
|
|||
@ -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'); |
|||
?>
|
|||
@ -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"); |
|||
} |
|||
|
|||
} |
|||
} |
|||
?>
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue