Просмотр исходного кода

PHP code formatted + made more readable

Malishev Dima 14 лет назад
Родитель
Сommit
c11a9b3e01

+ 3 - 46
web/dispatch.php

@@ -1,49 +1,6 @@
 <?php
 
-function error_dumper($errno, $errstr, $errfile, $errline)
-{
-    if (!(error_reporting() & $errno)) {
-        return;
-    }
-    
-    $log = fopen('/tmp/vesta.php.log', 'a+');
-    
-    switch ($errno) {
-    case E_USER_ERROR:
-        $o = "ERROR: [$errno] $errstr\n";
-        $o.= "  Fatal error on line $errline in file $errfile";
-        $o.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")\n";
-        $o.= "Aborting...\n";
-	fwrite($log, $o);
-	fclose($log);
-        exit(1);
-        break;
+require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'vesta/core/utils/error_logger.php'
+require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'vesta/app.init.php';
 
-    case E_USER_WARNING:
-        $o = "WARNING: [$errno] $errstr\n";
-        fwrite($log, $o);
-	fclose($log);
-	break;
-
-    case E_USER_NOTICE:
-        $o =  "NOTICE: [$errno] $errstr\n";
-        fwrite($log, $o);
-	fclose($log);
-	break;
-
-    default:
-        $o = "Unknown error type: [$errno] $errstr\n";
-        fwrite($log, $o);
-	fclose($log);
-	break;
-    }
-
-    /* Don't execute PHP internal error handler */
-    return true;
-}
-
-set_error_handler('error_dumper');
-
-require dirname(__FILE__).DIRECTORY_SEPARATOR.'vesta/app.init.php';
-
-?>
+?>

+ 55 - 17
web/vesta/api/AjaxHandler.php

@@ -1,12 +1,12 @@
 <?php
-
 /**
  * Ajax Handler
  * 
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010
+ * @copyright vesta 2010-2011
  */
-class AjaxHandler {
+class AjaxHandler 
+{
 
     static public $instance = null;
 
@@ -16,9 +16,10 @@ class AjaxHandler {
     /**
      * Grab current instance or create it
      *
-     * @return <type>
+     * @return AjaxHandler
      */
-    static function getInstance($request=null) {
+    static function getInstance($request=null) 
+    {
         return null == self::$instance ? self::$instance = new self() : self::$instance;
     }
 
@@ -26,13 +27,15 @@ class AjaxHandler {
      * Called functions should reply in the following way
      * return $this->reply($result, $data, $msg, $extra);
      * 
-     * @param type $request
-     * @return type 
+     * @param Request $request
+     * @return mixed 
      */
-    function dispatch($request) {
+    function dispatch($request) 
+    {
         $method = Request::parseAjaxMethod($request);
         $inc_file = V_ROOT_DIR . 'api' . DIRECTORY_SEPARATOR . $method['namespace'] . '.class.php';
-        if (!is_readable($inc_file)) {
+        if (!is_readable($inc_file)) 
+        {
             throw new SystemException(Message::INVALID_METHOD);
         }
 
@@ -41,14 +44,24 @@ class AjaxHandler {
         $space = new $method['namespace'];
         $method = $method['function'] . 'Execute';
 
-        if (!method_exists($space, $method)) {
+        if (!method_exists($space, $method)) 
+        {
             throw new SystemException(Message::INVALID_METHOD);
         }
 
         return $space->$method($request);
     }
 
-    function reply($result, $data, $message = '', $extra = array()) {
+	/**
+	 * Prepare the result of method execution into ajax-readable format
+	 * 
+	 * @param boolean $result - result of method execution
+	 * @param array $data - data to be replied
+	 * @param string $message - replied message
+	 * @param array $extra - extra data 
+	 */
+    function reply($result, $data, $message = '', $extra = array()) 
+    {
       return json_encode(array('result' => $result,
 			       'data' => $data,
 			       'message' => $message,
@@ -57,7 +70,12 @@ class AjaxHandler {
 			       ));
     }
 
-    static function makeReply($reply) {
+	/**
+	 * TODO: delete this method
+	 * @deprecated	 
+	 */
+    static function makeReply($reply) 
+    {
         print $reply;
     }
 
@@ -65,22 +83,42 @@ class AjaxHandler {
     // Error handlers
     //
     
-    static function generalError($error) {
+    /**
+     * Generate general error
+     * @param Exception $error
+     */
+    static function generalError($error) 
+    {
         self::renderGlobalError(Message::ERROR, Message::GENERAL_ERROR, $error);
     }
 
-    static function protectionError($error) {
+	/**
+     * Generate protection error
+     * @param Exception $error
+     */
+    static function protectionError($error) 
+    {
         self::renderGlobalError(Message::ERROR, Message::PROTECTION_ERROR, $error);
     }
 
-    static function systemError($error) {
+	/**
+     * Generate system error
+     * @param Exception $error
+     */
+    static function systemError($error) 
+    {
         self::renderGlobalError(Message::ERROR, Message::SYSTEM_ERROR, $error);
     }
 
-    static function renderGlobalError($type, $message, $error) {
+	/**
+     * Prepare and render the error
+     * @param Exception $error
+     */
+    static function renderGlobalError($type, $message, $error) 
+    {
         $trace = $error->getTrace();
         AjaxHandler::makeReply(
-                        AjaxHandler::getInstance()->reply(false, $type, $message . ': ' . $error->getMessage(), $trace[0]['file'] . ' / ' . $trace[0]['line'])
+             AjaxHandler::getInstance()->reply(false, $type, $message . ': ' . $error->getMessage(), $trace[0]['file'] . ' / ' . $trace[0]['line'])
         );
     }
 

+ 263 - 213
web/vesta/api/CRON.class.php

@@ -1,221 +1,271 @@
 <?php
-/*
- * CRON 
+
+/**
+ * CRON
  * 
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010 
+ * @copyright vesta 2010-2011
  */
-class CRON extends AjaxHandler {
-  function getListExecute($request) 
-  {
-    $_user = 'vesta';
-    $reply = array();
-    
-    $result = Vesta::execute(Vesta::V_LIST_CRON_JOBS, array($_user, Config::get('response_type')));
-    
-    //	echo '<pre>';
-    //	print_r($result);
-
-    foreach($result['data'] as $id => $record)
-      {
-	$reply[$id] = array(
-			    'CMD' => $record['CMD'],
-			    'MIN' => $record['MIN'],
-			    'HOUR' => $record['HOUR'],
-			    'DAY' => $record['DAY'],
-			    'MONTH' => $record['MONTH'],
-			    'WDAY' => $record['WDAY'],
-			    'SUSPEND' => $record['SUSPEND'],
-			    'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE'])))
-			    );
-      }
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $reply);
-  }
-
-
-    
-  function addExecute($request) 
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user,
-		    'MIN' => $_s['MIN'],
-		    'HOUR' => $_s['HOUR'],
-		    'DAY' => $_s['DAY'],
-		    'MONTH' => $_s['MONTH'],
-		    'WDAY' => $_s['WDAY'],
-		    'CMD' => $_s['CMD']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_ADD_CRON_JOB, $params);
-
-
-    if($_s['REPORTS'])
-      {
-	$result = array();
-	$result = Vesta::execute(Vesta::V_ADD_SYS_USER_REPORTS, array('USER' => $_user));
-	if(!$result['status'])
-	  {
-	    $this->status = FALSE;
-	    $this->errors['REPORTS'] = array($result['error_code'] => $result['error_message']);
-	  }
-      }
-
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-  
-  
-    
-  function delExecute($request) 
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user,
-		    'JOB' => $_s['JOB']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_DEL_CRON_JOB, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
+class CRON extends AjaxHandler 
+{
   
-    
+	/**
+	 * List cron entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function getListExecute($request) 
+	{
+		$_user = 'vesta';
+		$reply = array();
+
+		$result = Vesta::execute(Vesta::V_LIST_CRON_JOBS, 
+								array($_user, Config::get('response_type')));
+
+		foreach ($result['data'] as $id => $record) 
+		{
+			$reply[$id] = array(
+				'CMD' => $record['CMD'],
+				'MIN' => $record['MIN'],
+				'HOUR' => $record['HOUR'],
+				'DAY' => $record['DAY'],
+				'MONTH' => $record['MONTH'],
+				'WDAY' => $record['WDAY'],
+				'SUSPEND' => $record['SUSPEND'],
+				'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE'])))
+			);
+		}
+
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $reply);
+	}
+
+	/**
+	 * Add cron entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function addExecute($request) 
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
+
+		$params = array(
+			'USER' => $_user,
+			'MIN' => $_s['MIN'],
+			'HOUR' => $_s['HOUR'],
+			'DAY' => $_s['DAY'],
+			'MONTH' => $_s['MONTH'],
+			'WDAY' => $_s['WDAY'],
+			'CMD' => $_s['CMD']
+		);
+
+		$result = Vesta::execute(Vesta::V_ADD_CRON_JOB, $params);
+
+		if ($_s['REPORTS'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_ADD_SYS_USER_REPORTS, 
+									 array('USER' => $_user));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['REPORTS'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+      
+    /**
+	 * Delete cron entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */  
+	function delExecute($request) 
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
+
+		$params = array(
+				'USER' => $_user,
+				'JOB' => $_s['JOB']
+		);
+		$result = Vesta::execute(Vesta::V_DEL_CRON_JOB, $params);
+
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
   
-  function changeExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-    $_old = $_s['old'];
-    $_new = $_s['new'];
-
-    $_user = 'vesta';
-    $_JOB = $_new['JOB'];
-    
-    $result = array();
-    $params = array(
-		    'USER' => $_user,
-		    'JOB' => $_JOB,
-		    'MIN' => $_new['MIN'],
-		    'HOUR' => $_new['HOUR'],
-		    'DAY' => $_new['DAY'],
-		    'MONTH' => $_new['MONTH'],
-		    'WDAY' => $_new['WDAY'],
-		    'CMD' => $_new['CMD']
-		    );
-
-    $result = Vesta::execute(Vesta::V_CHANGE_CRON_JOB, $params);
-
-
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function suspendExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    $_JOB = $_s['JOB'];
-    
-    $params = array(
-		    'USER' => $_user,
-		    'JOB' => $_JOB
-		    );
-    
-    $result = Vesta::execute(Vesta::V_SUSPEND_CRON_JOB, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function unsuspendExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    $_JOB = $_s['JOB'];
-    
-    $params = array(
-		    'USER' => $_user,
-		    'JOB' => $_JOB
-		    );
-    
-    $result = Vesta::execute(Vesta::V_UNSUSPEND_CRON_JOB, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function suspendAllExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    $_JOB = $_s['JOB'];
-    
-    $params = array(
-		    'USER' => $_user
-		    );
-    
-    $result = Vesta::execute(Vesta::V_SUSPEND_CRON_JOBS, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function unsuspendAllExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user
-		    );
-    
-    $result = Vesta::execute(Vesta::V_UNSUSPEND_CRON_JOBS, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
+	/**
+	 * Change cron entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	function changeExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_old = $_s['old'];
+		$_new = $_s['new'];
+
+		$_user = 'vesta';
+		$_JOB = $_new['JOB'];
+
+		$result = array();
+		$params = array(
+			'USER' => $_user,
+			'JOB' => $_JOB,
+			'MIN' => $_new['MIN'],
+			'HOUR' => $_new['HOUR'],
+			'DAY' => $_new['DAY'],
+			'MONTH' => $_new['MONTH'],
+			'WDAY' => $_new['WDAY'],
+			'CMD' => $_new['CMD']
+		);
+
+		$result = Vesta::execute(Vesta::V_CHANGE_CRON_JOB, $params);
+
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * Suspend cron entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	function suspendExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+		$_JOB = $_s['JOB'];
+
+		$params = array(
+			'USER' => $_user,
+			'JOB' => $_JOB
+		);
+
+		$result = Vesta::execute(Vesta::V_SUSPEND_CRON_JOB, $params);
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+
+	/**
+	 * Unsuspend cron entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	function unsuspendExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+		$_JOB = $_s['JOB'];
+
+		$params = array(
+			'USER' => $_user,
+			'JOB' => $_JOB
+		);
+
+		$result = Vesta::execute(Vesta::V_UNSUSPEND_CRON_JOB, $params);
+
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * Batch suspend cron entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	function suspendAllExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+		$_JOB = $_s['JOB'];
+
+		$params = array(
+			'USER' => $_user
+		);
+
+		$result = Vesta::execute(Vesta::V_SUSPEND_CRON_JOBS, $params);
+
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+	
+	/**
+	 * Batch suspend cron entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	function unsuspendAllExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+
+		$params = array(
+			'USER' => $_user
+		);
+
+		$result = Vesta::execute(Vesta::V_UNSUSPEND_CRON_JOBS, $params);
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
    
 }

+ 238 - 185
web/vesta/api/DB.class.php

@@ -3,194 +3,247 @@
 /**
  * DB 
  * 
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
  * @copyright vesta 2011
  */
-class DB extends AjaxHandler {
-    function getListExecute($request) 
+class DB extends AjaxHandler 
+{
+	
+	/**
+	 * List entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function getListExecute($request) 
     {
-    $_user = 'vesta';
-    $reply = array();
-    
-    $result = Vesta::execute(Vesta::V_LIST_DB_BASES, array($_user, Config::get('response_type')));
-    
-    //    echo '<pre>';
-    //    print_r($result);
-
-    foreach($result['data'] as $db => $record)
-      {
-	$reply[$db] = array(
-			    'DB' => $db,
-			    'USER' => $record['USER'],
-			    'HOST' => $record['HOST'],
-			    'TYPE' => $record['TYPE'],
-			    'U_DISK' => $record['U_DISK'],
-			    'SUSPEND' => $record['SUSPEND'],
-			    'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE'])))
-			    );
-      }
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $reply);
-  }
-
-  function addExecute($request) 
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-    $_user = 'vesta';
-
-    $params = array(
-		    'USER' => $_user,
-		    'DB' => $_s['DB'],
-		    'DB_USER' => $_s['DB_USER'],
-		    'DB_PASSWORD' => $_s['DB_PASSWORD'],
-		    'TYPE' => $_s['TYPE']
-		    );
-    if($_s['HOST'])
-      $params['HOST'] = $_s['HOST'];
-    
-    $result = Vesta::execute(Vesta::V_ADD_DB_BASE, $params);
-
-
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-  
-  
-    
-  function delExecute($request) 
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user,
-		    'DB' => $_user.'_'.$_s['DB']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_DEL_DB_BASE, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-  
-    
-  
-  function changePasswordExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $result = array();
-    $params = array(
-		    'USER' => $_user,
-		    'DB' => $_user.'_'.$_s['DB'],
-		    'PASSWORD' => $_s['DB_PASSWORD']
-		    );
-
-    $result = Vesta::execute(Vesta::V_CHANGE_DB_PASSWORD, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function suspendExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user,
-		    'DB' => $_user.'_'.$_s['DB']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_SUSPEND_DB_BASE, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function unsuspendExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user,
-		    'DB' => $_user.'_'.$_s['DB']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_UNSUSPEND_DB_BASE, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function suspendAllExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    $_JOB = $_s['JOB'];
-    
-    $params = array(
-		    'USER' => $_user
-		    );
-    
-    $result = Vesta::execute(Vesta::V_SUSPEND_DB_BASES, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function unsuspendAllExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user
-		    );
-    
-    $result = Vesta::execute(Vesta::V_UNSUSPEND_DB_BASES, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
+		$_user = 'vesta';
+		$reply = array();		
+		$result = Vesta::execute(Vesta::V_LIST_DB_BASES, array($_user, Config::get('response_type')));
+
+		foreach ($result['data'] as $db => $record)
+		{
+			$reply[$db] = array(
+				'DB' => $db,
+				'USER' => $record['USER'],
+				'HOST' => $record['HOST'],
+				'TYPE' => $record['TYPE'],
+				'U_DISK' => $record['U_DISK'],
+				'SUSPEND' => $record['SUSPEND'],
+				'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE'])))
+			);
+		}
+		
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+		
+		return $this->reply($result['status'], $reply);
+	}
+
+	/**
+	 * Add entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function addExecute($request) 
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
+
+		$params = array(
+			'USER' => $_user,
+			'DB' => $_s['DB'],
+			'DB_USER' => $_s['DB_USER'],
+			'DB_PASSWORD' => $_s['DB_PASSWORD'],
+			'TYPE' => $_s['TYPE']
+		);
+		if ($_s['HOST']) 
+		{
+			$params['HOST'] = $_s['HOST'];
+		}
+
+		$result = Vesta::execute(Vesta::V_ADD_DB_BASE, $params);
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+      
+	/**
+	 * Delete entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function delExecute($request) 
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
+
+		$params = array(
+			'USER' => $_user,
+			'DB' => $_user.'_'.$_s['DB']
+		);
+
+		$result = Vesta::execute(Vesta::V_DEL_DB_BASE, $params);
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * Change password
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function changePasswordExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+
+		$result = array();
+		$params = array(
+			'USER' => $_user,
+			'DB' => $_user.'_'.$_s['DB'],
+			'PASSWORD' => $_s['DB_PASSWORD']
+		);
+
+		$result = Vesta::execute(Vesta::V_CHANGE_DB_PASSWORD, $params);
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+	
+	/**
+	 * suspend user
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function suspendExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+
+		$params = array(
+			'USER' => $_user,
+			'DB' => $_user.'_'.$_s['DB']
+		);
+
+		$result = Vesta::execute(Vesta::V_SUSPEND_DB_BASE, $params);
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * unsuspend entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function unsuspendExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+
+		$params = array(
+			'USER' => $_user,
+			'DB' => $_user.'_'.$_s['DB']
+		);
+
+		$result = Vesta::execute(Vesta::V_UNSUSPEND_DB_BASE, $params);
+
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * Batch suspend entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function suspendAllExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+		$_JOB = $_s['JOB'];
+
+		$params = array(
+			'USER' => $_user
+		);
+
+		$result = Vesta::execute(Vesta::V_SUSPEND_DB_BASES, $params);
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * Batch unsuspend entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function unsuspendAllExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+
+		$_user = 'vesta';
+
+		$params = array(
+			'USER' => $_user
+		);
+
+		$result = Vesta::execute(Vesta::V_UNSUSPEND_DB_BASES, $params);
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
     
 }

+ 322 - 272
web/vesta/api/DNS.class.php

@@ -3,308 +3,358 @@
 /**
  * DNS 
  * 
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010 
+ * @copyright vesta 2010-2011
  */
-
-class DNS extends AjaxHandler {
-    function getListExecute($request) {
-        $_user = 'vesta';
-        $reply = array();
-       
-        $result = Vesta::execute(Vesta::V_LIST_DNS_DOMAINS, array($_user, Config::get('response_type')));
-        foreach($result['data'] as $dns_domain => $details){
-            $reply[] = array(
-			     'DNS_DOMAIN' => $dns_domain,
-			     'IP' => $details['IP'],
-			     'TPL' => $details['TPL'],
-			     'TTL' => $details['TTL'],
-			     'EXP' => $details['EXP'],
-			     'SOA' => $details['SOA'],
-			     'SUSPEND' => $details['SUSPEND'],
-			     //			     'OWNER' => $details['OWNER'],
-			     'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
-			     );
-        }
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
-     
-	return $this->reply($result['status'], $reply);
-    }
-
-    function getListRecordsExecute($request) {
-	$r = new Request();
-	$_s = $r->getSpell();
-	$_user = 'vesta';
-
-        $reply = array();
-       
-        $result = Vesta::execute(Vesta::V_LIST_DNS_DOMAIN_RECORDS, array($_user, $_s['DNS_DOMAIN'], Config::get('response_type')));
-        foreach($result['data'] as $record_id => $details){
-            $reply[$record_id] = array(
-			     'RECORD_ID' => $record_id,
-			     'RECORD' => $details['RECORD'],
-			     'RECORD_TYPE' => $details['TYPE'],
-			     'RECORD_VALUE' => $details['VALUE'],
-			     'SUSPEND' => $details['SUSPEND'],
-			     'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
-			     );
-        }
-
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
-     
-	return $this->reply($result['status'], $reply);
-    }
-
-    // v_add_dns_domain user domain ip [template] [exp] [soa] [ttl]
-    // http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.add&USER=vesta&DOMAIN=dev.vestacp.com&IP_ADDRESS=95.163.16.160&TEMPLATE=default&EXP=01-01-12&SOA=ns1.vestacp.com&TTL=3600
-    function addExecute($_spell = false) 
+class DNS extends AjaxHandler 
+{
+ 
+	/**
+	 * list entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function getListExecute($request) {
+		$_user = 'vesta';
+		$reply = array();
+
+		$result = Vesta::execute(Vesta::V_LIST_DNS_DOMAINS, array($_user, Config::get('response_type')));
+		foreach ($result['data'] as $dns_domain => $details)
+		{
+			$reply[] = array(
+				 'DNS_DOMAIN' => $dns_domain,
+				 'IP' => $details['IP'],
+				 'TPL' => $details['TPL'],
+				 'TTL' => $details['TTL'],
+				 'EXP' => $details['EXP'],
+				 'SOA' => $details['SOA'],
+				 'SUSPEND' => $details['SUSPEND'],				
+				 'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
+			);
+		}
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $reply);
+	}
+
+	/**
+	 * List records of entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function getListRecordsExecute($request) 
     {
-      $r = new Request();
-      if($_spell)
-	$_s = $_spell;
-      else
-	$_s = $r->getSpell();
-
-      $_user = 'vesta';
-	
-	$params = array(
-			'USER' => $_user,  /// OWNER ???
-			'DNS_DOMAIN' => $_s['DNS_DOMAIN'],
-			'IP' => $_s['IP']);
-	if($_s['TPL']) $params['TPL'] = $_s['TPL'];
-	if($_s['EXP']) $params['EXP'] = $_s['EXP'];
-	if($_s['SOA']) $params['SOA'] = $_s['SOA'];
-	if($_s['TTL']) $params['TTL'] = $_s['TTL'];
-	
-        $result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN, $params);
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
-
-        return $this->reply($result['status'], $result['data']);
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
+
+		$reply = array();
+	   
+		$result = Vesta::execute(Vesta::V_LIST_DNS_DOMAIN_RECORDS, array($_user, $_s['DNS_DOMAIN'], Config::get('response_type')));
+		foreach ($result['data'] as $record_id => $details)
+		{
+			$reply[$record_id] = array(
+				 'RECORD_ID' => $record_id,
+				 'RECORD' => $details['RECORD'],
+				 'RECORD_TYPE' => $details['TYPE'],
+				 'RECORD_VALUE' => $details['VALUE'],
+				 'SUSPEND' => $details['SUSPEND'],
+				 'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
+			);
+		}
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+		 
+		return $this->reply($result['status'], $reply);
     }
 
-    // v_add_dns_domain_record user domain record type value [id]
-    // http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.addRecord&USER=vesta&DOMAIN=dev.vestacp.com&RECORD=ftp&TYPE=a&VALUE=87.248.190.222
-    function addRecordExecute($request) {
-	$r = new Request();
-	$_s = $r->getSpell();
-	$_user = 'vesta';
+	/**
+	 * Add entry
+	 * 
+	 * v_add_dns_domain user domain ip [template] [exp] [soa] [ttl]
+	 * http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.add&USER=vesta&DOMAIN=dev.vestacp.com&IP_ADDRESS=95.163.16.160&TEMPLATE=default&EXP=01-01-12&SOA=ns1.vestacp.com&TTL=3600
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+    public function addExecute($_spell = false) 
+	{
+		$r = new Request();
+		if ($_spell) 
+		{
+			$_s = $_spell;
+		}
+		else
+		{
+			$_s = $r->getSpell();
+		}
+
+		$_user = 'vesta';
+		$params = array(
+			'USER' => $_user,  // TODO: examine if OWNER ???
+			'DNS_DOMAIN' => $_s['DNS_DOMAIN'],
+			'IP' => $_s['IP']
+		);
+		($_s['TPL']) ? $params['TPL'] = $_s['TPL'] : -1;
+		($_s['EXP']) ? $params['EXP'] = $_s['EXP'] : -1;
+		($_s['SOA']) ? $params['SOA'] = $_s['SOA'] : -1;
+		($_s['TTL']) ? $params['TTL'] = $_s['TTL'] : -1;
+
+		$result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN, $params);
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * Add record
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function addRecordExecute($request) 
+    {
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
 
-	$params = array(
-			'USER' => $_s['USER'],  /// OWNER ???
+		$params = array(
+			'USER' => $_s['USER'],  // TODO: find out if it's OWNER ???
 			'DOMAIN' => $_s['DOMAIN'],
 			'RECORD' => $_s['RECORD'],
 			'RECORD_TYPE' => $_s['TYPE'],
 			'RECORD_VALUE' => $_s['VALUE'],
 			'RECORD_ID' => $_s['RECORD_ID']
-			);
-	
-	// print_r($params);
-        
-        $result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN_RECORD, $params);
- 	
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
-
-        return $this->reply($result['status'], $result['data']);
+		);
+
+		$result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN_RECORD, $params);
+
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
     }
 
 
-    // v_del_dns_domain user domain
-    // http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.del&USER=vesta&DOMAIN=dev.vestacp.com
-    function delExecute($_spell = false) 
+    /**
+	 * Delete entry
+	 * 
+	 * @param mixed $_spell
+	 * @return
+	 */
+    public function delExecute($_spell = false) 
     {
-      $r = new Request();
-      if($_spell)
-	$_s = $_spell;
-      else
-	$_s = $r->getSpell();
-      
-      $_user = 'vesta';
-	
-	$params = array(
-			'USER' => $_user,  /// OWNER ???
+		$r = new Request();
+		if ($_spell)
+		{
+			$_s = $_spell;
+		}
+		else
+		{
+			$_s = $r->getSpell();
+		}
+
+		$_user = 'vesta';
+		$params = array(
+			'USER' => $_user,  // TODO: find out -> OWNER ???
 			'DOMAIN' => $_s['DNS_DOMAIN'],
-			);
-	
-        $result = Vesta::execute(Vesta::V_DEL_DNS_DOMAIN, $params);
+		);
 
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
+		$result = Vesta::execute(Vesta::V_DEL_DNS_DOMAIN, $params);
 
-        return $this->reply($result['status'], $result['data']);
+		if (!$result['status']) 
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
     }
 
 
 
-    // v_del_dns_domain_record user domain id 
-    // http://95.163.16.160:8083/dispatch.php?jedi_method=DNS.delRecord&USER=vesta&DOMAIN=dev.vestacp.com&RECORD_ID=9
-    function delRecordExecute($request) {
-	$r = new Request();
-	$_s = $r->getSpell();
-        $_user = 'vesta';
-	
-	$params = array(
-			'USER' => $_user,  /// OWNER ???
+    /**
+	 * Delete record
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    function delRecordExecute($request) 
+    {
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
+
+		$params = array(
+			'USER' => $_user,  // TODO: find out if -> OWNER ???
 			'DOMAIN' => $_s['DOMAIN'],
 			'RECORD_ID' => $_s['RECORD_ID']
-			);
-	
-        $result = Vesta::execute(Vesta::V_DEL_DNS_DOMAIN_RECORD, $params);
- 	
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
+		);
 
-        return $this->reply($result['status'], $result['data']);
-    }
+		$result = Vesta::execute(Vesta::V_DEL_DNS_DOMAIN_RECORD, $params);
 
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
 
-
-    // DNS.change&spell={"old":{"DNS_DOMAIN": "dev.vestacp.com","IP": "95.163.16.160","TPL": "default","TTL": "3377","EXP": "12-12-12","SOA": "ns2.vestacp.com"},"new":{"DNS_DOMAIN": "dev.vestacp.com","IP": "95.163.16.160","TPL": "default","TTL": "3600","EXP": "02-02-12","SOA": "ns1.vestacp.com"}}
-
-    function changeExecute($request)
-    {
-	$r = new Request();
-	$_s = $r->getSpell();
-	$_old = $_s['old'];
-	$_new = $_s['new'];
-
-	$_user = 'vesta';
-
-        $_DNS_DOMAIN = $_new['DNS_DOMAIN'];
-
-	 
-	if($_old['IP'] != $_new['IP'])
-	  {
-	    $result = array();
-	    $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['IP']));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['IP_ADDRESS'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-	
-	if($_old['TPL'] != $_new['TPL'])
-	  {
-	    $result = array();
-	    $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TPL']));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
- 		$this->errors['TPL'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-	
-	if($_old['TTL'] != $_new['TTL'])
-	  {
-	    $result = array();
-	    $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TTL']));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['TTL'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-
-	if($_old['EXP'] != $_new['EXP'])
-	  {
-	    $result = array();
-	    $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['EXP']));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['EXP'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
+		return $this->reply($result['status'], $result['data']);
+    }
 	
-	if($_old['SOA'] != $_new['SOA'])
-	  {
-	    $result = array();
-	    $result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $_user, 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_new['SOA']));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['SOA'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-
-	    if(!$this->status)
-	      {
-		Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['IP']));
-		Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TPL']));
-		Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TTL']));
-		Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['EXP']));
-		Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $_user, 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_old['SOA']));
-	      }
-
-        return $this->reply($this->status, '');
+	/**
+	 * Change entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function changeExecute($request)
+    {
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_old = $_s['old'];
+		$_new = $_s['new'];
+
+		$_user = 'vesta';
+
+		$_DNS_DOMAIN = $_new['DNS_DOMAIN'];
+
+
+		if ($_old['IP'] != $_new['IP'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['IP']));
+			if(!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['IP_ADDRESS'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['TPL'] != $_new['TPL'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TPL']));
+			if(!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['TPL'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['TTL'] != $_new['TTL'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['TTL']));
+			if(!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['TTL'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['EXP'] != $_new['EXP'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_new['EXP']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['EXP'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['SOA'] != $_new['SOA'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $_user, 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_new['SOA']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['SOA'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if (!$this->status)
+		{
+			Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_IP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['IP']));
+			Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TPL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TPL']));
+			Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_TTL, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['TTL']));
+			Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_EXP, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'IP' => $_old['EXP']));
+			Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_SOA, array('USER' => $_user, 'DNS_DOMAIN' => $_new['DNS_DOMAIN'], 'IP' => $_old['SOA']));
+		}
+
+		return $this->reply($this->status, '');
     }
 
-
-
-    function changeRecordsExecute($request)
+	/**
+	 * Change record
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function changeRecordsExecute($request)
     {
-	$r = new Request();
-	$_s = $r->getSpell();
-	$_old = $_s['old'];
-	$_new = $_s['new'];
-
-	//	echo '<pre>';
-	//	print_r($_new);
-	//	print_r($_old);
-
-	$_user = 'vesta';
-
-        $_DNS_DOMAIN = $_s['DNS_DOMAIN'];
-
-	foreach($_new as $record_id => $record_data)
-	  {
-	    // checking if record existed - update
-	    if(is_array($_old[$record_id]))
-	      {
-		echo '<br> updating'.$record_id;
-		
-		$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_RECORD, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'ID' => $record_id, 'RECORD' => $record_data['RECORD'], 'TYPE' => $record_data['RECORD_TYPE'], 'VALUE' => $record_data['RECORD_VALUE']));
-		if(!$result['status'])
-		  {
-		    $this->status = FALSE;
-		    $this->errors[$record_id] = array($result['error_code'] => $result['error_message']);
-		  }
-	      }
-	    else
-	      {
-		// record is new - add
-		echo '<br> adding'.$record_id;
-
-		$result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN_RECORD, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'RECORD' => $record_data['RECORD'], 'TYPE' => $record_data['RECORD_TYPE'], 'VALUE' => $record_data['RECORD_VALUE'], 'ID' => $record_id));
-		if(!$result['status'])
-		  {
-		    $this->status = FALSE;
-		    $this->errors[$record_id] = array($result['error_code'] => $result['error_message']);
-		  }
-	      }
-
-	    
-	    unset($_old[$record_id]);
-	  }
-
-	// in $_old have remained only record that do not present in new - so they have to be deleted
-	foreach($_old as $record_id => $record_data)
-	  {
-		echo '<br> deleting'.$record_id;
-		/*
-		$result = Vesta::execute(Vesta::V_DEL_DNS_DOMAIN_RECORD, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'ID' => $record_id,));
-		if(!$result['status'])
-		  {
-		    $this->status = FALSE;
-		    $this->errors[$record_id] = array($result['error_code'] => $result['error_message']);
-		  }
-		*/
-	  }
-
-        return $this->reply($this->status, '');
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_old = $_s['old'];
+		$_new = $_s['new'];
+		$_user = 'vesta';
+		$_DNS_DOMAIN = $_s['DNS_DOMAIN'];
+
+		foreach ($_new as $record_id => $record_data)
+		{
+			// checking if record existed - update
+			if(is_array($_old[$record_id]))
+			{
+				// TODO: Remove this. is it necessary??!
+				echo '<br> updating'.$record_id;
+
+				$result = Vesta::execute(Vesta::V_CHANGE_DNS_DOMAIN_RECORD, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'ID' => $record_id, 'RECORD' => $record_data['RECORD'], 'TYPE' => $record_data['RECORD_TYPE'], 'VALUE' => $record_data['RECORD_VALUE']));
+				if(!$result['status'])
+				{
+					$this->status = FALSE;
+					$this->errors[$record_id] = array($result['error_code'] => $result['error_message']);
+				}
+			}
+			else
+			{
+				// record is new - add
+				// TODO: Remove this. is it necessary??!
+				echo '<br> adding'.$record_id;
+
+				$result = Vesta::execute(Vesta::V_ADD_DNS_DOMAIN_RECORD, array('USER' => $_user, 'DNS_DOMAIN' => $_DNS_DOMAIN, 'RECORD' => $record_data['RECORD'], 'TYPE' => $record_data['RECORD_TYPE'], 'VALUE' => $record_data['RECORD_VALUE'], 'ID' => $record_id));
+				if(!$result['status'])
+				{
+					$this->status = FALSE;
+					$this->errors[$record_id] = array($result['error_code'] => $result['error_message']);
+				}
+			}
+
+			unset($_old[$record_id]);
+		}
+
+		// in $_old have remained only record that do not present in new - so they have to be deleted
+		foreach ($_old as $record_id => $record_data)
+		{
+			echo '<br> deleting'.$record_id;		
+		}
+
+		return $this->reply($this->status, '');
     }
+    
+    
 }

+ 166 - 121
web/vesta/api/IP.class.php

@@ -2,160 +2,205 @@
 /**
  * IP 
  * 
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010 
- * 
+ * @copyright vesta 2010-2011
  */
 class IP extends AjaxHandler
 {
-    function getListExecute($request) 
+	/**
+	 * List entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function getListExecute($request) 
     {
         $reply = array();
 	
         $result = Vesta::execute(Vesta::V_LIST_SYS_IPS, array(Config::get('response_type')));
-        foreach ($result['data'] as $ip => $details) {
-	  $reply[] = array_merge(
-				 array(
-				       'IP_ADDRESS' => $ip,
-				       'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
-				       ), $details);
+        foreach ($result['data'] as $ip => $details) 
+        {
+			$reply[] = array_merge(array(
+										'IP_ADDRESS' => $ip,
+										'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
+									), $details);
         }
 	
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
+        if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
 	
-	return $this->reply($result['status'], $reply);
+		return $this->reply($result['status'], $reply);
     }
 
-
-    function getListUserIpsExecute($request) 
+	/**
+	 * List user ips entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function getListUserIpsExecute($request) 
     {
         $reply = array();
 	
         $result = Vesta::execute(Vesta::V_LIST_SYS_IPS, array(Config::get('response_type')));
-        foreach ($result['data'] as $ip => $details) {
-	  $reply[] = array_merge(
-				 array(
-				       'IP_ADDRESS' => $ip,
-				       'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
-				       ), $details);
+        foreach ($result['data'] as $ip => $details) 
+        {
+			$reply[] = array_merge(array(
+										'IP_ADDRESS' => $ip,
+										'DATE' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
+								), $details);
         }
 	
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
+        if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
 	
-	return $this->reply($result['status'], $reply);
+		return $this->reply($result['status'], $reply);
     }
     
-
-    function addExecute($request) 
+	/**
+	 * Add entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function addExecute($request) 
     {
-      $r = new Request();
-      $_s = $r->getSpell();
-      $_user = 'vesta';
-      
-      $params = array(
-		      'IP_ADDRESS' => $_s['IP_ADDRESS'],
-		      'MASK' => $_s['MASK'],
-		      'INTERFACE' => $_s['INTERFACE'],
-		      'OWNER' => $_s['OWNER'],
-		      'IP_STATUS' => $_s['IP_STATUS'],
-		      'IP_NAME' => $_s['IP_NAME']
-		      );
-      
-      $result = Vesta::execute(Vesta::V_ADD_SYS_IP, $params);
-      
-
-      if(!$result['status'])
-	$this->errors[] = array($result['error_code'] => $result['error_message']);
-      
-      return $this->reply($result['status'], $result['data']);
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
+
+		$params = array(
+			'IP_ADDRESS' => $_s['IP_ADDRESS'],
+			'MASK' => $_s['MASK'],
+			'INTERFACE' => $_s['INTERFACE'],
+			'OWNER' => $_s['OWNER'],
+			'IP_STATUS' => $_s['IP_STATUS'],
+			'IP_NAME' => $_s['IP_NAME']
+		);
+
+		$result = Vesta::execute(Vesta::V_ADD_SYS_IP, $params);
+
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
     }
 
-    function delExecute($request) 
+	/**
+	 * Delete entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function delExecute($request) 
     {
-      $r = new Request();
-      $_s = $r->getSpell();
-      $_user = 'vesta';
-      
-      $params = array(
-		    'IP_ADDRESS' => $_s['IP_ADDRESS']
-		    );
-      
-      $result = Vesta::execute(Vesta::V_DEL_SYS_IP, $params);
-      
-      if(!$result['status'])
-	$this->errors[] = array($result['error_code'] => $result['error_message']);
-      
-      return $this->reply($result['status'], $result['data']);
-    }
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_user = 'vesta';
 
+		$params = array(
+			'IP_ADDRESS' => $_s['IP_ADDRESS']
+		);
 
-  
-    function changeExecute($request)
-    {
-      $r = new Request();
-      $_s = $r->getSpell();
-      $_old = $_s['old'];
-      $_new = $_s['new'];
-      
-      $_user = 'vesta';
+		$result = Vesta::execute(Vesta::V_DEL_SYS_IP, $params);
 
-    
-      if($_old['OWNER'] != $_new['OWNER'])
-	{
-	  $result = array();
-	  $result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_OWNER, array('OWNER' => $_new['OWNER'], 'IP' => $_new['IP_ADDRESS']));
-	  if(!$result['status'])
-	    {
-	      $this->status = FALSE;
-	      $this->errors['OWNER'] = array($result['error_code'] => $result['error_message']);
-	    }
-	}
-
-      if($_old['NAME'] != $_new['NAME'])
-	{
-	  $result = array();
-	  $result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_NAME, array('IP' => $_new['IP_ADDRESS'], 'NAME' => $_new['NAME']));
-	  if(!$result['status'])
-	    {
-	      $this->status = FALSE;
-	      $this->errors['NAME'] = array($result['error_code'] => $result['error_message']);
-	    }
-	}
-
-      if($_old['IP_STATUS'] != $_new['IP_STATUS'])
-	{
-	  $result = array();
-	  $result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_STATUS, array('IP' => $_new['IP_ADDRESS'], 'IP_STATUS' => $_new['IP_STATUS']));
-	  if(!$result['status'])
-	    {
-	      $this->status = FALSE;
-	      $this->errors['IP_STATUS'] = array($result['error_code'] => $result['error_message']);
-	    }
-	}
-
-
-      if(!$result['status'])
-	$this->errors[] = array($result['error_code'] => $result['error_message']);
-      
-      return $this->reply($result['status'], $result['data']);
-    }
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
 
+		return $this->reply($result['status'], $result['data']);
+    }
 
-    function getSysInterfacesExecute($request) 
+	/**
+	 * Change entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function changeExecute($request)
     {
-        $reply = array();
-	
-        $result = Vesta::execute(Vesta::V_LIST_SYS_INTERFACES, array(Config::get('response_type')));
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_old = $_s['old'];
+		$_new = $_s['new'];
 
-        foreach ($result['data'] as $iface) 
-	  $reply[$iface] = $iface;
-	
-        if(!$result['status'])
-	  $this->errors[] = array($result['error_code'] => $result['error_message']);
+		$_user = 'vesta';
+
+		if ($_old['OWNER'] != $_new['OWNER'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_OWNER, array('OWNER' => $_new['OWNER'], 'IP' => $_new['IP_ADDRESS']));
+			if(!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['OWNER'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['NAME'] != $_new['NAME'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_NAME, array('IP' => $_new['IP_ADDRESS'], 'NAME' => $_new['NAME']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['NAME'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['IP_STATUS'] != $_new['IP_STATUS'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_SYS_IP_STATUS, array('IP' => $_new['IP_ADDRESS'], 'IP_STATUS' => $_new['IP_STATUS']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['IP_STATUS'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+
+		if (!$result['status'])
+		{	
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+    }
 	
-	return $this->reply($result['status'], $reply);
+	/**
+	 * Get sys interfaces
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function getSysInterfacesExecute($request) 
+    {
+		$reply = array();
+
+		$result = Vesta::execute(Vesta::V_LIST_SYS_INTERFACES, array(Config::get('response_type')));
+
+		foreach ($result['data'] as $iface) 
+		{
+			$reply[$iface] = $iface;
+		}
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+		
+		return $this->reply($result['status'], $reply);
     }
     
-}
+}

+ 104 - 83
web/vesta/api/MAIN.class.php

@@ -9,102 +9,123 @@
  *  - methods, used for ajax executions must be postfixed with execute keyword
  *      Eg.: getDnsInformationExecute()
  * 
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010
+ * @copyright vesta 2010-2011
  */
-class MAIN extends AjaxHandler {
-
-    function versionExecute($request) {
-        $result = array('version' => '1.0',
-            'author' => 'http://vestacp.com/',
-            'docs' => 'http://vestacp.com/docs');
+class MAIN extends AjaxHandler 
+{
+	
+	/**
+	 * Get version
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function versionExecute($request) 
+    {
+        $result = array(
+						'version' => '1.0',
+						'author' => 'http://vestacp.com/',
+						'docs' => 'http://vestacp.com/docs'
+					);
 
         return $this->reply(true, $result);
     }
 
-    function getInitialExecute($request) 
+	/**
+	 * Get initial params
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function getInitialExecute($request) 
     {
-	require_once V_ROOT_DIR . 'api/IP.class.php';
-        $ip_obj = new IP();
-        $user_ips = json_decode($ip_obj->getListUserIpsExecute(), TRUE);
-	foreach($user_ips['data'] as $ip)
-	    $ips[$ip['IP_ADDRESS']] = $ip['IP_ADDRESS'];
-
-	require_once V_ROOT_DIR . 'api/USER.class.php';
-        $user_obj = new USER();
-        $users = json_decode($user_obj->getListExecute(), TRUE);
-	$user_names = array_keys($users['data']['data']);
+		require_once V_ROOT_DIR . 'api/IP.class.php';
+		require_once V_ROOT_DIR . 'api/USER.class.php';
+		
+		$ip_obj = new IP();
+		$user_obj = new USER();
+				
+		$user_ips = json_decode($ip_obj->getListUserIpsExecute(), TRUE);
+		foreach ($user_ips['data'] as $ip) 
+		{
+			$ips[$ip['IP_ADDRESS']] = $ip['IP_ADDRESS'];
+		}
 
-	$db_types = array('mysql' => 'mysql', 'postgress' => 'postgress');
+		$users = json_decode($user_obj->getListExecute(), TRUE);
+		$user_names = array_keys($users['data']['data']);
+		$db_types = array(
+						'mysql' => 'mysql', 
+						'postgress' => 'postgress'
+					);
 
-	$interfaces_arr = json_decode($ip_obj->getSysInterfacesExecute(), TRUE);
-	$interfaces = $interfaces_arr['data'];
+		$interfaces_arr = json_decode($ip_obj->getSysInterfacesExecute(), TRUE);
+		$interfaces = $interfaces_arr['data'];
 
 
         $reply = array(
             'WEB_DOMAIN' => array(
-                'TPL' => array('default' => 'default'),
-	        'ALIAS' => array(),
-	        'STAT' => array(
-                    'webalizer' => 'webalizer',
-                    'awstats' => 'awstats'),
-                'IP' => $ips
-		),
-
-	    'CRON' => array(),
-
-  	    'IP' => array(
-		'SYS_USERS' => $user_names,
-		'STATUSES' => array(
-		    'shared' => 'shared',
-		    'exclusive' => 'exclusive'
-		    ),
-		'INTERFACES' => $interfaces,
-		'MASK' => array(
-		    '255.255.255.0' => '255.255.255.0',
-		    '255.255.255.128' => '255.255.255.128',
-		    '255.255.255.192' => '255.255.255.192',
-		    '255.255.255.224' => '255.255.255.224', 
-		    '255.255.255.240' => '255.255.255.240', 
-		    '255.255.255.248' => '255.255.255.248',
-		    '255.255.255.252' => '255.255.255.252',
-		    '255.255.255.255' => '255.255.255.255'
-		    ),
-		'OWNER' => array()
-		),
-
-	    'DNS' => array(
-	        'IP' => $ips,
-		'TPL' => array('default' => 'default'),
-		'EXP' => array(),
-		'SOA' => array(),
-		'TTL' => array(),
-		'record' => array(
-                    'RECORD' => array(),
-		    'RECORD_TYPE' => array('a' => 'a', 'reverse' => 'reverse'),
-		    'RECORD_VALUE' => array()
-		    )
-		),
-
-	    'DB' => array(
-	        'TYPE' => $db_types
-		),
-
-	    'USERS' => array(
-                'ROLE' => array('user' => 'user'),
-		'OWNER' => $user_names,
-		'PACKAGE' => array('default' => 'default'),
-		'NS1' => array('' => ''),
-		'NS2' => array('' => ''),
-		'SHELL' => array(
-	            '/bin/sh' => '/bin/sh',
-		    '/bin/bash' => '/bin/bash',
-		    '/sbin/nologin' => '/sbin/nologin',
-		    '/bin/tcsh' => '/bin/tcsh',
-		    '/bin/csh' => '/bin/csh')
-		)
-	    );
-
+								'TPL' => array('default' => 'default'),
+								'ALIAS' => array(),
+								'STAT' => array(
+										'webalizer' => 'webalizer',
+										'awstats' => 'awstats'),
+								'IP' => $ips
+							),
+			'CRON' 		=> array(),
+			'IP' 		=> array(
+							'SYS_USERS' => $user_names,
+							'STATUSES' => array(
+											'shared' => 'shared',
+											'exclusive' => 'exclusive'
+										),
+							'INTERFACES' => $interfaces,
+							'MASK' => array(
+										'255.255.255.0' => '255.255.255.0',
+										'255.255.255.128' => '255.255.255.128',
+										'255.255.255.192' => '255.255.255.192',
+										'255.255.255.224' => '255.255.255.224', 
+										'255.255.255.240' => '255.255.255.240', 
+										'255.255.255.248' => '255.255.255.248',
+										'255.255.255.252' => '255.255.255.252',
+										'255.255.255.255' => '255.255.255.255'
+									),
+							'OWNER' => array()
+						),
+			'DNS' 		=> array(
+							'IP' => $ips,
+							'TPL' => array(
+										'default' => 'default'
+									),
+							'EXP' => array(),
+							'SOA' => array(),
+							'TTL' => array(),
+							'record' => array(
+										'RECORD' => array(),
+										'RECORD_TYPE' => array('a' => 'a', 'reverse' => 'reverse'),
+										'RECORD_VALUE' => array()
+									)
+						),
+			'DB' 		=> array(
+							'TYPE' => $db_types
+							),
+			'USERS' 	=> array(
+								'ROLE' => array('user' => 'user'),
+								'OWNER' => $user_names,
+								'PACKAGE' => array('default' => 'default'),
+								'NS1' => array('' => ''),
+								'NS2' => array('' => ''),
+								'SHELL' => array(
+											'/bin/sh' => '/bin/sh',
+											'/bin/bash' => '/bin/bash',
+											'/sbin/nologin' => '/sbin/nologin',
+											'/bin/tcsh' => '/bin/tcsh',
+											'/bin/csh' => '/bin/csh')
+										)
+		);
+	
         return $this->reply(true, $reply);
     }
 }

+ 89 - 76
web/vesta/api/PARAMS.class.php

@@ -1,94 +1,107 @@
 <?php
+
 /**
  * PARAMS
  * 
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2011 
+ * @copyright vesta 2010-2011 
  */
-class PARAMS extends AjaxHandler {
-    function getInitialExecute($request) 
+class PARAMS extends AjaxHandler 
+{
+    /**
+	 * Get initial params
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+    public function getInitialExecute($request) 
     {
-	require_once V_ROOT_DIR . 'api/IP.class.php';
+		require_once V_ROOT_DIR . 'api/IP.class.php';
+		require_once V_ROOT_DIR . 'api/USER.class.php';
+        
         $ip_obj = new IP();
-        $user_ips = json_decode($ip_obj->getListUserIpsExecute(), TRUE);
-	foreach($user_ips['data'] as $ip)
-	    $ips[$ip['IP_ADDRESS']] = $ip['IP_ADDRESS'];
-
-	require_once V_ROOT_DIR . 'api/USER.class.php';
         $user_obj = new USER();
+         
+        $user_ips = json_decode($ip_obj->getListUserIpsExecute(), TRUE);
+		foreach ($user_ips['data'] as $ip)
+		{
+			$ips[$ip['IP_ADDRESS']] = $ip['IP_ADDRESS'];
+		}	
+       
         $users = json_decode($user_obj->getListExecute(), TRUE);
-	$user_names = array_keys($users['data']['data']);
-
-	$db_types = array('mysql' => 'mysql', 'postgress' => 'postgress');
+		$user_names = array_keys($users['data']['data']);
 
-	$interfaces_arr = json_decode($ip_obj->getSysInterfacesExecute(), TRUE);
-	$interfaces = $interfaces_arr['data'];
+		$db_types = array(
+						  'mysql' => 'mysql', 
+						  'postgress' => 'postgress'
+						 );
 
+		$interfaces_arr = json_decode($ip_obj->getSysInterfacesExecute(), TRUE);
+		$interfaces = $interfaces_arr['data'];
 
         $reply = array(
             'WEB_DOMAIN' => array(
-                'TPL' => array('default' => 'default'),
-	        'ALIAS' => array(),
-	        'STAT' => array(
-                    'webalizer' => 'webalizer',
-                    'awstats' => 'awstats'),
-                'IP' => $ips
-		),
-
-	    'CRON' => array(),
-
-  	    'IP' => array(
-		'SYS_USERS' => $user_names,
-		'STATUSES' => array(
-		    'shared' => 'shared',
-		    'exclusive' => 'exclusive'
-		    ),
-		'INTERFACES' => $interfaces,
-		'MASK' => array(
-		    '255.255.255.0' => '255.255.255.0',
-		    '255.255.255.128' => '255.255.255.128',
-		    '255.255.255.192' => '255.255.255.192',
-		    '255.255.255.224' => '255.255.255.224', 
-		    '255.255.255.240' => '255.255.255.240', 
-		    '255.255.255.248' => '255.255.255.248',
-		    '255.255.255.252' => '255.255.255.252',
-		    '255.255.255.255' => '255.255.255.255'
-		    ),
-		'OWNER' => array()
-		),
-
-	    'DNS' => array(
-	        'IP' => $ips,
-		'TPL' => array('default' => 'default'),
-		'EXP' => array(),
-		'SOA' => array(),
-		'TTL' => array(),
-		'record' => array(
-                    'RECORD' => array(),
-		    'RECORD_TYPE' => array('a' => 'a', 'reverce' => 'reverce'),
-		    'RECORD_VALUE' => array()
-		    )
-		),
-
-	    'DB' => array(
-	        'TYPE' => $db_types
-		),
-
-	    'USERS' => array(
-                'ROLE' => array('user' => 'user'),
-		'OWNER' => $user_names,
-		'PACKAGE' => array('default' => 'default'),
-		'NS1' => array('' => ''),
-		'NS2' => array('' => ''),
-		'SHELL' => array(
-	            '/bin/sh' => '/bin/sh',
-		    '/bin/bash' => '/bin/bash',
-		    '/sbin/nologin' => '/sbin/nologin',
-		    '/bin/tcsh' => '/bin/tcsh',
-		    '/bin/csh' => '/bin/csh')
-		)
-	    );
+								'TPL' => array('default' => 'default'),
+								'ALIAS' => array(),
+								'STAT' => array(
+										'webalizer' => 'webalizer',
+										'awstats' => 'awstats'),
+								'IP' => $ips
+							),
+			'CRON' 		=> array(),
+			'IP' 		=> array(
+							'SYS_USERS' => $user_names,
+							'STATUSES' => array(
+											'shared' => 'shared',
+											'exclusive' => 'exclusive'
+										),
+							'INTERFACES' => $interfaces,
+							'MASK' => array(
+										'255.255.255.0' => '255.255.255.0',
+										'255.255.255.128' => '255.255.255.128',
+										'255.255.255.192' => '255.255.255.192',
+										'255.255.255.224' => '255.255.255.224', 
+										'255.255.255.240' => '255.255.255.240', 
+										'255.255.255.248' => '255.255.255.248',
+										'255.255.255.252' => '255.255.255.252',
+										'255.255.255.255' => '255.255.255.255'
+									),
+							'OWNER' => array()
+						),
+			'DNS' 		=> array(
+							'IP' => $ips,
+							'TPL' => array(
+										'default' => 'default'
+									),
+							'EXP' => array(),
+							'SOA' => array(),
+							'TTL' => array(),
+							'record' => array(
+										'RECORD' => array(),
+										'RECORD_TYPE' => array('a' => 'a', 'reverse' => 'reverse'),
+										'RECORD_VALUE' => array()
+									)
+						),
+			'DB' 		=> array(
+							'TYPE' => $db_types
+							),
+			'USERS' 	=> array(
+								'ROLE' => array('user' => 'user'),
+								'OWNER' => $user_names,
+								'PACKAGE' => array('default' => 'default'),
+								'NS1' => array('' => ''),
+								'NS2' => array('' => ''),
+								'SHELL' => array(
+											'/bin/sh' => '/bin/sh',
+											'/bin/bash' => '/bin/bash',
+											'/sbin/nologin' => '/sbin/nologin',
+											'/bin/tcsh' => '/bin/tcsh',
+											'/bin/csh' => '/bin/csh')
+										)
+		);
 
         return $this->reply(true, $reply);
     }
-}
+}

+ 192 - 221
web/vesta/api/USER.class.php

@@ -2,17 +2,27 @@
 /**
  * USERS 
  * 
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010 
- *
+ * @copyright vesta 2010-2011
  */
-class USER extends AjaxHandler {
-    function getListExecute($request) {
-        $reply = array();
-       
+class USER extends AjaxHandler 
+{
+	
+	/**
+	 * Get list
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+	public function getListExecute($request) 
+    {
+        $reply = array();       
         $result = Vesta::execute(Vesta::V_LIST_SYS_USERS, array(Config::get('response_type')));
 
-        foreach($result as $ip => $details){
+        foreach ($result as $ip => $details)
+        {
             $reply[] = array(
                 'interface' => $details['INTERFACE'],
                 'sys_users' => $details['U_SYS_USERS'],
@@ -23,222 +33,183 @@ class USER extends AjaxHandler {
                 'name' => $details['NAME'],
                 'owner' => $details['OWNER'],
                 'created_at' => date(Config::get('ui_date_format', strtotime($details['DATE'])))
-
-
-		/*
-
-                "PACKAGE": "default",
-                "WEB_DOMAINS": "10",
-                "WEB_SSL": "10",
-                "WEB_ALIASES": "10",
-                "DATABASES": "10",
-                "MAIL_DOMAINS": "10",
-                "MAIL_BOXES": "30",
-                "MAIL_FORWARDERS": "30",
-                "DNS_DOMAINS": "10",
-                "DISK_QUOTA": "10000",
-                "BANDWIDTH": "10000",
-                "NS1": "ns1.localhost",
-                "NS2": "ns2.localhost",
-                "SHELL": "bash",
-                "BACKUPS": "3",
-                "TEMPLATES": "default, phpcgi, unlim",
-                "MAX_CHILDS": "300",
-                "SUSPENDED": "no",
-                "OWNER": "vesta",
-                "ROLE": "admin",
-                "IP_OWNED": "1",
-                "U_CHILDS": "0",
-                "U_DISK": "1",
-                "U_BANDWIDTH": "0",
-                "U_WEB_DOMAINS": "1",
-                "U_WEB_SSL": "0",
-                "U_DNS_DOMAINS": "3",
-                "U_DATABASES": "0",
-                "U_MAIL_DOMAINS": "0",
-                "CONTACT": "vesta@localhost",
-                "DATE": "01-04-11"
-
-		*/
-                );
+            );
         }
         
         return $this->reply(true, $result);
     }
 
-
-
-  function addExecute($_spell = false) 
-  {
-    $r = new Request();
-    if($_spell)
-      $_s = $_spell;
-    else
-      $_s = $r->getSpell();
-
-
-    $_user = 'vesta';
-    
-    // $_s['ROLE'] = 'user';
-    // reseller
-    // admin
-
-    // package: default 
-
-    $params = array(
-		    'USER' => $_s['USER'],
-		    'PASSWORD' => $_s['PASSWORD'],
-		    'EMAIL' => $_s['EMAIL'],
-		    'ROLE' => $_s['ROLE'],
-		    'OWNER' => $_user,
- 		    'PACKAGE' => $_s['PACKAGE'],
- 		    'NS1' => $_s['NS1'],
- 		    'NS2' => $_s['NS2']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_ADD_SYS_USER, $params);
-      
-    if(!$result['status'])
-        $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-  
-  
-    
-  function delExecute($_spell = false) 
-  {
-    $r = new Request();
-    if($_spell)
-      $_s = $_spell;
-    else
-      $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_s['USER']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_DEL_SYS_USER, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function changeExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-    $_old = $_s['old'];
-    $_new = $_s['new'];
-
-    $_USER = $_new['USER'];
-    
-    if($_old['USER'] != $_new['USER'])
-      {
-	
-	$result = array();
-	// creating new user
-	$result = $this->addExecute($_new);
-	
-	// deleting old
-	if($result['status'])
-	  {
-	    $result = array();
-	    
-	    $result = $this->delExecute($_old);
-	    return $this->reply($this->status, '');
-	  }
-      }
-
-    if($_old['PASSWORD'] != $_new['PASSWORD'])
-      {
-	$result = array();
-	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_new['PASSWORD']));
-	if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['PASSWORD'] = array($result['error_code'] => $result['error_message']);
-	      }
-      }
-
-    if($_old['PACKAGE'] != $_new['PACKAGE'])
-      {
-	$result = array();
-	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_PACKAGE, array('USER' => $_USER, 'PACKAGE' => $_new['PACKAGE']));
-	if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['PACKAGE'] = array($result['error_code'] => $result['error_message']);
-	      }
-      }
-  
-    /*
-    if($_old['ROLE'] != $_new['ROLE'])
-      {
-      	echo '<br> role';
-
-	$result = array();
-	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_ROLE, array('USER' => $_USER, 'ROLE' => $_new['ROLE']));
-	if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['ROLE'] = array($result['error_code'] => $result['error_message']);
-	      }
-      }
-    */
-
-    if($_old['EMAIL'] != $_new['EMAIL'])
-      {
-	$result = array();
-	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_CONTACT, array('USER' => $_USER, 'EMAIL' => $_new['EMAIL']));
-	if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['EMAIL'] = array($result['error_code'] => $result['error_message']);
-	      }
-    }
-
-    if($_old['NS1'] != $_new['NS1']  || $_old['NS2'] != $_new['NS2'])
-      {
-	$result = array();
-	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS, array('USER' => $_USER, 'NS1' => $_new['NS1'], 'NS2' => $_new['NS2']));
-	if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['NS'] = array($result['error_code'] => $result['error_message']);
-	      }
-      }
-
-    if($_old['SHELL'] != $_new['SHELL'])
-      {
-	$result = array();
-	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, array('USER' => $_USER, 'SHELL' => $_new['SHELL']));
-	if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['SHELL'] = array($result['error_code'] => $result['error_message']);
-	      }
-      }
-
-    if(!$this->status)
-      {
-	Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_old['PASSWORD']));
-	Vesta::execute(Vesta::V_CHANGE_SYS_USER_PACKAGE, array('USER' => $_USER, 'PACKAGE' => $_old['PACKAGE']));
-	Vesta::execute(Vesta::V_CHANGE_SYS_USER_CONTACT, array('USER' => $_USER, 'EMAIL' => $_old['EMAIL']));
-	// change role //	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_PACKAGE, array('USER' => $_USER, 'PACKAGE' => $_new['PACKAGE']));
-	Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS, array('USER' => $_USER, 'NS1' => $_old['NS1'], 'NS2' => $_old['NS2']));
-	Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, array('USER' => $_USER, 'SHELL' => $_old['SHELL']));
-      }
-
-        return $this->reply($this->status, '');
-    }
-
-
-
-}
+	/**
+	 * Add action
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function addExecute($_spell = false) 
+	{
+		$r = new Request();
+		if ($_spell)
+		{
+			$_s = $_spell;
+		}
+		else
+		{
+			$_s = $r->getSpell();
+		}
+		$_user = 'vesta';
+		$params = array(
+			'USER' => $_s['USER'],
+			'PASSWORD' => $_s['PASSWORD'],
+			'EMAIL' => $_s['EMAIL'],
+			'ROLE' => $_s['ROLE'],
+			'OWNER' => $_user,
+			'PACKAGE' => $_s['PACKAGE'],
+			'NS1' => $_s['NS1'],
+			'NS2' => $_s['NS2']
+		);
+
+		$result = Vesta::execute(Vesta::V_ADD_SYS_USER, $params);
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * Delete action
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function delExecute($_spell = false) 
+	{
+		$r = new Request();
+		if ($_spell)
+		{
+			$_s = $_spell;
+		}
+		else
+		{
+			$_s = $r->getSpell();
+		}
+		$_user = 'vesta';
+		$params = array(
+					'USER' => $_s['USER']
+				);
+		$result = Vesta::execute(Vesta::V_DEL_SYS_USER, $params);
+
+		if (!$result['status'])
+		{
+		  $this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $result['data']);
+	}
+
+	/**
+	 * Change action
+	 * 
+	 * @param Request $request
+	 * @return
+	 */
+	public function changeExecute($request)
+	{
+		$r = new Request();
+		$_s = $r->getSpell();
+		$_old = $_s['old'];
+		$_new = $_s['new'];
+
+		$_USER = $_new['USER'];
+ 
+		if($_old['USER'] != $_new['USER'])
+		{
+			$result = array();
+			// creating new user
+			$result = $this->addExecute($_new);
+
+			// deleting old
+			if ($result['status'])
+			{
+				$result = array();
+			
+				$result = $this->delExecute($_old);
+				return $this->reply($this->status, '');
+			}
+		}
+
+		if ($_old['PASSWORD'] != $_new['PASSWORD'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, 
+							array('USER' => $_USER, 'PASSWORD' => $_new['PASSWORD']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['PASSWORD'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['PACKAGE'] != $_new['PACKAGE'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_PACKAGE, 
+									array('USER' => $_USER, 'PACKAGE' => $_new['PACKAGE']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['PACKAGE'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['EMAIL'] != $_new['EMAIL'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_CONTACT, 
+									array('USER' => $_USER, 'EMAIL' => $_new['EMAIL']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['EMAIL'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['NS1'] != $_new['NS1']  || $_old['NS2'] != $_new['NS2'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS, 
+									array('USER' => $_USER, 'NS1' => $_new['NS1'], 'NS2' => $_new['NS2']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['NS'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if ($_old['SHELL'] != $_new['SHELL'])
+		{
+			$result = array();
+			$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL, 
+									array('USER' => $_USER, 'SHELL' => $_new['SHELL']));
+			if (!$result['status'])
+			{
+				$this->status = FALSE;
+				$this->errors['SHELL'] = array($result['error_code'] => $result['error_message']);
+			}
+		}
+
+		if (!$this->status)
+		{
+			Vesta::execute(Vesta::V_CHANGE_SYS_USER_PASSWORD, array('USER' => $_USER, 'PASSWORD' => $_old['PASSWORD']));
+			Vesta::execute(Vesta::V_CHANGE_SYS_USER_PACKAGE,  array('USER' => $_USER, 'PACKAGE' => $_old['PACKAGE']));
+			Vesta::execute(Vesta::V_CHANGE_SYS_USER_CONTACT,  array('USER' => $_USER, 'EMAIL' => $_old['EMAIL']));
+			// change role //	$result = Vesta::execute(Vesta::V_CHANGE_SYS_USER_PACKAGE, array('USER' => $_USER, 'PACKAGE' => $_new['PACKAGE']));
+			Vesta::execute(Vesta::V_CHANGE_SYS_USER_NS,       array('USER' => $_USER, 'NS1' => $_old['NS1'], 'NS2' => $_old['NS2']));
+			Vesta::execute(Vesta::V_CHANGE_SYS_USER_SHELL,    array('USER' => $_USER, 'SHELL' => $_old['SHELL']));
+		}
+
+		return $this->reply($this->status, '');
+	}
+
+}

+ 653 - 492
web/vesta/api/WEB_DOMAIN.class.php

@@ -1,510 +1,671 @@
 <?php
+
 /**
  * DOMAIN
  * 
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2011 
+ * @copyright vesta 2010-2011 
  */
-class WEB_DOMAIN extends AjaxHandler {
-    function getListExecute($request) 
+class WEB_DOMAIN extends AjaxHandler 
+{
+	
+	/**
+	 * Get list
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+    public function getListExecute($request) 
     {
-      $_user = 'vesta';
-      $reply = array();
-    
-      $result = Vesta::execute(Vesta::V_LIST_WEB_DOMAINS, array($_user, Config::get('response_type')));
-      
-      //    echo '<pre>';
-      //    print_r($result);
-      
-      foreach($result['data'] as $web_domain => $data)
-	{
-	  $reply[$web_domain] = array(
-				      'IP' => $record['IP'],
-				      'U_DISK' => $record['U_DISK'],
-				      'U_BANDWIDTH' => $record['U_BANDWIDTH'],
-				      'TPL' => $record['TPL'],
-				      'ALIAS' => $record['ALIAS'],
-				      'PHP' => $record['PHP'],
-				      'CGI' => $record['CGI'],
-				      'ELOG' => $record['ELOG'],
-				      'STATS' => $record['STATS'],
-				      'STATS_AUTH' => $record['STATS_AUTH'],
-				      'SSL' => $record['SSL'],
-				      'SSL_HOME' => $record['SSL_HOME'],
-				      'SSL_CERT' => $record['SSL_CERT'],
-				      'NGINX' => $record['NGINX'],
-				      'NGINX_EXT' => $record['NGINX_EXT'],
-				      'SUSPEND' => $record['SUSPEND'],
-				      'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE'])))
-				      );
-	}
-      
-      if(!$result['status'])
-	$this->errors[] = array($result['error_code'] => $result['error_message']);
-      
-      return $this->reply($result['status'], $reply);
+		$_user = 'vesta';
+		$reply = array();
+
+		$result = Vesta::execute(Vesta::V_LIST_WEB_DOMAINS, array($_user, Config::get('response_type')));
+		foreach ($result['data'] as $web_domain => $data)
+		{
+			$reply[$web_domain] = array(
+					  'IP' => $record['IP'],
+					  'U_DISK' => $record['U_DISK'],
+					  'U_BANDWIDTH' => $record['U_BANDWIDTH'],
+					  'TPL' => $record['TPL'],
+					  'ALIAS' => $record['ALIAS'],
+					  'PHP' => $record['PHP'],
+					  'CGI' => $record['CGI'],
+					  'ELOG' => $record['ELOG'],
+					  'STATS' => $record['STATS'],
+					  'STATS_AUTH' => $record['STATS_AUTH'],
+					  'SSL' => $record['SSL'],
+					  'SSL_HOME' => $record['SSL_HOME'],
+					  'SSL_CERT' => $record['SSL_CERT'],
+					  'NGINX' => $record['NGINX'],
+					  'NGINX_EXT' => $record['NGINX_EXT'],
+					  'SUSPEND' => $record['SUSPEND'],
+					  'DATE' => date(Config::get('ui_date_format', strtotime($record['DATE'])))
+			);
+		}
+
+		if (!$result['status'])
+		{
+			$this->errors[] = array($result['error_code'] => $result['error_message']);
+		}
+
+		return $this->reply($result['status'], $reply);
     }
+        
+    /**
+	 * Add entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+    public function addExecute($request)
+    {
+        $r     = new Request();
+        $_s    = $r->getSpell();
+        $_user = 'vesta';
+        
+        $params = array(
+            'USER' => $_user,
+            'DOMAIN' => $_s['DOMAIN'],
+            'IP' => $_s['IP']
+        );
+        
+        $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN, $params);
+        
+        if (!$result['status'])
+        {
+            $this->errors[] = array(
+                $result['error_code'] => $result['error_message']
+            );
+        }
+            
+        if ($_s['TPL']) 
+        {
+            $params = array(
+                'USER' => $_user,
+                'DOMAIN' => $_s['DOMAIN'],
+                'TPL' => $_s['TPL']
+            );
+            $result = 0;
+            $result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_TPL, $params);
+            
+            if (!$result['status'])
+			{
+                $this->errors['CHANGE_TPL'] = array(
+                    $result['error_code'] => $result['error_message']
+                );
+            }
+        }
+
+        if ($_s['ALIAS']) 
+        {
+            $alias_arr = explode(',', $_s['ALIAS']);
+            
+            foreach ($alias_arr as $alias) 
+            {
+                $params = array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_s['DOMAIN'],
+                    'ALIAS' => trim($alias)
+                );
+                $result = 0;
+                
+                $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ALIAS, $params);
+                
+                if (!$result['status'])
+				{
+                    $this->errors['ALIAS'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+        }
     
+        if ($_s['STAT']) 
+        {
+            $params = array(
+                'USER' => $_user,
+                'DOMAIN' => $_s['DOMAIN'],
+                'STAT' => $_s['STAT']
+            );
+            $result = 0;
+            $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_STAT, $params);
+            
+            if (!$result['status'])
+			{
+                $this->errors['STATS'] = array(
+                    $result['error_code'] => $result['error_message']
+                );
+            }
+        }
+        
+        if ($_s['STAT_AUTH']) 
+        {
+            $params = array(
+                'USER' => $_user,
+                'DOMAIN' => $_s['DOMAIN'],
+                'STAT_USER' => $_s['STAT_USER'],
+                'STAT_PASSWORS' => $_s['STAT_PASSWORD']
+            );
+            $result = 0;
+            $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_STAT_AUTH, $params);
+            
+            if (!$result['status'])
+			{
+                $this->errors['STAT_AUTH'] = array(
+                    $result['error_code'] => $result['error_message']
+                );
+            }
+        }
+        
+        
+		if ($_s['SSL']) 
+		{
+			$params = array(
+				'USER' => $_user,
+				'DOMAIN' => $_s['DOMAIN'],
+				'SSL_CERT' => $_s['SSL_CERT']
+			);
+			
+			if ($_s['SSL_HOME'])
+			{
+				$params['SSL_HOME'] = $_s['SSL_HOME'];
+			}
+			
+			if ($_s['SSL_TEXT']) 
+			{
+				// TODO: write it up
+			}
+								
+			$result = 0;
+			$result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_SSL, $params);
+			
+			if (!$result['status'])
+			{
+				$this->errors['SSL'] = array(
+					$result['error_code'] => $result['error_message']
+				);
+			}
+		}
+                
+        if ($_s['CREATE_DNS_DOMAIN']) 
+        {
+            $params = array(
+                'USER' => $_user,
+                'DNS_DOMAIN' => $_s['DOMAIN'],
+                'IP' => $_s['IP']
+            );
+            
+            require_once V_ROOT_DIR . 'api/DNS.class.php';
+            
+            $dns    = new DNS();
+            $result = 0;
+            $result = $dns->addExecute($params);
+            if (!$result['status'])
+            {
+                $this->errors['DNS_DOMAIN'] = array(
+                    $result['error_code'] => $result['error_message']
+                );
+            }
+        }
+                
+		if ($_s['CREATE_MAIL_DOMAIN']) 
+		{
+			$params = array(
+				'USER' => $_user,
+				'MAIL_DOMAIN' => $_s['DOMAIN'],
+				'IP' => $_s['IP']
+			);
+						
+			require_once V_ROOT_DIR . 'api/MAIL.class.php';
+			
+			$mail   = new MAIL();
+			$result = 0;
+			$result = $mail->addExecute($params);
+			if (!$result['status'])
+			{
+				$this->errors['MAIL_DOMAIN'] = array(
+					$result['error_code'] => $result['error_message']
+				);
+			}
+		}
+        
+        return $this->reply($result['status'], $result['data']);
+    }
     
-    
-    function addExecute($request) 
+    /**
+	 * Delete entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+    public function delExecute($request)
     {
-      $r = new Request();
-      $_s = $r->getSpell();
-      $_user = 'vesta';
-
-      $params = array(
-		      'USER' => $_user,
-		      'DOMAIN' => $_s['DOMAIN'],
-		      'IP' => $_s['IP']
-		      );
-      
-      $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN, $params);
-      
-      if(!$result['status'])
-	$this->errors[] = array($result['error_code'] => $result['error_message']);
-      
-      
-      
-      //    if(0)
-      if($_s['TPL'])
-	{
-	  $params = array('USER' => $_user,
-			'DOMAIN' => $_s['DOMAIN'],
-			  'TPL' => $_s['TPL']);
-	  $result = 0;
-	  $result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_TPL, $params);
-	  
-	  if(!$result['status'])
-	    $this->errors['CHANGE_TPL'] = array($result['error_code'] => $result['error_message']);
-	}
-      
-      //    if(0)
-      if($_s['ALIAS'])
-	{
-	$alias_arr = explode(',', $_s['ALIAS']);
-	
-	foreach($alias_arr as $alias)
-	  {
-	    $params = array('USER' => $_user,
-			    'DOMAIN' => $_s['DOMAIN'],
-			    'ALIAS' => trim($alias));
-	    $result = 0;
-	    
-	    $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ALIAS, $params);
-	    
-	    if(!$result['status'])
-	      $this->errors['ALIAS'] = array($result['error_code'] => $result['error_message']);
-	  }
-	}
-      
-      //    if(0)
-      if($_s['STAT'])
-	{
-	  $params = array('USER' => $_user,
-			  'DOMAIN' => $_s['DOMAIN'],
-			  'STAT' => $_s['STAT']);
-	  $result = 0;
-	  $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_STAT, $params);
-	  
-	  if(!$result['status'])
-	    $this->errors['STATS'] = array($result['error_code'] => $result['error_message']);
-	}
-      
-      //    if(0)
-      if($_s['STAT_AUTH'])
-	{
-	  $params = array('USER' => $_user,
-			  'DOMAIN' => $_s['DOMAIN'],
-			  'STAT_USER' => $_s['STAT_USER'],
-			  'STAT_PASSWORS' => $_s['STAT_PASSWORD']);
-	  $result = 0;
-	  $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_STAT_AUTH, $params);
-	  
-	  if(!$result['status'])
-	    $this->errors['STAT_AUTH'] = array($result['error_code'] => $result['error_message']);
-	}
-
-      if(0)
-	if($_s['SSL'])
-	  {
-	    $params = array('USER' => $_user,
-			    'DOMAIN' => $_s['DOMAIN'],
-			    'SSL_CERT' => $_s['SSL_CERT']);
-	    
-	    if($_s['SSL_HOME'])
-	      $params['SSL_HOME'] = $_s['SSL_HOME'];
-	    
-	    if($_s['SSL_TEXT'])
-	      {}
-	    //	if($_FILES['SSL_CERT'])
-	    // $ssl_text = file_get_contents($_FILES...);
-	    
-	    
-	    $result = 0;
-	    $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_SSL, $params);
-	    
-	    if(!$result['status'])
-	      $this->errors['SSL'] = array($result['error_code'] => $result['error_message']);
-	  }
-      
-    //    if(0)
-      if($_s['CREATE_DNS_DOMAIN'])
-	{
-	  $params = array('USER' => $_user,
-			  'DNS_DOMAIN' => $_s['DOMAIN'],
-			  'IP' => $_s['IP']);
-	  
-	  require_once V_ROOT_DIR . 'api/DNS.class.php';
-	  
-	  $dns = new DNS();
-	  $result = 0;
-	  $result = $dns->addExecute($params);
-	  if(!$result['status'])
-	    $this->errors['DNS_DOMAIN'] = array($result['error_code'] => $result['error_message']);
-	}
-      
-      if(0)
-	if($_s['CREATE_MAIL_DOMAIN'])
-	  {
-	    $params = array('USER' => $_user,
-			    'MAIL_DOMAIN' => $_s['DOMAIN'],
-			    'IP' => $_s['IP']);
-	    
-	    
-	    require_once V_ROOT_DIR . 'api/MAIL.class.php';
-	    
-	    $mail = new MAIL();
-	    $result = 0;
-	    $result = $mail->addExecute($params);
-	    if(!$result['status'])
-	      $this->errors['MAIL_DOMAIN'] = array($result['error_code'] => $result['error_message']);
-	  }
-      
-      return $this->reply($result['status'], $result['data']);
+        $r     = new Request();
+        $_s    = $r->getSpell();
+        $_user = 'vesta';
+        
+        $params = array(
+            'USER' => $_user,
+            'DOMAIN' => $_s['DOMAIN']
+        );
+        
+        $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN, $params);
+        
+        if (!$result['status'])
+            $this->errors[] = array(
+                $result['error_code'] => $result['error_message']
+            );
+                
+        $params = array(
+            'USER' => $_user,
+            'DNS_DOMAIN' => $_s['DOMAIN']
+        );
+        
+        require_once V_ROOT_DIR . 'api/DNS.class.php';
+        $dns    = new DNS();
+        $result = $dns->delExecute($params);
+        
+        if (!$result['status'] && $result['error_code'] != 31) // domain not found
+        {
+			$this->errors['DNS'] = array(
+                $result['error_code'] => $result['error_message']
+            );
+        }
+        
+        require_once V_ROOT_DIR . 'api/DNS.class.php';
+        
+        $params = array(
+            'USER' => $_user,
+            'MAIL_DOMAIN' => $_s['DOMAIN']
+        );
+        
+        return $this->reply($result['status'], $result['data']);
     }
-    
-    function delExecute($request) 
+          
+    /**
+	 * Change entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */          
+    public function changeExecute($request)
     {
-      $r = new Request();
-      $_s = $r->getSpell();
-      $_user = 'vesta';
-      
-      $params = array(
-		      'USER' => $_user,
-		      'DOMAIN' => $_s['DOMAIN']
-		      );
-      
-      $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN, $params);
-      
-      if(!$result['status'])
-	$this->errors[] = array($result['error_code'] => $result['error_message']);
-
-
-
-    $params = array(
-		    'USER' => $_user,
-		    'DNS_DOMAIN' => $_s['DOMAIN']
-		    );
-   
-    require_once V_ROOT_DIR . 'api/DNS.class.php';
-    $dns = new DNS();
-    $result = $dns->delExecute($params);
-    
-    if(!$result['status'] && $result['error_code'] != 31) // domain not found
-      $this->errors['DNS'] = array($result['error_code'] => $result['error_message']);
-   
-    require_once V_ROOT_DIR . 'api/DNS.class.php';
-
-    $params = array(
-		    'USER' => $_user,
-		    'MAIL_DOMAIN' => $_s['DOMAIN']
-		    );
-
-    /*
-    require_once V_ROOT_DIR . 'api/MAIL.class.php';
-    $mail = new MAIL();
-    $result = $mail->delExecute($params);
-    
-    if(!$result['status'] && $result['error_code'] != 31) // domain not found
-      $this->errors['MAIL'] = array($result['error_code'] => $result['error_message']);
-    */
-    return $this->reply($result['status'], $result['data']);
-  }
-  
-    
-  
-  function changeExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-    $_old = $_s['old'];
-    $_new = $_s['new'];
-
-    $_user = 'vesta';
-    $_DOMAIN = $_new['DOMAIN'];
-    
-    if($_old['IP'] != $_new['IP'])
-      {
-	$result = array();
-	$result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_IP, array('USER' => $_user, 'DOMAIN' => $_DOMAIN, 'IP' => $_new['IP']));
-	if(!$result['status'])
-	  {
-	    $this->status = FALSE;
-	    $this->errors['IP_ADDRESS'] = array($result['error_code'] => $result['error_message']);
-	  }
-      }
-
-
-    if($_old['TPL'] != $_new['TPL'])
-      {
-	$result = array();
-	$result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_TPL, array('USER' => $_user, 'DOMAIN' => $_DOMAIN, 'TPL' => $_new['TPL']));
-	if(!$result['status'])
-	  {
-	    $this->status = FALSE;
-	    $this->errors['TPL'] = array($result['error_code'] => $result['error_message']);
-	  }
-      }
-
-    if($_old['ALIAS'] != $_new['ALIAS'])
-      {
-	$result = array();
-
-	$old_arr = explode(',', $_old['ALIAS']);
-	$new_arr = explode(',', $_new['ALIAS']);
-
-	$added = array_diff($new_arr, $old_arr);
-	$deleted = array_diff($old_arr, $new_arr);
-
-	foreach($added as $alias)
-	  {
-	    $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ALIAS, array('USER' => $_user, 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['ADD_ALIAS'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-	foreach($deleted as $alias)
-	  {
-	    $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_ALIAS, array('USER' => $_user, 'DOMAIN' => $_DOMAIN, 'ALIAS' => $alias));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['DEL_ALIAS'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-      }
-
-
-    if($_old['STAT'] != $_new['STAT'])
-      {
-	if($_new['STAT'] == true)
-	  {
-	    $result = array();
-	    $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_STAT, array('USER' => $_user, 'DOMAIN' => $_DOMAIN, 'STAT' => $_new['STAT']));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['ADD_STAT'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-
-	if($_new['STAT'] == false)
-	  {
-	    $result = array();
-	    $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_STAT, array('USER' => $_user, 'DOMAIN' => $_DOMAIN));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['DEL_STAT'] = array($result['error_code'] => $result['error_message']);
-	      }
-	    $result = array();
-
-	    $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_STAT_AUTH, array('USER' => $_user, 'DOMAIN' => $_DOMAIN, 'STAT_USER' => $_new['STAT_USER']));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['DEL_STAT_AUTH'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-      }
-
-    if(0)
-    // ssl
-    if($_old['SSL'] != $_new['SSL'])
-      {
-	if($_new['SSL'] == true)
-	  {
-
-
-	  }
-	if($_new['SSL'] == false)
-	  {
-
-
-	  }
-      }
-    else
-      {
-	if($_old['SSL_CERT'] != $_new['SSL_CERT'])
-	  {
-	    $result = array();
-	    $_SSL_CERT = $_new['SSL_CERT'];
-	    // or read uploaded tmp file
-
-	    $result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_CERT, array('USER' => $_user, 'DOMAIN' => $_DOMAIN, 'SSL_CERT' => $_SSL_CERT ));
-	    if(!$result['status'])
-	    {
-	      $this->status = FALSE;
-	      $this->errors['SSL_CERT'] = array($result['error_code'] => $result['error_message']);
-	    }
-	  }
-	if($_old['SSL_HOME'] != $_new['SSL_HOME'])
-	  {
-	    $result = array();
-	    $result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_SSLHOME, array('USER' => $_user, 'DOMAIN' => $_DOMAIN, 'SSL_HOME' => $_new['SSL_HOME']));
-	    if(!$result['status'])
-	      {
-		$this->status = FALSE;
-		$this->errors['SSL_HOME'] = array($result['error_code'] => $result['error_message']);
-	      }
-	  }
-      }
-
-    if($_old['CGI'] != $_new['CGI'])
-      {
-	if($_new['CGI'] == true)
-	{
-	  $result = array();
-	  $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_CGI, array('USER' => $_user, 'DOMAIN' => $_DOMAIN));
-	  if(!$result['status'])
-	    {
-	      $this->status = FALSE;
-	      $this->errors['ADD_CGI'] = array($result['error_code'] => $result['error_message']);
-	    }
-	}
-	if($_new['CGI'] == false)
-	{
-	  $result = array();
-	  $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_CGI, array('USER' => $_user, 'DOMAIN' => $_DOMAIN));
-	  if(!$result['status'])
-	    {
-	      $this->status = FALSE;
-	      $this->errors['DEL_CGI'] = array($result['error_code'] => $result['error_message']);
-	    }
-	}
-      }
-
-    if($_old['ELOG'] != $_new['ELOG'])
-      {
-	if($_new['ELOG'] == true)
-	{
-	  $result = array();
-	  $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ELOG, array('USER' => $_user, 'DOMAIN' => $_DOMAIN));
-	  if(!$result['status'])
-	    {
-	      $this->status = FALSE;
-	      $this->errors['ADD_ELOG'] = array($result['error_code'] => $result['error_message']);
-	    }
-	}
-	if($_new['ELOG'] == false)
-	{
-	  $result = array();
-	  $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_ELOG, array('USER' => $_user, 'DOMAIN' => $_DOMAIN));
-	  if(!$result['status'])
-	    {
-	      $this->status = FALSE;
-	      $this->errors['DEL_ELOG'] = array($result['error_code'] => $result['error_message']);
-	    }
-	}
-      }
-
-
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function suspendExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user,
-		    'DOMAIN' => $_s['DOMAIN']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-  function unsuspendExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user,
-		    'DOMAIN' => $_s['DOMAIN']
-		    );
-    
-    $result = Vesta::execute(Vesta::V_UNSUSPEND_WEB_DOMAIN, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
-    
-    return $this->reply($result['status'], $result['data']);
-  }
-
-
-
-  function suspendAllExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
-    
-    $params = array(
-		    'USER' => $_user
-		    );
-    
-    $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAINS, $params);
-    
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
+        $r    = new Request();
+        $_s   = $r->getSpell();
+        $_old = $_s['old'];
+        $_new = $_s['new'];
+        
+        $_user   = 'vesta';
+        $_DOMAIN = $_new['DOMAIN'];
+        
+        if ($_old['IP'] != $_new['IP']) 
+        {
+            $result = array();
+            $result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_IP, array(
+                'USER' => $_user,
+                'DOMAIN' => $_DOMAIN,
+                'IP' => $_new['IP']
+            ));
+            if (!$result['status']) 
+            {
+                $this->status               = FALSE;
+                $this->errors['IP_ADDRESS'] = array(
+                    $result['error_code'] => $result['error_message']
+                );
+            }
+        }
+                
+        if ($_old['TPL'] != $_new['TPL']) 
+        {
+            $result = array();
+            $result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_TPL, array(
+                'USER' => $_user,
+                'DOMAIN' => $_DOMAIN,
+                'TPL' => $_new['TPL']
+            ));
+            if (!$result['status']) 
+            {
+                $this->status        = FALSE;
+                $this->errors['TPL'] = array(
+                    $result['error_code'] => $result['error_message']
+                );
+            }
+        }
+        
+        if ($_old['ALIAS'] != $_new['ALIAS']) 
+        {
+            $result = array();
+            
+            $old_arr = explode(',', $_old['ALIAS']);
+            $new_arr = explode(',', $_new['ALIAS']);
+            
+            $added   = array_diff($new_arr, $old_arr);
+            $deleted = array_diff($old_arr, $new_arr);
+            
+            foreach ($added as $alias) 
+            {
+                $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ALIAS, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN,
+                    'ALIAS' => $alias
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status              = FALSE;
+                    $this->errors['ADD_ALIAS'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+            foreach ($deleted as $alias) 
+            {
+                $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_ALIAS, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN,
+                    'ALIAS' => $alias
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status              = FALSE;
+                    $this->errors['DEL_ALIAS'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+        }
+        
+        
+        if ($_old['STAT'] != $_new['STAT']) 
+        {
+            if ($_new['STAT'] == true) 
+            {
+                $result = array();
+                $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_STAT, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN,
+                    'STAT' => $_new['STAT']
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status             = FALSE;
+                    $this->errors['ADD_STAT'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+            
+            if ($_new['STAT'] == false) 
+            {
+                $result = array();
+                $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_STAT, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status             = FALSE;
+                    $this->errors['DEL_STAT'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+                $result = array();
+                
+                $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_STAT_AUTH, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN,
+                    'STAT_USER' => $_new['STAT_USER']
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status                  = FALSE;
+                    $this->errors['DEL_STAT_AUTH'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+        }
+
+		if ($_old['SSL'] != $_new['SSL']) 
+		{
+			if ($_new['SSL'] == true) 
+			{
+				// TODO: write it
+			}
+			if ($_new['SSL'] == false) 
+			{
+				// TODO: write it
+			}
+		} 
+		else 
+		{
+			if ($_old['SSL_CERT'] != $_new['SSL_CERT']) 
+			{
+				$result    = array();
+				$_SSL_CERT = $_new['SSL_CERT'];
+				// or read uploaded tmp file
+				
+				$result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_CERT, array(
+					'USER' => $_user,
+					'DOMAIN' => $_DOMAIN,
+					'SSL_CERT' => $_SSL_CERT
+				));
+				if (!$result['status']) 
+				{
+					$this->status             = FALSE;
+					$this->errors['SSL_CERT'] = array(
+						$result['error_code'] => $result['error_message']
+					);
+				}
+			}
+			if ($_old['SSL_HOME'] != $_new['SSL_HOME']) 
+			{
+				$result = array();
+				$result = Vesta::execute(Vesta::V_CHANGE_WEB_DOMAIN_SSLHOME, array(
+					'USER' => $_user,
+					'DOMAIN' => $_DOMAIN,
+					'SSL_HOME' => $_new['SSL_HOME']
+				));
+				if (!$result['status']) 
+				{
+					$this->status             = FALSE;
+					$this->errors['SSL_HOME'] = array(
+						$result['error_code'] => $result['error_message']
+					);
+				}
+			}
+		}
+        
+        if ($_old['CGI'] != $_new['CGI']) 
+        {
+            if ($_new['CGI'] == true) 
+            {
+                $result = array();
+                $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_CGI, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status            = FALSE;
+                    $this->errors['ADD_CGI'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+            if ($_new['CGI'] == false) 
+            {
+                $result = array();
+                $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_CGI, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status            = FALSE;
+                    $this->errors['DEL_CGI'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+        }
+        
+        if ($_old['ELOG'] != $_new['ELOG']) 
+        {
+            if ($_new['ELOG'] == true) 
+            {
+                $result = array();
+                $result = Vesta::execute(Vesta::V_ADD_WEB_DOMAIN_ELOG, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status             = FALSE;
+                    $this->errors['ADD_ELOG'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+            if ($_new['ELOG'] == false) 
+            {
+                $result = array();
+                $result = Vesta::execute(Vesta::V_DEL_WEB_DOMAIN_ELOG, array(
+                    'USER' => $_user,
+                    'DOMAIN' => $_DOMAIN
+                ));
+                if (!$result['status']) 
+                {
+                    $this->status             = FALSE;
+                    $this->errors['DEL_ELOG'] = array(
+                        $result['error_code'] => $result['error_message']
+                    );
+                }
+            }
+        }
+        
+        
+        return $this->reply($result['status'], $result['data']);
+    }
     
-    return $this->reply($result['status'], $result['data']);
-  }
-
-  function unsuspendAllExecute($request)
-  {
-    $r = new Request();
-    $_s = $r->getSpell();
-
-    $_user = 'vesta';
+    /**
+	 * Suspend entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+    public function suspendExecute($request)
+    {
+        $r  = new Request();
+        $_s = $r->getSpell();
+        
+        $_user = 'vesta';
+        
+        $params = array(
+            'USER' => $_user,
+            'DOMAIN' => $_s['DOMAIN']
+        );
+        
+        $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAIN, $params);
+        
+        if (!$result['status'])
+		{
+            $this->errors[] = array(
+                $result['error_code'] => $result['error_message']
+            );
+        }
+        
+        return $this->reply($result['status'], $result['data']);
+    }
     
-    $params = array(
-		    'USER' => $_user
-		    );
+    /**
+	 * Unsuspend entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+    public function unsuspendExecute($request)
+    {
+        $r  = new Request();
+        $_s = $r->getSpell();
+        
+        $_user = 'vesta';
+        
+        $params = array(
+            'USER' => $_user,
+            'DOMAIN' => $_s['DOMAIN']
+        );
+        
+        $result = Vesta::execute(Vesta::V_UNSUSPEND_WEB_DOMAIN, $params);
+        
+        if (!$result['status'])
+		{
+            $this->errors[] = array(
+                $result['error_code'] => $result['error_message']
+            );
+        }
+        
+        return $this->reply($result['status'], $result['data']);
+    }
     
-    $result = Vesta::execute(Vesta::V_UNSUSPEND_WEB_DOMAINS, $params);
+    /**
+	 * Batch suspend entries
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+    public function suspendAllExecute($request)
+    {
+        $r  = new Request();
+        $_s = $r->getSpell();
+        
+        $_user = 'vesta';
+        
+        $params = array(
+            'USER' => $_user
+        );
+        
+        $result = Vesta::execute(Vesta::V_SUSPEND_WEB_DOMAINS, $params);
+        
+        if (!$result['status'])
+        {
+            $this->errors[] = array(
+                $result['error_code'] => $result['error_message']
+            );
+        }
+        
+        return $this->reply($result['status'], $result['data']);
+    }
     
-    if(!$result['status'])
-      $this->errors[] = array($result['error_code'] => $result['error_message']);
+    /**
+	 * Batch unsuspend entry
+	 * 
+	 * @param Request $request
+	 * @return
+	 */    
+    public function unsuspendAllExecute($request)
+    {
+        $r  = new Request();
+        $_s = $r->getSpell();
+        
+        $_user = 'vesta';
+        
+        $params = array(
+            'USER' => $_user
+        );
+        
+        $result = Vesta::execute(Vesta::V_UNSUSPEND_WEB_DOMAINS, $params);
+        
+        if (!$result['status'])
+        {
+            $this->errors[] = array(
+                $result['error_code'] => $result['error_message']
+            );
+        }
+        
+        return $this->reply($result['status'], $result['data']);
+    }
     
-    return $this->reply($result['status'], $result['data']);
-  }
-}
+}

+ 2 - 1
web/vesta/app.init.php

@@ -13,8 +13,9 @@ require_once V_ROOT_DIR . 'api/AjaxHandler.php';
 /**
  * App execution 
  * 
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010
+ * @copyright vesta 2010-2011
  */
 try {
     // Execution

+ 37 - 7
web/vesta/config/Config.class.php

@@ -1,31 +1,61 @@
 <?php
 
-class Config {
+/**
+ * Config class
+ *
+ * Reads, manipulate configs
+ *
+ * @author Malishev Dima <dima.malishev@gmail.com>
+ * @author vesta, http://vestacp.com/
+ * @copyright vesta 2010-2011
+ */
+class Config 
+{
     
     protected $_config = array();   
     static public $instance = null;
     
-    public function __construct() {
+    /**
+	 * Config constructor
+	 * 
+	 */
+    public function __construct() 
+    {
         $this->_config = parse_ini_file(V_ROOT_DIR.'config'.DIRECTORY_SEPARATOR.'vesta_config.ini');
     }
 
-    public function getParameter($key){
+	/**
+	 * get config parameter
+	 * 
+	 * @param string $key
+	 * @return mixed
+	 */
+    public function getParameter($key)
+    {
         return isset($this->_config[$key]) ? $this->_config[$key] : false;
     }
     
     /**
      * Grab current instance or create it
      *
-     * @return <type>
+     * @return Config
      */
-    static function getInstance($request=null) {
+    static public function getInstance($request = null) 
+    {
         return null == self::$instance ? self::$instance = new self() : self::$instance;
     }
     
-    static function get($key){
+    /**
+     * Shortcut method: get config parameter
+     *
+     * @param string $key
+     * @return mixed
+     */
+    static public function get($key)
+    {
         $ref = self::getInstance();
         
         return $ref->getParameter($key);
     }
     
-}
+}

+ 55 - 22
web/vesta/core/Request.class.php

@@ -5,10 +5,12 @@
  *
  * Holds parameters, decorating them and providing easy access
  *
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010
+ * @copyright vesta 2010-2011
  */
-class Request {
+class Request 
+{
 
     protected $server = array();
     protected $post = array();
@@ -20,7 +22,8 @@ class Request {
     /**
      *
      */
-    public function __construct() {
+    public function __construct() 
+    {
         $this->post = $_POST;
         $this->get = $_GET;
         $this->server = $_SERVER;
@@ -31,29 +34,47 @@ class Request {
     /**
      * Merge holders into single holder
      */
-    function mergeContainers() {
-        $this->_merged = array_merge($this->server, $this->post, $this->get, $this->global);
-	$this->_spell = json_decode($this->_merged['spell'], true);
+    public function mergeContainers() 
+    {
+        $this->_merged = array_merge($this->server, 
+									 $this->post, 
+									 $this->get, 
+									 $this->global);
+		$this->_spell = json_decode($this->_merged['spell'], true);
     }
 
     /**
      * Get parameter
      *
-     * @param <string> $key
-     * @param <mixed> $default
-     * @return <mixed>
-     * 
+     * @param string $key
+     * @param mixed $default
+     * @return mixed
      */
-    function getParameter($key, $default=false) {
-      return isset($this->_merged[$key]) ? $this->_merged[$key] : $default;
-      //        return isset($this->_spell[$key]) ? $this->_spell[$key] : $default;
+    public function getParameter($key, $default=false) 
+    {
+      return isset($this->_merged[$key]) ? $this->_merged[$key] : $default;      
     }
 
-    function getSpell() {
+	/**
+     * Get spell variable from parameters
+     *     
+     * @return array
+     */
+    public function getSpell() 
+    {
       return $this->_spell;
     }
 
-    function hasParameter($key, $default=false) {
+	/**
+     * Check if parameter is set
+     *
+     * @param string $key
+     * @param mixed $default
+     * @return mixed
+     * 
+     */
+    public function hasParameter($key, $default=false) 
+    {
         return isset($this->_merged[$key]);
     }
 
@@ -62,20 +83,32 @@ class Request {
      * 
      * TODO: write the method
      *
-     * @return <boolean>
+     * @return boolean
      */
-    function isPost() {
+    public function isPost() 
+    {
         return true;
     }
 
-    static function parseAjaxMethod($request) {
-        if (!$request->hasParameter('jedi_method')) {
+	/**
+     * Dissassemble ajax method
+     * Breaks ajax requested method param into "ENTITY"."ACTION"
+     * for instance DNS.getList into "namespase" => DNS, "function" => "getList" 
+     * for triggering ($DNS->getListExecuty();)
+     * 
+     * TODO: write the method
+     *
+     * @return array
+     */
+    static public function parseAjaxMethod($request) 
+    {
+        if (!$request->hasParameter('jedi_method')) 
+        {
             throw new ProtectionException(Message::INVALID_METHOD);
         }
-
         $method = explode('.', $request->getParameter('jedi_method'));
-
-        if (count($method) != 2) {
+        if (count($method) != 2) 
+        {
             throw new ProtectionException(Message::INVALID_METHOD);
         }
 

+ 152 - 199
web/vesta/core/Vesta.class.php

@@ -1,220 +1,173 @@
 <?php
+
 /**
+ * Api Main class
+ * Calls / Executes native vesta methods
  * 
+ * @author Malishev Dima <dima.malishev@gmail.com>
+ * @author Naumov-Socolov <naumov.socolov@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010
+ * @copyright vesta 2010-2011
  */
-class Vesta {
-    // ====================== IP ===========================
-    const V_LIST_SYS_IPS = 'v_list_sys_ips';
-
-    // adding
-    const V_ADD_SYS_IP = 'v_add_sys_ip';
-    const V_ADD_SYS_USER_IP = 'v_add_sys_user_ip'; 
-
-    // changing
-    const V_CHANGE_SYS_IP_OWNER = 'v_change_sys_ip_owner';
-    const V_CHANGE_SYS_IP_NAME = 'v_change_sys_ip_name';
-    const V_CHANGE_SYS_IP_STATUS = 'v_change_sys_ip_status';
-    // deleting 
-    const V_DEL_SYS_IP = 'v_del_sys_ip';
-
-    // service 
-    const V_UPD_SYS_IP = 'v_upd_sys_ip';
-    const V_LIST_SYS_INTERFACES = 'v_list_sys_interfaces';
-
-    // ======================= DNS =========================
-    const V_LIST_DNS_DOMAINS = 'v_list_dns_domains';
-    const V_LIST_DNS_DOMAIN_RECORDS = 'v_list_dns_domain';
-
-    // adding
-    const V_ADD_DNS_DOMAIN = 'v_add_dns_domain';
-    const V_ADD_DNS_DOMAIN_RECORD = 'v_add_dns_domain_record';
-
-    // changing
-    const V_CHANGE_DNS_DOMAIN_IP = 'v_change_dns_domain_ip';
-    const V_CHANGE_DNS_DOMAIN_SOA = 'v_change_dns_domain_soa';
-    const V_CHANGE_DNS_DOMAIN_TPL = 'v_change_dns_domain_tpl';
-    const V_CHANGE_DNS_DOMAIN_TTL = 'v_change_dns_domain_ttl';
-    const V_CHANGE_DNS_DOMAIN_EXP = 'v_change_dns_domain_exp';
-    const V_CHANGE_DNS_DOMAIN_RECORD = 'v_change_dns_domain_record';
-
-    // deleting
-    const V_DEL_DNS_DOMAIN = 'v_del_dns_domain';
-    const V_DEL_DNS_DOMAIN_RECORD = 'v_del_dns_domain_record';
-
-
-
-    // ======================= CRON =========================
-    const V_LIST_CRON_JOBS = 'v_list_sys_cron';
-
-    // adding 
-    const V_ADD_CRON_JOB = 'v_add_sys_cron';
-    const V_ADD_SYS_USER_REPORTS = 'v_add_sys_user_reports';
-
-    // changing
-    const V_CHANGE_CRON_JOB = 'v_change_sys_cron_job';
-    const V_SUSPEND_CRON_JOB = 'v_suspend_sys_cron_job';
-    const V_SUSPEND_CRON_JOBS = 'v_suspend_sys_cron_jobs';
-    const V_UNSUSPEND_CRON_JOB = 'v_unsuspend_sys_cron_job';
-    const V_UNSUSPEND_CRON_JOBS = 'v_unsuspend_sys_cron_jobs';
-
-    // deleting 
-    const V_DEL_CRON_JOB = 'v_del_sys_cron';
-    const V_DEL_SYS_USER_REPORTS = 'v_del_sys_user_reports';
-
-
-
-    // ======================= USER =========================
-    const V_LIST_SYS_USERS = 'v_list_sys_users';
-
-    // adding 
-    const V_ADD_SYS_USER = 'v_add_sys_user';
-
-    // changing
-    const V_CHANGE_SYS_USER_CONTACT = 'v_change_sys_user_contact';
-    const V_CHANGE_SYS_USER_NS = 'v_change_sys_user_ns';
-    const V_CHANGE_SYS_USER_PACKAGE = 'v_change_sys_user_package';
-    const V_CHANGE_SYS_USER_PASSWORD = 'v_change_sys_user_password';
-    const V_CHANGE_SYS_USER_SHELL = 'v_change_sys_user_shell';
-    const V_CHANGE_SYS_USER_ROLE = 'v_change_sys_user_role';
-
-    // deleting 
-    const V_DEL_SYS_USER = 'v_del_sys_user';
-
-
-    // ======================= WEB_DOMAIN =========================
-    const V_LIST_WEB_DOMAINS = 'v_list_web_domains';
-
-    const V_LIST_WEB_DOMAINS_ALIAS = 'v_list_web_domains_alias';
-    const V_LIST_WEB_DOMAINS_ELOG = 'v_list_web_domains_elog';
-    const V_LIST_WEB_DOMAINS_PROXY = 'v_list_web_domains_proxy';
-    const V_LIST_WEB_DOMAINS_SSL = 'v_list_web_domains_ssl';
-    const V_LIST_WEB_DOMAINS_STATS = 'v_list_web_domains_stats';
-    const V_LIST_WEB_TEMPLATES = 'v_list_web_templates';
-
-    // adding 
-    const V_ADD_WEB_DOMAIN = 'v_add_web_domain';
-    const V_ADD_WEB_DOMAIN_ALIAS = 'v_add_web_domain_alias';
-
-    // changing
-    const V_ADD_WEB_DOMAIN_STAT = 'v_add_web_domain_stat';
-    const V_ADD_WEB_DOMAIN_STAT_AUTH = 'v_add_web_domain_stat_auth';
-    const V_ADD_WEB_DOMAIN_SSL = 'v_add_web_domain_ssl';
-    const V_ADD_WEB_DOMAIN_ELOG = 'v_add_web_domain_elog';
-    const V_ADD_WEB_DOMAIN_CGI = 'v_add_web_domain_cgi';
-
-    const V_CHANGE_WEB_DOMAIN_IP = 'v_change_web_domain_ip';
-    const V_CHANGE_WEB_DOMAIN_SSLCERT = 'v_change_web_domain_sslcert';
-    const V_CHANGE_WEB_DOMAIN_SSLHOME = 'v_change_web_domain_sslhome';
-    const V_CHANGE_WEB_DOMAIN_TPL = 'v_change_web_domain_tpl';
-
-    const V_DEL_WEB_DOMAIN_CGI = 'v_del_web_domain_cgi';
-    const V_DEL_WEB_DOMAIN_ELOG = 'v_del_web_domain_elog';
-    const V_DEL_WEB_DOMAIN_SSL = 'v_del_web_domain_ssl';
-    const V_DEL_WEB_DOMAIN_STAT = 'v_del_web_domain_stat';
-    const V_DEL_WEB_DOMAIN_STAT_AUTH = 'v_del_web_domain_stat_auth';
-    const V_DEL_WEB_DOMAIN_ALIAS = 'v_del_web_domain_alias';
-
-    const V_SUSPEND_WEB_DOMAIN = 'v_suspend_web_domain';
-    const V_SUSPEND_WEB_DOMAINS = 'v_suspend_web_domains';
-    const V_UNSUSPEND_WEB_DOMAIN = 'v_unsuspend_web_domain';
-    const V_UNSUSPEND_WEB_DOMAINS = 'v_unsuspend_web_domains';
-    const V_UPD_WEB_DOMAIN_DISK = 'v_upd_web_domain_disk';
-    const V_UPD_WEB_DOMAINS_DISK = 'v_upd_web_domains_disk';
-    const V_UPD_WEB_DOMAIN_TRAFF = 'v_upd_web_domain_traff';
-    const V_UPD_WEB_DOMAINS_TRAFF = 'v_upd_web_domains_traff';
-
-    // deleting 
-    const V_DEL_WEB_DOMAIN = 'v_del_web_domain';
-
-
-    // ======================= DB =========================
-    // list
-    const V_LIST_DB_BASES = 'v_list_db_bases';
-    const V_LIST_DB_HOSTS = 'v_list_db_hosts';
-
-    // adding 
-    const V_ADD_DB_BASE = 'v_add_db_base';
-    const V_ADD_DB_HOST = 'v_add_db_host';
-
-    // changing 
-    const V_SUSPEND_DB_BASE = 'v_suspend_db_base';
-    const V_SUSPEND_DB_BASES = 'v_suspend_db_bases';
-    const V_UNSUSPEND_DB_BASE = 'v_unsuspend_db_base';
-    const V_UNSUSPEND_DB_BASES = 'v_unsuspend_db_bases';
-    const V_CHANGE_DB_PASSWORD = 'v_change_db_password';
-
-    // deleting
-    const V_DEL_DB_BASE = 'v_del_db_base';
-    const V_DEL_DB_HOST = 'v_del_db_host';
-
-    // service
-    const V_UPD_DB_BASE_DISK = 'v_upd_db_base_disk';
-    const V_UPD_DB_BASES_DISK = 'v_upd_db_bases_disk';
-
-
-    // ======================================================
-
-    const PARAM_DELIMETER = ' ';
+class Vesta 
+{
+    // IP
+    const V_LIST_SYS_IPS 				= 'v_list_sys_ips';
+    const V_ADD_SYS_IP 					= 'v_add_sys_ip';
+    const V_ADD_SYS_USER_IP 			= 'v_add_sys_user_ip'; 
+    const V_CHANGE_SYS_IP_OWNER 		= 'v_change_sys_ip_owner';
+    const V_CHANGE_SYS_IP_NAME 			= 'v_change_sys_ip_name';
+    const V_CHANGE_SYS_IP_STATUS 		= 'v_change_sys_ip_status';    
+    const V_DEL_SYS_IP 					= 'v_del_sys_ip';    
+    const V_UPD_SYS_IP 					= 'v_upd_sys_ip';
+    const V_LIST_SYS_INTERFACES 		= 'v_list_sys_interfaces';
+    // DNS
+    const V_LIST_DNS_DOMAINS 			= 'v_list_dns_domains';
+    const V_LIST_DNS_DOMAIN_RECORDS 	= 'v_list_dns_domain';
+    const V_ADD_DNS_DOMAIN 				= 'v_add_dns_domain';
+    const V_ADD_DNS_DOMAIN_RECORD 		= 'v_add_dns_domain_record';
+    const V_CHANGE_DNS_DOMAIN_IP 		= 'v_change_dns_domain_ip';
+    const V_CHANGE_DNS_DOMAIN_SOA 		= 'v_change_dns_domain_soa';
+    const V_CHANGE_DNS_DOMAIN_TPL 		= 'v_change_dns_domain_tpl';
+    const V_CHANGE_DNS_DOMAIN_TTL		= 'v_change_dns_domain_ttl';
+    const V_CHANGE_DNS_DOMAIN_EXP 		= 'v_change_dns_domain_exp';
+    const V_CHANGE_DNS_DOMAIN_RECORD 	= 'v_change_dns_domain_record';
+    const V_DEL_DNS_DOMAIN 				= 'v_del_dns_domain';
+    const V_DEL_DNS_DOMAIN_RECORD 		= 'v_del_dns_domain_record';
+    // CRON
+    const V_LIST_CRON_JOBS 				= 'v_list_sys_cron';
+    const V_ADD_CRON_JOB 				= 'v_add_sys_cron';
+    const V_ADD_SYS_USER_REPORTS 		= 'v_add_sys_user_reports';
+    const V_CHANGE_CRON_JOB 			= 'v_change_sys_cron_job';
+    const V_SUSPEND_CRON_JOB 			= 'v_suspend_sys_cron_job';
+    const V_SUSPEND_CRON_JOBS 			= 'v_suspend_sys_cron_jobs';
+    const V_UNSUSPEND_CRON_JOB 			= 'v_unsuspend_sys_cron_job';
+    const V_UNSUSPEND_CRON_JOBS 		= 'v_unsuspend_sys_cron_jobs';
+    const V_DEL_CRON_JOB 				= 'v_del_sys_cron';
+    const V_DEL_SYS_USER_REPORTS 		= 'v_del_sys_user_reports';
+	// USER
+    const V_LIST_SYS_USERS 				= 'v_list_sys_users';
+    const V_ADD_SYS_USER 				= 'v_add_sys_user';
+    const V_CHANGE_SYS_USER_CONTACT		= 'v_change_sys_user_contact';
+    const V_CHANGE_SYS_USER_NS 			= 'v_change_sys_user_ns';
+    const V_CHANGE_SYS_USER_PACKAGE 	= 'v_change_sys_user_package';
+    const V_CHANGE_SYS_USER_PASSWORD 	= 'v_change_sys_user_password';
+    const V_CHANGE_SYS_USER_SHELL 		= 'v_change_sys_user_shell';
+    const V_CHANGE_SYS_USER_ROLE 		= 'v_change_sys_user_role';
+    const V_DEL_SYS_USER 				= 'v_del_sys_user';
+    // WEB_DOMAIN
+    const V_LIST_WEB_DOMAINS 			= 'v_list_web_domains';
+    const V_LIST_WEB_DOMAINS_ALIAS 		= 'v_list_web_domains_alias';
+    const V_LIST_WEB_DOMAINS_ELOG 		= 'v_list_web_domains_elog';
+    const V_LIST_WEB_DOMAINS_PROXY 		= 'v_list_web_domains_proxy';
+    const V_LIST_WEB_DOMAINS_SSL 		= 'v_list_web_domains_ssl';
+    const V_LIST_WEB_DOMAINS_STATS 		= 'v_list_web_domains_stats';
+    const V_LIST_WEB_TEMPLATES 			= 'v_list_web_templates';
+    const V_ADD_WEB_DOMAIN 				= 'v_add_web_domain';
+    const V_ADD_WEB_DOMAIN_ALIAS 		= 'v_add_web_domain_alias';
+    const V_ADD_WEB_DOMAIN_STAT 		= 'v_add_web_domain_stat';
+    const V_ADD_WEB_DOMAIN_STAT_AUTH 	= 'v_add_web_domain_stat_auth';
+    const V_ADD_WEB_DOMAIN_SSL 			= 'v_add_web_domain_ssl';
+    const V_ADD_WEB_DOMAIN_ELOG 		= 'v_add_web_domain_elog';
+    const V_ADD_WEB_DOMAIN_CGI 			= 'v_add_web_domain_cgi';
+    const V_CHANGE_WEB_DOMAIN_IP 		= 'v_change_web_domain_ip';
+    const V_CHANGE_WEB_DOMAIN_SSLCERT 	= 'v_change_web_domain_sslcert';
+    const V_CHANGE_WEB_DOMAIN_SSLHOME 	= 'v_change_web_domain_sslhome';
+    const V_CHANGE_WEB_DOMAIN_TPL 		= 'v_change_web_domain_tpl';
+    const V_DEL_WEB_DOMAIN_CGI 			= 'v_del_web_domain_cgi';
+    const V_DEL_WEB_DOMAIN_ELOG 		= 'v_del_web_domain_elog';
+    const V_DEL_WEB_DOMAIN_SSL 			= 'v_del_web_domain_ssl';
+    const V_DEL_WEB_DOMAIN_STAT 		= 'v_del_web_domain_stat';
+    const V_DEL_WEB_DOMAIN_STAT_AUTH 	= 'v_del_web_domain_stat_auth';
+    const V_DEL_WEB_DOMAIN_ALIAS 		= 'v_del_web_domain_alias';
+    const V_SUSPEND_WEB_DOMAIN 			= 'v_suspend_web_domain';
+    const V_SUSPEND_WEB_DOMAINS 		= 'v_suspend_web_domains';
+    const V_UNSUSPEND_WEB_DOMAIN 		= 'v_unsuspend_web_domain';
+    const V_UNSUSPEND_WEB_DOMAINS 		= 'v_unsuspend_web_domains';
+    const V_UPD_WEB_DOMAIN_DISK 		= 'v_upd_web_domain_disk';
+    const V_UPD_WEB_DOMAINS_DISK 		= 'v_upd_web_domains_disk';
+    const V_UPD_WEB_DOMAIN_TRAFF 		= 'v_upd_web_domain_traff';
+    const V_UPD_WEB_DOMAINS_TRAFF 		= 'v_upd_web_domains_traff';
+    const V_DEL_WEB_DOMAIN 				= 'v_del_web_domain';
+    // DB    
+    const V_LIST_DB_BASES 				= 'v_list_db_bases';
+    const V_LIST_DB_HOSTS 				= 'v_list_db_hosts';
+    const V_ADD_DB_BASE 				= 'v_add_db_base';
+    const V_ADD_DB_HOST 				= 'v_add_db_host';
+    const V_SUSPEND_DB_BASE 			= 'v_suspend_db_base';
+    const V_SUSPEND_DB_BASES 			= 'v_suspend_db_bases';
+    const V_UNSUSPEND_DB_BASE 			= 'v_unsuspend_db_base';
+    const V_UNSUSPEND_DB_BASES 			= 'v_unsuspend_db_bases';
+    const V_CHANGE_DB_PASSWORD 			= 'v_change_db_password';
+    const V_DEL_DB_BASE 				= 'v_del_db_base';
+    const V_DEL_DB_HOST 				= 'v_del_db_host';
+    const V_UPD_DB_BASE_DISK 			= 'v_upd_db_base_disk';
+    const V_UPD_DB_BASES_DISK 			= 'v_upd_db_bases_disk';
+    const PARAM_DELIMETER 				= ' ';
 
     /**
+     * Execute vesta command
      * 
+     * @param string $cms_command
+     * @param array $parameters
+     * @return string
      */
-    static function execute($cmd_command, $parameters=array()) {
-	$r = new Request();
-	$debug = $r->getParameter("debug", FALSE);
+    static function execute($cmd_command, $parameters=array()) 
+    {
+		$r = new Request();
+		$_DEBUG = $r->getParameter("debug", FALSE);
 
-        if (!isset($cmd_command)) {
+        if (!isset($cmd_command)) 
+        {
             throw new ProtectionException('No function name passed into Vesta::execute'); // TODO: move msg to Messages::
         }
 
         $params = array(
-            'sudo' => Config::get('sudo_path'),
-            'functions' => Config::get('vesta_functions_path'),
-	    'parameters' => implode("' '", $parameters),  
-	    //            'reply' => Config::get('response_type')
+            'sudo' 		 => Config::get('sudo_path'),
+            'functions'  => Config::get('vesta_functions_path'),
+			'parameters' => implode("' '", $parameters),  	    
         );
-
-
+	
+		// e.g.: /usr/bin/sudo /usr/local/vesta/bin/v_list_sys_users vesta json 
         $cmd = "{$params['sudo']} {$params['functions']}{$cmd_command} '{$params['parameters']}' {$params['reply']}";
-	// /usr/bin/sudo /usr/local/vesta/bin/v_list_sys_users vesta json 
+	
         exec($cmd, $output, $return);
 
-	$result = 0;
-	$result = array('status' => TRUE,
-			'data' => '',
-			'error_code' => '',
-			'error_message' => ''
-			);
-
-	if($debug)
-	  {
-	    $result['debug'] = array(
-				     "cmd" => $cmd,
-				     "output" => $output,
-				     "return" => $return
-				     );
-	    if($debug == 2)
-	      {
-		echo '<p>'.$cmd;
-		echo '<br> output: '; print_r($output);
-		echo '<br> return: '.$return;
-		echo '</p>';
-	      }
-	  }
-
-	if(!!(int)$return)
-	  { 
-	    $result['status'] = FALSE;
- 	    $result['error_code'] = (int)$return;
-	    $result['error_message'] = implode('', $output);
-	  }
-	else
-	  {
-	    $result['data'] = json_decode(implode('', $output), true);
-	  }
+		$result = 0;
+		$result = array('status' => TRUE,
+						'data' => '',
+						'error_code' => '',
+						'error_message' => ''
+		);
+
+		// TODO: please remove this later :)
+		if ($_DEBUG)
+		{
+			$result['debug'] = array(
+					 "cmd" => $cmd,
+					 "output" => $output,
+					 "return" => $return
+				 );
+			if ($debug == 2)
+			{
+				echo '<p>'.$cmd;
+				echo '<br> output: '; print_r($output);
+				echo '<br> return: '.$return;
+				echo '</p>';
+			}
+		}
+
+		if (!!(int)$return)
+		{ 
+			$result['status'] = FALSE;
+			$result['error_code'] = (int)$return;
+			$result['error_message'] = implode('', $output);
+		}
+		else
+		{
+			$result['data'] = json_decode(implode('', $output), true);
+		}
 	
-	return $result;
+		return $result;
     }  
 }

+ 14 - 4
web/vesta/core/exceptions/ProtectionException.class.php

@@ -5,17 +5,27 @@
  *
  * Thrown if unexpected action or behaviour detected
  *
+ * @author Malishev Dima <dima.malishev@gmail.com> 
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010
+ * @copyright vesta 2010-2011
  */
-class ProtectionException extends Exception {
+class ProtectionException extends Exception 
+{
     const CODE_GENERAL = 0;
 
-    public function __construct($message, $code=self::CODE_GENERAL, $previous=null) {
+	/**
+	 * Protection exception
+	 */
+    public function __construct($message, $code=self::CODE_GENERAL, $previous=null) 
+    {
         parent::__construct($message, $code, $previous);
     }
 
-    public function __toString() {
+	/**
+	 * Renders error message
+	 */
+    public function __toString() 
+    {
         print $this->message;
     }
 

+ 2 - 1
web/vesta/core/exceptions/SystemException.class.php

@@ -7,8 +7,9 @@
  * - system error occured
  * - unpredictable scenarios
  *
+ * @author Malishev Dima <dima.malishev@gmail.com>
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010
+ * @copyright vesta 2010-2011
  */
 class SystemException extends Exception {
     const CODE_GENERAL = 0;

+ 15 - 12
web/vesta/core/utils/Message.class.php

@@ -4,20 +4,23 @@
  * Messages container
  *
  * Contains messages, that are used in the code.
- *
+ * 
+ * @author Malishev Dima <dima.malishev@gmail.com> 
  * @author vesta, http://vestacp.com/
- * @copyright vesta 2010
+ * @copyright vesta 2010-2011
  */
-class Message {
-    const REQUEST_INVALID = 'Malformed request';
-    const GENERAL_ERROR = 'General protection fault';
-    const REQUEST_IS_NOT_POST = 'Request is not POST';
-    const METHOD_NOT_EXIST = 'Message not exist';
-    const INVALID_METHOD = 'Method Invalid';
-    const SYSTEM_ERROR = 'System Error';
-    const PROTECTION_ERROR = 'Protection error';
-
-    const ERROR = 'error';
+class Message 
+{
+	
+	const ERROR 				= 'error';
+    const REQUEST_INVALID 		= 'Malformed request';
+    const REQUEST_IS_NOT_POST 	= 'Request is not POST';
+    const GENERAL_ERROR 		= 'General protection fault';    
+    const METHOD_NOT_EXIST 		= 'Message not exist';
+    const INVALID_METHOD 		= 'Method Invalid';
+    const SYSTEM_ERROR 			= 'System Error';
+    const PROTECTION_ERROR 		= 'Protection error';
+    
 }
 
 ?>

+ 47 - 0
web/vesta/core/utils/error_logger.php

@@ -0,0 +1,47 @@
+<?php
+
+function error_dumper($errno, $errstr, $errfile, $errline)
+{
+    if (!(error_reporting() & $errno)) {
+        return;
+    }
+    
+    $log = fopen('/tmp/vesta.php.log', 'a+');
+    
+    switch ($errno) {
+    case E_USER_ERROR:
+        $o = "ERROR: [$errno] $errstr\n";
+        $o.= "  Fatal error on line $errline in file $errfile";
+        $o.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")\n";
+        $o.= "Aborting...\n";
+		fwrite($log, $o);
+		fclose($log);
+		exit(1);
+        break;
+
+    case E_USER_WARNING:
+        $o = "WARNING: [$errno] $errstr\n";
+        fwrite($log, $o);
+		fclose($log);
+	break;
+
+    case E_USER_NOTICE:
+        $o =  "NOTICE: [$errno] $errstr\n";
+        fwrite($log, $o);
+		fclose($log);
+	break;
+
+    default:
+        $o = "Unknown error type: [$errno] $errstr\n";
+        fwrite($log, $o);
+		fclose($log);
+	break;
+    }
+
+    /* Don't execute PHP internal error handler */
+    return true;
+}
+
+set_error_handler('error_dumper');
+
+?>