Ejemplo n.º 1
0
/**
 * 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();
        }
    }
}
Ejemplo n.º 2
0
/**
 * 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;
}
Ejemplo n.º 3
0
/**
 * 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();
    }
}
Ejemplo n.º 4
0
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();
    }
}
Ejemplo n.º 5
0
/**
 * 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;
    }
}