aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2012-05-01 21:48:35 +0200
committerChristian Weiske <cweiske@cweiske.de>2012-05-01 21:48:35 +0200
commitb06abebda261ebecd52c6c32e762ccf14e24cdbf (patch)
tree7c04f59f39f1655913ffee5cee13a840c6ea1117 /src
parentfce55a36d47a9783e631a78925f2ad1b28dbe555 (diff)
downloadphorkie-b06abebda261ebecd52c6c32e762ccf14e24cdbf.tar.gz
phorkie-b06abebda261ebecd52c6c32e762ccf14e24cdbf.zip
index pastes when they change/get created
Diffstat (limited to 'src')
-rw-r--r--src/phorkie/Database.php2
-rw-r--r--src/phorkie/Indexer/Elasticsearch.php79
-rw-r--r--src/phorkie/Repository/Post.php26
3 files changed, 100 insertions, 7 deletions
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 @@
+<?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();
+ }
+
+}
+
+?>
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 <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;