You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

177 lines
7.6 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
function wikiplugin_wikidiff_info()
{
global $prefs;
return [
'name' => tra('Wiki Diff'),
'documentation' => 'PluginWikidiff',
'description' => tra('Display the differences between two wiki objects'),
'prefs' => [ 'wikiplugin_wikidiff', 'feature_wiki' ],
'iconname' => 'code-fork',
'introduced' => 15.3,
'format' => 'html',
'extraparams' => true,
'params' => [
'object_id' => [
'required' => true,
'name' => tra('Object Id'),
'description' => tra('Object to do a diff on (page name for wiki pages)'),
'since' => 15.3,
'default' => '',
'filter' => 'text',
],
'object_type' => [
'required' => false,
'name' => tra('Object Type'),
'description' => tra('Object type (wiki pages only)'),
'since' => 15.3,
'default' => 'wiki page',
'filter' => 'text',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Wiki Page'), 'value' => 'wiki page'],
]
],
'oldver' => [
'required' => true,
'name' => tra('Old version'),
'description' => tra('Integer for old version number, or date') ,
'since' => 15.3,
'filter' => 'text',
'default' => '',
],
'newver' => [
'required' => false,
'name' => tra('New version'),
'description' => tra('Integer for old version number, or date') . ' - ' . tra('Leave empty for current version') ,
'since' => 15.3,
'filter' => 'text',
'default' => '',
],
'curver' => [
'required' => false,
'name' => tra('show current version link'),
'description' => tra('show the link of the current version to help go back to the current version of the page') ,
'filter' => 'text',
'default' => 'y',
'since' => '23',
'options' => [
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
]
],
'diff_style' => [
'required' => false,
'name' => tra('Diff Style'),
'description' => tr('Defaults to "diff style" preference if empty'),
'since' => '15.3',
'filter' => 'text',
'default' => $prefs['default_wiki_diff_style'],
'options' => [
['text' => '', 'value' => ''],
['text' => tra('HTML diff'), 'value' => 'htmldiff'],
['text' => tra('Side-by-side diff'), 'value' => 'sidediff'],
['text' => tra('Side-by-side diff by characters'), 'value' => 'sidediff-char'],
['text' => tra('Inline diff'), 'value' => 'inlinediff'],
['text' => tra('Inline diff by characters'), 'value' => 'inlinediff-char'],
['text' => tra('Full side-by-side diff'), 'value' => 'sidediff-full'],
['text' => tra('Full side-by-side diff by characters'), 'value' => 'sidediff-full-char'],
['text' => tra('Full inline diff'), 'value' => 'inlinediff-full'],
['text' => tra('Full inline diff by characters'), 'value' => 'inlinediff-full-char'],
['text' => tra('Unified diff'), 'value' => 'unidiff'],
['text' => tra('Side-by-side view'), 'value' => 'sideview'],
],
],
'show_version_info' => [
'required' => false,
'name' => tra('Show version info'),
'description' => tra('Show the heading "Comparing version X with version Y"'),
'since' => 15.3,
'default' => 'n',
'filter' => 'text',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('No'), 'value' => 'n'],
['text' => tra('Yes'), 'value' => 'y'],
]
],
'pagedenied_text' => [
'required' => false,
'name' => tr('Permission denied message'),
'description' => tr('Text to show when the page exists but the user has insufficient permissions to see it.'),
'since' => '18.0',
'filter' => 'text',
'default' => '',
],
'pagenotapproved_text' => [
'required' => false,
'name' => tr('No version approved error message'),
'description' => tr('Text to show when the page exists but no version is approved.'),
'since' => '18.0',
'filter' => 'text',
'default' => "You don't have permission to see this content, because it hasn't been approved",
],
]
];
}
function wikiplugin_wikidiff($data, $params)
{
global $prefs;
// TODO refactor: defaults for plugins?
$defaults = [];
$plugininfo = wikiplugin_wikidiff_info();
foreach ($plugininfo['params'] as $key => $param) {
$defaults["$key"] = $param['default'];
}
$params = array_merge($defaults, $params);
$tikilib = TikiLib::lib('tiki');
$perms = $tikilib->get_perm_object($params['object_id'], $params['object_type']);
if ($perms['tiki_p_view'] != 'y') {
$text = $params['pagedenied_text'];
return($text);
}
if ($prefs['flaggedrev_approval'] == 'y') {
$flaggedrevisionlib = TikiLib::lib('flaggedrevision');
if ($flaggedrevisionlib->page_requires_approval($params['object_id'])) {
if (! $flaggedrevisionlib->version_is_flagged($params['object_id'], $params['oldver'], 'moderation', 'OK')) {
// If oldver (required) is not approved, display error message
$text = $params['pagenotapproved_text'];
return($text);
}
if (isset($params['newver']) && ! empty($params['newver'])) {
// If specific version is specified, check if it has been approved
if (! $flaggedrevisionlib->version_is_flagged($params['object_id'], $params['newver'], 'moderation', 'OK')) {
return($params['pagenotapproved_text']);
}
} else {
// No version provided, get latest approved version
if ($version_info = $flaggedrevisionlib->get_version_with($params['object_id'], 'moderation', 'OK')) {
$params['newver'] = (int)$version_info['version'];
if ($params['newver'] < (int)$params['oldver']) {
return($params['pagenotapproved_text']);
}
}
}
}
}
// Note: the underlying param is the opposite: hide_version_info
$params['show_version_info'] = $params['show_version_info'] !== 'n';
$smarty = TikiLib::lib('smarty');
$smarty->loadPlugin('smarty_function_wikidiff');
$ret = smarty_function_wikidiff($params, $smarty->getEmptyInternalTemplate());
return $ret;
}