tra('Versions'), 'documentation' => 'PluginVersions', 'description' => tra('Create tabs for showing alternate versions of content'), 'prefs' => [ 'wikiplugin_versions' ], 'body' => tra('Block of text separated by ---(version x)--- markers. Text before the first marker is used by default.'), 'iconname' => 'copy', 'introduced' => 1, 'tags' => [ 'basic' ], 'params' => [ 'nav' => [ 'required' => false, 'name' => tra('Navigation'), 'description' => tra('Display a navigation box that allows users to select a specific version to display.'), 'since' => '1', 'default' => 'n', 'filter' => 'alpha', 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Yes'), 'value' => 'y'], ['text' => tra('No'), 'value' => 'n'], ], ], 'title' => [ 'required' => false, 'name' => tra('Title'), 'description' => tr('Display the current version name as the title. No title shows when %0nav="y"%1; otherwise shows by default.', '', ''), 'since' => '1', 'default' => 'y', 'filter' => 'alpha', 'parentparam' => ['name' => 'nav', 'value' => 'n'], 'options' => [ ['text' => '', 'value' => ''], ['text' => tra('Yes'), 'value' => 'y'], ['text' => tra('No'), 'value' => 'n'], ], ], 'default' => [ 'required' => false, 'name' => tra('Default Label'), 'description' => tra('Specifies version label to show when displaying the page for the first time. Default label is \'Default\''), 'since' => '1', 'default' => tra('Default'), ], ], ]; } function wikiplugin_versions($data, $params) { global $use_best_language, $prefs; if (isset($params) and is_array($params)) { extract($params, EXTR_SKIP); } $data = $data; $navbar = ''; if (! isset($default)) { $default = tra('Default'); } if (! isset($title)) { $title = 'y'; } if (! isset($nav)) { $nav = 'n'; } preg_match_all('/---\(([^\):]*)( : [^\)]*)?\)---*/', $data, $v); if (isset($type) and $type == 'host') { if (isset($_SERVER['TIKI_VERSION'])) { $vers = $_SERVER['TIKI_VERSION']; } else { $vers = $default; } } else { if (isset($_REQUEST['tikiversion'])) { $vers = $_REQUEST['tikiversion']; } elseif ($use_best_language == 'y' and in_array($prefs['language'], $v[1])) { $vers = $prefs['language']; } else { $vers = $default; } $type = "request"; } if (in_array($vers, $v[1])) { $p = array_search($vers, $v[1]) + 1; } else { $p = 0; } if (! isset($_REQUEST['preview'])) { if ($p == 0) { if (strpos($data, '---(') !== false) { $data = substr($data, 0, strpos($data, '---(')); } if ($nav == 'n' and $title == 'y') { $data = "" . $default . '' . $data; } $data = "\n" . ltrim(substr($data, strpos("\n", $data))); } elseif (isset($v[1][$p - 1]) and strpos($data, '---(' . $v[1][$p - 1])) { if ($nav == 'n' and $title == 'y') { $data = substr($data, strpos($data, '---(' . $v[1][$p - 1])); $data = preg_replace('/\)---*[\r\n]*/', "\n", "" . substr($data, 4)); } else { // can't get it to work as a single preg_match_all, so... preg_match_all("/(^|---\([^\(]*\)---*\s)/", $data, $t, PREG_OFFSET_CAPTURE); $start = $t[0][$p][1] + strlen($t[0][$p][0]); $end = $p + 1 < count($t[0]) ? $t[0][$p + 1][1] : strlen($data); $data = substr($data, $start, $end); } if (strpos($data, '---(') !== false) { $data = substr($data, 0, strpos($data, '---(')); } } } if ($nav == 'y') { $highed = false; for ($i = 0, $icount_v = count($v[1]); $i < $icount_v; $i++) { $version = $v[1][$i]; $ver = $version . $v[2][$i]; if ($i == $p - 1) { $high = " active"; $highed = true; } else { $high = ''; } if ($type == 'host') { $vv = preg_replace('/[^a-z0-9]/', '', strtolower($version)); $navbar .= '
  • ' . $ver . '
  • ' ; } else { $navbar .= '
  • ' . $ver . '
  • '; } } if (! $highed) { $high = " active"; } else { $high = ''; } if ($type == 'host') { $navbar = '
  • ' . $default . '
  • ' . $navbar ; } else { $navbar = '
  • ' . $default . '
  • ' . $navbar ; } $data = '
    ' . $data . "
    " ; } return $data; }