Text_Wiki
[ class tree: Text_Wiki ] [ index: Text_Wiki ] [ all elements ]

Source for file Wikilink.php

Documentation is available at Wikilink.php

  1. <?php
  2.  
  3. class Text_Wiki_Render_Xhtml_Wikilink extends Text_Wiki_Render {
  4.     
  5.     var $conf = array(
  6.         'pages' => array(), // set to null or false to turn off page checks
  7.         'view_url' => 'http://example.com/index.php?page=%s',
  8.         'new_url'  => 'http://example.com/new.php?page=%s',
  9.         'new_text' => '?',
  10.         'new_text_pos' => 'after', // 'before', 'after', or null/false
  11.         'css' => null,
  12.         'css_new' => null,
  13.         'exists_callback' => null // call_user_func() callback
  14.     );
  15.     
  16.     
  17.     /**
  18.     * 
  19.     * Renders a token into XHTML.
  20.     * 
  21.     * @access public
  22.     * 
  23.     * @param array $options The "options" portion of the token (second
  24.     *  element).
  25.     * 
  26.     * @return string The text rendered from the token options.
  27.     * 
  28.     */
  29.     
  30.     function token($options)
  31.     {
  32.         // make nice variable names (page, anchor, text)
  33.         extract($options);
  34.         
  35.         // is there a "page existence" callback?
  36.         // we need to access it directly instead of through
  37.         // getConf() because we'll need a reference (for
  38.         // object instance method callbacks).
  39.         if (isset($this->conf['exists_callback'])) {
  40.             $callback =& $this->conf['exists_callback'];
  41.         } else {
  42.             $callback = false;
  43.         }
  44.         
  45.         if ($callback) {
  46.             // use the callback function
  47.             $exists = call_user_func($callback, $page);
  48.         } else {
  49.             // no callback, go to the naive page array.
  50.             $list =& $this->getConf('pages');
  51.             if (is_array($list)) {
  52.                 // yes, check against the page list
  53.                 $exists = in_array($page, $list);
  54.             } else {
  55.                 // no, assume it exists
  56.                 $exists = true;
  57.             }
  58.         }
  59.         
  60.         // convert *after* checking against page names so as not to mess
  61.         // up what the user typed and what we're checking.
  62.         $page = htmlspecialchars($page);
  63.         $anchor = htmlspecialchars($anchor);
  64.         $text = htmlspecialchars($text);
  65.         
  66.         // does the page exist?
  67.         if ($exists) {
  68.         
  69.             // PAGE EXISTS.
  70.         
  71.             // link to the page view, but we have to build
  72.             // the HREF.  we support both the old form where
  73.             // the page always comes at the end, and the new
  74.             // form that uses %s for sprintf()
  75.             $href = $this->getConf('view_url');
  76.             
  77.             if (strpos($href, '%s') === false) {
  78.                 // use the old form (page-at-end)
  79.                 $href = $href . $page . $anchor;
  80.             } else {
  81.                 // use the new form (sprintf format string)
  82.                 $href = sprintf($href, $page . $anchor);
  83.             }
  84.             
  85.             // get the CSS class and generate output
  86.             $css = $this->formatConf(' class="%s"', 'css');
  87.             $output = "<a$css href=\"$href\">$text</a>";
  88.         
  89.         } else {
  90.             
  91.             // PAGE DOES NOT EXIST.
  92.             
  93.             // link to a create-page url, but only if new_url is set
  94.             $href = $this->getConf('new_url', null);
  95.             
  96.             // set the proper HREF
  97.             if (! $href || trim($href) == '') {
  98.             
  99.                 // no useful href, return the text as it is
  100.                 $output = $text;
  101.                 
  102.             } else {
  103.             
  104.                 // yes, link to the new-page href, but we have to build
  105.                 // it.  we support both the old form where
  106.                 // the page always comes at the end, and the new
  107.                 // form that uses sprintf()
  108.                 if (strpos($href, '%s') === false) {
  109.                     // use the old form
  110.                     $href = $href . $page;
  111.                 } else {
  112.                     // use the new form
  113.                     $href = sprintf($href, $page);
  114.                 }
  115.             }
  116.             
  117.             // get the appropriate CSS class and new-link text
  118.             $css = $this->formatConf(' class="%s"', 'css_new');
  119.             $new = $this->getConf('new_text');
  120.             
  121.             // what kind of linking are we doing?
  122.             $pos = $this->getConf('new_text_pos');
  123.             if (! $pos || ! $new) {
  124.                 // no position (or no new_text), use css only on the page name
  125.                 $output = "<a$css href=\"$href\">$page</a>";
  126.             } elseif ($pos == 'before') {
  127.                 // use the new_text BEFORE the page name
  128.                 $output = "<a$css href=\"$href\">$new</a>$text";
  129.             } else {
  130.                 // default, use the new_text link AFTER the page name
  131.                 $output = "$text<a$css href=\"$href\">$new</a>";
  132.             }
  133.         }
  134.         return $output;
  135.     }
  136. }
  137. ?>

Documentation generated on Mon, 11 Mar 2019 14:22:35 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.