Annotation of FreeBSD/tinderbox/webui/core/TinderboxDS.php, revision 1.1.1.1.2.2
1.1 as 1: <?php
2: #-
3: # Copyright (c) 2004-2005 FreeBSD GNOME Team <freebsd-gnome@FreeBSD.org>
4: # All rights reserved.
5: #
6: # Redistribution and use in source and binary forms, with or without
7: # modification, are permitted provided that the following conditions
8: # are met:
9: # 1. Redistributions of source code must retain the above copyright
10: # notice, this list of conditions and the following disclaimer.
11: # 2. Redistributions in binary form must reproduce the above copyright
12: # notice, this list of conditions and the following disclaimer in the
13: # documentation and/or other materials provided with the distribution.
14: #
15: # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16: # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18: # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25: # SUCH DAMAGE.
26: #
1.1.1.1.2.2! as 27: # $Paefchen: FreeBSD/tinderbox/webui/core/TinderboxDS.php,v 1.1.1.1.2.1 2007/11/09 22:47:22 as Exp $
1.1 as 28: # $MCom: portstools/tinderbox/webui/core/TinderboxDS.php,v 1.36 2007/10/13 02:28:47 ade Exp $
29: #
30:
1.1.1.1.2.1 as 31: require_once 'DB.php';
32: require_once 'inc_ds.php';
33: require_once 'inc_tinderbox.php';
34:
35: class TinderboxDS {
1.1.1.1.2.2! as 36: private $objectMap = array(
1.1.1.1.2.1 as 37: 'Build' => 'builds',
38: 'BuildPortsQueue' => 'build_ports_queue',
39: 'Config' => 'config',
40: 'Jail' => 'jails',
41: 'Port' => 'ports',
42: 'PortsTree' => 'ports_trees',
43: 'PortFailReason' => 'port_fail_reasons',
44: 'User' => 'users');
45: public $db;
46: private $error = null;
47: public $packageSuffixCache; /* in use by getPackageSuffix() */
48:
49: public function __construct() {
50: global $DB_HOST, $DB_DRIVER, $DB_NAME, $DB_USER, $DB_PASS;
51:
52: # XXX: backwards compatibility
53: if (empty($DB_DRIVER))
54: $DB_DRIVER = 'mysql';
55:
56: $dsn = "$DB_DRIVER://$DB_USER:$DB_PASS@$DB_HOST/$DB_NAME";
57:
58: $this->db = DB::connect($dsn);
59:
60: if (DB::isError($this->db))
61: die (sprintf("Tinderbox DS: Unable to initialize datastore: %s\n",
62: $this->db->getMessage()));
63:
64: $this->db->setFetchMode(DB_FETCHMODE_ASSOC);
65: $this->db->setOption('persistent', true);
66: }
67:
68: private function __destruct() {
69: $this->db->disconnect();
70: $this->error = null;
71: }
72:
73:
74: public function start_transaction() {
75: $this->db->autoCommit( false );
76: }
77:
78: public function commit_transaction() {
79: $this->db->commit();
80: $this->db->autoCommit( true );
81: }
82:
83: public function rollback_transaction() {
84: $this->db->rollback();
85: $this->db->autoCommit( true );
86: }
87:
88: public function getAllMaintainers() {
89: $query = '
90: SELECT DISTINCT LOWER(port_maintainer) AS port_maintainer
91: FROM ports
92: WHERE port_maintainer IS NOT NULL
93: ORDER BY LOWER(port_maintainer)';
94: if (! $this->_doQueryHashRef($query, $results, array()))
95: return array();
96:
97: foreach($results as $result)
98: $data[] = $result['port_maintainer'];
99:
100: return $data;
101: }
102:
103: public function getAllPortsByPortID($portid) {
104: $query = sprintf('
105: SELECT p.*,
106: bp.build_id,
107: bp.last_built,
108: bp.last_status,
109: bp.last_successful_built,
110: bp.last_failed_dependency,
111: bp.last_run_duration,
112: bp.last_built_version,
113: CASE bp.last_fail_reason
114: WHEN \'__nofail__\' THEN \'\'
115: ELSE bp.last_fail_reason
1.1 as 116: END
1.1.1.1.2.1 as 117: AS last_fail_reason
118: FROM ports p, build_ports bp
119: WHERE p.port_id = bp.port_id
120: AND bp.port_id = %d',
121: $portid);
122:
1.1.1.1.2.2! as 123: return $this->_doQueryHashRef($query, $results, array())
1.1.1.1.2.1 as 124: ? $this->_newFromArray('Port', $results)
125: : null;
126: }
127:
128:
129: public function addUser($user) {
130: $query = '
131: INSERT INTO users (
132: user_name, user_email, user_password, user_www_enabled
133: ) VALUES (?, ?, ?, ?)';
134:
135: return $this->_doQuery($query,
136: array($user->getName(),
137: $user->getEmail(),
138: $user->getPassword(),
139: $user->getWwwEnabled()),
140: $res);
141: }
1.1 as 142:
1.1.1.1.2.1 as 143: public function deleteUser($user) {
144: if(! $user->getId() || $this->deleteUserPermissions($user, '') ) {
145: if ($user->getId())
146: $this->deleteBuildPortsQueueByUserId($user);
1.1 as 147:
1.1.1.1.2.1 as 148: $query = 'DELETE FROM users WHERE user_name = ?';
1.1 as 149:
1.1.1.1.2.1 as 150: if (! $this->_doQuery($query, array($user->getName()), $res))
151: return false;
1.1 as 152:
153: return true;
154: }
1.1.1.1.2.1 as 155:
156: return false;
157: }
158:
159: public function updateUser($user) {
160: $query = '
161: UPDATE users
162: SET user_name = ?,
163: user_email = ?,
164: user_password = ?,
165: user_www_enabled = ?
166: WHERE user_id = ?';
167:
168: return $this->_doQuery($query,
169: array($user->getName(),
170: $user->getEmail(),
171: $user->getPassword(),
172: $user->getWwwEnabled(),
173: $user->getId()),
174: $res);
175: }
176:
177: public function getUserByLogin($username, $password) {
178: $query = '
179: SELECT user_id, user_name, user_email, user_password, user_www_enabled
180: FROM users
181: WHERE user_name = ?
182: AND user_password = ?';
183:
184: if (! $this->_doQueryHashRef($query, $results, array($username, md5($password))))
185: return null;
186:
187: list($user) = $this->_newFromArray('User', $results);
188:
189: return $user;
190: }
191:
192: public function getUserPermissions($user_id, $object_type, $object_id) {
193: $query = '
194: SELECT
195: CASE user_permission
196: WHEN 1 THEN \'IS_WWW_ADMIN\'
197: WHEN 2 THEN \'PERM_ADD_QUEUE\'
198: WHEN 3 THEN \'PERM_MODIFY_OWN_QUEUE\'
199: WHEN 4 THEN \'PERM_DELETE_OWN_QUEUE\'
200: WHEN 5 THEN \'PERM_PRIO_LOWER_5\'
201: WHEN 6 THEN \'PERM_MODIFY_OTHER_QUEUE\'
202: WHEN 7 THEN \'PERM_DELETE_OTHER_QUEUE\'
203: ELSE \'PERM_UNKNOWN\'
204: END AS user_permission
205: FROM user_permissions
206: WHERE user_id = ?
207: AND user_permission_object_type = ?
208: AND user_permission_object_id = ?';
209:
210: return $this->_doQueryHashRef($query, $results, array($user_id, $object_type, $object_id))
211: ? $results
212: : null;
213: }
214:
215: public function deleteUserPermissions($user, $object_type) {
216: $query = 'DELETE FROM user_permissions WHERE user_id = ?';
217:
218: if( $object_type )
219: $query .= sprintf(" AND user_permission_object_type = '%s'", $object_type);
220:
221: return $this->_doQuery($query, array($user->getId()), $res);
222: }
223:
224: public function addUserPermission($user_id, $object_type, $object_id, $permission) {
225: switch( $permission ) {
226: // case 'IS_WWW_ADMIN': $permission = 1; break; /* only configureable via shell */
227: case 'PERM_ADD_QUEUE': $permission = 2; break;
228: case 'PERM_MODIFY_OWN_QUEUE': $permission = 3; break;
229: case 'PERM_DELETE_OWN_QUEUE': $permission = 4; break;
230: case 'PERM_PRIO_LOWER_5': $permission = 5; break;
231: case 'PERM_MODIFY_OTHER_QUEUE': $permission = 6; break;
232: case 'PERM_DELETE_OTHER_QUEUE': $permission = 7; break;
233: default: return false;
234: }
235:
236: $query = '
237: INSERT INTO user_permissions (
238: user_id, user_permission_object_type, user_permission_object_id, user_permission
239: ) VALUES (?, ?, ?, ?)';
240:
241: return $this->_doQuery($query,
242: array($user_id, $object_type, $object_id, $permission),
243: $res);
244: }
245:
246: public function getBuildPortsQueueEntries($build_id) {
247: $query = '
248: SELECT build_ports_queue.*, builds.build_name AS build_name, users.user_name AS user_name
249: FROM build_ports_queue, builds, users
250: WHERE build_ports_queue.build_id = ?
251: AND builds.build_id = build_ports_queue.build_id
252: AND users.user_id = build_ports_queue.user_id
253: ORDER BY priority ASC, build_ports_queue_id ASC';
254:
255: return $this->_doQueryHashRef($query, $results, array($build_id))
256: ? $this->_newFromArray('BuildPortsQueue', $results)
257: : null;
258: }
259:
260: public function deleteBuildPortsQueueEntry($entry_id) {
261: $query = 'DELETE FROM build_ports_queue WHERE build_ports_queue_id = ?';
262:
263: return $this->_doQuery($query, $entry_id, $res);
264: }
265:
266: public function deleteBuildPortsQueueByUserId($user) {
267: $query = 'DELETE FROM build_ports_queue WHERE user_id = ?';
268:
269: return $this->_doQuery($query, $user->getId(), $res);
270: }
271:
272: public function createBuildPortsQueueEntry($build_id, $priority,
273: $port_directory, $user_id, $email_on_completion) {
274:
275: switch( $email_on_completion ) {
276: case '1': $email_on_completion = 1; break;
277: default: $email_on_completion = 0; break;
278: }
279:
280: $entries[] = array(
281: 'build_id' => $build_id,
282: 'priority' => $priority,
283: 'port_directory' => $port_directory,
284: 'user_id' => $user_id,
285: 'enqueue_date' => date('Y-m-d H:i:s'),
286: 'email_on_completion' => $email_on_completion,
287: 'status' => 'ENQUEUED');
288:
289: list($result) = $this->_newFromArray('BuildPortsQueue', $entries);
290:
291: return $result;
292: }
293:
294: public function updateBuildPortsQueueEntry($entry) {
295: $query = '
296: UPDATE build_ports_queue
297: SET build_id = ?, priority = ?, email_on_completion = ?, status = ?
298: WHERE build_ports_queue_id = ?';
299:
300: return $this->_doQuery($query,
301: array($entry->getBuildId(),
302: $entry->getPriority(),
303: $entry->getEmailOnCompletion(),
304: $entry->getStatus(),
305: $entry->getId()),
306: $res);
307: }
308:
309: public function addBuildPortsQueueEntry($entry) {
310: $query = '
311: INSERT INTO build_ports_queue (
312: enqueue_date, build_id, priority, port_directory, user_id, email_on_completion, status
313: ) VALUES (?, ?, ?, ?, ?, ?, ?)';
314:
315: return $this->_doQuery($query,
316: array($entry->getEnqueueDate(),
317: $entry->getBuildId(),
318: $entry->getPriority(),
319: $entry->getPortDirectory(),
320: $entry->getUserId(),
321: $entry->getEmailOnCompletion(),
322: $entry->getStatus()),
323: $res);
1.1 as 324: }
325:
1.1.1.1.2.1 as 326: public function getBuildPortsQueueEntryById($id) {
327: $results = $this->getBuildPortsQueue(
328: array( 'build_ports_queue_id' => $id ));
329:
330: if (is_null($results))
331: return null;
332:
333: return $results[0];
334: }
335:
336: public function getPortsForBuild($build, $sortby = 'port_directory') {
337: switch ($sortby) {
338: case '':
339: $sortby = 'port_directory';
340: $sortbytable = 'p';
341: break;
342: case 'port_directory':
343: case 'port_maintainer':
344: $sortbytable = 'p';
345: break;
346: default:
347: $sortbytable = 'bp';
348: }
1.1 as 349:
1.1.1.1.2.1 as 350: $query = sprintf('
351: SELECT p.*,
352: bp.last_built,
353: bp.last_status,
354: bp.last_successful_built,
355: bp.last_built_version,
356: bp.last_failed_dependency,
357: bp.last_run_duration,
358: CASE bp.last_fail_reason
359: WHEN \'__nofail__\' THEN \'\'
360: ELSE bp.last_fail_reason
361: END AS last_fail_reason
362: FROM ports p, build_ports bp
363: WHERE p.port_id = bp.port_id
364: AND bp.build_id = ?
365: ORDER BY %s.%s',
366: $sortbytable, $sortby);
367:
368: return $this->_doQueryHashRef($query, $results, $build->getId())
369: ? $this->_newFromArray('Port', $results)
370: : null;
371: }
372:
373: public function getLatestPorts($build_id, $limit = false) {
374: $query = '
375: SELECT p.*,
376: bp.build_id,
377: bp.last_built,
378: bp.last_status,
379: bp.last_successful_built,
380: bp.last_built_version,
381: bp.last_failed_dependency,
382: bp.last_run_duration,
383: CASE bp.last_fail_reason
384: WHEN \'__nofail__\' THEN \'\'
385: ELSE bp.last_fail_reason
386: END AS last_fail_reason
387: FROM ports p, build_ports bp
388: WHERE p.port_id = bp.port_id
389: AND bp.last_built IS NOT NULL';
390:
391: if($build_id)
392: $query .= ' AND bp.build_id = ' . $build_id;
393:
394: $query .= ' ORDER BY bp.last_built DESC';
395:
396: if($limit)
397: $query .= ' LIMIT ' . $limit;
398:
399: return $this->_doQueryHashRef($query, $results, array())
400: ? $this->_newFromArray('Port', $results)
401: : null;
402: }
403:
404: public function getBuildPorts($port_id, $build_id) {
405: $query = '
406: SELECT p.*,
407: bp.last_built,
408: bp.last_status,
409: bp.last_successful_built,
410: bp.last_failed_dependency,
411: bp.last_run_duration,
412: CASE bp.last_fail_reason
413: WHEN \'__nofail__\' THEN \'\'
414: ELSE bp.last_fail_reason
415: END
416: AS last_fail_reason
417: FROM ports p, build_ports bp
418: WHERE p.port_id = bp.port_id
419: AND bp.build_id = ?
420: AND bp.port_id = ?';
1.1 as 421:
1.1.1.1.2.1 as 422: if (! $this->_doQueryHashRef($query, $results, array($build_id, $port_id)))
423: return null;
1.1 as 424:
1.1.1.1.2.1 as 425: list($ports) = $this->_newFromArray('Port', $results);
426: return $ports;
1.1 as 427: }
428:
429:
1.1.1.1.2.1 as 430: public function getPortsByStatus($build_id, $maintainer, $status, $notstatus) {
431: $query = '
432: SELECT p.*,
433: bp.build_id,
434: bp.last_built,
435: bp.last_status,
436: bp.last_successful_built,
437: bp.last_built_version,
438: bp.last_failed_dependency,
439: bp.last_run_duration,
440: CASE bp.last_fail_reason
441: WHEN \'__nofail__\' THEN \'\'
442: ELSE bp.last_fail_reason
443: END AS last_fail_reason
444: FROM ports p, build_ports bp
445: WHERE p.port_id = bp.port_id';
446:
447: if($build_id)
448: $query .= ' AND bp.build_id = ' . $build_id;
449:
450: if($status <> '')
451: $query .= sprintf(" AND bp.last_status='%s'", $status);
452:
453: if($notstatus <> '')
454: $query .= sprintf(" AND bp.last_status <> '%s' AND bp.last_status <> 'UNKNOWN'",
455: $notstatus);
456:
457: if($maintainer)
458: $query .= sprintf(" AND p.port_maintainer='%s'", $maintainer);
459:
460: $query .= ' ORDER BY bp.last_built DESC';
461:
462: return $this->_doQueryHashRef($query, $results, array())
1.1.1.1.2.2! as 463: ? $this->_newFromArray('Port', $results)
! 464: : null;
1.1.1.1.2.1 as 465: }
466:
467: public function getBuildStatsWithStatus($build_id) {
468: $query = '
469: SELECT last_status,COUNT(*) AS c
470: FROM build_ports
471: WHERE build_id = ?
472: GROUP BY last_status';
473:
1.1.1.1.2.2! as 474: return $this->_doQueryHashRef($query, $results, $build_id)
1.1.1.1.2.1 as 475: ? $results
476: : null;
477: }
1.1 as 478:
479:
1.1.1.1.2.1 as 480: public function getBuildStats($build_id) {
481: $query = '
482: SELECT COUNT(*) AS fails
483: FROM build_ports
484: WHERE last_status = \'FAIL\'
485: AND build_id = ?';
486:
1.1.1.1.2.2! as 487: return $this->_doQueryHashRef($query, $results, $build_id)
1.1.1.1.2.1 as 488: ? $results[0]
489: : null;
490: }
491:
492: public function getPortById($id) {
493: $results = $this->getPorts(array( 'port_id' => $id ));
494:
495: return is_null($results)
496: ? null
497: : $results[0];
498: }
1.1 as 499:
1.1.1.1.2.1 as 500: public function getPortByDirectory($dir) {
1.1 as 501: $results = $this->getPorts(array( 'port_directory' => $dir ));
502:
1.1.1.1.2.1 as 503: return is_null($results)
504: ? null
505: : $results[0];
1.1 as 506: }
507:
1.1.1.1.2.1 as 508: public function getCurrentPortForBuild($build_id) {
509: $query = '
510: SELECT port_id AS id
511: FROM build_ports
512: WHERE build_id = ?
513: AND currently_building = \'1\'';
514:
515: return $this->_doQueryHashRef($query, $results, array($build_id))
516: ? $this->getPortById($results[0]['id'])
517: : null;
1.1 as 518: }
519:
1.1.1.1.2.1 as 520: public function getObjects($type, $params = array()) {
521: if (! isset($this->objectMap[$type]))
522: die("Unknown object type, $type\n");
523:
524: $table = $this->objectMap[$type];
525: $condition = "";
526:
527: $values = array();
528: $conds = array();
529:
530: foreach ($params as $field => $param) {
531: # Each parameter makes up and OR portion of a query. Within
532: # each parameter can be a hash reference that make up the AND
533: # portion of the query.
534: if (is_array($param)) {
535: $ands = array();
536: foreach ($param as $andcond => $value) {
537: array_push($ands, "$andcond = ?");
538: array_push($values, $value);
1.1 as 539: }
1.1.1.1.2.1 as 540: array_push($conds, '(' . (implode(' AND ', $ands)) . ')');
541: }
542: else {
543: array_push($conds, '(' . $field . '=?)');
544: array_push($values, $param);
545: }
546: }
547:
548: $condition = implode(' OR ', $conds);
549:
1.1.1.1.2.2! as 550: $query = empty($condition)
1.1.1.1.2.1 as 551: ? "SELECT * FROM $table"
552: : "SELECT * FROM $table WHERE $condition";
553:
554: $results = array();
555: return $this->_doQueryHashRef($query, $results, $values)
556: ? $this->_newFromArray($type, $results)
557: : null;
558: }
559:
560: public function getBuildByName($name) {
561: $results = $this->getBuilds(array( 'build_name' => $name ));
562:
563: return is_null($results)
564: ? null
565: : $results[0];
566: }
567:
568: public function getBuildById($id) {
569: $results = $this->getBuilds(array( 'build_id' => $id ));
570:
571: return is_null($results)
572: ? null
573: : $results[0];
574: }
575:
576: public function getJailById($id) {
577: $results = $this->getJails(array( 'jail_id' => $id ));
578:
579: return is_null($results)
580: ? null
581: : $results[0];
582: }
583:
584: public function getPortsTreeForBuild($build) {
585: return $this->getPortsTreeById($build->getPortsTreeId());
586: }
587:
588: public function getPortsTreeByName($name) {
589: $results = $this->getPortsTrees(array( 'ports_tree_name' => $name ));
590:
591: return is_null($results)
592: ? null
593: : $results[0];
594: }
595:
596: public function getPortsTreeById($id) {
597: $results = $this->getPortsTrees(array( 'ports_tree_id' => $id ));
598:
599: return is_null($results)
600: ? null
601: : $results[0];
602: }
603:
604: public function getUserById($id) {
605: $results = $this->getUsers(array( 'user_id' => $id ));
606:
607: return is_null($results)
608: ? null
609: : $results[0];
610: }
611:
612: public function getUserByName($name) {
613: $results = $this->getUsers(array( 'user_name' => $name ));
614:
615: return is_null($results)
616: ? null
617: : $results[0];
618: }
619:
620: public function getConfig($params = array()) {
621: return $this->getObjects('Config', $params);
622: }
1.1 as 623:
1.1.1.1.2.1 as 624: public function getBuildPortsQueue($params = array()) {
625: return $this->getObjects('BuildPortsQueue', $params);
1.1 as 626: }
627:
1.1.1.1.2.1 as 628: public function getBuilds($params = array()) {
629: return $this->getObjects('Build', $params);
630: }
1.1 as 631:
1.1.1.1.2.1 as 632: public function getPorts($params = array()) {
633: return $this->getObjects('Port', $params);
1.1 as 634: }
635:
1.1.1.1.2.1 as 636: public function getJails($params = array()) {
637: return $this->getObjects('Jail', $params);
638: }
639:
640: public function getPortFailReasons($params = array()) {
641: return $this->getObjects('PortFailReason', $params);
642: }
643:
644: public function getPortsTrees($params = array()) {
645: return $this->getObjects('PortsTree', $params);
646: }
647:
648: public function getUsers($params = array()) {
649: return $this->getObjects('User', $params);
650: }
651:
652: public function getAllConfig() {
653: return $this->getConfig();
654: }
1.1 as 655:
1.1.1.1.2.1 as 656: public function getAllBuilds() {
657: return $this->getBuilds();
658: }
1.1 as 659:
1.1.1.1.2.1 as 660: public function getAllJails() {
661: return $this->getJails();
662: }
1.1 as 663:
1.1.1.1.2.1 as 664: public function getAllPortFailReasons() {
665: return $this->getPortFailReasons();
666: }
1.1 as 667:
1.1.1.1.2.1 as 668: public function getAllPortsTrees() {
669: return $this->getPortsTrees();
670: }
1.1 as 671:
1.1.1.1.2.1 as 672: public function getAllUsers() {
673: return $this->getUsers();
674: }
1.1 as 675:
1.1.1.1.2.1 as 676: public function addError($error) {
677: return $this->error[] = $error;
678: }
1.1 as 679:
1.1.1.1.2.1 as 680: public function getErrors() {
681: return $this->error;
682: }
1.1 as 683:
1.1.1.1.2.1 as 684: private function _doQueryNumRows($query, $params = array()) {
685: $rows = 0;
686: if (! $this->_doQuery($query, $params, $res))
687: return -1;
1.1 as 688:
1.1.1.1.2.1 as 689: if ($res->numRows() > -1) {
690: $rows = $res->numRows();
1.1 as 691: }
1.1.1.1.2.1 as 692: else {
693: while($res->fetchRow()) {
694: $rows++;
695: }
1.1 as 696: }
697:
1.1.1.1.2.1 as 698: $res->free();
1.1 as 699:
1.1.1.1.2.1 as 700: return $rows;
701: }
1.1 as 702:
1.1.1.1.2.1 as 703: private function _doQueryHashRef($query, &$results, $params = array()) {
1.1.1.1.2.2! as 704: if (! $this->_doQuery($query, $params, $res)) {
1.1.1.1.2.1 as 705: $results = null;
706: return 0;
1.1 as 707: }
708:
1.1.1.1.2.1 as 709: $results = array();
710: while ($row = $res->fetchRow())
711: array_push($results, $row);
1.1 as 712:
1.1.1.1.2.1 as 713: $res->free();
1.1 as 714:
1.1.1.1.2.1 as 715: return 1;
716: }
1.1 as 717:
1.1.1.1.2.1 as 718: private function _doQuery($query, $params, &$res) {
719: $sth = $this->db->prepare($query);
1.1 as 720:
1.1.1.1.2.1 as 721: if (DB::isError($this->db)) {
722: $this->addError($this->db->getMessage());
723: return 0;
1.1 as 724: }
725:
1.1.1.1.2.2! as 726: $_res = count($params)
1.1.1.1.2.1 as 727: ? $this->db->execute($sth, $params)
728: : $this->db->execute($sth);
1.1 as 729:
1.1.1.1.2.1 as 730: if (DB::isError($_res)) {
731: $this->addError($_res->getMessage());
732: return 0;
1.1 as 733: }
734:
1.1.1.1.2.1 as 735: if (! is_null($_res))
736: $res = $_res;
737: else
738: $res->free();
1.1 as 739:
1.1.1.1.2.1 as 740: return 1;
741: }
1.1 as 742:
1.1.1.1.2.1 as 743: private function _newFromArray($type, $arr) {
744: $objects = array();
1.1 as 745:
1.1.1.1.2.1 as 746: foreach ($arr as $item) {
747: $obj = new $type($item);
748: // eval('$obj = new $type($item);');
749: if (! is_a($obj, $type))
1.1 as 750: return null;
751:
1.1.1.1.2.1 as 752: array_push($objects, $obj);
1.1 as 753: }
754:
1.1.1.1.2.1 as 755: return $objects;
756: }
1.1 as 757:
1.1.1.1.2.1 as 758: public function getPackageSuffix($jail_id) {
759: if (empty($jail_id))
760: return '';
761:
762: /* Use caching to avoid a lot of SQL queries */
763: if (isset($this->packageSuffixCache[$jail_id])) {
764: return $this->packageSuffixCache[$jail_id];
765: }
766: else {
767: $jail = $this->getJailById($jail_id);
768: return $this->packageSuffixCache[$jail_id] =
769: substr($jail->getName(), 0, 1) <= '4'
770: ? '.tgz'
771: : '.tbz';
1.1 as 772: }
1.1.1.1.2.1 as 773: }
774: }
775:
1.1 as 776: ?>