Browse code

[Addition] Add deleteAvatar module

Sebastian Zoglowek authored on27/02/2022 17:15:38
Showing6 changed files
... ...
@@ -26,6 +26,7 @@ $GLOBALS['BE_MOD']['system']['member_settings'] = array
26 26
 // ToDo: Change to ArrayUtil::arrayInsert in the future
27 27
 array_insert($GLOBALS['FE_MOD']['user'], -1, [
28 28
     'avatar'       => 'Oveleon\ContaoMemberExtensionBundle\ModuleAvatar',
29
+    'deleteAvatar' => 'Oveleon\ContaoMemberExtensionBundle\ModuleDeleteAvatar',
29 30
     'memberList'   => 'Oveleon\ContaoMemberExtensionBundle\ModuleMemberList',
30 31
     'memberReader' => 'Oveleon\ContaoMemberExtensionBundle\ModuleMemberReader'
31 32
 ]);
... ...
@@ -20,6 +20,7 @@ use Contao\Controller;
20 20
 // ToDo: Change to ArrayUtil::arrayInsert in the future
21 21
 array_insert($GLOBALS['TL_DCA']['tl_module']['palettes'], 0, [
22 22
     'avatar' => '{title_legend},name,headline,type;{source_legend},imgSize;{template_legend:hide},memberTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID',
23
+    'deleteAvatar' => '{title_legend},name,headline,type;{template_legend:hide},customTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID',
23 24
     'memberList' => '{title_legend},name,headline,type;{config_legend},groups,memberFields,imgSize;{redirect_legend},jumpTo;{template_legend:hide},customTpl,memberListTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID',
24 25
     'memberReader' => '{title_legend},name,headline,type;{config_legend},groups,memberFields,imgSize;{template_legend:hide},customTpl,memberReaderTpl;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID'
25 26
 ]);
... ...
@@ -9,6 +9,14 @@
9 9
         <source>More</source>
10 10
         <target>Mehr</target>
11 11
       </trans-unit>
12
+      <trans-unit id="MSC.deleteAvatar">
13
+        <source>Delete avatar</source>
14
+        <target>Profilbild löschen</target>
15
+      </trans-unit>
16
+      <trans-unit id="MSC.avatarDeleted">
17
+        <source>The avatar was successfully deleted</source>
18
+        <target>Das Profilbild wurde erfolgreich gelöscht</target>
19
+      </trans-unit>
12 20
     </body>
13 21
   </file>
14 22
 </xliff>
... ...
@@ -17,6 +17,14 @@
17 17
         <source>Displays the profile picture of the member.</source>
18 18
         <target>Zeigt das Profilbild des Mitgliedes an.</target>
19 19
       </trans-unit>
20
+      <trans-unit id="FMD.deleteAvatar.0">
21
+        <source>Delete avatar</source>
22
+        <target>Profilbild löschen</target>
23
+      </trans-unit>
24
+      <trans-unit id="FMD.deleteAvatar.1">
25
+        <source>Adds a button to delete the avatar of the member.</source>
26
+        <target>Fügt eine Schaltfläche zum Löschen des Profilbildes hinzu.</target>
27
+      </trans-unit>
20 28
       <trans-unit id="FMD.memberList.0">
21 29
         <source>Memberlist</source>
22 30
         <target>Mitgliederliste</target>
23 31
new file mode 100644
... ...
@@ -0,0 +1,135 @@
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      Daniele Sciannimanica   <https://github.com/doishub>
11
+ * @author      Fabian Ekert            <https://github.com/eki89>
12
+ * @author      Sebastian Zoglowek      <https://github.com/zoglo>
13
+ * @copyright   Oveleon                 <https://www.oveleon.de/>
14
+ */
15
+
16
+namespace Oveleon\ContaoMemberExtensionBundle;
17
+
18
+use Contao\BackendTemplate;
19
+use Contao\Config;
20
+use Contao\FrontendUser;
21
+use Contao\Input;
22
+use Contao\MemberModel;
23
+use Contao\Module;
24
+use Contao\StringUtil;
25
+use Contao\System;
26
+
27
+/**
28
+ * Class ModuleDeleteAvatar
29
+ *
30
+ * @author Sebastian Zoglowek <https://github.com/zoglo>
31
+ */
32
+class ModuleDeleteAvatar extends Module
33
+{
34
+    /**
35
+     * Template.
36
+     *
37
+     * @var string
38
+     */
39
+    protected $strTemplate = 'memberExtension_deleteAvatar';
40
+
41
+    /**
42
+     * Return a wildcard in the back end
43
+     *
44
+     * @return string
45
+     */
46
+    public function generate()
47
+    {
48
+        $container = System::getContainer();
49
+
50
+        $request = System::getContainer()->get('request_stack')->getCurrentRequest();
51
+
52
+        if ($request && System::getContainer()->get('contao.routing.scope_matcher')->isBackendRequest($request))
53
+        {
54
+            $objTemplate = new BackendTemplate('be_wildcard');
55
+            $objTemplate->wildcard = '### ' . mb_strtoupper($GLOBALS['TL_LANG']['FMD']['deleteAvatar'][0] ?? '', 'UTF-8') . ' ###';
56
+            $objTemplate->title = $this->headline;
57
+            $objTemplate->id = $this->id;
58
+            $objTemplate->link = $this->name;
59
+            $objTemplate->href = 'contao/main.php?do=themes&amp;table=tl_module&amp;act=edit&amp;id=' . $this->id;
60
+
61
+            return $objTemplate->parse();
62
+        }
63
+
64
+        // Set the item from the auto_item parameter
65
+        if (!isset($_GET['items']) && isset($_GET['auto_item']) && Config::get('useAutoItem'))
66
+        {
67
+            Input::setGet('items', Input::get('auto_item'));
68
+        }
69
+
70
+        // Return if there is no logged-in user
71
+        if (!$container->get('contao.security.token_checker')->hasFrontendUser())
72
+        {
73
+            return '';
74
+        }
75
+
76
+        $this->import(FrontendUser::class, 'User');
77
+        $objMember = MemberModel::findByPk($this->User->id);
78
+
79
+        if(null === $objMember)
80
+        {
81
+            return '';
82
+        }
83
+
84
+        // Confirmation message
85
+        $session = System::getContainer()->get('session');
86
+        $flashBag = $session->getFlashBag();
87
+
88
+        // Return if there is no flashbag message or an avatar
89
+        if (!($session->isStarted() && $flashBag->has('mod_avatar_deleted')) && !$objMember->avatar)
90
+        {
91
+            return '';
92
+        }
93
+
94
+        return parent::generate();
95
+    }
96
+
97
+    /**
98
+     * Generate the module
99
+     */
100
+    protected function compile()
101
+    {
102
+        $strFormId = 'deleteAvatar_' . $this->id;
103
+        $session = System::getContainer()->get('session');
104
+        $flashBag = $session->getFlashBag();
105
+
106
+        // Get form submit
107
+        if (Input::post('FORM_SUBMIT') == $strFormId)
108
+        {
109
+            $this->import(FrontendUser::class, 'User');
110
+            $objMember = MemberModel::findByPk($this->User->id);
111
+
112
+            // Delete avatar if it exists
113
+            if(!!$objMember->avatar)
114
+            {
115
+                Member::deleteAvatar($objMember);
116
+                // Unset avatar
117
+                $objMember->avatar = null;
118
+                $objMember->save();
119
+
120
+                // Set message for deletion feedback
121
+                $flashBag->set('mod_avatar_deleted', $GLOBALS['TL_LANG']['MSC']['avatarDeleted']);
122
+                $this->reload();
123
+            }
124
+        }
125
+
126
+        // Confirmation message
127
+        if($session->isStarted() && $flashBag->has('mod_avatar_deleted')) {
128
+            $arrMessages = $flashBag->get('mod_avatar_deleted');
129
+            $this->Template->message = $arrMessages[0];
130
+        }
131
+
132
+        $this->Template->formId = $strFormId;
133
+        $this->Template->slabel = StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['deleteAvatar']);
134
+    }
135
+}
0 136
new file mode 100644
... ...
@@ -0,0 +1,23 @@
1
+<?php $this->extend('block_unsearchable'); ?>
2
+
3
+<?php $this->block('content'); ?>
4
+
5
+<!-- indexer::stop -->
6
+
7
+  <?php if ($this->message): ?>
8
+    <p class="tl_confirm"><?= $this->message ?></p>
9
+  <?php else: ?>
10
+    <form id="<?= $this->formId ?>" method="post">
11
+      <div class="formbody">
12
+        <input type="hidden" name="FORM_SUBMIT" value="<?= $this->formId ?>">
13
+        <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
14
+        <div class="widget widget-submit">
15
+          <button type="submit" class="submit"><?= $this->slabel ?></button>
16
+        </div>
17
+      </div>
18
+    </form>
19
+  <?php endif; ?>
20
+
21
+<!-- indexer::continue -->
22
+
23
+<?php $this->endblock(); ?>