X-Git-Url: https://git.cweiske.de/phorkie.git/blobdiff_plain/cdc99846c94bacdd7a2a0681d77bac3de45c4f2a..39bd200baed00b5b63cc62ce947ef708710ac81c:/src/phorkie/Repository/Post.php diff --git a/src/phorkie/Repository/Post.php b/src/phorkie/Repository/Post.php index 1b60752..96e5c11 100644 --- a/src/phorkie/Repository/Post.php +++ b/src/phorkie/Repository/Post.php @@ -29,8 +29,12 @@ class Repository_Post $this->repo->setDescription($postData['description']); $bChanged = false; - foreach ($postData['files'] as $arFile) { - if ($arFile['content'] == '' && $arFile['name'] == '') { + foreach ($postData['files'] as $num => $arFile) { + $bUpload = false; + if ($_FILES['files']['error'][$num]['upload'] == 0) { + //valid file upload + $bUpload = true; + } else if ($arFile['content'] == '' && $arFile['name'] == '') { //empty (new) file continue; } @@ -39,8 +43,12 @@ class Repository_Post $name = $this->sanitizeFilename($arFile['name']); if ($name == '') { - $name = $this->getNextNumberedFile('phork') - . '.' . $arFile['type']; + if ($bUpload) { + $name = $this->sanitizeFilename($_FILES['files']['name'][$num]['upload']); + } else { + $name = $this->getNextNumberedFile('phork') + . '.' . $arFile['type']; + } } $bNew = false; @@ -48,6 +56,10 @@ class Repository_Post if (!isset($orignalName) || $orignalName == '') { //new file $bNew = true; + if (strpos($name, '.') === false) { + //automatically append file extension if none is there + $name .= '.' . $arFile['type']; + } } else if (!$this->repo->hasFile($orignalName)) { //unknown file //FIXME: Show error message @@ -55,12 +67,17 @@ class Repository_Post } else if (isset($arFile['delete']) && $arFile['delete'] == 1) { $bDelete = true; } else if ($orignalName != $name) { - //FIXME: what to do with overwrites? - $vc->getCommand('mv') - ->addArgument($orignalName) - ->addArgument($name) - ->execute(); - $bChanged = true; + if (strpos($name, '/') === false) { + //ignore names with a slash in it, would be new directory + //FIXME: what to do with overwrites? + $vc->getCommand('mv') + ->addArgument($orignalName) + ->addArgument($name) + ->execute(); + $bChanged = true; + } else { + $name = $orignalName; + } } $file = $this->repo->getFileByName($name, false); @@ -69,8 +86,16 @@ class Repository_Post ->addArgument($file->getFilename()) ->execute(); $bChanged = true; - } else if ($bNew || $file->getContent() != $arFile['content']) { - file_put_contents($file->getPath(), $arFile['content']); + } else if ($bUpload) { + move_uploaded_file( + $_FILES['files']['tmp_name'][$num]['upload'], $file->getFullPath() + ); + $command = $vc->getCommand('add') + ->addArgument($file->getFilename()) + ->execute(); + $bChanged = 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(); @@ -94,13 +119,18 @@ class Repository_Post $rs = new Repositories(); $repo = $rs->createNew(); $vc = $repo->getVc(); - $vc->initRepository(); - - foreach (glob($repo->repoDir . '/.git/hooks/*') as $hookfile) { + $vc->getCommand('init') + //this should be setOption, but it fails with a = between name and value + ->addArgument('--separate-git-dir') + ->addArgument($GLOBALS['phorkie']['cfg']['gitdir'] . '/' . $repo->id . '.git') + ->addArgument($repo->workDir) + ->execute(); + + foreach (glob($repo->gitDir . '/hooks/*') as $hookfile) { unlink($hookfile); } - touch($repo->repoDir . '/.git/git-daemon-export-ok'); + touch($repo->gitDir . '/git-daemon-export-ok'); return $repo; } @@ -110,7 +140,7 @@ class Repository_Post $num = -1; do { ++$num; - $files = glob($this->repo->repoDir . '/' . $prefix . $num . '.*'); + $files = glob($this->repo->workDir . '/' . $prefix . $num . '.*'); } while (count($files)); return $prefix . $num;