GetGroupRight("sender"); if($POST_RIGHT=="D") $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); $aTabs = array( array("DIV" => "edit1", "TAB" => GetMessage("sender_imp_import_tab"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("sender_imp_import_tab_title")), ); $tabControl = new CAdminTabControl("tabControl", $aTabs, true, true); $arError = array(); $bShowRes = false; if($REQUEST_METHOD=="POST" && !empty($Import) && $POST_RIGHT>="W" && check_bitrix_sessid()) { //************************************* //Prepare emails //************************************* //This is from the form $sAddr = $ADDR_LIST.","; //And this is from the file if(!empty($_FILES["ADDR_FILE"]["tmp_name"])) { if((integer)$_FILES["ADDR_FILE"]["error"] <> 0) $arError[] = array("id"=>"ADDR_FILE", "text"=>GetMessage("sender_imp_file_err1")." (".GetMessage("sender_imp_file_err2")." ".$_FILES["ADDR_FILE"]["error"].")"); else $sAddr .= file_get_contents($_FILES["ADDR_FILE"]["tmp_name"]); } //explode to emails array $aEmail = array(); $aEmailInvalid = array(); $addr = strtok($sAddr, ",\r\n\t"); while($addr!==false) { if(strlen($addr) > 0) { $addrPrepared = trim(strtolower($addr)); if(check_email($addrPrepared)) { $aEmail[] = $addrPrepared; } else { $aEmailInvalid[] = $addrPrepared; } } $addr = strtok(", \r\n\t"); } $listId = null; if($LIST_TYPE == "N") { if(strlen($LIST_NAME_NEW) <=0 ) { $arError[] = array("id"=>"", "text"=>GetMessage("sender_imp_list_new_error")); } else { $listAddDb = \Bitrix\Sender\ListTable::add(array('NAME' => $LIST_NAME_NEW)); if($listAddDb->isSuccess()) $listId = $listAddDb->getId(); else { foreach($listAddDb->getErrorMessages() as $errorMessage) $arError[] = array("id"=>"", "text"=>$errorMessage); } } $LIST_NAME_EXISTS = $listId; } else { $listId = $LIST_NAME_EXISTS; } $nError = 0; $nSuccess = 0; $nNew = 0; $nExists = 0; if(count($arError) == 0 && is_numeric($listId)) { $connection = \Bitrix\Main\Application::getConnection(); $conHelper = $connection->getSqlHelper(); $curDateFunc = new \Bitrix\Main\Type\DateTime; $mailCount = count($aEmail); $mailCounter = 0; while(true) { $preparedMail = array(); // divide all emails into parts $maxPart = 200; for($i = $mailCounter; $i<$mailCount; $i++) { $preparedMail[] = $conHelper->forSql(strtolower($aEmail[$i])); $maxPart--; if($maxPart===0) break; $nSuccess++; } $mailCounter = $i; if(!empty($preparedMail)) { $contactIdList = array(); $findMail = array(); $preparedMail = array_unique($preparedMail); $emailPart = implode("', '", $preparedMail); $contactDb = $connection->query("select EMAIL, ID from b_sender_contact where EMAIL in ('" . $emailPart . "')"); while ($contact = $contactDb->fetch()) { $findMail[] = $conHelper->forSql($contact['EMAIL']); $contactIdList[] = $contact['ID']; $nExists++; } $newMail = array_diff($preparedMail, $findMail); $nNew += count($newMail); foreach ($newMail as $email) { $insertedId = $connection->add('b_sender_contact', array( 'EMAIL' => $email, 'DATE_INSERT' => $curDateFunc, 'DATE_UPDATE' => $curDateFunc )); if($insertedId>0) $contactIdList[] = $insertedId; } if (!empty($contactIdList)) { $contactPart = implode(",", $contactIdList); $contactIdListExisted = array(); $contactListDb = $connection->query("select CONTACT_ID from b_sender_contact_list where CONTACT_ID in (" . $contactPart . ") and LIST_ID=".intval($listId)); while ($contactList = $contactListDb->fetch()) { $contactIdListExisted[] = $contactList['CONTACT_ID']; } $contactIdList = array_diff($contactIdList, $contactIdListExisted); } if(!empty($contactIdList)) { $contactIdList = array_unique($contactIdList); foreach($contactIdList as $contactId) { $contactDb = $connection->query("insert into b_sender_contact_list(CONTACT_ID, LIST_ID) values(".intval($contactId).",".intval($listId).")"); } } } if($mailCounter >= $mailCount) break; } $bShowRes = true; } if(count($aEmailInvalid)>0) { foreach($aEmailInvalid as $email) if(!empty($email)) $arError[] = array("id"=>"", "text"=>htmlspecialcharsbx($email)); $nSuccess += count($aEmailInvalid); $nError += count($aEmailInvalid); } }//$REQUEST_METHOD=="POST" else { $LIST_TYPE = "E"; } $listDict = array(); $listDb = \Bitrix\Sender\ListTable::getList(); while($arList = $listDb->fetch()) { $listDict[] = $arList; } if(empty($listDict)) $LIST_TYPE = "N"; $APPLICATION->SetTitle(GetMessage("sender_imp_title")); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $aMenu = array( array( "TEXT"=>GetMessage("sender_imp_back_to_list"), "TITLE"=>GetMessage("sender_imp_back_to_list_title"), "LINK"=>"sender_contact_admin.php?lang=".LANG, "ICON"=>"btn_list", ) ); $context = new CAdminContextMenu($aMenu); $context->Show(); if(count($arError)>0) { $e = new CAdminException($arError); $message = new CAdminMessage(GetMessage("sender_imp_error"), $e); echo $message->Show(); } if($bShowRes) { CAdminMessage::ShowMessage(array( "MESSAGE"=>GetMessage("sender_imp_results"), "DETAILS"=>GetMessage("sender_imp_results_total").' '.$nSuccess.'
' .GetMessage("sender_imp_results_added").' '.$nNew.'
' .GetMessage("sender_imp_results_exist").' '.$nExists.'
' .GetMessage("sender_imp_results_err").' '.$nError.'', "HTML"=>true, "TYPE"=>"PROGRESS", )); } ?>
Begin(); $tabControl->BeginNextTab(); ?>