X-Git-Url: https://git.cweiske.de/phorkie.git/blobdiff_plain/c4b6c919fc57dec4334d10b6593a6b8faadc8052..cdaa5e28290fe0e9e73ca3a0557ee021a7ab404b:/src/Phorkie/Repository.php diff --git a/src/Phorkie/Repository.php b/src/Phorkie/Repository.php index 531ff68..bcaf3e1 100644 --- a/src/Phorkie/Repository.php +++ b/src/Phorkie/Repository.php @@ -42,6 +42,25 @@ class Repository $this->repoDir = $repoDir; } + public function loadById($id) + { + if (!is_numeric($id)) { + throw new Exception_Input('Paste ID not numeric'); + } + $this->id = (int)$id; + + $repoDir = $GLOBALS['phorkie']['cfg']['repos'] . '/' . $this->id; + if (!is_dir($repoDir)) { + throw new Exception_NotFound('Paste not found'); + } + $this->repoDir = $repoDir; + } + + public function getVc() + { + return new \VersionControl_Git($this->repoDir); + } + /** * Loads the list of files in this repository * @@ -57,19 +76,43 @@ class Repository return $arFiles; } - public function getFileByName($name) + public function getFileByName($name, $bHasToExist = true) { $base = basename($name); if ($base != $name) { throw new Exception('No directories supported for now'); } + if ($name == '') { + throw new Exception_Input('Empty file name given'); + } $path = $this->repoDir . '/' . $base; - if (!is_readable($path)) { + if ($bHasToExist && !is_readable($path)) { throw new Exception_Input('File does not exist'); } return new File($path, $this); } + public function hasFile($name) + { + try { + $this->getFileByName($name); + } catch (Exception $e) { + return false; + } + return true; + } + + /** + * Permanently deletes the paste repository without any way to get + * it back. + * + * @return boolean True if all went well, false if not + */ + public function delete() + { + return Tools::recursiveDelete($this->repoDir); + } + public function getDescription() { if (!is_readable($this->repoDir . '/.git/description')) { @@ -78,12 +121,18 @@ class Repository return file_get_contents($this->repoDir . '/.git/description'); } + public function setDescription($description) + { + file_put_contents($this->repoDir . '/.git/description', $description); + } + /** * Get a link to the repository * * @param string $type Link type. Supported are: * - "edit" * - "display" + * - "fork" * * @return string */ @@ -93,8 +142,14 @@ class Repository return '/' . $this->id . '/edit'; } else if ($type == 'display') { return '/' . $this->id; + } else if ($type == 'fork') { + return '/' . $this->id . '/fork'; + } else if ($type == 'delete') { + return '/' . $this->id . '/delete'; + } else if ($type == 'delete-confirm') { + return '/' . $this->id . '/delete/confirm'; } - throw new Exception('Unknown type'); + throw new Exception('Unknown link type'); } }