Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6749 | Ir a la última revisión | | Comparar con el anterior | 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\Command;
6
 
7
use Symfony\Component\Console\Command\Command;
8
use Symfony\Component\Console\Input\InputInterface;
9
//use Symfony\Component\Console\Input\InputOption;
10
use Symfony\Component\Console\Output\OutputInterface;
11
use Laminas\Db\Adapter\AdapterInterface;
6849 efrain 12
 
1 www 13
use Laminas\Log\LoggerInterface;
14
use LeadersLinked\Mapper\CompanyMicrolearningUserProgressMapper;
15
use LeadersLinked\Mapper\CompanyMicrolearningSlideMapper;
16
use LeadersLinked\Mapper\QueryMapper;
17
use LeadersLinked\Model\CompanyMicrolearningUserProgress;
18
 
19
 
20
class RecalculateMicrolearningProgressCommand extends Command
21
{
22
    /**
23
     *
24
     * @var AdapterInterface
25
     */
26
    private $adapter;
27
 
28
 
29
    /**
30
     *
31
     * @var  LoggerInterface
32
     */
33
    private $logger;
34
 
35
    /**
36
     *
37
     * @var array
38
     */
39
    private $config;
40
 
41
 
42
    /**
43
     *
44
     * @param AdapterInterface $adapter
6849 efrain 45
 
1 www 46
     * @param LoggerInterface $logger
47
     * @param array $config
48
     */
6849 efrain 49
     public function __construct($adapter, $logger, $config)
1 www 50
    {
51
        $this->adapter      = $adapter;
52
        $this->logger       = $logger;
53
        $this->config       = $config;
54
 
55
        parent::__construct();
56
    }
57
 
58
 
59
    protected function execute(InputInterface $input, OutputInterface $output) : int
60
    {
61
 
62
        /***** INICIO TOPICOS DUPLICADOS *****/
63
 
64
        $output->writeln('Comenzamos a buscar los registros duplicados de los Tópicos');
65
        $queryMapper = QueryMapper::getInstance($this->adapter);
66
 
67
 
68
        $sql  = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
69
        echo $sql . PHP_EOL;
70
 
71
        $record_users = $queryMapper->fetchAllUsingParameters($sql);
72
 
73
        foreach($record_users as $record_user)
74
        {
75
            $user_id = $record_user['user_id'];
76
 
77
 
78
            $sql  = " SELECT DISTINCT(topic_id) AS topic_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
79
            $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC . "' ";
80
            $sql .= " AND user_id = $user_id";
81
 
82
            echo $sql . PHP_EOL;
83
            $records_topic = $queryMapper->fetchAllUsingParameters($sql);
84
 
85
 
86
            foreach($records_topic as $record_topic)
87
            {
88
                $topic_id = $record_topic['topic_id'];
89
 
90
                $sql  = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
91
                $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC . "' ";
92
                $sql .= " AND user_id = $user_id";
93
                $sql .= " AND topic_id = $topic_id";
94
                $sql .= " ORDER BY completed DESC LIMIT 0, 1";
95
                echo $sql . PHP_EOL;
96
 
97
                $record = $queryMapper->fetchOneUsingParameters($sql);
98
                $id = $record['id'];
99
 
100
                $sql  = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
101
                $sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_TOPIC ."' ";
102
                $sql .= " AND user_id = $user_id ";
103
                $sql .= " AND topic_id = $topic_id ";
104
                $sql .= " AND id <> $id ";
105
                echo $sql . PHP_EOL;
106
 
107
                $queryMapper->delete($sql);
108
 
109
            }
110
        }
111
        $output->writeln('Terminamos de procesar los registros duplicados de los Tópicos');
112
 
113
        /***** FIN TOPICOS DUPLICADOS *****/
114
 
115
 
116
 
117
        /***** INICIO CAPSULAS DUPLICADOS *****/
118
 
119
        $output->writeln('Comenzamos a buscar los registros duplicados de las Capsulas');
120
        $queryMapper = QueryMapper::getInstance($this->adapter);
121
 
122
 
123
        $sql  = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
124
        echo $sql . PHP_EOL;
125
 
126
        $record_users = $queryMapper->fetchAllUsingParameters($sql);
127
 
128
        foreach($record_users as $record_user)
129
        {
130
            $user_id = $record_user['user_id'];
131
 
132
 
133
            $sql  = " SELECT DISTINCT(capsule_id) AS capsule_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
134
            $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE . "' ";
135
            $sql .= " AND user_id = $user_id";
136
 
137
            echo $sql . PHP_EOL;
138
            $records_capsule = $queryMapper->fetchAllUsingParameters($sql);
139
 
140
 
141
            foreach($records_capsule as $record_capsule)
142
            {
143
                $capsule_id = $record_capsule['capsule_id'];
144
 
145
                $sql  = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
146
                $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE . "' ";
147
                $sql .= " AND user_id = $user_id";
148
                $sql .= " AND capsule_id = $capsule_id";
149
                $sql .= " ORDER BY completed DESC LIMIT 0, 1";
150
                echo $sql . PHP_EOL;
151
 
152
                $record = $queryMapper->fetchOneUsingParameters($sql);
153
                $id = $record['id'];
154
 
155
                $sql  = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
156
                $sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_CAPSULE ."' ";
157
                $sql .= " AND user_id = $user_id ";
158
                $sql .= " AND capsule_id = $capsule_id ";
159
                $sql .= " AND id <> $id ";
160
                echo $sql . PHP_EOL;
161
 
162
                $queryMapper->delete($sql);
163
 
164
            }
165
        }
166
        $output->writeln('Terminamos de procesar los registros duplicados de las Capsulas');
167
 
168
        /***** FIN CAPSULAS DUPLICADOS *****/
169
 
170
 
171
 
172
        /***** INICIO DIAPOSITIVAS DUPLICADOS *****/
173
 
174
        $output->writeln('Comenzamos a buscar los registros duplicados de las Diapositivas');
175
        $queryMapper = QueryMapper::getInstance($this->adapter);
176
 
177
 
178
        $sql  = " SELECT DISTINCT(user_id) AS user_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
179
        echo $sql . PHP_EOL;
180
 
181
        $record_users = $queryMapper->fetchAllUsingParameters($sql);
182
 
183
        foreach($record_users as $record_user)
184
        {
185
            $user_id = $record_user['user_id'];
186
 
187
 
188
            $sql  = " SELECT DISTINCT(slide_id) AS slide_id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
189
            $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE . "' ";
190
            $sql .= " AND user_id = $user_id";
191
 
192
            echo $sql . PHP_EOL;
193
            $records_slides = $queryMapper->fetchAllUsingParameters($sql);
194
 
195
 
196
            foreach($records_slides as $record_slide)
197
            {
198
                $slide_id = $record_slide['slide_id'];
199
 
200
                $sql  = " SELECT id FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
201
                $sql .= " WHERE  type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE . "' ";
202
                $sql .= " AND user_id = $user_id";
203
                $sql .= " AND slide_id = $slide_id";
204
                $sql .= " ORDER BY completed DESC LIMIT 0, 1";
205
                echo $sql . PHP_EOL;
206
 
207
                $record = $queryMapper->fetchOneUsingParameters($sql);
208
                $id = $record['id'];
209
 
210
                $sql  = " DELETE FROM " . CompanyMicrolearningUserProgressMapper::_TABLE;
211
                $sql .= " WHERE type = '" . CompanyMicrolearningUserProgress::TYPE_SLIDE ."' ";
212
                $sql .= " AND user_id = $user_id ";
213
                $sql .= " AND slide_id = $slide_id ";
214
                $sql .= " AND id <> $id ";
215
                echo $sql . PHP_EOL;
216
 
217
                $queryMapper->delete($sql);
218
 
219
            }
220
        }
221
        $output->writeln('Terminamos de procesar los registros duplicados de las Diapositivas');
222
 
223
        /***** FIN DIAPOSITIVAS DUPLICADOS *****/
224
 
225
        $progressMapper = CompanyMicrolearningUserProgressMapper::getInstance($this->adapter);
226
        $slideMapper = CompanyMicrolearningSlideMapper::getInstance($this->adapter);
227
 
228
 
229
        $output->writeln('Recalculo del progreso de los Tópicos');
230
 
231
        $records = $progressMapper->fetchAllTopics();
232
 
233
       // print_r($records); exit;
234
 
235
        foreach($records as $record)
236
        {   $total_slides = $slideMapper->fetchTotalCountByCompanyIdAndTopicId($record->company_id,$record->topic_id);
237
            $view_slides = $progressMapper->fetchCountAllSlideCompletedByUserIdAndTopicId($record->user_id, $record->topic_id);
238
 
239
            $record->total_slides = $total_slides;
240
            $record->view_slides = $view_slides;
241
            $record->progress = $total_slides > 0 ? (($view_slides * 100) / $total_slides) : 0;
242
 
243
            $sql  = " UPDATE  " . CompanyMicrolearningUserProgressMapper::_TABLE;
244
            $sql .= " SET progress =  " . $record->progress;
245
            $sql .= " , total_slides =  " . $total_slides;
246
            $sql .= " , view_slides  =  " . $view_slides;
247
            $sql .= " WHERE id =  " . $record->id;
248
            echo $sql . PHP_EOL;
249
 
250
            $queryMapper->update($sql);
251
        }
252
 
253
 
254
        $output->writeln('Inicio del proceso de Recalculo de las Capsulas');
255
        $records = $progressMapper->fetchAllCapsules();
256
        foreach($records as $record)
257
        {
258
            $total_slides = $slideMapper->fetchTotalCountByCompanyIdAndTopicIdAndCapsuleId($record->company_id, $record->topic_id, $record->capsule_id);
259
            $view_slides = $progressMapper->fetchCountAllSlideCompletedByUserIdAndTopicIdAndCapsuleId($record->user_id, $record->topic_id, $record->capsule_id);
260
 
261
            $record->total_slides = $total_slides;
262
            $record->view_slides = $view_slides;
263
            $record->progress = $total_slides > 0 ? (($view_slides * 100) / $total_slides) : 0;
264
 
265
 
266
            $sql  = " UPDATE  " . CompanyMicrolearningUserProgressMapper::_TABLE;
267
            $sql .= " SET progress =  " . $record->progress;
268
            $sql .= " , total_slides =  " . $total_slides;
269
            $sql .= " , view_slides  =  " . $view_slides;
270
            $sql .= " WHERE id =  " . $record->id;
271
            echo $sql . PHP_EOL;
272
 
273
            $queryMapper->update($sql);
274
 
275
            //$progressMapper->update($record);
276
        }
277
 
278
 
279
        $output->writeln('Fin del proceso de Recalculo');
280
 
281
        return 0;
282
    }
283
 
284
 
285
 
286
}