Proyectos de Subversion LeadersLinked - Backend

Rev

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