related仕様変更。プラグインからのページリンクもrelatedに反映させる。paraedit

  • ページ: Develop/Modification1
  • 投稿者: ぃぉぃぉ
  • 優先順位: 低
  • 状態: 完了
  • カテゴリー: 本体新機能
  • 投稿日: 2009-03-03 (火) 16:21:10
  • バージョン: 0.0.14

メッセージparaedit

&new();などのプラグインからのリンクもrelatedに反映する。

related生成にglobal変数$relatedを使用。また、ダングリングリンク(存在しないページへのリンク)は$relatedに保存されないので、新たに$related_unexistを設置し、ダングリングリンクのページを保管する。

lib/make_link.phpparaedit

function make_pagelink($page, $alias = '', $anchor = '', $refer = '', $isautolink = FALSE, $script = SCRIPT_URI_RELATIVE)
{
!	global $vars, $link_compact, $related, $_symbol_noexists, $related_unexist;
 
	$s_page = htmlspecialchars(strip_bracket($page));
	$s_alias = ($alias == '') ? $s_page : $alias;
....
 
	if ($isautolink || is_page($page)) {
		// Hyperlink to the page
		if ($link_compact) {
....
	} else {
		// Dangling link
		if (PKWK_READONLY) return $s_alias; // No dacorations
 
		$retval = make_ahref(get_wiki_uri(array('cmd'=>'related', 'page'=>$page)) . $r_refer,
							 $s_alias . $_symbol_noexists);
+		$related_unexist[] = $page;

lib/init.phpparaedit

 /////////////////////////////////////////////////
 // Init grobal variables
 
 $foot_explain = array();	// Footnotes
 $related      = array();	// Related pages. The current page is reffering them.
+$related_unexist = array();	// Unexist related pages. The current page has link to the unexisting page.
 $head_tags    = array();	// XHTML tags in <head></head>

lib/link.phpparaedit

まだ$rel_autoの検討未実施。多分削除でいいだろう。

function links_update($page)
{
+	global $vars, $related, $related_unexist;
	if (PKWK_READONLY) return; // Do nothing
 
	if (ini_get('safe_mode') == '0') set_time_limit(0);
 
	$time = is_page($page, TRUE) ? get_filetime($page) : 0;
 
	$rel_old        = array();
	$rel_file       = CACHE_DIR . encode($page) . '.rel';
	$rel_file_exist = file_exists($rel_file);
	if ($rel_file_exist === TRUE) {
		$lines = file($rel_file);
		unlink($rel_file);
		if (isset($lines[0]))
			$rel_old = explode("\t", rtrim($lines[0]));
	}
	$links    = links_get_objects($page, TRUE);
-	foreach ($links as $_obj) {
-		if (! isset($_obj->type) || $_obj->type != 'pagename' ||
-		    $_obj->name === $page || $_obj->name == '')
-			continue;
-
-			$rel_auto[] = $_obj->name;
-		} else if (is_a($_obj, 'Link_autoalias')) {
-			$_alias = get_autoaliases($_obj->name);
-			if (is_pagename($_alias)) {
-				$rel_auto[] = $_alias;
-			}
-		} else {
-			$rel_new[]  = $_obj->name;
-		}
-	$rel_new = array_unique($rel_new);
 
+	$pagesave = $vars['page'];
+	$vars['page'] = $page;
+	$related_save = $related;
+	$related_unexist_save = $related_unexist;
+	$related = array();
+	$related_unexist = array();
+	$tmp = convert_html(get_source($page));
+	$vars['page'] = $pagesave;
+	if($vars['page'] === $page){
+		$rel_new = array_keys($related);
+		$rel_new = array_merge($rel_new, $related_unexist);
+		$rel_new = array_unique($rel_new);
+	}
+	$related = $related_save;
+	$related_unexist = $related_unexist_save;
 
	$rel_auto = array_diff(array_unique($rel_auto), $rel_new);
...
  • これはplugin/links.inc.phpに移そうかな。
    // Init link cache (Called from link plugin)
    function plugin_links_refresh()
    {
        global $vars, $related, $related_unexist;
        if (PKWK_READONLY) return; // Do nothing
     
        @set_time_limit(0);
     
        // Init database
        foreach (get_existfiles(CACHE_DIR, '.ref') as $cache)
            unlink($cache);
        foreach (get_existfiles(CACHE_DIR, '.rel') as $cache)
            unlink($cache);
     
        $ref   = array(); // 参照元
        foreach (get_existpages() as $page) {
            if (is_cantedit($page)) continue;
     
            $rel   = array(); // 参照先
            $rel_new  = array(); // 参照先
            $rel_auto = array(); // オートリンクしている参照先
     
            $vars['page'] = $page;
            $related = array();
            $related_unexist = array();
            $tmp = convert_html(get_source($page));
     
            $rel_new = array_keys($related);
            $rel_new = array_merge($rel_new, $related_unexist);
            $rel_new = array_unique($rel_new);
     
            foreach ($rel_new as $_name) {
                $rel[] = $_name;
                if (! isset($ref[$_name][$page]))
                    $ref[$_name][$page] = 1;
            }
            $rel = array_unique($rel);
            if (! empty($rel)) {
                $fp = fopen(CACHE_DIR . encode($page) . '.rel', 'w')
                    or die_message('cannot write ' . htmlspecialchars(CACHE_DIR . encode($page) . '.rel'));
                fputs($fp, join("\t", $rel));
                fclose($fp);
            }
        }
     
        foreach ($ref as $page=>$arr) {
            $fp  = fopen(CACHE_DIR . encode($page) . '.ref', 'w')
                or die_message('cannot write ' . htmlspecialchars(CACHE_DIR . encode($page) . '.ref'));
            foreach ($arr as $ref_page=>$ref_auto)
                fputs($fp, $ref_page . "\t" . $ref_auto . "\n");
            fclose($fp);
        }
    } 



トップ 編集凍結差分バックアップ添付複製名前変更リロード 新規一覧 単語検索 最終更新  ヘルプ  最終更新のRSS
Last-modified: 2009-03-16 (月) 18:25:09 (3923d)