[ Index ]
 

Code source de Serendipity 1.2

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/bundled-libs/Text/Wiki/Render/Xhtml/ -> Wikilink.php (source)

   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  ?>


Généré le : Sat Nov 24 09:00:37 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics