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