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