Advertisement
Guest User

Untitled

a guest
Sep 30th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.13 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Metal\CompaniesBundle\Command;
  4.  
  5. use Doctrine\DBAL\Connection;
  6. use Metal\CompaniesBundle\Helper\DefaultHelper;
  7. use Metal\ProjectBundle\Helper\TextHelper;
  8. use Metal\ProjectBundle\Repository\SiteRepository;
  9. use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
  10. use Symfony\Component\Console\Input\InputInterface;
  11. use Symfony\Component\Console\Input\InputOption;
  12. use Symfony\Component\Console\Output\OutputInterface;
  13.  
  14. class GenerateSlugsCommand extends  ContainerAwareCommand
  15. {
  16.     protected function configure()
  17.     {
  18.         $this->setName('metal:companies:generate-slugs');
  19.         $this->addOption('truncate', null, InputOption::VALUE_NONE);
  20.     }
  21.  
  22.     protected function execute(InputInterface $input, OutputInterface $output)
  23.     {
  24.         $output->writeln(sprintf('%s: Start command "%s"', date('d.m.Y H:i:s'), $this->getName()));
  25.         $textHelper = $this->getContainer()->get('brouzie.helper_factory')->get('MetalProjectBundle:Text');
  26.         /* @var $textHelper TextHelper */
  27.  
  28.         $companiesHelper = $this->getContainer()->get('brouzie.helper_factory')->get('MetalCompaniesBundle');
  29.         /* @var $companiesHelper DefaultHelper */
  30.  
  31.         $em = $this->getContainer()->get('doctrine');
  32.         $siteRepository =  $em->getRepository('MetalProjectBundle:Site');
  33.         /* @var $siteRepository SiteRepository */
  34.  
  35.         $siteRepository->disableLogging();
  36.         $i = 0;
  37.         $conn = $em->getConnection();
  38.         /* @var $conn Connection  */
  39.         $conn->getConfiguration()->setSQLLogger(null);
  40.  
  41.         if ($input->getOption('truncate')) {
  42.             $conn->executeQuery('UPDATE Message75 SET slug = null');
  43.         }
  44.  
  45.         $lastId = $conn->fetchColumn('SELECT MAX(Message_ID) FROM Message75');
  46.         $companies = $conn->fetchAll('
  47.          SELECT c.Message_ID, c.Keyword, cr.Keyword as city_slug, c.title as title, cc.base_host as host
  48.          FROM Message75 c
  49.          JOIN Classificator_Country cc ON c.country_id = cc.Country_ID
  50.          JOIN Classificator_Region cr on c.company_city = cr.Region_ID
  51.          WHERE c.slug IS NULL OR c.slug = c.Message_ID OR c.slug = ""
  52.          ORDER BY c.Message_ID'
  53.         );
  54.  
  55.         foreach ($companies as $company) {
  56.             $i++;
  57.             $companyId = $company['Message_ID'];
  58.  
  59.             if (!empty($company['Keyword']) && strlen($company['Keyword']) <= 15 && !is_numeric($company['Keyword'])) {
  60.                 $baseSlug = $textHelper->slugifyCompanyTitle($company['Keyword']);
  61.             } else {
  62.                 $baseSlug = $textHelper->slugifyCompanyTitle($company['title']);
  63.             }
  64.             $slug = $baseSlug;
  65.             $available = $companiesHelper->isSlugAvailable($slug);
  66.  
  67.             if (!$available && !empty($company['city_slug'])) {
  68.                 $slug = $baseSlug.'-'.$company['city_slug'];
  69.             }
  70.             $available = $companiesHelper->isSlugAvailable($slug);
  71.  
  72.             if (!$available) {
  73.                 $slug = $baseSlug.'-'.$companyId;
  74.             }
  75.  
  76.             $conn->executeUpdate('UPDATE Message75 SET slug = :slug WHERE Message_ID = :id',
  77.                 array(
  78.                     'slug' => $slug,
  79.                     'id' => $companyId
  80.                 )
  81.             );
  82.  
  83.             $output->writeln(sprintf('Generate Slug: %s for company %s', $slug, $companyId));
  84.  
  85.             if ($i % 50 == 0) {
  86.                 $output->writeln($companyId . '/' . $lastId);
  87.             }
  88.         }
  89.  
  90.         $companiesCountBadSlug = $conn->fetchColumn('
  91.          SELECT count(c.Message_ID) AS count
  92.          FROM Message75 c
  93.          WHERE c.slug IS NULL OR c.slug = Message_ID OR c.slug = ""
  94.          '
  95.         );
  96.  
  97.         $output->writeln(sprintf('The number of companies with poor slugs : %s', $companiesCountBadSlug));
  98.  
  99.         $conn->executeUpdate("
  100.            UPDATE Message75 c
  101.            JOIN Classificator_Country cc ON c.country_id = cc.Country_ID
  102.            SET domain = CONCAT(c.slug, '.', cc.base_host)");
  103.  
  104.         $siteRepository->restoreLogging();
  105.         $output->writeln(sprintf('End command %s at %s', $this->getName(), date('Y-m-d H:i')));
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement