Your IP : 52.14.9.138


Current Path : /home/bitrix/ext_www/dev.home-comfort.in.ua/bitrix/modules/sender/admin/
Upload File :
Current File : /home/bitrix/ext_www/dev.home-comfort.in.ua/bitrix/modules/sender/admin/contact_import.php

<?
define("ADMIN_MODULE_NAME", "sender");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");

if(!\Bitrix\Main\Loader::includeModule("sender"))
	ShowError(\Bitrix\Main\Localization\Loc::getMessage("MAIN_MODULE_NOT_INSTALLED"));

IncludeModuleLangFile(__FILE__);

$POST_RIGHT = $APPLICATION->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").' <b>'.$nSuccess.'</b><br>'
			.GetMessage("sender_imp_results_added").' <b>'.$nNew.'</b><br>'
			.GetMessage("sender_imp_results_exist").' <b>'.$nExists.'</b><br>'
			.GetMessage("sender_imp_results_err").' <b>'.$nError.'</b>',
		"HTML"=>true,
		"TYPE"=>"PROGRESS",
	));
}
?>
<form ENCTYPE="multipart/form-data" action="<?echo $APPLICATION->GetCurPage();?>" method="POST" name="impform">
<?
$tabControl->Begin();
$tabControl->BeginNextTab();
?>
	<tr class="heading">
		<td colspan="2"><?echo GetMessage("sender_imp_delim")?></td>
	</tr>
	<tr>
		<td><?echo GetMessage("sender_imp_file")?></td>
		<td><input type=file name="ADDR_FILE" size=30></td>
	</tr>
	<tr>
		<td class="adm-detail-valign-top"><?echo GetMessage("sender_imp_list")?></td>
		<td><textarea name="ADDR_LIST" rows=10 cols=45><?=htmlspecialcharsbx($ADDR_LIST)?></textarea></td>
	</tr>
	<tr class="heading">
		<td colspan="2"><?echo GetMessage("sender_imp_add_list")?></td>
	</tr>
	<tr>
		<td><?echo GetMessage("sender_imp_add")?></td>
		<td>
			<table>
				<tr>
					<td class="adm-detail-content-cell-r">
						<input id="LIST_TYPE_1" name="LIST_TYPE" type="radio" value="E"<?if($LIST_TYPE == "E") echo " checked"?> <?if($listDb->getSelectedRowsCount()<=0) echo " disabled"?> onClick="DisableControls(true);"><label for="LIST_TYPE_1"><?echo GetMessage("sender_imp_add_list_exist")?> </label>
					</td>
					<td class="adm-detail-content-cell-r">
						<select name="LIST_NAME_EXISTS">
							<?foreach($listDict as $arList):?>
								<option value="<?=$arList['ID']?>" <?=($arList['ID']==$LIST_NAME_EXISTS ? 'selected':'')?>><?=htmlspecialcharsbx($arList['NAME'])?></option>
							<?endforeach;?>
						</select>
					</td>
				</tr>
				<tr>
					<td class="adm-detail-content-cell-r">
						<input id="LIST_TYPE_2" name="LIST_TYPE" type="radio" value="N"<?if($LIST_TYPE == "N") echo " checked"?> onClick="DisableControls(false);"><label for="LIST_TYPE_2"><?echo GetMessage("sender_imp_add_list_new")?> </label>
					</td>
					<td class="adm-detail-content-cell-r">
						<input type="text" name="LIST_NAME_NEW">
					</td>
				</tr>
			</table>
			<script language="JavaScript">
				function DisableControls(bDisable)
				{
					document.impform.LIST_NAME_NEW.disabled=bDisable;
					if(document.impform.LIST_NAME_EXISTS)
						document.impform.LIST_NAME_EXISTS.disabled=!bDisable;
				}
				DisableControls(<?=($LIST_TYPE == "E" ? "true" : "false")?>);
			</script>
		</td>
	</tr>
<?
$tabControl->Buttons();
?>
<input<?if($POST_RIGHT<"W") echo " disabled";?> type="submit" name="Import" value="<?echo GetMessage("sender_imp_butt")?>" class="adm-btn-save">
<input type="hidden" name="lang" value="<?echo LANG?>">
<?echo bitrix_sessid_post();?>
<?
$tabControl->End();
?>
</form>

<?
$tabControl->ShowWarnings("impform", $message);
?>

<? require ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");?>