/** * Validate domain deletion, display all items to delete * @param integer $domain_id */ function validate_domain_deletion($domain_id) { global $tpl, $sql; $reseller = $_SESSION['user_id']; // check for domain owns $query = "SELECT `domain_id`, `domain_name` FROM `domain` WHERE `domain_id` = ? AND `domain_created_id` = ?"; $res = exec_query($sql, $query, array($domain_id, $reseller)); $data = $res->fetchRow(); if ($data['domain_id'] == 0) { set_page_message(tr('Wrong domain ID!'), 'error'); user_goto('users.php?psi=last'); } $tpl->assign(array('TR_DELETE_DOMAIN' => tr('Delete domain'), 'TR_DOMAIN_SUMMARY' => tr('Domain summary:'), 'TR_DOMAIN_EMAILS' => tr('Domain e-mails:'), 'TR_DOMAIN_FTPS' => tr('Domain FTP accounts:'), 'TR_DOMAIN_ALIASES' => tr('Domain aliases:'), 'TR_DOMAIN_SUBS' => tr('Domain subdomains:'), 'TR_DOMAIN_DBS' => tr('Domain databases:'), 'TR_REALLY_WANT_TO_DELETE_DOMAIN' => tr('Do you really want to delete the entire domain? This operation cannot be undone!'), 'TR_BUTTON_DELETE' => tr('Delete domain'), 'TR_YES_DELETE_DOMAIN' => tr('Yes, delete the domain.'), 'DOMAIN_NAME' => decode_idna($data['domain_name']), 'DOMAIN_ID' => $data['domain_id'])); // check for mail acc in MAIN domain $query = "SELECT * FROM `mail_users` WHERE `domain_id` = ?"; $res = exec_query($sql, $query, $domain_id); if (!$res->EOF) { while (!$res->EOF) { // Create mail type's text $mail_types = explode(',', $res->fields['mail_type']); $mdisplay_a = array(); foreach ($mail_types as $mtype) { $mdisplay_a[] = user_trans_mail_type($mtype); } $mdisplay_txt = implode(', ', $mdisplay_a); $tpl->append(array('MAIL_ADDR' => decode_idna($res->fields['mail_addr']), 'MAIL_TYPE' => $mdisplay_txt)); $res->moveNext(); } } // check for ftp acc in MAIN domain $query = "SELECT `ftp_users`.* FROM `ftp_users`, `domain` WHERE `domain`.`domain_id` = ? AND `ftp_users`.`uid` = `domain`.`domain_uid`"; $res = exec_query($sql, $query, $domain_id); if (!$res->EOF) { while (!$res->EOF) { $tpl->append(array('FTP_USER' => decode_idna($res->fields['userid']), 'FTP_HOME' => tohtml($res->fields['homedir']))); $res->moveNext(); } } // check for alias domains $alias_a = array(); $query = "SELECT * FROM `domain_aliasses` WHERE `domain_id` = ?"; $res = exec_query($sql, $query, $domain_id); if (!$res->EOF) { while (!$res->EOF) { $alias_a[] = $res->fields['alias_id']; $tpl->append(array('ALS_NAME' => decode_idna($res->fields['alias_name']), 'ALS_MNT' => tohtml($res->fields['alias_mount']))); $res->moveNext(); } } // check for subdomains $any_sub_found = false; $query = "SELECT * FROM `subdomain` WHERE `domain_id` = ?"; $res = exec_query($sql, $query, $domain_id); while (!$res->EOF) { $any_sub_found = true; $tpl->append(array('SUB_NAME' => tohtml($res->fields['subdomain_name']), 'SUB_MNT' => tohtml($res->fields['subdomain_mount']))); $res->moveNext(); } // Check subdomain_alias if (count($alias_a) > 0) { $query = "SELECT * FROM `subdomain_alias` WHERE `alias_id` IN ("; $query .= implode(',', $alias_a); $query .= ")"; $res = exec_query($sql, $query); while (!$res->EOF) { $tpl->append(array('SUB_NAME' => tohtml($res->fields['subdomain_alias_name']), 'SUB_MNT' => tohtml($res->fields['subdomain_alias_mount']))); $res->moveNext(); } } // Check for databases and -users $query = "SELECT * FROM `sql_database` WHERE `domain_id` = ?"; $res = exec_query($sql, $query, $domain_id); if (!$res->EOF) { while (!$res->EOF) { $query = "SELECT * FROM `sql_user` WHERE `sqld_id` = ?"; $ures = exec_query($sql, $query, $res->fields['sqld_id']); $users_a = array(); while (!$ures->EOF) { $users_a[] = $ures->fields['sqlu_name']; $ures->moveNext(); } $users_txt = implode(', ', $users_a); $tpl->append(array('DB_NAME' => tohtml($res->fields['sqld_name']), 'DB_USERS' => tohtml($users_txt))); $res->moveNext(); } } }
/** * Generates customer account deletion validation page. * * @param int $userId Customer account unique identifier * @return iMSCP_pTemplate */ function admin_generateCustomerAcountDeletionValidationPage($userId) { /** @var $cfg iMSCP_Config_Handler_File */ $cfg = iMSCP_Registry::get('config'); $stmt = exec_query('SELECT admin_name FROM admin WHERE admin_id = ?', $userId); if (!$stmt->rowCount()) { showBadRequestErrorPage(); } $adminName = decode_idna($stmt->fields['admin_name']); $tpl = new iMSCP_pTemplate(); $tpl->define_dynamic(array('layout' => 'shared/layouts/ui.tpl', 'page' => 'admin/user_delete.tpl', 'page_message' => 'layout', 'mail_list' => 'page', 'mail_item' => 'mail_list', 'ftp_list' => 'page', 'ftp_item' => 'ftp_list', 'dmn_list' => 'page', 'dmn_item' => 'dmn_list', 'als_list' => 'page', 'als_item' => 'als_list', 'sub_list' => 'page', 'sub_item' => 'sub_list', 'db_list' => 'page', 'db_item' => 'db_list')); $tpl->assign(array('TR_PAGE_TITLE' => tr('Admin / Users / Overview / Delete Customer'), 'TR_ACCOUNT_SUMMARY' => tr('Customer account summary'), 'TR_EMAILS' => tr('Emails'), 'TR_FTP_ACCOUNTS' => tr('Ftp accounts'), 'TR_DOMAINS' => tr('Domains'), 'TR_DOMAIN_ALIASES' => tr('Domain aliases'), 'TR_SUBDOMAINS' => tr('Subdomains'), 'TR_DATABASES' => tr('SQL databases'), 'TR_REALLY_WANT_TO_DELETE_CUSTOMER_ACCOUNT' => tr("Do you really want to delete the entire %s customer account? This operation cannot be undone.", "<strong>{$adminName}</strong>"), 'USER_ID' => $userId, 'TR_YES_DELETE_ACCOUNT' => tr('Yes, delete this account.'), 'TR_DELETE' => tr('Delete'), 'TR_CANCEL' => tr('Cancel'))); generateNavigation($tpl); // Checks for mail accounts $stmt = exec_query(' SELECT mail_type, mail_addr FROM mail_users WHERE domain_id IN (SELECT domain_id FROM domain WHERE domain_admin_id = ?) ', $userId); if ($stmt->rowCount()) { while ($row = $stmt->fetchRow(PDO::FETCH_ASSOC)) { $mailTypes = explode(',', $row['mail_type']); $mailTypesdisplayArray = array(); foreach ($mailTypes as $mtype) { $mailTypesdisplayArray[] = user_trans_mail_type($mtype); } $mailTypesdisplayTxt = implode(', ', $mailTypesdisplayArray); $addr = explode('@', $row['mail_addr']); $tpl->assign(array('MAIL_ADDR' => tohtml($addr[0] . '@' . decode_idna($addr[1])), 'MAIL_TYPE' => $mailTypesdisplayTxt)); $tpl->parse('MAIL_ITEM', '.mail_item'); } } else { $tpl->assign('MAIL_LIST', ''); } // Checks for FTP accounts $stmt = exec_query('SELECT userid, homedir FROM ftp_users WHERE admin_id = ?', $userId); if ($stmt->rowCount()) { while ($row = $stmt->fetchRow(PDO::FETCH_ASSOC)) { $username = explode('@', $row['userid']); $tpl->assign(array('FTP_USER' => tohtml($username[0] . '@' . decode_idna($username[1])), 'FTP_HOME' => tohtml(substr($row['homedir'], strlen($cfg->USER_WEB_DIR))))); $tpl->parse('FTP_ITEM', '.ftp_item'); } } else { $tpl->assign('FTP_LIST', ''); } // Check for domains // NOTE: Currently, each customer has only one domain but that will change in near future $stmt = exec_query('SELECT domain_id, domain_name FROM domain WHERE domain_admin_id = ?', $userId); $domainId = $stmt->fields['domain_id']; $domainName = tohtml(decode_idna($stmt->fields['domain_name'])); $tpl->assign('DOMAIN_NAME', $domainName); $tpl->parse('DMN_ITEM', '.dmn_item'); // Checks for domain's aliases $aliasIds = array(); $stmt = exec_query('SELECT alias_id, alias_name, alias_mount FROM domain_aliasses WHERE domain_id = ?', $domainId); if ($stmt->rowCount()) { while ($data = $stmt->fetchRow(PDO::FETCH_ASSOC)) { $aliasIds[] = $data['alias_id']; $tpl->assign(array('ALS_NAME' => tohtml(decode_idna($data['alias_name'])), 'ALS_MNT' => tohtml($data['alias_mount']))); $tpl->parse('ALS_ITEM', '.als_item'); } } else { $tpl->assign('ALS_LIST', ''); } // Checks for subdomains $stmt = exec_query('SELECT subdomain_name, subdomain_mount FROM subdomain WHERE domain_id = ?', $domainId); if ($stmt->rowCount()) { while ($data = $stmt->fetchRow(PDO::FETCH_ASSOC)) { $tpl->assign(array('SUB_NAME' => tohtml(decode_idna($data['subdomain_name'])), 'SUB_MNT' => tohtml($data['subdomain_mount']))); $tpl->parse('SUB_ITEM', '.sub_item'); } } else { $tpl->assign('SUB_LIST', ''); } // Checks subdomain_alias if (count($aliasIds)) { $aliasIds = implode(',', $aliasIds); $stmt = execute_query("SELECT subdomain_alias_name, subdomain_alias_mount FROM subdomain_alias WHERE alias_id IN ({$aliasIds})"); if ($stmt->rowCount()) { while ($row = $stmt->fetchRow(PDO::FETCH_ASSOC)) { $tpl->assign(array('SUB_NAME' => tohtml(decode_idna($row['subdomain_alias_name'])), 'SUB_MNT' => tohtml($row['subdomain_alias_mount']))); $tpl->parse('SUB_ITEM', '.sub_item'); } } } // Checks for databases and SQL users $stmt = exec_query('SELECT sqld_id, sqld_name FROM sql_database WHERE domain_id = ?', $domainId); if ($stmt->rowCount()) { while ($row = $stmt->fetchRow(PDO::FETCH_ASSOC)) { $stmt2 = exec_query('SELECT sqlu_name FROM sql_user WHERE sqld_id = ?', $row['sqld_id']); $sqlUsersList = array(); if ($stmt2->rowCount()) { while ($row2 = $stmt2->fetchRow(PDO::FETCH_ASSOC)) { $sqlUsersList[] = $row2['sqlu_name']; } } $tpl->assign(array('DB_NAME' => tohtml($row['sqld_name']), 'DB_USERS' => tohtml(implode(', ', $sqlUsersList)))); $tpl->parse('DB_ITEM', '.db_item'); } } else { $tpl->assign('DB_LIST', ''); } return $tpl; }
/** * Must be documented * * @param EasySCP_TemplateEngine $tpl reference to template object * @param EasySCP_Database $sql reference to the EasySCP_Database object * @param int $dmn_id domain name id; * @param string $dmn_name domain name * @return int number of domain alias mails addresses */ function gen_page_als_mail_list($tpl, $sql, $dmn_id, $dmn_name) { $als_query = "\n\t\tSELECT\n\t\t\tt1.`alias_id` AS als_id,\n\t\t\tt1.`alias_name` AS als_name,\n\t\t\tt2.`mail_id`,\n\t\t\tt2.`mail_acc`,\n\t\t\tt2.`mail_type`,\n\t\t\tt2.`status`,\n\t\tCONCAT(\n\t\t\tLEFT(t2.`mail_forward`, 20),\n\t\t\tIF( LENGTH(t2.`mail_forward`) > 20, '...', '')\n\t\t) AS 'mail_forward'\n\t\tFROM\n\t\t\t`domain_aliasses` AS t1,\n\t\t\t`mail_users` AS t2\n\t\tWHERE\n\t\t\tt1.`domain_id` = ?\n\t\tAND\n\t\t\tt2.`domain_id` = ?\n\t\tAND\n\t\t\tt1.`alias_id` = t2.`sub_id`\n\t\tAND\n\t\t\t(\n\t\t\t\tt2.`mail_type` LIKE '%" . MT_ALIAS_MAIL . "%'\n\t\t\tOR\n\t\t\t\tt2.`mail_type` LIKE '%" . MT_ALIAS_FORWARD . "%'\n\t\t\t)\n\t"; $als_query .= "\n\t\tORDER BY\n\t\t\tt2.`mail_acc` ASC,\n\t\t\tt2.`mail_type` DESC\n\t"; $rs = exec_query($sql, $als_query, array($dmn_id, $dmn_id)); if ($rs->recordCount() == 0) { return 0; } else { while (!$rs->EOF) { $mail_acc = decode_idna($rs->fields['mail_acc']); // Unused variable // $show_dmn_name = decode_idna($dmn_name); $show_als_name = decode_idna($rs->fields['als_name']); $mail_types = explode(',', $rs->fields['mail_type']); $mail_type = ''; foreach ($mail_types as $type) { $mail_type .= user_trans_mail_type($type); if (strpos($type, '_forward') !== false) { $mail_type .= ': ' . str_replace(array("\r\n", "\n", "\r"), ", ", $rs->fields['mail_forward']); } $mail_type .= '<br />'; } $tpl->append(array('MAIL_ACC' => tohtml($mail_acc . '@' . $show_als_name), 'MAIL_TYPE' => $mail_type, 'MAIL_STATUS' => translate_dmn_status($rs->fields['status']), 'MAIL_EDIT_URL' => 'mail_edit.php?id=' . $rs->fields['mail_id'], 'MAIL_DELETE_URL' => 'mail_delete.php?id=' . $rs->fields['mail_id'])); $rs->moveNext(); } return $rs->recordCount(); } }
function gen_page_als_mail_list(&$tpl, &$sql, $dmn_id, $dmn_name) { $als_query = <<<SQL_QUERY select t1.alias_id as als_id, t1.alias_name as als_name, t2.mail_id, t2.mail_acc, t2.mail_type, t2.status, t2.mail_auto_respond from domain_aliasses as t1, mail_users as t2 where t1.domain_id = '{$dmn_id}' and t2.domain_id = '{$dmn_id}' and t1.alias_id = t2.sub_id \t\t\t \t\tand \t\t\t \t\t\t\t(t2.mail_type = 'alias_mail' \t\t\tor \t\t\t\tt2.mail_type = 'alias_forward') order by t2.mail_type desc, t2.mail_id SQL_QUERY; $rs = execute_query($sql, $als_query); if ($rs->RecordCount() == 0) { return 0; } else { while (!$rs->EOF) { list($mail_action, $mail_action_script, $mail_edit_script) = gen_user_mail_action($rs->fields['mail_id'], $rs->fields['status']); $mail_acc = decode_idna($rs->fields['mail_acc']); $show_dmn_name = decode_idna($dmn_name); $show_als_name = decode_idna($rs->fields['als_name']); $tpl->assign(array('MAIL_ACC' => $mail_acc . "@" . $show_als_name, 'MAIL_TYPE' => user_trans_mail_type($rs->fields['mail_type']), 'MAIL_STATUS' => user_trans_item_status($rs->fields['status']), 'MAIL_ACTION' => $mail_action, 'MAIL_ACTION_SCRIPT' => $mail_action_script, 'MAIL_EDIT_SCRIPT' => $mail_edit_script)); gen_user_mail_auto_respond($tpl, $rs->fields['mail_id'], $rs->fields['mail_type'], $rs->fields['status'], $rs->fields['mail_auto_respond']); $tpl->parse('MAIL_ITEM', '.mail_item'); $rs->MoveNext(); } return $rs->RecordCount(); } }
/** * Generate Mail accounts list * * @param iMSCP_pTemplate $tpl reference to the template object * @param int $mainDmnId Customer main domain unique identifier * @return int number of subdomain mails addresses */ function _client_generateMailAccountsList($tpl, $mainDmnId) { /** @var $cfg iMSCP_Config_Handler_File */ $cfg = iMSCP_Registry::get('config'); $stmt = exec_query("\n\t\t\tSELECT\n\t\t\t\t`mail_id`, `mail_pass`,\n\t\t\t \tCONCAT(LEFT(`mail_forward`, 30), IF(LENGTH(`mail_forward`) > 30, '...', '')) AS `mail_forward`,\n\t\t\t \t`mail_type`, `status`, `mail_auto_respond`, `quota`, `mail_addr`\n\t\t\tFROM\n\t\t\t\t`mail_users`\n\t\t\tWHERE\n\t\t\t\t`domain_id` = ?\n\t\t\tAND\n\t\t\t\t`mail_type` NOT LIKE '%catchall%'\n\t\t\tORDER BY\n\t\t\t\t`mail_addr` ASC, `mail_type` DESC\n\t\t", $mainDmnId); $rowCount = $stmt->rowCount(); if (!$rowCount) { return 0; } else { $mainDmnProps = get_domain_default_props($_SESSION['user_id']); $mailQuotaLimit = $mainDmnProps['mail_quota'] ? bytesHuman($mainDmnProps['mail_quota']) : 0; $imapAvailable = function_exists('imap_open'); if ($imapAvailable) { imap_timeout(IMAP_OPENTIMEOUT, 1); imap_timeout(IMAP_READTIMEOUT, 2); imap_timeout(IMAP_CLOSETIMEOUT, 4); } $imapTimeoutReached = false; while ($row = $stmt->fetchRow(PDO::FETCH_ASSOC)) { list($mailDelete, $mailDeleteScript, $mailEdit, $mailEditScript) = _client_generateUserMailAction($row['mail_id'], $row['status']); $mailAddr = $row['mail_addr']; $mailTypes = explode(',', $row['mail_type']); $mailType = ''; $isMailbox = 0; foreach ($mailTypes as $type) { $mailType .= user_trans_mail_type($type); if (strpos($type, '_forward') !== false) { $mailType .= ': ' . str_replace(',', ', ', $row['mail_forward']); } else { $isMailbox = 1; } $mailType .= '<br />'; } if ($isMailbox && $row['status'] == 'ok') { if ($imapAvailable) { $quotaMax = $row['quota']; if ($quotaMax) { if (!$imapTimeoutReached && ($imapStream = @imap_open("{localhost/notls}", $mailAddr, $row['mail_pass'], OP_HALFOPEN))) { $quotaUsage = imap_get_quotaroot($imapStream, 'INBOX'); imap_close($imapStream); if (!empty($quotaUsage)) { $quotaUsage = $quotaUsage['usage'] * 1024; } else { $quotaUsage = 0; } $quotaMax = bytesHuman($quotaMax); $txtQuota = $mailQuotaLimit ? tr('%s / %s of %s', bytesHuman($quotaUsage), $quotaMax, $mailQuotaLimit) : sprintf('%s / %s', bytesHuman($quotaUsage), $quotaMax); } else { $imapTimeoutReached = true; $txtQuota = tr('Info Unavailable'); } } else { $txtQuota = tr('unlimited'); } } else { $txtQuota = tr('Info Unavailable'); } } else { $txtQuota = '---'; } $tpl->assign(array('MAIL_ADDR' => tohtml(decode_idna($mailAddr)), 'MAIL_TYPE' => $mailType, 'MAIL_STATUS' => translate_dmn_status($row['status']), 'MAIL_DELETE' => $mailDelete, 'MAIL_DELETE_SCRIPT' => $mailDeleteScript, 'MAIL_EDIT' => $mailEdit, 'MAIL_EDIT_SCRIPT' => $mailEditScript, 'MAIL_QUOTA_VALUE' => $txtQuota, 'DEL_ITEM' => $row['mail_id'], 'DISABLED_DEL_ITEM' => $row['status'] != 'ok' ? $cfg->HTML_DISABLED : '')); _client_generateUserMailAutoRespond($tpl, $row['mail_id'], $row['status'], $row['mail_auto_respond']); $tpl->parse('MAIL_ITEM', '.mail_item'); } return $rowCount; } }