123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020 |
- <?php
- /**
- * HTML output functions
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- use dokuwiki\Action\Denied;
- use dokuwiki\Action\Locked;
- use dokuwiki\ChangeLog\PageChangeLog;
- use dokuwiki\Extension\AuthPlugin;
- use dokuwiki\Extension\Event;
- use dokuwiki\Ui\Backlinks;
- use dokuwiki\Ui\Editor;
- use dokuwiki\Ui\Index;
- use dokuwiki\Ui\Login;
- use dokuwiki\Ui\PageConflict;
- use dokuwiki\Ui\PageDiff;
- use dokuwiki\Ui\PageDraft;
- use dokuwiki\Ui\PageRevisions;
- use dokuwiki\Ui\PageView;
- use dokuwiki\Ui\Recent;
- use dokuwiki\Ui\UserProfile;
- use dokuwiki\Ui\UserRegister;
- use dokuwiki\Ui\UserResendPwd;
- use dokuwiki\Utf8\Clean;
- if (!defined('SEC_EDIT_PATTERN')) {
- define('SEC_EDIT_PATTERN', '#<!-- EDIT({.*?}) -->#');
- }
- /**
- * Convenience function to quickly build a wikilink
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @param string $id id of the target page
- * @param string $name the name of the link, i.e. the text that is displayed
- * @param string|array $search search string(s) that shall be highlighted in the target page
- * @return string the HTML code of the link
- */
- function html_wikilink($id, $name = null, $search = '') {
- /** @var Doku_Renderer_xhtml $xhtml_renderer */
- static $xhtml_renderer = null;
- if (is_null($xhtml_renderer)) {
- $xhtml_renderer = p_get_renderer('xhtml');
- }
- return $xhtml_renderer->internallink($id,$name,$search,true,'navigation');
- }
- /**
- * The loginform
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param bool $svg Whether to show svg icons in the register and resendpwd links or not
- * @deprecated 2020-07-18
- */
- function html_login($svg = false) {
- dbg_deprecated(Login::class .'::show()');
- (new dokuwiki\Ui\Login($svg))->show();
- }
- /**
- * Denied page content
- *
- * @deprecated 2020-07-18 not called anymore, see inc/Action/Denied::tplContent()
- */
- function html_denied() {
- dbg_deprecated(Denied::class .'::showBanner()');
- (new dokuwiki\Action\Denied())->showBanner();
- }
- /**
- * inserts section edit buttons if wanted or removes the markers
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param string $text
- * @param bool $show show section edit buttons?
- * @return string
- */
- function html_secedit($text, $show = true) {
- global $INFO;
- if ((isset($INFO) && !$INFO['writable']) || !$show || (isset($INFO) && $INFO['rev'])) {
- return preg_replace(SEC_EDIT_PATTERN,'',$text);
- }
- return preg_replace_callback(SEC_EDIT_PATTERN,
- 'html_secedit_button', $text);
- }
- /**
- * prepares section edit button data for event triggering
- * used as a callback in html_secedit
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param array $matches matches with regexp
- * @return string
- * @triggers HTML_SECEDIT_BUTTON
- */
- function html_secedit_button($matches){
- $json = htmlspecialchars_decode($matches[1], ENT_QUOTES);
- $data = json_decode($json, true);
- if ($data === null) {
- return '';
- }
- $data['target'] = strtolower($data['target']);
- $data['hid'] = strtolower($data['hid'] ?? '');
- return Event::createAndTrigger(
- 'HTML_SECEDIT_BUTTON',
- $data,
- 'html_secedit_get_button'
- );
- }
- /**
- * prints a section editing button
- * used as default action form HTML_SECEDIT_BUTTON
- *
- * @author Adrian Lang <lang@cosmocode.de>
- *
- * @param array $data name, section id and target
- * @return string html
- */
- function html_secedit_get_button($data) {
- global $ID;
- global $INFO;
- if (!isset($data['name']) || $data['name'] === '') return '';
- $name = $data['name'];
- unset($data['name']);
- $secid = $data['secid'];
- unset($data['secid']);
- $params = array_merge(
- array('do' => 'edit', 'rev' => $INFO['lastmod'], 'summary' => '['.$name.'] '),
- $data
- );
- $html = '<div class="secedit editbutton_'.$data['target'] .' editbutton_'.$secid .'">';
- $html.= html_btn('secedit', $ID, '', $params, 'post', $name);
- $html.= '</div>';
- return $html;
- }
- /**
- * Just the back to top button (in its own form)
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @return string html
- */
- function html_topbtn() {
- global $lang;
- return '<a class="nolink" href="#dokuwiki__top">'
- .'<button class="button" onclick="window.scrollTo(0, 0)" title="'. $lang['btn_top'] .'">'
- . $lang['btn_top']
- .'</button></a>';
- }
- /**
- * Displays a button (using its own form)
- * If tooltip exists, the access key tooltip is replaced.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param string $name
- * @param string $id
- * @param string $akey access key
- * @param string[] $params key-value pairs added as hidden inputs
- * @param string $method
- * @param string $tooltip
- * @param bool|string $label label text, false: lookup btn_$name in localization
- * @param string $svg (optional) svg code, inserted into the button
- * @return string
- */
- function html_btn($name, $id, $akey, $params, $method = 'get', $tooltip = '', $label = false, $svg = null) {
- global $conf;
- global $lang;
- if (!$label)
- $label = $lang['btn_'.$name];
- //filter id (without urlencoding)
- $id = idfilter($id,false);
- //make nice URLs even for buttons
- if ($conf['userewrite'] == 2) {
- $script = DOKU_BASE.DOKU_SCRIPT.'/'.$id;
- } elseif ($conf['userewrite']) {
- $script = DOKU_BASE.$id;
- } else {
- $script = DOKU_BASE.DOKU_SCRIPT;
- $params['id'] = $id;
- }
- $html = '<form class="button btn_'.$name.'" method="'.$method.'" action="'.$script.'"><div class="no">';
- if (is_array($params)) {
- foreach ($params as $key => $val) {
- $html .= '<input type="hidden" name="'.$key.'" value="'.hsc($val).'" />';
- }
- }
- $tip = empty($tooltip) ? hsc($label) : hsc($tooltip);
- $html .= '<button type="submit" ';
- if ($akey) {
- $tip .= ' ['.strtoupper($akey).']';
- $html .= 'accesskey="'.$akey.'" ';
- }
- $html .= 'title="'.$tip.'">';
- if ($svg) {
- $html .= '<span>'. hsc($label) .'</span>'. inlineSVG($svg);
- } else {
- $html .= hsc($label);
- }
- $html .= '</button>';
- $html .= '</div></form>';
- return $html;
- }
- /**
- * show a revision warning
- *
- * @author Szymon Olewniczak <dokuwiki@imz.re>
- * @deprecated 2020-07-18
- */
- function html_showrev() {
- dbg_deprecated(PageView::class .'::showrev()');
- }
- /**
- * Show a wiki page
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param null|string $txt wiki text or null for showing $ID
- * @deprecated 2020-07-18
- */
- function html_show($txt=null) {
- dbg_deprecated(PageView::class .'::show()');
- (new dokuwiki\Ui\PageView($txt))->show();
- }
- /**
- * ask the user about how to handle an exisiting draft
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @deprecated 2020-07-18
- */
- function html_draft() {
- dbg_deprecated(PageDraft::class .'::show()');
- (new dokuwiki\Ui\PageDraft)->show();
- }
- /**
- * Highlights searchqueries in HTML code
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Harry Fuecks <hfuecks@gmail.com>
- *
- * @param string $html
- * @param array|string $phrases
- * @return string html
- */
- function html_hilight($html, $phrases) {
- $phrases = (array) $phrases;
- $phrases = array_map('preg_quote_cb', $phrases);
- $phrases = array_map('ft_snippet_re_preprocess', $phrases);
- $phrases = array_filter($phrases);
- $regex = join('|',$phrases);
- if ($regex === '') return $html;
- if (!Clean::isUtf8($regex)) return $html;
- return @preg_replace_callback("/((<[^>]*)|$regex)/ui", function ($match) {
- $hlight = unslash($match[0]);
- if (!isset($match[2])) {
- $hlight = '<span class="search_hit">'.$hlight.'</span>';
- }
- return $hlight;
- }, $html);
- }
- /**
- * Display error on locked pages
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @deprecated 2020-07-18 not called anymore, see inc/Action/Locked::tplContent()
- */
- function html_locked() {
- dbg_deprecated(Locked::class .'::showBanner()');
- (new dokuwiki\Action\Locked())->showBanner();
- }
- /**
- * list old revisions
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Ben Coburn <btcoburn@silicodon.net>
- * @author Kate Arzamastseva <pshns@ukr.net>
- *
- * @param int $first skip the first n changelog lines
- * @param string $media_id id of media, or empty for current page
- * @deprecated 2020-07-18
- */
- function html_revisions($first = -1, $media_id = '') {
- dbg_deprecated(PageRevisions::class .'::show()');
- if ($media_id) {
- (new dokuwiki\Ui\MediaRevisions($media_id))->show($first);
- } else {
- global $INFO;
- (new dokuwiki\Ui\PageRevisions($INFO['id']))->show($first);
- }
- }
- /**
- * display recent changes
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
- * @author Ben Coburn <btcoburn@silicodon.net>
- * @author Kate Arzamastseva <pshns@ukr.net>
- *
- * @param int $first
- * @param string $show_changes
- * @deprecated 2020-07-18
- */
- function html_recent($first = 0, $show_changes = 'both') {
- dbg_deprecated(Recent::class .'::show()');
- (new dokuwiki\Ui\Recent($first, $show_changes))->show();
- }
- /**
- * Display page index
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param string $ns
- * @deprecated 2020-07-18
- */
- function html_index($ns) {
- dbg_deprecated(Index::class .'::show()');
- (new dokuwiki\Ui\Index($ns))->show();
- }
- /**
- * Index tree item formatter for html_buildlist()
- *
- * User function for html_buildlist()
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param array $item
- * @return string
- * @deprecated 2020-07-18
- */
- function html_list_index($item) {
- dbg_deprecated(Index::class .'::formatListItem()');
- return (new dokuwiki\Ui\Index)->formatListItem($item);
- }
- /**
- * Index list item formatter for html_buildlist()
- *
- * This user function is used in html_buildlist to build the
- * <li> tags for namespaces when displaying the page index
- * it gives different classes to opened or closed "folders"
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param array $item
- * @return string html
- * @deprecated 2020-07-18
- */
- function html_li_index($item) {
- dbg_deprecated(Index::class .'::tagListItem()');
- return (new dokuwiki\Ui\Index)->tagListItem($item);
- }
- /**
- * Default list item formatter for html_buildlist()
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param array $item
- * @return string html
- * @deprecated 2020-07-18
- */
- function html_li_default($item){
- return '<li class="level'.$item['level'].'">';
- }
- /**
- * Build an unordered list
- *
- * Build an unordered list from the given $data array
- * Each item in the array has to have a 'level' property
- * the item itself gets printed by the given $func user
- * function. The second and optional function is used to
- * print the <li> tag. Both user function need to accept
- * a single item.
- *
- * Both user functions can be given as array to point to
- * a member of an object.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param array $data array with item arrays
- * @param string $class class of ul wrapper
- * @param callable $func callback to print an list item
- * @param callable $lifunc (optional) callback to the opening li tag
- * @param bool $forcewrapper (optional) Trigger building a wrapper ul if the first level is
- * 0 (we have a root object) or 1 (just the root content)
- * @return string html of an unordered list
- */
- function html_buildlist($data, $class, $func, $lifunc = null, $forcewrapper = false) {
- if (count($data) === 0) {
- return '';
- }
- $firstElement = reset($data);
- $start_level = $firstElement['level'];
- $level = $start_level;
- $html = '';
- $open = 0;
- // set callback function to build the <li> tag, formerly defined as html_li_default()
- if (!is_callable($lifunc)) {
- $lifunc = function ($item) {
- return '<li class="level'.$item['level'].'">';
- };
- }
- foreach ($data as $item) {
- if ($item['level'] > $level) {
- //open new list
- for ($i = 0; $i < ($item['level'] - $level); $i++) {
- if ($i) $html .= '<li class="clear">';
- $html .= "\n".'<ul class="'.$class.'">'."\n";
- $open++;
- }
- $level = $item['level'];
- } elseif ($item['level'] < $level) {
- //close last item
- $html .= '</li>'."\n";
- while ($level > $item['level'] && $open > 0 ) {
- //close higher lists
- $html .= '</ul>'."\n".'</li>'."\n";
- $level--;
- $open--;
- }
- } elseif ($html !== '') {
- //close previous item
- $html .= '</li>'."\n";
- }
- //print item
- $html .= call_user_func($lifunc, $item);
- $html .= '<div class="li">';
- $html .= call_user_func($func, $item);
- $html .= '</div>';
- }
- //close remaining items and lists
- $html .= '</li>'."\n";
- while ($open-- > 0) {
- $html .= '</ul></li>'."\n";
- }
- if ($forcewrapper || $start_level < 2) {
- // Trigger building a wrapper ul if the first level is
- // 0 (we have a root object) or 1 (just the root content)
- $html = "\n".'<ul class="'.$class.'">'."\n".$html.'</ul>'."\n";
- }
- return $html;
- }
- /**
- * display backlinks
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Michael Klier <chi@chimeric.de>
- * @deprecated 2020-07-18
- */
- function html_backlinks() {
- dbg_deprecated(Backlinks::class .'::show()');
- (new dokuwiki\Ui\Backlinks)->show();
- }
- /**
- * Get header of diff HTML
- *
- * @param string $l_rev Left revisions
- * @param string $r_rev Right revision
- * @param string $id Page id, if null $ID is used
- * @param bool $media If it is for media files
- * @param bool $inline Return the header on a single line
- * @return string[] HTML snippets for diff header
- * @deprecated 2020-07-18
- */
- function html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = false) {
- dbg_deprecated('see '. PageDiff::class .'::buildDiffHead()');
- return ['', '', '', ''];
- }
- /**
- * Show diff
- * between current page version and provided $text
- * or between the revisions provided via GET or POST
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @param string $text when non-empty: compare with this text with most current version
- * @param bool $intro display the intro text
- * @param string $type type of the diff (inline or sidebyside)
- * @deprecated 2020-07-18
- */
- function html_diff($text = '', $intro = true, $type = null) {
- dbg_deprecated(PageDiff::class .'::show()');
- global $INFO;
- (new dokuwiki\Ui\PageDiff($INFO['id']))->compareWith($text)->preference([
- 'showIntro' => $intro,
- 'difftype' => $type,
- ])->show();
- }
- /**
- * Create html for revision navigation
- *
- * @param PageChangeLog $pagelog changelog object of current page
- * @param string $type inline vs sidebyside
- * @param int $l_rev left revision timestamp
- * @param int $r_rev right revision timestamp
- * @return string[] html of left and right navigation elements
- * @deprecated 2020-07-18
- */
- function html_diff_navigation($pagelog, $type, $l_rev, $r_rev) {
- dbg_deprecated('see '. PageDiff::class .'::buildRevisionsNavigation()');
- return ['', ''];
- }
- /**
- * Create html link to a diff defined by two revisions
- *
- * @param string $difftype display type
- * @param string $linktype
- * @param int $lrev oldest revision
- * @param int $rrev newest revision or null for diff with current revision
- * @return string html of link to a diff
- * @deprecated 2020-07-18
- */
- function html_diff_navigationlink($difftype, $linktype, $lrev, $rrev = null) {
- dbg_deprecated('see '. PageDiff::class .'::diffViewlink()');
- return '';
- }
- /**
- * Insert soft breaks in diff html
- *
- * @param string $diffhtml
- * @return string
- * @deprecated 2020-07-18
- */
- function html_insert_softbreaks($diffhtml) {
- dbg_deprecated(PageDiff::class .'::insertSoftbreaks()');
- return (new dokuwiki\Ui\PageDiff)->insertSoftbreaks($diffhtml);
- }
- /**
- * show warning on conflict detection
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param string $text
- * @param string $summary
- * @deprecated 2020-07-18
- */
- function html_conflict($text, $summary) {
- dbg_deprecated(PageConflict::class .'::show()');
- (new dokuwiki\Ui\PageConflict($text, $summary))->show();
- }
- /**
- * Prints the global message array
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- function html_msgarea() {
- global $MSG, $MSG_shown;
- /** @var array $MSG */
- // store if the global $MSG has already been shown and thus HTML output has been started
- $MSG_shown = true;
- if (!isset($MSG)) return;
- $shown = array();
- foreach ($MSG as $msg) {
- $hash = md5($msg['msg']);
- if (isset($shown[$hash])) continue; // skip double messages
- if (info_msg_allowed($msg)) {
- print '<div class="'.$msg['lvl'].'">';
- print $msg['msg'];
- print '</div>';
- }
- $shown[$hash] = 1;
- }
- unset($GLOBALS['MSG']);
- }
- /**
- * Prints the registration form
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @deprecated 2020-07-18
- */
- function html_register() {
- dbg_deprecated(UserRegister::class .'::show()');
- (new dokuwiki\Ui\UserRegister)->show();
- }
- /**
- * Print the update profile form
- *
- * @author Christopher Smith <chris@jalakai.co.uk>
- * @author Andreas Gohr <andi@splitbrain.org>
- * @deprecated 2020-07-18
- */
- function html_updateprofile() {
- dbg_deprecated(UserProfile::class .'::show()');
- (new dokuwiki\Ui\UserProfile)->show();
- }
- /**
- * Preprocess edit form data
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @deprecated 2020-07-18
- */
- function html_edit() {
- dbg_deprecated(Editor::class .'::show()');
- (new dokuwiki\Ui\Editor)->show();
- }
- /**
- * Display the default edit form
- *
- * Is the default action for HTML_EDIT_FORMSELECTION.
- *
- * @param array $param
- * @deprecated 2020-07-18
- */
- function html_edit_form($param) {
- dbg_deprecated(Editor::class .'::addTextarea()');
- (new dokuwiki\Ui\Editor)->addTextarea($param);
- }
- /**
- * prints some debug info
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- function html_debug() {
- global $conf;
- global $lang;
- /** @var AuthPlugin $auth */
- global $auth;
- global $INFO;
- //remove sensitive data
- $cnf = $conf;
- debug_guard($cnf);
- $nfo = $INFO;
- debug_guard($nfo);
- $ses = $_SESSION;
- debug_guard($ses);
- print '<html><body>';
- print '<p>When reporting bugs please send all the following ';
- print 'output as a mail to andi@splitbrain.org ';
- print 'The best way to do this is to save this page in your browser</p>';
- print '<b>$INFO:</b><pre>';
- print_r($nfo);
- print '</pre>';
- print '<b>$_SERVER:</b><pre>';
- print_r($_SERVER);
- print '</pre>';
- print '<b>$conf:</b><pre>';
- print_r($cnf);
- print '</pre>';
- print '<b>DOKU_BASE:</b><pre>';
- print DOKU_BASE;
- print '</pre>';
- print '<b>abs DOKU_BASE:</b><pre>';
- print DOKU_URL;
- print '</pre>';
- print '<b>rel DOKU_BASE:</b><pre>';
- print dirname($_SERVER['PHP_SELF']).'/';
- print '</pre>';
- print '<b>PHP Version:</b><pre>';
- print phpversion();
- print '</pre>';
- print '<b>locale:</b><pre>';
- print setlocale(LC_ALL,0);
- print '</pre>';
- print '<b>encoding:</b><pre>';
- print $lang['encoding'];
- print '</pre>';
- if ($auth) {
- print '<b>Auth backend capabilities:</b><pre>';
- foreach ($auth->getCapabilities() as $cando) {
- print ' '.str_pad($cando,16) .' => '. (int)$auth->canDo($cando) . DOKU_LF;
- }
- print '</pre>';
- }
- print '<b>$_SESSION:</b><pre>';
- print_r($ses);
- print '</pre>';
- print '<b>Environment:</b><pre>';
- print_r($_ENV);
- print '</pre>';
- print '<b>PHP settings:</b><pre>';
- $inis = ini_get_all();
- print_r($inis);
- print '</pre>';
- if (function_exists('apache_get_version')) {
- $apache = array();
- $apache['version'] = apache_get_version();
- if (function_exists('apache_get_modules')) {
- $apache['modules'] = apache_get_modules();
- }
- print '<b>Apache</b><pre>';
- print_r($apache);
- print '</pre>';
- }
- print '</body></html>';
- }
- /**
- * Form to request a new password for an existing account
- *
- * @author Benoit Chesneau <benoit@bchesneau.info>
- * @author Andreas Gohr <gohr@cosmocode.de>
- * @deprecated 2020-07-18
- */
- function html_resendpwd() {
- dbg_deprecated(UserResendPwd::class .'::show()');
- (new dokuwiki\Ui\UserResendPwd)->show();
- }
- /**
- * Return the TOC rendered to XHTML
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param array $toc
- * @return string html
- */
- function html_TOC($toc) {
- if (!count($toc)) return '';
- global $lang;
- $out = '<!-- TOC START -->'.DOKU_LF;
- $out .= '<div id="dw__toc" class="dw__toc">'.DOKU_LF;
- $out .= '<h3 class="toggle">';
- $out .= $lang['toc'];
- $out .= '</h3>'.DOKU_LF;
- $out .= '<div>'.DOKU_LF;
- $out .= html_buildlist($toc, 'toc', 'html_list_toc', null, true);
- $out .= '</div>'.DOKU_LF.'</div>'.DOKU_LF;
- $out .= '<!-- TOC END -->'.DOKU_LF;
- return $out;
- }
- /**
- * Callback for html_buildlist
- *
- * @param array $item
- * @return string html
- */
- function html_list_toc($item) {
- if (isset($item['hid'])){
- $link = '#'.$item['hid'];
- } else {
- $link = $item['link'];
- }
- return '<a href="'.$link.'">'.hsc($item['title']).'</a>';
- }
- /**
- * Helper function to build TOC items
- *
- * Returns an array ready to be added to a TOC array
- *
- * @param string $link - where to link (if $hash set to '#' it's a local anchor)
- * @param string $text - what to display in the TOC
- * @param int $level - nesting level
- * @param string $hash - is prepended to the given $link, set blank if you want full links
- * @return array the toc item
- */
- function html_mktocitem($link, $text, $level, $hash='#') {
- return array(
- 'link' => $hash.$link,
- 'title' => $text,
- 'type' => 'ul',
- 'level' => $level
- );
- }
- /**
- * Output a Doku_Form object.
- * Triggers an event with the form name: HTML_{$name}FORM_OUTPUT
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- *
- * @param string $name The name of the form
- * @param Doku_Form $form The form
- * @return void
- * @deprecated 2020-07-18
- */
- function html_form($name, $form) {
- dbg_deprecated('use dokuwiki\Form\Form instead of Doku_Form');
- // Safety check in case the caller forgets.
- $form->endFieldset();
- Event::createAndTrigger('HTML_'.strtoupper($name).'FORM_OUTPUT', $form, 'html_form_output', false);
- }
- /**
- * Form print function.
- * Just calls printForm() on the form object.
- *
- * @param Doku_Form $form The form
- * @return void
- * @deprecated 2020-07-18
- */
- function html_form_output($form) {
- dbg_deprecated('use dokuwiki\Form\Form::toHTML()');
- $form->printForm();
- }
- /**
- * Embed a flash object in HTML
- *
- * This will create the needed HTML to embed a flash movie in a cross browser
- * compatble way using valid XHTML
- *
- * The parameters $params, $flashvars and $atts need to be associative arrays.
- * No escaping needs to be done for them. The alternative content *has* to be
- * escaped because it is used as is. If no alternative content is given
- * $lang['noflash'] is used.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @link http://latrine.dgx.cz/how-to-correctly-insert-a-flash-into-xhtml
- *
- * @param string $swf - the SWF movie to embed
- * @param int $width - width of the flash movie in pixels
- * @param int $height - height of the flash movie in pixels
- * @param array $params - additional parameters (<param>)
- * @param array $flashvars - parameters to be passed in the flashvar parameter
- * @param array $atts - additional attributes for the <object> tag
- * @param string $alt - alternative content (is NOT automatically escaped!)
- * @return string - the XHTML markup
- */
- function html_flashobject($swf,$width,$height,$params=null,$flashvars=null,$atts=null,$alt=''){
- global $lang;
- $out = '';
- // prepare the object attributes
- if(is_null($atts)) $atts = array();
- $atts['width'] = (int) $width;
- $atts['height'] = (int) $height;
- if(!$atts['width']) $atts['width'] = 425;
- if(!$atts['height']) $atts['height'] = 350;
- // add object attributes for standard compliant browsers
- $std = $atts;
- $std['type'] = 'application/x-shockwave-flash';
- $std['data'] = $swf;
- // add object attributes for IE
- $ie = $atts;
- $ie['classid'] = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
- // open object (with conditional comments)
- $out .= '<!--[if !IE]> -->'.NL;
- $out .= '<object '.buildAttributes($std).'>'.NL;
- $out .= '<!-- <![endif]-->'.NL;
- $out .= '<!--[if IE]>'.NL;
- $out .= '<object '.buildAttributes($ie).'>'.NL;
- $out .= ' <param name="movie" value="'.hsc($swf).'" />'.NL;
- $out .= '<!--><!-- -->'.NL;
- // print params
- if(is_array($params)) foreach($params as $key => $val){
- $out .= ' <param name="'.hsc($key).'" value="'.hsc($val).'" />'.NL;
- }
- // add flashvars
- if(is_array($flashvars)){
- $out .= ' <param name="FlashVars" value="'.buildURLparams($flashvars).'" />'.NL;
- }
- // alternative content
- if($alt){
- $out .= $alt.NL;
- }else{
- $out .= $lang['noflash'].NL;
- }
- // finish
- $out .= '</object>'.NL;
- $out .= '<!-- <![endif]-->'.NL;
- return $out;
- }
- /**
- * Prints HTML code for the given tab structure
- *
- * @param array $tabs tab structure
- * @param string $current_tab the current tab id
- * @return void
- */
- function html_tabs($tabs, $current_tab = null) {
- echo '<ul class="tabs">'.NL;
- foreach ($tabs as $id => $tab) {
- html_tab($tab['href'], $tab['caption'], $id === $current_tab);
- }
- echo '</ul>'.NL;
- }
- /**
- * Prints a single tab
- *
- * @author Kate Arzamastseva <pshns@ukr.net>
- * @author Adrian Lang <mail@adrianlang.de>
- *
- * @param string $href - tab href
- * @param string $caption - tab caption
- * @param boolean $selected - is tab selected
- * @return void
- */
- function html_tab($href, $caption, $selected = false) {
- $tab = '<li>';
- if ($selected) {
- $tab .= '<strong>';
- } else {
- $tab .= '<a href="' . hsc($href) . '">';
- }
- $tab .= hsc($caption)
- . '</' . ($selected ? 'strong' : 'a') . '>'
- . '</li>'.NL;
- echo $tab;
- }
- /**
- * Display size change
- *
- * @param int $sizechange - size of change in Bytes
- * @param Doku_Form $form - (optional) form to add elements to
- * @return void|string
- */
- function html_sizechange($sizechange, $form = null) {
- if (isset($sizechange)) {
- $class = 'sizechange';
- $value = filesize_h(abs($sizechange));
- if ($sizechange > 0) {
- $class .= ' positive';
- $value = '+' . $value;
- } elseif ($sizechange < 0) {
- $class .= ' negative';
- $value = '-' . $value;
- } else {
- $value = '±' . $value;
- }
- if (!isset($form)) {
- return '<span class="'.$class.'">'.$value.'</span>';
- } else { // Doku_Form
- $form->addElement(form_makeOpenTag('span', array('class' => $class)));
- $form->addElement($value);
- $form->addElement(form_makeCloseTag('span'));
- }
- }
- }
|