Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16769 | Rev 16799 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 16769 Rev 16798
Línea 1... Línea 1...
1
<?php
1
<?php
-
 
2
/**
-
 
3
 * 
-
 
4
 * Controlador: Mis Perfiles 
-
 
5
 * 
-
 
6
 */
2
declare(strict_types=1);
7
declare(strict_types=1);
Línea 3... Línea 8...
3
 
8
 
Línea 4... Línea -...
4
namespace LeadersLinked\Controller;
-
 
5
 
-
 
6
use Laminas\Authentication\AuthenticationService;
9
namespace LeadersLinked\Controller;
Línea 7... Línea 10...
7
use Laminas\Authentication\Result as AuthResult;
10
 
8
use Laminas\Db\Adapter\AdapterInterface;
-
 
9
 
11
use Laminas\Db\Adapter\AdapterInterface;
10
use Laminas\Mvc\Controller\AbstractActionController;
12
 
-
 
13
use Laminas\Mvc\Controller\AbstractActionController;
-
 
14
use Laminas\Log\LoggerInterface;
-
 
15
use Laminas\View\Model\ViewModel;
-
 
16
 
-
 
17
use LeadersLinked\Mapper\UserMapper;
-
 
18
 
-
 
19
use LeadersLinked\Mapper\CompanyUserMapper;
-
 
20
use LeadersLinked\Mapper\ConversationMapper;
11
use Laminas\Mvc\I18n\Translator;
21
use LeadersLinked\Mapper\MessageMapper;
-
 
22
use LeadersLinked\Model\Conversation;
-
 
23
use LeadersLinked\Library\Image;
-
 
24
use Laminas\View\Model\JsonModel;
-
 
25
use LeadersLinked\Model\Message;
12
use Laminas\Log\LoggerInterface;
26
use LeadersLinked\Model\VideoConvert;
-
 
27
use LeadersLinked\Mapper\VideoConvertMapper;
-
 
28
use LeadersLinked\Form\Communication\CommunicationForm;
-
 
29
use LeadersLinked\Mapper\JobDescriptionMapper;
-
 
30
use LeadersLinked\Model\User;
-
 
31
use LeadersLinked\Model\Company;
Línea 13... Línea 32...
13
use Laminas\View\Model\ViewModel;
32
use LeadersLinked\Mapper\OrganizationPositionMapper;
14
use Laminas\View\Model\JsonModel;
33
 
15
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
34
 
16
 
35
 
Línea 64... Línea 83...
64
        $this->logger       = $logger;
83
        $this->logger       = $logger;
65
        $this->config       = $config;
84
        $this->config       = $config;
66
        $this->translator   = $translator;
85
        $this->translator   = $translator;
67
    }
86
    }
Línea -... Línea 87...
-
 
87
    
68
    
88
 
69
    public function indexAction()
89
    public function indexAction()
70
    {
90
    {
-
 
91
        $request = $this->getRequest();
-
 
92
        $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
93
        $currentCompany = $currentUserPlugin->getCompany();
-
 
94
        $currentUser = $currentUserPlugin->getUser();
Línea 71... Línea 95...
71
        $request = $this->getRequest();
95
        
72
        
96
        
Línea -... Línea 97...
-
 
97
        $request = $this->getRequest();
-
 
98
        if($request->isGet()) {
-
 
99
            
-
 
100
            $jobDescriptionIdBoss = 0;
-
 
101
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
-
 
102
            $jobsDescription = $this->recursiveLoadJobDescription($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss);
-
 
103
            
-
 
104
            
-
 
105
            
-
 
106
            $bossId = 0;
-
 
107
            $organizationPositionMapper = OrganizationPositionMapper::getInstance($this->adapter);
-
 
108
            $userMapper = UserMapper::getInstance($this->adapter);
-
 
109
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
-
 
110
            
-
 
111
            
-
 
112
            $positions = $this->recursiveLoadPosition($currentUser, $currentCompany, $organizationPositionMapper, $userMapper, $jobDescriptionMapper, $bossId);
-
 
113
            
73
        $request = $this->getRequest();
114
            
74
        if($request->isGet()) {
115
 
75
            
116
            $form = new CommunicationForm();
-
 
117
            $this->layout()->setTemplate('layout/layout-backend');
-
 
118
            $viewModel = new ViewModel();
-
 
119
            $viewModel->setTemplate('leaders-linked/communication/index.phtml');
-
 
120
            $viewModel->setVariables([
-
 
121
                'form' => $form,
-
 
122
                'companyName' => $currentCompany->name,
76
            $this->layout()->setTemplate('layout/layout-backend');
123
                'jobsDescription' => $jobsDescription,
Línea -... Línea 124...
-
 
124
                'positions' => $positions
-
 
125
            ]);
-
 
126
            return $viewModel ;
-
 
127
            
-
 
128
        } else {
-
 
129
            return new JsonModel([
-
 
130
                'success' => false,
-
 
131
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
132
            ]);
-
 
133
        }
-
 
134
    }
-
 
135
 
-
 
136
    /**
-
 
137
     *
-
 
138
     * @param User $currentUser
-
 
139
     * @param Company $currentCompany
-
 
140
     * @param JobDescriptionMapper $jobDescriptionMapper
-
 
141
     * @param int $jobDescriptionIdBoss
-
 
142
     * @return array
-
 
143
     */
-
 
144
    private function recursiveLoadJobDescription($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss)
-
 
145
    {
-
 
146
        $items = [];
-
 
147
        $records = $jobDescriptionMapper->fetchAllByCompanyIdAndJobDescriptionIdBoss($currentCompany->id, $jobDescriptionIdBoss);
Línea -... Línea 148...
-
 
148
        
-
 
149
        
-
 
150
        foreach($records as $record)
-
 
151
        {
-
 
152
            
-
 
153
            
-
 
154
            
-
 
155
            array_push($items, [
-
 
156
                'uuid' => $record->uuid,
-
 
157
                'name' => $record->name,
-
 
158
                'children' => $this->recursiveLoadJobDescription($currentUser, $currentCompany, $jobDescriptionMapper, $record->id),
-
 
159
            ]);
-
 
160
        }
-
 
161
        
-
 
162
        return $items;
-
 
163
    }
-
 
164
    
-
 
165
    /**
-
 
166
     *
-
 
167
     * @param User $currentUser
-
 
168
     * @param Company $currentCompany
-
 
169
     * @param OrganizationPositionMapper $organizationPositionMapper
-
 
170
     * @param UserMapper $userMapper
-
 
171
     * @param JobDescriptionMapper $jobDescriptionMapper
-
 
172
     * @param int $bossId
-
 
173
     * @return array
-
 
174
     */
-
 
175
    private function recursiveLoadPosition($currentUser, $currentCompany, $organizationPositionMapper, $userMapper, $jobDescriptionMapper, $bossId)
-
 
176
    {
-
 
177
        $items = [];
-
 
178
        $records = $organizationPositionMapper->fetchAllByCompanyIdAndBossId($currentCompany->id, $bossId);
-
 
179
        
-
 
180
        
-
 
181
        foreach($records as $record)
-
 
182
        {
-
 
183
            
-
 
184
            $user = $userMapper->fetchOne($record->employee_id);
-
 
185
            $jobDescription = $jobDescriptionMapper->fetchOne($record->job_description_id);
-
 
186
            
-
 
187
            
-
 
188
            array_push($items, [
-
 
189
                'uuid' => $record->uuid,
-
 
190
                'name' => trim($user->first_name . ' ' . $user->last_name),
-
 
191
                'title' => $jobDescription->name,
-
 
192
                'children' => $this->recursiveLoadPosition($currentUser, $currentCompany, $organizationPositionMapper, $userMapper, $jobDescriptionMapper, $record->employee_id),
-
 
193
            ]);
-
 
194
        }
-
 
195
        
-
 
196
        return $items;
-
 
197
    }
-
 
198
 
-
 
199
    public function sendAction()
-
 
200
    {
-
 
201
        
-
 
202
        $request = $this->getRequest();
-
 
203
       
-
 
204
        if($request->isPost()) {
-
 
205
            
-
 
206
            
-
 
207
            $currentUserPlugin = $this->plugin('currentUserPlugin');
-
 
208
            $currentUser = $currentUserPlugin->getUser();
-
 
209
            $currentCompany = $currentUserPlugin->getCompany();
-
 
210
 
-
 
211
            $data = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
-
 
212
            
-
 
213
            $form = new CommunicationForm();
-
 
214
            $form->setData($data);
-
 
215
            
-
 
216
            if($form->isValid()) {
-
 
217
                $organizationPositionMapper = OrganizationPositionMapper::getInstance($this->adapter);
-
 
218
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
-
 
219
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
-
 
220
                $userMapper = UserMapper::getInstance($this->adapter);
-
 
221
                
-
 
222
                $dataPost = (array) $form->getData();
-
 
223
                
-
 
224
 
-
 
225
                
-
 
226
                $user_ids = [];
-
 
227
                $message_text = $dataPost['message'];
-
 
228
                
-
 
229
                $job_description_ids = $dataPost['job_description_id'];
-
 
230
                $position_ids = $dataPost['position_id'];
-
 
231
                
-
 
232
                
-
 
233
                $user_selected_ids = $dataPost['user_selected_id'];
-
 
234
                if(!empty($user_selected_ids)) {
-
 
235
                    
-
 
236
                    foreach($user_selected_ids as $uuid)
-
 
237
                    {
-
 
238
                        $user = $userMapper->fetchOneByUuid($uuid);
-
 
239
                        if(!in_array($user->id, $user_ids)) {
-
 
240
                            array_push($user_ids, $user->id);
-
 
241
                        }
-
 
242
                        
-
 
243
                        
-
 
244
                    }
-
 
245
                }
-
 
246
                
-
 
247
                if(!empty($job_description_ids)) {
-
 
248
                    foreach($job_description_ids as $uuid) 
-
 
249
                    {
-
 
250
                        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
-
 
251
                        if(!$jobDescription || $jobDescription->company_id != $currentCompany->id) {
-
 
252
                            continue;
-
 
253
                        }
-
 
254
                        
-
 
255
                        $records = $organizationPositionMapper->fetchAllByCompanyIdAndJobDescriptionId($jobDescription->company_id, $jobDescription->id);
-
 
256
                        if(!empty($records)) {
-
 
257
                            foreach($records as $record) {
-
 
258
                                if(!in_array($record->employee_id, $user_ids)) {
-
 
259
                                    array_push($user_ids, $record->employee_id);
-
 
260
                                }
-
 
261
                            }
-
 
262
                        }
-
 
263
                    }
-
 
264
                }
-
 
265
                
-
 
266
                if(!empty($position_ids)) {
-
 
267
                    foreach($position_ids as $uuid)
-
 
268
                    {
-
 
269
                        $organizationPosition = $organizationPositionMapper->fetchOneByUuid($uuid);
-
 
270
                        if(!$organizationPosition || $organizationPosition->company_id != $currentCompany->id) {
-
 
271
                            if(!in_array($organizationPosition->employee_id, $user_ids)) {
-
 
272
                                array_push($user_ids, $organizationPosition->employee_id);
-
 
273
                            }
-
 
274
                        }
-
 
275
                    } 
-
 
276
                }
-
 
277
                
-
 
278
                $owner = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);                
-
 
279
                $records = $companyUserMapper->fetchAllActivesByCompanyIdAndUserIds($currentCompany->id, $user_ids);
-
 
280
                
-
 
281
                if(empty($records)) {
-
 
282
                    return new JsonModel([
-
 
283
                        'success'  => false,
-
 
284
                        'data' =>  'ERROR_MESSAGE_NOT_FOUND_TARGET_ACTIVES'
-
 
285
                    ]);
-
 
286
                }
-
 
287
             
-
 
288
                $message_tmp_filename   = '';
-
 
289
                $message_filename       = '';
-
 
290
                
-
 
291
                $type = Message::TYPE_TEXT;
-
 
292
                
-
 
293
                $files = $this->getRequest()->getFiles()->toArray();
-
 
294
                if(isset($files['file']) && empty($files['file']['error'])) {
-
 
295
                    $message_tmp_filename  = $files['file']['tmp_name'];
-
 
296
                    $message_filename      = $this->normalizeString($files['file']['name']);
-
 
297
                    
-
 
298
                    $mime_type = mime_content_type($message_tmp_filename);
-
 
299
                    
-
 
300
                    
-
 
301
                    if($mime_type == 'image/jpg' || $mime_type == 'image/jpeg' || $mime_type == 'image/png') {
-
 
302
                        $type = Message::TYPE_IMAGE;
-
 
303
                    } else if($mime_type == 'video/webm' || $mime_type == 'video/mpeg' || $mime_type == 'video/mpg' || $mime_type == 'video/mp4') {
-
 
304
                        $type = Message::TYPE_VIDEO;
-
 
305
                    } else if($mime_type == 'application/pdf') {
-
 
306
                        $type = Message::TYPE_DOCUMENT;
-
 
307
                    }
-
 
308
                }
-
 
309
                
-
 
310
                
-
 
311
                $message_sent = 0;
-
 
312
                $conversationMapper = ConversationMapper::getInstance($this->adapter);
-
 
313
                
-
 
314
                foreach($records as $record)
-
 
315
                {
-
 
316
                    
-
 
317
                    $conversation = $conversationMapper->fetchOneByUserId1AndUserId2($owner->user_id, $record->user_id);
-
 
318
                    if($conversation) {
-
 
319
                        if($conversation->sender_id == $owner->id) {
-
 
320
                            $conversation->receiver_status = Conversation::STATUS_NORMAL;
-
 
321
                            $conversation->sender_status = $conversation->sender_status == Conversation::STATUS_DELETED ? Conversation::STATUS_DELETED : Conversation::STATUS_NORMAL;
-
 
322
                        } else {
-
 
323
                            $conversation->receiver_status = $conversation->receiver_status == Conversation::STATUS_DELETED ? Conversation::STATUS_DELETED : Conversation::STATUS_NORMAL;
-
 
324
                            $conversation->sender_status = Conversation::STATUS_NORMAL;
-
 
325
                        }
-
 
326
                      
-
 
327
                        if(!$conversationMapper->update($conversation)) {
-
 
328
                            return new JsonModel([
-
 
329
                                'success'  => false,
-
 
330
                                'data' => $conversationMapper->getError()
-
 
331
                            ]);
-
 
332
                        }
-
 
333
                    } else {
-
 
334
                        $conversation = new Conversation();
-
 
335
                        $conversation->sender_id = $currentUser->id;
-
 
336
                        $conversation->sender_status = Conversation::STATUS_DELETED;
-
 
337
       
-
 
338
                        $conversation->receiver_id = $record->user_id;
-
 
339
                        $conversation->receiver_status = Conversation::STATUS_NORMAL;
-
 
340
                
-
 
341
                    
-
 
342
                        
-
 
343
                        if(!$conversationMapper->insert($conversation)) {
-
 
344
                            continue;
-
 
345
                        }
-
 
346
                        
-
 
347
                    }
-
 
348
 
-
 
349
                    
-
 
350
                    $message = new Message();
-
 
351
                    $message->conversation_id = $conversation->id;
-
 
352
                    $message->read = Message::NO;
-
 
353
                    $message->message = $message_text;
-
 
354
                    $message->receiver_id = $record->user_id;
-
 
355
                    $message->receiver_status = Message::STATUS_NORMAL;
-
 
356
                    $message->sender_id = $owner->user_id;
-
 
357
                    $message->sender_status = Message::STATUS_NORMAL;
-
 
358
                    $message->type = $type;
-
 
359
 
-
 
360
                    
-
 
361
                    $messageMapper = MessageMapper::getInstance($this->adapter);
-
 
362
                    if($messageMapper->insert($message)) {
-
 
363
                        $message_sent++;
-
 
364
                        $message = $messageMapper->fetchOne($message->id);
-
 
365
                        
-
 
366
        
-
 
367
                        
-
 
368
                        if( $type == Message::TYPE_DOCUMENT) {
-
 
369
                            try {
-
 
370
                                $target_path = $this->config['leaderslinked.fullpath.message'] . $message->uuid;
-
 
371
                                if(!file_exists($target_path)) {
-
 
372
                                    mkdir($target_path, 0755, true);
-
 
373
                                }
-
 
374
                                
-
 
375
                                $full_filename = $target_path  . DIRECTORY_SEPARATOR .$message_filename;
-
 
376
                                $result = @copy($message_tmp_filename, $full_filename);
-
 
377
                                if ($result) {
-
 
378
                                    
-
 
379
                                    $message->type = $type;
-
 
380
                                    $message->filename = basename($message_filename);
-
 
381
                                    $messageMapper->update($message);
-
 
382
                                } 
-
 
383
                            } catch(\Throwable $e) {
-
 
384
                                error_log($e->getTraceAsString());
-
 
385
                            }
-
 
386
                        }
-
 
387
                        if( $type == Message::TYPE_IMAGE) {
-
 
388
                            try {
-
 
389
                                $target_path = $this->config['leaderslinked.fullpath.message'] . $message->uuid;
-
 
390
                                if(!file_exists($target_path)) {
-
 
391
                                    mkdir($target_path, 0755, true);
-
 
392
                                }
-
 
393
                                
-
 
394
                                list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.message_image_size']);
-
 
395
                                
-
 
396
                                $message_filename = substr($message_filename, 0, strrpos($message_filename, '.'))  . '.png';
-
 
397
                                $crop_to_dimensions = false;
-
 
398
                                $unlink_source = false;
-
 
399
                                if(Image::uploadImage($message_tmp_filename, $target_path, $message_filename, $target_width, $target_height, $crop_to_dimensions, $unlink_source)) {
-
 
400
                                    $message->type = $type;
-
 
401
                                    $message->filename = basename($message_filename);
-
 
402
                                    $messageMapper->update($message);
-
 
403
                                }
-
 
404
                            } catch(\Throwable $e) {
-
 
405
                                error_log($e->getTraceAsString());
-
 
406
                            }
-
 
407
                        }
-
 
408
                        if( $type == Message::TYPE_VIDEO) {
-
 
409
                            try {
-
 
410
                                $target_path = $this->config['leaderslinked.fullpath.message'] . $message->uuid;
-
 
411
                                if(!file_exists($target_path)) {
-
 
412
                                    mkdir($target_path, 0755, true);
-
 
413
                                }
-
 
414
                                
-
 
415
                                $full_filename = $target_path  . DIRECTORY_SEPARATOR . $message_filename;
-
 
416
                                $result = @copy($message_tmp_filename, $full_filename);
-
 
417
                                if ($result) {
-
 
418
                                    
-
 
419
                                    $size = $this->config['leaderslinked.image_sizes.message_image_size'];
-
 
420
                                    $getFromSecound = 2;
-
 
421
                                    
-
 
422
                                    //extracción del cover
-
 
423
                                    $generateFileName = substr($message_filename, 0, strrpos($message_filename, '.'));
-
 
424
                                    $generateFile =  $target_path  . DIRECTORY_SEPARATOR . $generateFileName .  '.png';
-
 
425
                                    $cmd            = "/usr/bin/ffmpeg -i $full_filename -an -ss $getFromSecound -s $size $generateFile";
-
 
426
                                    exec($cmd);
-
 
427
                                    
-
 
428
                                    
-
 
429
                                    $message->type = $type;
-
 
430
                                    $message->filename = basename($message_filename);
-
 
431
                                    $message->image_preview = basename($generateFile);
-
 
432
                                    $messageMapper->update($message);
-
 
433
                                    
-
 
434
                                    $videoConvert = new VideoConvert();
-
 
435
                                    $videoConvert->filename = $full_filename;
-
 
436
                                    $videoConvert->type = VideoConvert::TYPE_FEED;
-
 
437
                                    
-
 
438
                                    $videoConvertMapper = VideoConvertMapper::getInstance($this->adapter);
-
 
439
                                    $videoConvertMapper->insert($videoConvert);
-
 
440
                                }
-
 
441
                            } catch(\Throwable $e) {
-
 
442
                                error_log($e->getTraceAsString());
-
 
443
                            }
-
 
444
                        } 
-
 
445
                    } else {
-
 
446
                        return new JsonModel([
-
 
447
                            'success'   => false,
-
 
448
                            'data'   => $messageMapper->getError()
-
 
449
                        ]);
-
 
450
                    }
-
 
451
                }
-
 
452
                
-
 
453
                if(1 == $message_sent) {
-
 
454
                    return new JsonModel([
-
 
455
                        'success'   => true,
-
 
456
                        'data'   => 'LABEL_MESSAGE_ONE_SENT'
-
 
457
                    ]);
-
 
458
                } else {
-
 
459
                    $message = strval($message_sent) . 'LABEL_MESSAGE_TWO_OR_MORE_SENT';
-
 
460
                    return new JsonModel([
-
 
461
                        'success'   => true,
-
 
462
                        'data'   => $message
-
 
463
                    ]);
-
 
464
                }
-
 
465
                
-
 
466
                
-
 
467
            } else {
-
 
468
 
-
 
469
                
-
 
470
                $messages = [];
-
 
471
                $form_messages = (array) $form->getMessages();
-
 
472
                foreach($form_messages  as $fieldname => $field_messages)
-
 
473
                {
-
 
474
                    $messages[$fieldname] = array_values($field_messages);
-
 
475
                }
-
 
476
                
-
 
477
                return new JsonModel([
-
 
478
                    'success'   => false,
-
 
479
                    'data'   => $messages
77
            $viewModel = new ViewModel();
480
                ]);
78
            $viewModel->setTemplate('leaders-linked/unknown/index.phtml');
481
            }
79
            return $viewModel ;
482
            
80
            
483
            
81
            
484
              
82
        } else {
485
        } else {
-
 
486
            return new JsonModel([
-
 
487
                'success' => false,
-
 
488
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
-
 
489
            ]);
-
 
490
        }
-
 
491
 
-
 
492
    }
-
 
493
 
-
 
494
    private function normalizeString ($str = '')
-
 
495
    {
-
 
496
        $basename  = substr($str, 0, strrpos($str, '.'));
-
 
497
        $basename  = str_replace('.', '-', $basename);
-
 
498
        
-
 
499
        $extension  = substr($str, strrpos($str, '.'));
-
 
500
        
-
 
501
        $str = $basename . $extension;
-
 
502
        
-
 
503
        $str = strip_tags($str);
-
 
504
        $str = preg_replace('/[\r\n\t ]+/', ' ', $str);
-
 
505
        $str = preg_replace('/[\"\*\/\:\<\>\?\'\|\,]+/', ' ', $str);
-
 
506
        $str = strtolower($str);
-
 
507
        $str = html_entity_decode( $str, ENT_QUOTES, "utf-8" );
-
 
508
        $str = htmlentities($str, ENT_QUOTES, "utf-8");
83
            return new JsonModel([
509
        $str = preg_replace("/(&)([a-z])([a-z]+;)/i", '$2', $str);
-
 
510
        $str = str_replace(' ', '-', $str);
84
                'success' => false,
511
        $str = rawurlencode($str);
85
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
512
        $str = str_replace('%', '-', $str);