29212397368bcb3f1fbdc5e0b3972c09cb2f715f
[phorkie.git] / src / phorkie / Indexer / Elasticsearch.php
1 <?php
2 namespace phorkie;
3
4 class Indexer_Elasticsearch
5 {
6     public function __construct()
7     {
8         $this->searchInstance = $GLOBALS['phorkie']['cfg']['elasticsearch'];
9     }
10
11
12     public function addRepo(Repository $repo)
13     {
14         $this->updateRepo($repo);
15     }
16
17     public function updateRepo(Repository $repo)
18     {
19         //add repository
20         $r = new \HTTP_Request2(
21             $this->searchInstance . 'repo/' . $repo->id,
22             \HTTP_Request2::METHOD_PUT
23         );
24         $r->setBody(
25             json_encode(
26                 (object)array(
27                     'id' => $repo->id,
28                     'description' => $repo->getDescription(),
29                 )
30             )
31         );
32         $r->send();
33
34         //add files
35         //clean up before adding files; files might have been deleted
36         $this->deleteRepoFiles($repo);
37
38         foreach ($repo->getFiles() as $file) {
39             $r = new \HTTP_Request2(
40                 $this->searchInstance . 'file/?parent=' . $repo->id,
41                 \HTTP_Request2::METHOD_POST
42             );
43             $r->setBody(
44                 json_encode(
45                     (object)array(
46                         'name'      => $file->getFilename(),
47                         'extension' => $file->getExt(),
48                         'content'   => $file->isText() ? $file->getContent() : '',
49                     )
50                 )
51             );
52             $r->send();
53         }
54     }
55
56     public function deleteRepo(Repository $repo)
57     {
58         //delete repository from index
59         $r = new \HTTP_Request2(
60             $this->searchInstance . 'repo/' . $repo->id,
61             \HTTP_Request2::METHOD_DELETE
62         );
63         $r->send();
64
65         $this->deleteRepoFiles($repo);
66     }
67
68     protected function deleteRepoFiles(Repository $repo)
69     {
70         //delete files of that repository
71         $r = new \HTTP_Request2(
72             $this->searchInstance . 'file/_query',
73             \HTTP_Request2::METHOD_DELETE
74         );
75         $r->setBody(
76             json_encode(
77                 (object)array(
78                     'field' => (object)array(
79                         '_parent' => $repo->id
80                     )
81                 )
82             )
83         );
84         $r->send();
85     }
86
87 }
88
89 ?>