X-Git-Url: https://git.cweiske.de/phorkie.git/blobdiff_plain/b06abebda261ebecd52c6c32e762ccf14e24cdbf..52de444faa10f37c4174e9fe2c75e77484342549:/src/phorkie/Repository/Post.php diff --git a/src/phorkie/Repository/Post.php b/src/phorkie/Repository/Post.php index 633fb27..f94d9ab 100644 --- a/src/phorkie/Repository/Post.php +++ b/src/phorkie/Repository/Post.php @@ -15,11 +15,14 @@ class Repository_Post * * @return boolean True if the post was successful */ - public function process($postData) + public function process($postData, $sessionData) { if (!isset($postData['files'])) { return false; } + if (!$this->hasContent($postData)) { + return false; + } if (!$this->repo) { $this->repo = $this->createRepo(); @@ -48,6 +51,11 @@ class Repository_Post $orignalName = Tools::sanitizeFilename($arFile['original_name']); $name = Tools::sanitizeFilename($arFile['name']); + if ($arFile['type'] == '_auto_') { + //FIXME: upload + $arFile['type'] = $this->getType($arFile['content']); + } + if ($name == '') { if ($bUpload) { $name = Tools::sanitizeFilename($_FILES['files']['name'][$num]['upload']); @@ -109,11 +117,23 @@ class Repository_Post } } + if (isset($sessionData['identity'])) { + $notes = $sessionData['identity']; + } else { + $notes = $sessionData['ipaddr']; + } + if ($bCommit) { $vc->getCommand('commit') ->setOption('message', '') ->setOption('allow-empty-message') - ->setOption('author', 'Anonymous ') + ->setOption('author', $sessionData['name'].' <'.$sessionData['email'].'>') + ->execute(); + //FIXME: git needs ref BEFORE add + //quick hack until http://pear.php.net/bugs/bug.php?id=19605 is fixed + $vc->getCommand('notes --ref=identity add') + ->setOption('force') + ->setOption('message', "$notes") ->execute(); $bChanged = true; } @@ -122,12 +142,29 @@ class Repository_Post //FIXME: index changed files only //also handle file deletions $db = new Database(); - $db->getIndexer()->updateRepo($this->repo); + if ($bNew) { + $db->getIndexer()->addRepo($this->repo); + } else { + $db->getIndexer()->updateRepo($this->repo); + } } return true; } + protected function hasContent($postData) + { + foreach ($postData['files'] as $num => $arFile) { + if ($_FILES['files']['error'][$num]['upload'] == 0) { + return true; + } + if ($arFile['content'] != '') { + return true; + } + } + return false; + } + public function createRepo() { $rs = new Repositories(); @@ -159,6 +196,28 @@ class Repository_Post return $prefix . $num; } + + protected function getType($content) + { + $tmp = tempnam(sys_get_temp_dir(), 'phorkie-autodetect-'); + file_put_contents($tmp, $content); + $type = \MIME_Type_PlainDetect::autoDetect($tmp); + unlink($tmp); + + return $this->findExtForType($type); + } + + protected function findExtForType($type) + { + $ext = 'txt'; + foreach ($GLOBALS['phorkie']['languages'] as $lext => $arLang) { + if ($arLang['mime'] == $type) { + $ext = $lext; + break; + } + } + return $ext; + } } ?>