Browse code

Change bundle structure

Sebastian Zoglowek authored on14/08/2022 15:51:15
Showing1 changed files
1 1
deleted file mode 100644
... ...
@@ -1,178 +0,0 @@
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\Config;
19
-use Contao\Date;
20
-use Contao\Environment;
21
-use Contao\MemberGroupModel;
22
-use Contao\MemberModel;
23
-use Contao\Module;
24
-use Contao\PageModel;
25
-use Contao\StringUtil;
26
-use Contao\System;
27
-
28
-/**
29
- * Parent class for member modules.
30
- *
31
- * @author Daniele Sciannimanica <https://github.com/doishub>
32
- */
33
-abstract class ModuleMemberExtension extends Module
34
-{
35
-    /**
36
-     * Parse member template
37
-     *
38
-     * @param $objMember
39
-     * @param $objTemplate
40
-     * @param $arrMemberFields
41
-     * @param $strImgSize
42
-     * @return string
43
-     */
44
-    protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $strImgSize): string
45
-    {
46
-        System::loadLanguageFile('default');
47
-        System::loadLanguageFile('tl_member');
48
-        System::loadLanguageFile('countries');
49
-        System::loadLanguageFile('languages');
50
-
51
-        $arrFields = [];
52
-
53
-        foreach ($arrMemberFields as $field)
54
-        {
55
-            switch($field)
56
-            {
57
-                /*case 'homeDir':
58
-                case 'assignDir':
59
-                    break;*/
60
-
61
-                case 'avatar':
62
-                    Member::parseMemberAvatar($objMember, $objTemplate, $strImgSize);
63
-                    break;
64
-
65
-                default:
66
-                    if($varValue = $objMember->{$field})
67
-                    {
68
-                        if (\is_array(($arrValue = StringUtil::deserialize($varValue))))
69
-                        {
70
-                            $arrFields[$field] = implode(",", $arrValue);
71
-                        }
72
-                        else
73
-                        {
74
-                            $arrFields[$field] = $varValue;
75
-                        }
76
-                        //self::parseMemberDetails($arrFields, $field, $varValue);
77
-                    }
78
-            }
79
-        }
80
-
81
-        $objTemplate->fields = $arrFields;
82
-
83
-        if($this->jumpTo)
84
-        {
85
-            $objTemplate->link = $this->generateMemberUrl($objMember);
86
-        }
87
-
88
-        return $objTemplate->parse();
89
-    }
90
-
91
-    /**
92
-     * Generate a URL and return it as string
93
-     *
94
-     * @param MemberModel $objMember
95
-     *
96
-     * @return string
97
-     */
98
-    protected function generateMemberUrl(MemberModel $objMember): string
99
-    {
100
-        $objPage = PageModel::findPublishedById($this->jumpTo);
101
-
102
-        if (!$objPage instanceof PageModel)
103
-        {
104
-            $strLink = ampersand(Environment::get('request'));
105
-        }
106
-        else
107
-        {
108
-            $params = (Config::get('useAutoItem') ? '/' : '/items/') . ($objMember->alias ?: $objMember->id);
109
-            $strLink = ampersand($objPage->getFrontendUrl($params));
110
-        }
111
-
112
-        return $strLink;
113
-    }
114
-
115
-    protected function parseMemberDetails(&$arrFields, $field, $value)
116
-    {
117
-        $strReturn = sprintf('<span class="label">%s: </span>',$GLOBALS['TL_LANG']['tl_member'][$field][0] ?? null);
118
-
119
-        if (!\is_array(($arrValue = StringUtil::deserialize($value))))
120
-        {
121
-            switch ($field) {
122
-                case 'gender':
123
-                    $strReturn .= $GLOBALS['TL_LANG']['MSC'][$value] ?? $value;
124
-                    break;
125
-
126
-                case 'email':
127
-                    $strEmail = StringUtil::encodeEmail($value);
128
-                    $strReturn .= '<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;' . $strEmail . '" title="' . $strEmail . '">' . preg_replace('/\?.*$/', '', $strEmail) . '</a>';
129
-                    break;
130
-
131
-                case 'phone':
132
-                case 'mobile':
133
-                case 'fax':
134
-                    $strTel = preg_replace('/[^a-z\d+]/i', '', (string)$value);
135
-                    $strReturn .= '<a href="tel:' . $strTel . '" title="' . $value . '">' . $value . '</a>';
136
-                    break;
137
-
138
-                case 'website':
139
-                    $strUrl = $value;
140
-
141
-                    if (strncmp($value, 'http://', 7) !== 0 || strncmp($value, 'https://', 8) !== 0) {
142
-                        $strUrl = 'https://' . $value;
143
-                    }
144
-
145
-                    $strReturn .= '<a href="' . $strUrl . '" title="' . $value . '" target="blank noopener" rel="noreferer">' . $value . '</a>';
146
-                    break;
147
-
148
-                case 'dateOfBirth':
149
-                    $strReturn .= Date::parse(Config::get('dateFormat'), $value) ?? $value;
150
-                    break;
151
-
152
-                case 'country':
153
-                    $strReturn .= $GLOBALS['TL_LANG']['CNT'][$value] ?? $value;
154
-                    break;
155
-
156
-                case 'language':
157
-                    $strReturn .= $GLOBALS['TL_LANG']['LNG'][$value] ?? $value;
158
-                    break;
159
-
160
-                default:
161
-                    $strReturn .= $value;
162
-            }
163
-        }
164
-        else if ('groups' === $field)
165
-        {
166
-            $arrReturn = [];
167
-
168
-            foreach ($arrValue as $value)
169
-            {
170
-                $arrReturn[] = MemberGroupModel::findById($value)->name;
171
-            }
172
-
173
-            $strReturn .= implode(", ", $arrReturn);
174
-        }
175
-
176
-        $arrFields[$field] = $strReturn;
177
-    }
178
-}
Browse code

Revert parseMemberDetails

Sebastian Zoglowek authored on10/08/2022 13:47:23
Showing1 changed files
... ...
@@ -65,7 +65,15 @@ abstract class ModuleMemberExtension extends Module
65 65
                 default:
66 66
                     if($varValue = $objMember->{$field})
67 67
                     {
68
-                        self::parseMemberDetails($arrFields, $field, $varValue);
68
+                        if (\is_array(($arrValue = StringUtil::deserialize($varValue))))
69
+                        {
70
+                            $arrFields[$field] = implode(",", $arrValue);
71
+                        }
72
+                        else
73
+                        {
74
+                            $arrFields[$field] = $varValue;
75
+                        }
76
+                        //self::parseMemberDetails($arrFields, $field, $varValue);
69 77
                     }
70 78
             }
71 79
         }
Browse code

[Update] Parse specific fields and add labels

Sebastian Zoglowek authored on09/08/2022 08:41:41
Showing1 changed files
... ...
@@ -16,8 +16,9 @@ declare(strict_types=1);
16 16
 namespace Oveleon\ContaoMemberExtensionBundle;
17 17
 
18 18
 use Contao\Config;
19
+use Contao\Date;
19 20
 use Contao\Environment;
20
-use Contao\FilesModel;
21
+use Contao\MemberGroupModel;
21 22
 use Contao\MemberModel;
22 23
 use Contao\Module;
23 24
 use Contao\PageModel;
... ...
@@ -40,14 +41,23 @@ abstract class ModuleMemberExtension extends Module
40 41
      * @param $strImgSize
41 42
      * @return string
42 43
      */
43
-    protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $strImgSize)
44
+    protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $strImgSize): string
44 45
     {
46
+        System::loadLanguageFile('default');
47
+        System::loadLanguageFile('tl_member');
48
+        System::loadLanguageFile('countries');
49
+        System::loadLanguageFile('languages');
50
+
45 51
         $arrFields = [];
46 52
 
47 53
         foreach ($arrMemberFields as $field)
48 54
         {
49 55
             switch($field)
50 56
             {
57
+                /*case 'homeDir':
58
+                case 'assignDir':
59
+                    break;*/
60
+
51 61
                 case 'avatar':
52 62
                     Member::parseMemberAvatar($objMember, $objTemplate, $strImgSize);
53 63
                     break;
... ...
@@ -55,14 +65,7 @@ abstract class ModuleMemberExtension extends Module
55 65
                 default:
56 66
                     if($varValue = $objMember->{$field})
57 67
                     {
58
-                        if (\is_array(($arrValue = StringUtil::deserialize($varValue))))
59
-                        {
60
-                            $arrFields[$field] = implode(",", $arrValue);
61
-                        }
62
-                        else
63
-                        {
64
-                            $arrFields[$field] = $varValue;
65
-                        }
68
+                        self::parseMemberDetails($arrFields, $field, $varValue);
66 69
                     }
67 70
             }
68 71
         }
... ...
@@ -84,7 +87,7 @@ abstract class ModuleMemberExtension extends Module
84 87
      *
85 88
      * @return string
86 89
      */
87
-    protected function generateMemberUrl($objMember)
90
+    protected function generateMemberUrl(MemberModel $objMember): string
88 91
     {
89 92
         $objPage = PageModel::findPublishedById($this->jumpTo);
90 93
 
... ...
@@ -100,4 +103,68 @@ abstract class ModuleMemberExtension extends Module
100 103
 
101 104
         return $strLink;
102 105
     }
106
+
107
+    protected function parseMemberDetails(&$arrFields, $field, $value)
108
+    {
109
+        $strReturn = sprintf('<span class="label">%s: </span>',$GLOBALS['TL_LANG']['tl_member'][$field][0] ?? null);
110
+
111
+        if (!\is_array(($arrValue = StringUtil::deserialize($value))))
112
+        {
113
+            switch ($field) {
114
+                case 'gender':
115
+                    $strReturn .= $GLOBALS['TL_LANG']['MSC'][$value] ?? $value;
116
+                    break;
117
+
118
+                case 'email':
119
+                    $strEmail = StringUtil::encodeEmail($value);
120
+                    $strReturn .= '<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;' . $strEmail . '" title="' . $strEmail . '">' . preg_replace('/\?.*$/', '', $strEmail) . '</a>';
121
+                    break;
122
+
123
+                case 'phone':
124
+                case 'mobile':
125
+                case 'fax':
126
+                    $strTel = preg_replace('/[^a-z\d+]/i', '', (string)$value);
127
+                    $strReturn .= '<a href="tel:' . $strTel . '" title="' . $value . '">' . $value . '</a>';
128
+                    break;
129
+
130
+                case 'website':
131
+                    $strUrl = $value;
132
+
133
+                    if (strncmp($value, 'http://', 7) !== 0 || strncmp($value, 'https://', 8) !== 0) {
134
+                        $strUrl = 'https://' . $value;
135
+                    }
136
+
137
+                    $strReturn .= '<a href="' . $strUrl . '" title="' . $value . '" target="blank noopener" rel="noreferer">' . $value . '</a>';
138
+                    break;
139
+
140
+                case 'dateOfBirth':
141
+                    $strReturn .= Date::parse(Config::get('dateFormat'), $value) ?? $value;
142
+                    break;
143
+
144
+                case 'country':
145
+                    $strReturn .= $GLOBALS['TL_LANG']['CNT'][$value] ?? $value;
146
+                    break;
147
+
148
+                case 'language':
149
+                    $strReturn .= $GLOBALS['TL_LANG']['LNG'][$value] ?? $value;
150
+                    break;
151
+
152
+                default:
153
+                    $strReturn .= $value;
154
+            }
155
+        }
156
+        else if ('groups' === $field)
157
+        {
158
+            $arrReturn = [];
159
+
160
+            foreach ($arrValue as $value)
161
+            {
162
+                $arrReturn[] = MemberGroupModel::findById($value)->name;
163
+            }
164
+
165
+            $strReturn .= implode(", ", $arrReturn);
166
+        }
167
+
168
+        $arrFields[$field] = $strReturn;
169
+    }
103 170
 }
Browse code

[Addition] Add member avatar insert tags

Sebastian Zoglowek authored on24/05/2022 13:38:16
Showing1 changed files
... ...
@@ -31,8 +31,6 @@ use Contao\System;
31 31
  */
32 32
 abstract class ModuleMemberExtension extends Module
33 33
 {
34
-    const DEFAULT_PICTURE = 'bundles/contaomemberextension/avatar.png';
35
-
36 34
     /**
37 35
      * Parse member template
38 36
      *
... ...
@@ -51,7 +49,7 @@ abstract class ModuleMemberExtension extends Module
51 49
             switch($field)
52 50
             {
53 51
                 case 'avatar':
54
-                    $this->parseMemberAvatar($objMember, $objTemplate, $strImgSize);
52
+                    Member::parseMemberAvatar($objMember, $objTemplate, $strImgSize);
55 53
                     break;
56 54
 
57 55
                 default:
... ...
@@ -80,49 +78,6 @@ abstract class ModuleMemberExtension extends Module
80 78
     }
81 79
 
82 80
     /**
83
-     * Parses an avatar to the template
84
-     *
85
-     * @param MemberModel $objMember
86
-     * @param $objTemplate
87
-     * @param $strImgSize
88
-     * @return void
89
-     */
90
-    protected function parseMemberAvatar(MemberModel $objMember, $objTemplate, $strImgSize)
91
-    {
92
-        $objTemplate->singleSRC = self::DEFAULT_PICTURE;
93
-        $objTemplate->addImage = false;
94
-
95
-        $uuidDefault = Config::get('defaultAvatar');
96
-
97
-        if(!!$objMember->avatar)
98
-        {
99
-            $objFile = FilesModel::findByUuid($objMember->avatar);
100
-        }
101
-        else if(!!$uuidDefault)
102
-        {
103
-            $objFile = FilesModel::findByUuid($uuidDefault);
104
-        }
105
-        else
106
-        {
107
-            return;
108
-        }
109
-
110
-        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
111
-
112
-        // If file does not exist use default image
113
-        if (null === $objFile || !\is_file($projectDir . '/' . $objFile->path))
114
-        {
115
-            return;
116
-        }
117
-
118
-        $objTemplate->addImage = true;
119
-        $this->size = $strImgSize;
120
-        $this->singleSRC = $objFile->path;
121
-        //ToDo: Change to FigureBuilder in the future
122
-        $this->addImageToTemplate($objTemplate, $this->arrData);
123
-    }
124
-
125
-    /**
126 81
      * Generate a URL and return it as string
127 82
      *
128 83
      * @param MemberModel $objMember
Browse code

[Update] Refactoring and simplifying member templates

Sebastian Zoglowek authored on24/05/2022 01:40:07
Showing1 changed files
... ...
@@ -31,17 +31,18 @@ use Contao\System;
31 31
  */
32 32
 abstract class ModuleMemberExtension extends Module
33 33
 {
34
+    const DEFAULT_PICTURE = 'bundles/contaomemberextension/avatar.png';
35
+
34 36
     /**
35 37
      * Parse member template
36 38
      *
37 39
      * @param $objMember
38 40
      * @param $objTemplate
39 41
      * @param $arrMemberFields
40
-     * @param $varImgSize
41
-     *
42
+     * @param $strImgSize
42 43
      * @return string
43 44
      */
44
-    protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $varImgSize)
45
+    protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $strImgSize)
45 46
     {
46 47
         $arrFields = [];
47 48
 
... ...
@@ -50,7 +51,7 @@ abstract class ModuleMemberExtension extends Module
50 51
             switch($field)
51 52
             {
52 53
                 case 'avatar':
53
-                    $this->addAvatarToTemplate($objMember, $objTemplate, $varImgSize);
54
+                    $this->parseMemberAvatar($objMember, $objTemplate, $strImgSize);
54 55
                     break;
55 56
 
56 57
                 default:
... ...
@@ -79,42 +80,46 @@ abstract class ModuleMemberExtension extends Module
79 80
     }
80 81
 
81 82
     /**
82
-     * Add avatar to template
83
+     * Parses an avatar to the template
83 84
      *
84
-     * @param $objMember
85
+     * @param MemberModel $objMember
85 86
      * @param $objTemplate
86
-     * @param $varImgSize
87
+     * @param $strImgSize
88
+     * @return void
87 89
      */
88
-    protected function addAvatarToTemplate($objMember, $objTemplate, $varImgSize)
90
+    protected function parseMemberAvatar(MemberModel $objMember, $objTemplate, $strImgSize)
89 91
     {
92
+        $objTemplate->singleSRC = self::DEFAULT_PICTURE;
90 93
         $objTemplate->addImage = false;
91 94
 
92
-        if (!$objMember->avatar && !Config::get('defaultAvatar'))
93
-        {
94
-            return;
95
-        }
95
+        $uuidDefault = Config::get('defaultAvatar');
96 96
 
97
-        $arrData = ['size' => $varImgSize];
98
-        
99 97
         if(!!$objMember->avatar)
100 98
         {
101 99
             $objFile = FilesModel::findByUuid($objMember->avatar);
102 100
         }
101
+        else if(!!$uuidDefault)
102
+        {
103
+            $objFile = FilesModel::findByUuid($uuidDefault);
104
+        }
103 105
         else
104 106
         {
105
-            $objFile = FilesModel::findByUuid(Config::get('defaultAvatar'));
107
+            return;
106 108
         }
107 109
 
108
-        if ($objFile === null || !is_file(System::getContainer()->getParameter('kernel.project_dir') . '/' . $objFile->path))
110
+        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
111
+
112
+        // If file does not exist use default image
113
+        if (null === $objFile || !\is_file($projectDir . '/' . $objFile->path))
109 114
         {
110 115
             return;
111 116
         }
112 117
 
113
-        $arrData['singleSRC'] = $objFile->path;
114 118
         $objTemplate->addImage = true;
115
-
119
+        $this->size = $strImgSize;
120
+        $this->singleSRC = $objFile->path;
116 121
         //ToDo: Change to FigureBuilder in the future
117
-        $this->addImageToTemplate($objTemplate, $arrData, null, null, $objFile);
122
+        $this->addImageToTemplate($objTemplate, $this->arrData);
118 123
     }
119 124
 
120 125
     /**
Browse code

[Update] Add classes for member fields to templates

Sebastian Zoglowek authored on23/05/2022 22:50:21
Showing1 changed files
... ...
@@ -58,11 +58,11 @@ abstract class ModuleMemberExtension extends Module
58 58
                     {
59 59
                         if (\is_array(($arrValue = StringUtil::deserialize($varValue))))
60 60
                         {
61
-                            $arrFields[] = implode(",", $arrValue);
61
+                            $arrFields[$field] = implode(",", $arrValue);
62 62
                         }
63 63
                         else
64 64
                         {
65
-                            $arrFields[] = $varValue;
65
+                            $arrFields[$field] = $varValue;
66 66
                         }
67 67
                     }
68 68
             }
Browse code

[Update] PHP8 and Contao 4.13 compatibility

Sebastian Zoglowek authored on26/02/2022 03:05:40
Showing1 changed files
... ...
@@ -1,8 +1,16 @@
1 1
 <?php
2
+
3
+declare(strict_types=1);
4
+
2 5
 /*
3 6
  * This file is part of Oveleon ContaoMemberExtension Bundle.
4 7
  *
5
- * (c) https://www.oveleon.de/
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/>
6 14
  */
7 15
 
8 16
 namespace Oveleon\ContaoMemberExtensionBundle;
... ...
@@ -14,6 +22,7 @@ use Contao\MemberModel;
14 22
 use Contao\Module;
15 23
 use Contao\PageModel;
16 24
 use Contao\StringUtil;
25
+use Contao\System;
17 26
 
18 27
 /**
19 28
  * Parent class for member modules.
... ...
@@ -80,40 +89,31 @@ abstract class ModuleMemberExtension extends Module
80 89
     {
81 90
         $objTemplate->addImage = false;
82 91
 
83
-        $arrData = array(
84
-            'size' => $varImgSize
85
-        );
86
-
87
-        if ($objMember->avatar == '' && Config::get('defaultAvatar') == '')
92
+        if (!$objMember->avatar && !Config::get('defaultAvatar'))
88 93
         {
89 94
             return;
90 95
         }
91 96
 
92
-        if ($objMember->avatar == '')
97
+        $arrData = ['size' => $varImgSize];
98
+        
99
+        if(!!$objMember->avatar)
93 100
         {
94
-            $objFile = FilesModel::findByUuid( Config::get('defaultAvatar') );
95
-
96
-            if ($objFile === null || !is_file(TL_ROOT . '/' . $objFile->path))
97
-            {
98
-                return;
99
-            }
100
-
101
-            $arrData['singleSRC'] = $objFile->path;
102
-            $objTemplate->addImage = true;
103
-            $this->addImageToTemplate($objTemplate, $arrData);
101
+            $objFile = FilesModel::findByUuid($objMember->avatar);
102
+        }
103
+        else
104
+        {
105
+            $objFile = FilesModel::findByUuid(Config::get('defaultAvatar'));
104 106
         }
105 107
 
106
-        $objFile = FilesModel::findByUuid($objMember->avatar);
107
-
108
-        if ($objFile === null || !is_file(TL_ROOT . '/' . $objFile->path))
108
+        if ($objFile === null || !is_file(System::getContainer()->getParameter('kernel.project_dir') . '/' . $objFile->path))
109 109
         {
110
-            $arrData['singleSRC'] = FilesModel::findByUuid(Config::get('defaultAvatar'))->path;
111
-            $objTemplate->addImage = true;
112
-            $this->addImageToTemplate($objTemplate, $arrData);
110
+            return;
113 111
         }
114 112
 
115 113
         $arrData['singleSRC'] = $objFile->path;
116 114
         $objTemplate->addImage = true;
115
+
116
+        //ToDo: Change to FigureBuilder in the future
117 117
         $this->addImageToTemplate($objTemplate, $arrData, null, null, $objFile);
118 118
     }
119 119
 
Browse code

Clean up files

doishub authored on08/12/2020 15:43:32
Showing1 changed files
... ...
@@ -74,7 +74,7 @@ abstract class ModuleMemberExtension extends Module
74 74
      *
75 75
      * @param $objMember
76 76
      * @param $objTemplate
77
-     * @param $varImageSize
77
+     * @param $varImgSize
78 78
      */
79 79
     protected function addAvatarToTemplate($objMember, $objTemplate, $varImgSize)
80 80
     {
Browse code

Clean up files

doishub authored on08/12/2020 15:40:57
Showing1 changed files
... ...
@@ -28,7 +28,7 @@ abstract class ModuleMemberExtension extends Module
28 28
      * @param $objMember
29 29
      * @param $objTemplate
30 30
      * @param $arrMemberFields
31
-     * @param $varImageSize
31
+     * @param $varImgSize
32 32
      *
33 33
      * @return string
34 34
      */
Browse code

Clean up files

doishub authored on08/12/2020 15:40:42
Showing1 changed files
... ...
@@ -14,7 +14,6 @@ use Contao\MemberModel;
14 14
 use Contao\Module;
15 15
 use Contao\PageModel;
16 16
 use Contao\StringUtil;
17
-use Contao\System;
18 17
 
19 18
 /**
20 19
  * Parent class for member modules.
Browse code

- Add module "MemberList" - Add module "MemberReader"

doishub authored on08/12/2020 15:39:30
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,144 @@
1
+<?php
2
+/*
3
+ * This file is part of Oveleon ContaoMemberExtension Bundle.
4
+ *
5
+ * (c) https://www.oveleon.de/
6
+ */
7
+
8
+namespace Oveleon\ContaoMemberExtensionBundle;
9
+
10
+use Contao\Config;
11
+use Contao\Environment;
12
+use Contao\FilesModel;
13
+use Contao\MemberModel;
14
+use Contao\Module;
15
+use Contao\PageModel;
16
+use Contao\StringUtil;
17
+use Contao\System;
18
+
19
+/**
20
+ * Parent class for member modules.
21
+ *
22
+ * @author Daniele Sciannimanica <https://github.com/doishub>
23
+ */
24
+abstract class ModuleMemberExtension extends Module
25
+{
26
+    /**
27
+     * Parse member template
28
+     *
29
+     * @param $objMember
30
+     * @param $objTemplate
31
+     * @param $arrMemberFields
32
+     * @param $varImageSize
33
+     *
34
+     * @return string
35
+     */
36
+    protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $varImgSize)
37
+    {
38
+        $arrFields = [];
39
+
40
+        foreach ($arrMemberFields as $field)
41
+        {
42
+            switch($field)
43
+            {
44
+                case 'avatar':
45
+                    $this->addAvatarToTemplate($objMember, $objTemplate, $varImgSize);
46
+                    break;
47
+
48
+                default:
49
+                    if($varValue = $objMember->{$field})
50
+                    {
51
+                        if (\is_array(($arrValue = StringUtil::deserialize($varValue))))
52
+                        {
53
+                            $arrFields[] = implode(",", $arrValue);
54
+                        }
55
+                        else
56
+                        {
57
+                            $arrFields[] = $varValue;
58
+                        }
59
+                    }
60
+            }
61
+        }
62
+
63
+        $objTemplate->fields = $arrFields;
64
+
65
+        if($this->jumpTo)
66
+        {
67
+            $objTemplate->link = $this->generateMemberUrl($objMember);
68
+        }
69
+
70
+        return $objTemplate->parse();
71
+    }
72
+
73
+    /**
74
+     * Add avatar to template
75
+     *
76
+     * @param $objMember
77
+     * @param $objTemplate
78
+     * @param $varImageSize
79
+     */
80
+    protected function addAvatarToTemplate($objMember, $objTemplate, $varImgSize)
81
+    {
82
+        $objTemplate->addImage = false;
83
+
84
+        $arrData = array(
85
+            'size' => $varImgSize
86
+        );
87
+
88
+        if ($objMember->avatar == '' && Config::get('defaultAvatar') == '')
89
+        {
90
+            return;
91
+        }
92
+
93
+        if ($objMember->avatar == '')
94
+        {
95
+            $objFile = FilesModel::findByUuid( Config::get('defaultAvatar') );
96
+
97
+            if ($objFile === null || !is_file(TL_ROOT . '/' . $objFile->path))
98
+            {
99
+                return;
100
+            }
101
+
102
+            $arrData['singleSRC'] = $objFile->path;
103
+            $objTemplate->addImage = true;
104
+            $this->addImageToTemplate($objTemplate, $arrData);
105
+        }
106
+
107
+        $objFile = FilesModel::findByUuid($objMember->avatar);
108
+
109
+        if ($objFile === null || !is_file(TL_ROOT . '/' . $objFile->path))
110
+        {
111
+            $arrData['singleSRC'] = FilesModel::findByUuid(Config::get('defaultAvatar'))->path;
112
+            $objTemplate->addImage = true;
113
+            $this->addImageToTemplate($objTemplate, $arrData);
114
+        }
115
+
116
+        $arrData['singleSRC'] = $objFile->path;
117
+        $objTemplate->addImage = true;
118
+        $this->addImageToTemplate($objTemplate, $arrData, null, null, $objFile);
119
+    }
120
+
121
+    /**
122
+     * Generate a URL and return it as string
123
+     *
124
+     * @param MemberModel $objMember
125
+     *
126
+     * @return string
127
+     */
128
+    protected function generateMemberUrl($objMember)
129
+    {
130
+        $objPage = PageModel::findPublishedById($this->jumpTo);
131
+
132
+        if (!$objPage instanceof PageModel)
133
+        {
134
+            $strLink = ampersand(Environment::get('request'));
135
+        }
136
+        else
137
+        {
138
+            $params = (Config::get('useAutoItem') ? '/' : '/items/') . ($objMember->alias ?: $objMember->id);
139
+            $strLink = ampersand($objPage->getFrontendUrl($params));
140
+        }
141
+
142
+        return $strLink;
143
+    }
144
+}