xref: /dokuwiki/inc/html.php (revision f3f0262c480d7e509b008d37c90aed884532bba8)
1*f3f0262cSandi<?
2*f3f0262cSandiinclude_once("inc/format.php");
3*f3f0262cSandi
4*f3f0262cSandi/**
5*f3f0262cSandi * Convenience function to quickly build a wikilink
6*f3f0262cSandi */
7*f3f0262cSandifunction html_wikilink($url,$name='',$search=''){
8*f3f0262cSandi  global $conf;
9*f3f0262cSandi  $link         = array();
10*f3f0262cSandi  $link['url']  = $url;
11*f3f0262cSandi  $link['name'] = $name;
12*f3f0262cSandi  $link         = format_link_wiki($link);
13*f3f0262cSandi
14*f3f0262cSandi  if($search){
15*f3f0262cSandi    ($conf['userewrite']) ? $link['url'].='?s=' : $link['url'].='&amp;s=';
16*f3f0262cSandi    $link['url'] .= urlencode($search);
17*f3f0262cSandi  }
18*f3f0262cSandi
19*f3f0262cSandi  return format_link_build($link);
20*f3f0262cSandi}
21*f3f0262cSandi
22*f3f0262cSandi/**
23*f3f0262cSandi * The loginform
24*f3f0262cSandi */
25*f3f0262cSandifunction html_login(){
26*f3f0262cSandi  global $lang;
27*f3f0262cSandi  global $conf;
28*f3f0262cSandi  global $ID;
29*f3f0262cSandi
30*f3f0262cSandi  print parsedLocale('login');
31*f3f0262cSandi  ?>
32*f3f0262cSandi    <div align="center">
33*f3f0262cSandi    <form action="<?=script()?>" accept-charset="<?=$lang['encoding']?>" method="post">
34*f3f0262cSandi      <fieldset>
35*f3f0262cSandi        <legend><?=$lang['btn_login']?></legend>
36*f3f0262cSandi        <input type="hidden" name="id" value="<?=$ID?>" />
37*f3f0262cSandi        <input type="hidden" name="do" value="login" />
38*f3f0262cSandi        <label>
39*f3f0262cSandi          <span><?=$lang['user']?></span>
40*f3f0262cSandi          <input type="text" name="u" value="<?=formText($_REQUEST['u'])?>" class="edit" />
41*f3f0262cSandi        </label><br />
42*f3f0262cSandi        <label>
43*f3f0262cSandi          <span><?=$lang['pass']?></span>
44*f3f0262cSandi          <input type="password" name="p" class="edit" />
45*f3f0262cSandi        </label><br />
46*f3f0262cSandi        <input type="submit" value="<?=$lang['btn_login']?>" class="button" />
47*f3f0262cSandi      </fieldset>
48*f3f0262cSandi    </form>
49*f3f0262cSandi  <?
50*f3f0262cSandi    if($conf['openregister']){
51*f3f0262cSandi      print '<p>';
52*f3f0262cSandi      print $lang['reghere'];
53*f3f0262cSandi      print ': <a href="'.wl($ID,'do=register').'" class="wikilink1">'.$lang['register'].'</a>';
54*f3f0262cSandi      print '</p>';
55*f3f0262cSandi    }
56*f3f0262cSandi  ?>
57*f3f0262cSandi    </div>
58*f3f0262cSandi  <?
59*f3f0262cSandi  if(@file_exists('includes/login.txt')){
60*f3f0262cSandi    print io_cacheParse('includes/login.txt');
61*f3f0262cSandi  }
62*f3f0262cSandi}
63*f3f0262cSandi
64*f3f0262cSandi/**
65*f3f0262cSandi * shows the edit/source/show button dependent on current mode
66*f3f0262cSandi */
67*f3f0262cSandifunction html_editbutton(){
68*f3f0262cSandi  global $ID;
69*f3f0262cSandi  global $REV;
70*f3f0262cSandi  global $ACT;
71*f3f0262cSandi  global $INFO;
72*f3f0262cSandi
73*f3f0262cSandi  if($ACT == 'show' || $ACT == 'search'){
74*f3f0262cSandi    if($INFO['writable']){
75*f3f0262cSandi      if($INFO['exists']){
76*f3f0262cSandi        $r = html_btn('edit',$ID,'e',array('do' => 'edit','rev' => $REV),'post');
77*f3f0262cSandi      }else{
78*f3f0262cSandi        $r = html_btn('create',$ID,'e',array('do' => 'edit','rev' => $REV),'post');
79*f3f0262cSandi      }
80*f3f0262cSandi    }else{
81*f3f0262cSandi      $r = html_btn('source',$ID,'v',array('do' => 'edit','rev' => $REV),'post');
82*f3f0262cSandi    }
83*f3f0262cSandi  }else{
84*f3f0262cSandi    $r = html_btn('show',$ID,'v',array('do' => 'show'));
85*f3f0262cSandi  }
86*f3f0262cSandi  return $r;
87*f3f0262cSandi}
88*f3f0262cSandi
89*f3f0262cSandifunction html_secedit_button($section,$p){
90*f3f0262cSandi  global $ID;
91*f3f0262cSandi  global $lang;
92*f3f0262cSandi  $secedit  = '';
93*f3f0262cSandi  if($p) $secedit .= "</p>\n";
94*f3f0262cSandi  $secedit .= '<div class="secedit">';
95*f3f0262cSandi  $secedit .= html_btn('secedit',$ID,'',
96*f3f0262cSandi                        array('do'      => 'edit',
97*f3f0262cSandi                              'lines'   => "$section"),
98*f3f0262cSandi                              'post');
99*f3f0262cSandi  $secedit .= '</div>';
100*f3f0262cSandi  if($p) $secedit .= "\n<p>";
101*f3f0262cSandi  return $secedit;
102*f3f0262cSandi}
103*f3f0262cSandi
104*f3f0262cSandifunction html_secedit($text,$show=true){
105*f3f0262cSandi  global $INFO;
106*f3f0262cSandi  if($INFO['writable'] && $show){
107*f3f0262cSandi    $text = preg_replace('#<!-- SECTION \[(\d+-\d+)\] -->#e',
108*f3f0262cSandi                         "html_secedit_button('\\1',true)",
109*f3f0262cSandi                         $text);
110*f3f0262cSandi    $text = preg_replace('#<!-- SECTION \[(\d+-)\] -->#e',
111*f3f0262cSandi                         "html_secedit_button('\\1',false)",
112*f3f0262cSandi                         $text);
113*f3f0262cSandi  }else{
114*f3f0262cSandi    $text = preg_replace('#<!-- SECTION \[(\d*-\d*)\] -->#e','',$text);
115*f3f0262cSandi  }
116*f3f0262cSandi  return $text;
117*f3f0262cSandi}
118*f3f0262cSandi
119*f3f0262cSandi/**
120*f3f0262cSandi * displays the breadcrumbs trace
121*f3f0262cSandi */
122*f3f0262cSandifunction html_breadcrumbs(){
123*f3f0262cSandi  global $lang;
124*f3f0262cSandi  global $conf;
125*f3f0262cSandi
126*f3f0262cSandi  //check if enabled
127*f3f0262cSandi  if(!$conf['breadcrumbs']) return;
128*f3f0262cSandi
129*f3f0262cSandi  $crumbs = breadcrumbs(); //setup crumb trace
130*f3f0262cSandi  print '<div class="breadcrumbs">';
131*f3f0262cSandi  print $lang['breadcrumb'].':';
132*f3f0262cSandi  foreach ($crumbs as $crumb){
133*f3f0262cSandi    print ' &raquo; ';
134*f3f0262cSandi    print '<a href="'.wl($crumb).'" class="breadcrumbs" onclick="return svchk()" onkeypress="return svchk()" title="'.$crumb.'">'.noNS($crumb).'</a>';
135*f3f0262cSandi  }
136*f3f0262cSandi  print '</div>';
137*f3f0262cSandi}
138*f3f0262cSandi
139*f3f0262cSandi/**
140*f3f0262cSandi * display the HTML head and metadata
141*f3f0262cSandi */
142*f3f0262cSandifunction html_head(){
143*f3f0262cSandi  global $ID;
144*f3f0262cSandi  global $ACT;
145*f3f0262cSandi  global $INFO;
146*f3f0262cSandi  global $conf;
147*f3f0262cSandi  global $lang;
148*f3f0262cSandi
149*f3f0262cSandi  print '<'.'?xml version="1.0"?'.">\n";
150*f3f0262cSandi  print '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"';
151*f3f0262cSandi  print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
152*f3f0262cSandi  print "\n";
153*f3f0262cSandi?>
154*f3f0262cSandi  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?=$conf['lang']?>" lang="<?=$conf['lang']?>" dir="ltr">
155*f3f0262cSandi  <head>
156*f3f0262cSandi    <title><?=$ID?> [<?=$conf['title']?>]</title>
157*f3f0262cSandi    <meta http-equiv="Content-Type" content="text/html; charset=<?=$lang['encoding']?>" />
158*f3f0262cSandi    <meta name="generator" content="DokuWiki <?=DOKUWIKIVERSION?>" />
159*f3f0262cSandi    <link rel="stylesheet" media="screen" type="text/css" href="<?=getBaseURL()?>style.css" />
160*f3f0262cSandi    <link rel="stylesheet" media="print" type="text/css" href="<?=getBaseURL()?>print.css" />
161*f3f0262cSandi    <link rel="shortcut icon" href="<?=getBaseURL()?>images/favicon.ico" />
162*f3f0262cSandi    <link rel="start" href="<?=wl()?>" />
163*f3f0262cSandi    <link rel="contents" href="<?=wl($ID,'do=index')?>" title="<?=$lang['index']?>" />
164*f3f0262cSandi    <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="<?=getBaseURL()?>feed.php" />
165*f3f0262cSandi    <link rel="alternate" type="application/rss+xml" title="Current Namespace" href="<?=getBaseURL()?>feed.php?mode=list&amp;ns=<?=$INFO['namespace']?>" />
166*f3f0262cSandi    <link rel="alternate" type="text/html" title="Plain HTML" href="<?=wl($ID,'do=export_html')?>" />
167*f3f0262cSandi    <link rel="alternate" type="text/plain" title="Wiki Markup" href="<?=wl($ID, 'do=export_raw')?>" />
168*f3f0262cSandi<?
169*f3f0262cSandi  if($ACT=='show' || $ACT=='export_html'){
170*f3f0262cSandi    if($INFO['exists']){
171*f3f0262cSandi      print '    <meta name="robots" content="index,follow" />'."\n";
172*f3f0262cSandi      print '    <meta name="date" content="'.date('Y-m-d\TH:i:sO',$INFO['lastmod']).'" />'."\n";
173*f3f0262cSandi    }else{
174*f3f0262cSandi      print '    <meta name="robots" content="noindex,follow" />'."\n";
175*f3f0262cSandi    }
176*f3f0262cSandi  }else{
177*f3f0262cSandi    print '    <meta name="robots" content="noindex,nofollow" />'."\n";
178*f3f0262cSandi  }
179*f3f0262cSandi?>
180*f3f0262cSandi
181*f3f0262cSandi    <script language="JavaScript" type="text/javascript">
182*f3f0262cSandi      var alertText   = '<?=$lang['qb_alert']?>';
183*f3f0262cSandi      var notSavedYet = '<?=$lang['notsavedyet']?>';
184*f3f0262cSandi      var baseURL     = '<?=getBaseURL()?>';
185*f3f0262cSandi    </script>
186*f3f0262cSandi    <script language="JavaScript" type="text/javascript" src="<?=getBaseURL()?>script.js"></script>
187*f3f0262cSandi
188*f3f0262cSandi    <!--[if gte IE 5]>
189*f3f0262cSandi    <style type="text/css">
190*f3f0262cSandi      /* that IE 5+ conditional comment makes this only visible in IE 5+ */
191*f3f0262cSandi      img { behavior: url("<?=getBaseURL()?>pngbehavior.htc"); } /* IE bugfix for transparent PNGs */
192*f3f0262cSandi    </style>
193*f3f0262cSandi    <![endif]-->
194*f3f0262cSandi
195*f3f0262cSandi    <?@include("includes/meta.html")?>
196*f3f0262cSandi  </head>
197*f3f0262cSandi<?
198*f3f0262cSandi}
199*f3f0262cSandi
200*f3f0262cSandi/**
201*f3f0262cSandi * Displays a button (using it's own form)
202*f3f0262cSandi */
203*f3f0262cSandifunction html_btn($name,$id,$akey,$params,$method='get'){
204*f3f0262cSandi  global $conf;
205*f3f0262cSandi  global $lang;
206*f3f0262cSandi
207*f3f0262cSandi  $label = $lang['btn_'.$name];
208*f3f0262cSandi
209*f3f0262cSandi  $ret = '';
210*f3f0262cSandi
211*f3f0262cSandi  $id = idfilter($id);
212*f3f0262cSandi
213*f3f0262cSandi  //make nice URLs even for buttons
214*f3f0262cSandi  $link = getBaseURL().'/';
215*f3f0262cSandi  $link = preg_replace('#//$#','/',$link);
216*f3f0262cSandi  if(!$conf['userewrite']){
217*f3f0262cSandi    $script = $link.'doku.php';
218*f3f0262cSandi    $params['id'] = $id;
219*f3f0262cSandi  }else{
220*f3f0262cSandi    $script = $link.$id;
221*f3f0262cSandi  }
222*f3f0262cSandi
223*f3f0262cSandi  $ret .= '<form class="button" method="'.$method.'" action="'.$script.'" onsubmit="return svchk()">';
224*f3f0262cSandi
225*f3f0262cSandi  reset($params);
226*f3f0262cSandi  while (list($key, $val) = each($params)) {
227*f3f0262cSandi    $ret .= '<input type="hidden" name="'.$key.'" ';
228*f3f0262cSandi    $ret .= 'value="'.htmlspecialchars($val).'" />';
229*f3f0262cSandi  }
230*f3f0262cSandi
231*f3f0262cSandi  $ret .= '<input type="submit" value="'.htmlspecialchars($label).'" class="button" ';
232*f3f0262cSandi  if($akey){
233*f3f0262cSandi    $ret .= 'title="ALT+'.strtoupper($akey).'" ';
234*f3f0262cSandi    $ret .= 'accesskey="'.$akey.'" ';
235*f3f0262cSandi  }
236*f3f0262cSandi  $ret .= '/>';
237*f3f0262cSandi  $ret .= '</form>';
238*f3f0262cSandi
239*f3f0262cSandi  return $ret;
240*f3f0262cSandi}
241*f3f0262cSandi
242*f3f0262cSandi/**
243*f3f0262cSandi * Check for the given permission or prints an error
244*f3f0262cSandi */
245*f3f0262cSandifunction html_acl($perm){
246*f3f0262cSandi  global $INFO;
247*f3f0262cSandi  if($INFO['perm'] >= $perm) return true;
248*f3f0262cSandi
249*f3f0262cSandi  print parsedLocale('denied');
250*f3f0262cSandi  return false;
251*f3f0262cSandi}
252*f3f0262cSandi
253*f3f0262cSandi/**
254*f3f0262cSandi * Displays the page header and calls html_head()
255*f3f0262cSandi */
256*f3f0262cSandifunction html_header(){
257*f3f0262cSandi  global $ID;
258*f3f0262cSandi  global $REV;
259*f3f0262cSandi  global $lang;
260*f3f0262cSandi  global $conf;
261*f3f0262cSandi  html_head();
262*f3f0262cSandi?>
263*f3f0262cSandi<body>
264*f3f0262cSandi  <div class="all">
265*f3f0262cSandi  <?
266*f3f0262cSandi    html_msgarea();
267*f3f0262cSandi    @include("includes/topheader.html")
268*f3f0262cSandi  ?>
269*f3f0262cSandi  <div class="header">
270*f3f0262cSandi    <div class="pagename">
271*f3f0262cSandi      [[<a href="<?=wl($ID,'do=backlink')?>" onclick="return svchk()" onkeypress="return svchk()"><?=$ID?></a>]]
272*f3f0262cSandi    </div>
273*f3f0262cSandi    <div class="logo">
274*f3f0262cSandi      <a href="<?=wl()?>" name="top" accesskey="h" title="[ALT+H]" onclick="return svchk()" onkeypress="return svchk()"><?=$conf['title']?></a>
275*f3f0262cSandi    </div>
276*f3f0262cSandi  </div>
277*f3f0262cSandi  <?@include("includes/header.html")?>
278*f3f0262cSandi
279*f3f0262cSandi  <div class="bar" id="bar_top">
280*f3f0262cSandi    <div class="bar-left" id="bar_topleft">
281*f3f0262cSandi      <?=html_editbutton()?>
282*f3f0262cSandi      <?=html_btn(revs,$ID,'r',array('do' => 'revisions'))?>
283*f3f0262cSandi    </div>
284*f3f0262cSandi
285*f3f0262cSandi    <div class="bar-right" id="bar_topright">
286*f3f0262cSandi      <?=html_btn(recent,'','r',array('do' => 'recent'))?>
287*f3f0262cSandi      <form action="<?=wl()?>" accept-charset="<?=$lang['encoding']?>">
288*f3f0262cSandi      <input type="hidden" name="do" value="search" />
289*f3f0262cSandi      <input type="text" name="id" class="edit" />
290*f3f0262cSandi			<input type="submit" value="<?=$lang['btn_search']?>" class="button" />
291*f3f0262cSandi      </form>&nbsp;
292*f3f0262cSandi    </div>
293*f3f0262cSandi  </div>
294*f3f0262cSandi
295*f3f0262cSandi  <?
296*f3f0262cSandi    flush();
297*f3f0262cSandi    html_breadcrumbs();
298*f3f0262cSandi    @include("includes/pageheader.html");
299*f3f0262cSandi  ?>
300*f3f0262cSandi  <div class="page">
301*f3f0262cSandi  <!-- wikipage start -->
302*f3f0262cSandi<?
303*f3f0262cSandi}
304*f3f0262cSandi
305*f3f0262cSandi/**
306*f3f0262cSandi * Displays some Metadata like who's logged in and the last modified
307*f3f0262cSandi * date - do not confuse this with the HTML meta header.
308*f3f0262cSandi */
309*f3f0262cSandifunction html_metainfo(){
310*f3f0262cSandi  global $conf;
311*f3f0262cSandi  global $lang;
312*f3f0262cSandi  global $INFO;
313*f3f0262cSandi  global $REV;
314*f3f0262cSandi
315*f3f0262cSandi  $fn = $INFO['filepath'];
316*f3f0262cSandi  if(!$conf['fullpath']){
317*f3f0262cSandi    if($REV){
318*f3f0262cSandi      $fn = str_replace(realpath($conf['olddir']).DIRECTORY_SEPARATOR,'',$fn);
319*f3f0262cSandi    }else{
320*f3f0262cSandi      $fn = str_replace(realpath($conf['datadir']).DIRECTORY_SEPARATOR,'',$fn);
321*f3f0262cSandi    }
322*f3f0262cSandi  }
323*f3f0262cSandi  $date = date($conf['dformat'],$INFO['lastmod']);
324*f3f0262cSandi
325*f3f0262cSandi  print '<div class="meta">';
326*f3f0262cSandi  if($_SERVER['REMOTE_USER']){
327*f3f0262cSandi    print '<div class="user">';
328*f3f0262cSandi    print $lang['loggedinas'].': '.$_SERVER['REMOTE_USER'];
329*f3f0262cSandi    print '</div>';
330*f3f0262cSandi  }
331*f3f0262cSandi  print ' &nbsp; ';
332*f3f0262cSandi  if($INFO['exists']){
333*f3f0262cSandi    print $fn;
334*f3f0262cSandi    print ' &middot; ';
335*f3f0262cSandi    print $lang['lastmod'];
336*f3f0262cSandi    print ': ';
337*f3f0262cSandi    print $date;
338*f3f0262cSandi    if($INFO['locked']){
339*f3f0262cSandi      print ' &middot; ';
340*f3f0262cSandi      print $lang['lockedby'];
341*f3f0262cSandi      print ': ';
342*f3f0262cSandi      print $INFO['locked'];
343*f3f0262cSandi    }
344*f3f0262cSandi  }
345*f3f0262cSandi  print '</div>';
346*f3f0262cSandi}
347*f3f0262cSandi
348*f3f0262cSandifunction html_footer(){
349*f3f0262cSandi  global $ID;
350*f3f0262cSandi  global $REV;
351*f3f0262cSandi  global $INFO;
352*f3f0262cSandi  global $lang;
353*f3f0262cSandi  global $conf;
354*f3f0262cSandi?>
355*f3f0262cSandi  <!-- wikipage stop -->
356*f3f0262cSandi  </div>
357*f3f0262cSandi  <div class="clearer">&nbsp;</div>
358*f3f0262cSandi  <?
359*f3f0262cSandi    flush();
360*f3f0262cSandi    @include("includes/pagefooter.html");
361*f3f0262cSandi    html_metainfo();
362*f3f0262cSandi  ?>
363*f3f0262cSandi  <div class="bar" id="bar_bottom">
364*f3f0262cSandi    <div class="bar-left" id="bar_bottomleft">
365*f3f0262cSandi      <?=html_editbutton()?>
366*f3f0262cSandi      <?=html_btn(revs,$ID,'r',array('do' => 'revisions'))?>
367*f3f0262cSandi    </div>
368*f3f0262cSandi
369*f3f0262cSandi    <div class="bar-right" id="bar_bottomright">
370*f3f0262cSandi      <?
371*f3f0262cSandi        if($conf['useacl']){
372*f3f0262cSandi          if($_SERVER['REMOTE_USER']){
373*f3f0262cSandi            print html_btn('logout',$ID,'',array('do' => 'logout',));
374*f3f0262cSandi          }else{
375*f3f0262cSandi            print html_btn('login',$ID,'',array('do' => 'login'));
376*f3f0262cSandi          }
377*f3f0262cSandi        }
378*f3f0262cSandi      ?>
379*f3f0262cSandi      <?=html_btn(index,$ID,'x',array('do' => 'index'))?>
380*f3f0262cSandi      <a href="#top"><input type="button" class="button" value="<?=$lang['btn_top']?>" /></a>&nbsp;
381*f3f0262cSandi    </div>
382*f3f0262cSandi  </div>
383*f3f0262cSandi  <?@include("includes/footer.html")?>
384*f3f0262cSandi  </div>
385*f3f0262cSandi  </body>
386*f3f0262cSandi  </html>
387*f3f0262cSandi<?
388*f3f0262cSandi}
389*f3f0262cSandi
390*f3f0262cSandifunction html_toc($toc){
391*f3f0262cSandi  global $lang;
392*f3f0262cSandi  $ret  = '';
393*f3f0262cSandi  $ret .= '<div class="toc">';
394*f3f0262cSandi  $ret .=   '<div class="tocheader">';
395*f3f0262cSandi  $ret .=      $lang['toc'];
396*f3f0262cSandi  $ret .=     ' <script type="text/javascript">';
397*f3f0262cSandi  $ret .=     'showTocToggle("+","-")';
398*f3f0262cSandi  $ret .=     '</script>';
399*f3f0262cSandi  $ret .=   '</div>';
400*f3f0262cSandi  $ret .=   '<div id="tocinside">';
401*f3f0262cSandi  $ret .=   html_buildlist($toc,'toc','html_list_toc');
402*f3f0262cSandi  $ret .=   '</div>';
403*f3f0262cSandi  $ret .= '</div>';
404*f3f0262cSandi  return $ret;
405*f3f0262cSandi}
406*f3f0262cSandi
407*f3f0262cSandi/**
408*f3f0262cSandi * User function for html_buildlist()
409*f3f0262cSandi */
410*f3f0262cSandifunction html_list_toc($item){
411*f3f0262cSandi  $ret  = '';
412*f3f0262cSandi  $ret .= '<a href="#'.$item['id'].'" class="toc">';
413*f3f0262cSandi  $ret .= $item['name'];
414*f3f0262cSandi  $ret .= '</a>';
415*f3f0262cSandi  return $ret;
416*f3f0262cSandi}
417*f3f0262cSandi
418*f3f0262cSandifunction html_show($text=''){
419*f3f0262cSandi  global $ID;
420*f3f0262cSandi  global $REV;
421*f3f0262cSandi  global $HIGH;
422*f3f0262cSandi  //disable section editing for old revisions or in preview
423*f3f0262cSandi  if($text || $REV){
424*f3f0262cSandi    global $parser;
425*f3f0262cSandi    $parser['secedit'] = false;
426*f3f0262cSandi  }
427*f3f0262cSandi
428*f3f0262cSandi  if ($text){
429*f3f0262cSandi    //PreviewHeader
430*f3f0262cSandi    print parsedLocale('preview');
431*f3f0262cSandi    print '<div class="preview">';
432*f3f0262cSandi    print html_secedit(parse($text),false);
433*f3f0262cSandi    print '</div>';
434*f3f0262cSandi  }else{
435*f3f0262cSandi    if ($REV) print parsedLocale('showrev');
436*f3f0262cSandi    $html = parsedWiki($ID,$REV,true);
437*f3f0262cSandi    $html = html_secedit($html);
438*f3f0262cSandi    print html_hilight($html,$HIGH);
439*f3f0262cSandi  }
440*f3f0262cSandi}
441*f3f0262cSandi
442*f3f0262cSandi/**
443*f3f0262cSandi * Highlights searchqueries in HTML code
444*f3f0262cSandi */
445*f3f0262cSandifunction html_hilight($html,$query){
446*f3f0262cSandi  $queries = preg_split ("/\s/",$query,-1,PREG_SPLIT_NO_EMPTY);
447*f3f0262cSandi  foreach ($queries as $q){
448*f3f0262cSandi    $q = preg_quote($q,'/');
449*f3f0262cSandi    $html = preg_replace("/((<[^>]*)|$q)/ie", '"\2"=="\1"? "\1":"<span class=\"search_hit\">\1</span>"', $html);
450*f3f0262cSandi  }
451*f3f0262cSandi  return $html;
452*f3f0262cSandi}
453*f3f0262cSandi
454*f3f0262cSandi/**
455*f3f0262cSandi * This function runs a search and displays the result
456*f3f0262cSandi */
457*f3f0262cSandifunction html_search(){
458*f3f0262cSandi  require_once("inc/search.php");
459*f3f0262cSandi  global $conf;
460*f3f0262cSandi  global $QUERY;
461*f3f0262cSandi  global $ID;
462*f3f0262cSandi  global $lang;
463*f3f0262cSandi
464*f3f0262cSandi  print parsedLocale('searchpage');
465*f3f0262cSandi  flush();
466*f3f0262cSandi
467*f3f0262cSandi  //do quick pagesearch
468*f3f0262cSandi  $data = array();
469*f3f0262cSandi  search($data,$conf['datadir'],'search_pagename',array(query => $QUERY));
470*f3f0262cSandi  if(count($data)){
471*f3f0262cSandi    sort($data);
472*f3f0262cSandi    print '<div class="search_quickresult">';
473*f3f0262cSandi    print '<b>'.$lang[quickhits].':</b><br />';
474*f3f0262cSandi    foreach($data as $row){
475*f3f0262cSandi      print '<div class="search_quickhits">';
476*f3f0262cSandi      print html_wikilink(':'.$row['id'],$row['id']);
477*f3f0262cSandi      print '</div> ';
478*f3f0262cSandi    }
479*f3f0262cSandi    //clear float (see http://www.complexspiral.com/publications/containing-floats/)
480*f3f0262cSandi    print '<div class="clearer">&nbsp;</div>';
481*f3f0262cSandi    print '</div>';
482*f3f0262cSandi  }
483*f3f0262cSandi  flush();
484*f3f0262cSandi
485*f3f0262cSandi  //do fulltext search
486*f3f0262cSandi  $data = array();
487*f3f0262cSandi  search($data,$conf['datadir'],'search_fulltext',array(query => $QUERY));
488*f3f0262cSandi  if(count($data)){
489*f3f0262cSandi    usort($data,'sort_search_fulltext');
490*f3f0262cSandi    foreach($data as $row){
491*f3f0262cSandi      print '<div class="search_result">';
492*f3f0262cSandi      print html_wikilink(':'.$row['id'],$row['id'],$QUERY);
493*f3f0262cSandi      print ': <span class="search_cnt">'.$row['count'].' '.$lang['hits'].'</span><br />';
494*f3f0262cSandi      print '<div class="search_snippet">'.$row['snippet'].'</div>';
495*f3f0262cSandi      print '</div>';
496*f3f0262cSandi    }
497*f3f0262cSandi  }else{
498*f3f0262cSandi    print '<div align="center">'.$lang['nothingfound'].'</div>';
499*f3f0262cSandi  }
500*f3f0262cSandi}
501*f3f0262cSandi
502*f3f0262cSandifunction html_locked($ip){
503*f3f0262cSandi  global $ID;
504*f3f0262cSandi  global $conf;
505*f3f0262cSandi  global $lang;
506*f3f0262cSandi
507*f3f0262cSandi  $locktime = filemtime(wikiFN($ID).'.lock');
508*f3f0262cSandi  $expire = @date($conf['dformat'], $locktime + $conf['locktime'] );
509*f3f0262cSandi  $min    = round(($conf['locktime'] - (time() - $locktime) )/60);
510*f3f0262cSandi
511*f3f0262cSandi  print parsedLocale('locked');
512*f3f0262cSandi  print '<ul>';
513*f3f0262cSandi  print '<li><b>'.$lang['lockedby'].':</b> '.$ip.'</li>';
514*f3f0262cSandi  print '<li><b>'.$lang['lockexpire'].':</b> '.$expire.' ('.$min.' min)</li>';
515*f3f0262cSandi  print '</ul>';
516*f3f0262cSandi}
517*f3f0262cSandi
518*f3f0262cSandifunction html_revisions(){
519*f3f0262cSandi  global $ID;
520*f3f0262cSandi  global $INFO;
521*f3f0262cSandi  global $conf;
522*f3f0262cSandi  global $lang;
523*f3f0262cSandi  $revisions = getRevisions($ID);
524*f3f0262cSandi  $date = @date($conf['dformat'],$INFO['lastmod']);
525*f3f0262cSandi
526*f3f0262cSandi  print parsedLocale('revisions');
527*f3f0262cSandi  print '<ul>';
528*f3f0262cSandi  if($INFO['exists']){
529*f3f0262cSandi    print '<li>'.$date.' <a class="wikilink1" href="'.wl($ID).'">'.$ID.'</a> ('.$lang['current'].')</li>';
530*f3f0262cSandi  }
531*f3f0262cSandi
532*f3f0262cSandi  foreach($revisions as $rev){
533*f3f0262cSandi    $date = date($conf['dformat'],$rev);
534*f3f0262cSandi    print '<li>';
535*f3f0262cSandi    print $date.' <a class="wikilink1" href="'.wl($ID,"rev=$rev").'">'.$ID.'</a> ';
536*f3f0262cSandi    print '<a href="'.wl($ID,"rev=$rev,do=diff").'">['.$lang['diff'].']</a>';
537*f3f0262cSandi    print '</li>';
538*f3f0262cSandi  }
539*f3f0262cSandi  print '</ul>';
540*f3f0262cSandi}
541*f3f0262cSandi
542*f3f0262cSandifunction html_recent(){
543*f3f0262cSandi  global $conf;
544*f3f0262cSandi  $recents = getRecents(0,true);
545*f3f0262cSandi
546*f3f0262cSandi  print parsedLocale('recent');
547*f3f0262cSandi  print '<ul>';
548*f3f0262cSandi  foreach(array_keys($recents) as $id){
549*f3f0262cSandi    $date = date($conf['dformat'],$recents[$id]['date']);
550*f3f0262cSandi    print '<li>';
551*f3f0262cSandi    print $date.' '.html_wikilink($id,$id);
552*f3f0262cSandi    print ' '.htmlspecialchars($recents[$id]['sum']);
553*f3f0262cSandi    print ' <span class="user">(';
554*f3f0262cSandi    print $recents[$id]['ip'];
555*f3f0262cSandi    if($recents[$id]['user']) print ' '.$recents[$id]['user'];
556*f3f0262cSandi    print ')</span>';
557*f3f0262cSandi    print '</li>';
558*f3f0262cSandi  }
559*f3f0262cSandi  print '</ul>';
560*f3f0262cSandi}
561*f3f0262cSandi
562*f3f0262cSandifunction html_index($ns){
563*f3f0262cSandi  require_once("inc/search.php");
564*f3f0262cSandi  global $conf;
565*f3f0262cSandi  global $ID;
566*f3f0262cSandi  $dir = $conf['datadir'];
567*f3f0262cSandi  $ns  = cleanID($ns);
568*f3f0262cSandi  if(empty($ns)){
569*f3f0262cSandi    $ns = dirname(str_replace(':','/',$ID));
570*f3f0262cSandi    if($ns == '.') $ns ='';
571*f3f0262cSandi  }
572*f3f0262cSandi  $ns  = str_replace(':','/',$ns);
573*f3f0262cSandi
574*f3f0262cSandi  print parsedLocale('index');
575*f3f0262cSandi
576*f3f0262cSandi  $data = array();
577*f3f0262cSandi  search($data,$conf['datadir'],'search_index',array('ns' => $ns));
578*f3f0262cSandi  print html_buildlist($data,'idx','html_list_index');
579*f3f0262cSandi}
580*f3f0262cSandi
581*f3f0262cSandi/**
582*f3f0262cSandi * User function for html_buildlist()
583*f3f0262cSandi */
584*f3f0262cSandifunction html_list_index($item){
585*f3f0262cSandi  $ret = '';
586*f3f0262cSandi  $base = ':'.$item['id'];
587*f3f0262cSandi  $base = substr($base,strrpos($base,':')+1);
588*f3f0262cSandi  if($item['type']=='d'){
589*f3f0262cSandi    $ret .= '<a href="'.wl($ID,'idx='.$item['id']).'" class="idx_dir">';
590*f3f0262cSandi    $ret .= $base;
591*f3f0262cSandi    $ret .= '</a>';
592*f3f0262cSandi  }else{
593*f3f0262cSandi    $ret .= html_wikilink(':'.$item['id']);
594*f3f0262cSandi  }
595*f3f0262cSandi  return $ret;
596*f3f0262cSandi}
597*f3f0262cSandi
598*f3f0262cSandi/**
599*f3f0262cSandi * Build an unordered list from the given $data array
600*f3f0262cSandi * Each item in the array has to have a 'level' property
601*f3f0262cSandi * the item itself gets printed by the given $func user
602*f3f0262cSandi * function
603*f3f0262cSandi */
604*f3f0262cSandifunction html_buildlist($data,$class,$func){
605*f3f0262cSandi  $level = 0;
606*f3f0262cSandi  $opens = 0;
607*f3f0262cSandi  $ret   = '';
608*f3f0262cSandi
609*f3f0262cSandi  foreach ($data as $item){
610*f3f0262cSandi
611*f3f0262cSandi    if( $item['level'] > $level ){
612*f3f0262cSandi      //open new list
613*f3f0262cSandi      $ret .= "\n<ul class=\"$class\">\n";
614*f3f0262cSandi    }elseif( $item['level'] < $level ){
615*f3f0262cSandi      //close last item
616*f3f0262cSandi      $ret .= "</li>\n";
617*f3f0262cSandi      for ($i=0; $i<($level - $item['level']); $i++){
618*f3f0262cSandi        //close higher lists
619*f3f0262cSandi        $ret .= "</ul>\n</li>\n";
620*f3f0262cSandi      }
621*f3f0262cSandi    }else{
622*f3f0262cSandi      //close last item
623*f3f0262cSandi      $ret .= "</li>\n";
624*f3f0262cSandi    }
625*f3f0262cSandi
626*f3f0262cSandi    //remember current level
627*f3f0262cSandi    $level = $item['level'];
628*f3f0262cSandi
629*f3f0262cSandi    //print item
630*f3f0262cSandi    $ret .= '<li class="level'.$item['level'].'">';
631*f3f0262cSandi    $ret .= '<span class="li">';
632*f3f0262cSandi    $ret .= $func($item); //user function
633*f3f0262cSandi    $ret .= '</span>';
634*f3f0262cSandi  }
635*f3f0262cSandi
636*f3f0262cSandi  //close remaining items and lists
637*f3f0262cSandi  for ($i=0; $i < $level; $i++){
638*f3f0262cSandi    $ret .= "</li></ul>\n";
639*f3f0262cSandi  }
640*f3f0262cSandi
641*f3f0262cSandi  return $ret;
642*f3f0262cSandi}
643*f3f0262cSandi
644*f3f0262cSandifunction html_backlinks(){
645*f3f0262cSandi  require_once("inc/search.php");
646*f3f0262cSandi  global $ID;
647*f3f0262cSandi  global $conf;
648*f3f0262cSandi
649*f3f0262cSandi  if(preg_match('#^(.*):(.*)$#',$ID,$matches)){
650*f3f0262cSandi    $opts['ns']   = $matches[1];
651*f3f0262cSandi    $opts['name'] = $matches[2];
652*f3f0262cSandi  }else{
653*f3f0262cSandi    $opts['ns']   = '';
654*f3f0262cSandi    $opts['name'] = $ID;
655*f3f0262cSandi  }
656*f3f0262cSandi
657*f3f0262cSandi  print parsedLocale('backlinks');
658*f3f0262cSandi
659*f3f0262cSandi  $data = array();
660*f3f0262cSandi  search($data,$conf['datadir'],'search_backlinks',$opts);
661*f3f0262cSandi  sort($data);
662*f3f0262cSandi
663*f3f0262cSandi  print '<ul class="idx">';
664*f3f0262cSandi  foreach($data as $row){
665*f3f0262cSandi    print '<li>';
666*f3f0262cSandi    print html_wikilink(':'.$row['id'],$row['id']);
667*f3f0262cSandi    print '</li>';
668*f3f0262cSandi  }
669*f3f0262cSandi  print '</ul>';
670*f3f0262cSandi}
671*f3f0262cSandi
672*f3f0262cSandifunction html_diff($text='',$intro=true){
673*f3f0262cSandi  require_once("inc/DifferenceEngine.php");
674*f3f0262cSandi  global $ID;
675*f3f0262cSandi  global $REV;
676*f3f0262cSandi  global $lang;
677*f3f0262cSandi  global $conf;
678*f3f0262cSandi  if($text){
679*f3f0262cSandi    $df  = new Diff(split("\n",htmlspecialchars(rawWiki($ID,''))),
680*f3f0262cSandi                    split("\n",htmlspecialchars(cleanText($text))));
681*f3f0262cSandi    $left  = '<a class="wikilink1" href="'.wl($ID).'">'.
682*f3f0262cSandi              $ID.' '.date($conf['dformat'],@filemtime(wikiFN($ID))).'</a>'.
683*f3f0262cSandi              $lang['current'];
684*f3f0262cSandi    $right = $lang['yours'];
685*f3f0262cSandi  }else{
686*f3f0262cSandi    $df  = new Diff(split("\n",htmlspecialchars(rawWiki($ID,$REV))),
687*f3f0262cSandi                    split("\n",htmlspecialchars(rawWiki($ID,''))));
688*f3f0262cSandi    $left  = '<a class="wikilink1" href="'.wl($ID,"rev=$REV").'">'.
689*f3f0262cSandi              $ID.' '.date($conf['dformat'],$REV).'</a>';
690*f3f0262cSandi    $right = '<a class="wikilink1" href="'.wl($ID).'">'.
691*f3f0262cSandi              $ID.' '.date($conf['dformat'],@filemtime(wikiFN($ID))).'</a> '.
692*f3f0262cSandi              $lang['current'];
693*f3f0262cSandi  }
694*f3f0262cSandi  $tdf = new TableDiffFormatter();
695*f3f0262cSandi  if($intro) print parsedLocale('diff');
696*f3f0262cSandi  ?>
697*f3f0262cSandi    <table class="diff" width="100%">
698*f3f0262cSandi      <tr>
699*f3f0262cSandi        <td colspan="2" width="50%" class="diff-header">
700*f3f0262cSandi          <?=$left?>
701*f3f0262cSandi        </td>
702*f3f0262cSandi        <td colspan="2" width="50%" class="diff-header">
703*f3f0262cSandi          <?=$right?>
704*f3f0262cSandi        </td>
705*f3f0262cSandi      </tr>
706*f3f0262cSandi      <?=$tdf->format($df)?>
707*f3f0262cSandi    </table>
708*f3f0262cSandi  <?
709*f3f0262cSandi}
710*f3f0262cSandi
711*f3f0262cSandifunction html_conflict($text,$summary){
712*f3f0262cSandi  global $ID;
713*f3f0262cSandi  global $lang;
714*f3f0262cSandi
715*f3f0262cSandi  print parsedLocale('conflict');
716*f3f0262cSandi  ?>
717*f3f0262cSandi  <form name="editform" method="post" action="<?=script()?>" accept-charset="<?=$lang['encoding']?>">
718*f3f0262cSandi  <input type="hidden" name="id" value="<?=$ID?>" />
719*f3f0262cSandi  <input type="hidden" name="wikitext" value="<?=formText($text)?>" />
720*f3f0262cSandi  <input type="hidden" name="summary" value="<?=formText($summary)?>" />
721*f3f0262cSandi
722*f3f0262cSandi  <div align="center">
723*f3f0262cSandi    <input class="button" type="submit" name="do" value="<?=$lang['btn_save']?>" accesskey="s" title="[ALT+S]" />
724*f3f0262cSandi    <input class="button" type="submit" name="do" value="<?=$lang['btn_cancel']?>" />
725*f3f0262cSandi  </div>
726*f3f0262cSandi  </form>
727*f3f0262cSandi  <br /><br /><br /><br />
728*f3f0262cSandi  <?
729*f3f0262cSandi}
730*f3f0262cSandi
731*f3f0262cSandi/**
732*f3f0262cSandi * Prints the glovbal message array
733*f3f0262cSandi */
734*f3f0262cSandifunction html_msgarea(){
735*f3f0262cSandi  global $MSG;
736*f3f0262cSandi
737*f3f0262cSandi  if(!isset($MSG)) return;
738*f3f0262cSandi
739*f3f0262cSandi  foreach($MSG as $msg){
740*f3f0262cSandi    print '<div class="'.$msg['lvl'].'">';
741*f3f0262cSandi    print $msg['msg'];
742*f3f0262cSandi    print '</div>';
743*f3f0262cSandi  }
744*f3f0262cSandi}
745*f3f0262cSandi
746*f3f0262cSandi/**
747*f3f0262cSandi * Prints the registration form
748*f3f0262cSandi */
749*f3f0262cSandifunction html_register(){
750*f3f0262cSandi  global $lang;
751*f3f0262cSandi  global $ID;
752*f3f0262cSandi
753*f3f0262cSandi  print parsedLocale('register');
754*f3f0262cSandi?>
755*f3f0262cSandi  <div align="center">
756*f3f0262cSandi  <form name="register" method="post" action="<?=wl($ID)?>" accept-charset="<?=$lang['encoding']?>">
757*f3f0262cSandi  <input type="hidden" name="do" value="register" />
758*f3f0262cSandi  <input type="hidden" name="save" value="1" />
759*f3f0262cSandi  <fieldset>
760*f3f0262cSandi    <legend><?=$lang['register']?></legend>
761*f3f0262cSandi    <label>
762*f3f0262cSandi      <?=$lang['user']?>
763*f3f0262cSandi      <input type="text" name="login" class="edit" size="50" value="<?=formText($_POST['login'])?>" />
764*f3f0262cSandi    </label><br />
765*f3f0262cSandi    <label>
766*f3f0262cSandi      <?=$lang['fullname']?>
767*f3f0262cSandi      <input type="text" name="fullname" class="edit" size="50" value="<?=formText($_POST['fullname'])?>" />
768*f3f0262cSandi    </label><br />
769*f3f0262cSandi    <label>
770*f3f0262cSandi      <?=$lang['email']?>
771*f3f0262cSandi      <input type="text" name="email" class="edit" size="50" value="<?=formText($_POST['email'])?>" />
772*f3f0262cSandi    </label><br />
773*f3f0262cSandi    <input type="submit" class="button" value="<?=$lang['register']?>" />
774*f3f0262cSandi  </fieldset>
775*f3f0262cSandi  </form>
776*f3f0262cSandi  </div>
777*f3f0262cSandi<?
778*f3f0262cSandi}
779*f3f0262cSandi
780*f3f0262cSandi/**
781*f3f0262cSandi * This displays the edit form (lots of logic included)
782*f3f0262cSandi */
783*f3f0262cSandifunction html_edit($text=null,$include='edit'){ //FIXME: include needed?
784*f3f0262cSandi  global $ID;
785*f3f0262cSandi  global $REV;
786*f3f0262cSandi  global $DATE;
787*f3f0262cSandi  global $RANGE;
788*f3f0262cSandi  global $PRE;
789*f3f0262cSandi  global $SUF;
790*f3f0262cSandi  global $INFO;
791*f3f0262cSandi  global $SUM;
792*f3f0262cSandi  global $lang;
793*f3f0262cSandi  global $conf;
794*f3f0262cSandi
795*f3f0262cSandi  //check for create permissions first
796*f3f0262cSandi  if(!$INFO['exists'] && !html_acl(AUTH_CREATE)) return;
797*f3f0262cSandi
798*f3f0262cSandi  //set summary default
799*f3f0262cSandi  if(!$SUM){
800*f3f0262cSandi    if($REV){
801*f3f0262cSandi      $SUM = $lang['restored'];
802*f3f0262cSandi    }elseif(!$INFO['exists']){
803*f3f0262cSandi      $SUM = $lang['created'];
804*f3f0262cSandi    }
805*f3f0262cSandi  }
806*f3f0262cSandi
807*f3f0262cSandi  //no text? Load it!
808*f3f0262cSandi  if(!isset($text)){
809*f3f0262cSandi    $pr = false; //no preview mode
810*f3f0262cSandi    if($RANGE){
811*f3f0262cSandi      list($PRE,$text,$SUF) = rawWikiSlices($RANGE,$ID,$REV);
812*f3f0262cSandi    }else{
813*f3f0262cSandi      $text = rawWiki($ID,$REV);
814*f3f0262cSandi    }
815*f3f0262cSandi  }else{
816*f3f0262cSandi    $pr = true; //preview mode
817*f3f0262cSandi  }
818*f3f0262cSandi
819*f3f0262cSandi  $wr = $INFO['writable'];
820*f3f0262cSandi  if($wr){
821*f3f0262cSandi    if ($REV) print parsedLocale('editrev');
822*f3f0262cSandi    print parsedLocale($include);
823*f3f0262cSandi  }else{
824*f3f0262cSandi    print parsedLocale('read');
825*f3f0262cSandi    $ro='readonly="readonly"';
826*f3f0262cSandi  }
827*f3f0262cSandi  if(!$DATE) $DATE = $INFO['lastmod'];
828*f3f0262cSandi?>
829*f3f0262cSandi  <form name="editform" method="post" action="<?=script()?>" accept-charset="<?=$lang['encoding']?>" onsubmit="return svchk()">
830*f3f0262cSandi  <input type="hidden" name="id"   value="<?=$ID?>" />
831*f3f0262cSandi  <input type="hidden" name="rev"  value="<?=$REV?>" />
832*f3f0262cSandi  <input type="hidden" name="date" value="<?=$DATE?>" />
833*f3f0262cSandi  <input type="hidden" name="prefix" value="<?=formText($PRE)?>" />
834*f3f0262cSandi  <input type="hidden" name="suffix" value="<?=formText($SUF)?>" />
835*f3f0262cSandi  <table style="width:99%">
836*f3f0262cSandi    <tr>
837*f3f0262cSandi      <td class="toolbar" colspan="3">
838*f3f0262cSandi        <?if($wr){?>
839*f3f0262cSandi        <script language="JavaScript" type="text/javascript">
840*f3f0262cSandi          <?/* sets changed to true when previewed */?>
841*f3f0262cSandi          textChanged = <? ($pr) ? print 'true' : print 'false' ?>;
842*f3f0262cSandi
843*f3f0262cSandi          formatButton('images/bold.png','<?=$lang['qb_bold']?>','**','**','<?=$lang['qb_bold']?>','b');
844*f3f0262cSandi          formatButton('images/italic.png','<?=$lang['qb_italic']?>',"\/\/","\/\/",'<?=$lang['qb_italic']?>','i');
845*f3f0262cSandi          formatButton('images/underline.png','<?=$lang['qb_underl']?>','__','__','<?=$lang['qb_underl']?>','u');
846*f3f0262cSandi          formatButton('images/code.png','<?=$lang['qb_code']?>','\'\'','\'\'','<?=$lang['qb_code']?>','c');
847*f3f0262cSandi
848*f3f0262cSandi          formatButton('images/fonth1.png','<?=$lang['qb_h1']?>','====== ',' ======\n','<?=$lang['qb_h1']?>','1');
849*f3f0262cSandi          formatButton('images/fonth2.png','<?=$lang['qb_h2']?>','===== ',' =====\n','<?=$lang['qb_h2']?>','2');
850*f3f0262cSandi          formatButton('images/fonth3.png','<?=$lang['qb_h3']?>','==== ',' ====\n','<?=$lang['qb_h3']?>','3');
851*f3f0262cSandi          formatButton('images/fonth4.png','<?=$lang['qb_h4']?>','=== ',' ===\n','<?=$lang['qb_h4']?>','4');
852*f3f0262cSandi          formatButton('images/fonth5.png','<?=$lang['qb_h5']?>','== ',' ==\n','<?=$lang['qb_h5']?>','5');
853*f3f0262cSandi
854*f3f0262cSandi          formatButton('images/link.png','<?=$lang['qb_link']?>','[[',']]','<?=$lang['qb_link']?>','l');
855*f3f0262cSandi          formatButton('images/extlink.png','<?=$lang['qb_extlink']?>','[[',']]','http://www.example.com|<?=$lang['qb_extlink']?>');
856*f3f0262cSandi
857*f3f0262cSandi          formatButton('images/list.png','<?=$lang['qb_ol']?>','  - ','\n','<?=$lang['qb_ol']?>');
858*f3f0262cSandi          formatButton('images/list_ul.png','<?=$lang['qb_ul']?>','  * ','\n','<?=$lang['qb_ul']?>');
859*f3f0262cSandi
860*f3f0262cSandi          insertButton('images/rule.png','<?=$lang['qb_hr']?>','----\n');
861*f3f0262cSandi          mediaButton('images/image.png','<?=$lang['qb_media']?>','m','<?=$INFO['namespace']?>');
862*f3f0262cSandi
863*f3f0262cSandi					<?
864*f3f0262cSandi          if($conf['useacl'] && $_SERVER['REMOTE_USER']){
865*f3f0262cSandi            echo "insertButton('images/sig.png','".$lang['qb_sig']."','".html_signature()."','y');";
866*f3f0262cSandi          }
867*f3f0262cSandi          ?>
868*f3f0262cSandi        </script>
869*f3f0262cSandi        <?}?>
870*f3f0262cSandi      </td>
871*f3f0262cSandi    </tr>
872*f3f0262cSandi    <tr>
873*f3f0262cSandi      <td colspan="3">
874*f3f0262cSandi        <textarea name="wikitext" id="wikitext" <?=$ro?> cols="80" rows="10" class="edit" onchange="textChanged = true;" tabindex="1"><?="\n".formText($text)?></textarea>
875*f3f0262cSandi      </td>
876*f3f0262cSandi    </tr>
877*f3f0262cSandi    <tr>
878*f3f0262cSandi      <td>
879*f3f0262cSandi      <?if($wr){?>
880*f3f0262cSandi        <input class="button" type="submit" name="do" value="<?=$lang['btn_save']?>" accesskey="s" title="[ALT+S]" onclick="textChanged=false" onkeypress="textChanged=false" tabindex="3" />
881*f3f0262cSandi        <input class="button" type="submit" name="do" value="<?=$lang['btn_preview']?>" accesskey="p" title="[ALT+P]" onclick="textChanged=false" onkeypress="textChanged=false" tabindex="4" />
882*f3f0262cSandi        <input class="button" type="submit" name="do" value="<?=$lang['btn_cancel']?>" tabindex="5" />
883*f3f0262cSandi      <?}?>
884*f3f0262cSandi      </td>
885*f3f0262cSandi      <td>
886*f3f0262cSandi      <?if($wr){?>
887*f3f0262cSandi        <?=$lang['summary']?>:
888*f3f0262cSandi        <input type="text" class="edit" name="summary" size="50" value="<?=formText($SUM)?>" tabindex="2" />
889*f3f0262cSandi      <?}?>
890*f3f0262cSandi      </td>
891*f3f0262cSandi      <td align="right">
892*f3f0262cSandi        <script type="text/javascript">
893*f3f0262cSandi          showSizeCtl();
894*f3f0262cSandi          <?if($wr){?>
895*f3f0262cSandi            init_locktimer(<?=$conf['locktime']-60?>,'<?=$lang['willexpire']?>');
896*f3f0262cSandi					  document.editform.wikitext.focus();
897*f3f0262cSandi          <?}?>
898*f3f0262cSandi        </script>
899*f3f0262cSandi      </td>
900*f3f0262cSandi    </tr>
901*f3f0262cSandi  </table>
902*f3f0262cSandi  </form>
903*f3f0262cSandi<?
904*f3f0262cSandi}
905*f3f0262cSandi
906*f3f0262cSandi/**
907*f3f0262cSandi * prepares the signature string as configured in the config
908*f3f0262cSandi */
909*f3f0262cSandifunction html_signature(){
910*f3f0262cSandi  global $conf;
911*f3f0262cSandi  global $INFO;
912*f3f0262cSandi
913*f3f0262cSandi  $sig = $conf['signature'];
914*f3f0262cSandi  $sig = strftime($sig);
915*f3f0262cSandi  $sig = str_replace('@USER@',$_SERVER['REMOTE_USER'],$sig);
916*f3f0262cSandi  $sig = str_replace('@NAME@',$INFO['userinfo']['name'],$sig);
917*f3f0262cSandi  $sig = str_replace('@MAIL@',$INFO['userinfo']['mail'],$sig);
918*f3f0262cSandi  $sig = str_replace('@DATE@',date($conf['dformat']),$sig);
919*f3f0262cSandi  return $sig;
920*f3f0262cSandi}
921*f3f0262cSandi
922*f3f0262cSandi/**
923*f3f0262cSandi * prints some debug info
924*f3f0262cSandi */
925*f3f0262cSandifunction html_debug(){
926*f3f0262cSandi  global $conf;
927*f3f0262cSandi
928*f3f0262cSandi  print '<html><body>';
929*f3f0262cSandi
930*f3f0262cSandi  print '<p>When reporting bugs please send all the following ';
931*f3f0262cSandi  print 'output as a mail to andi@splitbrain.org ';
932*f3f0262cSandi  print 'The best way to do this is to save this page in your browser</p>';
933*f3f0262cSandi
934*f3f0262cSandi  print '<b>$_SERVER:</b><pre>';
935*f3f0262cSandi  print_r($_SERVER);
936*f3f0262cSandi  print '</pre>';
937*f3f0262cSandi
938*f3f0262cSandi  print '<b>$conf:</b><pre>';
939*f3f0262cSandi  print_r($conf);
940*f3f0262cSandi  print '</pre>';
941*f3f0262cSandi
942*f3f0262cSandi  print '<b>abs baseURL:</b><pre>';
943*f3f0262cSandi  print getBaseURL(true);
944*f3f0262cSandi  print '</pre>';
945*f3f0262cSandi
946*f3f0262cSandi  print '<b>rel baseURL:</b><pre>';
947*f3f0262cSandi  print dirname($_SERVER['PHP_SELF']).'/';
948*f3f0262cSandi  print '</pre>';
949*f3f0262cSandi
950*f3f0262cSandi  print '<b>PHP Version:</b><pre>';
951*f3f0262cSandi  print phpversion();
952*f3f0262cSandi  print '</pre>';
953*f3f0262cSandi
954*f3f0262cSandi  print '<b>locale:</b><pre>';
955*f3f0262cSandi  print setlocale(LC_ALL,0);
956*f3f0262cSandi  print '</pre>';
957*f3f0262cSandi
958*f3f0262cSandi  print '<b>Environment:</b><pre>';
959*f3f0262cSandi  print_r($_ENV);
960*f3f0262cSandi  print '</pre>';
961*f3f0262cSandi
962*f3f0262cSandi  print '<b>PHP settings:</b><pre>';
963*f3f0262cSandi  $inis = ini_get_all();
964*f3f0262cSandi  print_r($inis);
965*f3f0262cSandi  print '</pre>';
966*f3f0262cSandi
967*f3f0262cSandi  print '</body></html>';
968*f3f0262cSandi}
969*f3f0262cSandi
970*f3f0262cSandi?>
971