Proyectos de Subversion LeadersLinked - Services

Rev

Rev 283 | | Comparar con el anterior | Ultima modificación | Ver Log |

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