Browse code

Version 1.5 initial commit

Benjamin Roth authored on24/06/2024 12:06:17
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,104 @@
1
+<?php
2
+
3
+declare(strict_types=1);
4
+
5
+/*
6
+ * This file is part of Oveleon ContaoMemberExtension Bundle.
7
+ *
8
+ * @package     contao-member-extension-bundle
9
+ * @license     MIT
10
+ * @author      Sebastian Zoglowek     <https://github.com/zoglo>
11
+ * @author      Daniele Sciannimanica  <https://github.com/doishub>
12
+ * @author      Fabian Ekert           <https://github.com/eki89>
13
+ * @copyright   Oveleon                <https://www.oveleon.de/>
14
+ */
15
+
16
+namespace Oveleon\ContaoMemberExtensionBundle\Controller\FrontendModule;
17
+
18
+use Contao\CoreBundle\ContaoCoreBundle;
19
+use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
20
+use Contao\CoreBundle\Exception\PageNotFoundException;
21
+use Contao\Environment;
22
+use Contao\FrontendTemplate;
23
+use Contao\Input;
24
+use Contao\MemberModel;
25
+use Contao\ModuleModel;
26
+use Contao\PageModel;
27
+use Contao\StringUtil;
28
+use Contao\System;
29
+use Contao\Template;
30
+use Symfony\Component\HttpFoundation\Request;
31
+use Symfony\Component\HttpFoundation\Response;
32
+
33
+#[AsFrontendModule(MemberReaderController::TYPE, category: 'user', template: 'mod_memberReader')]
34
+class MemberReaderController extends MemberExtensionController
35
+{
36
+    const TYPE = 'memberReader';
37
+
38
+    protected function getResponse(Template $template, ModuleModel $model, Request $request): Response
39
+    {
40
+        $auto_item = Input::get('auto_item');
41
+
42
+        if (
43
+            version_compare(ContaoCoreBundle::getVersion(), '5', '<') &&
44
+            !isset($_GET['items']) &&
45
+            isset($_GET['auto_item']) &&
46
+            $this->useAutoItem()
47
+        ) {
48
+            Input::setGet('member', Input::get('auto_item'));
49
+            $auto_item = Input::get('member');
50
+
51
+        }
52
+
53
+        if (null === $auto_item)
54
+        {
55
+            return new Response();
56
+        }
57
+
58
+        $member = MemberModel::findByIdOrAlias($auto_item);
59
+
60
+        // The member does not exist and is not deactivated
61
+        if (null === $member || $member->disable)
62
+        {
63
+            throw new PageNotFoundException('Page not found: ' . Environment::get('uri'));
64
+        }
65
+
66
+        // Check for group intersection
67
+        $arrGroups = StringUtil::deserialize($model->ext_groups);
68
+        $memberGroups = StringUtil::deserialize($member->groups);
69
+
70
+        if (empty($arrGroups) || !\is_array($arrGroups) || !\count(array_intersect($arrGroups, $memberGroups)))
71
+        {
72
+            throw new PageNotFoundException('Page not found: ' . Environment::get('uri'));
73
+        }
74
+
75
+        // Hook modify the member detail page
76
+        if (isset($GLOBALS['TL_HOOKS']['parseMemberReader']) && \is_array($GLOBALS['TL_HOOKS']['parseMemberReader']))
77
+        {
78
+            foreach ($GLOBALS['TL_HOOKS']['parseMemberReader'] as $callback)
79
+            {
80
+                System::importStatic($callback[0])->{$callback[1]}($member, $template, $model, $this);
81
+            }
82
+        }
83
+
84
+        $this->memberFields = StringUtil::deserialize($model->memberFields, true);
85
+
86
+        $memberTemplate = new FrontendTemplate($model->memberReaderTpl ?: 'memberExtension_reader_full');
87
+        $memberTemplate->setData($member->row());
88
+
89
+        if ($model->overviewPage)
90
+        {
91
+            $template->referer = PageModel::findById($model->overviewPage)->getFrontendUrl();
92
+            $template->back = $model->customLabel ?: $GLOBALS['TL_LANG']['MSC']['goBack'];
93
+        }
94
+        else
95
+        {
96
+            $template->referer = 'javascript:history.go(-1)';
97
+            $template->back = $GLOBALS['TL_LANG']['MSC']['goBack'];
98
+        }
99
+
100
+        $template->member = $this->parseMemberTemplate($member, $memberTemplate, $model);
101
+
102
+        return $template->getResponse();
103
+    }
104
+}