summaryrefslogtreecommitdiffstats
path: root/lib/db4app.php
blob: 1200652fada4746937951c50819f7b83cb7d7f2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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");
        }
        
    }
}
?>