TagOrderCommand.php 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace Muzich\CoreBundle\Command;
  3. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  4. use Symfony\Component\Console\Input\InputArgument;
  5. use Symfony\Component\Console\Input\InputInterface;
  6. use Symfony\Component\Console\Input\InputOption;
  7. use Symfony\Component\Console\Output\OutputInterface;
  8. use Muzich\CoreBundle\Entity\User;
  9. use Muzich\CoreBundle\Searcher\ElementSearcher;
  10. use Muzich\CoreBundle\lib\Tag as TagLib;
  11. class TagOrderCommand extends ContainerAwareCommand
  12. {
  13. protected function configure()
  14. {
  15. $this
  16. ->setName('tagengine:order')
  17. ->setDescription('Ordonne la liste des tags sur les pages utilisateurs')
  18. ->addOption('force', null, InputOption::VALUE_NONE, 'Forcer les opérations sur tous les utilisateurs')
  19. ;
  20. }
  21. protected function execute(InputInterface $input, OutputInterface $output)
  22. {
  23. $doctrine = $this->getContainer()->get('doctrine');
  24. $em = $doctrine->getEntityManager();
  25. $tag_lib = new TagLib();
  26. $output->writeln('#');
  27. $output->writeln('## Script d\'ordonance des listes de tags sur les pages'
  28. .' utilisateurs ##');
  29. $output->writeln('#');
  30. // Premier point on récupère les utilisateurs qui ont mis a jour leurs
  31. // favoris
  32. $output->writeln('<info>Gestion de l\'ordre des tags sur les pages de '
  33. .'partages favoris</info>');
  34. if ($input->getOption('force'))
  35. {
  36. $users = $em->createQuery("SELECT u FROM MuzichCoreBundle:User u")
  37. ->getResult()
  38. ;
  39. }
  40. else
  41. {
  42. $users = $em->createQuery(
  43. "SELECT u FROM MuzichCoreBundle:User u"
  44. . " WHERE u.datas LIKE :favupd"
  45. )->setParameter('favupd', '%"'.User::DATA_FAV_UPDATED.'":true%')
  46. ->getResult()
  47. ;
  48. }
  49. if (count($users))
  50. {
  51. $output->writeln('<info>Traitement de '.count($users).' utilisateurs</info>');
  52. foreach ($users as $user)
  53. {
  54. // On récupère ses éléments favoris
  55. $search_object = new ElementSearcher();
  56. $search_object->init(array(
  57. 'user_id' => $user->getId(),
  58. 'favorite' => true
  59. ));
  60. $elements_favorite = $search_object->getElements($doctrine, $user->getId());
  61. // On récupère la nouvelle liste de tags ordonnés
  62. $tags_ordered = $tag_lib->getOrderedTagsWithElements($elements_favorite);
  63. // On enregistre ça en base
  64. $user->setData(User::DATA_TAGS_ORDER_PAGE_FAV, $tags_ordered);
  65. $user->setData(User::DATA_FAV_UPDATED, false);
  66. $em->persist($user);
  67. $em->flush();
  68. }
  69. }
  70. else
  71. {
  72. $output->writeln('<info>Aucun utilisateur a traiter</info>');
  73. }
  74. // Deuxième point on récupère les utilisateurs qui ont mis a jour leurs
  75. // diffusion
  76. $output->writeln('<info>Gestion de l\'ordre des tags sur les diffusions</info>');
  77. if ($input->getOption('force'))
  78. {
  79. $users = $em->createQuery("SELECT u FROM MuzichCoreBundle:User u")
  80. ->getResult()
  81. ;
  82. }
  83. else
  84. {
  85. $users = $em->createQuery(
  86. "SELECT u FROM MuzichCoreBundle:User u"
  87. . " WHERE u.datas LIKE :favupd"
  88. )->setParameter('favupd', '%"'.User::DATA_DIFF_UPDATED.'":true%')
  89. ->getResult()
  90. ;
  91. }
  92. if (count($users))
  93. {
  94. $output->writeln('<info>Traitement de '.count($users).' utilisateurs</info>');
  95. foreach ($users as $user)
  96. {
  97. // On récupère ses éléments diffusés
  98. $search_object = new ElementSearcher();
  99. $search_object->init(array(
  100. 'user_id' => $user->getId()
  101. ));
  102. $elements_diffused = $search_object->getElements($doctrine, $user->getId());
  103. // On récupère la nouvelle liste de tags ordonnés
  104. $tags_ordered = $tag_lib->getOrderedTagsWithElements($elements_diffused);
  105. // On enregistre ça en base
  106. $user->setData(User::DATA_TAGS_ORDER_DIFF, $tags_ordered);
  107. $user->setData(User::DATA_DIFF_UPDATED, false);
  108. $em->persist($user);
  109. $em->flush();
  110. }
  111. }
  112. else
  113. {
  114. $output->writeln('<info>Aucun utilisateur a traiter</info>');
  115. }
  116. $output->writeln('<info>Terminé !</info>');
  117. }
  118. }