TODO
====
- edit
-- list all
- search
- OpenID-Login to get username+email as authorship information
- sidebar: history
--- /dev/null
+{% extends "base.htm" %}
+{% block title %}List of all pastes{% endblock %}
+
+{% block content %}
+<ul class="list">
+{% for repo in repos %}
+ <li>
+ <h2><a href="{{repo.getLink('display')}}">{{repo.id}}</a></h2>
+ <p>{{repo.getDescription}}</p>
+ </li>
+{% endfor %}
+</ul>
+<ul class="pager">
+ {% if links.prev %}
+ <li class="prev">
+ <a href="{{links.prev}}">prev</a>
+ </li>
+ {% endif %}
+ {% if links.next %}
+ <li class="next">
+ <a href="{{links.next}}">next</a>
+ </li>
+ {% endif %}
+</ul>
+{% endblock %}
return $r;
}
+ /**
+ * Get a list of repository objects
+ *
+ * @param integer $page Page number, beginning with 0
+ * @param integer $perPage Number of repositories per page
+ *
+ * @return array Array of Repositories
+ */
+ public function getList($page = 0, $perPage = 10)
+ {
+ chdir($this->reposDir);
+ $dirs = glob('*', GLOB_ONLYDIR);
+ sort($dirs, SORT_NUMERIC);
+
+ $some = array_slice($dirs, $page * $perPage, $perPage);
+ $repos = array();
+ foreach ($some as $oneDir) {
+ $r = new Repository();
+ $r->loadById($oneDir);
+ $repos[] = $r;
+ }
+ return $repos;
+ }
}
?>
$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);
RewriteRule ^([0-9]+)$ /display.php?id=$1
RewriteRule ^([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2
RewriteRule ^([0-9]+)/fork$ /fork.php?id=$1
+RewriteRule ^list$ /list.php
+RewriteRule ^list/([0-9])+$ /list.php?page=$1
--- /dev/null
+<?php
+/**
+ * Fork a repository
+ */
+namespace Phorkie;
+require_once 'www-header.php';
+$rs = new Repositories();
+
+$page = 0;
+if (isset($_GET['page'])) {
+ if (!is_numeric($_GET['page'])) {
+ throw new Exception_Input('List page is not numeric');
+ }
+ $page = (int)$_GET['page'];
+}
+
+$perPage = 10;
+$repos = $rs->getList($page, $perPage);
+
+$links = array('prev' => null, 'next' => null);
+if ($page > 0) {
+ $links['prev'] = '/list/' . ($page - 1);
+ if ($page - 1 == 0) {
+ $links['prev'] = '/list';
+ }
+}
+if (count($repos) && count($repos) == $perPage) {
+ $links['next'] = '/list/' . ($page + 1);
+}
+
+render(
+ 'list',
+ array(
+ 'repos' => $repos,
+ 'links' => $links,
+ )
+);
+?>