Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15663 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
15397 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
8
 
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
 
12
use Laminas\View\Model\ViewModel;
13
use Laminas\View\Model\JsonModel;
14
use LeadersLinked\Library\Functions;
15
use LeadersLinked\Mapper\AptitudeMapper;
16
use LeadersLinked\Form\AptitudeForm;
17
use LeadersLinked\Model\Aptitude;
18
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
19
use LeadersLinked\Mapper\DiscoveryContactMapper;
20
use LeadersLinked\Mapper\QueryMapper;
21
use LeadersLinked\Model\DiscoveryContactLog;
22
use LeadersLinked\Mapper\DiscoveryContactLogMapper;
23
use LeadersLinked\Mapper\UserMapper;
24
use Laminas\Hydrator\Iterator\HydratingArrayIterator;
25
use Laminas\Paginator\Adapter\DbSelect;
26
use Laminas\Paginator\Paginator;
27
 
28
 
29
class DiscoveryContactLogController extends AbstractActionController
30
{
31
    /**
32
     *
33
     * @var AdapterInterface
34
     */
35
    private $adapter;
36
 
37
 
38
    /**
39
     *
40
     * @var AbstractAdapter
41
     */
42
    private $cache;
43
 
44
    /**
45
     *
46
     * @var  LoggerInterface
47
     */
48
    private $logger;
49
 
50
    /**
51
     *
52
     * @var array
53
     */
54
    private $config;
55
 
56
    /**
57
     *
58
     * @param AdapterInterface $adapter
59
     * @param AbstractAdapter $cache
60
     * @param LoggerInterface $logger
61
     * @param array $config
62
     */
63
    public function __construct($adapter, $cache , $logger, $config)
64
    {
65
        $this->adapter      = $adapter;
66
        $this->cache        = $cache;
67
        $this->logger       = $logger;
68
        $this->config       = $config;
69
 
70
    }
71
 
72
    public function indexAction()
73
    {
74
 
75
        $request = $this->getRequest();
76
        if($request->isGet()) {
77
 
78
            $request = $this->getRequest();
79
            $uuid = $this->params()->fromRoute('id');
80
 
81
 
82
            if(!$uuid) {
83
                $data = [
84
                    'success'   => false,
85
                    'data'   => 'ERROR_INVALID_PARAMETER'
86
                ];
87
 
88
                return new JsonModel($data);
89
            }
90
 
91
            $discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);
92
            $discoveryContact = $discoveryContactMapper->fetchOneByUuid($uuid);
93
            if(!$discoveryContact) {
94
                $data = [
95
                    'success'   => false,
96
                    'data'   => 'ERROR_RECORD_NOT_FOUND'
97
                ];
98
 
99
                return new JsonModel($data);
100
            }
101
 
102
            $search = $this->params()->fromQuery('search');
103
            $search = empty($search) ? '' : filter_var($search, FILTER_SANITIZE_STRING);
104
 
105
            $page               = intval($this->params()->fromQuery('start', 1), 10);
106
            $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
107
 
108
 
109
            $queryMapper = QueryMapper::getInstance($this->adapter);
110
            $select = $queryMapper->getSql()->select();
111
            $select->from([ 'tb1' => DiscoveryContactLogMapper::_TABLE ]);
112
            $select->columns(['activity', 'details', 'added_on']);
113
            $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['first_name' , 'last_name', 'email']);
114
            $select->where->equalTo('company_id', $discoveryContact->company_id);
115
            $select->where->equalTo('contact_id', $discoveryContact->id);
116
            if($search) {
117
                $select->where->nest()
118
                ->like('first_name', '%' . $search . '%')
119
                ->or->like('last_name', '%' . $search . '%')
120
                ->or->like('email', '%' . $search . '%')
121
                ->or->like('activity', '%' . $search . '%')
122
                ->unnest();
123
            }
124
 
125
            $select->order('added_on DESC');
126
 
127
            $page               = intval($this->params()->fromQuery('start', 1), 10);
128
 
129
            $adapter = new DbSelect($select, $queryMapper->getSql());
130
            $paginator = new Paginator($adapter);
131
            $paginator->setItemCountPerPage($records_x_page);
132
            $paginator->setCurrentPageNumber($page);
133
 
134
 
135
            $items = [];
136
            $records = $paginator->getCurrentItems();
137
            foreach($records as $record)
138
            {
139
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on'] );
140
 
141
                $item = [
142
                    'first_name' => $record['first_name'],
143
                    'last_name' => $record['last_name'],
144
                    'email' => $record['email'],
145
                    'activity' => $record['activity'],
146
                    'details' => $record['details'],
147
                    'added_on' => $dt->format('d/m/Y H:i a'),
148
                ];
149
 
150
                array_push($items, $item);
151
            }
152
 
153
            $total_items = $paginator->getTotalItemCount();
154
            if($total_items <= 10) {
155
                $total_pages = 1;
156
            } else {
157
 
158
                $total_pages = (  $total_items / 10);
159
 
160
 
161
                if(($total_pages * 10) <  $total_items) {
162
                    $total_pages++;
163
                }
164
            }
165
 
166
 
167
            return new JsonModel([
168
                'success' => true,
169
                'data' => [
170
                    'current' => [
171
                        'items' => $items,
172
                        'page' => $paginator->getCurrentPageNumber()
173
 
174
                    ],
175
                    'total' => [
176
 
177
                        'items' => $total_items,
178
                        'pages' => $total_pages
179
                    ],
180
                ]
181
            ]);
182
 
183
        } else {
184
            return new JsonModel([
185
                'success' => false,
186
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
187
            ]);;
188
        }
189
    }
190
 
191
 
192
}