Beispiel #1
0
function plugin_read_action()
{
    global $vars, $_read_msg;
    $page = isset($vars['page']) ? Utility::stripBracket($vars['page']) : null;
    $ret = array('msg' => null, 'body' => null);
    $id = isset($vars['id']) ? $vars['id'] : null;
    if (!$page) {
        return $ret;
    }
    // 読み込むことができるページか
    $wiki = Factory::Wiki($page);
    if ($wiki->isReadable(true)) {
        return array('msg' => Utility::htmlsc($page), 'body' => $wiki->render($id));
        //return $ret;
    }
    global $referer;
    $referer = 0;
    // InterWikiNameに含まれるページか?
    // ?adv:FrontPageみたいな感じでアクセス
    if (preg_match('/^' . RendererDefines::INTERWIKINAME_PATTERN . '$/', $page, $match)) {
        $url = InterWikiName::getInterWikiUrl($match[2], $match[3]);
        if ($url == false) {
            return array('msg' => $_read_msg['title_invalied'], 'body' => sprintf($_read_msg['msg_ibvaliediw'], $match[2]));
        }
        Utility::redirect($url);
        return;
    }
    // AutoAliasに含まれるページか?
    $realpage = AutoAlias::getAutoAlias($page);
    if (count($realpage) === 1) {
        // AutoAliasの指定先のページを指定
        $a_wiki = Factory::Wiki($realpage);
        if ($a_wiki->isValied()) {
            Utility::redirect($a_wiki->link());
            return;
        } else {
            if (Utility::isUri($realpage)) {
                Utility::redirect($realpage);
                return;
            }
        }
    } else {
        if (count($realpage) >= 2) {
            $body = '<p>';
            $body .= $_read_msg['msg_invalidwn'] . '<br />';
            foreach ($realpage as $entry) {
                $link[] = '[[' . $entry . '>' . $entry . ']]&br;';
            }
            $body .= InlineFactory::Wiki(join("\n", $link));
            $body .= '</p>';
            return array('msg' => $_read_msg['title_invalied'], 'body' => $body);
        }
    }
    Utility::notfound();
    exit;
}
Beispiel #2
0
 /**
  * ページの自動リンクを作成
  * @global type $vars
  * @global type $link_compact
  * @global type $related
  * @global type $_symbol_noexists
  * @param string $page ページ名
  * @param string $alias リンクの名前
  * @param string $anchor ページ内アンカー(アドレスの#以降のテキスト)
  * @param string $refer リンク元
  * @param boolean $isautolink 自動リンクか?
  * @return string
  */
 public static function setAutoLink($page, $alias = '', $anchor = '', $refer = '', $isautolink = FALSE)
 {
     global $vars, $link_compact, $related, $_symbol_noexists, $related;
     if (empty($page)) {
         // ページ内リンク
         return '<a href="' . $anchor . '">' . Utility::htmlsc($alias) . '</a>';
     }
     $wiki = Factory::Wiki($page);
     if (!$wiki->has()) {
         // ページが存在しない場合は、AutoAliasから該当ページが存在するかを確認する
         foreach (AutoAlias::getAutoAliasDict() as $aliaspage => $realpage) {
             if (Factory::Wiki($realpage)->has()) {
                 // リンクをエイリアス先に
                 return self::setLink($page, $aliaspage);
             }
         }
     } else {
         if (!isset($related[$page]) && isset($vars['page']) && $page !== $vars['page']) {
             $related[$page] = $wiki->time();
         }
     }
     $s_page = Utility::htmlsc($page);
     $anchor_name = empty($alias) ? $page : $alias;
     $anchor_name = str_replace('&amp;#039;', '\'', $anchor_name);
     // 'が&#039;になってしまう問題をとりあえず解消
     if ($isautolink || $wiki->has()) {
         // ページが存在する場合
         // 用語集にページ名と同じワードが含まれていた場合
         $glossary = Glossary::getGlossary($page);
         if (!empty($glossary)) {
             // AutoGlossray
             return '<abbr class="glossary" title="' . $glossary . ' ' . $wiki->passage(false, true) . '">' . '<a href="' . $wiki->uri() . '"' . ($isautolink === true ? ' class="autolink"' : '') . '>' . $anchor_name . '</a></abbr>';
         }
         return '<a href="' . $wiki->uri() . $anchor . '" ' . (!$link_compact ? 'title="' . $s_page . ' ' . $wiki->passage(false, true) . '"' : '') . ($isautolink === true ? ' class="autolink"' : '') . '>' . $anchor_name . '</a>';
     } else {
         // Dangling link
         if (Auth::check_role('readonly')) {
             return Utility::htmlsc($alias);
         }
         // No dacorations
         $retval = $anchor_name . '<a href="' . $wiki->uri('edit', empty($refer) ? null : array('refer' => $refer)) . '" rel="nofollow">' . $_symbol_noexists . '</a>';
         return $link_compact ? $retval : sprintf(RendererDefines::NOEXISTS_STRING, $retval);
     }
 }
Beispiel #3
0
 /**
  * リンクのデーターベースを初期化
  * @return void
  */
 public function init()
 {
     // Init database
     $this->adapter->query('DELETE FROM rel', Adapter::QUERY_MODE_EXECUTE);
     $this->adapter->query('DELETE FROM ref', Adapter::QUERY_MODE_EXECUTE);
     $ref = array();
     // Reference from
     foreach (Listing::pages('wiki') as $_page) {
         $rel = array();
         // Reference to
         $objs = self::getObjects($_page);
         if (empty($objs)) {
             continue;
         }
         foreach ($objs as $_obj) {
             if (!isset($_obj->type) || $_obj->type !== 'pagename' || empty($_obj->name) || $_obj->name === $_page) {
                 continue;
             }
             $_name = $_obj->name;
             if ($_obj instanceof AutoAlias) {
                 $_alias = AutoAlias::getAutoAlias($_name);
                 if (!Factory::Wiki($_alias)->isValied()) {
                     continue;
                 }
                 // not PageName
                 $_name = $_alias;
             }
             $rel[] = $_name;
             if (!isset($ref[$_name][$_page])) {
                 $ref[$_name][$_page] = 1;
             }
             if (!$_obj instanceof AutoLink) {
                 $ref[$_name][$_page] = 0;
             }
         }
         ksort($rel, SORT_NATURAL);
         if (empty($rel)) {
             continue;
         }
         self::setRel($_page, $rel);
     }
     unset($rel, $_page);
     ksort($ref, SORT_NATURAL);
     foreach ($ref as $_page => $arr) {
         foreach ($arr as $ref_page => $ref_auto) {
             $data[] = $ref_page . "\t" . $ref_auto;
         }
         self::setRef($_page, $data);
         unset($data);
     }
     // メモリを開放
     self::getObjects();
     unset($ref_page, $ref_auto);
     // 最適化
     $this->adapter->query('VACUUM', Adapter::QUERY_MODE_EXECUTE);
 }
Beispiel #4
0
 function __construct($start)
 {
     parent::__construct($start);
 }