index pastes when they change/get created
[phorkie.git] / src / phorkie / Indexer / Elasticsearch.php
diff --git a/src/phorkie/Indexer/Elasticsearch.php b/src/phorkie/Indexer/Elasticsearch.php
new file mode 100644 (file)
index 0000000..c2fcfcc
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+namespace phorkie;
+
+class Indexer_Elasticsearch
+{
+    public function __construct()
+    {
+        $this->searchInstance = $GLOBALS['phorkie']['cfg']['elasticsearch'];
+    }
+
+
+    public function addRepo(Repository $repo)
+    {
+        $this->updateRepo($repo);
+    }
+
+    public function updateRepo(Repository $repo)
+    {
+        //add repository
+        $r = new \HTTP_Request2(
+            $this->searchInstance . 'repo/' . $repo->id,
+            \HTTP_Request2::METHOD_PUT
+        );
+        $r->setBody(
+            json_encode(
+                (object)array(
+                    'id' => $repo->id,
+                    'description' => $repo->getDescription(),
+                )
+            )
+        );
+        $r->send();
+
+        //add files
+        foreach ($repo->getFiles() as $file) {
+            $r = new \HTTP_Request2(
+                $this->searchInstance . 'file/?parent=' . $repo->id,
+                \HTTP_Request2::METHOD_POST
+            );
+            $r->setBody(
+                json_encode(
+                    (object)array(
+                        'name'      => $file->getFilename(),
+                        'extension' => $file->getExt(),
+                        'content'   => $file->isText() ? $file->getContent() : '',
+                    )
+                )
+            );
+            $r->send();
+        }
+    }
+
+    public function deleteRepo(Repository $repo)
+    {
+        //delete repository from index
+        $r = new \HTTP_Request2(
+            $this->searchInstance . 'repo/' . $repo->id,
+            \HTTP_Request2::METHOD_DELETE
+        );
+        $r->send();
+
+        //delete files of that repository
+        $r = new \HTTP_Request2(
+            $this->searchInstance . 'file/_query',
+            \HTTP_Request2::METHOD_DELETE
+        );
+        $r->setBody(
+            json_encode(
+                (object)array(
+                    '_parent' => 'repo#' . $repo->id
+                )
+            )
+        );
+        $r->send();
+    }
+
+}
+
+?>