Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Mapper;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use LeadersLinked\Model\GroupMember;
9
use LeadersLinked\Mapper\Common\MapperCommon;
10
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
11
use Laminas\Db\Sql\Expression;
12
 
13
 
14
class GroupMemberMapper extends MapperCommon
15
{
16
    const _TABLE = 'tbl_group_members';
17
 
18
 
19
    /**
20
     *
21
     * @var GroupMemberMapper
22
     */
23
    private static $_instance;
24
 
25
    /**
26
     *
27
     * @param AdapterInterface $adapter
28
     */
29
    private function __construct($adapter)
30
    {
31
        parent::__construct($adapter);
32
    }
33
 
34
    /**
35
     *
36
     * @param AdapterInterface $adapter
37
     * @return GroupMemberMapper
38
     */
39
    public static function getInstance($adapter)
40
    {
41
        if(self::$_instance == null) {
42
            self::$_instance = new GroupMemberMapper($adapter);
43
        }
44
        return self::$_instance;
45
    }
46
 
47
    /**
48
     *
49
     * @param int $id
50
     * @return int
51
     */
52
    public function fetchTotalByGroupId($group_id)
53
    {
54
        $select = $this->sql->select(self::_TABLE);
55
        $select->columns(['total' => new Expression('COUNT(*)')]);
56
        $select->where->equalTo('group_id', $group_id);
57
        $select->where->in('status', [GroupMember::STATUS_ACCEPTED, GroupMember::STATUS_AUTO_JOIN]);
58
 
59
        $record = $this->executeFetchOneArray($select);
60
        return $record['total'];
61
    }
62
 
63
    /**
64
     *
65
     * @param int $id
66
     * @return int
67
     */
68
    public function fetchTotalAcceptedByGroupId($group_id)
69
    {
70
        $select = $this->sql->select(self::_TABLE);
71
        $select->columns(['total' => new Expression('COUNT(*)')]);
72
        $select->where->equalTo('group_id', $group_id);
73
        $select->where->equalTo('status', GroupMember::STATUS_ACCEPTED);
74
 
75
       //echo $select->getSqlString($this->adapter->platform); exit;
76
 
77
        $record = $this->executeFetchOneArray($select);
78
        return $record['total'];
79
    }
80
 
81
    /**
82
     *
83
     * @param int $id
84
     * @return int[]
85
     */
86
    public function fetchAllUserIdsByGroupId($group_id)
87
    {
88
        $select = $this->sql->select(self::_TABLE);
89
        $select->columns(['user_id']);
90
        $select->where->equalTo('group_id', $group_id);
91
 
92
        $user_ids = [];
93
        $records =  $this->executeFetchAllArray($select);
94
        foreach($records as $record)
95
        {
96
            array_push($user_ids, $record['user_id']);
97
        }
98
        return $user_ids;
99
    }
100
 
101
    /**
102
     *
103
     * @param int $group_id
104
     * @return int[]
105
     */
106
    public function fetchAllAcceptedUserIdsByGroupId($group_id)
107
    {
108
        $select = $this->sql->select(self::_TABLE);
109
        $select->columns(['user_id']);
110
        $select->where->equalTo('group_id', $group_id);
111
 
112
        $user_ids = [];
113
        $records =  $this->executeFetchAllArray($select);
114
        foreach($records as $record)
115
        {
116
            array_push($user_ids, $record['user_id']);
117
        }
118
        return $user_ids;
119
    }
120
 
121
    /**
122
     *
123
     * @param int $user_id
124
     * @return GroupMember[]
125
     */
126
    public function fetchAllByUserId($user_id)
127
    {
128
        $select = $this->sql->select(self::_TABLE);
129
        $select->where->equalTo('user_id', $user_id);
130
 
131
        $prototype = new GroupMember();
132
        return $this->executeFetchAllObject($select, $prototype);
133
    }
134
 
135
    /**
136
     *
137
     * @param int $user_ids
138
     * @return int[]
139
     */
140
    public function fetchAllGroupIdsByUserIds($user_ids)
141
    {
142
        $select = $this->sql->select(self::_TABLE);
143
        $select->columns(['group_id' => new Expression('DISTINCT(group_id)')]);
144
        $select->where->in('user_id', $user_ids);
145
 
146
        $group_ids = [];
147
        $records = $this->executeFetchAllArray($select);
148
        foreach($records as $record)
149
        {
150
            array_push($group_ids, $record['group_id']);
151
        }
152
        return $group_ids;
153
    }
154
 
155
 
156
    /**
157
     *
158
     * @param int $group_id
159
     * @return GroupMember[]
160
     */
161
    public function fetchAllByGroupId($group_id)
162
    {
163
        $select = $this->sql->select(self::_TABLE);
164
        $select->where->equalTo('group_id', $group_id);
165
 
166
        $prototype = new GroupMember();
167
        return $this->executeFetchAllObject($select, $prototype);
168
    }
169
 
170
    /**
171
     *
172
     * @param int $group_id
173
     * @param int $user_id
174
     * @return  GroupMember
175
     */
176
    public function fetchOneByGroupIdAndUserId($group_id, $user_id)
177
    {
178
        $prototype = new GroupMember();
179
 
180
        $select = $this->sql->select(self::_TABLE);
181
        $select->where->equalTo('group_id', $group_id)->and->equalTo('user_id', $user_id);
182
 
183
        return $this->executeFetchOneObject($select, $prototype);
184
    }
185
 
186
    /**
187
     *
188
     * @param GroupMember $groupMember
189
     * @return boolean
190
     */
191
    public function insert($groupMember)
192
    {
193
        $hydrator = new ObjectPropertyHydrator();
194
        $values = $hydrator->extract($groupMember);
195
        $values = $this->removeEmpty($values);
196
 
197
        $insert = $this->sql->insert(self::_TABLE);
198
        $insert->values($values);
199
 
200
        $result = $this->executeInsert($insert);
201
        if($result) {
202
            $groupMember->id = $this->lastInsertId;
203
        }
204
 
205
        return $result;
206
    }
207
 
208
    /**
209
     *
210
     * @param GroupMember $groupMember
211
     * @return boolean
212
     */
213
    public function update($groupMember)
214
    {
215
        $hydrator = new ObjectPropertyHydrator();
216
        $values = $hydrator->extract($groupMember);
217
        $values = $this->removeEmpty($values);
218
 
219
        $update = $this->sql->update(self::_TABLE);
220
        $update->set($values);
221
        $update->where->equalTo('id', $groupMember->id);
222
 
223
        $result = $this->executeUpdate($update);
224
        if($result) {
225
            $groupMember->id = $this->lastInsertId;
226
        }
227
 
228
        return $result;
229
    }
230
 
231
 
232
 
233
 
234
 
235
 
236
 
237
}