1<?php
2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
3//
4// All Rights Reserved. See copyright.txt for details and a complete list of authors.
5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
6// $Id$
7
8
9// this script may only be included - so its better to die if called directly.
10if (strpos($_SERVER['SCRIPT_NAME'], basename(__FILE__)) !== false) {
11	header('location: index.php');
12	exit;
13}
14
15/**
16 * To display with difference between two blocks of text, often wiki syntax or html
17 *
18 * @param array $params
19 * @param Smarty $smarty
20 * @return string html
21 */
22
23function smarty_function_wikidiff($params, $smarty)
24{
25	$defaults = [
26		'object_id' => '',					// int | string (for wiki page)
27		'object_type' => 'wiki page',		// string object type, wiki page if empty
28		'oldver' => '',						// int|string   required version or date string (uses strtotime)
29		'newver' => '',						// int|string   version or date string, latest if empty  (uses strtotime)
30		'diff_style' => '',					// string       one of the options for default_wiki_diff_style pref
31		'show_version_info' => false,		// bool         hide the h2 heading "Comparing version X with version Y"
32	];
33
34	$params = array_merge($defaults, $params);
35
36	if (! $params['object_id']) {
37		return '<span class="text-danger">' . tra('wikidiff: error - no object_id specified') . '</span>';
38	}
39
40	if (! $params['oldver']) {
41		return '<span class="text-danger">' . tra('wikidiff: error - no old version specified') . '</span>';
42	}
43
44	if ($params['object_type'] === 'wiki page') {
45		$info = TikiLib::lib('tiki')->get_page_info($params['object_id'], false);
46		if (! $info) {
47			return '<span class="text-danger">' . tr('wikidiff: error - page "%0" not found', $params['object_id']) . '</span>';
48		}
49
50		$smarty = TikiLib::lib('smarty');
51		$histlib = TikiLib::lib('hist');
52
53		if (! is_numeric($params['oldver'])) {
54			$time = strtotime($params['oldver']);
55			$oldver = $histlib->get_version_by_time($params['object_id'], $time, 'after');
56		} else {
57			$oldver = $params['oldver'];
58		}
59
60		if (! is_numeric($params['newver']) && ! empty($params['newver'])) {
61			$time = strtotime($params['newver']);
62			$newver = $histlib->get_version_by_time($params['object_id'], $time);
63		} else {
64			$newver = $params['newver'];
65		}
66
67		$smarty->assign('hide_version_info', ! $params['show_version_info']);
68		$smarty->assign('hide_example_wikidiff_plugin_syntax', true);
69
70		histlib_helper_setup_diff($params['object_id'], $oldver, $newver, $params['diff_style']);
71
72		$html = $smarty->fetch('pagehistory.tpl');
73
74		return $html;
75	} else {
76		// TODO for other types, e.g. tracker items
77
78		return '<span class="text-danger">' . tra('wikidiff: Error - only wiki pages supported currently') . '</span>';
79	}
80}
81