123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- <?php
- /* vim: set expandtab sw=4 ts=4 sts=4: */
- /**
- * PHP interface to MimerSQL Validator
- *
- * Copyright 2002, 2003 Robin Johnson <robbat2@users.sourceforge.net>
- * http://www.orbis-terrarum.net/?l=people.robbat2
- *
- * All data is transported over HTTP-SOAP
- * And uses either the PEAR SOAP Module or PHP SOAP extension
- *
- * Install instructions for PEAR SOAP:
- * Make sure you have a really recent PHP with PEAR support
- * run this: "pear install Mail_Mime Net_DIME SOAP"
- *
- * @access public
- *
- * @package PhpMyAdmin
- */
- if (! defined('PHPMYADMIN')) {
- exit;
- }
- /**
- * Load SOAP client.
- */
- if (class_exists('SOAPClient')) {
- $GLOBALS['sqlvalidator_error'] = false;
- $GLOBALS['sqlvalidator_soap'] = 'PHP';
- } else {
- @include_once 'SOAP/Client.php';
- if (class_exists('SOAP_Client')) {
- $GLOBALS['sqlvalidator_soap'] = 'PEAR';
- $GLOBALS['sqlvalidator_error'] = false;
- } else {
- $GLOBALS['sqlvalidator_soap'] = 'NONE';
- $GLOBALS['sqlvalidator_error'] = true;
- PMA_warnMissingExtension('soap');
- }
- }
- if (!$GLOBALS['sqlvalidator_error']) {
- // Ok, we have SOAP Support, so let's use it!
- /**
- * @package PhpMyAdmin
- */
- class PMA_SQLValidator
- {
- var $url;
- var $service_name;
- var $wsdl;
- var $output_type;
- var $username;
- var $password;
- var $calling_program;
- var $calling_program_version;
- var $target_dbms;
- var $target_dbms_version;
- var $connectionTechnology;
- var $connection_technology_version;
- var $interactive;
- var $service_link = null;
- var $session_data = null;
- /**
- * Private functions - You don't need to mess with these
- */
- /**
- * Service opening
- *
- * @param string $url URL of Mimer SQL Validator WSDL file
- *
- * @return object Object to use
- *
- * @access private
- */
- function _openService($url)
- {
- if ($GLOBALS['sqlvalidator_soap'] == 'PHP') {
- $obj = new SOAPClient($url);
- } else {
- $obj = new SOAP_Client($url, true);
- }
- return $obj;
- } // end of the "openService()" function
- /**
- * Service initializer to connect to server
- *
- * @param object $obj Service object
- * @param string $username Username
- * @param string $password Password
- * @param string $calling_program Name of calling program
- * @param string $calling_program_version Version of calling program
- * @param string $target_dbms Target DBMS
- * @param string $target_dbms_version Version of target DBMS
- * @param string $connection_technology Connection Technology
- * @param string $connection_technology_version Con. Technology version
- * @param integer $interactive boolean 1/0 to specify if
- * we are an interactive system
- *
- * @return object stdClass return object with data
- *
- * @access private
- */
- function _openSession($obj, $username, $password, $calling_program,
- $calling_program_version, $target_dbms, $target_dbms_version,
- $connection_technology, $connection_technology_version, $interactive
- ) {
- $use_array = array(
- "a_userName" => $username,
- "a_password" => $password,
- "a_callingProgram" => $calling_program,
- "a_callingProgramVersion" => $calling_program_version,
- "a_targetDbms" => $target_dbms,
- "a_targetDbmsVersion" => $target_dbms_version,
- "a_connectionTechnology" => $connection_technology,
- "a_connectionTechnologyVersion" => $connection_technology_version,
- "a_interactive" => $interactive,
- );
- if ($GLOBALS['sqlvalidator_soap'] == 'PHP') {
- $ret = $obj->__soapCall("openSession", $use_array);
- } else {
- $ret = $obj->call("openSession", $use_array);
- }
- return $ret;
- } // end of the "_openSession()" function
- /**
- * Validator sytem call
- *
- * @param object $obj Service object
- * @param object $session Session object
- * @param string $sql SQL Query to validate
- * @param string $method Data return type
- *
- * @return object stClass return with data
- *
- * @access private
- */
- function _validateSQL($obj, $session, $sql, $method)
- {
- $use_array = array(
- "a_sessionId" => $session->sessionId,
- "a_sessionKey" => $session->sessionKey,
- "a_SQL" => $sql,
- "a_resultType" => $this->output_type,
- );
- if ($GLOBALS['sqlvalidator_soap'] == 'PHP') {
- $res = $obj->__soapCall("validateSQL", $use_array);
- } else {
- $res = $obj->call("validateSQL", $use_array);
- }
- return $res;
- } // end of the "validateSQL()" function
- /**
- * Validator sytem call
- *
- * @param string $sql SQL Query to validate
- *
- * @return object stdClass return with data
- *
- * @access private
- *
- * @see validateSQL()
- */
- function _validate($sql)
- {
- $ret = $this->_validateSQL(
- $this->service_link, $this->session_data, $sql, $this->output_type
- );
- return $ret;
- } // end of the "validate()" function
- /**
- * Public functions
- */
- /**
- * Constructor
- *
- * @access public
- */
- function __construct()
- {
- $this->url = 'http://sqlvalidator.mimer.com/v1/services';
- $this->service_name = 'SQL99Validator';
- $this->wsdl = '?wsdl';
- $this->output_type = 'html';
- $this->username = 'anonymous';
- $this->password = '';
- $this->calling_program = 'PHP_SQLValidator';
- $this->calling_program_version = PMA_VERSION;
- $this->target_dbms = 'N/A';
- $this->target_dbms_version = 'N/A';
- $this->connection_technology = 'PHP';
- $this->connection_technology_version = phpversion();
- $this->interactive = 1;
- $this->service_link = null;
- $this->session_data = null;
- } // end of the "PMA_SQLValidator()" function
- /**
- * Sets credentials
- *
- * @param string $username the username
- * @param string $password the password
- *
- * @return void
- * @access public
- */
- function setCredentials($username, $password)
- {
- $this->username = $username;
- $this->password = $password;
- } // end of the "setCredentials()" function
- /**
- * Sets the calling program
- *
- * @param string $calling_program the calling program name
- * @param string $calling_program_version the calling program revision
- *
- * @return void
- * @access public
- */
- function setCallingProgram($calling_program, $calling_program_version)
- {
- $this->calling_program = $calling_program;
- $this->calling_program_version = $calling_program_version;
- } // end of the "setCallingProgram()" function
- /**
- * Appends the calling program
- *
- * @param string $calling_program the calling program name
- * @param string $calling_program_version the calling program revision
- *
- * @return void
- * @access public
- */
- function appendCallingProgram($calling_program, $calling_program_version)
- {
- $this->calling_program .= ' - ' . $calling_program;
- $this->calling_program_version .= ' - ' . $calling_program_version;
- } // end of the "appendCallingProgram()" function
- /**
- * Sets the target DBMS
- *
- * @param string $target_dbms the target DBMS name
- * @param string $target_dbms_version the target DBMS revision
- *
- * @return void
- * @access public
- */
- function setTargetDbms($target_dbms, $target_dbms_version)
- {
- $this->target_dbms = $target_dbms;
- $this->target_dbms_version = $target_dbms_version;
- } // end of the "setTargetDbms()" function
- /**
- * Appends the target DBMS
- *
- * @param string $target_dbms the target DBMS name
- * @param string $target_dbms_version the target DBMS revision
- *
- * @return void
- * @access public
- */
- function appendTargetDbms($target_dbms, $target_dbms_version)
- {
- $this->target_dbms .= ' - ' . $target_dbms;
- $this->target_dbms_version .= ' - ' . $target_dbms_version;
- } // end of the "appendTargetDbms()" function
- /**
- * Sets the connection technology used
- *
- * @param string $connection_technology the con. technology name
- * @param string $connection_technology_version the con. technology revision
- *
- * @return void
- * @access public
- */
- function setConnectionTechnology(
- $connection_technology, $connection_technology_version
- ) {
- $this->connection_technology = $connection_technology;
- $this->connection_technology_version = $connection_technology_version;
- } // end of the "setConnectionTechnology()" function
- /**
- * Appends the connection technology used
- *
- * @param string $connection_technology the con. technology name
- * @param string $connection_technology_version the con. technology revision
- *
- * @return void
- * @access public
- */
- function appendConnectionTechnology(
- $connection_technology, $connection_technology_version
- ) {
- $this->connection_technology .= ' - ' . $connection_technology;
- $this->connection_technology_version .= ' - ' . $connection_technology_version;
- } // end of the "appendConnectionTechnology()" function
- /**
- * Sets whether interactive mode should be used or not
- *
- * @param integer $interactive whether interactive mode should be used or not
- *
- * @return void
- * @access public
- */
- function setInteractive($interactive)
- {
- $this->interactive = $interactive;
- } // end of the "setInteractive()" function
- /**
- * Sets the output type to use
- *
- * @param string $output_type the output type to use
- *
- * @return void
- * @access public
- */
- function setOutputType($output_type)
- {
- $this->output_type = $output_type;
- } // end of the "setOutputType()" function
- /**
- * Starts service
- *
- * @return void
- * @access public
- */
- function startService()
- {
- $this->service_link = $this->_openService(
- $this->url . '/' . $this->service_name . $this->wsdl
- );
- } // end of the "startService()" function
- /**
- * Starts session
- *
- * @return void
- * @access public
- */
- function startSession()
- {
- $this->session_data = $this->_openSession(
- $this->service_link, $this->username, $this->password,
- $this->calling_program, $this->calling_program_version,
- $this->target_dbms, $this->target_dbms_version,
- $this->connection_technology, $this->connection_technology_version,
- true // FIXME: Are we to tell them that we are interactive?
- );
- if (isset($this->session_data)
- && ($this->session_data != null)
- && ($this->session_data->target != $this->url)
- ) {
- // Reopens the service on the new URL that was provided
- $url = $this->session_data->target;
- $this->startService();
- }
- } // end of the "startSession()" function
- /**
- * Do start service and session
- *
- * @return void
- * @access public
- */
- function start()
- {
- $this->startService();
- $this->startSession();
- } // end of the "start()" function
- /**
- * Call to determine just if a query is valid or not.
- *
- * @param string $sql SQL statement to validate
- *
- * @return string Validator string from Mimer
- *
- * @see _validate
- */
- function isValid($sql)
- {
- $res = $this->_validate($sql);
- return $res->standard;
- } // end of the "isValid()" function
- /**
- * Call for complete validator response
- *
- * @param string $sql SQL statement to validate
- *
- * @return string Validator string from Mimer
- *
- * @see _validate
- */
- function validationString($sql)
- {
- $res = $this->_validate($sql);
- return $res->data;
- } // end of the "validationString()" function
- } // end class PMA_SQLValidator
- //add an extra check to ensure that the class was defined without errors
- if (!class_exists('PMA_SQLValidator')) {
- $GLOBALS['sqlvalidator_error'] = true;
- }
- } // end else
- ?>
|