}
    }
    $opt_logLoc = $sql->getOption('Log_File_Location');
    if ($opt_logLoc === false) {
        $log->add_log($sessionID, 'Warning', 'CheckThresholds Warning: Log_File_Location Option missing or invalid.');
    } else {
        $log->set_log_location($opt_logLoc);
    }
    $runLevel = $sql->verifySID($sessionID, "0");
    $dataArray = $sql->checkThresholds();
} catch (PDOException $e) {
    $statusMessage = 'CheckThresholds SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
    $statusCode = 1;
    echo "Error: " . $e->getMessage();
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'CheckThresholds Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
    echo "Error: " . $e->getMessage();
}
if ($statusCode == 0) {
    $statusMessage = "CheckThresholds completed successfully.";
    $log->add_log($sessionID, 'Debug', $statusMessage);
    $statusArray[0] = $statusCode;
    $statusArray[1] = $statusMessage;
    $statusArray[2] = $runLevel;
    $IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $dataArray, "THRESHOLDS", "THRESHOLDS_ENTRY");
}
    $stmt = $sql->prepare($sqlQuery);
    $stmt->execute();
    $dataArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $partNumber = "N/A";
    //Find Part Number
    foreach ($dataArray as $entry) {
        if ($entry['Id'] == $recordID) {
            $partNumber = $entry['Part'];
        }
    }
    $statusCode = '0';
    $statusMessage = "Class Data Record({$recordID}) - {$field} was updated with {$value}";
    $log->add_log($sessionID, 'Information', $statusMessage, $partNumber);
} catch (PDOException $e) {
    $statusCode = '1';
    $statusMessage = 'ModifyClassData SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'ModifyClassData Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
}
//finally()  PHP 5.5+, currently using 5.3.
//{
$statusArray[0] = $statusCode;
$statusArray[1] = $statusMessage;
$statusArray[2] = $runLevel;
$IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $dataArray, "CLASS_DATA", "CLASS_ENTRY");
//}
    $IMSBase->verifyData($partNumber, "/^.+\$/", "Part Number");
    $IMSBase->verifyData($field, "/^.+\$/", "Item Field");
    $IMSBase->verifyData($value, "/^.+\$/", "Item Value");
    if ($sql->exists($partNumber, 'dbo.Inventory') == FALSE) {
        $statusCode = '1';
        $statusMessage = "ModifyItem Error: Part Number, {$partNumber}, does not exist.";
        $log->add_log($sessionID, 'Warning', $statusMessage);
    } else {
        $sql->command("UPDATE dbo.Inventory SET [{$field}]='{$value}' WHERE Name='{$partNumber}';");
        $statusCode = '0';
        $statusMessage = "Item({$partNumber}) {$field} was updated with {$value}";
        $log->add_log($sessionID, 'Information', $statusMessage, $partNumber);
    }
} catch (PDOException $e) {
    $statusCode = '1';
    $statusMessage = 'ModifyItem SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'ModifyItem Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
}
//finally()  PHP 5.5+, currently using 5.3.
//{
$statusArray[0] = $statusCode;
$statusArray[1] = $statusMessage;
$statusArray[2] = $runLevel;
$IMSBase->GenerateXMLResponse($sessionID, $statusArray);
//}
    $opt_logLoc = $sql->getOption('Log_File_Location');
    if ($opt_logLoc === false) {
        $log->add_log($sessionID, 'Warning', 'RetrieveLog Warning: Log_File_Location Option missing or invalid.');
    } else {
        $log->set_log_location($opt_logLoc);
    }
    $runLevel = $sql->verifySID($sessionID);
    //No special permission required.
    $IMSBase->verifyData($logLevel, "/^.+\$/", "Log Level");
    $logArray = $log->read_log($logLevel);
    $statusCode = '0';
    $statusMessage = 'RetrieveLog, successfully retrieved log data.';
    $log->add_log($sessionID, 'Debug', $statusMessage);
} catch (PDOException $e) {
    $statusCode = '1';
    $statusMessage = 'RetrieveLog SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'RetrieveLog Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
}
//finally()  PHP 5.5+, currently using 5.3.
//{
$statusArray[0] = $statusCode;
$statusArray[1] = $statusMessage;
$statusArray[2] = $runLevel;
$IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $logArray, "LOG", "LOG_ENTRY");
//}
    //1 = Requires edit privileges.
    $IMSBase->verifyData($recordID, "/^.+\$/", "Record ID");
    $IMSBase->verifyData($field, "/^.+\$/", "Record Field");
    $IMSBase->verifyData($value, "/^.+\$/", "Record Value");
    $sql->command("UPDATE dbo.Emails SET [{$field}]='{$value}' WHERE ID='{$recordID}';");
    //retrieve new table.
    $sqlQuery = "SELECT * FROM dbo.Emails;";
    $stmt = $sql->prepare($sqlQuery);
    $stmt->execute();
    $dataArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $statusCode = '0';
    $statusMessage = "Email record({$recordID}) - {$field} was updated with {$value}";
    $log->add_log($sessionID, 'Information', $statusMessage);
} catch (PDOException $e) {
    $statusCode = '1';
    $statusMessage = 'ModifyEmailAddress SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'ModifyEmailAddress Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
}
//finally()  PHP 5.5+, currently using 5.3.
//{
$statusArray[0] = $statusCode;
$statusArray[1] = $statusMessage;
$statusArray[2] = $runLevel;
$IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $dataArray, "EMAIL_LIST", "EMAIL_ENTRY");
//}
        $sqlQuery = $sqlQuery . " WHERE [Name] LIKE '%{$filter}%' or [Description] LIKE '%{$filter}%'" . " or [Supplier_Part_Number] LIKE '%{$filter}%' or [Type] LIKE '%{$filter}%'" . " or [Value] LIKE '%{$filter}%' or [Quantity] LIKE '%{$filter}%'" . " or [Location] LIKE '%{$filter}%' or [Ordering_Threshold] LIKE '%{$filter}%'" . " or [Suppliers_Name] LIKE '%{$filter}%' or [Item_Link] LIKE '%{$filter}%'";
    }
    if ($sortColumn != "") {
        $sqlQuery = $sqlQuery . " ORDER BY {$sortColumn} {$sortDirection}";
    }
    $sqlQuery .= ";";
    $stmt = $sql->prepare($sqlQuery);
    $stmt->execute();
    $dataArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $statusCode = '0';
    $statusMessage = "RetrieveBroswerData: Browser data filtered by ({$filter}) and sorted by ({$sortColumn}, {$sortDirection}) completed successfully.";
    $log->add_log($sessionID, 'Debug', $statusMessage);
} catch (PDOException $e) {
    $statusCode = '1';
    $statusMessage = 'RetrieveBroswerData SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'RetrieveBroswerData Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
}
//finally()  PHP 5.5+, currently using 5.3.
//{
$statusArray[0] = $statusCode;
$statusArray[1] = $statusMessage;
$statusArray[2] = $runLevel;
//$dataArray will be null unless it was filled by $stmt->fetch()
$IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $dataArray, "BROWSER", "BROWSER_ENTRY");
//}
                //echo "* ---End of result --- *\r\n";
            } while (sqlsrv_next_result($stmt));
            sqlsrv_free_stmt($stmt);
        }
    }
    sqlsrv_configure("WarningsReturnAsErrors", 1);
    sqlsrv_close($conn);
} catch (PDOException $e) {
    $statusCode = 1;
    $statusMessage = 'RestoreDatabase SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
    echo "Error: " . $e->getMessage();
    sqlsrv_configure("WarningsReturnAsErrors", 1);
    sqlsrv_close($conn);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'RestoreDatabase Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
    echo "Error: " . $e->getMessage();
    sqlsrv_configure("WarningsReturnAsErrors", 1);
    sqlsrv_close($conn);
}
if ($statusCode == 0) {
    $statusMessage = 'Database restore successful.';
    $log->add_log($sessionID, 'Info', $statusMessage);
    $statusArray[0] = $statusCode;
    $statusArray[1] = $statusMessage;
    $IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $dataArray, "BACKUP", "BACKUP_ENTRY");
}
            $stmt = $sql->prepare($sqlQuery);
            $stmt->execute();
        }
    }
    $sqlQuery = "SELECT Supplier_Part_Number, Item_Link, Quantity FROM dbo.Purchase_List;";
    $stmt = $sql->prepare($sqlQuery);
    $stmt->execute();
    $dataArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    $statusCode = 1;
    $statusMessage = 'RemoveManualEntries SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
    echo "Error: " . $e->getMessage();
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'RemoveManualEntries SQLError: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
    echo "Error: " . $e->getMessage();
}
if ($statusCode == 0) {
    $statusMessage = "Deleted " . $N . " Item(s) from list: ";
    for ($i = 0; $i < $N; $i++) {
        $statusMessage .= $aItem[$i] . " ";
    }
    $log->add_log($sessionID, 'Information', $statusMessage);
    $statusArray[0] = $statusCode;
    $statusArray[1] = $statusMessage;
    $IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, NULL, $dataArray);
}
    $stmt->execute();
    $dataArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $rowCount = count($dataArray);
    if ($rowCount == 0) {
        $suggestionArray[] = "No Suggestion.";
    } else {
        foreach ($dataArray as $rowData) {
            $suggestionArray[] = array('Name' => $rowData['Name'], 'Description' => $rowData['Description'], 'Type' => $rowData['Type']);
        }
    }
    $statusCode = '0';
    $statusMessage = "QueryAutocomplete: {$rowCount} auto-complete suggestions supplied for ({$filter}).";
    $log->add_log($sessionID, 'Debug', $statusMessage);
} catch (PDOException $e) {
    $statusCode = '1';
    $statusMessage = 'QueryAutocomplete SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'QueryAutocomplete Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
}
//finally()  PHP 5.5+, currently using 5.3.
//{
$statusArray[0] = $statusCode;
$statusArray[1] = $statusMessage;
$statusArray[2] = $runLevel;
$IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $suggestionArray, "QUERY_SUGGEST", "SUGGESTION");
//}
        $dataArray[count($dataArray) + 1]['Option'] = "SQL_PASS";
        $dataArray[count($dataArray)]['Value'] = $options_file["SQL_SERVER"]["SQL_PASS"];
        $dataArray[count($dataArray) + 1]['Option'] = "SQL_DRIVER";
        $dataArray[count($dataArray)]['Value'] = $options_file["SQL_SERVER"]["SQL_DRIVER"];
    }
    if ($runLevel < 2) {
        for ($i = 0; $i < count($dataArray); $i++) {
            if ($dataArray[$i]['Option'] == 'SQL_PASS' || $dataArray[$i]['Option'] == 'Email_Pass') {
                $dataArray[$i]['Value'] = "******";
            }
        }
    }
    $statusCode = "0";
    $statusMessage = "Option table fetched.";
    $log->add_log($sessionID, 'Debug', $statusMessage);
} catch (PDOException $e) {
    $statusCode = 1;
    $statusMessage = 'ReadOptions SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'ReadOptions Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
}
$statusArray[0] = $statusCode;
$statusArray[1] = $statusMessage;
$statusArray[2] = $runLevel;
$IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $dataArray, "OPTIONS", "OPT_ENTRY");
                //echo "* ---End of result --- *\r\n";
            } while (sqlsrv_next_result($stmt));
            sqlsrv_free_stmt($stmt);
        }
    }
    sqlsrv_configure("WarningsReturnAsErrors", 1);
    sqlsrv_close($conn);
} catch (PDOException $e) {
    $statusCode = 1;
    $statusMessage = 'CreateDatabase SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
    echo "Error: " . $e->getMessage();
    sqlsrv_configure("WarningsReturnAsErrors", 1);
    sqlsrv_close($conn);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'CreateDatabase Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
    echo "Error: " . $e->getMessage();
    sqlsrv_configure("WarningsReturnAsErrors", 1);
    sqlsrv_close($conn);
}
if ($statusCode == 0) {
    $statusMessage = 'Database creation successful.';
    $log->add_log($sessionID, 'Info', $statusMessage);
    $statusArray[0] = $statusCode;
    $statusArray[1] = $statusMessage;
    $IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $dataArray, "DATABASE", "DATABASE_ENTRY");
}
            $intRev = $intRev + 1;
            $newRevStr = str_pad($intRev, 2, "0", STR_PAD_LEFT);
            $partNumber = substr($partNumber, 0, strlen($partNumber) - 3) . "-" . $newRevStr;
        } else {
            $partNumber = $partNumber . "-01";
        }
        $log->add_log($sessionID, 'Warning', "CreateNewItem.php: Part number {$oldPN} existed, replaced with {$partNumber}.");
        $partNumberChange[0]['Part'] = $partNumber;
    }
    $sql->command('INSERT INTO dbo.Inventory (Name) VALUES (\'' . $partNumber . '\');');
    $statusCode = '0';
    $statusMessage = 'Item (' . $partNumber . ') created successfully. ';
    $log->add_log($sessionID, 'Information', $statusMessage, $partNumber);
} catch (PDOException $e) {
    $statusCode = '1';
    $statusMessage = 'CreateNewItem SQLError: ' . $e->getMessage();
    $log->add_log($sessionID, 'Error', $statusMessage);
} catch (Exception $e) {
    $statusCode = $e->getCode();
    $statusMessage = 'CreateNewItem Error: ' . $e->getMessage();
    if (!$log->add_log($sessionID, 'Error', $statusMessage, "N/A", true)) {
        $statusMessage = $statusMessage . " **Logging Failed**";
    }
}
//finally()  PHP 5.5+, currently using 5.3.
//{
$statusArray[0] = $statusCode;
$statusArray[1] = $statusMessage;
$statusArray[2] = $runLevel;
$IMSBase->GenerateXMLResponse($sessionID, $statusArray, NULL, $partNumberChange, "CREATEITEM", "CHANGE");
//}