Rev 383 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types = 1);namespace LeadersLinked\Command;use Symfony\Component\Console\Command\Command;use Symfony\Component\Console\Input\InputInterface;// use Symfony\Component\Console\Input\InputOption;use Symfony\Component\Console\Output\OutputInterface;use Laminas\Db\Adapter\AdapterInterface;use Laminas\Log\LoggerInterface;use LeadersLinked\Mapper\EmailMapper;use PHPMailer\PHPMailer\PHPMailer;use LeadersLinked\Model\Email;use Laminas\Mvc\I18n\Translator;use LeadersLinked\Cache\CacheInterface;class ProcessScheduledContentCommand extends Command{/**** @var \Laminas\Db\Adapter\AdapterInterface*/private $adapter;/**** @var \LeadersLinked\Cache\CacheInterface*/private $cache;/**** @var \Laminas\Log\LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @var \Laminas\Mvc\I18n\Translator*/private $translator;/**** @param \Laminas\Db\Adapter\AdapterInterface $adapter* @param \LeadersLinked\Cache\CacheInterface $cache* @param* \Laminas\Log\LoggerInterface* @param array $config* @param \Laminas\Mvc\I18n\Translator $translator*/public function __construct($adapter, $cache, $logger, $config, $translator){$this->adapter = $adapter;$this->cache = $cache;$this->logger = $logger;$this->config = $config;$this->translator = $translator;parent::__construct();}protected function configure(): void{$this->setName('leaderslinked:process-scheduled-content')->setDescription('Procesa y libera el contenido programado de hábitos y habilidades')->setHelp('Este comando verifica y procesa los hábitos programados para el día actual');}protected function execute(InputInterface $input, OutputInterface $output): int{$output->writeln('Iniciando proceso de liberación de contenido programado...');try {// Obtener el día de la semana actual (1 = lunes, 7 = domingo)$currentDayNumber = (int)date('N');$currentTime = date('H:i:s');// Mapear el número del día a la columna correspondiente$dayColumns = [1 => ['active' => 'monday_active', 'time' => 'monday_time'],2 => ['active' => 'tuesday_active', 'time' => 'tuesday_time'],3 => ['active' => 'wednesday_active', 'time' => 'wednesday_time'],4 => ['active' => 'thursday_active', 'time' => 'thursday_time'],5 => ['active' => 'friday_active', 'time' => 'friday_time'],6 => ['active' => 'saturday_active', 'time' => 'saturday_time'],7 => ['active' => 'sunday_active', 'time' => 'sunday_time']];$currentDayColumns = $dayColumns[$currentDayNumber];// Obtener el mapper de hábitos$habitSkillMapper = \LeadersLinked\Mapper\HabitSkillMapper::getInstance($this->adapter);// Construir la consulta para obtener hábitos programados para hoy$select = $habitSkillMapper->getSql()->select(HabitSkillMapper::_TABLE);$select->where([$currentDayColumns['active'] => 1,$currentDayColumns['time'] . ' <= ?' => $currentTime]);$habits = $habitSkillMapper->executeFetchAllObject($select, new \LeadersLinked\Model\HabitSkill());$processedCount = 0;foreach ($habits as $habit) {try {// Crear un registro para el hábito$register = new \LeadersLinked\Model\HabitSkillRegister();$register->network_id = $habit->network_id;$register->user_id = $habit->user_id;$register->skill_id = $habit->id;$register->date = date('Y-m-d');$register->uuid = uniqid();// Registrar el hábito$registerMapper = \LeadersLinked\Mapper\HabitSkillRegisterMapper::getInstance($this->adapter);if ($registerMapper->insert($register)) {$processedCount++;$this->logger->info(sprintf('Hábito procesado: %s (Usuario: %d)', $habit->name, $habit->user_id),['habit_id' => $habit->id]);}} catch (\Exception $e) {$this->logger->error(sprintf('Error procesando hábito %d: %s', $habit->id, $e->getMessage()),['exception' => $e]);}}$output->writeln(sprintf('Se procesaron %d hábitos programados', $processedCount));$output->writeln('Proceso de liberación de contenido programado completado con éxito');return Command::SUCCESS;} catch (\Exception $e) {$this->logger->error('Error en el proceso de contenido programado: ' . $e->getMessage());$output->writeln('<error>Error: ' . $e->getMessage() . '</error>');return Command::FAILURE;}}}