Enhancement of the history of a wiki page.

- Add more visibility to the delete revision function
- Add a restore function

Don't send 404 when the user what to see a specific revision that is the current revision
This commit is contained in:
William MARTIN 2011-12-05 11:04:01 +01:00
parent 69d0384ec3
commit 9a6a6c21f5
5 changed files with 144 additions and 9 deletions

View File

@ -262,7 +262,13 @@ class IDF_Views_Wiki
if (isset($request->GET['rev']) and preg_match('/^[0-9]+$/', $request->GET['rev'])) {
$oldrev = Pluf_Shortcuts_GetObjectOr404('IDF_WikiRevision',
$request->GET['rev']);
if ($oldrev->wikipage != $page->id or $oldrev->is_head == true) {
if ($oldrev->is_head == true) {
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($prj->shortname, $page->title));
return new Pluf_HTTP_Response_Redirect($url);
}
if ($oldrev->wikipage != $page->id) {
return new Pluf_HTTP_Response_NotFound($request);
}
}
@ -288,6 +294,39 @@ class IDF_Views_Wiki
$request);
}
/**
* See the revision list of a documentation page.
*/
public $history_precond = array('IDF_Precondition::accessWiki');
public function history($request, $match)
{
$prj = $request->project;
// Find the page
$sql = new Pluf_SQL('project=%s AND title=%s',
array($prj->id, $match[2]));
$pages = Pluf::factory('IDF_WikiPage')->getList(array('filter'=>$sql->gen()));
if ($pages->count() != 1) {
return new Pluf_HTTP_Response_NotFound($request);
}
$page = $pages[0];
$ptags = self::getWikiTags($prj);
$dtag = array_pop($ptags); // The last tag is the deprecated tag.
$tags = $page->get_tags_list();
$dep = Pluf_Model_InArray($dtag, $tags);
$title = sprintf(__('History of the wiki page %s'), $page->title);
$revision = $page->get_current_revision();
$revs = $page->get_revisions_list(array('order' => 'creation_dtime DESC'));
return Pluf_Shortcuts_RenderToResponse('idf/wiki/history.html',
array(
'page' => $page,
'page_title' => $title,
'rev' => $revision,
'revs' => $revs,
'tags' => $tags,
),
$request);
}
/**
* Remove a revision of a page.
*/
@ -327,6 +366,57 @@ class IDF_Views_Wiki
$request);
}
public $restoreRev_precond = array('IDF_Precondition::accessWiki',
'IDF_Precondition::projectMemberOrOwner');
public function restoreRev($request, $match)
{
$prj = $request->project;
$oldrev = Pluf_Shortcuts_GetObjectOr404('IDF_WikiRevision', $match[2]);
$page = $oldrev->get_wikipage();
$prj->inOr404($page);
// Prevent restore the current version
if ($oldrev->is_head == true) {
$request->user->setMessage(__('This revision is already the current revision.'));
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($prj->shortname, $page->title));
return new Pluf_HTTP_Response_Redirect($url);
}
$params = array(
'project' => $prj,
'user' => $request->user,
'page' => $page,
);
$data = array(
'title' => $page->title,
'summary' => $page->summary,
'content' => $oldrev->content,
'comment' => sprintf(__('Restore old revision (%s)'), $oldrev->id),
);
$tags = $page->get_tags_list();
for ($i=1;$i<4;$i++) {
if (isset($tags[$i-1])) {
if ($tags[$i-1]->class != 'Other') {
$data['label'.$i] = (string) $tags[$i-1];
} else {
$data['label'.$i] = $tags[$i-1]->name;
}
} else {
$data['label'.$i] = '';
}
}
$form = new IDF_Form_WikiUpdate($data, $params);
$page = $form->save();
$url = Pluf_HTTP_URL_urlForView('IDF_Views_Wiki::view',
array($prj->shortname, $page->title));
return new Pluf_HTTP_Response_Redirect($url);
}
/**
* View a documentation page.
*/

View File

@ -292,11 +292,21 @@ $ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/delrev/(\d+)/$#',
'model' => 'IDF_Views_Wiki',
'method' => 'deleteRev');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/resrev/(\d+)/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',
'method' => 'restoreRev');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/delete/(\d+)/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',
'method' => 'delete');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/doc/history/(.*)/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',
'method' => 'history');
$ctl[] = array('regex' => '#^/p/([\-\w]+)/page/(.*)/$#',
'base' => $base,
'model' => 'IDF_Views_Wiki',

View File

@ -0,0 +1,38 @@
{extends "idf/wiki/base.html"}
{block extraheader}
<meta name="ROBOTS" content="NOINDEX" />
{/block}
{block docclass}yui-t3{assign $inView=true}{/block}
{block body}
<table class="recent-issues">
<tr><th>Id</th><th>Who</th><th>When</th><th>Summary</th><th>Actions</th></tr>
{foreach $revs as $r}
{ashowuser 'submitter', $rev.get_submitter(), $request}
{aurl 'view_url', 'IDF_Views_Wiki::view', array($project.shortname, $page.title), array('rev' => $r->id)}
{aurl 'delete_url', 'IDF_Views_Wiki::deleteRev', array($project.shortname, $r->id)}
{aurl 'restore_url', 'IDF_Views_Wiki::restoreRev', array($project.shortname, $r->id)}
<tr><td><a href="{$view_url}">{$r->id}</a></td><td>{$submitter}</td><td class="a-c">{$r->creation_dtime|dateago}</td><td>{$r->summary}</td><td>{if $r->is_head == false}<a href="{$view_url}">View</a> - <a href="{$delete_url}">Delete</a> - <a href="{$restore_url}">Restore</a>{/if}</td></tr>
{/foreach}
</table>
{aurl 'add_rev', 'IDF_Views_Wiki::update', array($project.shortname, $page.title)}
<p><a href="{$add_rev}"><img style="vertical-align: text-bottom;" src="{media '/idf/img/add.png'}" alt="+" align="bottom"></a> <a href="{$add_rev}">{trans 'Update This Page'}</a></p>
{/block}
{block context}
{ashowuser 'submitter', $page.get_submitter(), $request}
<p><strong>{trans 'Created:'}</strong> <span class="nobrk">{$page.creation_dtime|dateago}</span><br /><span class="nobrk">{blocktrans}by {$submitter}{/blocktrans}</span></p>
{if $rev.creation_dtime != $page.creation_dtime}<p>{ashowuser 'submitter', $rev.get_submitter(), $request}
<strong>{trans 'Updated:'}</strong> <span class="nobrk">{$rev.creation_dtime|dateago}</span><br /><span class="nobrk">{blocktrans}by {$submitter}{/blocktrans}</span></p>{/if}
{if $tags.count()}
<p>
<strong>{trans 'Labels:'}</strong><br />
{foreach $tags as $tag}
<span class="label"><strong>{$tag.class}:</strong>{$tag.name}</span><br />
{/foreach}
</p>{/if}
<p class="helptext"><a href="{url 'IDF_Views_Wiki::view', array($project.shortname, $page.title)}">{trans 'See current revision'}</a></p>
{/block}

View File

@ -52,9 +52,6 @@ by {$submitter}.{/blocktrans}</p>
{/foreach}
</p>{/if}
{if $revs.count() > 0}
<p><strong>{trans 'Old Revisions'}</strong></p>
<ul>{foreach $revs as $old}
<li><a href="{url 'IDF_Views_Wiki::view', array($project.shortname, $page.title), array('rev'=>$old.id)}">{$old.summary}</a></li>
{/foreach}</ul>
<p class="helptext"><a href="{url 'IDF_Views_Wiki::history', array($project.shortname, $page.title)}">{trans 'See older revision'}</a></p>
{/if}
{/block}

View File

@ -1,6 +1,7 @@
{aurl 'syntax_url', 'IDF_Views_Wiki::view', array($project.shortname, 'IndeferoMarkdownHelp')}
{aurl 'wiki_add', 'IDF_Views_Wiki::create', array($project.shortname)}
{aurl 'wiki_update', 'IDF_Views_Wiki::update', array($project.shortname, 'IndeferoSummaryDefault')}
{aurl 'wiki_history', 'IDF_Views_Wiki::history', array($project.shortname, 'IndeferoSummaryDefault')}
{aurl 'wiki_admin', 'IDF_Views_Project::adminWiki', array($project.shortname)}
{blocktrans}
Welcome on the documentation section of the project {$project->name}.
@ -10,8 +11,7 @@ All documentation page use the markdown syntax, you can find help about this syn
- You can update this page [here]({$wiki_update}).
- You can select an other default wiki page [here]({$wiki_admin}). You need to be admin.
{*
All modification on wiki pages are saved, and you can see this history on the detail part of each pages.
The history of the current page can be see here.
*}
All modification on a wiki page are saved, and you can see this history for each pages.
The history of the current page can be see [here]({$wiki_history}).
{/blocktrans}