<?php
/**
 * @property \modelContent $model
 */
class actionContentItemDelete extends cmsAction {

    public function run() {

        // Получаем тип контента
        $ctype = $this->model->getContentTypeByName($this->request->get('ctype_name', ''));
        if (!$ctype) {
            return cmsCore::error404();
        }

        $item = $this->model->getContentItem($ctype['name'], $this->request->get('id', 0));
        if (!$item) {
            return cmsCore::error404();
        }

        $permissions = cmsEventsManager::hook('content_delete_permissions', [
            'can_delete' => false,
            'item'       => $item,
            'ctype'      => $ctype
        ]);

        // проверяем наличие доступа
        if (!cmsUser::isAllowed($ctype['name'], 'delete') && !$permissions['can_delete']) {
            return cmsCore::error404();
        }
        if (!cmsUser::isAllowed($ctype['name'], 'delete', 'all') &&
                $item['user_id'] != $this->cms_user->id &&
                !$permissions['can_delete']) {
            return cmsCore::error404();
        }

        $is_moderator = $this->controller_moderation->userIsContentModerator($ctype['name'], $this->cms_user->id, $item);
        if (!$item['is_approved'] && !$is_moderator && !$item['is_draft']) {
            return cmsCore::error404();
        }

        // Не вышло ли время для удаления
        if (cmsUser::isPermittedLimitReached($ctype['name'], 'delete_times', ((time() - strtotime($item['date_pub'])) / 60))) {

            cmsUser::addSessionMessage(LANG_CONTENT_PERMS_TIME_UP_DELETE, 'error');

            return $this->redirectTo($ctype['name'], $item['slug'] . '.html');
        }

        // в случае отклонения неодобренной записи
        if ($this->request->isAjax() && !$item['is_approved'] && !$item['is_draft']) {

            return $this->cms_template->render('item_refuse', [
                'ctype' => $ctype,
                'item'  => $item
            ]);
        }

        if (!cmsForm::validateCSRFToken($this->request->get('csrf_token', ''))) {
            return cmsCore::error404();
        }

        $back_action = '';

        if ($ctype['is_cats'] && $item['category_id']) {

            $category    = $this->model->getCategory($ctype['name'], $item['category_id']);

            if ($category) {
                $back_action = $category['slug'];
            }
        }

        $this->model->deleteContentItem($ctype['name'], $item['id']);

        if (!$item['is_approved'] && !$item['is_draft'] && $item['user_id'] != $this->cms_user->id) {

            $item['reason'] = trim(strip_tags($this->request->get('reason', '')));

            $this->controller_moderation->moderationNotifyAuthor($item, 'moderation_refused');
        }

        cmsUser::addSessionMessage(LANG_DELETE_SUCCESS, 'success');

        $back_url = $this->getRequestBackUrl();

        if ($back_url) {
            return $this->redirect($back_url);
        } else {
            if ($ctype['options']['list_on']) {
                return $this->redirectTo($ctype['name'], $back_action);
            } else {
                return $this->redirectToHome();
            }
        }
    }

}
