Nucleus

NP_StopDraft

2008年2月9日

3.31 SP1 にアップグレードしたついでに、オートドラフト機能を止めてしまおうと思った。いろいろ調べた結果、最も良く使われている方法は、javascript/xmlhttprequest.js をインクルードしなくするというもの。ただこの方法だと、コアをアップグレードする時に、そのつど変更をする必要がありそう。

一方で、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秒後に処理を行うことにしてある。

コメント

コメントはありません

コメント送信