Indefero

Indefero Commit Details


Date:2011-12-05 04:04:01 (13 years 17 days ago)
Author:William MARTIN
Branch:feature.wiki-default-page
Commit:9a6a6c21f51fe5a85a7135b6da1f47fb59ef7a11
Parents: 69d0384ec3e4cc9235b6b60c9428f97ee99191af
Message: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
Changes:

File differences

src/IDF/Views/Wiki.php
262262
263263
264264
265
265
266
267
268
269
270
271
266272
267273
268274
......
289295
290296
291297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
292331
293332
294333
......
327366
328367
329368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
330420
331421
332422
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);
}
}
}
/**
* 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.
*/
public $deleteRev_precond = array('IDF_Precondition::accessWiki',
$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.
*/
src/IDF/conf/urls.php
292292
293293
294294
295
296
297
298
299
295300
296301
297302
298303
299304
305
306
307
308
309
300310
301311
302312
'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',
src/IDF/templates/idf/wiki/history.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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}
src/IDF/templates/idf/wiki/view.html
5252
5353
5454
55
56
57
58
55
5956
6057
{/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}
src/IDF/templates/idf/wiki/wiki-default-page.mdtext
11
22
33
4
45
56
67
......
1011
1112
1213
13
14
15
16
14
15
16
1717
{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}.
- 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}

Archive Download the corresponding diff file

Page rendered in 0.09429s using 13 queries.