Proyectos de Subversion LeadersLinked - Backend

Rev

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