Basic page reversion implemented. The revert button on the history view replaces the editor text but does not save the page.
This commit is contained in:
parent
4bc4fd5b7e
commit
0a3fbdd128
@ -401,6 +401,41 @@ class Wiki extends \Zotlabs\Web\Controller {
|
||||
}
|
||||
}
|
||||
|
||||
// Revert a page
|
||||
if ((argc() === 4) && (argv(2) === 'revert') && (argv(3) === 'page')) {
|
||||
$nick = argv(1);
|
||||
$resource_id = $_POST['resource_id'];
|
||||
$pageUrlName = $_POST['name'];
|
||||
$commitHash = $_POST['commitHash'];
|
||||
// Determine if observer has permission to revert pages
|
||||
if (local_channel()) {
|
||||
$channel = \App::get_channel();
|
||||
} else {
|
||||
$channel = get_channel_by_nick($nick);
|
||||
$observer_hash = get_observer_hash();
|
||||
// Figure out who the page owner is.
|
||||
$perms = get_all_perms(intval($channel['channel_id']), $observer_hash);
|
||||
// TODO: Create a new permission setting for wiki analogous to webpages. Until
|
||||
// then, use webpage permissions
|
||||
if (!$perms['write_pages']) {
|
||||
logger('Wiki editing permission denied.' . EOL);
|
||||
json_return_and_die(array('success' => false));
|
||||
}
|
||||
$perms = wiki_get_permissions($resource_id, intval($channel['channel_id']), $observer_hash);
|
||||
if(!$perms['write']) {
|
||||
logger('Wiki write permission denied. Read only.' . EOL);
|
||||
json_return_and_die(array('success' => false));
|
||||
}
|
||||
}
|
||||
$reverted = wiki_revert_page(array('commitHash' => $commitHash, 'observer' => \App::get_observer(), 'resource_id' => $resource_id, 'pageUrlName' => $pageUrlName));
|
||||
if($reverted['success']) {
|
||||
json_return_and_die(array('content' => $reverted['content'], 'message' => '', 'success' => true));
|
||||
} else {
|
||||
json_return_and_die(array('content' => '', 'message' => 'Error reverting page', 'success' => false));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//notice('You must be authenticated.');
|
||||
json_return_and_die(array('message' => 'You must be authenticated.', 'success' => false));
|
||||
|
||||
|
@ -263,7 +263,6 @@ function wiki_page_history($arr) {
|
||||
$git = new GitRepo('', null, false, $w['wiki']['title'], $w['path']);
|
||||
try {
|
||||
$gitlog = $git->git->log('', $page_path , array('limit' => 500));
|
||||
logger('gitlog: ' . json_encode($gitlog));
|
||||
return array('history' => $gitlog, 'message' => '', 'success' => true);
|
||||
} catch (\PHPGit\Exception\GitException $e) {
|
||||
return array('history' => null, 'message' => 'GitRepo error thrown', 'success' => false);
|
||||
@ -307,6 +306,44 @@ function wiki_delete_page($arr) {
|
||||
}
|
||||
}
|
||||
|
||||
function wiki_revert_page($arr) {
|
||||
$pageUrlName = ((array_key_exists('pageUrlName',$arr)) ? $arr['pageUrlName'] : '');
|
||||
$resource_id = ((array_key_exists('resource_id',$arr)) ? $arr['resource_id'] : '');
|
||||
$commitHash = ((array_key_exists('commitHash',$arr)) ? $arr['commitHash'] : null);
|
||||
if (! $commitHash) {
|
||||
return array('content' => $content, 'message' => 'No commit has provided', 'success' => false);
|
||||
}
|
||||
$w = wiki_get_wiki($resource_id);
|
||||
if (!$w['path']) {
|
||||
return array('content' => $content, 'message' => 'Error reading wiki', 'success' => false);
|
||||
}
|
||||
$page_path = $w['path'].'/'.$pageUrlName.'.md';
|
||||
if (is_writable($page_path) === true) {
|
||||
|
||||
$reponame = ((array_key_exists('title', $w['wiki'])) ? urlencode($w['wiki']['title']) : 'repo');
|
||||
if($reponame === '') {
|
||||
$reponame = 'repo';
|
||||
}
|
||||
$git = new GitRepo($observer['xchan_addr'], null, false, $w['wiki']['title'], $w['path']);
|
||||
$content = null;
|
||||
try {
|
||||
$git->setIdentity($observer['xchan_name'], $observer['xchan_addr']);
|
||||
foreach ($git->git->tree($commitHash) as $object) {
|
||||
logger('tree object: ' . json_encode($object));
|
||||
if ($object['type'] == 'blob' && $object['file'] === $pageUrlName.'.md' ) {
|
||||
$content = $git->git->cat->blob($object['hash']);
|
||||
logger('content: ' . json_encode($content));
|
||||
}
|
||||
}
|
||||
} catch (\PHPGit\Exception\GitException $e) {
|
||||
json_return_and_die(array('content' => $content, 'message' => 'GitRepo error thrown', 'success' => false));
|
||||
}
|
||||
return array('content' => $content, 'message' => '', 'success' => true);
|
||||
} else {
|
||||
return array('content' => $content, 'message' => 'Page file not writable', 'success' => false);
|
||||
}
|
||||
}
|
||||
|
||||
function wiki_git_commit($arr) {
|
||||
$files = ((array_key_exists('files', $arr)) ? $arr['files'] : null);
|
||||
$commit_msg = ((array_key_exists('commit_msg', $arr)) ? $arr['commit_msg'] : 'Repo updated');
|
||||
|
@ -232,4 +232,21 @@ function wiki_delete_wiki(wikiHtmlName, resource_id) {
|
||||
}, 'json');
|
||||
ev.preventDefault();
|
||||
});
|
||||
|
||||
function wiki_revert_page(commitHash) {
|
||||
if (window.wiki_resource_id === '' || window.wiki_page_name === '') {
|
||||
window.console.log('You must have a wiki page open in order to revert pages.');
|
||||
return false;
|
||||
}
|
||||
$.post("wiki/{{$channel}}/revert/page", {commitHash: commitHash, name: window.wiki_page_name, resource_id: window.wiki_resource_id},
|
||||
function (data) {
|
||||
if (data.success) {
|
||||
window.console.log('Reverted content: ' + data.content);
|
||||
// put contents in editor
|
||||
editor.getSession().setValue(data.content);
|
||||
} else {
|
||||
window.console.log('Error reverting page.');
|
||||
}
|
||||
}, 'json');
|
||||
}
|
||||
</script>
|
||||
|
@ -1,8 +1,9 @@
|
||||
<table class="table-striped table-responsive table-hover" style="width: 100%;">
|
||||
{{foreach $pageHistory as $commit}}
|
||||
<tr><td>
|
||||
<table>
|
||||
<tr><td>Date</td><td>{{$commit.date}}</td></tr>
|
||||
<table id="rev-{{$commit.hash}}" onclick="$('#details-{{$commit.hash}}').show()">
|
||||
<tr><td>Date</td><td>{{$commit.date}}</td><td rowspan="3"">
|
||||
<button id="revert-{{$commit.hash}}" class="btn btn-warning btn-xs" onclick="wiki_revert_page('{{$commit.hash}}')">Revert</button></td></tr>
|
||||
<tr><td>Name</td><td>{{$commit.name}}</td></tr>
|
||||
<tr><td>Message</td><td>{{$commit.title}}</td></tr>
|
||||
</table>
|
||||
|
Reference in New Issue
Block a user