setName('users:reputation:recalculate') ->setDescription('Recalcul des scores de reputation') ->addOption('user', null, InputOption::VALUE_REQUIRED, 'username du compte a traiter') // ->addArgument('sites', InputArgument::OPTIONAL, 'Liste exhaustive des site a traiter') // ->addOption('yell', null, InputOption::VALUE_NONE, 'If set, the task will yell in uppercase letters') ; } protected function execute(InputInterface $input, OutputInterface $output) { $doctrine = $this->getContainer()->get('doctrine'); $em = $doctrine->getEntityManager(); $output->writeln('#'); $output->writeln('## Script de recalcul des scores de reputation ##'); $output->writeln('#'); $output->writeln('Début du traitement ...'); if (($username = $input->getOption('user'))) { $output->writeln('Utilisateur choisis: '.$username.''); $user = $em->createQuery( "SELECT u FROM MuzichCoreBundle:User u" . " WHERE u.username = :username" )->setParameter('username', $username) ->getResult() ; if (count($user)) { $output->writeln('Utilisateur trouvé'); $users = array($user[0]); } } else { // Sinon on traite tout les utilisateurs $users = $em->createQuery( "SELECT u FROM MuzichCoreBundle:User u" ) ->getResult() ; } // Pour chaque utilisateur a traiter foreach ($users as $user) { $user_points = 0; // On calcule pour les éléments $elements = $em->createQuery( "SELECT e FROM MuzichCoreBundle:Element e" . " WHERE e.owner = :uid" )->setParameter('uid', $user->getId()) ->getResult() ; $coef_element_point = $this->getContainer()->getParameter('reputation_element_point_value'); $element_points = 0; foreach ($elements as $element) { $element_points += $element->getPoints(); } $user->setReputation($element_points * $coef_element_point); $em->persist($user); } $output->writeln('Enregistrement en base ...'); $em->flush(); $output->writeln('Terminé !'); } }