Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 7574 | Rev 7815 | 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
/**
3
 *
4
 * Controlador: Seguidores de la empresa
5
 *
6
 */
7
declare(strict_types=1);
8
 
9
namespace LeadersLinked\Controller;
10
 
11
use Laminas\Db\Adapter\AdapterInterface;
12
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
13
use Laminas\Mvc\Controller\AbstractActionController;
14
use Laminas\Log\LoggerInterface;
15
use Laminas\View\Model\ViewModel;
16
use Laminas\View\Model\JsonModel;
17
 
18
use LeadersLinked\Library\Functions;
19
use LeadersLinked\Mapper\CompanyFollowerMapper;
20
use LeadersLinked\Mapper\CompanyUserMapper;
21
use LeadersLinked\Mapper\QueryMapper;
22
use LeadersLinked\Mapper\CompanyMapper;
23
use LeadersLinked\Mapper\UserMapper;
24
use Laminas\Paginator\Adapter\DbSelect;
25
use Laminas\Paginator\Paginator;
26
 
27
class FollowerController extends AbstractActionController
28
{
29
    /**
30
     *
31
     * @var AdapterInterface
32
     */
33
    private $adapter;
34
 
35
 
36
    /**
37
     *
38
     * @var AbstractAdapter
39
     */
40
    private $cache;
41
 
42
    /**
43
     *
44
     * @var  LoggerInterface
45
     */
46
    private $logger;
47
 
48
 
49
    /**
50
     *
51
     * @var array
52
     */
53
    private $config;
54
 
55
    /**
56
     *
57
     * @param AdapterInterface $adapter
58
     * @param AbstractAdapter $cache
59
     * @param LoggerInterface $logger
60
     * @param array $config
61
     */
62
    public function __construct($adapter, $cache , $logger,  $config)
63
    {
64
        $this->adapter      = $adapter;
65
        $this->cache        = $cache;
66
        $this->logger       = $logger;
67
        $this->config       = $config;
68
    }
69
 
70
    public function indexAction()
71
    {
72
        $currentUserPlugin = $this->plugin('currentUserPlugin');
73
        $currentUser = $currentUserPlugin->getUser();
74
        $currentCompany = $currentUserPlugin->getCompany();
75
 
76
 
77
        $request = $this->getRequest();
78
        if($request->isGet()) {
79
            $headers  = $request->getHeaders();
80
            $isJson = false;
81
            if($headers->has('Accept')) {
82
                $accept = $headers->get('Accept');
83
 
84
                $prioritized = $accept->getPrioritized();
85
 
86
                foreach($prioritized as $key => $value) {
87
                    $raw = trim($value->getRaw());
88
 
89
                    if(!$isJson) {
90
                        $isJson = strpos($raw, 'json');
91
                    }
92
                }
93
            }
94
 
95
            if($isJson) {
96
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
97
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'followers/delete');
98
 
99
 
100
                $sandbox = $this->config['leaderslinked.runmode.sandbox'];
101
                if($sandbox) {
102
                    $user_profile_url = $this->config['leaderslinked.frontend.sandbox_user_profile'];
103
                } else {
104
                    $user_profile_url = $this->config['leaderslinked.frontend.production_user_profile'];
105
                }
106
 
107
 
108
 
109
                $search = $this->params()->fromQuery('search', []);
110
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
111
 
112
                $page               = intval($this->params()->fromQuery('start', 1), 10);
113
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
114
                $order =  $this->params()->fromQuery('order', []);
115
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
116
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
117
 
118
                $fields =  ['first_name', 'last_name', 'email'];
119
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
120
 
121
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
122
                    $order_direction = 'ASC';
123
                }
124
 
125
                $queryMapper = QueryMapper::getInstance($this->adapter);
126
 
127
                $select = $queryMapper->getSql()->select();
128
                $select->columns(['id', 'uuid', 'first_name', 'last_name', 'email']);
129
                $select->from(['u' => UserMapper::_TABLE]);
130
                $select->join(['cf' => CompanyFollowerMapper::_TABLE], 'u.id = cf.follower_id', []);
131
                $select->where->equalTo('company_id', $currentCompany->id);
132
 
133
                if($search) {
134
                    $select->where->nest()->like('first_name', '%' . $search . '%')
135
                    ->or->like('last_name', '%' . $search . '%')
136
                    ->or->like('email', '%' . $search . '%')->unnest();
137
                }
138
                $select->order($order_field . ' ' . $order_direction);
139
 
140
                //echo $select->getSqlString($this->adapter->platform);
141
 
142
                $dbSelect = new DbSelect($select, $this->adapter);
143
                $paginator = new Paginator($dbSelect);
144
                $paginator->setCurrentPageNumber($page ? $page : 1);
145
                $paginator->setItemCountPerPage($records_x_page);
146
 
147
                $records = $paginator->getCurrentItems();
148
                $items = [];
149
                foreach($records as $record)
150
                {
151
                    $item = [
152
                        'first_name' => $record['first_name'] ,
153
                        'last_name' => $record['last_name'],
154
                        'email' => $record['email'],
155
                        'actions' => [
156
                            'link_profile' => $user_profile_url,
157
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('followers/delete',['id' => $record['uuid'] ]) : '',
158
                        ]
159
                    ];
160
 
161
                    array_push($items, $item);
162
                }
163
 
164
                return new JsonModel([
165
                    'success' => true,
166
                    'data' => [
167
                        'items' => $items,
168
                        'total' => $paginator->getTotalItemCount(),
169
                    ]
170
                ]);
171
 
172
 
173
 
174
            } else {
175
                $this->layout()->setTemplate('layout/layout-backend');
176
                $viewModel = new ViewModel();
177
                $viewModel->setTemplate('leaders-linked/followers/index.phtml');
178
                return $viewModel ;
179
            }
180
 
181
        } else {
182
            return new JsonModel([
183
                'success' => false,
184
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
185
            ]);
186
        }
187
    }
188
 
189
    public function deleteAction()
190
    {
191
      $currentUserPlugin = $this->plugin('currentUserPlugin');
192
      $currentUser = $currentUserPlugin->getUser();
193
      $currentCompany = $currentUserPlugin->getCompany();
194
      $request = $this->getRequest();
195
 
196
 
197
      if($request->isPost()) {
198
 
199
          $uuid = $this->params()->fromRoute('id');
200
          if(!$uuid) {
201
              return new JsonModel([
202
                  'success'   => false,
203
                  'data'      => 'ERROR_INVALID_PARAMETER'
204
              ]);
205
          }
206
 
207
          $userMapper = UserMapper::getInstance($this->adapter);
208
          $user = $userMapper->fetchOneByUuid($uuid);
209
 
210
          if(!$user) {
211
              return new JsonModel([
212
                  'success'   => false,
213
                  'data'      => 'ERROR_USER_NOT_FOUND'
214
              ]);
215
          }
216
 
217
 
218
          $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
219
          $companyFollower = $companyFollowerMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $user->id);
220
          if(!$companyFollower) {
221
              return new JsonModel([
222
                  'success'   => false,
223
                  'data'      =>  'ERROR_COMPANY_USER_IS_NOT_FOLLOWER'
224
              ]);
225
          }
226
 
227
 
228
 
229
 
230
 
231
 
232
          $result = $companyFollowerMapper->deleteByCompanyIdAndUserId($currentCompany->id, $user->id);
233
          if($result) {
234
              $this->logger->info('El seguridor : ' . $user->email . ' ha sido borrado  ', ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
235
 
236
              return new JsonModel([
237
                  'success'   => true,
238
                  'data'      => 'LABEL_FOLLOWER_DELETED',
239
              ]);
240
          }  else {
241
 
242
              return new JsonModel([
243
                  'success'   => false,
244
                  'data'      => $userMapper->getError()
245
              ]);
246
          }
247
 
248
 
249
      }
250
 
251
 
252
 
253
      return new JsonModel([
254
          'success' => false,
255
          'data' => 'ERROR_METHOD_NOT_ALLOWED'
256
      ]);
257
    }
258
}