Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15668 | Rev 16768 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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