Created
April 12, 2019 13:37
-
-
Save Pum-purum/8554691bedf38b4ad7029ac5a80c241f to your computer and use it in GitHub Desktop.
update crm rights
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? | |
// Обновление списка компаний для актуализации настроек прав доступа | |
include_once(__DIR__ . "/../../.config.php"); | |
define("NO_KEEP_STATISTIC", true); | |
define("NOT_CHECK_PERMISSIONS", true); | |
define('CHK_EVENT', true); | |
ini_set('memory_limit', '-1'); | |
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); | |
@set_time_limit(0); | |
@ignore_user_abort(true); | |
global $USER, $USER_FIELD_MANAGER; | |
$USER->Authorize(1); | |
CModule::IncludeModule("crm"); | |
$CCrmCompany = new CCrmCompany(); | |
$CCrmContact = new CCrmContact(); | |
// Лимит кол-ва обрабатываемых записей (0 - без ограничения) | |
// Можно передать из терминала "php update_company_rights.php 1000" | |
$limit = 0; | |
if ($argc >= 2) { | |
$limit = $argv[1]; | |
} | |
// Получаем список компаний | |
$companiesResult = $CCrmCompany->GetListEx( | |
array('ID' => 'ASC'), | |
array(), | |
false, | |
false | |
); | |
$eventManager = \Bitrix\Main\EventManager::getInstance(); | |
$companyUpdatedHandlers = $eventManager->findEventHandlers("crm", "OnAfterCrmCompanyUpdate"); | |
$contactUpdatedHandlers = $eventManager->findEventHandlers("crm", "OnAfterCrmContactUpdate"); | |
$companyBeforeUpdateHandlers = $eventManager->findEventHandlers("crm", "OnBeforeCrmCompanyUpdate"); | |
// Классы с обработчиками событий для удаления | |
$arCallbacksToDelete = ['myCrmCompanyContactHandler', "EventClass"]; | |
foreach ($companyUpdatedHandlers as $iEventHandlerKey => $handler) { | |
if (in_array($handler["CALLBACK"][0], $arCallbacksToDelete)) { | |
//echo "\r\n REMOVING EVENT HANDLER (" . $iEventHandlerKey . "): \r\n "; | |
//var_dump($handler); | |
//echo " \r\n "; | |
$eventManager->removeEventHandler("crm", "OnAfterCrmCompanyUpdate", $iEventHandlerKey); | |
} | |
} | |
foreach ($contactUpdatedHandlers as $iEventHandlerKey => $handler) { | |
if (in_array($handler["CALLBACK"][0], $arCallbacksToDelete)) { | |
//echo "\r\n REMOVING EVENT HANDLER (" . $iEventHandlerKey . "): \r\n "; | |
//var_dump($handler); | |
//echo " \r\n "; | |
$eventManager->removeEventHandler("crm", "OnAfterCrmContactUpdate", $iEventHandlerKey); | |
} | |
} | |
foreach ($companyBeforeUpdateHandlers as $iEventHandlerKey => $handler) { | |
if (in_array($handler["CALLBACK"][0], $arCallbacksToDelete)) { | |
//echo "\r\n REMOVING EVENT HANDLER (" . $iEventHandlerKey . "): \r\n "; | |
//var_dump($handler); | |
//echo " \r\n "; | |
$eventManager->removeEventHandler("crm", "OnBeforeCrmCompanyUpdate", $iEventHandlerKey); | |
} | |
} | |
// Проходим по компаниям, чтобы обновились права | |
// обновим поле OPENED на противоположное текущему и вернем обратно | |
$counter = 0; | |
$companiesStartTime = microtime(true); | |
while ($arCompany = $companiesResult->GetNext()) { | |
if ($limit > 0 && $counter >= $limit) { | |
break; | |
} | |
//echo "\r\n COMPANY \r\n "; | |
//var_dump($arCompany["OPENED"]); | |
// Сохраняем оригинальное значение | |
$originalOpened = $arCompany["OPENED"]; | |
$valueToChange = 0; | |
// Устанавливаем противоположное оригинальному значение | |
if ($originalOpened == "Y") | |
{ | |
$valueToChange = "N"; | |
} | |
elseif ($originalOpened == "N") | |
{ | |
$valueToChange = "Y"; | |
} | |
if ($valueToChange !== 0) | |
{ | |
//echo "CHANGING: " . $originalOpened . " => " . $valueToChange . " for item ID = " . $arCompany["ID"] . "\r\n "; | |
$arFieldsToChange = ['ID' => $arCompany["ID"], "OPENED"=>$valueToChange, "NO_EVENT_ROUTE" => "Y"]; | |
// Обновляем элемент на новое значение | |
if ($CCrmCompany->Update($arCompany["ID"], $arFieldsToChange)) | |
{ | |
//echo "OK \r\n "; | |
} | |
else | |
{ | |
echo "ERROR \r\n "; | |
echo $CCrmCompany->LAST_ERROR; | |
echo " \r\n "; | |
} | |
// Возвращаем поле обратно | |
$arFieldsToChange["OPENED"] = $originalOpened; | |
if ($CCrmCompany->Update($arCompany["ID"], $arFieldsToChange)) | |
{ | |
//echo "OK \r\n "; | |
} | |
else | |
{ | |
echo "ERROR \r\n "; | |
echo $CCrmCompany->LAST_ERROR; | |
echo " \r\n "; | |
} | |
} | |
$counter++; | |
} | |
$companiesEndTime = microtime(true); | |
// Получаем список контактов | |
$contactsResult = $CCrmContact->GetListEx( | |
array('ID' => 'ASC'), | |
array(), | |
false, | |
false | |
); | |
$counter = 0; | |
$contactsStartTime = microtime(true); | |
// Проходим по контактам, чтобы обновились права | |
// обновим поле OPENED на противоположное текущему и вернем обратно | |
while ($arContact = $contactsResult->GetNext()) { | |
if ($limit > 0 && $counter >= $limit) { | |
break; | |
} | |
//echo "\r\n CONTACT "; | |
//var_dump($arContact["OPENED"]); | |
// Сохраняем оригинальное значение | |
$originalOpened = $arContact["OPENED"]; | |
$valueToChange = 0; | |
// Устанавливаем противоположное оригинальному значение | |
if ($originalOpened == "Y") | |
{ | |
$valueToChange = "N"; | |
} | |
elseif ($originalOpened == "N") | |
{ | |
$valueToChange = "Y"; | |
} | |
if ($valueToChange !== 0) | |
{ | |
//echo "CHANGING: " . $originalOpened . " => " . $valueToChange . " for item ID = " . $arContact["ID"] . " \r\n "; | |
$arFieldsToChange = ['ID' => $arContact["ID"], "OPENED"=>$valueToChange, "NO_EVENT_ROUTE" => "Y"]; | |
// Обновляем элемент на новое значение | |
if ($CCrmContact->Update($arContact["ID"], $arFieldsToChange)) | |
{ | |
//echo "OK \r\n "; | |
} | |
else | |
{ | |
echo "ERROR \r\n "; | |
echo $CCrmContact->LAST_ERROR; | |
echo " \r\n "; | |
} | |
// Возвращаем поле обратно | |
$arFieldsToChange["OPENED"] = $originalOpened; | |
if ($CCrmContact->Update($arContact["ID"], $arFieldsToChange)) | |
{ | |
//echo "OK \r\n "; | |
} | |
else | |
{ | |
echo "ERROR \r\n "; | |
echo $CCrmContact->LAST_ERROR; | |
echo " \r\n "; | |
} | |
} | |
$counter++; | |
} | |
$contactsEndTime = microtime(true); | |
$companiesExecTime = ($companiesEndTime-$companiesStartTime)/60; | |
$contactsExecTime = ($contactsEndTime-$contactsStartTime)/60; | |
echo "Время обновления " . $limit . " компаний = " . $companiesExecTime . " min \r\n"; | |
echo "Время обновления " . $limit . " контактов = " . $contactsExecTime . " min \r\n"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment