From b06abebda261ebecd52c6c32e762ccf14e24cdbf Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Tue, 1 May 2012 21:48:35 +0200 Subject: [PATCH] index pastes when they change/get created --- src/phorkie/Database.php | 2 +- src/phorkie/Indexer/Elasticsearch.php | 79 +++++++++++++++++++++++++++ src/phorkie/Repository/Post.php | 26 +++++++-- 3 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 src/phorkie/Indexer/Elasticsearch.php diff --git a/src/phorkie/Database.php b/src/phorkie/Database.php index add38be..9df6d8c 100644 --- a/src/phorkie/Database.php +++ b/src/phorkie/Database.php @@ -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 index 0000000..c2fcfcc --- /dev/null +++ b/src/phorkie/Indexer/Elasticsearch.php @@ -0,0 +1,79 @@ +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(); + } + +} + +?> diff --git a/src/phorkie/Repository/Post.php b/src/phorkie/Repository/Post.php index fa356ee..633fb27 100644 --- a/src/phorkie/Repository/Post.php +++ b/src/phorkie/Repository/Post.php @@ -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 ') ->execute(); + $bChanged = true; + } + + if ($bChanged) { + //FIXME: index changed files only + //also handle file deletions + $db = new Database(); + $db->getIndexer()->updateRepo($this->repo); } return true; -- 2.30.2