editing works basically
authorChristian Weiske <cweiske@cweiske.de>
Wed, 28 Mar 2012 15:24:44 +0000 (17:24 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Wed, 28 Mar 2012 15:24:44 +0000 (17:24 +0200)
data/templates/edit-file.htm
data/templates/edit.htm
src/Phorkie/File.php
src/Phorkie/Repository.php
www/edit.php
www/index.php

index 66647f0..b22314d 100644 (file)
@@ -2,7 +2,8 @@
   <div class="row-fluid">
    <div class="span6">
     <label for="filename_1">Filename</label>
-    <input type="text" name="files[{{fileid}}][name]" id="filename_{{fileid}}" value="{{ file.getFilename }}"/>
+    <input type="hidden" name="files[{{fileid}}][original_name]" value="{{file.getFilename}}"/>
+    <input type="text" name="files[{{fileid}}][name]" id="filename_{{fileid}}" value="{{file.getFilename}}"/>
    </div>
    <div class="span6" style="text-align: right">
     <label for="type_{{fileid}}">Type</label>
@@ -14,6 +15,6 @@
     </select>
    </div>
   </div>
-  <textarea name="files[{{fileid}}][content]" id="content_1" cols="80" rows="10" class="content">{{ file.getContent }}</textarea>
+  <textarea name="files[{{fileid}}][content]" id="content_{{fileid}}" cols="80" rows="10" class="content">{{file.getContent}}</textarea>
  </div>
 
index 56e08ef..300b6cb 100644 (file)
@@ -2,7 +2,7 @@
 {% block title %}Edit paste{% endblock %}
 
 {% block content %}
-<form method="post" action="/">
+<form method="post" action="{{repo.getLink('edit')}}">
  <div class="control-group well pastedata">
    <label for="description">Description</label>
    <input type="text" name="description" id="description" value="{{repo.getDescription}}"/>
index 6cdc833..3c6ea4b 100644 (file)
@@ -59,6 +59,16 @@ class File
     }
 
     /**
+     * Return the full path to the file
+     *
+     * @return string
+     */
+    public function getPath()
+    {
+        return $this->path;
+    }
+
+    /**
      * Get file extension without dot
      *
      * @return string
index aeccc72..5273b60 100644 (file)
@@ -82,6 +82,9 @@ class Repository
         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)) {
             throw new Exception_Input('File does not exist');
@@ -89,6 +92,16 @@ class Repository
         return new File($path, $this);
     }
 
+    public function hasFile($name)
+    {
+        try {
+            $this->getFileByName($name);
+        } catch (Exception $e) {
+            return false;
+        }
+        return true;
+    }
+
     public function getDescription()
     {
         if (!is_readable($this->repoDir . '/.git/description')) {
@@ -97,6 +110,11 @@ 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
      *
index d86df41..3bcec6e 100644 (file)
@@ -8,6 +8,48 @@ require_once 'www-header.php';
 $repo = new Repository();
 $repo->loadFromRequest();
 
+if (isset($_POST['files'])) {
+    $vc = $repo->getVc();
+    $repo->setDescription($_POST['description']);
+
+    $bChanged = false;
+    foreach ($_POST['files'] as $num => $arFile) {
+        if (!isset($arFile['original_name'])
+            || !$repo->hasFile($arFile['original_name'])
+        ) {
+            //FIXME: Show error message
+            continue;
+        }
+        //FIXME: fix file names from .. and ./
+        if ($arFile['original_name'] != $arFile['name']) {
+            //FIXME: what to do with overwrites?
+            $vc->getCommand('mv')
+                ->addArgument($arFile['original_name'])
+                ->addArgument($arFile['name'])
+                ->execute();
+            $bChanged = true;
+        }
+        $file = $repo->getFileByName($arFile['name']);
+        if ($file->getContent() != $arFile['content']) {
+            file_put_contents($file->getPath(), $arFile['content']);
+            $command = $vc->getCommand('add')
+                ->addArgument($file->getFilename())
+                ->execute();
+            $bChanged = true;
+        }
+    }
+
+    if ($bChanged) {
+        $vc->getCommand('commit')
+            ->setOption('message', '')
+            ->setOption('allow-empty-message')
+            ->setOption('author', 'Anonymous <anonymous@phorkie>')
+            ->execute();
+    }
+
+    redirect($repo->getLink('display'));
+}
+
 render(
     'edit',
     array(
index f821c84..db3fd7b 100644 (file)
@@ -21,10 +21,11 @@ if (isset($_POST['files'])) {
     foreach (glob($repo->repoDir . '/.git/hooks/*') as $hookfile) {
         unlink($hookfile);
     }
-    file_put_contents($repo->repoDir . '.git/description', $_POST['description']);
+    $repo->setDescription($_POST['description']);
 
     foreach ($_POST['files'] as $num => $arFile) {
         if ($arFile['name'] != '') {
+            //FIXME: fix file name from ..
             $fname = $arFile['name'];
         } else {
             $fname = 'phork' . $num . '.' . $arFile['type'];