Command/LoadFixturesCommand.php
author ymh <ymh.work@gmail.com>
Fri, 26 Sep 2014 10:04:40 +0200
changeset 136 f209fcb0df6c
parent 85 3c9f71c01d51
permissions -rwxr-xr-x
Added tag V00.18 for changeset ab728cb3632c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
83
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     1
<?php
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     2
/*
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     3
 * This file is part of the WikiTagBundle package.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     4
 *
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     5
 * (c) IRI <http://www.iri.centrepompidou.fr/>
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     6
 *
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     7
 * For the full copyright and license information, please view the LICENSE
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     8
 * file that was distributed with this source code.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
     9
 */
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    10
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    11
namespace IRI\Bundle\WikiTagBundle\Command;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    12
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    13
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    14
use IRI\Bundle\WikiTagBundle\Entity\DocumentTag;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    15
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    16
use IRI\Bundle\WikiTagBundle\Entity\Tag;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    17
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    18
use IRI\Bundle\WikiTagBundle\Entity\Category;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    19
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    20
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    21
use Symfony\Component\Console\Input\InputArgument;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    22
use Symfony\Component\Console\Input\InputInterface;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    23
use Symfony\Component\Console\Input\InputOption;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    24
use Symfony\Component\Console\Output\OutputInterface;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    25
use Mandango\Mondator\Definition\Definition;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    26
use Mandango\Mondator\Definition\Property;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    27
use Mandango\Mondator\Definition\Method;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    28
use Mandango\Mondator\Dumper;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    29
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    30
/**
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    31
 *
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    32
 * This class implements a command to load categories, tags, and document_tags fixtures from a yaml file.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    33
 *
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    34
 * @author ymh
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    35
 * @author tc
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    36
 *
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    37
 */
85
3c9f71c01d51 rename command
ymh <ymh.work@gmail.com>
parents: 83
diff changeset
    38
class LoadFixturesCommand extends ProgressContainerAwareCommand
83
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    39
{
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    40
    protected function configure()
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    41
    {
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    42
        parent::configure();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    43
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    44
        $this
85
3c9f71c01d51 rename command
ymh <ymh.work@gmail.com>
parents: 83
diff changeset
    45
            ->setName('wikitag:load-fixtures')
83
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    46
            ->setDescription('Load categories, tags, document_tags in JSON format. We suppose SyncDocuments command was executed.')
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    47
            ->addArgument('path', InputArgument::REQUIRED, 'path to the yaml file.')
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    48
            ->addOption("simulate","S",InputOption::VALUE_NONE, "Load and parse file, create objects but does not save them")
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    49
            ->addOption("categories","C",InputOption::VALUE_NONE, "Will save the categories and not the tags/doctags if options are not set (useful to avoid memory problems)")
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    50
            ->addOption("tags","T",InputOption::VALUE_NONE, "Will save the tags and not the categories/doctags if options are not set (useful to avoid memory problems)")
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    51
            ->addOption("doctags","D",InputOption::VALUE_NONE, "Will save the document_tags and not the categories/tags if options are not set (useful to avoid memory problems)")
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    52
            ->addOption("ibegin","B",InputOption::VALUE_OPTIONAL, "Iteration begin, to save part of the datas (useful to avoid memory problems)")
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    53
            ->addOption("iend","E",InputOption::VALUE_OPTIONAL, "Iteration end, to save part of the datas (useful to avoid memory problems)");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    54
    }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    55
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    56
    protected function execute(InputInterface $input, OutputInterface $output)
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    57
    {
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    58
        // Default values
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    59
        $do_cat = FALSE;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    60
        $do_tags = FALSE;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    61
        $do_doctags = FALSE;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    62
        // Get options
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    63
        $file_path = $input->getArgument('path');
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    64
        $simulate = $input->getOption('simulate');
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    65
        $do_cat = $input->getOption('categories');
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    66
        $do_tags = $input->getOption('tags');
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    67
        $do_doctags = $input->getOption('doctags');
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    68
        // If no options were set, we load the 3 objects
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    69
        if(!$do_cat && !$do_tags && !$do_doctags){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    70
            $do_cat = TRUE;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    71
            $do_tags = TRUE;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    72
            $do_doctags = TRUE;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    73
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    74
        // Set iBegin and iEnd
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    75
        $iBegin = intval($input->getOption('ibegin'));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    76
        $iEnd = intval($input->getOption('iend'));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    77
        if($iEnd==0){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    78
            $iEnd = INF;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    79
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    80
        $output->writeln("simulate = ".((!$simulate)?"false":"true").", file path = $file_path"
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    81
                        .", load cat = ".(($do_cat)?"true":"false").", load tags = ".(($do_tags)?"true":"false")
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    82
                        .", load doc_tags = ".(($do_doctags)?"true":"false").", ibegin = ".$iBegin.", iend = ".$iEnd.", min = ".min(10, $iEnd));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    83
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    84
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    85
        // Parse json file and build the data array.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    86
        $value = NULL;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    87
        try {
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    88
            $content = file_get_contents($file_path);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    89
            $value = json_decode($content, TRUE);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    90
        } catch (Exception $e) {
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    91
            printf("Unable to parse the JSON string: %s", $e->getMessage());
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    92
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    93
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    94
        // We build the 3 data arrays.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    95
        $categories = array();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    96
        $tags = array();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    97
        $doctags = array();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    98
        foreach ($value as $ar){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
    99
            if($ar["model"]=="hdabo.tagcategory"){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   100
                array_push($categories,$ar);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   101
            }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   102
            else if($ar["model"]=="hdabo.tag"){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   103
                array_push($tags,$ar);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   104
            }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   105
            else if($ar["model"]=="hdabo.taggedsheet"){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   106
                array_push($doctags,$ar);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   107
            }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   108
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   109
        $content = NULL;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   110
        $value = NULL;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   111
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   112
        // Get the entity manager
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   113
        $em = $this->getContainer()->get('doctrine')->getEntityManager();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   114
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   115
        if($do_cat){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   116
            // We save the categories, and force their id to be coherent with the tag's data.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   117
            $nb = count($categories);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   118
            if($nb>0){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   119
                $output->writeln("Saving $nb categories...");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   120
                $i = 0;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   121
                foreach ($categories as $cat_ar){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   122
                    $cat = new Category();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   123
                    $cat->setId($cat_ar["pk"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   124
                    $f = $cat_ar["fields"];
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   125
                    $cat->setLabel($f["label"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   126
                    if(!$simulate){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   127
                        $em->persist($cat);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   128
                        // Temporary stop doctrine2 auto increment
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   129
                        $metadata = $em->getClassMetaData(get_class($cat));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   130
                        $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   131
                    }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   132
                    $i++;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   133
                    $this->showProgress($output, $i, $nb, "label : ".$f["label"], 50);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   134
                }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   135
                // We flush here because we need to call the category object when we save the tag's datas.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   136
                if(!$simulate){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   137
                    $em->flush();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   138
                    $em->clear();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   139
                    $output->writeln("Categories have been saved");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   140
                }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   141
            }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   142
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   143
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   144
        if($do_tags){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   145
            $nb = count($tags);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   146
            if($nb>0){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   147
                $output->writeln("Saving $nb tags...");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   148
                $cat_repo = $this->getContainer()->get('doctrine')->getRepository('WikiTagBundle:Category');
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   149
                $stop = min($iEnd+1,$nb);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   150
                $output->writeln("Saving from $iBegin to ".($stop-1)." on $nb tags...");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   151
                $nbToSave = $stop - $iBegin;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   152
                for($i=$iBegin;$i<$stop;$i++){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   153
                    $tag = new Tag();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   154
                    $tag->setId($tags[$i]["pk"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   155
                    $f = $tags[$i]["fields"];
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   156
                    $tag->setLabel($f["label"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   157
                    $tag->setNormalizedLabel($f["normalized_label"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   158
                    $tag->setOriginalLabel($f["original_label"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   159
                    $tag->setAlternativeLabel($f["alternative_label"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   160
                    $tag->setAlias($f["alias"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   161
                    $tag->setWikipediaUrl($f["wikipedia_url"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   162
                    $tag->setAlternativeWikipediaUrl($f["alternative_wikipedia_url"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   163
                    $tag->setWikipediaPageId($f["wikipedia_pageid"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   164
                    $tag->setAlternativeWikipediaPageId($f["alternative_wikipedia_pageid"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   165
                    $tag->setUrlStatus($f["url_status"]); // smallint
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   166
                    $tag->setDbpediaUri($f["dbpedia_uri"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   167
                    $tag->setPopularity($f["popularity"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   168
                    $cat = $f["category"];
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   169
                    if($cat!=NULL){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   170
                        $tag->setCategory($cat_repo->findOneById($cat)); // !! OBJECT CATEGORY
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   171
                    }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   172
                    $tag->setCreatedAt(new \DateTime($f["created_at"], new \DateTimeZone('UTC')));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   173
                    if(!$simulate){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   174
                        $em->persist($tag);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   175
                        // Temporary stop doctrine2 auto increment
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   176
                        $metadata = $em->getClassMetaData(get_class($tag));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   177
                        $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   178
                    }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   179
                    // We save every 10 tags to avoid symfony's UnitOfWork crash
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   180
                    if((!$simulate) && ($i%10==0)){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   181
                        // We flush here because we need to call the tag object when we save the document_tag's datas.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   182
                        $em->flush();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   183
                        $em->clear();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   184
                        $em = $this->getContainer()->get('doctrine')->getEntityManager();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   185
                    }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   186
                    $memory = "mem: ".strval(memory_get_usage(true));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   187
                    $this->showProgress($output, (($i-$iBegin)+1), $nbToSave, "$memory - label : ".$f["label"], 50);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   188
                }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   189
                // We flush one last time.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   190
                if(!$simulate){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   191
                    $em->flush();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   192
                    $em->clear();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   193
                    $em = $this->getContainer()->get('doctrine')->getEntityManager();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   194
                    $output->writeln("Tags have been saved");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   195
                }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   196
            }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   197
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   198
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   199
        if($do_doctags){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   200
            $categories = NULL;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   201
            $tags = NULL;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   202
            $nb = count($doctags); 
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   203
            if($nb>0){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   204
                $tag_repo = $repository = $this->getContainer()->get('doctrine')->getRepository('WikiTagBundle:Tag');
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   205
                $doc_repo = $repository = $this->getContainer()->get('doctrine')->getRepository('WikiTagBundle:Document');
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   206
                $stop = min($iEnd,$nb);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   207
                $output->writeln("Saving from $iBegin to $stop on $nb document_tags...");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   208
                $nbToSave = $stop - $iBegin;
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   209
                for($i=$iBegin;$i<$stop;$i++){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   210
                    $f = $doctags[$i]["fields"];
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   211
                    $dt = new DocumentTag();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   212
                    $dt->setOriginalOrder($f["original_order"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   213
                    $dt->setTagOrder($f["order"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   214
                    $dt->setIndexNote($f["index_note"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   215
                    $dt->setWikipediaRevisionId($f["wikipedia_revision_id"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   216
                    $dt->setTag($tag_repo->findOneById($f["tag"]));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   217
                    $doc = $doc_repo->findOneByExternalId($f["datasheet"]);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   218
                    // We save if the document exists
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   219
                    if($doc!=NULL){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   220
                        $dt->setDocument($doc);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   221
                        $dt->setCreatedAt(new \DateTime($f["created_at"], new \DateTimeZone('UTC')));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   222
                        if(!$simulate){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   223
                            $em->persist($dt);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   224
                        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   225
                    }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   226
                    else{
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   227
                        $output->writeln("Document with external id ".$f["datasheet"]." was not found !");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   228
                    }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   229
                    // We save every 10 tags to avoid symfony's UnitOfWork crash
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   230
                    if((!$simulate) && ($i%10==0)){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   231
                        // We flush here because we need to call the tag object when we save the document_tag's datas.
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   232
                        $em->flush();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   233
                        $em->clear();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   234
                        $em = $this->getContainer()->get('doctrine')->getEntityManager();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   235
                    }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   236
                    $memory = "mem: ".strval(memory_get_usage(true));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   237
                    $this->showProgress($output, (($i-$iBegin)+1), $nbToSave, $memory, 50);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   238
                }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   239
                if(!$simulate){
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   240
                    $em->flush();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   241
                    $em->clear();
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   242
                    $output->writeln("DocumentTags have been saved");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   243
                }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   244
            }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   245
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   246
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   247
        
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   248
        if($simulate)
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   249
        {
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   250
            $output->writeln("you simulated.");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   251
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   252
        else
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   253
        {
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   254
            //$output->writeln("file $file_path loaded.");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   255
            //$output->writeln(var_dump($value));
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   256
            //$output->writeln("s = ".$s);
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   257
            $output->writeln("End of fixture loading");
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   258
        }
e9f04298bdfa add json fixtures load for wikitag
cavaliet
parents:
diff changeset
   259
    }
85
3c9f71c01d51 rename command
ymh <ymh.work@gmail.com>
parents: 83
diff changeset
   260
}