/** * Delete a draft * * @return ViewModel */ public function deleteAction() { // Denied user viewing if no front-end management permission assigned if (!$this->config('enable_front_edit') && 'front' == $this->section) { return $this->jumpTo404(); } $id = $this->params('id', ''); $ids = array_filter(explode(',', $id)); $from = $this->params('from', ''); $status = $this->params('status', 0); $source = $this->params('source', ''); if (empty($ids)) { return $this->jumpTo404(__('Invalid draft ID')); } // Delete draft articles that user has permission to do $isMine = false; if (ARTICLE::FIELD_STATUS_PUBLISHED != $status and 'my' == $source) { $isMine = true; } $model = $this->getModel('draft'); $rules = Rule::getPermission($isMine); if (1 == count($ids)) { $row = $model->find($ids[0]); $slug = Draft::getStatusSlug($row->status); $resource = $slug . '-delete'; if (!(isset($rules[$row->category][$resource]) and $rules[$row->category][$resource])) { return $this->jumpToDenied(); } } else { $rows = $model->select(array('id' => $ids)); $ids = array(); foreach ($rows as $row) { $slug = Draft::getStatusSlug($row->status); $resource = $slug . '-delete'; if (isset($rules[$row->category][$resource]) and $rules[$row->category][$resource]) { $ids[] = $row->id; } } } // Delete draft if (!empty($ids)) { $model->delete(array('id' => $ids)); } // Redirect to original page if ($from) { $from = urldecode($from); return $this->redirect()->toUrl($from); } else { return $this->redirect()->toRoute('', array('action' => 'list', 'controller' => 'draft', 'status' => DraftModel::FIELD_STATUS_DRAFT)); } }
/** * Delete published articles * * @return ViewModel */ public function deleteAction() { // Denied user viewing if no front-end management permission assigned if (!$this->config('enable_front_edit') && 'front' == $this->section) { return $this->jumpTo404(); } $id = $this->params('id', ''); $ids = array_filter(explode(',', $id)); $from = $this->params('from', ''); if (empty($ids)) { return $this->jumpTo404(__('Invalid article ID')); } $module = $this->getModule(); $modelArticle = $this->getModel('article'); $modelAsset = $this->getModel('asset'); // Delete articles that user has permission to do $rules = Rule::getPermission(); if (1 == count($ids)) { $row = $modelArticle->find($ids[0]); $slug = Draft::getStatusSlug($row->status); $resource = $slug . '-delete'; if (!(isset($rules[$row->category][$resource]) and $rules[$row->category][$resource])) { return $this->jumpToDenied(); } } else { $rows = $modelArticle->select(array('id' => $ids)); $ids = array(); foreach ($rows as $row) { $slug = Draft::getStatusSlug($row->status); $resource = $slug . '-delete'; if (isset($rules[$row->category][$resource]) and $rules[$row->category][$resource]) { $ids[] = $row->id; } } } $resultsetArticle = $modelArticle->select(array('id' => $ids)); // Step operation foreach ($resultsetArticle as $article) { // Delete feature image if ($article->image) { @unlink(Pi::path($article->image)); @unlink(Pi::path(Media::getThumbFromOriginal($article->image))); } } // Batch operation // Deleting extended fields $this->getModel('extended')->delete(array('article' => $ids)); // Deleting statistics $this->getModel('stats')->delete(array('article' => $ids)); // Deleting compiled article $this->getModel('compiled')->delete(array('article' => $ids)); // Delete tag if ($this->config('enable_tag')) { Pi::service('tag')->delete($module, $ids); } // Delete related articles $this->getModel('related')->delete(array('article' => $ids)); // Delete visits $this->getModel('visit')->delete(array('article' => $ids)); // Delete assets $modelAsset->delete(array('article' => $ids)); // Delete article directly $modelArticle->delete(array('id' => $ids)); // Clear cache Pi::service('render')->flushCache($module); if ($from) { $from = urldecode($from); return $this->redirect()->toUrl($from); } else { // Go to list page return $this->redirect()->toRoute('', array('controller' => 'article', 'action' => 'published', 'from' => 'all')); } }