示例#1
0
/**
* Delete domain with all sub items (usage in admin and reseller)
* @param integer $domain_id
* @param string $goto users.php or manage_users.php
* @param boolean $breseller double check by reseller=current user
*/
function delete_domain($domain_id, $goto, $breseller = false)
{
    $cfg = EasySCP_Registry::get('Config');
    $sql = EasySCP_Registry::get('Db');
    // Get uid and gid of domain user
    $query = "\n\t\tSELECT\n\t\t\t`domain_uid`,\n\t\t\t`domain_gid`,\n\t\t\t`domain_admin_id`,\n\t\t\t`domain_name`,\n\t\t\t`domain_created_id`\n\t\tFROM\n\t\t\t`domain`\n\t\tWHERE\n\t\t\t`domain_id` = ?\n\t";
    if ($breseller) {
        $reseller_id = $_SESSION['user_id'];
        $query .= " AND `domain_created_id` = ?";
        $res = exec_query($sql, $query, array($domain_id, $reseller_id));
    } else {
        $res = exec_query($sql, $query, $domain_id);
    }
    $data = $res->fetchRow();
    if (empty($data['domain_uid']) || empty($data['domain_admin_id'])) {
        set_page_message(tr('Wrong domain ID!'), 'error');
        user_goto($goto);
    }
    $domain_admin_id = $data['domain_admin_id'];
    $domain_name = $data['domain_name'];
    $domain_uid = $data['domain_uid'];
    $domain_gid = $data['domain_gid'];
    if (!$breseller) {
        $reseller_id = $data['domain_created_id'];
    }
    // Mail users:
    $query = "\n\t\tUPDATE\n\t\t\t`mail_users`\n\t\tSET\n\t\t\t`status` = ?\n\t\tWHERE\n\t\t\t`domain_id` = ?\n\t\t;\n\t";
    exec_query($sql, $query, array($cfg->ITEM_DELETE_STATUS, $domain_id));
    send_request('130 MAIL ' . $domain_id);
    // Delete all protected areas related data (areas, groups and users)
    $query = "\n\t\tDELETE\n\t\t\t`areas`,\n\t\t\t`users`,\n\t\t\t`groups`\n\t\tFROM\n\t\t\t`domain` AS `customer`\n\t\tLEFT JOIN\n\t\t\t`htaccess` AS `areas` ON `areas`.`dmn_id` = `customer`.`domain_id`\n\t\tLEFT JOIN\n\t\t\t`htaccess_users` AS `users` ON `users`.`dmn_id` = `customer`.`domain_id`\n\t\tLEFT JOIN\n\t\t\t`htaccess_groups` AS `groups` ON `groups`.`dmn_id` = `customer`.`domain_id`\n\t\tWHERE\n\t\t\t`customer`.`domain_id` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_id);
    // Delete subdomain aliases:
    $alias_a = array();
    $query = "\n\t\tSELECT\n\t\t\t`alias_id`\n\t\tFROM\n\t\t\t`domain_aliasses`\n\t\tWHERE\n\t\t\t`domain_id` = ?\n\t\t;\n\t";
    $res = exec_query($sql, $query, $domain_id);
    while (!$res->EOF) {
        $alias_a[] = $res->fields['alias_id'];
        $res->moveNext();
    }
    if (count($alias_a) > 0) {
        $query = "\n\t\t\tUPDATE\n\t\t\t\t`subdomain_alias`\n\t\t\tSET\n\t\t\t\t`status` = ?\n\t\t\tWHERE\n\t\t\t\t`alias_id` IN (\n\t\t";
        $query .= implode(',', $alias_a);
        $query .= ")";
        exec_query($sql, $query, $cfg->ITEM_DELETE_STATUS);
    }
    // Delete SQL databases and users
    $query = "\n\t\tSELECT\n\t\t\t`sqld_id`\n\t\tFROM\n\t\t\t`sql_database`\n\t\tWHERE\n\t\t\t`domain_id` = ?\n\t\t;\n\t";
    $res = exec_query($sql, $query, $domain_id);
    while (!$res->EOF) {
        delete_sql_database($sql, $domain_id, $res->fields['sqld_id']);
        $res->moveNext();
    }
    // Domain aliases:
    $query = "\n\t\tUPDATE\n\t\t\tdomain_aliasses\n\t\tSET\n\t\t\tstatus =  ?\n\t\tWHERE\n\t\t\tdomain_id = ?\n\t\t;\n\t";
    exec_query($sql, $query, array($cfg->ITEM_DELETE_STATUS, $domain_id));
    // Remove domain traffic
    $query = "\n\t\tDELETE FROM\n\t\t\t`domain_traffic`\n\t\tWHERE\n\t\t\t`domain_id` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_id);
    // Set domain deletion status
    $query = "\n\t\tUPDATE\n\t\t\t`domain`\n\t\tSET\n\t\t\t`status` = 'delete'\n\t\tWHERE\n\t\t`domain_id` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_id);
    // Set domain subdomains deletion status
    $query = "\n\t\tUPDATE\n\t\t\t`subdomain`\n\t\tSET\n\t\t\t`status` = ?\n\t\tWHERE\n\t\t\t`domain_id` = ?\n\t\t;\n\t";
    exec_query($sql, $query, array($cfg->ITEM_DELETE_STATUS, $domain_id));
    // --- Activate daemon ---
    send_request('110 DOMAIN domain ' . $domain_id);
    // Delete FTP users:
    $query = "\n\t\tDELETE FROM\n\t\t\t`ftp_users`\n\t\tWHERE\n\t\t\t`uid` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_uid);
    // Delete FTP groups:
    $query = "\n\t\tDELETE FROM\n\t\t\t`ftp_group`\n\t\tWHERE\n\t\t\t`gid` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_gid);
    // Delete EasySCP login:
    $query = "\n\t\tDELETE FROM\n\t\t\t`admin`\n\t\tWHERE\n\t\t\t`admin_id` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_admin_id);
    // Delete the quota section:
    $query = "\n\t\tDELETE FROM\n\t\t\t`quotalimits`\n\t\tWHERE\n\t\t\t`name` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_name);
    // Delete the quota section:
    $query = "\n\t\tDELETE FROM\n\t\t\t`quotatallies`\n\t\tWHERE\n\t\t\t`name` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_name);
    // Remove support tickets:
    $query = "\n\t\tDELETE FROM\n\t\t\t`tickets`\n\t\tWHERE\n\t\t\tticket_from = ?\n\t\tOR\n\t\t\tticket_to = ?\n\t\t;\n\t";
    exec_query($sql, $query, array($domain_admin_id, $domain_admin_id));
    // Delete user gui properties
    $query = "\n\t\tDELETE FROM\n\t\t\t`user_gui_props`\n\t\tWHERE\n\t\t\t`user_id` = ?\n\t\t;\n\t";
    exec_query($sql, $query, $domain_admin_id);
    write_log($_SESSION['user_logged'] . ': deletes domain ' . $domain_name);
    update_reseller_c_props($reseller_id);
    $_SESSION['ddel'] = '_yes_';
    user_goto($goto);
}
function rm_rf_user_account($id_user)
{
    global $sql, $cfg;
    // get domain user data
    $query = <<<SQL_QUERY
        select
            domain_id,
            domain_name,
            domain_gid,
            domain_created_id
        from
            domain
        where
            domain_admin_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($id_user));
    $domain_id = $rs->fields['domain_id'];
    $domain_name = $rs->fields['domain_name'];
    $domain_gid = $rs->fields['domain_gid'];
    $domain_created_id = $rs->fields['domain_created_id'];
    // we have all needed user data - let's delete all data for this user
    substract_from_reseller_props($domain_created_id, $domain_id);
    // BEGIN - DELETE ALL SYSTEM ENTRIES FOR THIS USER
    //fist we'll delete all FTP Accounts
    //delete all FTP Accounts
    $query = <<<SQL_QUERY
          delete from
              ftp_users
          where
              gid = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($domain_gid));
    while (!$rs->EOF) {
        $rs->MoveNext();
    }
    // delete the group
    $query = <<<SQL_QUERY
    \t    delete from
        \t    ftp_group
        \twhere
            \tgid = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($domain_gid));
    //let's delete all Subdomains for this user
    $delete_status = $cfg['ITEM_DELETE_STATUS'];
    $query = <<<SQL_QUERY
    \t    update
        \t    subdomain
\t        set
    \t        subdomain_status = ?
        \twhere
            \tdomain_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($delete_status, $domain_id));
    //let's delete all domain aliases for this user
    $query = <<<SQL_QUERY
        update
            domain_aliasses
        set
            alias_status = ?
        where
            domain_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($delete_status, $domain_id));
    while (!$rs->EOF) {
        $rs->MoveNext();
    }
    //let's delete all mail accounts for this user
    $query = <<<SQL_QUERY
    \t    update
        \t    mail_users
\t        set
    \t        status = ?
        \twhere
            \tdomain_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($delete_status, $domain_id));
    // delete all htaccess entries for this user
    $query = <<<SQL_QUERY
    \t    delete from
        \t    htaccess
        \twhere
            \tdmn_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($domain_id));
    $query = <<<SQL_QUERY
    \t    delete from
        \t    htaccess_groups
        \twhere
            \tdmn_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($domain_id));
    $query = <<<SQL_QUERY
    \t    delete from
        \t     htaccess_users
        \twhere
            \tdmn_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($domain_id));
    // end of delete htaccess entires
    while (!$rs->EOF) {
        $rs->MoveNext();
    }
    // Lets Delete SQL DBs and Users
    $query = <<<SQL_QUERY
    \tselect
\t\t\tsqld_id
    \tfrom
        \tsql_database
    \twhere
        \tdomain_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($domain_id));
    while (!$rs->EOF) {
        $db_id = $rs->fields['sqld_id'];
        delete_sql_database($sql, $domain_id, $db_id);
        $rs->MoveNext();
    }
    // END - DELETE ALL SYSTEM ENTRIES FOR THIS USER
    // BEGIN - DELETE ALL GUI ENTRIES FOR THIS USER
    // delete the layout settings
    $query = <<<SQL_QUERY
    \t    delete from
        \t    user_gui_props
        \twhere
            \tuser_id = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($id_user));
    // update reseller props
    //delete all tickets for this user
    $query = <<<SQL_QUERY
    \t    delete from
        \t    tickets
        \twhere
              ticket_from = ?
            or
              ticket_to = ?
SQL_QUERY;
    $rs = exec_query($sql, $query, array($id_user, $id_user));
    //let's delete the main domain for this user
    $query = <<<SQL_QUERY
    \t    update
        \t    domain
\t        set
    \t        domain_status = ?
        \twhere
            \tdomain_admin_id = ?

SQL_QUERY;
    $rs = exec_query($sql, $query, array($delete_status, $id_user));
    // delete the user acount
    $query = <<<SQL_QUERY
    \t    delete from
        \t    admin
        \twhere
            \tadmin_id = ?

SQL_QUERY;
    $rs = exec_query($sql, $query, array($id_user));
}
示例#3
0
 * Copyright (C) 2010-2016 by Easy Server Control Panel - http://www.easyscp.net
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 * @link 		http://www.easyscp.net
 * @author 		EasySCP Team
 */
require '../../include/easyscp-lib.php';
check_login(__FILE__);
if (isset($_GET['id'])) {
    $db_id = $_GET['id'];
} else {
    user_goto('sql_manage.php');
}
$dmn_id = get_user_domain_id($_SESSION['user_id']);
check_db_sql_perms($sql, $db_id);
delete_sql_database($sql, $dmn_id, $db_id);
set_page_message(tr('SQL database was removed successfully!'), 'info');
user_goto('sql_manage.php');
示例#4
0
 *
 * The Original Code is "VHCS - Virtual Hosting Control System".
 *
 * The Initial Developer of the Original Code is moleSoftware GmbH.
 * Portions created by Initial Developer are Copyright (C) 2001-2006
 * by moleSoftware GmbH. All Rights Reserved.
 *
 * Portions created by the ispCP Team are Copyright (C) 2006-2010 by
 * isp Control Panel. All Rights Reserved.
 *
 * Portions created by the i-MSCP Team are Copyright (C) 2010-2016 by
 * i-MSCP - internet Multi Server Control Panel. All Rights Reserved.
 */
/***********************************************************************************************************************
 * Main
 */
require_once 'imscp-lib.php';
iMSCP_Events_Aggregator::getInstance()->dispatch(iMSCP_Events::onClientScriptStart);
check_login('user');
if (!customerHasFeature('sql') || !isset($_GET['id'])) {
    showBadRequestErrorPage();
}
$dbId = intval($_GET['id']);
if (!delete_sql_database(get_user_domain_id($_SESSION['user_id']), $dbId)) {
    write_log(sprintf('Could not delete SQL database with ID %s. An unexpected error occurred.', $dbId), E_USER_NOTICE);
    set_page_message(tr('Could not delete SQL database. An unexpected error occurred.'), 'error');
    redirectTo('sql_manage.php');
}
set_page_message(tr('SQL database successfully deleted.'), 'success');
write_log(sprintf('%s deleted SQL database with ID %s', decode_idna($_SESSION['user_logged']), $dbId), E_USER_NOTICE);
redirectTo('sql_manage.php');
示例#5
0
/**
 * Deletes the given customer
 *
 * @throws iMSCP_Exception
 * @param integer $customerId Customer unique identifier
 * @param boolean $checkCreatedBy Tell whether or not customer must have been created by logged-in user
 * @return bool TRUE on success, FALSE otherwise
 */
function deleteCustomer($customerId, $checkCreatedBy = false)
{
    iMSCP_Events_Aggregator::getInstance()->dispatch(iMSCP_Events::onBeforeDeleteCustomer, array('customerId' => $customerId));
    // Get username, uid and gid of domain user
    $query = '
		SELECT
			admin_name, created_by, domain_id
		FROM
			admin
		INNER JOIN
			domain ON(domain_admin_id = admin_id)
		WHERE
			admin_id = ?
	';
    if ($checkCreatedBy) {
        $query .= 'AND created_by = ?';
        $stmt = exec_query($query, array($customerId, $_SESSION['user_id']));
    } else {
        $stmt = exec_query($query, $customerId);
    }
    if (!$stmt->rowCount()) {
        return false;
    }
    $customerName = $stmt->fields['admin_name'];
    $mainDomainId = $stmt->fields['domain_id'];
    $resellerId = $stmt->fields['created_by'];
    $deleteStatus = 'todelete';
    $db = iMSCP_Database::getInstance();
    try {
        // First, we remove customer sessions to prevent any problems
        exec_query('DELETE FROM login WHERE user_name = ?', $customerName);
        // Remove customer's databases and Sql users
        $stmt = exec_query('SELECT sqld_id FROM sql_database WHERE domain_id = ?', $mainDomainId);
        while ($row = $stmt->fetchRow(PDO::FETCH_ASSOC)) {
            delete_sql_database($mainDomainId, $row['sqld_id']);
        }
        $db->beginTransaction();
        // Deletes all protected areas data (areas, groups and users)
        exec_query('
				DELETE
					t2, t3, t4
				FROM
					domain AS t1
				LEFT JOIN
					htaccess AS t2 ON (t2.dmn_id = t1.domain_id)
				LEFT JOIN
					htaccess_users AS t3 ON (t3.dmn_id = t1.domain_id)
				LEFT JOIN
					htaccess_groups AS t4 ON (t4.dmn_id = t1.domain_id)
				WHERE
					t1.domain_id = ?
			', $mainDomainId);
        // Deletes domain traffic entries
        exec_query('DELETE FROM domain_traffic WHERE domain_id = ?', $mainDomainId);
        // Deletes custom DNS records
        exec_query('DELETE FROM domain_dns WHERE domain_id = ?', $mainDomainId);
        // Deletes FTP accounts (users and groups)
        exec_query('DELETE FROM ftp_users WHERE admin_id = ?', $customerId);
        exec_query('DELETE FROM ftp_group WHERE groupname = ?', $customerName);
        // Deletes quota entries
        exec_query('DELETE FROM quotalimits WHERE name = ?', $customerName);
        exec_query('DELETE FROM quotatallies WHERE name = ?', $customerName);
        // Deletes support tickets
        exec_query('DELETE FROM tickets WHERE ticket_from = ? OR ticket_to = ?', array($customerId, $customerId));
        // Deletes user gui properties
        exec_query('DELETE FROM user_gui_props WHERE user_id = ?', $customerId);
        // Deletes php.ini entries
        exec_query('DELETE FROM php_ini WHERE admin_id = ?', $customerId);
        //
        // Delegated tasks - begin
        //
        // Schedule mail accounts deletion
        exec_query('UPDATE mail_users SET status = ? WHERE domain_id = ?', array($deleteStatus, $mainDomainId));
        // Schedule subdomain's aliasses deletion
        exec_query('
				UPDATE
					subdomain_alias AS t1
				JOIN
					domain_aliasses AS t2 ON(t2.domain_id = ?)
				SET
					t1.subdomain_alias_status = ?
				WHERE
					t1.alias_id = t2.alias_id
			', array($mainDomainId, $deleteStatus));
        // Schedule domain aliases deletion
        exec_query('UPDATE domain_aliasses SET alias_status = ? WHERE domain_id = ?', array($deleteStatus, $mainDomainId));
        // Schedule domain's subdomains deletion
        exec_query('UPDATE subdomain SET subdomain_status = ? WHERE domain_id = ?', array($deleteStatus, $mainDomainId));
        // Schedule domain deletion
        exec_query('UPDATE domain SET domain_status = ? WHERE domain_id = ?', array($deleteStatus, $mainDomainId));
        // Schedule user deletion
        exec_query('UPDATE admin SET admin_status = ? WHERE admin_id = ?', array($deleteStatus, $customerId));
        // Schedule SSL certificates deletion
        exec_query("UPDATE ssl_certs SET status = ? WHERE domain_type = 'dmn' AND domain_id = ?", array($deleteStatus, $mainDomainId));
        exec_query("\n\t\t\t\tUPDATE\n\t\t\t\t\tssl_certs\n\t\t\t\tSET\n\t\t\t\t\tstatus = ?\n\t\t\t\tWHERE\n\t\t\t\t\tdomain_id IN (SELECT alias_id FROM domain_aliasses WHERE domain_id = ?)\n\t\t\t\tAND\n\t\t\t\t\tdomain_type = ?\n\t\t\t", array($deleteStatus, $mainDomainId, 'als'));
        exec_query("\n\t\t\t\tUPDATE\n\t\t\t\t\tssl_certs SET status = ?\n\t\t\t\tWHERE\n\t\t\t\t\tdomain_id IN (SELECT subdomain_id FROM subdomain WHERE domain_id = ?)\n\t\t\t\tAND\n\t\t\t\t\tdomain_type = ?\n\t\t\t", array($deleteStatus, $mainDomainId, 'sub'));
        exec_query("\n\t\t\t\tUPDATE\n\t\t\t\t\tssl_certs SET status = ?\n\t\t\t\tWHERE\n\t\t\t\t\tdomain_id IN (\n\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\tsubdomain_alias_id\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\tsubdomain_alias\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\talias_id IN (SELECT alias_id FROM domain_aliasses WHERE domain_id = ?)\n\t\t\t\t\t)\n\t\t\t\tAND\n\t\t\t\t\tdomain_type = ?\n\t\t\t", array($deleteStatus, $mainDomainId, 'alssub'));
        //
        // Delegated tasks - end
        //
        // Updates resellers properties
        update_reseller_c_props($resellerId);
        // Commit all changes to database server
        $db->commit();
        iMSCP_Events_Aggregator::getInstance()->dispatch(iMSCP_Events::onAfterDeleteCustomer, array('customerId' => $customerId));
    } catch (iMSCP_Exception $e) {
        $db->rollBack();
        throw new iMSCP_Exception($e->getMessage(), $e->getCode(), $e);
    }
    // We are now ready to send a request to the daemon for delegated tasks.
    // Note: We are safe here. If the daemon doesn't answer, some entities will not be removed. In such case the
    // sysadmin will have to fix the problem causing deletion break and send a request to the daemon manually via the
    // panel, or run the imscp-rqst-mngr script manually.
    send_request();
    return true;
}