index pastes when they change/get created
authorChristian Weiske <cweiske@cweiske.de>
Tue, 1 May 2012 19:48:35 +0000 (21:48 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Tue, 1 May 2012 19:48:35 +0000 (21:48 +0200)
src/phorkie/Database.php
src/phorkie/Indexer/Elasticsearch.php [new file with mode: 0644]
src/phorkie/Repository/Post.php

index add38be452a9008452bae871b22fc31fe3f89a42..9df6d8cb03729b2359941f8f87812bfb7327b8f8 100644 (file)
@@ -10,7 +10,7 @@ class Database
 
     public function getIndexer()
     {
-        //FIXME
+        return new Indexer_Elasticsearch();
     }
 
 }
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();
+    }
+
+}
+
+?>
index fa356ee3cb0fcfa5ac266fc2898fa69e52f8d462..633fb276e08b81740c0ea08535f42d3284666d91 100644 (file)
@@ -26,9 +26,15 @@ class Repository_Post
         }
 
         $vc = $this->repo->getVc();
-        $this->repo->setDescription($postData['description']);
+
 
         $bChanged = false;
+        $bCommit  = false;
+        if ($postData['description'] != $this->repo->getDescription()) {
+            $this->repo->setDescription($postData['description']);
+            $bChanged = true;
+        }
+
         foreach ($postData['files'] as $num => $arFile) {
             $bUpload = false;
             if ($_FILES['files']['error'][$num]['upload'] == 0) {
@@ -74,7 +80,7 @@ class Repository_Post
                         ->addArgument($orignalName)
                         ->addArgument($name)
                         ->execute();
-                    $bChanged = true;
+                    $bCommit = true;
                 } else {
                     $name = $orignalName;
                 }
@@ -85,7 +91,7 @@ class Repository_Post
                 $command = $vc->getCommand('rm')
                     ->addArgument($file->getFilename())
                     ->execute();
-                $bChanged = true;
+                $bCommit = true;
             } else if ($bUpload) {
                 move_uploaded_file(
                     $_FILES['files']['tmp_name'][$num]['upload'], $file->getFullPath()
@@ -93,22 +99,30 @@ class Repository_Post
                 $command = $vc->getCommand('add')
                     ->addArgument($file->getFilename())
                     ->execute();
-                $bChanged = true;
+                $bCommit = true;
             } else if ($bNew || (isset($arFile['content']) && $file->getContent() != $arFile['content'])) {
                 file_put_contents($file->getFullPath(), $arFile['content']);
                 $command = $vc->getCommand('add')
                     ->addArgument($file->getFilename())
                     ->execute();
-                $bChanged = true;
+                $bCommit = true;
             }
         }
 
-        if ($bChanged) {
+        if ($bCommit) {
             $vc->getCommand('commit')
                 ->setOption('message', '')
                 ->setOption('allow-empty-message')
                 ->setOption('author', 'Anonymous <anonymous@phorkie>')
                 ->execute();
+            $bChanged = true;
+        }
+
+        if ($bChanged) {
+            //FIXME: index changed files only
+            //also handle file deletions
+            $db = new Database();
+            $db->getIndexer()->updateRepo($this->repo);
         }
 
         return true;