Browse code

Change bundle structure

Sebastian Zoglowek authored on14/08/2022 15:51:15
Showing1 changed files
1 1
deleted file mode 100644
... ...
@@ -1,323 +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\CoreBundle\Monolog\ContaoContext;
20
-use Contao\Dbafs;
21
-use Contao\File;
22
-use Contao\FilesModel;
23
-use Contao\FileUpload;
24
-use Contao\Frontend;
25
-use Contao\FrontendUser;
26
-use Contao\MemberModel;
27
-use Contao\StringUtil;
28
-use Contao\System;
29
-use Contao\Validator;
30
-use Psr\Log\LogLevel;
31
-
32
-
33
-/**
34
- * Class Member
35
- *
36
- * @property int $avatar UUID of the avatar
37
- */
38
-class Member extends Frontend
39
-{
40
-    const DEFAULT_PICTURE = 'bundles/contaomemberextension/avatar.png';
41
-
42
-    /**
43
-     * MemberAvatar file name
44
-     */
45
-    protected string $avatarName = 'memberAvatar';
46
-
47
-    /**
48
-     * Create avatar for a member | Registration
49
-     */
50
-    public function createAvatar(int $userId, array $arrData): void
51
-    {
52
-        $objMember = MemberModel::findById($userId);
53
-        $this->processAvatar($objMember, $arrData);
54
-    }
55
-
56
-    /**
57
-     * Update avatar of a member | Login
58
-     */
59
-    public function updateAvatar(FrontendUser $objUser, array $arrData): void
60
-    {
61
-        $objMember = MemberModel::findById($objUser->id);
62
-        $this->processAvatar($objMember, $arrData);
63
-    }
64
-
65
-    /**
66
-     * Process avatar upload for a member
67
-     */
68
-    protected function processAvatar(MemberModel $objMember, ?array $arrData): void
69
-    {
70
-        $objMember = MemberModel::findByPk($objMember->id);
71
-
72
-        if ($objMember === null)
73
-        {
74
-            return;
75
-        }
76
-
77
-        $file = $_SESSION['FILES']['avatar'];
78
-        $maxlength_kb = $this->getMaximumUploadSize();
79
-        $maxlength_kb_readable = $this->getReadableSize($maxlength_kb);
80
-
81
-        // Sanitize the filename
82
-        try
83
-        {
84
-            $file['name'] = StringUtil::sanitizeFileName($file['name']);
85
-        }
86
-        catch (\InvalidArgumentException $e)
87
-        {
88
-            // ToDo: add error message for invalid characters
89
-            return;
90
-        }
91
-
92
-        // Invalid file name
93
-        if (!Validator::isValidFileName($file['name']))
94
-        {
95
-            // ToDo: add error message for invalid characters
96
-            return;
97
-        }
98
-
99
-        // File was not uploaded
100
-        if (!is_uploaded_file($file['tmp_name']))
101
-        {
102
-            // ToDo: Add error messages
103
-            /*if ($file['error'] == 1 || $file['error'] == 2) { // Add error message for maximum file size }
104
-            elseif ($file['error'] == 3) { // Add error message for partial upload }
105
-            elseif ($file['error'] > 0) { // Add error message for failed upload }*/
106
-
107
-            unset($_SESSION['FILES']['avatar']);
108
-
109
-            return;
110
-        }
111
-
112
-        // File is too big
113
-        if ($file['size'] > $maxlength_kb)
114
-        {
115
-            // ToDo: add error message for maximum file size
116
-            unset($_SESSION['FILES']['avatar']);
117
-
118
-            return;
119
-        }
120
-
121
-        $objFile = new File($file['name']);
122
-        $uploadTypes = StringUtil::trimsplit(',', \Config::get('validImageTypes'));
123
-
124
-        // File type is not allowed
125
-        if (!\in_array($objFile->extension, $uploadTypes))
126
-        {
127
-            // ToDo: add error message for not allowed file type
128
-            unset($_SESSION['FILES']['avatar']);
129
-
130
-            return;
131
-        }
132
-
133
-        if ($arrImageSize = @getimagesize($file['tmp_name']))
134
-        {
135
-            $intImageWidth = Config::get('imageWidth');
136
-
137
-            // Image exceeds maximum image width
138
-            if ($intImageWidth > 0 && $arrImageSize[0] > $intImageWidth) {
139
-                // ToDo: add error message for exceeding width
140
-                unset($_SESSION['FILES']['avatar']);
141
-
142
-                return;
143
-            }
144
-
145
-            $intImageHeight = Config::get('imageHeight');
146
-
147
-            // Image exceeds maximum image height
148
-            if ($intImageHeight > 0 && $arrImageSize[1] > $intImageHeight) {
149
-                // ToDo: add error message for exceeding height
150
-                unset($_SESSION['FILES']['avatar']);
151
-
152
-                return;
153
-            }
154
-        }
155
-
156
-        // Upload valid file type with no width and height -> svg
157
-
158
-        // Don't upload if no homedir is assigned
159
-        // ToDo: Create homedir?
160
-        if (!$objMember->assignDir || !$objMember->homeDir)
161
-        {
162
-            // ToDo: add error message for no homedir
163
-            return;
164
-        }
165
-
166
-        $intUploadFolder = $objMember->homeDir;
167
-
168
-        $objUploadFolder = FilesModel::findByUuid($intUploadFolder);
169
-
170
-        // The upload folder could not be found
171
-        if ($objUploadFolder === null)
172
-        {
173
-            throw new Exception("Invalid upload folder ID $intUploadFolder");
174
-        }
175
-
176
-        $strUploadFolder = $objUploadFolder->path;
177
-
178
-        // Store the file if the upload folder exists
179
-        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
180
-
181
-        if (!!$strUploadFolder & is_dir($projectDir . '/' . $strUploadFolder))
182
-        {
183
-            // Delete existing avatar if it exists
184
-            $this->deleteAvatar($objMember);
185
-
186
-            $this->import('Files');
187
-
188
-            // Rename file
189
-            $file['name'] =  $this->avatarName . '.' . $objFile->extension;
190
-
191
-            // Move the file to its destination
192
-            $this->Files->move_uploaded_file($file['tmp_name'], $strUploadFolder . '/' . $file['name']);
193
-            $this->Files->chmod($strUploadFolder . '/' . $file['name'], 0666 & ~umask());
194
-
195
-            $strUuid = null;
196
-            $strFile = $strUploadFolder . '/' . $file['name'];
197
-
198
-
199
-            // Generate the DB entries
200
-            if (Dbafs::shouldBeSynchronized($strFile))
201
-            {
202
-                $objModel = FilesModel::findByPath($strFile);
203
-
204
-                if ($objModel === null)
205
-                {
206
-                    $objModel = Dbafs::addResource($strFile);
207
-                }
208
-
209
-                $strUuid = StringUtil::binToUuid($objModel->uuid);
210
-
211
-                // Update the hash of the target folder
212
-                Dbafs::updateFolderHashes($strUploadFolder);
213
-
214
-                // Update member avatar
215
-                $objMember->avatar = $objModel->uuid;
216
-                $objMember->save();
217
-            }
218
-
219
-            // Add the session entry
220
-            $_SESSION['FILES']['avatar'] = array
221
-            (
222
-                'name'     => $file['name'],
223
-                'type'     => $file['type'],
224
-                'tmp_name' => $projectDir . '/' . $strFile,
225
-                'error'    => $file['error'],
226
-                'size'     => $file['size'],
227
-                'uploaded' => true,
228
-                'uuid'     => $strUuid
229
-            );
230
-
231
-            // Add a log entry
232
-            $logger = System::getContainer()->get('monolog.logger.contao');
233
-            $logger->log(LogLevel::INFO, 'File "' . $strUploadFolder . '/' . $file['name'] . '" has been uploaded', ['contao' => new ContaoContext(__METHOD__, TL_FILES)]);
234
-        }
235
-
236
-        unset($_SESSION['FILES']['avatar']);
237
-    }
238
-
239
-    /**
240
-     * Return the maximum upload file size in bytes
241
-     */
242
-    protected function getMaximumUploadSize(): string
243
-    {
244
-        if ($this->maxlength > 0)
245
-        {
246
-            return $this->maxlength;
247
-        }
248
-
249
-        return FileUpload::getMaxUploadSize();
250
-    }
251
-
252
-    /**
253
-     * Parses an avatar to the template
254
-     */
255
-    public static function parseMemberAvatar(?MemberModel $objMember, &$objTemplate, $strImgSize): void
256
-    {
257
-        $objTemplate->addImage= true;
258
-
259
-        $objTemplate->singleSRC = self::DEFAULT_PICTURE;
260
-        $objTemplate->addFallbackImage = true;
261
-
262
-        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
263
-
264
-        // Check if member avatar exists
265
-        if(null === $objMember || null === $objMember->avatar || null === ($objFile = FilesModel::findByUuid($objMember->avatar)) || !\is_file($projectDir.'/'.$objFile->path))
266
-        {
267
-            $objFile = !!($uuidDefault = Config::get('defaultAvatar')) ? FilesModel::findByUuid($uuidDefault) : null;
268
-        }
269
-
270
-        // Check if config avatar exists
271
-        if (null === $objFile || !\is_file($projectDir . '/' . $objFile->path))
272
-        {
273
-            return;
274
-        }
275
-
276
-        $objTemplate->addFallbackImage = false;
277
-        $arrData = ['singleSRC'=>$objFile->path, 'size'=>$strImgSize];
278
-
279
-        //ToDo: Change to FigureBuilder in the future
280
-        $objTemplate->addImageToTemplate($objTemplate, $arrData, null, null, $objFile);
281
-    }
282
-
283
-    /**
284
-     * Gets the url for a member avatar
285
-     */
286
-    public static function getMemberAvatarURL(?MemberModel $objMember): string
287
-    {
288
-        // ToDo: Merge logic with parseMemberAvatar
289
-        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
290
-
291
-        if(null === $objMember || null === $objMember->avatar || null === ($objFile = FilesModel::findByUuid($objMember->avatar)) || !\is_file($projectDir.'/'. $objFile->path))
292
-        {
293
-            $objFile = !!($uuidDefault = Config::get('defaultAvatar')) ? FilesModel::findByUuid($uuidDefault) : null;
294
-        }
295
-
296
-        // Check if config avatar exists
297
-        if (null === $objFile || !\is_file($projectDir . '/' . $objFile->path))
298
-        {
299
-            return self::DEFAULT_PICTURE;
300
-        }
301
-
302
-        return $objFile->path;
303
-    }
304
-
305
-    /**
306
-     * Deletes an avatar
307
-     */
308
-    public static function deleteAvatar(MemberModel $objMember): void
309
-    {
310
-        if(!!$objMember->avatar)
311
-        {
312
-            $objFile = FilesModel::findByUuid($objMember->avatar) ?: '';
313
-            $projectDir = System::getContainer()->getParameter('kernel.project_dir');
314
-
315
-            // Only delete if file exists
316
-            if (!!$objFile && file_exists($projectDir . '/' . $objFile->path))
317
-            {
318
-                $file = new File($objFile->path);
319
-                $file->delete();
320
-            }
321
-        }
322
-    }
323
-}
Browse code

Fix potential PHP8 errors

Sebastian Zoglowek authored on14/08/2022 15:19:39
Showing1 changed files
... ...
@@ -41,18 +41,11 @@ class Member extends Frontend
41 41
 
42 42
     /**
43 43
      * MemberAvatar file name
44
-     *
45
-     * @var string
46 44
      */
47
-    protected $avatarName = 'memberAvatar';
45
+    protected string $avatarName = 'memberAvatar';
48 46
 
49 47
     /**
50 48
      * Create avatar for a member | Registration
51
-     *
52
-     * @param int   $userId
53
-     * @param array $arrData
54
-     *
55
-     * @return void
56 49
      */
57 50
     public function createAvatar(int $userId, array $arrData): void
58 51
     {
... ...
@@ -62,13 +55,8 @@ class Member extends Frontend
62 55
 
63 56
     /**
64 57
      * Update avatar of a member | Login
65
-     *
66
-     * @param FrontendUser  $objUser
67
-     * @param array         $arrData
68
-     *
69
-     * @return void
70 58
      */
71
-    public function updateAvatar(FrontendUser $objUser, $arrData): void
59
+    public function updateAvatar(FrontendUser $objUser, array $arrData): void
72 60
     {
73 61
         $objMember = MemberModel::findById($objUser->id);
74 62
         $this->processAvatar($objMember, $arrData);
... ...
@@ -76,11 +64,6 @@ class Member extends Frontend
76 64
 
77 65
     /**
78 66
      * Process avatar upload for a member
79
-     *
80
-     * @param MemberModel   $objMember
81
-     * @param array         $arrData
82
-     *
83
-     * @return void
84 67
      */
85 68
     protected function processAvatar(MemberModel $objMember, ?array $arrData): void
86 69
     {
... ...
@@ -173,6 +156,7 @@ class Member extends Frontend
173 156
         // Upload valid file type with no width and height -> svg
174 157
 
175 158
         // Don't upload if no homedir is assigned
159
+        // ToDo: Create homedir?
176 160
         if (!$objMember->assignDir || !$objMember->homeDir)
177 161
         {
178 162
             // ToDo: add error message for no homedir
... ...
@@ -186,7 +170,7 @@ class Member extends Frontend
186 170
         // The upload folder could not be found
187 171
         if ($objUploadFolder === null)
188 172
         {
189
-            throw new \Exception("Invalid upload folder ID $intUploadFolder");
173
+            throw new Exception("Invalid upload folder ID $intUploadFolder");
190 174
         }
191 175
 
192 176
         $strUploadFolder = $objUploadFolder->path;
... ...
@@ -246,7 +230,7 @@ class Member extends Frontend
246 230
 
247 231
             // Add a log entry
248 232
             $logger = System::getContainer()->get('monolog.logger.contao');
249
-            $logger->log(LogLevel::INFO, 'File "' . $strUploadFolder . '/' . $file['name'] . '" has been uploaded', array('contao' => new ContaoContext(__METHOD__, TL_FILES)));
233
+            $logger->log(LogLevel::INFO, 'File "' . $strUploadFolder . '/' . $file['name'] . '" has been uploaded', ['contao' => new ContaoContext(__METHOD__, TL_FILES)]);
250 234
         }
251 235
 
252 236
         unset($_SESSION['FILES']['avatar']);
... ...
@@ -254,10 +238,8 @@ class Member extends Frontend
254 238
 
255 239
     /**
256 240
      * Return the maximum upload file size in bytes
257
-     *
258
-     * @return string
259 241
      */
260
-    protected function getMaximumUploadSize()
242
+    protected function getMaximumUploadSize(): string
261 243
     {
262 244
         if ($this->maxlength > 0)
263 245
         {
... ...
@@ -269,13 +251,8 @@ class Member extends Frontend
269 251
 
270 252
     /**
271 253
      * Parses an avatar to the template
272
-     *
273
-     * @param MemberModel|null $objMember
274
-     * @param $objTemplate
275
-     * @param $strImgSize
276
-     * @return void
277 254
      */
278
-    public static function parseMemberAvatar(?MemberModel $objMember, &$objTemplate, $strImgSize)
255
+    public static function parseMemberAvatar(?MemberModel $objMember, &$objTemplate, $strImgSize): void
279 256
     {
280 257
         $objTemplate->addImage= true;
281 258
 
... ...
@@ -305,9 +282,6 @@ class Member extends Frontend
305 282
 
306 283
     /**
307 284
      * Gets the url for a member avatar
308
-     *
309
-     * @param MemberModel|null $objMember
310
-     * @return string
311 285
      */
312 286
     public static function getMemberAvatarURL(?MemberModel $objMember): string
313 287
     {
... ...
@@ -329,9 +303,7 @@ class Member extends Frontend
329 303
     }
330 304
 
331 305
     /**
332
-     * @param MemberModel $objMember
333
-     *
334
-     * @return void
306
+     * Deletes an avatar
335 307
      */
336 308
     public static function deleteAvatar(MemberModel $objMember): void
337 309
     {
Browse code

[Update] Consider if avatar file does not exist and added getMemberAvatarURL

Sebastian Zoglowek authored on10/08/2022 11:40:39
Showing1 changed files
... ...
@@ -32,7 +32,7 @@ use Psr\Log\LogLevel;
32 32
 
33 33
 /**
34 34
  * Class Member
35
- * 
35
+ *
36 36
  * @property int $avatar UUID of the avatar
37 37
  */
38 38
 class Member extends Frontend
... ...
@@ -270,36 +270,27 @@ class Member extends Frontend
270 270
     /**
271 271
      * Parses an avatar to the template
272 272
      *
273
-     * @param MemberModel $objMember
273
+     * @param MemberModel|null $objMember
274 274
      * @param $objTemplate
275 275
      * @param $strImgSize
276 276
      * @return void
277 277
      */
278
-    public static function parseMemberAvatar(MemberModel $objMember, &$objTemplate, $strImgSize)
278
+    public static function parseMemberAvatar(?MemberModel $objMember, &$objTemplate, $strImgSize)
279 279
     {
280 280
         $objTemplate->addImage= true;
281 281
 
282 282
         $objTemplate->singleSRC = self::DEFAULT_PICTURE;
283 283
         $objTemplate->addFallbackImage = true;
284 284
 
285
-        $uuidDefault = Config::get('defaultAvatar');
285
+        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
286 286
 
287
-        if(!!$objMember->avatar)
288
-        {
289
-            $objFile = FilesModel::findByUuid($objMember->avatar);
290
-        }
291
-        else if(!!$uuidDefault)
292
-        {
293
-            $objFile = FilesModel::findByUuid($uuidDefault);
294
-        }
295
-        else
287
+        // Check if member avatar exists
288
+        if(null === $objMember || null === $objMember->avatar || null === ($objFile = FilesModel::findByUuid($objMember->avatar)) || !\is_file($projectDir.'/'.$objFile->path))
296 289
         {
297
-            return;
290
+            $objFile = !!($uuidDefault = Config::get('defaultAvatar')) ? FilesModel::findByUuid($uuidDefault) : null;
298 291
         }
299 292
 
300
-        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
301
-
302
-        // If file does not exist use default image
293
+        // Check if config avatar exists
303 294
         if (null === $objFile || !\is_file($projectDir . '/' . $objFile->path))
304 295
         {
305 296
             return;
... ...
@@ -313,6 +304,31 @@ class Member extends Frontend
313 304
     }
314 305
 
315 306
     /**
307
+     * Gets the url for a member avatar
308
+     *
309
+     * @param MemberModel|null $objMember
310
+     * @return string
311
+     */
312
+    public static function getMemberAvatarURL(?MemberModel $objMember): string
313
+    {
314
+        // ToDo: Merge logic with parseMemberAvatar
315
+        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
316
+
317
+        if(null === $objMember || null === $objMember->avatar || null === ($objFile = FilesModel::findByUuid($objMember->avatar)) || !\is_file($projectDir.'/'. $objFile->path))
318
+        {
319
+            $objFile = !!($uuidDefault = Config::get('defaultAvatar')) ? FilesModel::findByUuid($uuidDefault) : null;
320
+        }
321
+
322
+        // Check if config avatar exists
323
+        if (null === $objFile || !\is_file($projectDir . '/' . $objFile->path))
324
+        {
325
+            return self::DEFAULT_PICTURE;
326
+        }
327
+
328
+        return $objFile->path;
329
+    }
330
+
331
+    /**
316 332
      * @param MemberModel $objMember
317 333
      *
318 334
      * @return void
Browse code

[Hotfix] Do not parse image template when not checked in memberlist and reader

Sebastian Zoglowek authored on25/05/2022 16:56:24
Showing1 changed files
... ...
@@ -277,8 +277,10 @@ class Member extends Frontend
277 277
      */
278 278
     public static function parseMemberAvatar(MemberModel $objMember, &$objTemplate, $strImgSize)
279 279
     {
280
+        $objTemplate->addImage= true;
281
+
280 282
         $objTemplate->singleSRC = self::DEFAULT_PICTURE;
281
-        $objTemplate->addImage = false;
283
+        $objTemplate->addFallbackImage = true;
282 284
 
283 285
         $uuidDefault = Config::get('defaultAvatar');
284 286
 
... ...
@@ -303,7 +305,7 @@ class Member extends Frontend
303 305
             return;
304 306
         }
305 307
 
306
-        $objTemplate->addImage = true;
308
+        $objTemplate->addFallbackImage = false;
307 309
         $arrData = ['singleSRC'=>$objFile->path, 'size'=>$strImgSize];
308 310
 
309 311
         //ToDo: Change to FigureBuilder in the future
Browse code

[Update] Consider meta descriptions if they exist

Sebastian Zoglowek authored on24/05/2022 21:23:47
Showing1 changed files
... ...
@@ -307,7 +307,7 @@ class Member extends Frontend
307 307
         $arrData = ['singleSRC'=>$objFile->path, 'size'=>$strImgSize];
308 308
 
309 309
         //ToDo: Change to FigureBuilder in the future
310
-        $objTemplate->addImageToTemplate($objTemplate, $arrData);
310
+        $objTemplate->addImageToTemplate($objTemplate, $arrData, null, null, $objFile);
311 311
     }
312 312
 
313 313
     /**
Browse code

[Addition] Add member avatar insert tags

Sebastian Zoglowek authored on24/05/2022 13:38:16
Showing1 changed files
... ...
@@ -37,6 +37,8 @@ use Psr\Log\LogLevel;
37 37
  */
38 38
 class Member extends Frontend
39 39
 {
40
+    const DEFAULT_PICTURE = 'bundles/contaomemberextension/avatar.png';
41
+
40 42
     /**
41 43
      * MemberAvatar file name
42 44
      *
... ...
@@ -266,6 +268,49 @@ class Member extends Frontend
266 268
     }
267 269
 
268 270
     /**
271
+     * Parses an avatar to the template
272
+     *
273
+     * @param MemberModel $objMember
274
+     * @param $objTemplate
275
+     * @param $strImgSize
276
+     * @return void
277
+     */
278
+    public static function parseMemberAvatar(MemberModel $objMember, &$objTemplate, $strImgSize)
279
+    {
280
+        $objTemplate->singleSRC = self::DEFAULT_PICTURE;
281
+        $objTemplate->addImage = false;
282
+
283
+        $uuidDefault = Config::get('defaultAvatar');
284
+
285
+        if(!!$objMember->avatar)
286
+        {
287
+            $objFile = FilesModel::findByUuid($objMember->avatar);
288
+        }
289
+        else if(!!$uuidDefault)
290
+        {
291
+            $objFile = FilesModel::findByUuid($uuidDefault);
292
+        }
293
+        else
294
+        {
295
+            return;
296
+        }
297
+
298
+        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
299
+
300
+        // If file does not exist use default image
301
+        if (null === $objFile || !\is_file($projectDir . '/' . $objFile->path))
302
+        {
303
+            return;
304
+        }
305
+
306
+        $objTemplate->addImage = true;
307
+        $arrData = ['singleSRC'=>$objFile->path, 'size'=>$strImgSize];
308
+
309
+        //ToDo: Change to FigureBuilder in the future
310
+        $objTemplate->addImageToTemplate($objTemplate, $arrData);
311
+    }
312
+
313
+    /**
269 314
      * @param MemberModel $objMember
270 315
      *
271 316
      * @return void
Browse code

[Bugfix] Fixed a bug within processAvatar

Sebastian Zoglowek authored on28/02/2022 08:16:06
Showing1 changed files
... ...
@@ -80,7 +80,7 @@ class Member extends Frontend
80 80
      *
81 81
      * @return void
82 82
      */
83
-    protected function processAvatar(MemberModel $objMember, array $arrData): void
83
+    protected function processAvatar(MemberModel $objMember, ?array $arrData): void
84 84
     {
85 85
         $objMember = MemberModel::findByPk($objMember->id);
86 86
 
Browse code

Make deleteAvatar method static

Sebastian Zoglowek authored on27/02/2022 17:10:43
Showing1 changed files
... ...
@@ -270,7 +270,7 @@ class Member extends Frontend
270 270
      *
271 271
      * @return void
272 272
      */
273
-    public function deleteAvatar(MemberModel $objMember): void
273
+    public static function deleteAvatar(MemberModel $objMember): void
274 274
     {
275 275
         if(!!$objMember->avatar)
276 276
         {
Browse code

[Update] Change avatar processing for createNewUser and updatePersonalData

Sebastian Zoglowek authored on27/02/2022 14:40:25
Showing1 changed files
... ...
@@ -20,13 +20,21 @@ use Contao\CoreBundle\Monolog\ContaoContext;
20 20
 use Contao\Dbafs;
21 21
 use Contao\File;
22 22
 use Contao\FilesModel;
23
+use Contao\FileUpload;
23 24
 use Contao\Frontend;
25
+use Contao\FrontendUser;
24 26
 use Contao\MemberModel;
25 27
 use Contao\StringUtil;
26 28
 use Contao\System;
27 29
 use Contao\Validator;
28 30
 use Psr\Log\LogLevel;
29 31
 
32
+
33
+/**
34
+ * Class Member
35
+ * 
36
+ * @property int $avatar UUID of the avatar
37
+ */
30 38
 class Member extends Frontend
31 39
 {
32 40
     /**
... ...
@@ -39,24 +47,42 @@ class Member extends Frontend
39 47
     /**
40 48
      * Create avatar for a member | Registration
41 49
      *
42
-     * @param int          $userId
43
-     * @param array        $arrData
50
+     * @param int   $userId
51
+     * @param array $arrData
52
+     *
53
+     * @return void
44 54
      */
45
-    public function createAvatar($userId, $arrData)
55
+    public function createAvatar(int $userId, array $arrData): void
46 56
     {
47 57
         $objMember = MemberModel::findById($userId);
48
-        $this->updateAvatar($objMember, $arrData);
58
+        $this->processAvatar($objMember, $arrData);
59
+    }
60
+
61
+    /**
62
+     * Update avatar of a member | Login
63
+     *
64
+     * @param FrontendUser  $objUser
65
+     * @param array         $arrData
66
+     *
67
+     * @return void
68
+     */
69
+    public function updateAvatar(FrontendUser $objUser, $arrData): void
70
+    {
71
+        $objMember = MemberModel::findById($objUser->id);
72
+        $this->processAvatar($objMember, $arrData);
49 73
     }
50 74
 
51 75
     /**
52
-     * Update avatar of member
76
+     * Process avatar upload for a member
77
+     *
78
+     * @param MemberModel   $objMember
79
+     * @param array         $arrData
53 80
      *
54
-     * @param MemberModel  $objMember
55
-     * @param array        $arrData
81
+     * @return void
56 82
      */
57
-    public function updateAvatar($objUser, $arrData)
83
+    protected function processAvatar(MemberModel $objMember, array $arrData): void
58 84
     {
59
-        $objMember = MemberModel::findByPk($objUser->id);
85
+        $objMember = MemberModel::findByPk($objMember->id);
60 86
 
61 87
         if ($objMember === null)
62 88
         {
... ...
@@ -74,38 +100,26 @@ class Member extends Frontend
74 100
         }
75 101
         catch (\InvalidArgumentException $e)
76 102
         {
77
-            // ToDo: Fehler: Dateiname beinhaltet unzulässige Zeichen
78
-            $this->addError($GLOBALS['TL_LANG']['ERR']['filename']);
79
-
103
+            // ToDo: add error message for invalid characters
80 104
             return;
81 105
         }
82 106
 
83 107
         // Invalid file name
84 108
         if (!Validator::isValidFileName($file['name']))
85 109
         {
86
-            // ToDo: Fehler: Dateiname beinhaltet unzulässige Zeichen
87
-            $this->addError($GLOBALS['TL_LANG']['ERR']['filename']);
110
+            // ToDo: add error message for invalid characters
88 111
             return;
89 112
         }
90 113
 
91 114
         // File was not uploaded
92
-        // ToDo: File was not uploaded
93 115
         if (!is_uploaded_file($file['tmp_name']))
94 116
         {
95
-            if ($file['error'] == 1 || $file['error'] == 2)
96
-            {
97
-                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filesize'], $maxlength_kb_readable));
98
-            }
99
-            elseif ($file['error'] == 3)
100
-            {
101
-                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filepartial'], $file['name']));
102
-            }
103
-            elseif ($file['error'] > 0)
104
-            {
105
-                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['fileerror'], $file['error'], $file['name']));
106
-            }
117
+            // ToDo: Add error messages
118
+            /*if ($file['error'] == 1 || $file['error'] == 2) { // Add error message for maximum file size }
119
+            elseif ($file['error'] == 3) { // Add error message for partial upload }
120
+            elseif ($file['error'] > 0) { // Add error message for failed upload }*/
107 121
 
108
-            unset($_FILES[$this->strName]);
122
+            unset($_SESSION['FILES']['avatar']);
109 123
 
110 124
             return;
111 125
         }
... ...
@@ -113,8 +127,7 @@ class Member extends Frontend
113 127
         // File is too big
114 128
         if ($file['size'] > $maxlength_kb)
115 129
         {
116
-            // ToDo: Fehler: Datei zu groß
117
-            $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filesize'], $maxlength_kb_readable));
130
+            // ToDo: add error message for maximum file size
118 131
             unset($_SESSION['FILES']['avatar']);
119 132
 
120 133
             return;
... ...
@@ -126,8 +139,7 @@ class Member extends Frontend
126 139
         // File type is not allowed
127 140
         if (!\in_array($objFile->extension, $uploadTypes))
128 141
         {
129
-            // ToDo: Fehler: Dateityp nicht erlaubt
130
-            $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension));
142
+            // ToDo: add error message for not allowed file type
131 143
             unset($_SESSION['FILES']['avatar']);
132 144
 
133 145
             return;
... ...
@@ -139,8 +151,8 @@ class Member extends Frontend
139 151
 
140 152
             // Image exceeds maximum image width
141 153
             if ($intImageWidth > 0 && $arrImageSize[0] > $intImageWidth) {
142
-                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filewidth'], $file['name'], $intImageWidth));
143
-                unset($_FILES[$this->strName]);
154
+                // ToDo: add error message for exceeding width
155
+                unset($_SESSION['FILES']['avatar']);
144 156
 
145 157
                 return;
146 158
             }
... ...
@@ -149,8 +161,8 @@ class Member extends Frontend
149 161
 
150 162
             // Image exceeds maximum image height
151 163
             if ($intImageHeight > 0 && $arrImageSize[1] > $intImageHeight) {
152
-                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['fileheight'], $file['name'], $intImageHeight));
153
-                unset($_FILES[$this->strName]);
164
+                // ToDo: add error message for exceeding height
165
+                unset($_SESSION['FILES']['avatar']);
154 166
 
155 167
                 return;
156 168
             }
... ...
@@ -159,9 +171,9 @@ class Member extends Frontend
159 171
         // Upload valid file type with no width and height -> svg
160 172
 
161 173
         // Don't upload if no homedir is assigned
162
-        // ToDo: Add error
163 174
         if (!$objMember->assignDir || !$objMember->homeDir)
164 175
         {
176
+            // ToDo: add error message for no homedir
165 177
             return;
166 178
         }
167 179
 
... ...
@@ -245,45 +257,28 @@ class Member extends Frontend
245 257
      */
246 258
     protected function getMaximumUploadSize()
247 259
     {
248
-        // Get the upload_max_filesize from the php.ini
249
-        $upload_max_filesize = ini_get('upload_max_filesize');
250
-
251
-        // Convert the value to bytes
252
-        if (stripos($upload_max_filesize, 'K') !== false)
260
+        if ($this->maxlength > 0)
253 261
         {
254
-            $upload_max_filesize = round($upload_max_filesize * 1024);
255
-        }
256
-        elseif (stripos($upload_max_filesize, 'M') !== false)
257
-        {
258
-            $upload_max_filesize = round($upload_max_filesize * 1024 * 1024);
259
-        }
260
-        elseif (stripos($upload_max_filesize, 'G') !== false)
261
-        {
262
-            $upload_max_filesize = round($upload_max_filesize * 1024 * 1024 * 1024);
262
+            return $this->maxlength;
263 263
         }
264 264
 
265
-        return min($upload_max_filesize, Config::get('maxFileSize'));
265
+        return FileUpload::getMaxUploadSize();
266 266
     }
267 267
 
268 268
     /**
269
-     * Add an error message
269
+     * @param MemberModel $objMember
270 270
      *
271
-     * @param string $strError The error message
271
+     * @return void
272 272
      */
273
-    public function addError($strError)
274
-    {
275
-        $this->class = 'error';
276
-        $this->arrErrors[] = $strError;
277
-    }
278
-
279
-    public function deleteAvatar($objMember)
273
+    public function deleteAvatar(MemberModel $objMember): void
280 274
     {
281 275
         if(!!$objMember->avatar)
282 276
         {
283
-            $objFile = FilesModel::findByUuid($objMember->avatar) ?? '';
277
+            $objFile = FilesModel::findByUuid($objMember->avatar) ?: '';
278
+            $projectDir = System::getContainer()->getParameter('kernel.project_dir');
284 279
 
285
-            // Only delete existing file
286
-            if (!!$objFile && file_exists($objFile->path))
280
+            // Only delete if file exists
281
+            if (!!$objFile && file_exists($projectDir . '/' . $objFile->path))
287 282
             {
288 283
                 $file = new File($objFile->path);
289 284
                 $file->delete();
Browse code

[Update] Added image + image deletion when uploading an image

Sebastian Zoglowek authored on26/02/2022 03:08:49
Showing1 changed files
... ...
@@ -1,33 +1,57 @@
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
  */
15
+
7 16
 namespace Oveleon\ContaoMemberExtensionBundle;
8 17
 
9 18
 use Contao\Config;
19
+use Contao\CoreBundle\Monolog\ContaoContext;
10 20
 use Contao\Dbafs;
11 21
 use Contao\File;
12 22
 use Contao\FilesModel;
13 23
 use Contao\Frontend;
14
-use Contao\FrontendUser;
15 24
 use Contao\MemberModel;
16 25
 use Contao\StringUtil;
26
+use Contao\System;
17 27
 use Contao\Validator;
28
+use Psr\Log\LogLevel;
18 29
 
19
-/**
20
- * Class Member
21
- *
22
- * @author Fabian Ekert <fabian@oveleon.de>
23
- * @author Daniele Sciannimanica <https://github.com/doishub>
24
- */
25 30
 class Member extends Frontend
26 31
 {
27 32
     /**
33
+     * MemberAvatar file name
34
+     *
35
+     * @var string
36
+     */
37
+    protected $avatarName = 'memberAvatar';
38
+
39
+    /**
40
+     * Create avatar for a member | Registration
41
+     *
42
+     * @param int          $userId
43
+     * @param array        $arrData
44
+     */
45
+    public function createAvatar($userId, $arrData)
46
+    {
47
+        $objMember = MemberModel::findById($userId);
48
+        $this->updateAvatar($objMember, $arrData);
49
+    }
50
+
51
+    /**
28 52
      * Update avatar of member
29 53
      *
30
-     * @param FrontendUser $objUser
54
+     * @param MemberModel  $objMember
31 55
      * @param array        $arrData
32 56
      */
33 57
     public function updateAvatar($objUser, $arrData)
... ...
@@ -41,6 +65,7 @@ class Member extends Frontend
41 65
 
42 66
         $file = $_SESSION['FILES']['avatar'];
43 67
         $maxlength_kb = $this->getMaximumUploadSize();
68
+        $maxlength_kb_readable = $this->getReadableSize($maxlength_kb);
44 69
 
45 70
         // Sanitize the filename
46 71
         try
... ...
@@ -50,6 +75,7 @@ class Member extends Frontend
50 75
         catch (\InvalidArgumentException $e)
51 76
         {
52 77
             // ToDo: Fehler: Dateiname beinhaltet unzulässige Zeichen
78
+            $this->addError($GLOBALS['TL_LANG']['ERR']['filename']);
53 79
 
54 80
             return;
55 81
         }
... ...
@@ -58,17 +84,37 @@ class Member extends Frontend
58 84
         if (!Validator::isValidFileName($file['name']))
59 85
         {
60 86
             // ToDo: Fehler: Dateiname beinhaltet unzulässige Zeichen
61
-
87
+            $this->addError($GLOBALS['TL_LANG']['ERR']['filename']);
62 88
             return;
63 89
         }
64 90
 
65 91
         // File was not uploaded
66
-        // ToDo
92
+        // ToDo: File was not uploaded
93
+        if (!is_uploaded_file($file['tmp_name']))
94
+        {
95
+            if ($file['error'] == 1 || $file['error'] == 2)
96
+            {
97
+                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filesize'], $maxlength_kb_readable));
98
+            }
99
+            elseif ($file['error'] == 3)
100
+            {
101
+                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filepartial'], $file['name']));
102
+            }
103
+            elseif ($file['error'] > 0)
104
+            {
105
+                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['fileerror'], $file['error'], $file['name']));
106
+            }
107
+
108
+            unset($_FILES[$this->strName]);
109
+
110
+            return;
111
+        }
67 112
 
68 113
         // File is too big
69 114
         if ($file['size'] > $maxlength_kb)
70 115
         {
71 116
             // ToDo: Fehler: Datei zu groß
117
+            $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filesize'], $maxlength_kb_readable));
72 118
             unset($_SESSION['FILES']['avatar']);
73 119
 
74 120
             return;
... ...
@@ -81,6 +127,7 @@ class Member extends Frontend
81 127
         if (!\in_array($objFile->extension, $uploadTypes))
82 128
         {
83 129
             // ToDo: Fehler: Dateityp nicht erlaubt
130
+            $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filetype'], $objFile->extension));
84 131
             unset($_SESSION['FILES']['avatar']);
85 132
 
86 133
             return;
... ...
@@ -91,10 +138,9 @@ class Member extends Frontend
91 138
             $intImageWidth = Config::get('imageWidth');
92 139
 
93 140
             // Image exceeds maximum image width
94
-            if ($intImageWidth > 0 && $arrImageSize[0] > $intImageWidth)
95
-            {
96
-                // ToDo: Fehler: Bild ist zu groß in der breite
97
-                unset($_SESSION['FILES']['avatar']);
141
+            if ($intImageWidth > 0 && $arrImageSize[0] > $intImageWidth) {
142
+                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['filewidth'], $file['name'], $intImageWidth));
143
+                unset($_FILES[$this->strName]);
98 144
 
99 145
                 return;
100 146
             }
... ...
@@ -102,81 +148,91 @@ class Member extends Frontend
102 148
             $intImageHeight = Config::get('imageHeight');
103 149
 
104 150
             // Image exceeds maximum image height
105
-            if ($intImageHeight > 0 && $arrImageSize[1] > $intImageHeight)
106
-            {
107
-                // ToDo: Fehler: Bild ist zu groß in der höhe
108
-                unset($_SESSION['FILES']['avatar']);
151
+            if ($intImageHeight > 0 && $arrImageSize[1] > $intImageHeight) {
152
+                $this->addError(sprintf($GLOBALS['TL_LANG']['ERR']['fileheight'], $file['name'], $intImageHeight));
153
+                unset($_FILES[$this->strName]);
109 154
 
110 155
                 return;
111 156
             }
157
+        }
112 158
 
113
-            $_SESSION['FILES']['avatar'] = $_SESSION['FILES']['avatar'];
159
+        // Upload valid file type with no width and height -> svg
114 160
 
115
-            // Overwrite the upload folder with user's home directory
116
-            if (!$objMember->assignDir || !$objMember->homeDir)
117
-            {
118
-                return;
119
-            }
161
+        // Don't upload if no homedir is assigned
162
+        // ToDo: Add error
163
+        if (!$objMember->assignDir || !$objMember->homeDir)
164
+        {
165
+            return;
166
+        }
120 167
 
121
-            $intUploadFolder = $objMember->homeDir;
168
+        $intUploadFolder = $objMember->homeDir;
122 169
 
123
-            $objUploadFolder = FilesModel::findByUuid($intUploadFolder);
170
+        $objUploadFolder = FilesModel::findByUuid($intUploadFolder);
124 171
 
125
-            // The upload folder could not be found
126
-            if ($objUploadFolder === null)
127
-            {
128
-                throw new \Exception("Invalid upload folder ID $intUploadFolder");
129
-            }
172
+        // The upload folder could not be found
173
+        if ($objUploadFolder === null)
174
+        {
175
+            throw new \Exception("Invalid upload folder ID $intUploadFolder");
176
+        }
130 177
 
131
-            $strUploadFolder = $objUploadFolder->path;
178
+        $strUploadFolder = $objUploadFolder->path;
132 179
 
133
-            // Store the file if the upload folder exists
134
-            if ($strUploadFolder != '' && is_dir(TL_ROOT . '/' . $strUploadFolder))
135
-            {
136
-                $this->import('Files');
180
+        // Store the file if the upload folder exists
181
+        $projectDir = System::getContainer()->getParameter('kernel.project_dir');
137 182
 
138
-                // Move the file to its destination
139
-                $this->Files->move_uploaded_file($file['tmp_name'], $strUploadFolder . '/' . $file['name']);
140
-                $this->Files->chmod($strUploadFolder . '/' . $file['name'], Config::get('defaultFileChmod'));
183
+        if (!!$strUploadFolder & is_dir($projectDir . '/' . $strUploadFolder))
184
+        {
185
+            // Delete existing avatar if it exists
186
+            $this->deleteAvatar($objMember);
141 187
 
142
-                $strUuid = null;
143
-                $strFile = $strUploadFolder . '/' . $file['name'];
188
+            $this->import('Files');
144 189
 
145
-                // Generate the DB entries
146
-                if (Dbafs::shouldBeSynchronized($strFile))
147
-                {
148
-                    $objModel = FilesModel::findByPath($strFile);
190
+            // Rename file
191
+            $file['name'] =  $this->avatarName . '.' . $objFile->extension;
149 192
 
150
-                    if ($objModel === null)
151
-                    {
152
-                        $objModel = Dbafs::addResource($strFile);
153
-                    }
193
+            // Move the file to its destination
194
+            $this->Files->move_uploaded_file($file['tmp_name'], $strUploadFolder . '/' . $file['name']);
195
+            $this->Files->chmod($strUploadFolder . '/' . $file['name'], 0666 & ~umask());
154 196
 
155
-                    $strUuid = StringUtil::binToUuid($objModel->uuid);
197
+            $strUuid = null;
198
+            $strFile = $strUploadFolder . '/' . $file['name'];
156 199
 
157
-                    // Update the hash of the target folder
158
-                    Dbafs::updateFolderHashes($strUploadFolder);
159 200
 
160
-                    // Update member avatar
161
-                    $objMember->avatar = $objModel->uuid;
162
-                    $objMember->save();
201
+            // Generate the DB entries
202
+            if (Dbafs::shouldBeSynchronized($strFile))
203
+            {
204
+                $objModel = FilesModel::findByPath($strFile);
205
+
206
+                if ($objModel === null)
207
+                {
208
+                    $objModel = Dbafs::addResource($strFile);
163 209
                 }
164 210
 
165
-                // Add the session entry (see #6986)
166
-                $_SESSION['FILES']['avatar'] = array
167
-                (
168
-                    'name'     => $file['name'],
169
-                    'type'     => $file['type'],
170
-                    'tmp_name' => TL_ROOT . '/' . $strFile,
171
-                    'error'    => $file['error'],
172
-                    'size'     => $file['size'],
173
-                    'uploaded' => true,
174
-                    'uuid'     => $strUuid
175
-                );
176
-
177
-                // Add a log entry
178
-                $this->log('File "' . $strUploadFolder . '/' . $file['name'] . '" has been uploaded', __METHOD__, TL_FILES);
211
+                $strUuid = StringUtil::binToUuid($objModel->uuid);
212
+
213
+                // Update the hash of the target folder
214
+                Dbafs::updateFolderHashes($strUploadFolder);
215
+
216
+                // Update member avatar
217
+                $objMember->avatar = $objModel->uuid;
218
+                $objMember->save();
179 219
             }
220
+
221
+            // Add the session entry
222
+            $_SESSION['FILES']['avatar'] = array
223
+            (
224
+                'name'     => $file['name'],
225
+                'type'     => $file['type'],
226
+                'tmp_name' => $projectDir . '/' . $strFile,
227
+                'error'    => $file['error'],
228
+                'size'     => $file['size'],
229
+                'uploaded' => true,
230
+                'uuid'     => $strUuid
231
+            );
232
+
233
+            // Add a log entry
234
+            $logger = System::getContainer()->get('monolog.logger.contao');
235
+            $logger->log(LogLevel::INFO, 'File "' . $strUploadFolder . '/' . $file['name'] . '" has been uploaded', array('contao' => new ContaoContext(__METHOD__, TL_FILES)));
180 236
         }
181 237
 
182 238
         unset($_SESSION['FILES']['avatar']);
... ...
@@ -208,4 +264,30 @@ class Member extends Frontend
208 264
 
209 265
         return min($upload_max_filesize, Config::get('maxFileSize'));
210 266
     }
267
+
268
+    /**
269
+     * Add an error message
270
+     *
271
+     * @param string $strError The error message
272
+     */
273
+    public function addError($strError)
274
+    {
275
+        $this->class = 'error';
276
+        $this->arrErrors[] = $strError;
277
+    }
278
+
279
+    public function deleteAvatar($objMember)
280
+    {
281
+        if(!!$objMember->avatar)
282
+        {
283
+            $objFile = FilesModel::findByUuid($objMember->avatar) ?? '';
284
+
285
+            // Only delete existing file
286
+            if (!!$objFile && file_exists($objFile->path))
287
+            {
288
+                $file = new File($objFile->path);
289
+                $file->delete();
290
+            }
291
+        }
292
+    }
211 293
 }
Browse code

Clean up files

doishub authored on08/12/2020 15:43:32
Showing1 changed files
... ...
@@ -6,22 +6,33 @@
6 6
  */
7 7
 namespace Oveleon\ContaoMemberExtensionBundle;
8 8
 
9
+use Contao\Config;
10
+use Contao\Dbafs;
11
+use Contao\File;
12
+use Contao\FilesModel;
13
+use Contao\Frontend;
14
+use Contao\FrontendUser;
15
+use Contao\MemberModel;
16
+use Contao\StringUtil;
17
+use Contao\Validator;
18
+
9 19
 /**
10 20
  * Class Member
11 21
  *
12 22
  * @author Fabian Ekert <fabian@oveleon.de>
23
+ * @author Daniele Sciannimanica <https://github.com/doishub>
13 24
  */
14
-class Member extends \Frontend
25
+class Member extends Frontend
15 26
 {
16 27
     /**
17 28
      * Update avatar of member
18 29
      *
19
-     * @param \FrontendUser $objUser
20
-     * @param array         $arrData
30
+     * @param FrontendUser $objUser
31
+     * @param array        $arrData
21 32
      */
22 33
     public function updateAvatar($objUser, $arrData)
23 34
     {
24
-        $objMember = \MemberModel::findByPk($objUser->id);
35
+        $objMember = MemberModel::findByPk($objUser->id);
25 36
 
26 37
         if ($objMember === null)
27 38
         {
... ...
@@ -34,7 +45,7 @@ class Member extends \Frontend
34 45
         // Sanitize the filename
35 46
         try
36 47
         {
37
-            $file['name'] = \StringUtil::sanitizeFileName($file['name']);
48
+            $file['name'] = StringUtil::sanitizeFileName($file['name']);
38 49
         }
39 50
         catch (\InvalidArgumentException $e)
40 51
         {
... ...
@@ -44,7 +55,7 @@ class Member extends \Frontend
44 55
         }
45 56
 
46 57
         // Invalid file name
47
-        if (!\Validator::isValidFileName($file['name']))
58
+        if (!Validator::isValidFileName($file['name']))
48 59
         {
49 60
             // ToDo: Fehler: Dateiname beinhaltet unzulässige Zeichen
50 61
 
... ...
@@ -63,8 +74,8 @@ class Member extends \Frontend
63 74
             return;
64 75
         }
65 76
 
66
-        $objFile = new \File($file['name']);
67
-        $uploadTypes = \StringUtil::trimsplit(',', \Config::get('validImageTypes'));
77
+        $objFile = new File($file['name']);
78
+        $uploadTypes = StringUtil::trimsplit(',', \Config::get('validImageTypes'));
68 79
 
69 80
         // File type is not allowed
70 81
         if (!\in_array($objFile->extension, $uploadTypes))
... ...
@@ -77,7 +88,7 @@ class Member extends \Frontend
77 88
 
78 89
         if ($arrImageSize = @getimagesize($file['tmp_name']))
79 90
         {
80
-            $intImageWidth = \Config::get('imageWidth');
91
+            $intImageWidth = Config::get('imageWidth');
81 92
 
82 93
             // Image exceeds maximum image width
83 94
             if ($intImageWidth > 0 && $arrImageSize[0] > $intImageWidth)
... ...
@@ -88,7 +99,7 @@ class Member extends \Frontend
88 99
                 return;
89 100
             }
90 101
 
91
-            $intImageHeight = \Config::get('imageHeight');
102
+            $intImageHeight = Config::get('imageHeight');
92 103
 
93 104
             // Image exceeds maximum image height
94 105
             if ($intImageHeight > 0 && $arrImageSize[1] > $intImageHeight)
... ...
@@ -109,7 +120,7 @@ class Member extends \Frontend
109 120
 
110 121
             $intUploadFolder = $objMember->homeDir;
111 122
 
112
-            $objUploadFolder = \FilesModel::findByUuid($intUploadFolder);
123
+            $objUploadFolder = FilesModel::findByUuid($intUploadFolder);
113 124
 
114 125
             // The upload folder could not be found
115 126
             if ($objUploadFolder === null)
... ...
@@ -126,25 +137,25 @@ class Member extends \Frontend
126 137
 
127 138
                 // Move the file to its destination
128 139
                 $this->Files->move_uploaded_file($file['tmp_name'], $strUploadFolder . '/' . $file['name']);
129
-                $this->Files->chmod($strUploadFolder . '/' . $file['name'], \Config::get('defaultFileChmod'));
140
+                $this->Files->chmod($strUploadFolder . '/' . $file['name'], Config::get('defaultFileChmod'));
130 141
 
131 142
                 $strUuid = null;
132 143
                 $strFile = $strUploadFolder . '/' . $file['name'];
133 144
 
134 145
                 // Generate the DB entries
135
-                if (\Dbafs::shouldBeSynchronized($strFile))
146
+                if (Dbafs::shouldBeSynchronized($strFile))
136 147
                 {
137
-                    $objModel = \FilesModel::findByPath($strFile);
148
+                    $objModel = FilesModel::findByPath($strFile);
138 149
 
139 150
                     if ($objModel === null)
140 151
                     {
141
-                        $objModel = \Dbafs::addResource($strFile);
152
+                        $objModel = Dbafs::addResource($strFile);
142 153
                     }
143 154
 
144
-                    $strUuid = \StringUtil::binToUuid($objModel->uuid);
155
+                    $strUuid = StringUtil::binToUuid($objModel->uuid);
145 156
 
146 157
                     // Update the hash of the target folder
147
-                    \Dbafs::updateFolderHashes($strUploadFolder);
158
+                    Dbafs::updateFolderHashes($strUploadFolder);
148 159
 
149 160
                     // Update member avatar
150 161
                     $objMember->avatar = $objModel->uuid;
... ...
@@ -195,6 +206,6 @@ class Member extends \Frontend
195 206
             $upload_max_filesize = round($upload_max_filesize * 1024 * 1024 * 1024);
196 207
         }
197 208
 
198
-        return min($upload_max_filesize, \Config::get('maxFileSize'));
209
+        return min($upload_max_filesize, Config::get('maxFileSize'));
199 210
     }
200
-}
201 211
\ No newline at end of file
212
+}
Browse code

Update Readme

doishub authored on12/11/2019 16:11:24
Showing1 changed files
... ...
@@ -1,13 +1,9 @@
1 1
 <?php
2
-
3 2
 /*
4
- * This file is part of Contao.
5
- *
6
- * (c) Leo Feyer
3
+ * This file is part of Oveleon ContaoMemberExtension Bundle.
7 4
  *
8
- * @license LGPL-3.0-or-later
5
+ * (c) https://www.oveleon.de/
9 6
  */
10
-
11 7
 namespace Oveleon\ContaoMemberExtensionBundle;
12 8
 
13 9
 /**
Browse code

Return if no home directory exists

oveleon authored on08/03/2019 17:15:37
Showing1 changed files
... ...
@@ -106,11 +106,13 @@ class Member extends \Frontend
106 106
             $_SESSION['FILES']['avatar'] = $_SESSION['FILES']['avatar'];
107 107
 
108 108
             // Overwrite the upload folder with user's home directory
109
-            if ($objMember->assignDir && $objMember->homeDir)
109
+            if (!$objMember->assignDir || !$objMember->homeDir)
110 110
             {
111
-                $intUploadFolder = $objMember->homeDir;
111
+                return;
112 112
             }
113 113
 
114
+            $intUploadFolder = $objMember->homeDir;
115
+
114 116
             $objUploadFolder = \FilesModel::findByUuid($intUploadFolder);
115 117
 
116 118
             // The upload folder could not be found
Browse code

Initial commit: Frontend module member avatar added

oveleon authored on08/03/2019 16:40:16
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,202 @@
1
+<?php
2
+
3
+/*
4
+ * This file is part of Contao.
5
+ *
6
+ * (c) Leo Feyer
7
+ *
8
+ * @license LGPL-3.0-or-later
9
+ */
10
+
11
+namespace Oveleon\ContaoMemberExtensionBundle;
12
+
13
+/**
14
+ * Class Member
15
+ *
16
+ * @author Fabian Ekert <fabian@oveleon.de>
17
+ */
18
+class Member extends \Frontend
19
+{
20
+    /**
21
+     * Update avatar of member
22
+     *
23
+     * @param \FrontendUser $objUser
24
+     * @param array         $arrData
25
+     */
26
+    public function updateAvatar($objUser, $arrData)
27
+    {
28
+        $objMember = \MemberModel::findByPk($objUser->id);
29
+
30
+        if ($objMember === null)
31
+        {
32
+            return;
33
+        }
34
+
35
+        $file = $_SESSION['FILES']['avatar'];
36
+        $maxlength_kb = $this->getMaximumUploadSize();
37
+
38
+        // Sanitize the filename
39
+        try
40
+        {
41
+            $file['name'] = \StringUtil::sanitizeFileName($file['name']);
42
+        }
43
+        catch (\InvalidArgumentException $e)
44
+        {
45
+            // ToDo: Fehler: Dateiname beinhaltet unzulässige Zeichen
46
+
47
+            return;
48
+        }
49
+
50
+        // Invalid file name
51
+        if (!\Validator::isValidFileName($file['name']))
52
+        {
53
+            // ToDo: Fehler: Dateiname beinhaltet unzulässige Zeichen
54
+
55
+            return;
56
+        }
57
+
58
+        // File was not uploaded
59
+        // ToDo
60
+
61
+        // File is too big
62
+        if ($file['size'] > $maxlength_kb)
63
+        {
64
+            // ToDo: Fehler: Datei zu groß
65
+            unset($_SESSION['FILES']['avatar']);
66
+
67
+            return;
68
+        }
69
+
70
+        $objFile = new \File($file['name']);
71
+        $uploadTypes = \StringUtil::trimsplit(',', \Config::get('validImageTypes'));
72
+
73
+        // File type is not allowed
74
+        if (!\in_array($objFile->extension, $uploadTypes))
75
+        {
76
+            // ToDo: Fehler: Dateityp nicht erlaubt
77
+            unset($_SESSION['FILES']['avatar']);
78
+
79
+            return;
80
+        }
81
+
82
+        if ($arrImageSize = @getimagesize($file['tmp_name']))
83
+        {
84
+            $intImageWidth = \Config::get('imageWidth');
85
+
86
+            // Image exceeds maximum image width
87
+            if ($intImageWidth > 0 && $arrImageSize[0] > $intImageWidth)
88
+            {
89
+                // ToDo: Fehler: Bild ist zu groß in der breite
90
+                unset($_SESSION['FILES']['avatar']);
91
+
92
+                return;
93
+            }
94
+
95
+            $intImageHeight = \Config::get('imageHeight');
96
+
97
+            // Image exceeds maximum image height
98
+            if ($intImageHeight > 0 && $arrImageSize[1] > $intImageHeight)
99
+            {
100
+                // ToDo: Fehler: Bild ist zu groß in der höhe
101
+                unset($_SESSION['FILES']['avatar']);
102
+
103
+                return;
104
+            }
105
+
106
+            $_SESSION['FILES']['avatar'] = $_SESSION['FILES']['avatar'];
107
+
108
+            // Overwrite the upload folder with user's home directory
109
+            if ($objMember->assignDir && $objMember->homeDir)
110
+            {
111
+                $intUploadFolder = $objMember->homeDir;
112
+            }
113
+
114
+            $objUploadFolder = \FilesModel::findByUuid($intUploadFolder);
115
+
116
+            // The upload folder could not be found
117
+            if ($objUploadFolder === null)
118
+            {
119
+                throw new \Exception("Invalid upload folder ID $intUploadFolder");
120
+            }
121
+
122
+            $strUploadFolder = $objUploadFolder->path;
123
+
124
+            // Store the file if the upload folder exists
125
+            if ($strUploadFolder != '' && is_dir(TL_ROOT . '/' . $strUploadFolder))
126
+            {
127
+                $this->import('Files');
128
+
129
+                // Move the file to its destination
130
+                $this->Files->move_uploaded_file($file['tmp_name'], $strUploadFolder . '/' . $file['name']);
131
+                $this->Files->chmod($strUploadFolder . '/' . $file['name'], \Config::get('defaultFileChmod'));
132
+
133
+                $strUuid = null;
134
+                $strFile = $strUploadFolder . '/' . $file['name'];
135
+
136
+                // Generate the DB entries
137
+                if (\Dbafs::shouldBeSynchronized($strFile))
138
+                {
139
+                    $objModel = \FilesModel::findByPath($strFile);
140
+
141
+                    if ($objModel === null)
142
+                    {
143
+                        $objModel = \Dbafs::addResource($strFile);
144
+                    }
145
+
146
+                    $strUuid = \StringUtil::binToUuid($objModel->uuid);
147
+
148
+                    // Update the hash of the target folder
149
+                    \Dbafs::updateFolderHashes($strUploadFolder);
150
+
151
+                    // Update member avatar
152
+                    $objMember->avatar = $objModel->uuid;
153
+                    $objMember->save();
154
+                }
155
+
156
+                // Add the session entry (see #6986)
157
+                $_SESSION['FILES']['avatar'] = array
158
+                (
159
+                    'name'     => $file['name'],
160
+                    'type'     => $file['type'],
161
+                    'tmp_name' => TL_ROOT . '/' . $strFile,
162
+                    'error'    => $file['error'],
163
+                    'size'     => $file['size'],
164
+                    'uploaded' => true,
165
+                    'uuid'     => $strUuid
166
+                );
167
+
168
+                // Add a log entry
169
+                $this->log('File "' . $strUploadFolder . '/' . $file['name'] . '" has been uploaded', __METHOD__, TL_FILES);
170
+            }
171
+        }
172
+
173
+        unset($_SESSION['FILES']['avatar']);
174
+    }
175
+
176
+    /**
177
+     * Return the maximum upload file size in bytes
178
+     *
179
+     * @return string
180
+     */
181
+    protected function getMaximumUploadSize()
182
+    {
183
+        // Get the upload_max_filesize from the php.ini
184
+        $upload_max_filesize = ini_get('upload_max_filesize');
185
+
186
+        // Convert the value to bytes
187
+        if (stripos($upload_max_filesize, 'K') !== false)
188
+        {
189
+            $upload_max_filesize = round($upload_max_filesize * 1024);
190
+        }
191
+        elseif (stripos($upload_max_filesize, 'M') !== false)
192
+        {
193
+            $upload_max_filesize = round($upload_max_filesize * 1024 * 1024);
194
+        }
195
+        elseif (stripos($upload_max_filesize, 'G') !== false)
196
+        {
197
+            $upload_max_filesize = round($upload_max_filesize * 1024 * 1024 * 1024);
198
+        }
199
+
200
+        return min($upload_max_filesize, \Config::get('maxFileSize'));
201
+    }
202
+}
0 203
\ No newline at end of file