示例#1
0
 /**
  * TODO: не всегда удаляются комментарии удаляемого пользователя - проверить, почему?
  *
  * @param   int|object  $oUserId
  * @return  bool
  */
 public function DelUser($oUserId)
 {
     if (is_object($oUserId)) {
         $nUserId = $oUserId->getId();
     } else {
         $nUserId = intval($oUserId);
     }
     /**
      * TODO: не возникают ли взаимные блокировки при удалении связанных сущностей?
      *
     $this->oMapper->transaction();
     */
     // Удаляем блоги
     $aBlogsId = $this->Blog_GetBlogsByOwnerId($nUserId, true);
     if ($aBlogsId) {
         foreach ($aBlogsId as $nBlogId) {
             $this->DelBlog($nBlogId, false);
         }
     }
     $oBlog = $this->Blog_GetPersonalBlogByUserId($nUserId);
     if ($oBlog) {
         $this->DelBlog($oBlog->GetId(), false);
     }
     // Удаляем переписку
     $iPerPage = 10000;
     do {
         $aTalks = $this->Talk_GetTalksByFilter(array('user_id' => $nUserId), 1, $iPerPage);
         if ($aTalks['count']) {
             $aTalksId = array();
             foreach ($aTalks['collection'] as $oTalk) {
                 $aTalksId[] = $oTalk->getId();
             }
             if ($aTalksId) {
                 $this->Talk_DeleteTalkUserByArray($aTalksId, $nUserId);
             }
         }
     } while ($aTalks['count'] > $iPerPage);
     // Чистим ленту активности
     $this->ClearStreamByUser($nUserId);
     $bOk = $this->oMapper->DelUser($nUserId);
     /*
     if ($bOk)
         $this->oMapper->commit();
     else
         $this->oMapper->rollback();
     */
     // Слишком много взаимосвязей, поэтому просто сбрасываем кеш
     $this->Cache_Clean();
     return $bOk;
 }