/**
  * Process a new service purchase
  */
 protected function process()
 {
     // Build an order item for the hosting service
     $hostingItem = new OrderHostingDBO();
     $hostingItem->setPurchasable($this->post['hostingservice']);
     $hostingItem->setTerm($this->post['hostingterm']->getTermLength());
     switch ($this->post['domainoption']) {
         case "New":
             // Register a new domain for use with this hosting service
             // Verify that the user entered a domain name and TLD
             if (!isset($this->post['registerdomainname'])) {
                 throw new FieldMissingException("registerdomainname");
             }
             if (!isset($this->post['registerdomaintld'])) {
                 throw new FieldMissingException("registerdomaintld");
             }
             $fqdn = sprintf("%s.%s", $this->post['registerdomainname'], $this->post['registerdomaintld']->getTLD());
             // Check the domain availability
             $moduleName = $this->post['registerdomaintld']->getModuleName();
             $registrar = ModuleRegistry::getModuleRegistry()->getModule($moduleName);
             if (!$registrar->checkAvailability($fqdn)) {
                 throw new SWUserException("[ERROR_DOMAIN_NOT_AVAILABLE]");
             }
             // Place the domain name in the hosting item
             $hostingItem->setDomainName($fqdn);
             // Create another order item for the domain purchase
             $domainItem = new OrderDomainDBO();
             $domainItem->setType("New");
             $domainItem->setDomainName($this->post['registerdomainname']);
             $domainItem->setPurchasable($this->post['registerdomaintld']);
             $domainItem->setTerm($this->post['registerdomainterm']->getTermLength());
             break;
         case "Transfer":
             // Transfer a domain for use with this hosting service
             // Verify that the user entered a domain name and TLD
             if (!isset($this->post['transferdomainname'])) {
                 throw new FieldMissingException("transferdomainname");
             }
             if (!isset($this->post['transferdomaintld'])) {
                 throw new FieldMissingException("transferdomaintld");
             }
             $fqdn = sprintf("%s.%s", $this->post['transferdomainname'], $this->post['transferdomaintld']->getTLD());
             // Check the domain transfer-ability
             $moduleName = $this->post['registerdomaintld']->getModuleName();
             $registrar = ModuleRegistry::getModuleRegistry()->getModule($moduleName);
             if (!$registrar->isTransferable($fqdn)) {
                 throw new SWUserException("[ERROR_DOMAIN_TRANSFER_NO_DOMAIN]");
             }
             // Place the domain name in the hosting item
             $hostingItem->setDomainName($fqdn);
             // Create another order item for the domain purchase
             $domainItem = new OrderDomainDBO();
             $domainItem->setType("Transfer");
             $domainItem->setDomainName($this->post['transferdomainname']);
             $domainItem->setPurchasable($this->post['transferdomaintld']);
             $domainItem->setTerm($this->post['transferdomainterm']->getTermLength());
             break;
         case "InCart":
             // Use a domain that is in the customer's cart
             // Verify that the user selected a domain
             if (!isset($this->post['incartdomain'])) {
                 throw new FieldMissingException("incartdomain");
             }
             $hostingItem->setDomainName($this->post['incartdomain']);
             break;
         case "Existing":
             // Use an existing domain for this hosting service
             // Verify that the user entered a domain name
             if (!isset($this->post['existingdomainname'])) {
                 throw new FieldMissingException("existingdomainname");
             }
             $hostingItem->setDomainName($this->post['existingdomainname']);
             break;
         default:
             if ($this->post['hostingservice']->isDomainRequired()) {
                 throw new FieldMissingException("domainoption");
             }
             break;
     }
     // Add the item(s) to the order
     $_SESSION['order']->addItem($hostingItem);
     if (isset($domainItem)) {
         $_SESSION['order']->addItem($domainItem);
     }
     // Proceed to the cart page
     $this->gotoPage("cart");
 }
/**
 * Load multiple OrderHostingDBO's from database
 *
 * @param string $filter A WHERE clause
 * @param string $sortby Field name to sort results by
 * @param string $sortdir Direction to sort in (ASEC or DESC)
 * @param int $limit Limit the number of results
 * @param int $start Record number to start the results at
 * @return array Array of OrderDBO's
 */
function &load_array_OrderHostingDBO($filter = null, $sortby = null, $sortdir = null, $limit = null, $start = null)
{
    $DB = DBConnection::getDBConnection();
    // Build query
    $sql = $DB->build_select_sql("orderhosting", "*", $filter, $sortby, $sortdir, $limit, $start);
    // Run query
    if (!($result = @mysql_query($sql, $DB->handle()))) {
        // Query error
        throw new DBException(mysql_error($DB->handle()));
    }
    if (mysql_num_rows($result) == 0) {
        // No rows found
        throw new DBNoRowsFoundException();
    }
    // Build an array of DBOs from the result set
    $dbo_array = array();
    while ($data = mysql_fetch_array($result)) {
        // Create and initialize a new DBO with the data from the DB
        $dbo = new OrderHostingDBO();
        $dbo->load($data);
        // Add OrderDBO to array
        $dbo_array[] = $dbo;
    }
    return $dbo_array;
}