Merge branch 'master' of git://anongit.kde.org/owncloud

This commit is contained in:
Michael Gapczynski 2011-08-27 13:42:10 -04:00
commit b9565cb174
8 changed files with 196 additions and 2 deletions

View File

@ -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' ));
?>

View File

@ -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>

View File

@ -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));
*/
?>

26
apps/test_db/index.php Normal file
View File

@ -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();
?>

View File

@ -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');
?>

View File

@ -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; }

View 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 );
}

117
lib/db4app.php Normal file
View File

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