Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6749 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
6849 efrain 7
 
1 www 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
 
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Form\MyCompanies\CreateForm;
15
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
16
 
17
use LeadersLinked\Mapper\CompanyLocationMapper;
18
use LeadersLinked\Model\Company;
19
use LeadersLinked\Model\CompanyUser;
20
use LeadersLinked\Mapper\CompanyFollowerMapper;
21
use LeadersLinked\Mapper\CompanyUserMapper;
22
use LeadersLinked\Mapper\QueryMapper;
23
use LeadersLinked\Mapper\CompanyMapper;
24
use LeadersLinked\Mapper\IndustryMapper;
25
use LeadersLinked\Mapper\CompanySizeMapper;
26
use LeadersLinked\Model\User;
27
use LeadersLinked\Mapper\UserMapper;
28
use LeadersLinked\Model\UserType;
29
use LeadersLinked\Mapper\CompanyRoleMapper;
30
 
31
 
32
class MyCompaniesController extends AbstractActionController
33
{
34
    /**
35
     *
36
     * @var AdapterInterface
37
     */
38
    private $adapter;
39
 
40
    /**
41
     *
42
     * @var  LoggerInterface
43
     */
44
    private $logger;
45
 
46
 
47
    /**
48
     *
49
     * @var array
50
     */
51
    private $config;
52
 
53
    /**
54
     *
55
     * @param AdapterInterface $adapter
56
     * @param LoggerInterface $logger
57
     * @param array $config
58
     */
6849 efrain 59
    public function __construct($adapter,  $logger,  $config)
1 www 60
    {
61
        $this->adapter      = $adapter;
62
        $this->logger       = $logger;
63
        $this->config       = $config;
64
 
65
    }
66
 
67
    /**
68
     *
69
     * Generación del listado de perfiles
70
     * {@inheritDoc}
71
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
72
     */
73
    public function indexAction()
74
    {
75
        $currentUserPlugin = $this->plugin('currentUserPlugin');
76
        $currentUser = $currentUserPlugin->getUser();
3639 efrain 77
 
1 www 78
 
79
        $request = $this->getRequest();
80
        if($request->isGet()) {
81
 
82
 
83
            $headers  = $request->getHeaders();
84
            $isJson = false;
85
            if($headers->has('Accept')) {
86
                $accept = $headers->get('Accept');
87
 
88
                $prioritized = $accept->getPrioritized();
89
 
90
                foreach($prioritized as $key => $value) {
91
                    $raw = trim($value->getRaw());
92
 
93
                    if(!$isJson) {
94
                        $isJson = strpos($raw, 'json');
95
                    }
96
 
97
                }
98
            }
99
 
100
            if($isJson) {
101
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
102
 
6749 efrain 103
                $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
1 www 104
 
105
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
106
 
107
                $queryMapper = QueryMapper::getInstance($this->adapter);
108
 
109
                $select = $queryMapper->getSql()->select();
110
                $select->columns(['id', 'uuid', 'name', 'status',  'image', 'status']);
111
                $select->from(['c' => CompanyMapper::_TABLE]);
112
                $select->join(['cu' => CompanyUserMapper::_TABLE], 'cu.company_id  = c.id', ['creator']);
113
                //$select->join(['i' => IndustryMapper::_TABLE], ' i.id = c.industry_id', ['industry' => 'name']);
114
                //$select->join(['cs' => CompanySizeMapper::_TABLE], 'cs.id = c.company_size_id', ['company_size' => new Expression("concat(minimum_no_of_employee , '-', maximum_no_of_employee)")]);
3639 efrain 115
                $select->where->equalTo('c.network_id', $currentUser->network_id);
1 www 116
                $select->where->equalTo('cu.user_id', $currentUser->id);
117
                $select->where->in('c.status', [Company::STATUS_ACTIVE, Company::STATUS_PENDING]);
118
                $select->where->in('cu.creator', [CompanyUser::CREATOR_YES]);
119
 
120
                if($search) {
121
                    $select->where->like('c.name', '%' . $search . '%');
122
                }
123
                $select->order('name ASC');
124
 
125
                //echo $select->getSqlString($this->adapter->platform); exit;
126
 
127
                $records = $queryMapper->fetchAll($select);
128
 
129
                $items = [];
130
                foreach($records as $record)
131
                {
132
 
133
                    switch($record['status']) {
134
                        case  Company::STATUS_ACTIVE :
135
                            $status = 'LABEL_ACTIVE';
136
                            break;
137
 
138
                        case  Company::STATUS_PENDING :
139
                            $status = 'LABEL_PENDING';
140
                            break;
141
 
142
                        default :
143
                            $status = '';
144
                            break;
145
                    }
146
 
3200 efrain 147
                    if($record['status'] == Company::STATUS_ACTIVE) {
3201 efrain 148
 
149
                        $link_view = $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]);
3200 efrain 150
                        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($record['id'], $currentUser->id);
151
                        if($companyUser && $companyUser->status == CompanyUser::STATUS_ACCEPTED && $companyUser->backend == CompanyUser::BACKEND_YES ) {
152
                            $link_my_company = $this->url()->fromRoute('backend/signin-company', ['id' => $record['uuid'] ]);
153
                        } else {
154
                            $link_my_company = '';
155
                        }
1 www 156
                    } else {
157
                        $link_my_company = '';
3201 efrain 158
                        $link_view = '';
3200 efrain 159
                    }
1 www 160
 
161
                    $item = [
162
 
163
                        'name' => $record['name'],
164
                        'status' => $status,
165
                        'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['uuid'], 'filename' => $record['image']]),
166
                        'link_my_company' =>  $link_my_company,
3201 efrain 167
                        'link_view' => $link_view,
1 www 168
                    ];
169
 
170
                    array_push($items, $item);
171
                }
172
 
173
 
174
 
175
                $response = [
176
                    'success' => true,
177
                    'data' => $items
178
                ];
179
 
180
                return new JsonModel($response);
181
 
182
 
183
            } else {
184
                $industries = [];
185
                $industryMapper = IndustryMapper::getInstance($this->adapter);
3454 efrain 186
                $records = $industryMapper->fetchAllActive();
1 www 187
                foreach($records as $record)
188
                {
189
                    $industries[$record->uuid] = $record->name;
190
                }
191
 
192
                $companySizes = [];
193
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
3454 efrain 194
                $records = $companySizeMapper->fetchAllActive();
1 www 195
                foreach($records as $record)
196
                {
3187 efrain 197
                    $companySizes[$record->uuid] = $record->name . ' ( ' . $record->minimum_no_of_employee . ' - ' . $record->maximum_no_of_employee . ' )';
1 www 198
                }
199
 
200
                $formAdd = new CreateForm($this->adapter);
201
 
202
 
203
 
204
                $this->layout()->setTemplate('layout/layout.phtml');
205
                $viewModel = new ViewModel();
206
                $viewModel->setTemplate('leaders-linked/my-companies/index.phtml');
207
                $viewModel->setVariables([
208
                    'formAdd' => $formAdd,
209
                    'industries' => $industries,
210
                    'company_sizes' => $companySizes,
211
                ]);
212
                return $viewModel ;
213
            }
214
 
215
        } else {
216
 
217
 
218
 
219
            return new JsonModel([
220
                'success' => false,
221
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
222
            ]);
223
        }
224
    }
225
 
226
    /**
227
     *
228
     * Agregar un nuevo perfil
229
     * @return \Laminas\View\Model\JsonModel
230
     */
231
    public function addAction()
232
    {
233
        $request = $this->getRequest();
234
 
235
        $currentUserPlugin = $this->plugin('currentUserPlugin');
236
        $currentUser = $currentUserPlugin->getUser();
237
 
238
 
239
        if($request->isPost()) {
240
            $form = new  CreateForm($this->adapter);
241
            $dataPost = $request->getPost()->toArray();
242
 
243
 
244
            $form->setData($dataPost);
245
 
246
            if($form->isValid()) {
247
                $dataPost = (array) $form->getData();
248
 
249
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
250
                $companySize = $companySizeMapper->fetchOneByUuid($dataPost['company_size_id']);
251
 
252
                $industryMapper = IndustryMapper::getInstance($this->adapter);
253
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
254
 
255
                $hydrator = new ObjectPropertyHydrator();
256
                $company = new Company();
257
                $hydrator->hydrate($dataPost, $company);
258
 
259
 
3639 efrain 260
                $company->network_id = $currentUser->network_id;
1 www 261
                $company->company_size_id =  $companySize->id;
262
                $company->industry_id = $industry->id;
263
                $company->foundation_year = date('Y');
264
                $company->status = Company::STATUS_PENDING;
265
                $company->description = '';
3639 efrain 266
 
1 www 267
 
268
                $companyMapper = CompanyMapper::getInstance($this->adapter);
269
                $result = $companyMapper->insert($company);
270
 
271
                if($result) {
272
 
273
                    $companyRoleMapper = CompanyRoleMapper::getInstance($this->adapter);
274
 
275
 
276
 
277
 
278
                    /** Creación del fake user propietario de la empresa */
279
                    $user = new User();
280
                    $user->email = 'fake-email'.$company->id;
281
                    $user->first_name = substr($company->name, 0, 64);
282
                    $user->last_name = substr($company->name, 64);
283
                    $user->status = User::STATUS_INACTIVE;
284
                    $user->blocked = User::BLOCKED_YES;
285
                    $user->login_attempt = 0;
286
                    $user->email_verified = User::EMAIL_VERIFIED_YES;
287
                    $user->show_in_search = User::SHOW_IN_SEARCH_NO;
288
                    $user->password = 'NO-PASSWORD';
289
                    $user->usertype_id = UserType::COMPANY;
290
 
291
                    $userMapper = UserMapper::getInstance($this->adapter);
292
                    $userMapper->insert($user);
293
 
294
                    $companyUser = new CompanyUser();
295
                    $companyUser->company_id = $company->id;
296
                    $companyUser->user_id = $user->id;
297
                    $companyUser->owner = CompanyUser::OWNER_YES;
298
                    $companyUser->creator = CompanyUser::CREATOR_NO;
299
                    $companyUser->status = CompanyUser::STATUS_ACCEPTED;
300
 
301
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
302
                    $companyUserMapper->insert($companyUser);
303
 
304
                    /** agregamos el usuario que lo crea como full administrador */
305
                    $companyUser = new CompanyUser();
306
                    $companyUser->company_id = $company->id;
307
                    $companyUser->user_id = $currentUser->id;
308
                    $companyUser->owner = CompanyUser::OWNER_NO;
309
                    $companyUser->creator = CompanyUser::CREATOR_YES;
310
                    $companyUser->status = CompanyUser::STATUS_ACCEPTED;
311
                    $companyUser->backend = CompanyUser::BACKEND_YES;
312
                    $companyUserMapper->insert($companyUser);
313
 
314
 
315
 
316
                    $this->logger->info('Se agrego la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
317
 
318
                    $data = [
319
                        'success'   => true,
320
                        'data'   => 'LABEL_RECORD_ADDED'
321
                    ];
322
                } else {
323
                    $data = [
324
                        'success'   => false,
325
                        'data'      => $companyMapper->getError()
326
                    ];
327
 
328
                }
329
 
330
                return new JsonModel($data);
331
 
332
            } else {
333
                $messages = [];
334
                $form_messages = (array) $form->getMessages();
335
                foreach($form_messages  as $fieldname => $field_messages)
336
                {
337
 
338
                    $messages[$fieldname] = array_values($field_messages);
339
                }
340
 
341
                return new JsonModel([
342
                    'success'   => false,
343
                    'data'   => $messages
344
                ]);
345
            }
346
 
347
        } else {
348
            $data = [
349
                'success' => false,
350
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
351
            ];
352
 
353
            return new JsonModel($data);
354
        }
355
 
356
        return new JsonModel($data);
357
    }
358
 
359
    /**
360
     *
361
     * Borrar un perfil excepto el público
362
     * @return \Laminas\View\Model\JsonModel
363
     */
364
 
365
 
366
 
367
 
368
 
369
 
370
}