продумал систему переноса задач
если у задачи 1 исполнитель и он удаляемый пользователь - задача возвращается постановщику
если у задачи 1 исполнитель - он удаляемый пользователь и несколько соисполнителей - задача назначается первому соисполнителю
если у задачи постановщик и исполнитель удаляемый пользователь - задача удаляется
Код |
---|
<?
$USER_ID = substr("{=Template:Parameter1}", 5);
$usersel = substr("{=Template:select}", 0);
$this->WriteToTrackingService("ИД пользователя:".$USER_ID);
$this->WriteToTrackingService("Выбор:".$usersel);
if($usersel == "Удалить") {
if (CUser::Delete($USER_ID)) {
$this->WriteToTrackingService("Удален");
}else{
if(CModule::IncludeModule('tasks')){
//выбираем в каких задачах удаляемый пользователь ответственный
$res1 = CTasks::GetList(
array("TITLE" => "ASC"),
array("RESPONSIBLE_ID" => $USER_ID)
);
while ($arTask1 = $res1->GetNext())
{
//если задача создана им же и он же исполнитель - удаляем
if($arTask1["CREATED_BY"] == $USER_ID){
CTasks::Delete($arTask1["ID"]);
//echo $arTask1["TITLE"]." (".$arTask1['ID'].") - Удалена<br>";
$this->WriteToTrackingService($arTask1["TITLE"]." (".$arTask1['ID'].") - Удалена");
}else{
// все кроме закрытых задач
if($arTask1["REAL_STATUS"] == 1 or $arTask1["REAL_STATUS"] == 2 or $arTask1["REAL_STATUS"] == 3 or $arTask1["REAL_STATUS"] == 4 or $arTask1["REAL_STATUS"] == 6){
$rsTask_by_id = CTasks::GetByID($arTask1["ID"]);
if ($arTask2 = $rsTask_by_id->GetNext())
{
//если есть соисполнители назначаем первого ответственным
if(!empty($arTask2["ACCOMPLICES"])){
$arFields = array('RESPONSIBLE_ID' => $arTask2["ACCOMPLICES"][0]);
$oTaskItem = CTaskItem::getInstance($arTask1["ID"], 1);
$oTaskItem->update($arFields);
//echo $arTask1["TITLE"]." (".$arTask1['ID'].") - Задача переназначена первому соисполнителю<br>";
$this->WriteToTrackingService($arTask1["TITLE"]." (".$arTask1['ID'].") - Задача переназначена первому соисполнителю");
//иначе отправляем ее постановщику
}else{
$arFields = array('STATUS' => CTasks::STATE_PENDING, 'RESPONSIBLE_ID' => $arTask1["CREATED_BY"]);
$oTaskItem = CTaskItem::getInstance($arTask["ID"], 1);
$oTaskItem->update($arFields);
//echo $arTask1["TITLE"]." (".$arTask1['ID'].") - Задача отправлена постановщику<br>";
$this->WriteToTrackingService($arTask1["TITLE"]." (".$arTask1['ID'].") - Задача отправлена постановщику");
}
}
//если задача закрыта - удаляем
}else{
CTasks::Delete($arTask["ID"]);
//echo $arTask1["TITLE"]." (".$arTask1['ID'].") - Удалена<br>";
$this->WriteToTrackingService($arTask1["TITLE"]." (".$arTask1['ID'].") - Удалена");
}
}
//echo "<pre>"; print_r($arTask); echo "</pre>";
//$this->WriteToTrackingService($arTask["NAME"]." - Удалена");
$i++;
}
unset($arTask1, $arTask2, $res1, $rsTask_by_id);
//выбираем в каких задачах удаляемый пользователь соисполнитель
$res2 = CTasks::GetList(
array("TITLE" => "ASC"),
array("ACCOMPLICE" => $USER_ID)
);
while ($arTask3 = $res2->GetNext())
{
$rsTask_by_id = CTasks::GetByID($arTask3["ID"]);
if ($arTask4 = $rsTask_by_id->GetNext())
{
//удаление пользователя из массива соисполнителей
$array = array_flip($arTask4['ACCOMPLICES']);
unset ($array[$USER_ID]) ;
$array = array_flip($array);
$arFields = array("ACCOMPLICES" => $array);
$oTaskItem = CTaskItem::getInstance($arTask3["ID"], 1);
$oTaskItem->update($arFields);
//echo $arTask3["TITLE"]." (".$arTask3['ID'].") - У задачи удален соисполнитель<br>";
$this->WriteToTrackingService($arTask3["TITLE"]." (".$arTask3['ID'].") - У задачи удален соисполнитель");
}
$i++;
}
//if($i>0){echo $i." - Задачи обработаны";}else{echo "нет задач в выборке";}
if($i>0){$this->WriteToTrackingService($i." - Задачи обработаны");}else{$this->WriteToTrackingService("у пользователя нет задач");}
}//end if tasks
if(CModule::IncludeModule("blog")) {
$SORT = Array("DATE_CREATE" => "DESC", "NAME" => "ASC");
$arFilter = Array(
"ACTIVE" => "Y",
"GROUP_SITE_ID" => SITE_ID,
"OWNER_ID" => $USER_ID
);
//$arSelectedFields = array("ID", "NAME", "DESCRIPTION", "URL", "OWNER_ID", "DATE_CREATE");
$dbBlogs = CBlog::GetList($SORT, $arFilter, false, false, $arSelectedFields);
while ($arBlog = $dbBlogs->Fetch())
{
//echo $arBlog["NAME"]." стал неактивным и перемещен на пользователя uvolen<br>";
$this->WriteToTrackingService($arBlog["NAME"]." стал неактивным и перемещен на пользователя uvolen");
//получаю все комменты блога и переношу на блог id 322 пользователя уволен
$arOrder = Array(
"ID" => "ASC",
);
$arFilter = Array(
"BLOG_ID"=>$arBlog["ID"]
);
$dbComment = CBlogComment::GetList($arOrder, $arFilter, false, false, $arSelectedFields);
while ($arComment = $dbComment->Fetch())
{
$arFields = array(
"BLOG_ID" => 322,
);
$updateID = CBlogComment::Update($arComment["ID"], $arFields);
//echo "Комментарий ".$arComment["AUTHOR_NAME"]."перенесен в блог пользователя uvolen<br>";
$this->WriteToTrackingService("Комментарий ".$arComment["AUTHOR_NAME"]."перенесен в блог пользователя uvolen");
$b++;
}
//меняю владельца самого блога
$arFields = array(
//"ACTIVE" => "N",
"OWNER_ID" => "1658"
);
$updateID = CBlog::Update($arBlog["ID"], $arFields);
CBlog::Delete($arBlog["ID"]);
$a++;
}//end while
//if($b>0){echo "Перемещено ".$b." комментариев<br>";}else{echo "нет комментов";}
//if($a>0){echo "Обработано ".$a." блогов<br>";}else{echo "нет блогов";}
if($a>0){$this->WriteToTrackingService("Обработано ".$a." блогов");}else{$this->WriteToTrackingService("нет блогов");}
if($b>0){$this->WriteToTrackingService("Перемещено ".$b." комментариев");}else{$this->WriteToTrackingService("нет комментов");}
}//end if blog
if (CModule::IncludeModule("meeting"))
{
$arSelect = array("ID", "NAME");
$arFilter = array("MEMBER_ID" => $USER_ID);
$rsSection = CMeeting::GetList(Array("SORT"=>"ASC"), $arFilter, false, false, $arSelect);
while($data = $rsSection -> Fetch())
{
CMeeting::Delete($data["ID"]);
$this->WriteToTrackingService("Планерка ".$data["NAME"]." удалена");
}
}//end if meeting
CUser::Delete($USER_ID);
}
CUser::Delete($USER_ID);
}elseif($usersel == "Уволить"){
$oUser = new CUser;
$aFields = array("ACTIVE" => "N");
$oUser->Update($USER_ID, $aFields);
$strError .= $oUser->LAST_ERROR;
$this->WriteToTrackingService("Ошибка: ".$strError);
$this->WriteToTrackingService("Пользователь стал неактивным");
}
//echo "<pre>"; print_r($arComment); echo "</pre>";
?>
|