diff --git a/newscoop/classes/Article.php b/newscoop/classes/Article.php index 070d9fc41a..ffd07b34f0 100755 --- a/newscoop/classes/Article.php +++ b/newscoop/classes/Article.php @@ -794,8 +794,13 @@ public function delete() $webcode = $article->getWebcodeEntity(); - $em->remove($webcode); - $em->flush(); + if (null !== $webcode) { + try { + $em->remove($webcode); + $em->flush(); + } catch(\Exception $e) {} + } + $em->detach($article); $tmpObj = clone $this; // for log diff --git a/newscoop/classes/Section.php b/newscoop/classes/Section.php index 7c5f08dfdb..6f56bdf5c7 100644 --- a/newscoop/classes/Section.php +++ b/newscoop/classes/Section.php @@ -173,21 +173,46 @@ public function copy($p_destPublicationId, $p_destIssueNumber, */ public function delete($p_deleteArticles = false, $p_deleteArticleTranslations = false) { - $numArticlesDeleted = 0; + $articlesCount = 0; if ($p_deleteArticles) { $languageId = null; if (!$p_deleteArticleTranslations) { $languageId = $this->m_data['IdLanguage']; } - $articles = Article::GetArticles($this->m_data['IdPublication'], - $this->m_data['NrIssue'], - $this->m_data['Number'], - $languageId); - $numArticlesDeleted = count($articles); - foreach ($articles as $deleteMe) { - $deleteMe->delete(); + + $articlesCount = Article::GetArticles( + $this->m_data['IdPublication'], + $this->m_data['NrIssue'], + $this->m_data['Number'], + $languageId, + null, + true + ); + + $batch = 30; + $steps = ($articlesCount > $batch) ? ceil($articlesCount / $batch) : 1; + + for ($i = 0; $i < $steps; $i++) { + $offset = $i * $batch; + $articles = Article::GetArticles( + $this->m_data['IdPublication'], + $this->m_data['NrIssue'], + $this->m_data['Number'], + $languageId, + array( + 'LIMIT' => array( + 'START' => $offset, + 'MAX_ROWS' => $batch + ) + ) + ); + + foreach ($articles as $article) { + $article->delete(); + } } } + $tmpData = $this->m_data; $success = parent::delete(); if ($success) { @@ -197,7 +222,7 @@ public function delete($p_deleteArticles = false, $p_deleteArticleTranslations = } } - return $numArticlesDeleted; + return $articlesCount; } // fn delete /* --------------------------------------------------------------- */