**[[続・質問箱/376]] [#da019944] #author("2018-03-11T14:10:51+09:00;2004-10-07T19:25:41+09:00","","") **[[質問箱/2376]] [#da019944] |RIGHT:70|LEFT:410|c |~カテゴリ|| |~サマリ|InterWikiNameにメールアドレス| |~バージョン|1.4.3以降| |~投稿者|[[xpoint]]| |~状態|完了| |~投稿日|&new{2004-10-07 (木) 09:23:13};| ***質問 [#t97cb750] 社内ローカルでPukiWikiを3本ほど立てております. で,あるといいなとおもって,いろいろ探してみましたが 見つからなかったので,ここで質問させていただきます. 本来の目的とは違うかもしれませんが.... InterWikiNameにメールアドレスの登録はできないものでしょうか? たとえば,~ [hoge@aaa.aaa.jp hoge]mail といった感じで. 社内では各個人というのはWEBページを持っているわけではなく,メールのみがほとんどなので,このような機能が実現できればと... 今は,暫定的にtrackerでlistbox3を使用してリストに [[hoge:hoge@aaa.aaa.jp]] としてリンクしているのですが,何か他にいい方法があれば 教えていただけるとありがたいです.よろしくお願いします. ***回答 [#xa6c3cec] -ちょっと違うかもしれませんが、私の理解でInterWiki機能を拡張してみました。 -- [[teanan]] &new{2004-10-07 (木) 10:09:13}; --lib/make_link.phpへのパッチ(740行目付近) $interwikinames = array(); foreach (get_source($interwiki) as $line) { - if (preg_match('/\[((?:(?:https?|ftp|news):\/\/|\.\.?\/)[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s([^\]]+)\]\s?([^\s]*)/',$line,$matches)) + if (preg_match('/\[((?:(?:https?|ftp|news):\/\/|\.\.?\/|mailto:)[!~*\'();\/?:\@&=+\$,%#\w.-]*)\s([^\]]+)\]\s?([^\s]*)/',$line,$matches)) { $interwikinames[$matches[2]] = array($matches[1],$matches[3]); } --InterWikiNameへの登録 [mailto:$1@hogehoge.jp mail] raw --登録後に下記のように指定すると、メールアドレスへのリンクになります。 [[mail:address]] // → mailto:address@hogehoge.jp --こんな感じでいかがでしょうか? -- [[teanan]] &new{2004-10-07 (木) 10:09:13}; -早速ありがとうございます.たしかにそのようにしてもできますねぇ...~ できれば, --InterWikiNameへの登録 [mailto:UserName@DomainName 氏名] raw? でできるといいのですが.....~ trackerなので,フォーマットつくって, [[[氏名]]] としてしまえば,リンクできるようにしたいのです. -- [[xpoint]] &new{2004-10-07 (木) 11:37:04}; -とりあえず.... InterWikiNameではないのですが,$line_rulesを使用して目的は達することができましたが.....~ これだと編集が管理者(設置者)しかできなくなってしまいますねぇ.... やっぱり,InterWikiNameでできれば... -- [[xpoint]] &new{2004-10-07 (木) 14:17:46}; -Interwikiname 関係ないですね。単に 氏名を書いて簡単にメールアドレスの変換がしたいだけですよね これって。同一のドメインの人が多いからドメイン部を簡単に表記したいなら teanan さんの解はありですけど,''%%%InterWikiNameはリンクでない%%%''のでxpoint さんが欲しいのは別解法がいるような気がしてます -- [[merlin]] &new{2004-10-07 (木) 14:41:55}; -- これって 設定ページに置いてある E-Mailアドレス変換表から mail addlerss への変換 を行うインラインプラグインのが スマートのような気がします。 たとえば &n2m(氏名); って書くと 設定ページのリストからさがして <a href="mailto:hoghoge@domain> 氏名 </a> なんてのを作ってくれるやつ -- [[merlin]] &new{2004-10-07 (木) 14:51:54}; --このような用途に使えるか試していませんが、[[自作プラグイン/def.inc.php]]とか・・・ -- [[teanan]] &new{2004-10-07 (木) 15:06:05}; ---それを一発かますのは便利かもしれませんね。 名字氏名って書かないで 名字 氏名とか書く人がいらっしゃいますから.. -- [[merlin]] &new{2004-10-07 (木) 15:13:58}; -ありがとうございます.自作プラグイン/def.inc.phpで実現することができました.~ 今の使い方で行くと,trackerでフォーマットが決まっていて,氏名はlistbox3で選択しているので,~ 簡単にdefのリスト作って実現できました.~ defの定義では,以下の様にしました. :<a href="mailto:MailAddress">氏名</a>|氏名 trackerでは, &def([user_name]); これで実現した方が他のところで変換されたくない時都合がいいですね. -- [[xpoint]] &new{2004-10-07 (木) 15:55:20}; -このような定義で動作するということは、なんか別の意味でやばそうな気が (^^; -- [[teanan]] &new{2004-10-07 (木) 16:10:30}; --あーやっぱり・・・ (^^; -- [[teanan]] &new{2004-10-07 (木) 16:35:36}; -ちょっと問題((いわゆるXSS脆弱性。作者のKentさんには通報しておきました (^^; ))がありますので、下記のようにdefプラグインを修正してから使ったほうが良さそうです。 -- [[teanan]] &new{2004-10-07 (木) 17:01:43}; --プラグインのパッチ当て 187行目付近 foreach($temp as $key => $data){ $temp[$key] = trim($data); } - $name = trim($regs[1]); + $name = convert_html(htmlspecialchars(trim($regs[1]))); $this->defs[DEF_PAGENAME][$name] = new DEF_Definition($name); --defへの定義 :MailAddress@hogehoge.jp|氏名 -あ,そこまで深く考えてませんでした.....よかったのかな????&worried; パッチあてて使用します.ありがとうございました. -- [[xpoint]] &new{2004-10-07 (木) 18:40:00}; -今,変更してみましたが....これだと 氏名によってメールアドレスが置換されますよね. どうも,2重に変換されないようで..... :MailAddress@hogehoge.jp|氏名 で定義するして... &def(氏名); とすると,メールアドレスがダイレクトに表示. [[氏名:&def(氏名)]] とすると,表示は [[氏名:メールアドレス]] となってしまいます.&worried; -- [[xpoint]] &new{2004-10-07 (木) 18:54:21}; -ああ、すみません考慮不足でした (^^; --プラグインのパッチ当て((htmlspecialcharsはいりませんでした)) $name = convert_html(trim($regs[1])); --defの定義 :[[氏名>MailAddress@hogehoge.jp]]|氏名 これでどうでしょう? -- [[teanan]] &new{2004-10-07 (木) 19:16:51}; -あ!いま,def.ini.phpみてて同じこと思いつきました.これで思ったとおりの動きになりました.ありがとうございます. -- [[xpoint]] &new{2004-10-07 (木) 19:25:24}; #comment