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; }
/** * リンクのデーターベースを初期化 * @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); }