Proyectos de Subversion LeadersLinked - Backend

Rev

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