NP_StopDraft
2008年2月9日
3.31 SP1 にアップグレードしたついでに、オートドラフト機能を止めてしまおうと思った。いろいろ調べた結果、最も良く使われている方法は、javascript/xmlhttprequest.js をインクルードしなくするというもの。ただこの方法だと、コアをアップグレードする時に、そのつど変更をする必要がありそう。
一方で、NKJGさんがNP_StopAutoSavingDraftというプラグインを公開されている。やっぱりこれかなと思ってダウンロードしてみたら、思ったよりも高機能の様子。私としては、インストールすることでオートドラフトをストップするだけでよいので、結局は自作することにした。
javascript/xmlhttprequest.jsを調べていて分かったことは、これはオートドラフトセーブだけではなくて、チケットの更新も行っていること。なら、こちらのほうは残しておいて、オートドラフトセーブだけストップしたい。
これを行うには、xmlhttprequest[0].send()メソッドを書き換えて、ajaxのリクエスト送信を無効にすればよい。できたプラグインは次のとおり。
xmlhttprequest[0]オブジェクトの作成よりも先にAddItemFormExtrasとEditItemFormExtrasの2つのイベントが起きるので、タイマーをセットして、10秒後に処理を行うことにしてある。
一方で、NKJGさんがNP_StopAutoSavingDraftというプラグインを公開されている。やっぱりこれかなと思ってダウンロードしてみたら、思ったよりも高機能の様子。私としては、インストールすることでオートドラフトをストップするだけでよいので、結局は自作することにした。
javascript/xmlhttprequest.jsを調べていて分かったことは、これはオートドラフトセーブだけではなくて、チケットの更新も行っていること。なら、こちらのほうは残しておいて、オートドラフトセーブだけストップしたい。
これを行うには、xmlhttprequest[0].send()メソッドを書き換えて、ajaxのリクエスト送信を無効にすればよい。できたプラグインは次のとおり。
<?php class NP_StopDraft extends NucleusPlugin { function getName() { return 'NP_StopDraft'; } function getMinNucleusVersion() { return 330; } function getAuthor() { return 'Katsumi'; } function getVersion() { return '0.1'; } function getURL() {return 'http://japan.nucleuscms.org/wiki/plugins:authors:katsumi';} function getDescription() { return $this->getName().' plugin'; } function supportsFeature($what) { return ($what=='SqlTablePrefix')?1:0; } function getEventList() { return array('AddItemFormExtras','EditItemFormExtras'); } function event_AddItemFormExtras(){ $this->showScript(); } function event_EditItemFormExtras(){ $this->showScript(); } function showScript(){ ?><script type="text/javascript"> np_stopdraft=setInterval('func_np_stopdraft()',10000); function func_np_stopdraft(){ try{ clearInterval(np_stopdraft); xmlhttprequest[0].send=function(arg1){ try{ goal.innerHTML='Auto draft is turned off'; }catch(e){ } } }catch(e){ } } </script><?php } } ?>
xmlhttprequest[0]オブジェクトの作成よりも先にAddItemFormExtrasとEditItemFormExtrasの2つのイベントが起きるので、タイマーをセットして、10秒後に処理を行うことにしてある。