/
DefaultDelete.php
107 lines (86 loc) · 3.18 KB
/
DefaultDelete.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
/*
* Copyright (c) 2018 Heimrich & Hannot GmbH
*
* @license LGPL-3.0-or-later
*/
namespace HeimrichHannot\ReaderBundle\ConfigElementType\Delete;
use Contao\CoreBundle\Exception\PageNotFoundException;
use Contao\CoreBundle\Framework\ContaoFrameworkInterface;
use Contao\FrontendUser;
use Contao\Model;
use Contao\PageModel;
use Contao\StringUtil;
use Contao\System;
use HeimrichHannot\ReaderBundle\Backend\ReaderConfigElement;
use HeimrichHannot\ReaderBundle\Item\ItemInterface;
use HeimrichHannot\ReaderBundle\Model\ReaderConfigElementModel;
class DefaultDelete implements DeleteInterface
{
/**
* @var ContaoFrameworkInterface
*/
protected $framework;
public function __construct(ContaoFrameworkInterface $framework)
{
$this->framework = $framework;
}
public function delete(ItemInterface $item, ReaderConfigElementModel $readerConfigElement)
{
if ($readerConfigElement->addMemberGroups && !$this->checkPermission($readerConfigElement->memberGroups)) {
return;
}
$readerConfig = System::getContainer()->get('huh.reader.reader-config-registry')->findByPk($readerConfigElement->pid);
if (null === $readerConfig) {
return;
}
$redirectParams = StringUtil::deserialize($readerConfigElement->redirectParams, true);
$values = [];
$columns = [];
foreach ($redirectParams as $redirectParam) {
if (ReaderConfigElement::REDIRECTION_PARAM_TYPE_FIELD_VALUE !== $redirectParam['parameterType'] || !System::getContainer()->get('huh.request')->hasGet($redirectParam['name'])) {
continue;
}
$columns[] = $redirectParam['name'];
$values[] = System::getContainer()->get('huh.request')->getGet($redirectParam['name']);
}
/** @var Model $model */
$model = System::getContainer()->get('huh.utils.model')->findOneModelInstanceBy($readerConfig->dataContainer, $columns, $values);
if (null === $model) {
return;
}
if (!$model->delete()) {
throw new \Exception('Could not delete Model.');
}
$this->redirectAfterDelete($readerConfigElement->deleteJumpTo);
}
/**
* @param $jumpTo
*/
protected function redirectAfterDelete($jumpTo)
{
/** @var PageModel $pageModel */
$pageModel = $this->framework->getAdapter(PageModel::class)->findPublishedById($jumpTo);
if (null === $pageModel) {
throw new PageNotFoundException('The redirect page with the id:'.$jumpTo.'does not exist.');
}
System::getContainer()->get('huh.utils.url')->redirect($pageModel->getFrontendUrl());
}
/**
* check if the frontend user is allowed to delete the item.
*
* @param $memberGroups
*
* @return bool
*/
protected function checkPermission($memberGroups)
{
$memberGroups = StringUtil::deserialize($memberGroups, true);
/** @var FrontendUser $user */
$user = $this->framework->createInstance(FrontendUser::class);
if (array_intersect($user->groups, $memberGroups)) {
return true;
}
return false;
}
}