| 
					
				 | 
			
			
				@@ -1,651 +1,66 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <?php 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Wrapper around php tidy class. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * @param string $html 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * @return void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function applyTidy (&$html) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $config = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'indent'          => TRUE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'output-xhtml'    => TRUE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'sort-attributes' => 'alpha', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'wrap'            => 200, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $tidy = new tidy(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $tidy->parseString($html, $config, 'utf8'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $tidy->cleanRepair(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  $html = (string) $tidy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class Context { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $logLevelClasses = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Base URL for the script. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Graphics context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var GraphicsContext 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $gc = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Logging level, as per RFC5424 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @link http://php.net/network.constants.php 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var integer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $logLevel = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Messages for display. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $messages = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Requested path: <$PHP_SELF>?q=a/b/c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $path = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Tidy the output ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var boolean 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $tidy = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace Memcache_UI { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * User information: logged or not ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * Wrapper around php tidy class. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var boolean 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $user = FALSE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function __construct() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->getTidy(); // Needed to check extension 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function __destruct() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!empty($this->messages)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $ret = (string) new Element('pre', array('class' => array('messages')), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        implode("\n", $this->getMessage(TRUE))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      echo $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function __toString() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $ret = '<pre>' . print_r($this, TRUE) . '</pre>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Get the base path where the script is located. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * This is helpful to locate other files using paths relative to the install. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getBase() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!isset($this->base)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->base = dirname($_SERVER['SCRIPT_NAME']); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if ($this->base == '/') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $this->base = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $this->base; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getLogLevel() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!isset($this->logLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $usLogLevel = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      foreach ($_GET as $key => $value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (strtolower($key) === 'loglevel') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          $usLogLevel = (int) $value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!isset($usLogLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $usLogLevel = LOG_NOTICE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if ($usLogLevel < LOG_EMERG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $this->logLevel = LOG_EMERG; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      elseif ($usLogLevel > LOG_DEBUG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $this->logLevel = LOG_DEBUG; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $this->logLevel = $usLogLevel; // We now know it to be safe 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $this->logLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getLogLevelClass($logLevel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!isset($this->logLevelClasses)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->logLevelClasses = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG_EMERG   => 'error', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG_ALERT   => 'error', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG_CRIT    => 'error', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG_ERR     => 'error', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG_WARNING => 'warning', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG_NOTICE  => 'warning', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG_INFO    => 'status', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOG_DEBUG   => 'status', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ($logLevel < LOG_EMERG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $logLevel = LOG_EMERG; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    elseif ($logLevel > LOG_DEBUG) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $logLevel = LOG_DEBUG; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $this->logLevelClasses[$logLevel]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getMessage($clear = FALSE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $ret = $this->messages; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ($clear) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->messages = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Return the requested path. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @param string $path 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getPath() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!isset($this->path)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->path = empty($_GET['q']) ? '' : $_GET['q']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $this->path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Return the "tidy" status. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Will only be TRUE if requested (possibly by default) and extension is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * loaded. A warning will be generated if tidy is requested but extension is 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * not loaded. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getTidy() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    static $notified = FALSE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!isset($this->tidy)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->tidy = TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      foreach ($_GET as $key => $value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (strtolower($key) === 'tidy') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          $this->tidy = !!$value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!$notified && $this->tidy && !extension_loaded('tidy')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $this->setMessage(strtr('Extension @tidy requested but missing: skipping', array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          '@tidy' => 'tidy', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        )), LOG_WARNING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $notified = TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $this->tidy = FALSE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $this->tidy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Add a message to the messages list if it is above the current logging level. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @param string $text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @param integer $logLevel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   * @param string $html 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    * @return void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function setMessage($text, $logLevel = LOG_NOTICE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ($logLevel <= $this->getlogLevel()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (is_array($text) || (is_object($text) && !method_exists($text, '__toString'))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $this->messages[] = array('<pre>' . print_r($text, TRUE) . '</pre>', $logLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $this->messages[] = array((string) $text, $logLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * A wrapper for XML elements. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class Element { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public $attributes = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public $name = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public $new_line; // Add a new line after element 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public $value = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function __construct($name, $attr = NULL, $value = NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->name = $name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->attributes = $attr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->value = $value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @link drupal7/includes/common.inc#check_plain() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public static function check_plain($text) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @link drupal7/includes/common.inc#drupal_attributes() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public static function getSerializedAttributes(array $attributes = array()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    foreach ($attributes as $attribute => &$data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $data = implode(' ', (array) $data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $data = $attribute . '="' . self::check_plain($data) . '"'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return $attributes ? ' ' . implode(' ', $attributes) : ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function __toString() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $ret = '<'. $this->name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!empty($this->attributes) && is_array($this->attributes)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $ret .= self::getSerializedAttributes($this->attributes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (empty($this->value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $ret .= ' />'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $ret .= '>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if ($this->value instanceof Element) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $ret .= (string) $this->value; // force __toString() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      elseif (is_array($this->value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $ret .= implode("\n", $this->value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $ret .= $this->value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $ret .= "</$this->name>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class GraphicsContext { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $palette = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-abstract class Page extends Element { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * The HTML body element of the page. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * The MIME content type with charset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $contentType = 'text/html; charset=utf8'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var Context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * The HTML head element of the page. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $head; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * The array of HTTP headers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $headers = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $finalized = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @var array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  protected $styles; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * Page constructor. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @param Context $context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @param array $item 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   *   A router info array. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   * @see Router::getInfo() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function __construct(Context $context, array $item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    parent::__construct('html'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $context->setMessage($item, LOG_DEBUG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->context = $context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->initializeHead(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->initializeBody(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // Will fail if not reimplemented as a concrete method in a child class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function __toString() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->finalizeHeader(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $html = new Element('html', NULL, $this->getHead() . $this->getBody()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return (string) $html; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public abstract function build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function emitHeaders() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->finalizeHeader(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    foreach ($this->headers as $name => $value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      header("$name: $value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function finalizeBody() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (isset($this->finalized['body'])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      throw new Exception('Attempt to finalize already finalized body'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ($message = $this->context->getMessage(TRUE)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $items = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      foreach ($message as $row) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $items[] = new Element('li', array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          'class' => array($this->context->getLogLevelClass($row[1])), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ), $row[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->setBody(new Element('div', array('class' => array('messages')), $items), 'messages'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    foreach ($this->getRegions() as $region) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->body[$region] = implode('', $this->body[$region]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->finalized['body'] = TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function finalizeHead() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (isset($this->finalized['head'])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      throw new Exception('Attempt to finalize already finalized head'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $cssLink = new Element('link', array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'rel' => 'stylesheet', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'type' => 'text/css', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'href' => $this->context->getBase() .'/memcache_ui.css', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    )); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->setHead($cssLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->finalized['head'] = TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function finalizeHeader() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $contentType = $this->getHeader('content-type'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (empty($contentType)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->setHeader('content-type', $this->contentType); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getBody() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->finalizeBody(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $body = new Element('body', NULL, $this->body); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $ret = (string) $body; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getHead() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->finalizeHead(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $head = new Element('head', NULL, $this->head); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $ret = (string) $head; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getHeader($name) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function getRegions() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $ret = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'header', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'first sidebar', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'content top', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'messages', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'help', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'content', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'content bottom', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'second sidebar', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'footer', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function applyTidy (&$html) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $config = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'indent'          => TRUE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'output-xhtml'    => TRUE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'sort-attributes' => 'alpha', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        'wrap'            => 200, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $tidy = new tidy(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $tidy->parseString($html, $config, 'utf8'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $tidy->cleanRepair(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $html = (string) $tidy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function initializeBody() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    foreach ($this->getRegions() as $region) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->body[$region] = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  function main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ob_start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //echo '<pre>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function initializeHead() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->setHead(new Element('title', NULL, 'Memcache info')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Set-up autoloader: it cannot autoload itself. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $package = 'Memcache_UI'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      require "$package/Core/Autoloader.inc"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $classLoader = new \SplClassLoader($package, dirname(__FILE__)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $classLoader->setFileExtension('.inc'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $classLoader->register(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function setBody($fragment, $region = 'content') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!in_array($region, $this->getRegions())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->context->setMessage(strtr('Attempted to insert data in nonexistent region @region', array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        '@region' => self::check_plain($region), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      )), LOG_WARNING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->body[$region][] = $fragment; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Set up the context 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context = new Core\Context(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context->setMessage("Dirname: [". $context->getBase() . "]", LOG_DEBUG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $context->setMessage("Path: [". $context->getPath() . "]", LOG_DEBUG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function setHead($item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->head[] = $item; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  public function setHeader($name, $value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->headers[$name] = $value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Obtain the routing information 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $router = new Core\Router($context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $item = $router->getRoute(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $page = new $item['page class']($context, $item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $page->emitHeaders(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      echo $page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Provide common layout elements to child classes. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * - header 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-abstract class Page_Memcache_Base extends Page { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function build() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->setBody( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      new Element('div', array('class' => array('head')), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        new Element('h1', array('class' => array('memcache')), array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          new Element('span', array('class' => array('logo')), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            new Element('a', array('href' => 'http://pecl.php.net/package/memcache'), 'memcache') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          new Element('span', array('class' => array('nameinfo')), 'memcache_ui.php from an idea by <a href="http://livebookmark.net">Harun Yayli</a>'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ))), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'header' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class Page_Memcache_Main extends Page_Memcache_Base { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function build() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    parent::build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->setBody(new Element('p', NULL, 'Hello world')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class Page_Memcache_Server_Flush extends Page_Memcache_Base { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function build() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    parent::build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->setBody(new Element('p', NULL, 'Flush server')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $html = ob_get_clean(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class Page_Memcache_Slab_Overview extends Page_Memcache_Base { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function build() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    parent::build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->setBody(new Element('p', NULL, 'Slabs')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class Router { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function __construct(Context $context) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $this->context = $context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function getInfo() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $ret = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^server/(\w+)/flush/(\w+)$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'page_server_flush', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page arguments' => array('$1', '$2'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title callback' => 'title_server', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title arguments' => 'page arguments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^server/(\w+)/flush$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'Page_Memcache_Server_Flush', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page arguments' => array('$1'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title callback' => 'title_server', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title arguments' => 'page arguments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^server/(\w+)/slab/(\d+)$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'page_slab_view', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page arguments' => array('$1', '$2'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title callback' => 'title_slab', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title arguments' => 'page arguments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^server/(\w+)/key/(.+)/delete/(\w+)$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'page_variable_delete_confirm', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page arguments' => array('$1', '$2', '$3'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title callback' => 'title_variable', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title arguments' => 'page arguments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^server/(\w+)/key/(.+)/delete$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'page_variable_delete_form', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page arguments' => array('$1', '$2'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title callback' => 'title_variable', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title arguments' => 'page arguments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^server/(\w+)/key/(.+)/dump$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'page_variable_view_php', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page arguments' => array('$1', '$2'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title callback' => 'title_variable', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title arguments' => 'page arguments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^server/(\w+)/key/(.+)/php$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'page_variable_view_php', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page arguments' => array('$1', '$2'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title callback' => 'title_variable', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title arguments' => 'page arguments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^server/(\w+)/key/(.+)$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'page_variable_view_text', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page arguments' => array('$1', '$2'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title callback' => 'title_variable', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title arguments' => 'page arguments', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '^slabs$' => array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'Page_Memcache_Slab_Overview', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title' => 'Slabs per server', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      '' => array( // Catch-all regex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'page class' => 'Page_Memcache_Main', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        'title' => 'Overview', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $ret; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  function getRoute() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $found = FALSE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $path = $this->context->getPath(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $matches = array(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $infoDefaults = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      'page arguments' => array(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    foreach ($this->getInfo() as $regex => $info) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $regex = "@$regex@"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $count = preg_match($regex, $path, $matches); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if ($count) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $found = TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // Filter it on output 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if ($context->getTidy()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        applyTidy($html); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      echo $html; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ($found) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->context->setMessage("Menu hit on $regex", LOG_DEBUG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $info = array_merge($infoDefaults, $info); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->context->setMessage("Info: ". print_r($info, TRUE), LOG_DEBUG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!empty($info['page arguments'])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $regexes = array_fill(0, count($info['page arguments']), $regex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $paths = array_fill(0, count($info['page arguments']), $path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $info['page arguments'] = preg_replace($regexes, $info['page arguments'], $paths); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if ($info['title arguments'] == 'page arguments') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        $info['title arguments'] = &$info['page arguments']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $this->context->setMessage("Info resolved: ". print_r($info, TRUE), LOG_DEBUG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    catch (Exception $e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      echo '<pre>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      echo $e->getMessage() . PHP_EOL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      echo $e->getTraceAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      echo "</pre>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      $info = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return $info; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ob_start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $context = new Context(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $context->setMessage("Dirname: [". $context->getBase() . "]", LOG_DEBUG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $context->setMessage("Path: [". $context->getPath() . "]", LOG_DEBUG); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $router = new Router($context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $item = $router->getRoute(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $page = new $item['page class']($context, $item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $page->emitHeaders(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo $page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    $html = ob_get_clean(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ($context->getTidy()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      applyTidy($html); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo $html; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  catch (Exception $e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo '<pre>'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo $e->getMessage() . PHP_EOL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo $e->getTraceAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo "</pre>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+main(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-main(); 
			 |