Proyectos de Subversion LeadersLinked - Services

Rev

Rev 333 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
 
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;
283 www 30
use LeadersLinked\Library\Storage;
1 efrain 31
 
32
 
33
class MyCompaniesController extends AbstractActionController
34
{
35
    /**
36
     *
37
     * @var \Laminas\Db\Adapter\AdapterInterface
38
     */
39
    private $adapter;
40
 
41
    /**
42
     *
43
     * @var \LeadersLinked\Cache\CacheInterface
44
     */
45
    private $cache;
46
 
47
 
48
    /**
49
     *
50
     * @var \Laminas\Log\LoggerInterface
51
     */
52
    private $logger;
53
 
54
    /**
55
     *
56
     * @var array
57
     */
58
    private $config;
59
 
60
 
61
    /**
62
     *
63
     * @var \Laminas\Mvc\I18n\Translator
64
     */
65
    private $translator;
66
 
67
 
68
    /**
69
     *
70
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
71
     * @param \LeadersLinked\Cache\CacheInterface $cache
72
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
73
     * @param array $config
74
     * @param \Laminas\Mvc\I18n\Translator $translator
75
     */
76
    public function __construct($adapter, $cache, $logger, $config, $translator)
77
    {
78
        $this->adapter      = $adapter;
79
        $this->cache        = $cache;
80
        $this->logger       = $logger;
81
        $this->config       = $config;
82
        $this->translator   = $translator;
83
    }
84
 
85
    /**
86
     *
87
     * Generación del listado de perfiles
88
     * {@inheritDoc}
89
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
90
     */
91
    public function indexAction()
92
    {
93
        $currentUserPlugin = $this->plugin('currentUserPlugin');
94
        $currentUser = $currentUserPlugin->getUser();
95
 
770 stevensc 96
        $request = $this->getRequest();
1 efrain 97
 
98
        if($request->isGet()) {
99
 
100
 
101
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
102
 
103
                $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
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)")]);
115
                $select->where->equalTo('c.network_id', $currentUser->network_id);
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
 
333 www 127
                $storage = Storage::getInstance($this->config, $this->adapter);
1 efrain 128
                $records = $queryMapper->fetchAll($select);
129
 
130
                $items = [];
131
                foreach($records as $record)
132
                {
133
 
134
                    switch($record['status']) {
135
                        case  Company::STATUS_ACTIVE :
136
                            $status = 'LABEL_ACTIVE';
137
                            break;
138
 
139
                        case  Company::STATUS_PENDING :
140
                            $status = 'LABEL_PENDING';
141
                            break;
142
 
143
                        default :
144
                            $status = '';
145
                            break;
146
                    }
147
 
148
                    if($record['status'] == Company::STATUS_ACTIVE) {
149
 
150
                        $link_view = $this->url()->fromRoute('company/view', ['id' => $record['uuid'] ]);
151
                        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($record['id'], $currentUser->id);
152
                        if($companyUser && $companyUser->status == CompanyUser::STATUS_ACCEPTED && $companyUser->backend == CompanyUser::BACKEND_YES ) {
153
                            $link_my_company = $this->url()->fromRoute('backend/signin-company', ['id' => $record['uuid'] ]);
154
                        } else {
155
                            $link_my_company = '';
156
                        }
157
                    } else {
158
                        $link_my_company = '';
159
                        $link_view = '';
160
                    }
161
 
162
                    $item = [
163
 
164
                        'name' => $record['name'],
165
                        'status' => $status,
283 www 166
                        'image' => $storage->getCompanyImageForCodeAndFilename($record['uuid'], $record['image']),
1 efrain 167
                        'link_my_company' =>  $link_my_company,
168
                        'link_view' => $link_view,
169
                    ];
170
 
171
                    array_push($items, $item);
172
                }
173
 
174
 
175
 
176
                $response = [
177
                    'success' => true,
178
                    'data' => $items
179
                ];
180
 
181
                return new JsonModel($response);
182
 
183
 
184
 
185
 
770 stevensc 186
        } else {
1 efrain 187
            return new JsonModel([
188
                'success' => false,
189
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
190
            ]);
191
        }
192
    }
193
 
194
    /**
195
     *
196
     * Agregar un nuevo perfil
197
     * @return \Laminas\View\Model\JsonModel
198
     */
199
    public function addAction()
200
    {
201
        $request = $this->getRequest();
202
 
203
        $currentUserPlugin = $this->plugin('currentUserPlugin');
204
        $currentUser = $currentUserPlugin->getUser();
205
 
206
 
207
        if($request->isPost()) {
208
            $form = new  CreateForm($this->adapter);
209
            $dataPost = $request->getPost()->toArray();
210
 
211
 
212
            $form->setData($dataPost);
213
 
214
            if($form->isValid()) {
215
                $dataPost = (array) $form->getData();
216
 
217
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
218
                $companySize = $companySizeMapper->fetchOneByUuid($dataPost['company_size_id']);
219
 
220
                $industryMapper = IndustryMapper::getInstance($this->adapter);
221
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
222
 
223
                $hydrator = new ObjectPropertyHydrator();
224
                $company = new Company();
225
                $hydrator->hydrate($dataPost, $company);
226
 
227
 
228
                $company->network_id = $currentUser->network_id;
229
                $company->company_size_id =  $companySize->id;
230
                $company->industry_id = $industry->id;
231
                $company->foundation_year = date('Y');
232
                $company->status = Company::STATUS_PENDING;
233
                $company->description = '';
234
 
235
 
236
                $companyMapper = CompanyMapper::getInstance($this->adapter);
237
                $result = $companyMapper->insert($company);
238
 
239
                if($result) {
240
 
241
                    $companyRoleMapper = CompanyRoleMapper::getInstance($this->adapter);
242
 
243
 
244
 
245
 
246
                    /** Creación del fake user propietario de la empresa */
247
                    $user = new User();
248
                    $user->email = 'fake-email'.$company->id;
249
                    $user->first_name = substr($company->name, 0, 64);
250
                    $user->last_name = substr($company->name, 64);
251
                    $user->status = User::STATUS_INACTIVE;
252
                    $user->blocked = User::BLOCKED_YES;
253
                    $user->login_attempt = 0;
254
                    $user->email_verified = User::EMAIL_VERIFIED_YES;
255
                    $user->show_in_search = User::SHOW_IN_SEARCH_NO;
256
                    $user->password = 'NO-PASSWORD';
257
                    $user->usertype_id = UserType::COMPANY;
258
 
259
                    $userMapper = UserMapper::getInstance($this->adapter);
260
                    $userMapper->insert($user);
261
 
262
                    $companyUser = new CompanyUser();
263
                    $companyUser->company_id = $company->id;
264
                    $companyUser->user_id = $user->id;
265
                    $companyUser->owner = CompanyUser::OWNER_YES;
266
                    $companyUser->creator = CompanyUser::CREATOR_NO;
267
                    $companyUser->status = CompanyUser::STATUS_ACCEPTED;
268
 
269
                    $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
270
                    $companyUserMapper->insert($companyUser);
271
 
272
                    /** agregamos el usuario que lo crea como full administrador */
273
                    $companyUser = new CompanyUser();
274
                    $companyUser->company_id = $company->id;
275
                    $companyUser->user_id = $currentUser->id;
276
                    $companyUser->owner = CompanyUser::OWNER_NO;
277
                    $companyUser->creator = CompanyUser::CREATOR_YES;
278
                    $companyUser->status = CompanyUser::STATUS_ACCEPTED;
279
                    $companyUser->backend = CompanyUser::BACKEND_YES;
280
                    $companyUserMapper->insert($companyUser);
281
 
282
 
283
 
284
                    $this->logger->info('Se agrego la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
285
 
286
                    $data = [
287
                        'success'   => true,
288
                        'data'   => 'LABEL_RECORD_ADDED'
289
                    ];
290
                } else {
291
                    $data = [
292
                        'success'   => false,
293
                        'data'      => $companyMapper->getError()
294
                    ];
295
 
296
                }
297
 
298
                return new JsonModel($data);
299
 
300
            } else {
301
                $messages = [];
302
                $form_messages = (array) $form->getMessages();
303
                foreach($form_messages  as $fieldname => $field_messages)
304
                {
305
 
306
                    $messages[$fieldname] = array_values($field_messages);
307
                }
308
 
309
                return new JsonModel([
310
                    'success'   => false,
311
                    'data'   => $messages
312
                ]);
313
            }
314
 
315
        } else {
316
            $data = [
317
                'success' => false,
318
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
319
            ];
320
 
321
            return new JsonModel($data);
322
        }
323
 
324
        return new JsonModel($data);
325
    }
326
 
327
    /**
328
     *
329
     * Borrar un perfil excepto el público
330
     * @return \Laminas\View\Model\JsonModel
331
     */
332
 
333
 
334
 
335
 
336
 
337
 
338
}