| 
					
				 | 
			
			
				@@ -0,0 +1,129 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<?php 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Php-Gtk MySQL administrator - server controller  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @license CeCILL 2.0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @copyright 2008 Ouest  Systemes Informatiques 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author Frederic G. MARAND 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @version $Id: Server_Controller.php,v 1.1 2008-05-25 20:29:20 cvs Exp $ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Wrapper around the PDO object for MySQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class Server_Controller 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected $host = 'localhost'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected $user = 'root'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * TCP/IP port. Default is defined by MySQL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @var int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected $port = 3306; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * cleartext password(!) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @FIXME find a way to avoid storing the clear text password 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @var string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  protected $pass = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @var PDO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public $conn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @param array $arCred 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @return void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public function __construct(array $arCred = array()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    foreach ($arCred as $key => $val) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->$key = $val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * Connect to the server 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @return bool  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @throws PDOException 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public function login() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $this->conn = new PDO('mysql:host=' . $this->host  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      . ';port=' . $this->port 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      . ';dbname=mysql',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->user,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $this->pass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return (is_object($this->conn)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * Obtain a list of the databases visible on this server 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * when connected with the current credentials 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @return array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public function getDatabases() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $q = $this->conn->query('SHOW DATABASES'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $ret = $q->fetchAll(PDO::FETCH_COLUMN, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $q->closeCursor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * Return the status variables of the server, or a specific 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * variable if $key is not empty 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * Note that if $key is not empty, there is no way to differentiate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * between a NULL result and an undefined variable. This seems most 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * appropriate for "sloppy" code like PHP.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   *   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @todo check whether it wouldn't be faster in the $key case to just fetch all like in the no key case, and use array indexing to extract the result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @param string $key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @return mixed Return an array if $key is empty, or a single value if it is set  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public function getStatus($key = NULL) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $q = $this->conn->query('SHOW STATUS'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (empty($key)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $ret = $q->fetchAll(PDO::FETCH_COLUMN, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $q->closeCursor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $ret = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      while ($row = $q->fetch(PDO::FETCH_NUM)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ($row[0] === $key) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $ret = $row[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $q->closeCursor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * Flush the query cache, optionally emptying it. Flushing without 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * emptying just defragments the cache, losing nothing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @param bool $reset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @return void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public function flushQueryCache($reset = FALSE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $sq = ($reset ? 'RESET' : 'FLUSH') . ' QUERY CACHE'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $ret = $this->conn->query($sq); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $ret->closeCursor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 |