public static function onUserDelete($id) { $selectResult = CMailbox::getList(array(), array('USER_ID' => intval($id))); while ($mailbox = $selectResult->fetch()) { CMailbox::delete($mailbox['ID']); } }
public static function notifyMailDomain($type, $sid, $user_id, $cnt = 0) { $user_id = intval($user_id); $cnt = intval($cnt); if (!CModule::includeModule('mail')) { return ''; } $arAdmin = CUser::getList($by, $order, array('ID' => $user_id, 'GROUPS_ID' => 1, 'ACTIVE' => 'Y'), array('FIELDS' => array('ID', 'EMAIL')))->fetch(); if (empty($arAdmin)) { return ''; } if ($cnt == 0) { return 'CIntranetUtils::notifyMailDomain("' . $type . '", "' . $sid . '", ' . $user_id . ', ' . ++$cnt . ');'; } includeModuleLangFile(__FILE__); if (isModuleInstalled('bitrix24')) { $learnmoreLink = getMessage('INTR_MAIL_DOMAIN_LEARNMOREB24_LINK'); $supportLink = getMessage('INTR_MAIL_DOMAIN_SUPPORTB24_LINK'); } else { $learnmoreLink = getMessage('INTR_MAIL_DOMAIN_LEARNMORE_LINK'); $supportLink = getMessage('INTR_MAIL_DOMAIN_SUPPORT_LINK'); } if (in_array($type, array('nocomplete', 'nomailbox'))) { $sid = intval($sid); $service = \Bitrix\Mail\MailServicesTable::getList(array('filter' => array('=ID' => $sid)))->fetch(); if (empty($service) || $service['ACTIVE'] != 'Y' || !in_array($service['SERVICE_TYPE'], array('domain', 'crdomain'))) { return ''; } if ($service['SERVICE_TYPE'] == 'domain') { $result = CMailDomain2::getDomainStatus($service['TOKEN'], $service['SERVER'], $error); $stage = empty($result['stage']) ? null : $result['stage']; } else { $crResponse = CControllerClient::executeEvent('OnMailControllerCheckMemberDomain', array('DOMAIN' => $service['SERVER'])); $stage = empty($crResponse['result']['stage']) ? null : $crResponse['result']['stage']; } if ($type == 'nocomplete') { if (in_array($stage, array('owner-check', 'mx-check'))) { CEvent::send('INTRANET_MAILDOMAIN_NOCOMPLETE', array($service['SITE_ID']), array('EMAIL_TO' => $arAdmin['EMAIL'], 'LEARNMORE_LINK' => $learnmoreLink, 'SUPPORT_LINK' => $supportLink)); if ($cnt == 1) { global $pPERIOD; $pPERIOD = 3600 * 24 * 4; return 'CIntranetUtils::notifyMailDomain("nocomplete", ' . $sid . ', ' . $user_id . ', ' . ++$cnt . ');'; } } } else { if ($stage == 'added') { $dbMailboxes = CMailbox::getList(array(), array('ACTIVE' => 'Y', '!USER_ID' => 0, 'SERVICE_ID' => $sid)); $adminMailbox = false; $userMailboxes = false; while ($arMailbox = $dbMailboxes->fetch()) { if ($arMailbox['USER_ID'] == $user_id) { $adminMailbox = true; } else { $userMailboxes = true; break; } } if (!$userMailboxes) { $eventType = $adminMailbox ? 'INTRANET_MAILDOMAIN_NOMAILBOX2' : 'INTRANET_MAILDOMAIN_NOMAILBOX'; CEvent::send($eventType, array($service['SITE_ID']), array('EMAIL_TO' => $arAdmin['EMAIL'], 'LEARNMORE_LINK' => $learnmoreLink, 'SUPPORT_LINK' => $supportLink)); if ($cnt == 1) { global $pPERIOD; $pPERIOD = 3600 * 24 * 21; return 'CIntranetUtils::notifyMailDomain("nomailbox", ' . $sid . ', ' . $user_id . ', ' . ++$cnt . ');'; } } } } } else { if ($type == 'noreg') { $dbServices = \Bitrix\Mail\MailServicesTable::getList(array('filter' => array('ACTIVE' => 'Y', 'SERVICE_TYPE' => 'crdomain'))); while ($service = $dbServices->fetch()) { if ($service['FLAGS'] & CMail::F_DOMAIN_REG) { return ''; } } $r = CEvent::send('INTRANET_MAILDOMAIN_NOREG', array($sid), array('EMAIL_TO' => $arAdmin['EMAIL'], 'LEARNMORE_LINK' => $learnmoreLink, 'SUPPORT_LINK' => $supportLink)); } } return ''; }
foreach ($arMailServices[$arService['ID']]['users'] as $domain => $arLogin) { if (empty($arLogin)) { unset($arMailServices[$arService['ID']]['users'][$domain]); } } } if (!$bDomainUsersExist && !empty($arMailServices[$arService['ID']]['users'])) { $bDomainUsersExist = true; } if (!empty($arService['SERVER'])) { $bConnectDomainsExist = true; } } } elseif ($arService['SERVICE_TYPE'] == 'domain') { $arMailServices[$arService['ID']]['users'] = CMailDomain2::getDomainUsers($arService['TOKEN'], $arService['SERVER'], $error); $rsMailbox = CMailbox::getList(array('TIMESTAMP_X' => 'ASC'), array('ACTIVE' => 'Y', '!USER_ID' => 0, 'SERVER_TYPE' => 'domain', 'SERVICE_ID' => $arService['ID'])); while ($arMailbox = $rsMailbox->fetch()) { list($login, $domain) = explode('@', $arMailbox['LOGIN'], 2); if (($key = array_search($login, $arMailServices[$arService['ID']]['users'])) !== false) { array_splice($arMailServices[$arService['ID']]['users'], $key, 1); } } if (!$bDomainUsersExist && !empty($arMailServices[$arService['ID']]['users'])) { $bDomainUsersExist = true; } if (!empty($arService['SERVER'])) { $bCreateDomainsExist = true; $bConnectDomainsExist = true; } } }
public static function delete($primary) { $serviceForDelete = static::getByPrimary($primary)->fetch(); if (!$serviceForDelete) { $deleteResult = new Entity\DeleteResult(); $deleteResult->addError(new Entity\EntityError(Localization\Loc::getMessage('mail_mailservice_not_found'))); return $deleteResult; } $deleteResult = parent::delete($primary); if ($deleteResult->isSuccess()) { $serviceId = is_array($primary) ? $primary['ID'] : $primary; if (in_array($serviceForDelete['SERVICE_TYPE'], array('controller', 'domain'))) { $mbData = array('ACTIVE' => 'N', 'SERVICE_ID' => 0); } else { $emptyService = static::getList(array('filter' => array('=SITE_ID' => $serviceForDelete['SITE_ID'], 'ACTIVE' => 'Y', '=SERVER' => '', '=PORT' => '', '=ENCRYPTION' => '', '=LINK' => ''), 'limit' => 1))->fetch(); $mbData = $emptyService ? array('SERVICE_ID' => $emptyService['ID'], 'NAME' => $emptyService['NAME']) : array('ACTIVE' => 'N', 'SERVICE_ID' => 0); } $selectResult = \CMailbox::getList(array(), array('SERVICE_ID' => $serviceId)); while ($mailbox = $selectResult->fetch()) { \CMailbox::update($mailbox['ID'], $mbData); } } return $deleteResult; }
$obCache->EndDataCache(array('DEPARTMENTS' => $arResult['DEPARTMENTS'], 'MANAGERS' => $arResult['MANAGERS'])); if (defined("BX_COMP_MANAGED_CACHE")) { $CACHE_MANAGER->EndTagCache(); } } } elseif ($arParams["CACHE_TIME"] > 0) { $vars = $obCache->GetVars(); $arResult['DEPARTMENTS'] = $vars['DEPARTMENTS']; $arResult['MANAGERS'] = $vars['MANAGERS']; } if (CModule::IncludeModule("extranet") && CExtranet::IsExtranetSite() && !CExtranet::IsIntranetUser()) { $arResult['MANAGERS'] = array(); } } if (CModule::IncludeModule('mail')) { $dbMailbox = CMailbox::getList(array('TIMESTAMP_X' => 'DESC'), array('LID' => SITE_ID, 'ACTIVE' => 'Y', 'USER_ID' => intval($arParams['ID']), 'SERVER_TYPE' => 'imap|controller|domain')); $mailbox = $dbMailbox->fetch(); if (strpos($mailbox['LOGIN'], '@') !== false) { $arResult['User']['MAILBOX'] = $mailbox['LOGIN']; } } if ($arResult["User"]['PERSONAL_BIRTHDAY'] != '') { $arBirthDate = ParseDateTime($arResult["User"]['PERSONAL_BIRTHDAY'], CSite::GetDateFormat('SHORT')); $arResult['IS_BIRTHDAY'] = intval($arBirthDate['MM']) == date('n') && intval($arBirthDate['DD']) == date('j'); } if ($arParams["NAME_TEMPLATE"] == '') { $arParams["NAME_TEMPLATE"] = CSite::GetNameFormat(); } $arParams["TITLE_NAME_TEMPLATE"] = str_replace(array("#NOBR#", "#/NOBR#"), array("", ""), $arParams["NAME_TEMPLATE"]); $bUseLogin = $arParams['SHOW_LOGIN'] != "N" ? true : false; $arTmpUser = array("NAME" => $arResult["User"]["~NAME"], "LAST_NAME" => $arResult["User"]["~LAST_NAME"], "SECOND_NAME" => $arResult["User"]["~SECOND_NAME"], "LOGIN" => $arResult["User"]["~LOGIN"]);
private function executeManagePage() { global $USER, $APPLICATION; $APPLICATION->setTitle(GetMessage('INTR_MAIL_MANAGE_PAGE_TITLE')); CJSCore::Init(array('admin_interface')); if (!$USER->isAdmin() && !$USER->canDoOperation('bitrix24_config')) { $APPLICATION->AuthForm(GetMessage('ACCESS_DENIED')); return; } $this->arParams['SERVICES'] = array(); $services = CIntranetMailSetupHelper::getMailServices(); foreach ($services as $service) { if ($service['type'] == 'controller') { $crDomains = CControllerClient::ExecuteEvent('OnMailControllerGetDomains', array()); if (!empty($crDomains['result']) && is_array($crDomains['result'])) { $service['domains'] = $crDomains['result']; $service['users'] = array(); foreach ($service['domains'] as $domain) { $service['users'][$domain] = array(); } $crUsers = CControllerClient::ExecuteEvent('OnMailControllerGetUsers', array()); if (!empty($crUsers['result']) && is_array($crUsers['result'])) { foreach ($crUsers['result'] as $email) { list($login, $domain) = explode('@', $email, 2); if (isset($service['users'][$domain])) { $service['users'][$domain][] = $login; } } $dbMailboxes = CMailbox::getList(array('TIMESTAMP_X' => 'ASC'), array('ACTIVE' => 'Y', '!USER_ID' => 0, 'SERVICE_ID' => $service['id'])); while ($mailbox = $dbMailboxes->fetch()) { list($login, $domain) = explode('@', $mailbox['LOGIN'], 2); if (!empty($service['users'][$domain]) && ($key = array_search($login, $service['users'][$domain])) !== false) { array_splice($service['users'][$domain], $key, 1); } } } $this->arParams['SERVICES'][] = $service; } } if (in_array($service['type'], array('domain', 'crdomain'))) { $result = self::checkDomainStatus(array('type' => $service['type'], 'domain' => $service['server'], 'token' => $service['token']), $error); if (!empty($result['stage']) && $result['stage'] == 'added') { $service['domains'] = array($service['server']); $service['users'] = array($service['server'] => array()); if ($service['type'] == 'domain') { $users = CMailDomain2::getDomainUsers($service['token'], $service['server'], $error); if (!empty($users) && is_array($users)) { $service['users'][$service['server']] = $users; } } else { if ($service['type'] == 'crdomain') { $crUsers = CControllerClient::ExecuteEvent('OnMailControllerGetMemberUsers', array('DOMAIN' => $service['server'])); if (!empty($crUsers['result']) && is_array($crUsers['result'])) { $service['users'][$service['server']] = $crUsers['result']; } } } $dbMailboxes = CMailbox::getList(array('TIMESTAMP_X' => 'ASC'), array('ACTIVE' => 'Y', '!USER_ID' => 0, 'SERVICE_ID' => $service['id'])); while ($mailbox = $dbMailboxes->fetch()) { list($login, $domain) = explode('@', $mailbox['LOGIN'], 2); if (!empty($service['users'][$domain]) && ($key = array_search($login, $service['users'][$domain])) !== false) { array_splice($service['users'][$domain], $key, 1); } } $this->arParams['SERVICES'][] = $service; } } } $this->arResult['GRID_ID'] = 'manage_domain_grid'; $gridOptions = new CGridOptions($this->arResult['GRID_ID']); $arSort = $gridOptions->getSorting(array('sort' => array('ID' => 'ASC'), 'vars' => array('by' => 'by', 'order' => 'order'))); $arNav = $gridOptions->getNavParams(array('nPageSize' => 50)); $arSortArg = each($arSort['sort']); $arFilter = array('ACTIVE' => 'Y', '!UF_DEPARTMENT' => false); if (isset($_REQUEST['act']) && $_REQUEST['act'] == 'search' && !empty($_REQUEST['FILTER'])) { $this->arResult['FILTER'] = $_REQUEST['FILTER']; $userIds = array(); $dbMailboxes = CMailbox::getList(array('TIMESTAMP_X' => 'ASC'), array('LID' => SITE_ID, 'ACTIVE' => 'Y', '!USER_ID' => 0, 'LOGIN' => $_REQUEST['FILTER'])); while ($mailbox = $dbMailboxes->fetch()) { if (in_array($mailbox['SERVER_TYPE'], array('imap', 'controller', 'domain'))) { $userIds[] = $mailbox['USER_ID']; } } $arFilter['ID'] = empty($userIds) ? 0 : join('|', $userIds); } $dbUsers = CUser::GetList($arSortArg['key'], $arSortArg['value'], $arFilter, array('FIELDS' => array('ID', 'LOGIN', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'PERSONAL_PHOTO', 'WORK_POSITION'))); $dbUsers->navStart($arNav['nPageSize']); $arRows = array(); while ($user = $dbUsers->fetch()) { $user['DETAIL_URL'] = COption::getOptionString('intranet', 'search_user_url', '/user/#ID#/'); $user['DETAIL_URL'] = str_replace(array('#ID#', '#USER_ID#'), array($user['ID'], $user['ID']), $user['DETAIL_URL']); $user['PHOTO_THUMB'] = '<img src="/bitrix/components/bitrix/main.user.link/templates/.default/images/nopic_30x30.gif" border="0" alt="" width="32" height="32">'; if (intval($user['PERSONAL_PHOTO']) > 0) { $imageFile = CFile::getFileArray($user['PERSONAL_PHOTO']); if ($imageFile !== false) { $arFileTmp = CFile::resizeImageGet($imageFile, array('width' => 42, 'height' => 42), BX_RESIZE_IMAGE_EXACT, false); $user['PHOTO_THUMB'] = CFile::showImage($arFileTmp['src'], 32, 32); } } $anchor_id = RandString(8); $arCols = array('NAME' => '<table id="user_' . $user['ID'] . '" style="border-collapse: collapse; border: none; "> <tr> <td style="border: none !important; padding: 0px !important; "> <div style="width: 32px; height: 32px; margin:2px; padding: 2px; box-shadow:0 0 2px 1px rgba(0, 0, 0, 0.1);"> <a href="' . $user['DETAIL_URL'] . '">' . $user['PHOTO_THUMB'] . '</a> </div> </td> <td style="border: none !important; padding: 0px 0px 0px 7px !important; vertical-align: top; "> <a href="' . $user['DETAIL_URL'] . '"><b>' . CUser::formatName(CSite::getNameFormat(), $user, true, true) . '</b></a><br> ' . htmlspecialcharsbx($user['WORK_POSITION']) . ' </td> </tr> </table>', 'EMAIL' => '', 'ADD' => '', 'DELETE' => ''); if ($mailbox = CIntranetMailSetupHelper::getUserMailbox($user['ID'])) { switch ($mailbox['SERVER_TYPE']) { case 'imap': $arCols['EMAIL'] = $mailbox['LOGIN']; if (strpos($mailbox['LOGIN'], '@') === false) { $arCols['EMAIL'] .= '<br><span style="font-weight: normal; ">imap://' . $mailbox['SERVER'] . ':' . $mailbox['PORT'] . '</span>'; } $arCols['ADD'] = '<a href="#" onclick="mb.create(' . $user['ID'] . '); return false; ">' . GetMessage('INTR_MAIL_MANAGE_CHANGE') . '</a>'; break; case 'controller': case 'domain': case 'crdomain': $arCols['EMAIL'] = $mailbox['LOGIN']; $arCols['ADD'] = '<a href="#" onclick="mb.create(' . $user['ID'] . '); return false; ">' . GetMessage('INTR_MAIL_MANAGE_CHANGE') . '</a><br><a href="#" onclick="mb.changePassword(' . $user['ID'] . '); return false; ">' . GetMessage('INTR_MAIL_MANAGE_PASSWORD') . '</a>'; $arCols['DELETE'] = '<a href="#" onclick="mb.remove(' . $user['ID'] . '); return false; ">' . GetMessage('INTR_MAIL_MANAGE_DELETE') . '</a>'; break; } } else { $arCols['ADD'] = '<a href="#" onclick="mb.create(' . $user['ID'] . '); return false; ">' . GetMessage('INTR_MAIL_MANAGE_CREATE') . '</a>'; } if (empty($this->arParams['SERVICES'])) { $arCols['ADD'] = ''; $arCols['DELETE'] = ''; } $arCols['EMAIL'] = '<span id="email_' . $user['ID'] . '" style="font-weight: bold; white-space: nowrap; ">' . $arCols['EMAIL'] . '</span>'; $arCols['ADD'] = '<span id="create_' . $user['ID'] . '" style="white-space: nowrap; ">' . $arCols['ADD'] . '</span>'; $arCols['DELETE'] = '<span id="delete_' . $user['ID'] . '" style="white-space: nowrap; ">' . $arCols['DELETE'] . '</span>'; $arRows[$user['ID']] = array('data' => $user, 'columns' => $arCols); } $this->arResult['ROWS'] = $arRows; $this->arResult['ROWS_COUNT'] = $dbUsers->selectedRowsCount(); $this->arResult['NAV_OBJECT'] = $dbUsers; $this->arResult['NAV_OBJECT']->bShowAll = false; $this->includeComponentTemplate('manage'); }
private static function executeManageCreateMailbox(&$error) { $domainUsers = array('vacant' => array(), 'occupied' => array()); $error = false; if (!check_bitrix_sessid()) { $error = GetMessage('INTR_MAIL_CSRF'); } if ($error === false) { if (!isset($_REQUEST['create'])) { $error = GetMessage('INTR_MAIL_FORM_ERROR'); } else { $exists = $_REQUEST['create'] == 0; $userId = $_REQUEST['USER_ID']; if ($exists) { $serviceId = $_REQUEST['sservice']; $domain = $_REQUEST['sdomain']; $login = $_REQUEST['suser']; } else { $serviceId = $_REQUEST['cservice']; $domain = $_REQUEST['cdomain']; $login = $_REQUEST['cuser']; $password = $_REQUEST['password']; $password2 = $_REQUEST['password2']; } } } if ($error === false) { if (intval($userId)) { $dbUser = CUser::getList($by = 'ID', $order = 'ASC', array('ID_EQUAL_EXACT' => intval($userId)), array('FIELDS' => 'ID')); if (!$dbUser->fetch()) { $error = GetMessage('INTR_MAIL_FORM_ERROR'); } } } if ($error === false) { $services = CIntranetMailSetupHelper::getMailServices(); if (empty($services[$serviceId]) || !in_array($services[$serviceId]['type'], array('controller', 'domain', 'crdomain'))) { $error = GetMessage('INTR_MAIL_FORM_ERROR'); } else { $service = $services[$serviceId]; if ($service['type'] == 'controller') { $crDomains = CControllerClient::ExecuteEvent('OnMailControllerGetDomains', array()); $arDomains = empty($crDomains['result']) ? array() : $crDomains['result']; if (!is_array($arDomains) || !in_array($domain, $arDomains)) { $error = CMail::getErrorMessage(CMail::ERR_API_OP_DENIED); } } else { if ($service['type'] == 'crdomain') { $crDomains = CControllerClient::ExecuteEvent('OnMailControllerGetMemberDomains', array()); $arDomains = empty($crDomains['result']) ? array() : $crDomains['result']; if (!is_array($arDomains) || !in_array($domain, $arDomains)) { $error = CMail::getErrorMessage(CMail::ERR_API_OP_DENIED); } } else { if ($service['type'] == 'domain') { if ($service['server'] != $domain) { $error = GetMessage('INTR_MAIL_FORM_ERROR'); } } } } } } if ($error === false) { if (!$exists && $password != $password2) { $error = GetMessage('INTR_MAIL_INP_PASSWORD2_BAD'); } } if ($error === false) { if ($service['type'] == 'controller') { $crCheckName = CControllerClient::ExecuteEvent('OnMailControllerCheckName', array('DOMAIN' => $domain, 'NAME' => $login)); if (isset($crCheckName['result'])) { $isExistsNow = (bool) $crCheckName['result']; } else { $error = empty($crCheckName['error']) ? GetMessage('INTR_MAIL_CONTROLLER_INVALID') : CMail::getErrorMessage($crCheckName['error']); } } else { if ($service['type'] == 'crdomain') { $crCheckName = CControllerClient::ExecuteEvent('OnMailControllerCheckMemberName', array('DOMAIN' => $domain, 'NAME' => $login)); if (isset($crCheckName['result'])) { $isExistsNow = (bool) $crCheckName['result']; } else { $error = empty($crCheckName['error']) ? GetMessage('INTR_MAIL_CONTROLLER_INVALID') : CMail::getErrorMessage($crCheckName['error']); } } else { if ($service['type'] == 'domain') { $isExistsNow = CMailDomain2::isUserExists($service['token'], $domain, $login, $error); if (is_null($isExistsNow)) { $error = CMail::getErrorMessage($error); } } } } if ($error === false) { if ($exists) { if ($isExistsNow == false) { $error = CMail::getErrorMessage(CMail::ERR_API_USER_NOTFOUND); } if ($error === false) { if ($service['type'] == 'controller') { $crCheckMailbox = CControllerClient::ExecuteEvent('OnMailControllerCheckMailbox', array('DOMAIN' => $domain, 'NAME' => $login)); if (!isset($crCheckMailbox['result'])) { $error = empty($crCheckMailbox['error']) ? GetMessage('INTR_MAIL_CONTROLLER_INVALID') : CMail::getErrorMessage($crCheckMailbox['error']); } } } if ($error === false) { $dbMailbox = CMailbox::getList(array('TIMESTAMP_X' => 'ASC'), array('ACTIVE' => 'Y', '!USER_ID' => intval($userId), '=LOGIN' => $login . '@' . $domain)); if (($mailbox = $dbMailbox->fetch()) && $mailbox['USER_ID']) { $error = GetMessage('INTR_MAIL_MAILBOX_OCCUPIED'); } } } else { if ($isExistsNow == true) { $error = CMail::getErrorMessage(CMail::ERR_API_NAME_OCCUPIED); } if ($error === false) { if (!preg_match('/^[a-z0-9_]+(\\.?[a-z0-9_-]*[a-z0-9_]+)*?$/i', $login)) { $error = CMail::getErrorMessage(CMail::ERR_API_BAD_NAME); } } if ($error === false) { if ($service['type'] == 'controller') { $crResponse = CControllerClient::ExecuteEvent('OnMailControllerAddUser', array('DOMAIN' => $domain, 'NAME' => $login, 'PASSWORD' => $password)); if (!isset($crResponse['result'])) { $error = empty($crResponse['error']) ? GetMessage('INTR_MAIL_CONTROLLER_INVALID') : CMail::getErrorMessage($crResponse['error']); } } else { if ($service['type'] == 'crdomain') { $crResponse = CControllerClient::ExecuteEvent('OnMailControllerAddMemberUser', array('DOMAIN' => $domain, 'NAME' => $login, 'PASSWORD' => $password)); if (!isset($crResponse['result'])) { $error = empty($crResponse['error']) ? GetMessage('INTR_MAIL_CONTROLLER_INVALID') : CMail::getErrorMessage($crResponse['error']); } } else { if ($service['type'] == 'domain') { $result = CMailDomain2::addUser($service['token'], $domain, $login, $password, $error); if (is_null($result)) { $error = CMail::getErrorMessage($error); } } } } if ($error === false) { if (empty($domainUsers['vacant'][$service['id']])) { $domainUsers['vacant'][$service['id']] = array(); } if (empty($domainUsers['vacant'][$service['id']][$domain])) { $domainUsers['vacant'][$service['id']][$domain] = array(); } $domainUsers['vacant'][$service['id']][$domain][] = $login; } } } if ($error === false && $userId) { $mailbox = CIntranetMailSetupHelper::getUserMailbox($userId); if (!empty($mailbox)) { $res = CMailbox::delete($mailbox['ID']); if (in_array($mailbox['SERVER_TYPE'], array('domain', 'controller', 'crdomain')) && $res) { list($login_tmp, $domain_tmp) = explode('@', $mailbox['LOGIN'], 2); if (empty($domainUsers['vacant'][$mailbox['SERVICE_ID']])) { $domainUsers['vacant'][$mailbox['SERVICE_ID']] = array(); } if (empty($domainUsers['vacant'][$mailbox['SERVICE_ID']][$domain_tmp])) { $domainUsers['vacant'][$mailbox['SERVICE_ID']][$domain_tmp] = array(); } $domainUsers['vacant'][$mailbox['SERVICE_ID']][$domain_tmp][] = $login_tmp; } } $arFields = array('LID' => SITE_ID, 'ACTIVE' => 'Y', 'SERVICE_ID' => $serviceId, 'NAME' => $service['name'], 'LOGIN' => $login . '@' . $domain, 'SERVER_TYPE' => $service['type'], 'USER_ID' => intval($userId)); $res = CMailbox::add($arFields); if (!$res) { $error = GetMessage('INTR_MAIL_SAVE_ERROR'); } else { if (!empty($domainUsers['vacant'][$serviceId][$domain])) { if ($key = array_search($login, $domainUsers['vacant'][$serviceId][$domain])) { array_splice($domainUsers['vacant'][$serviceId][$domain], $key, 1); } } if (empty($domainUsers['occupied'][$serviceId])) { $domainUsers['occupied'][$serviceId] = array(); } if (empty($domainUsers['occupied'][$serviceId][$domain])) { $domainUsers['occupied'][$serviceId][$domain] = array(); } $domainUsers['occupied'][$serviceId][$domain][] = $login; } } } } if ($error === false) { $email = $login . '@' . $domain; $create = '<a href="#" onclick="mb.create(' . intval($userId) . '); return false; ">' . GetMessage('INTR_MAIL_MANAGE_CHANGE') . '</a>'; $create .= '<br><a href="#" onclick="mb.changePassword(' . intval($userId) . '); return false; ">' . GetMessage('INTR_MAIL_MANAGE_PASSWORD') . '</a>'; $delete = '<a href="#" onclick="mb.remove(' . intval($userId) . '); return false; ">' . GetMessage('INTR_MAIL_MANAGE_DELETE') . '</a>'; } return array('users' => $domainUsers, 'email' => isset($email) ? $email : '', 'create' => isset($create) ? CharsetConverter::ConvertCharset($create, SITE_CHARSET, 'UTF-8') : '', 'delete' => isset($delete) ? CharsetConverter::ConvertCharset($delete, SITE_CHARSET, 'UTF-8') : ''); }
public static function createMailbox($exists, $userId, $serviceId, $domain, $login, $password, &$error) { $error = false; if (intval($userId)) { $dbUser = CUser::getList($by = 'ID', $order = 'ASC', array('ID_EQUAL_EXACT' => intval($userId)), array('FIELDS' => 'ID')); if (!$dbUser->fetch()) { $error = GetMessage('INTR_MAIL_FORM_ERROR'); } } if ($error === false) { $services = self::getMailServices(); if (empty($services[$serviceId]) || !in_array($services[$serviceId]['type'], array('controller', 'domain', 'crdomain'))) { $error = GetMessage('INTR_MAIL_FORM_ERROR'); } } if ($error === false) { $service = $services[$serviceId]; if ($service['type'] == 'controller') { $crDomains = CControllerClient::ExecuteEvent('OnMailControllerGetDomains', array()); $arDomains = empty($crDomains['result']) ? array() : $crDomains['result']; if (!is_array($arDomains) || !in_array($domain, $arDomains)) { $error = CMail::getErrorMessage(CMail::ERR_API_OP_DENIED); } } else { if ($service['type'] == 'crdomain') { $crDomains = CControllerClient::ExecuteEvent('OnMailControllerGetMemberDomains', array()); $arDomains = empty($crDomains['result']) ? array() : $crDomains['result']; if (!is_array($arDomains) || !in_array($domain, $arDomains)) { $error = CMail::getErrorMessage(CMail::ERR_API_OP_DENIED); } } else { if ($service['type'] == 'domain') { if ($service['server'] != $domain) { $error = GetMessage('INTR_MAIL_FORM_ERROR'); } } } } } if ($error === false && !$exists) { if (!preg_match('/^[a-z0-9_]+(\\.?[a-z0-9_-]*[a-z0-9_]+)*?$/i', $login)) { $error = CMail::getErrorMessage(CMail::ERR_API_BAD_NAME); } if ($error === false) { if ($service['type'] == 'controller') { $crResponse = CControllerClient::ExecuteEvent('OnMailControllerAddUser', array('DOMAIN' => $domain, 'NAME' => $login, 'PASSWORD' => $password)); if (!isset($crResponse['result'])) { $error = empty($crResponse['error']) ? GetMessage('INTR_MAIL_CONTROLLER_INVALID') : CMail::getErrorMessage($crResponse['error']); } } else { if ($service['type'] == 'crdomain') { $crResponse = CControllerClient::ExecuteEvent('OnMailControllerAddMemberUser', array('DOMAIN' => $domain, 'NAME' => $login, 'PASSWORD' => $password)); if (!isset($crResponse['result'])) { $error = empty($crResponse['error']) ? GetMessage('INTR_MAIL_CONTROLLER_INVALID') : CMail::getErrorMessage($crResponse['error']); } } else { if ($service['type'] == 'domain') { $result = CMailDomain2::addUser($service['token'], $domain, $login, $password, $error); if (is_null($result)) { $error = CMail::getErrorMessage($error); } } } } } } if ($error === false && intval($userId)) { if ($exists) { if ($service['type'] == 'controller') { $crCheckMailbox = CControllerClient::ExecuteEvent('OnMailControllerCheckMailbox', array('DOMAIN' => $domain, 'NAME' => $login)); if (!isset($crCheckMailbox['result'])) { $error = empty($crCheckMailbox['error']) ? GetMessage('INTR_MAIL_CONTROLLER_INVALID') : CMail::getErrorMessage($crCheckMailbox['error']); } } if ($error === false) { $dbMailbox = CMailbox::getList(array('TIMESTAMP_X' => 'ASC'), array('ACTIVE' => 'Y', '!USER_ID' => intval($userId), '=LOGIN' => $login . '@' . $domain)); if (($mailbox = $dbMailbox->fetch()) && $mailbox['USER_ID']) { $error = GetMessage('INTR_MAIL_MAILBOX_OCCUPIED'); } } } if ($error === false) { $mailbox = self::getUserMailbox($userId); if (!empty($mailbox)) { $res = CMailbox::delete($mailbox['ID']); } $arFields = array('LID' => SITE_ID, 'ACTIVE' => 'Y', 'SERVICE_ID' => $serviceId, 'NAME' => $service['name'], 'LOGIN' => $login . '@' . $domain, 'SERVER_TYPE' => $service['type'], 'USER_ID' => intval($userId)); $res = CMailbox::add($arFields); if (!$res) { $error = GetMessage('INTR_MAIL_SAVE_ERROR'); } } } if ($error === false) { return $login . '@' . $domain; } }