Files
keliopanel-v4/system/api/vhost.api.php
2016-02-21 14:28:40 +01:00

297 lines
9.9 KiB
PHP
Executable File

<?php
/**
* @class action
* @brief Manage VirtualHosts
* @author Vincent Giersch
* @date 28/08/2009
* @modified Xavier Perrissoud
* @date 13/10/2009
* @version 0.1
* @todo Uncomment the action creation in createVhost()
* @todo Review the history entry adding in createVhost() (static-like call to a non-static method of class history)
*/
class vhost
{
private $vhost_records = null;
/**
* @brief Add a VirtualHost for the current user
* @param host : Host which is related to the virtualhost
* @param doc_root : The root of the virtualhost
* @param active : boolean for activation at creation time
* @param server_admin : e-mail address of the server's admin (optional)
* @param php_values : array of additionnal options related to the vhost (optional)
* @return -2 : The vhost already exists
* @return -1 : Quota of vhosts is reached
* @return true : VirtualHost successfully added
*/
public function userAddVhost( $host, $doc_root, $active, $server_admin = null, $php_values = null )
{
$hosting_id = $_SESSION['hosting']->information_hosting->id;
$http_service = $_SESSION['hosting']->information_hosting->http_ip;
$server_admin = ( is_null($server_admin) ? APACHE_SERVER_ADMIN : $server_admin );
$php_values = ( is_null($php_values) ) ? array() : $php_values;
// Quota
if ( $_SESSION['hosting']->information_hosting->offer_virtualhosts_number >= 0 ) {
$current_number_vhosts = $this->countVhosts( $_SESSION['hosting']->information_hosting->id );
if ( $current_number_vhosts >= $_SESSION['hosting']->information_hosting->offer_virtualhosts_number ) return -1;
}
// Check existence of the VirtualHosts
if ( $this->checkVhostExistence($host) ) return -2;
$this->createVhost(
$hosting_id,
$http_service,
$host,
$doc_root,
$active,
$server_admin,
$php_values
);
return true;
}
/**
* @brief Create VirtualHosts
* @param hosting_id : Id of the hosting
* @param service_id : Id of the HTTP service
* @param host : Host related to the virtualhost
* @param doc_root : The root of the virtualhost
* @param active : boolean for activation at creation time
* @param server_admin : the e-mail address of the member
* @param php_values : array of additionnal options related to the vhost (optionnal)
* @return true if successfull, false otherwise
*/
private function createVhost( $hosting_id, $service_id, $host, $doc_root, $active, $server_admin, $php_values)
{
// First, try to add the VHost in database
$hosting_id = $_SESSION['database']->clearString($hosting_id);
$host = $_SESSION['database']->clearString($host);
$doc_root = $_SESSION['database']->clearString($doc_root);
$active = $_SESSION['database']->clearString( strtolower($active));
$server_admin = $_SESSION['database']->clearString($server_admin);
$clean_php_values=array();
foreach ( $php_values as $key=>$value)
{
$key = $_SESSION['database']->clearString($key);
$value = $_SESSION['database']->clearString($value);
$clean_php_values[$key] = $value;
}
$values = serialize( $clean_php_values);
$req = "INSERT INTO service_vhost
SET
created_at = CURRENT_TIMESTAMP,
hosting_id = '$hosting_id',
host = '$host',
doc_root = '$doc_root',
is_active = '$active',
server_admin = '$server_admin',
php_values = '$values'";
$_SESSION['database']->execRequest($req);
$vhost = $_SESSION['database']->getInsertId();
if ( $active == 'true' )
{
// Add action
$data = array();
$data['action'] = 'create_vhost';
$data['host'] = $host;
$data['vhost_id'] = $vhost;
$data['doc_root'] = $doc_root;
$data['server_admin'] = $server_admin;
$data['php_values'] = $values;
// $action = action::userAddAction($service_id, $data);
}
// save action to history
history::add("history_action_new_domain",$_SESSION['user']->information_user->userid);
return true;
}
/**
* @brief Delete a VirtualHost
* @param host : Host which is related to the virtualhost
*/
public function userDeleteVhost( $host )
{
$hosting_id = $_SESSION['hosting']->information_hosting->id;
$http_service = $_SESSION['hosting']->information_hosting->http_ip;
return $this->deleteVhost(
$hosting_id,
$http_service,
$host
);
}
/* @brief Delete VirtualHosts
* @param hosting_id : Id of the hosting
* @param service_id : Id of the HTTP service
* @param host : Host which is related to the virtualhost
* @return -1 : Host not found
*/
private function deleteVhost( $hosting_id, $service_id, $host)
{
// Check if the hosts exists
$hosting_id = $_SESSION['database']->clearString($hosting_id);
if ( !$this->checkVhostExistence($host, false, "AND hosting_id = '$hosting_id'") ) return -1;
// Add action
$data = array();
$data['action'] = 'delete_vhost';
$data['host'] = $host;
$action = action::userAddAction($service_id, $data);
// Add Vhost to the table service_vhost
$host = $_SESSION['database']->clearString($host);
$req = "DELETE FROM service_vhost
WHERE
host = '$host'";
$_SESSION['database']->execRequest($req);
}
/**
* @brief Active a deactivated VirtualHost
* @param host : Host which is related to the virtualhost
* @param is_vhost_id : optional, if the 'host' is the id of the vhost (default false)
* @return -1 : Host not found
* @return true : Ok
*/
public function userActiveVhost( $host, $is_vhost_id = false )
{
// Check if the VirtualHost exists
$hosting_id = $_SESSION['hosting']->information_hosting->id;
$http_service = $_SESSION['hosting']->information_hosting->http_ip;
if ( !$this->checkVhostExistence($host, $is_vhost_id, "AND hosting_id = '$hosting_id'") ) return -1;
// Active the Virtualhost
$this->activeOrNotVhost($host, true, $is_vhost_id);
}
/**
* @brief Desactive an actived VirtualHost
* @param host : Host which is related to the virtualhost
* @param is_vhost_id : optional, if the 'host' is the id of the vhost (default false)
* @return -1 : Host not found
* @return true : Ok
*/
public function userDesactiveVhost( $host, $is_vhost_id = false )
{
// Check if the VirtualHost exists
$hosting_id = $_SESSION['hosting']->information_hosting->id;
$http_service = $_SESSION['hosting']->information_hosting->http_ip;
if ( !$this->checkVhostExistence($host, $is_vhost_id, "AND hosting_id = '$hosting_id'") ) return -1;
// Active the Virtualhost
$this->activeOrNotVhost($host, false, $is_vhost_id);
}
/**
* @brief Active a VirtualHost
* @param host : VirtualHost to active
* @param active : bool(true) : Active the VirtualHost / bool(false) : Desactive the VirtualHost
* @param is_vhost_id : optional, if the 'host' is the id of the vhost (default true)
* @return always true
*/
private function activeOrNotVhost( $host , $active, $is_vhost_id = true )
{
$active = $_SESSION['database']->clearString($active);
$host = $_SESSION['database']->clearString($host);
if ( $is_vhost_id == true )
$req = "UPDATE service_vhost
SET
is_active = '$active'
WHERE id = '$host'";
else
$req = "UPDATE service_vhost
SET
is_active = '$active'
WHERE host = '$host'";
return true;
}
/**
* @brief Count VirtualHosts for one hosting
* @param hosting_id : Id of the hosting
* @return Number of vhsost
*/
private function countVhosts( $hosting_id )
{
if( !is_null($this->vhost_records) ) {
return $this->vhost_records;
}
$hosting_id = $_SESSION['database']->clearString($hosting_id);
$req = "SELECT COUNT(id) AS total FROM service_vhost WHERE hosting_id = '$hosting_id'";
$query = $_SESSION['database']->fetchObject($req);
$this->vhost_records = $query[0]->total;
return $query[0]->total;
}
/**
* @brief Check if the Vhost exists
* @param host : Host is checking
* @param is_vhost_id : optional, if the 'host' is the id of the vhost (default false)
* @param additionnal_param : optional, add a WHERE clause
* @return true if the vhosts exists
* @return false if the vhost doesn't exists
*/
private function checkVhostExistence( $host, $is_vhost_id = false, $additionnal_param = null )
{
$host = $_SESSION['database']->clearString($host);
if( $is_vhost_id == true )
$req = "SELECT COUNT(id) AS exist FROM service_vhost WHERE id = '$host' " . $additionnal_param;
else
$req = "SELECT COUNT(id) AS exist FROM service_vhost WHERE host = '$host' " . $additionnal_param;
$query = $_SESSION['database']->fetchObject($req);
if( $query[0]->exist > 0 ) return true;
else return false;
}
/**
* @brief Get number of vhosts for the current hosting (and the current user), regarding the total count of records and the count of items to be shown per page
* @return number of pages availables
*/
public function userCountTotalPages()
{
$hosting_id = $_SESSION['hosting']->information_hosting->id;
$items_count = $this->countVhosts( $hosting_id );
$pages_count = intval($items_count / RECORD_BY_PAGE);
if ( ($items_count % RECORD_BY_PAGE) != 0 ) {
$pages_count++;
}
return $pages_count;
}
/**
* @brief List all vhosts related to the current hosting (and the current user)
* @param hosting_id ID of the current hosting
* @param start First record to extract (optional)
* @param extract_number Number of record to extract (optional)
* @return array or null if empty
*/
public function userListVHosts( $hosting_id, $start = null, $extract_number = null )
{
$hosting_id = $_SESSION['database']->clearString($hosting_id);
if ( !is_null($start) and !is_null($extract_number)) {
$start = $_SESSION['database']->clearString($start);
$extract_number = $_SESSION['database']->clearString($extract_number);
$limit = " LIMIT $start, $extract_number";
} else $limit = null;
$req = "SELECT id, UNIX_TIMESTAMP(created_at) AS created_at, host, doc_root, is_active, server_admin
FROM service_vhost WHERE hosting_id = '$hosting_id' ORDER BY created_at$limit";
$query = $_SESSION['database']->fetchObject($req);
return $query;
}
}
?>