Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16769 | 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;
8
 
16768 efrain 9
 
15397 efrain 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
{
16769 efrain 32
    /**
15397 efrain 33
     *
16769 efrain 34
     * @var \Laminas\Db\Adapter\AdapterInterface
15397 efrain 35
     */
36
    private $adapter;
16769 efrain 37
 
15397 efrain 38
    /**
39
     *
16769 efrain 40
     * @var \LeadersLinked\Cache\CacheInterface
15397 efrain 41
     */
16769 efrain 42
    private $cache;
43
 
44
 
45
    /**
46
     *
47
     * @var \Laminas\Log\LoggerInterface
48
     */
15397 efrain 49
    private $logger;
16769 efrain 50
 
15397 efrain 51
    /**
52
     *
53
     * @var array
54
     */
55
    private $config;
16769 efrain 56
 
57
 
15397 efrain 58
    /**
59
     *
16769 efrain 60
     * @var \Laminas\Mvc\I18n\Translator
61
     */
62
    private $translator;
63
 
64
 
65
    /**
66
     *
67
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
68
     * @param \LeadersLinked\Cache\CacheInterface $cache
69
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
15397 efrain 70
     * @param array $config
16769 efrain 71
     * @param \Laminas\Mvc\I18n\Translator $translator
15397 efrain 72
     */
16769 efrain 73
    public function __construct($adapter, $cache, $logger, $config, $translator)
15397 efrain 74
    {
16769 efrain 75
        $this->adapter      = $adapter;
76
        $this->cache        = $cache;
77
        $this->logger       = $logger;
78
        $this->config       = $config;
79
        $this->translator   = $translator;
15397 efrain 80
    }
15663 anderson 81
 
15397 efrain 82
    public function indexAction()
83
    {
84
 
85
        $request = $this->getRequest();
15663 anderson 86
        if ($request->isGet()) {
87
 
15397 efrain 88
            $request = $this->getRequest();
89
            $uuid = $this->params()->fromRoute('id');
15663 anderson 90
 
91
 
15665 anderson 92
            if (!$uuid) {
93
                $data = [
94
                    'success'   => false,
95
                    'data'   => 'ERROR_INVALID_PARAMETER'
96
                ];
15663 anderson 97
 
15665 anderson 98
                return new JsonModel($data);
99
            }
15663 anderson 100
 
15665 anderson 101
            $discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);
102
            $discoveryContact = $discoveryContactMapper->fetchOneByUuid($uuid);
103
            if (!$discoveryContact) {
104
                $data = [
105
                    'success'   => false,
106
                    'data'   => 'ERROR_RECORD_NOT_FOUND'
107
                ];
15663 anderson 108
 
15665 anderson 109
                return new JsonModel($data);
110
            }
15663 anderson 111
 
15397 efrain 112
            $search = $this->params()->fromQuery('search');
16778 efrain 113
            $search = empty($search['value']) ? '' : Functions::sanitizeFilterString($search['value']);
15663 anderson 114
 
15397 efrain 115
            $page               = intval($this->params()->fromQuery('start', 1), 10);
116
            $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
15663 anderson 117
 
118
 
15397 efrain 119
            $queryMapper = QueryMapper::getInstance($this->adapter);
120
            $select = $queryMapper->getSql()->select();
15663 anderson 121
            $select->from(['tb1' => DiscoveryContactLogMapper::_TABLE]);
15397 efrain 122
            $select->columns(['activity', 'details', 'added_on']);
15663 anderson 123
            $select->join(['tb2' => UserMapper::_TABLE], 'tb1.user_id = tb2.id', ['first_name', 'last_name', 'email']);
15397 efrain 124
            $select->where->equalTo('company_id', $discoveryContact->company_id);
125
            $select->where->equalTo('contact_id', $discoveryContact->id);
15663 anderson 126
            if ($search) {
15397 efrain 127
                $select->where->nest()
15663 anderson 128
                    ->like('first_name', '%' . $search . '%')
129
                    ->or->like('last_name', '%' . $search . '%')
130
                    ->or->like('email', '%' . $search . '%')
131
                    ->or->like('activity', '%' . $search . '%')
132
                    ->unnest();
15397 efrain 133
            }
15663 anderson 134
 
15397 efrain 135
            $select->order('added_on DESC');
15663 anderson 136
 
15397 efrain 137
            $page               = intval($this->params()->fromQuery('start', 1), 10);
138
 
139
            $adapter = new DbSelect($select, $queryMapper->getSql());
140
            $paginator = new Paginator($adapter);
141
            $paginator->setItemCountPerPage($records_x_page);
142
            $paginator->setCurrentPageNumber($page);
143
 
15663 anderson 144
 
15397 efrain 145
            $items = [];
146
            $records = $paginator->getCurrentItems();
15663 anderson 147
            foreach ($records as $record) {
148
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
149
 
15397 efrain 150
                $item = [
151
                    'first_name' => $record['first_name'],
152
                    'last_name' => $record['last_name'],
153
                    'email' => $record['email'],
154
                    'activity' => $record['activity'],
155
                    'details' => $record['details'],
156
                    'added_on' => $dt->format('d/m/Y H:i a'),
157
                ];
15663 anderson 158
 
15397 efrain 159
                array_push($items, $item);
160
            }
15663 anderson 161
 
15397 efrain 162
            $total_items = $paginator->getTotalItemCount();
15663 anderson 163
            if ($total_items <= 10) {
164
                $total_pages = 1;
15397 efrain 165
            } else {
15663 anderson 166
 
167
                $total_pages = ($total_items / 10);
168
 
169
 
170
                if (($total_pages * 10) <  $total_items) {
15397 efrain 171
                    $total_pages++;
172
                }
173
            }
15663 anderson 174
 
175
 
15397 efrain 176
            return new JsonModel([
177
                'success' => true,
178
                'data' => [
179
                    'current' => [
180
                        'items' => $items,
181
                        'page' => $paginator->getCurrentPageNumber()
15663 anderson 182
 
183
                    ],
15397 efrain 184
                    'total' => [
15663 anderson 185
 
15397 efrain 186
                        'items' => $total_items,
187
                        'pages' => $total_pages
15663 anderson 188
                    ],
15397 efrain 189
                ]
190
            ]);
191
        } else {
192
            return new JsonModel([
193
                'success' => false,
194
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
195
            ]);;
196
        }
197
    }
198
}