/** * 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)); }
* 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');
* * 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');
/** * 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; }