Initial
[qwikioffice:qwikioffice.git] / public / server / lib / preference.php
1 <?php\r
2 /*\r
3  * qWikiOffice Desktop 1.0\r
4  * Copyright(c) 2007-2010, Murdock Technologies, Inc.\r
5  * licensing@qwikioffice.com\r
6  *\r
7  * http://www.qwikioffice.com/license\r
8  */\r
9 \r
10 class preference {\r
11 \r
12    private $os;\r
13 \r
14    /**\r
15     * __construct()\r
16     *\r
17     * @access public\r
18     * @param {class} $os The os.\r
19     */\r
20         public function __construct(os $os){\r
21       if(!$os->session_exists()){\r
22          die('Session does not exist!');\r
23       }\r
24 \r
25       $this->os = $os;\r
26         } // end __construct()\r
27 \r
28    /** get() Returns the preference object for the member/group.\r
29     *\r
30     * @access public\r
31     * @param {integer} $member_id\r
32     * @param {integer} $group_id\r
33     * @return {stdClass}\r
34     */\r
35    public function get($member_id, $group_id){\r
36       // do we have the required params?\r
37       if(!isset($member_id, $group_id)){\r
38          return null;\r
39       }\r
40 \r
41       $sql = "SELECT\r
42          data\r
43          FROM\r
44          qo_preferences\r
45          WHERE\r
46          qo_members_id = ".$member_id."\r
47          AND\r
48          qo_groups_id = ".$group_id;\r
49 \r
50       $result = $this->os->db->conn->query($sql);\r
51       if($result){\r
52          $row = $result->fetch(PDO::FETCH_ASSOC);\r
53          if($row){\r
54             $decoded = json_decode($row['data']);\r
55             // todo: log errors\r
56             if(is_object($decoded)){\r
57                return $decoded;\r
58             }\r
59          }\r
60       }\r
61 \r
62       return null;\r
63    } // end get()\r
64 \r
65    /**\r
66     * set() Set the preference for the member/group.  If a preference already exists it will be updated.\r
67     *\r
68     * @access public\r
69     * @param {integer} $member_id The member id.\r
70     * @param {integer} $group_id The group id.\r
71     * @param {stdClass} $data An object that holds the preference data.\r
72     */\r
73    public function set($member_id, $group_id, $data){\r
74       // do we have the required params?\r
75       if(!isset($member_id, $group_id, $data) || $member_id == '' || $group_id == '' || !is_object($data)){\r
76          return false;\r
77       }\r
78 \r
79       // add or update?\r
80       $preference = $this->get($member_id, $group_id);\r
81       if(!$preference){\r
82          return $this->add($member_id, $group_id, $data);\r
83       }\r
84 \r
85       // update\r
86       foreach($data as $id => $property){\r
87          $preference->$id = $property;\r
88       }\r
89 \r
90       return $this->update($member_id, $group_id, $preference);\r
91    } // end set()\r
92 \r
93    /**\r
94     * add()\r
95     *\r
96     * @access private\r
97     * @param {integer} $member_id The member id.\r
98     * @param {integer} $group_id The group id.\r
99     * @param {stdClass} $data An object that holds the preference data.\r
100     */\r
101    private function add($member_id, $group_id, $data){\r
102       // do we have the required params?\r
103       if(!isset($member_id, $group_id, $data) || $member_id == '' || $group_id == '' || !is_object($data)){\r
104          return false;\r
105       }\r
106 \r
107       $data_string = json_encode($data);\r
108       if(!is_string($data_string)){\r
109          return false;\r
110       }\r
111 \r
112       $sql = "INSERT INTO qo_preferences (qo_groups_id, qo_members_id, data ) VALUES (?, ?, ?)";\r
113 \r
114       // prepare the statement, prevents SQL injection by calling the PDO::quote() method internally\r
115       $sql = $this->os->db->conn->prepare($sql);\r
116       $sql->bindParam(1, $group_id);\r
117       $sql->bindParam(2, $member_id);\r
118       $sql->bindParam(3, $data_string);\r
119       $sql->execute();\r
120 \r
121       $code = $sql->errorCode();\r
122       if($code == '00000'){\r
123          return true;\r
124       }\r
125 \r
126       return false;\r
127    } // end add()\r
128 \r
129    /**\r
130     * update()\r
131     *\r
132     * @access private\r
133     * @param {integer} $member_id The member id.\r
134     * @param {integer} $group_id The group id.\r
135     * @param {stdClass} $data An object that holds the preference data.\r
136     */\r
137    private function update($member_id, $group_id, $data){\r
138       // do we have the required params?\r
139       if(!isset($member_id, $group_id, $data) || $member_id == '' || $group_id == '' || !is_object($data)){\r
140          return false;\r
141       }\r
142 \r
143       $data_string = json_encode($data);\r
144       if(!is_string($data_string)){\r
145          return false;\r
146       }\r
147 \r
148       $sql = "UPDATE qo_preferences SET data = ? WHERE qo_groups_id = ? AND qo_members_id = ?";\r
149 \r
150       // prepare the statement, prevents SQL injection by calling the PDO::quote() method internally\r
151       $sql = $this->os->db->conn->prepare($sql);\r
152       $sql->bindParam(1, $data_string);\r
153       $sql->bindParam(2, $group_id);\r
154       $sql->bindParam(3, $member_id);\r
155       $sql->execute();\r
156 \r
157       $code = $sql->errorCode();\r
158       if($code == '00000'){\r
159          return true;\r
160       }\r
161 \r
162       return false;\r
163    } // end update()\r
164 }\r
165 ?>