Entity/DocumentRepository.php
author ymh <ymh.work@gmail.com>
Mon, 07 Nov 2011 17:25:39 +0100
changeset 29 7496254cfead
parent 27 8551d844b4f3
child 30 d2fba1e3b94b
permissions -rwxr-xr-x
correct add tag
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
namespace IRI\Bundle\WikiTagBundle\Entity;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
use Doctrine\ORM\EntityRepository;
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
     6
use IRI\Bundle\WikiTagBundle\Entity\Document;
29
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
     7
use Doctrine\ORM\Query\ResultSetMapping;
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
     8
use \ReflectionClass;
2
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
/**
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * DocumentRepository
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 *
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * This class was generated by the Doctrine ORM. Add your own custom
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * repository methods below.
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
class DocumentRepository extends EntityRepository
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
{
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    18
    /**
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    19
     *
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    20
     * TODO : Enter description here ...
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    21
     * @var ReflectionClass
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    22
     */
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    23
    private $reflection_class;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    24
    private $reflection_doc_class;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    25
    private $set_methods = array();
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    26
    private $get_methods = array();
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    27
    
5
45378793512a Correct tag insert + external id on doc
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    28
    function findOneByExternalId($external_id)
45378793512a Correct tag insert + external id on doc
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    29
    {
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    30
        return $this->findOneBy(array("externalId" => $external_id));
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    31
    }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    32
    
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    33
    private function reflectionSetField($object, $method_name, $value)
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    34
    {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    35
        if(isset($this->set_methods[$method_name]))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    36
        {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    37
            $set_method = $this->set_methods[$method_name];
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    38
        }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    39
        
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    40
        if(!isset($set_method) || is_null($set_method))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    41
        {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    42
            if(is_null($this->reflection_doc_class))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    43
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    44
                $this->reflection_doc_class = new ReflectionClass(get_class($object));
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    45
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    46
            
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    47
            $set_method = NULL;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    48
            if($this->reflection_doc_class->hasMethod($method_name))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    49
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    50
                $set_method = $this->reflection_doc_class->getMethod($method_name);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    51
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    52
            if(!is_null($set_method))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    53
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    54
                $this->set_methods[$method_name]=$set_method;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    55
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    56
        }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    57
        
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    58
        if(!isset($set_method) || is_null($set_method) || !$set_method->isPublic())
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    59
        {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    60
            throw new \Exception("setter method unknown $method_name");
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    61
        }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    62
        
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    63
        //set value
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    64
        $set_method->invoke($object, $value);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    65
        
5
45378793512a Correct tag insert + external id on doc
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    66
    }
3
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
    67
    
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    68
    private function reflectionGetField($document, $accessor)
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    69
    {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    70
        
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    71
        if(!isset($this->get_methods[$accessor]) ||  is_null($this->get_methods[$accessor]))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    72
        {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    73
            if(is_null($this->reflection_class))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    74
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    75
                $this->reflection_class = new \ReflectionClass(get_class($document));
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    76
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    77
            
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    78
            //look at properties
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    79
            if($this->reflection_class->hasProperty($accessor))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    80
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    81
                $get_object = $this->reflection_class->getProperty($accessor);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    82
                if(!$get_object->isPublic())
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    83
                {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    84
                    $get_object = NULL;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    85
                }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    86
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    87
            
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    88
            if((!isset($get_object) || is_null($get_object)) && $this->reflection_class->hasMethod($accessor))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    89
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    90
                $get_object = $this->reflection_class->getMethod($accessor);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    91
                if(!$get_object->isPublic())
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    92
                {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    93
                    $get_object = NULL;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    94
                }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    95
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    96
            
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    97
            if((!isset($get_object) || is_null($get_object)) && $this->reflection_class->hasMethod("get".ucfirst($accessor)))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    98
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    99
                $get_object = $this->reflection_class->getMethod("get".ucfirst($accessor));
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   100
                if(!$get_object->isPublic())
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   101
                {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   102
                    $get_object = NULL;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   103
                }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   104
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   105
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   106
            if(isset($get_object) && !is_null($get_object))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   107
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   108
                $this->get_methods[$accessor] = $get_object;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   109
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   110
        }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   111
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   112
        if(isset($this->get_methods[$accessor]))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   113
        {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   114
            $get_object = $this->get_methods[$accessor];
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   115
            if(!is_null($get_object))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   116
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   117
                if(is_a($get_object,"\ReflectionMethod"))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   118
                {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   119
                    return $get_object->invoke($document);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   120
                }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   121
                elseif(is_a($get_object,"\ReflectionProperty"))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   122
                {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   123
                    return $get_object->getValue($document);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   124
                }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   125
                else
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   126
                {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   127
                    //TODO : custom exception
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   128
                    throw new \Exception("Bad reflection object type");
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   129
                }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   130
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   131
        }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   132
        
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   133
        //TODO: replace by custom exception
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   134
        throw new \Exception("Unknown accessor $accessor");
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   135
    }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   136
    
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   137
    function writeDocument($document,  $document_id_column, $fields)
3
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   138
    {
23
b435f8055cb4 improve dynamic docs. create and lad class dynamically
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   139
        // get document from id
b435f8055cb4 improve dynamic docs. create and lad class dynamically
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   140
         
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   141
        $docid = $this->reflectionGetField($document, $document_id_column);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   142
        $baseDocument = $this->findOneByExternalId($docid);
3
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   143
    
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   144
        if(is_null($baseDocument))
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   145
        {
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   146
            $baseDocument = new Document();
23
b435f8055cb4 improve dynamic docs. create and lad class dynamically
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   147
            $baseDocument->setExternalId($document);
3
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   148
        }
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   149
        
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   150
        foreach ($fields as $name => $field_def) {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   151
            if(isset($field_def['accessor']))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   152
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   153
                $accessor = $field_def['accessor'];
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   154
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   155
            else
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   156
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   157
                $accessor = NULL;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   158
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   159
            if(is_null($accessor))
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   160
            {
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   161
                $accessor = $name;
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   162
            }
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   163
            
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   164
            $value = strval($this->reflectionGetField($document,$accessor));
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   165
            
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   166
            $method_name = "set".ucfirst($name);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   167
            
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   168
            $this->reflectionSetField($baseDocument, $method_name, $value);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   169
            
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   170
        }
3
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   171
        
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   172
        $this->getEntityManager()->persist($baseDocument);
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   173
        $this->getEntityManager()->flush();
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   174
        return $baseDocument;
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   175
    
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   176
    }
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   177
    
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   178
    function removeDocument($document, $document_id_column)
3
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   179
    {
18
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   180
        $docid = $this->reflectionGetField($document, $document_id_column);
6f16b9fd6a17 finish dynamic save
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   181
        $baseDocument = $this->findOneByExternalId($docid);
5
45378793512a Correct tag insert + external id on doc
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   182
        if(!is_null($baseDocument))
45378793512a Correct tag insert + external id on doc
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   183
        {
3
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   184
            $this->getEntityManager()->remove($baseDocument);
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   185
        }
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   186
    }
976d922e52f0 link document lifecycle
ymh <ymh.work@gmail.com>
parents: 2
diff changeset
   187
    
27
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   188
    function getTagsStr($document)
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   189
    {
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   190
        $em = $this->getEntityManager();
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   191
        $query = $em->createQuery("SELECT t.label FROM WikiTagBundle:DocumentTag dt JOIN dt.tag t WHERE dt.document = :docid");
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   192
        $query = $query->setParameter("docid", $document);
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   193
        $result = $query->getScalarResult();
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   194
        $tagstr = array();
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   195
        foreach ($result as $res) {
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   196
            $tagstr[] = $res['label'];
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   197
        }
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   198
        return $tagstr;
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   199
    }
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   200
    
23
b435f8055cb4 improve dynamic docs. create and lad class dynamically
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   201
    function updateTagsStr($document)
b435f8055cb4 improve dynamic docs. create and lad class dynamically
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   202
    {
27
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   203
        
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   204
        $tagstr = $this->getTagsStr($document);
23
b435f8055cb4 improve dynamic docs. create and lad class dynamically
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   205
        
27
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   206
        $document->setTagsStr(implode(",",$tagstr));
8551d844b4f3 Correct memory problem
ymh <ymh.work@gmail.com>
parents: 23
diff changeset
   207
        $this->getEntityManager()->persist($document);
23
b435f8055cb4 improve dynamic docs. create and lad class dynamically
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   208
    }
29
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   209
    
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   210
    /**
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   211
     *
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   212
     * Enter description here ...
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   213
     * @param array $values : key: the fields to search into, value array('value'=>value, 'weight'=>weight)
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   214
     * @param unknown_type $conditions
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   215
     */
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   216
    function search(array $values, array $conditions=NULL)
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   217
    {
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   218
/*        $em = $this->getEntityManager();
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   219
        
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   220
        $rsm = new ResultSetMapping();
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   221
        $rsm->addEntityResult("IRI/Bundle/WikiTagBundle/Entity/Document", "d");
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   222
        $rsm->addFieldResult("d", "id", "id");
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   223
        $rsm->addFieldResult("d", "external_id", "externalId");
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   224
        $rsm->addScalarResult("d", "score");
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   225
        
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   226
        $score = "";
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   227
        foreach ($values as $fielddef) {
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   228
            
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   229
            $columns = $fielddef["columns"];
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   230
            $value = $fielddef["value"];
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   231
            $value = isset($fielddef["weight"])?$fielddef["weight"]:1.0;
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   232
            
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   233
            $score = "(MATCH($columns) AGAINST (:value))*:weight";
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   234
            $parameters[] =
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   235
        }
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   236
        
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   237
        
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   238
        $query = $em->createNativeQuery("SELECT d.id, d.external_id, MATCH(title) AGAINST('$value') FROM wikitag_document d WHERE MATCH(title) AGAINST('$value') > 0", $rsm);
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   239
        
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   240
        $res = $query->getScalarResult();
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   241
        
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   242
        return $res;*/
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   243
        
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   244
        
7496254cfead correct add tag
ymh <ymh.work@gmail.com>
parents: 27
diff changeset
   245
    }
23
b435f8055cb4 improve dynamic docs. create and lad class dynamically
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   246
        
2
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
}