TRUE, 'create_domains'=>FALSE, 'manage_phosting'=>FALSE, 'manage_php_safe_mode'=>FALSE, 'manage_sh_access'=>FALSE, 'manage_not_chroot_shell'=>FALSE, 'manage_quota'=>TRUE, 'manage_subdomains'=>TRUE, 'manage_domain_aliases'=>FALSE, 'manage_log'=>TRUE, 'manage_anonftp'=>FALSE, 'manage_crontab'=>FALSE, 'change_limits'=>FALSE, 'manage_dns'=>TRUE, 'manage_webapps'=>FALSE, 'manage_webstat'=>TRUE, 'manage_maillists'=>TRUE, 'manage_spamfilter'=>FALSE, 'manage_virusfilter'=>FALSE, 'allow_local_backups'=>FALSE, 'allow_ftp_backups'=>TRUE, 'remote_access_interface'=>FALSE, 'site_builder'=>FALSE, 'manage_performance'=>FALSE, 'manage_dashboard'=>TRUE, 'select_db_server'=>FALSE, ); // @todo Get this out of the DB private $limits = array( 'resource-policy'=>'notify', 'max_dom'=>-1, 'max_subdom'=>-1, 'max_dom_aliases'=>-1, 'disk_space_soft'=>-1, 'disk_space'=>-1, 'max_traffic_soft'=>-1, 'max_traffic'=>-1, 'max_wu'=>-1, 'max_db'=>-1, 'max_box'=>-1, 'mbox_quota'=>51200000, 'max_redir'=>-1, 'max_mg'=>-1, 'max_resp'=>-1, 'max_maillists'=>-1, 'max_webapps'=>0, 'expiration'=>-1, ); // @todo Get this out of the DB private $ippool = array( '111.67.13.20'=>'shared', ); private $curlopts = array( CURLOPT_CONNECTTIMEOUT => 60, CURLOPT_FAILONERROR => TRUE, CURLOPT_FOLLOWLOCATION => FALSE, CURLOPT_HEADER => FALSE, CURLOPT_HTTPPROXYTUNNEL => FALSE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 30, CURLOPT_SSL_VERIFYHOST => FALSE, CURLOPT_SSL_VERIFYPEER => FALSE, CURLOPT_VERBOSE => TRUE, ); public function __construct(Model_Host_Server $hso) { $this->hso = $hso; $this->xml = XML::factory(null,'plesk'); $this->packet = $this->xml->add_node('packet','',array('version'=>$this->protocol)); } private function server_command(XML $xml) { $hs = $this->hso->config(); $request = Request::factory(sprintf('%s/%s',$this->hso->manage_url,$this->path)) ->method('POST'); $request->get_client()->options(Arr::merge($this->curlopts,array( CURLOPT_HTTPHEADER => array( 'HTTP_AUTH_LOGIN: '.$hs['user'], 'HTTP_AUTH_PASSWD: '.$hs['pass'], 'Content-Type: text/xml', ), CURLOPT_POSTFIELDS => $this->render($xml), ))); $response = $request->execute(); return XML::factory(null,'plesk',$response->body()); } /** * Get a Client Configuration */ public function get_client(Model_Service $so) { $client = $this->packet->add_node('client'); $get = $client->add_node('get'); $filter = $get->add_node('filter'); $filter->add_node('login',$so->plugin()->host_username); $dataset = $get->add_node('dataset'); $dataset->add_node('gen_info'); $dataset->add_node('stat'); $dataset->add_node('permissions'); $dataset->add_node('limits'); $dataset->add_node('ippool'); return $this->server_command($this->xml); } /** * Get a Server Configuration */ public function get_service(Model_Service $so) { $client = $this->packet->add_node('domain'); $get = $client->add_node('get'); $filter = $get->add_node('filter'); $filter->add_node('domain-name',strtolower($so->name())); $dataset = $get->add_node('dataset'); $dataset->add_node('hosting'); $dataset->add_node('limits'); return $this->server_command($this->xml); } /** * Add a new client to the host server */ public function add_client(Model_Service $so) { $client_template = 'DefaultClient'; $reseller_id = $so->affiliate->host_server_affiliate->host_username; $client = $this->packet->add_node('client'); $add = $client->add_node('add'); $gen_info = $add->add_node('gen_info'); $gen_info->add_node('cname',$so->account->company); $gen_info->add_node('pname',sprintf('%s %s',$so->account->first_name,$so->account->last_name)); $gen_info->add_node('login',$so->plugin()->host_username); $gen_info->add_node('passwd',$so->plugin()->host_password); $gen_info->add_node('status',0); $gen_info->add_node('email',$so->account->email); if ($reseller_id) $gen_info->add_node('owner-login',$reseller_id); return $this->server_command($this->xml); } public function add_service(Model_Service $so) { // @todo This should come from the DB. $host_ip = '111.67.13.20'; $domain_template = 'Default Domain'; $domain = $this->packet->add_node('domain'); $add = $domain->add_node('add'); $gen_setup = $add->add_node('gen_setup'); $gen_setup->add_node('name',strtolower($so->name())); $gen_setup->add_node('owner-login',$so->plugin()->host_username); $gen_setup->add_node('htype','vrt_hst'); $gen_setup->add_node('ip_address',$host_ip); $gen_setup->add_node('status','0'); $hosting = $add->add_node('hosting'); $vrt_host = $hosting->add_node('vrt_hst'); $property = $vrt_host->add_node('property'); $property->add_node('name','ftp_login'); $property->add_node('value',$so->plugin()->ftp_username); $property = $vrt_host->add_node('property'); $property->add_node('name','ftp_password'); $property->add_node('value',$so->plugin()->ftp_password); $vrt_host->add_node('ip_address',$host_ip); $add->add_node('template-name',$domain_template); return $this->server_command($this->xml); } // @todo not sure if this is actually working as desired public function setlimits(Model_Service $so) { $client = $this->packet->add_node('client'); // Permissions $set = $client->add_node('set'); $filter = $set->add_node('filter'); $filter->add_node('login',$so->plugin()->host_username); $values = $set->add_node('values'); $x = $values->add_node('permissions'); foreach ($this->permissions as $k=>$v) { $l = $x->add_node('permission'); $l->add_node('name',$k); $l->add_node('value',$v==TRUE?'true':'false'); } // Limits $set = $client->add_node('set'); $filter = $set->add_node('filter'); $filter->add_node('login',$so->plugin()->host_username); $values = $set->add_node('values'); $x = $values->add_node('limits'); foreach ($this->limits as $k=>$v) { $l = $x->add_node('limit'); $l->add_node('name',$k); $l->add_node('value',$v); } return $this->server_command($this->xml); } public function setip($id) { $client = $this->packet->add_node('client'); $ip = $client->add_node('ippool_add_ip'); $ip->add_node('client_id',$id); foreach ($this->ippool as $k=>$v) $ip->add_node('ip_address',$k); return $this->server_command($this->xml); } public function disablemail($id) { $client = $this->packet->add_node('mail'); $disable = $client->add_node('disable'); $disable->add_node('domain_id',$id); return $this->server_command($this->xml); } private function render(XML $xml) { return preg_replace('/<\/?plesk>/','',(string)$xml->render(FALSE)); } } ?>