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
 }