Exemple #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;
}
Exemple #2
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);
 }