home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Text / Wiki / Render / Xhtml / Wikilink.php < prev   
Encoding:
PHP Script  |  2008-07-02  |  5.8 KB  |  178 lines

  1. <?php
  2. // vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
  3. /**
  4.  * Wikilink rule end renderer for Xhtml
  5.  *
  6.  * PHP versions 4 and 5
  7.  *
  8.  * @category   Text
  9.  * @package    Text_Wiki
  10.  * @author     Paul M. Jones <pmjones@php.net>
  11.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  12.  * @version    CVS: $Id: Wikilink.php,v 1.22 2006/12/08 21:25:24 justinpatrin Exp $
  13.  * @link       http://pear.php.net/package/Text_Wiki
  14.  */
  15.  
  16. /**
  17.  * This class renders wiki links in XHTML.
  18.  *
  19.  * @category   Text
  20.  * @package    Text_Wiki
  21.  * @author     Paul M. Jones <pmjones@php.net>
  22.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  23.  * @version    Release: @package_version@
  24.  * @link       http://pear.php.net/package/Text_Wiki
  25.  */
  26. class Text_Wiki_Render_Xhtml_Wikilink extends Text_Wiki_Render {
  27.  
  28.     var $conf = array(
  29.         'pages' => array(), // set to null or false to turn off page checks
  30.         'view_url' => 'http://example.com/index.php?page=%s',
  31.         'new_url'  => 'http://example.com/new.php?page=%s',
  32.         'new_text' => '?',
  33.         'new_text_pos' => 'after', // 'before', 'after', or null/false
  34.         'css' => null,
  35.         'css_new' => null,
  36.         'exists_callback' => null // call_user_func() callback
  37.     );
  38.  
  39.  
  40.     /**
  41.     *
  42.     * Renders a token into XHTML.
  43.     *
  44.     * @access public
  45.     *
  46.     * @param array $options The "options" portion of the token (second
  47.     * element).
  48.     *
  49.     * @return string The text rendered from the token options.
  50.     *
  51.     */
  52.  
  53.     function token($options)
  54.     {
  55.         // make nice variable names (page, anchor, text)
  56.         extract($options);
  57.  
  58.         // is there a "page existence" callback?
  59.         // we need to access it directly instead of through
  60.         // getConf() because we'll need a reference (for
  61.         // object instance method callbacks).
  62.         if (isset($this->conf['exists_callback'])) {
  63.             $callback =& $this->conf['exists_callback'];
  64.         } else {
  65.             $callback = false;
  66.         }
  67.  
  68.         if ($callback) {
  69.             // use the callback function
  70.             $exists = call_user_func($callback, $page);
  71.         } else {
  72.             // no callback, go to the naive page array.
  73.             $list = $this->getConf('pages');
  74.             if (is_array($list)) {
  75.                 // yes, check against the page list
  76.                 $exists = in_array($page, $list);
  77.             } else {
  78.                 // no, assume it exists
  79.                 $exists = true;
  80.             }
  81.         }
  82.  
  83.         $anchor = '#'.$this->urlEncode(substr($anchor, 1));
  84.  
  85.         // does the page exist?
  86.         if ($exists) {
  87.  
  88.             // PAGE EXISTS.
  89.  
  90.             // link to the page view, but we have to build
  91.             // the HREF.  we support both the old form where
  92.             // the page always comes at the end, and the new
  93.             // form that uses %s for sprintf()
  94.             $href = $this->getConf('view_url');
  95.  
  96.             if (strpos($href, '%s') === false) {
  97.                 // use the old form (page-at-end)
  98.                 $href = $href . $this->urlEncode($page) . $anchor;
  99.             } else {
  100.                 // use the new form (sprintf format string)
  101.                 $href = sprintf($href, $this->urlEncode($page)) . $anchor;
  102.             }
  103.  
  104.             // get the CSS class and generate output
  105.             $css = ' class="'.$this->textEncode($this->getConf('css')).'"';
  106.  
  107.             $start = '<a'.$css.' href="'.$this->textEncode($href).'">';
  108.             $end = '</a>';
  109.         } else {
  110.  
  111.             // PAGE DOES NOT EXIST.
  112.  
  113.             // link to a create-page url, but only if new_url is set
  114.             $href = $this->getConf('new_url', null);
  115.  
  116.             // set the proper HREF
  117.             if (! $href || trim($href) == '') {
  118.  
  119.                 // no useful href, return the text as it is
  120.                 //TODO: This is no longer used, need to look closer into this branch
  121.                 $output = $text;
  122.  
  123.             } else {
  124.  
  125.                 // yes, link to the new-page href, but we have to build
  126.                 // it.  we support both the old form where
  127.                 // the page always comes at the end, and the new
  128.                 // form that uses sprintf()
  129.                 if (strpos($href, '%s') === false) {
  130.                     // use the old form
  131.                     $href = $href . $this->urlEncode($page);
  132.                 } else {
  133.                     // use the new form
  134.                     $href = sprintf($href, $this->urlEncode($page));
  135.                 }
  136.             }
  137.  
  138.             // get the appropriate CSS class and new-link text
  139.             $css = ' class="'.$this->textEncode($this->getConf('css_new')).'"';
  140.             $new = $this->getConf('new_text');
  141.  
  142.             // what kind of linking are we doing?
  143.             $pos = $this->getConf('new_text_pos');
  144.             if (! $pos || ! $new) {
  145.                 // no position (or no new_text), use css only on the page name
  146.  
  147.                 $start = '<a'.$css.' href="'.$this->textEncode($href).'">';
  148.                 $end = '</a>';
  149.             } elseif ($pos == 'before') {
  150.                 // use the new_text BEFORE the page name
  151.                 $start = '<a'.$css.' href="'.$this->textEncode($href).'">'.$this->textEncode($new).'</a>';
  152.                 $end = '';
  153.             } else {
  154.                 // default, use the new_text link AFTER the page name
  155.                 $start = '';
  156.                 $end = '<a'.$css.' href="'.$this->textEncode($href).'">'.$this->textEncode($new).'</a>';
  157.             }
  158.         }
  159.         if (!strlen($text)) {
  160.             $start .= $this->textEncode($page);
  161.         }
  162.         if (isset($type)) {
  163.             switch ($type) {
  164.             case 'start':
  165.                 $output = $start;
  166.                 break;
  167.             case 'end':
  168.                 $output = $end;
  169.                 break;
  170.             }
  171.         } else {
  172.             $output = $start.$this->textEncode($text).$end;
  173.         }
  174.         return $output;
  175.     }
  176. }
  177. ?>
  178.