Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/acrit.cleanmaster/classes/general/ |
Upload File : |
<?php use Bitrix\Main\Loader; use Bitrix\Sale\Internals\OrderArchiveTable; class CCleanUser { private function DeleteUserOrders($userID): void { if (!CModule::IncludeModule('sale')) { return; } $userID = (int)$userID; $arFilter = [ "USER_ID" => $userID, ]; $db_sales = CSaleOrder::GetList(["DATE_INSERT" => "ASC"], $arFilter, false, false, ['ID']); while ($ar_sales = $db_sales->Fetch()) { try { if (! CSaleOrder::Delete($ar_sales['ID'])) { /*$ex = $GLOBALS['APPLICATION']->GetException(); CCleanMain::setLastError($ex);*/ } } catch (Exception $ignore) { /*CCleanMain::setLastError($ignore);*/ } } $orderIteratorParams = [ 'filter' => ['=USER_ID' => $userID], 'select' => ['ID', 'ORDER_ID', 'USER_ID'] ]; $orderIterator = OrderArchiveTable::getList($orderIteratorParams); while ($order = $orderIterator->fetch()) { try { $result = OrderArchiveTable::delete($order['ID']); if (! $result->isSuccess()) { $errors = $result->getErrors(); foreach ($errors as $error) { \CCleanMain::setLastError($error); } } } catch (Exception $ignore) { \CCleanMain::setLastError($ignore); } } } private function DeleteUserBlog($userID) { if (!CModule::IncludeModule('blog')) { return; } $userID = (int)$userID; $dbBlogs = CBlog::GetList([], ['OWNER_ID' => $userID]); while ($arBlog = $dbBlogs->Fetch()) { CBlog::Delete($arBlog['ID']); } $dbBlogUser = CBlogUser::GetList([], ['USER_ID' => $userID]); while ($arBlogUser = $dbBlogUser->Fetch()) { CBlogUser::Delete($arBlogUser['ID']); } } private function DeleteUserAccount($userID) { if (!CModule::IncludeModule('sale')) { return; } $userID = (int)$userID; $dbUserAccount = CSaleUserAccount::GetList([], ['USER_ID' => $userID]); while ($arUserAccount = $dbUserAccount->Fetch()) { CSaleUserAccount::Delete($arUserAccount['ID']); } } private function DeleteUserForum($userID) { if (!CModule::IncludeModule('forum')) { return; } $userID = (int)$userID; $dbTopics = CForumTopic::GetList([], ['USER_START_ID' => $userID]); while ($arTopic = $dbTopics->Fetch()) { CForumTopic::Delete( (int)$arTopic['ID'] ); } $dbForumUser = CForumUser::GetList([], ['USER_ID' => $userID]); while ($arForumUser = $dbForumUser->Fetch()) { CForumUser::Delete( (int)$arForumUser['ID'] ); } } private function DeleteUserWebFormResult($userID) { if (! Loader::includeModule('form')) { return; } $userID = (int)$userID; $arFilter = [ "USER_ID" => $userID, "USER_ID_EXACT_MATCH" => 'Y' ]; $by="s_id"; $order="desc"; $rsForms = CForm::GetList($by, $order, [], $is_filtered); while ($arForm = $rsForms->Fetch()) { $by="s_timestamp"; $order="desc"; $rsResults = CFormResult::GetList($arForm['ID'], $by, $order, $arFilter, $is_filtered,"N", 10000); while ($r = $rsResults->Fetch()) { CFormResult::Delete($r['ID'], 'N'); } } } private function DeleteUserTickets($userID) { if (! Loader::includeModule('support')) { return; } $userID = (int)$userID; $arFilter = [ 'CREATED_BY' => $userID, 'CREATED_BY_EXACT_MATCH' => "Y" ]; $by = "s_id"; $order = "asc"; $tickets = CTicket::GetList($by, $order, $arFilter, $is_filtered); while ($t = $tickets->Fetch()) { CTicket::Delete($t['ID'], "N"); } } private function DeleteSocNetByUser($userID) { if (! Loader::includeModule('socialnetwork')) { return; } $userID = (int)$userID; $rsMess = CSocNetMessages::GetList(['ID' => 'DESC'], ['FROM_USER_ID' => $userID], false, false, ['ID', 'FROM_USER_ID']); while ($ar = $rsMess->Fetch()) { CSocNetMessages::Delete($ar['ID']); } $rsMess = CSocNetMessages::GetList(['ID' => 'DESC'], ['TO_USER_ID' => $userID], false, false, ['ID', 'TO_USER_ID']); while ($ar = $rsMess->Fetch()) { CSocNetMessages::Delete($ar['ID']); } $rsGrp = CSocNetGroup::GetList(['ID' => 'DESC'], ['OWNER_ID' => $userID], false, false, ['ID', 'OWNER_ID']); while ($ar = $rsGrp->Fetch()) { CSocNetGroup::Delete($ar['ID']); } } /** * Точка входа, общий фасад очистки * * @param bool $not_authorized = false * @param bool $deleteAssets = false удалить пользователей с данными модулей * * @return bool */ public function InactiveUsersDelete($not_authorized = false, $deleteAssets = false, $limit = 100) { $finish = true; $by = "ID"; $order = "asc"; $arFilter = ["ACTIVE" => "N"]; $users = CUser::GetList($by, $order, $arFilter); $i = 0; while ($arUsers = $users->Fetch()) { $assets = $this->GetUserAssets($arUsers['ID']); $cnt = 0; foreach ($assets as $k => $a) { $cnt += $a; } if ($cnt > 0 && $deleteAssets != 'Y') { continue; } $this->DeleteUserAssets($arUsers['ID']); if (! CUser::Delete($arUsers["ID"])) { $ex = $GLOBALS['APPLICATION']->GetException(); \CCleanMain::setLastError($ex); } $finish = false; if ($limit > 0 && ++$i > $limit) { break; } } $i = 0; if ($not_authorized == 'Y') { $not_auth = ["LAST_LOGIN" => false]; $users = CUser::GetList($by, $order, $not_auth); while ($arUsers = $users->Fetch()) { // its be void for this users if ($deleteAssets == 'Y') { $this->DeleteUserAssets($arUsers['ID']); } if (!CUser::Delete($arUsers["ID"])) { $ex = $GLOBALS['APPLICATION']->GetException(); \CCleanMain::setLastError($ex); } $finish = false; if ($limit > 0 && ++$i > $limit) { break; } } } return $finish; } public function GetDiagnosticData($step = false) { $not_auth = ["LAST_LOGIN" => false]; $arFilter = ["ACTIVE" => "N"]; $by = "ID"; $order = "asc"; $users = CUser::GetList($by, $order, $arFilter); while ($arUsers = $users->Fetch()) { $_SESSION['cleanmaster']['diagnostic']['user']['inactive'][$arUsers['LOGIN']] = [ 'NAME' => $arUsers['NAME'], 'LOGIN' => $arUsers['LOGIN'], 'ID' => $arUsers['ID'], 'EMAIL' => $arUsers['EMAIL'] ]; } $users2 = CUser::GetList($by, $order, $not_auth); while ($arUsers = $users2->Fetch()) { if (! array_key_exists($arUsers['LOGIN'], (array)$_SESSION['cleanmaster']['diagnostic']['user']['inactive'])) { $_SESSION['cleanmaster']['diagnostic']['user']['notauth'][$arUsers['LOGIN']] = [ 'NAME' => $arUsers['NAME'], 'LOGIN' => $arUsers['LOGIN'], 'ID' => $arUsers['ID'], 'EMAIL' => $arUsers['EMAIL'] ]; } } return false; } /////////////////////////// v2 ///////////////////////////////////// private function GetUserAssets($userID) { $userID = (int)$userID; $arAssetsCnt = [ 'Blog' => 0, 'Forum' => 0, 'Form' => 0, 'Tickets' => 0, 'Orders' => 0, 'Account' => 0, 'SocNetMessages' => 0, 'SocNetGroup' => 0 ]; if (Loader::includeModule('blog')) { $dbBlogs = CBlog::GetList([], ['OWNER_ID' => $userID]); $arAssetsCnt['Blog'] = (int)$dbBlogs->SelectedRowsCount(); } if (Loader::includeModule('forum')) { $dbTopics = CForumTopic::GetList([], ['USER_START_ID' => $userID]); $arAssetsCnt['Forum'] = (int)$dbTopics->SelectedRowsCount(); } if (Loader::includeModule('form')) { $arFilter = [ "USER_ID" => $userID, "USER_ID_EXACT_MATCH" => 'Y' ]; $by="s_id"; $order="desc"; $rsForms = CForm::GetList($by, $order, [], $is_filtered); while ($arForm = $rsForms->Fetch()) { $by="s_timestamp"; $order="desc"; $rsResults = CFormResult::GetList($arForm['ID'], $by, $order, $arFilter, $is_filtered,"N", 100); $arAssetsCnt['Form'] += (int)$rsResults->SelectedRowsCount(); } } if (Loader::includeModule('support')) { $arFilter = [ 'CREATED_BY' => $userID, 'CREATED_BY_EXACT_MATCH' => "Y" ]; $by="s_id"; $order="asc"; $tickets = CTicket::GetList($by, $order, $arFilter, $is_filtered); $arAssetsCnt['Tickets'] = (int)$tickets->SelectedRowsCount(); } if (Loader::includeModule('sale')) { $db_sales = CSaleOrder::GetList(["DATE_INSERT" => "ASC"], ["USER_ID" => $userID]); $arAssetsCnt['Orders'] = (int)$db_sales->SelectedRowsCount(); $dbUserAccount = CSaleUserAccount::GetList([], ['USER_ID' => $userID]); $arAssetsCnt['Account'] = (int)$dbUserAccount->SelectedRowsCount(); } if (Loader::includeModule('socialnetwork')) { $rsMess = CSocNetMessages::GetList(['ID' => 'DESC'], ['FROM_USER_ID' => $userID], false, false, ['ID', 'FROM_USER_ID']); $arAssetsCnt['SocNetMessages'] += (int)$rsMess->SelectedRowsCount(); $rsMess = CSocNetMessages::GetList(['ID' => 'DESC'], ['TO_USER_ID' => $userID], false, false, ['ID', 'TO_USER_ID']); $arAssetsCnt['SocNetMessages'] += (int)$rsMess->SelectedRowsCount(); $rsGrp = CSocNetGroup::GetList(['ID' => 'DESC'], ['OWNER_ID' => $userID], false, false, ['ID', 'OWNER_ID']); $arAssetsCnt['SocNetGroup'] += (int)$rsGrp->SelectedRowsCount(); } return $arAssetsCnt; } public function DeleteUserAssets($userID) { $this->DeleteUserOrders($userID); $this->DeleteUserBlog($userID); $this->DeleteUserForum($userID); $this->DeleteUserAccount($userID); $this->DeleteUserWebFormResult($userID); $this->DeleteUserTickets($userID); $this->DeleteSocNetByUser($userID); } }