spaceworld 发表于 2013-3-18 11:09:25

vhms主机模块参考源代码

如何创建一个模块:
当前vhms有两个模块分类,域名注册以及主机模块。
分别对应vhms目录下的
modules/registrars
modules/servers
目录,如果要开发一个主机模块(以easypanel2为例),则需要在modules/servers/目录下创建一个easypanel2的目录,并且要建立一个easypanel2.php的文件。模块代码就放在easypanel2.php文件中。


模块代码注意事项:
模块代码里的函数命令方式是以:
模块名_
开头,例:
easypanel2_ConfigOptions

并且模块代码中有以下函数是必需存在的,具体看以下参考代码:
<?php
/**
* 必需的函数,获取模块配置
* @return multitype:multitype:string
*/
function easypanel2_ConfigOptions()
{
      $configarray = array(
                        "easypanel产品名称"      => array( "Type" => "text","size"=>'12')
      );
      return $configarray;
}
/**
* 必需的,验证账号的合法性
* @param unknown_type $params
* @return string
*/
function easypanel2_CheckName($params)
{
      if ($params['username']=="") {
                return "username cann't be empty";
      }
      $epsaveuser = array('root','mysql','kangle');
      if (in_array($params['username'], $epsaveuser)) {
                return 'failed';
      }
      if (!preg_match('/^{2,11}$/', $params['username'])) {
                return 'failed';
      }
      return 'success';
}
/**
* 创建
* @param unknown_type $params
* @return string
*/
function easypanel2_CreateAccount($params)
{
      if ($params['username']=="") {
                return "username cann't be empty";
      }
      $e = easypanel2_makeapi($params["serverip"], $params["serveraccesshash"], 'add_vh');
      $e->addParam('name',$params['username']);
      $e->addParam('passwd', $params["password"]);
      $e->addParam('product_name', $params['configoption1']);
      $e->addParam('init', 1);
      $result = $e->call(30);
      return easypanel2_result($result);
}
/**
* 修改
* @param unknown_type $params
* @return string
*/
function easypanel2_ChangePackage($params)
{
      if ($params['product_function'] == 'renew') {
                return 'success';
      }
      if ($params['username']=="") {
                return "username cann't be empty";
      }
      $e = easypanel2_makeapi($params["serverip"], $params["serveraccesshash"], 'add_vh');
      $e->addParam('name',$params['username']);
      $e->addParam('product_name', $params['configoption1']);
      $e->addParam('init', 1);
      $result = $e->call(30);
      return easypanel2_result($result);
}
/**
* 修改状态开通空间
* @param unknown_type $params
* @return string
*/
function easypanel2_UnsuspendAccount($params)
{
      if ($params['username']=="") {
                return "username cann't be empty";
      }
      $e = easypanel2_makeapi($params["serverip"], $params["serveraccesshash"], 'update_vh');
      $e->addParam('name',$params['username']);
      $e->addParam('status', 0);
      $result = $e->call(30);
      return easypanel2_result($result);
      
}
/**
* 删除空间
* @param unknown_type $params
*/
function easypanel2_TerminateAccount($params)
{
      if ($params['product_function'] == 'renew') {
                return 'success';
      }
      if ($params['username']=="") {
                return "username cann't be empty";
      }
      $e = easypanel2_makeapi($params["serverip"], $params["serveraccesshash"], 'del_vh');
      $e->addParam('name',$params['username']);
      $result = $e->call(30);
      return easypanel2_result($result);
}
/**
*
* 修改密码
* @param unknown_type $params
* @return string
*/
function easypanel2_ChangePassword($params)
{
      if ($params['username']=="") {
                return "username cann't be empty";
      }
      $e = easypanel2_makeapi($params["serverip"], $params["serveraccesshash"], 'update_vh');
      $e->addParam('name',$params['username']);
      $e->addParam('passwd', $params["password"]);
      $e->addParam('edit', 1);
      $result = $e->call(30);
      return easypanel2_result($result);
}
/**
* 暂停空间
* @param unknown_type $params
* @return string
*/
function easypanel2_SuspendAccount($params)
{
      if ($params['username']=="") {
                return "username cann't be empty";
      }
      $e = easypanel2_makeapi($params["serverip"], $params["serveraccesshash"], 'update_vh');
      $e->addParam('name',$params['username']);
      $e->addParam('status', 1);
      return easypanel2_result($e->call(30));
}
/**
* 前台自动登陆
* @param unknown_type $params
*/
function easypanel2_ClientArea($params)
{
      $code = "<body onLoad='document.easypanel_login.submit()'>";
      $code .= '<form action="http://'.$params["serverip"].':3312/vhost/?c=session&a=login" method="post" name="easypanel_login"target="_blank">
                <input type="hidden" name="username" value="'.$params["username"].'" />
                <input type="hidden" name="passwd" value="'.$params["password"].'" />
                <!--<input type="submit" value="登录" />-->
                </form>';
      $code .= '</body>';
      echo $code;

}
function easypanel2_AdminCall($params)
{
      $fn = 'easypanel2_'.$params['fn'];
      if (!function_exists($fn)) {
                return 'failed';
      }
      return call_user_func($fn,$params);
}
function easypanel2_ClientCall($params)
{
      $fn = 'easypanel2_'.$params['fn'];
      if (!function_exists($fn)) {
                return 'failed';
      }
      return call_user_func($fn,$params);
}
/**
* 必需的,管理后台登陆的按钮。
* @param unknown_type $params
* @return string
*/
function easypanel2_AdminLink($params)
{
      $code = '<form action="http://'.$params["serverip"].':3312/admin/?c=session&a=login" method="post" name="easypanel_login" target="_blank">
                <input type="hidden" name="username" value="'.$params["serverusername"].'" />
                <input type="hidden" name="passwd" value="'.$params["serverpassword"].'" />
                <input type="submit" type="hidden" value="登录管理" />
                </form>';
      return $code;
}
function easypanel2_LoginLink($params)
{

      echo "<a href=\"http://".$params["serverip"].":3312/vhost/?username=".$params["username"]."\" target=\"_blank\" style=\"color:#cc0000\">登录easypanel</a>";

}
/**
* 模块私有函数,用于创建API
* @param unknown_type $host
* @param unknown_type $skey
* @param unknown_type $a
* @param unknown_type $c
* @return Easypanel2
*/
function easypanel2_makeapi($host,$skey,$a,$c='whm')
{
      $easypanel2_port = $GLOBALS['easypanel2_port'] ? $GLOBALS['easypanel2_port'] : 3312;
      $e = new Easypanel2($host, $easypanel2_port);
      $e->setControl($c, $a);
      $e->setAuth($skey);
      return $e;
}
/**
* 模块私有函数,处理返回信息
* @param unknown_type $result
* @return string
*/
function easypanel2_result($result)
{
      if ($result === false) {
                return 'failed';
      }
      $xml = new SimpleXMLElement($result);
      foreach ($xml->children() as $child) {
                if ($child->getName() == 'result') {
                        $status = intval($child['status']);
                }
      }
      switch ($status) {
                case 200:
                        return 'success';
                case 403:
                        return 'skey error';
                default :
                        return 'failed';
      }
}
/**
* 模块私有类
* @author Administrator
*
*/
class Easypanel2
{
      private $url = '';
      private $param;
      private $method = 'POST';
      private $c;
      private $a;
      public function __construct($host,$port,$apifile='/api/index.php')
      {
                $this->url = 'http://'.$host.':'.$port.$apifile;
      }
      /**
         * new 后第一步
         * @param unknown_type $c
         * @param unknown_type $a
         */
      public function setControl($c,$a)
      {
                $this->c = $c;
                $this->a = $a;
                $this->url .= '?c='.$c.'&a='.$a;
      }
      /**
         * 第二步
         * @param unknown_type $skey
         */
      public function setAuth($skey)
      {
                $r = rand(111,99999);
                $s = md5($this->a.$skey.$r);
                $this->url .= '&r='.$r.'&s='.$s;
      }
      public function addParam($name,$value)
      {
                if ($this->param != '') {
                        $this->param .= '&';
                }
                $this->param .= $name .'=' .$value;
      }
      public function call($timeout)
      {
                $opts['http'] = array('method'=>$this->method);
                if ($this->method == 'POST') {
                        $opts['http']['content'] = $this->param;
                }else {
                        $this->url .= '&'.$this->param;
                }
                if ($timeout > 0) {
                        $opts['http']['timeout'] = $timeout;
                }
                //die($this->url);
                $result = @file_get_contents($this->url, false, stream_context_create($opts));
                return $result;
      }
}

小樱 发表于 2014-5-19 11:22:57

感谢,拿走

零℃科技 发表于 2014-8-11 19:07:32

能不能写一点视频出来

才龙宽 发表于 2016-1-18 23:25:11

楼主高人啊,我先收藏了
页: [1]
查看完整版本: vhms主机模块参考源代码