Rev 383 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
declare(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;
}
}
}