CategoryWebサイト

WordPressの投票プラグインdemocracyをちょっと改造してみる。

うちでリクエスト受付用に設置しているフォームですが、
これはdemocracyというWordPressのプラグインです。

Democracy AJAX Poll at Jalenack

インストール後にウィジェットとして追加することでサイドバーに設置したり、
あるいはページに関数書いて設置したりできます。
AJAXなのでシームレスに結果を見たり投票したりできて便利なのですが、
管理画面が英語だったり、項目追加の際の重複チェックが無かったりするので、
ちょこっと改造してみました。

↓やったこと

  1. 日本語化
  2. 項目追加機能の強化

1. democracyを日本語化する

democracyのソースファイルは一応そのままでもある程度国際化されてるので、
あとは日本語翻訳ファイルを用意すればよい…はずでしたが、
load_plugin_textdomainが宣言されてないのでdemocracy.phpに追記が必要でした。

democracy/democracy.php

10行目
+ if(function_exists('load_plugin_textdomain'))
  load_plugin_textdomain('democracy','wp-content/plugins/democracy');

まずこれを追記します。
次に言語ファイルをdemocracyのディレクトリに設置します。
moファイルとpoファイルをここに置いておきますのでDLしてください。

≫ democracy 日本語化ファイル

解凍してdemocracyディレクトリへアップロードすればOKです。

※バグかもですが、ウィジェットとして使用時に「結果を見る」などで表示を切り替えると
 日本語化されてる箇所が英語に戻ってしまったりするので、class.phpファイルの該当箇所を
 直接日本語に書き換えてしまうとよいかもしれません。

2. 項目追加機能の強化

項目を自由に追加できる設定のとき、全く同じ文言でも追加できてしまったりするので
その場合は既にある方へ投票扱いにしたかったのと、NGワード機能が欲しかったので追加しました。

democracy/class.php

258行目
+ if (!$answer) return false;

297行目
- $wpdb->query("INSERT INTO {$table_prefix}democracyA VALUES ('', {$this->id}, '{$new_answer}', 0, 1)");    
- return $wpdb->insert_id;
+
$polled = $wpdb->get_row("SELECT * FROM `wp_democracyA` WHERE answer = '".$new_answer."'");
$ng_list = @fopen(get_option('siteurl').'/wp-content/plugins/democracy/ng_list.csv',"r");
if($ng_list){
  while($d = fgets($ng_list)){
    $d = split(",",$d);
    $mcnt = 0;
    foreach($d as $t){
      $nans = strtoupper(mb_convert_kana($new_answer,"KVaC"));
      $t = strtoupper(mb_convert_kana(trim($t),"KVaC"));
      if(ereg($t,$nans)){
        $mcnt++;
      }
    }
    if($mcnt==count($d)){$ng_flag=true;}
  }
}
if($ng_flag){
  echo '<div style="color:#FF0000;text-align:center;">'.$new_answer.'は投票できません。</div>';
  return false;
}elseif($new_answer!=$polled->answer){
  $wpdb->query("INSERT INTO {$table_prefix}democracyA VALUES ('', {$this->id}, '{$new_answer}', 0, 1)");
  return $wpdb->insert_id;
}else{
  return $polled->aid;
}

NGワード設定は、democracyのディレクトリにng_list.csvというファイル名で
CSVファイルを作成して設定します。
ng_list.csvのフォーマットは以下になります。
文字コードはWordPressの設定に合わせてください。
(文字コードチェックはしてないです)

democracy/ng_list.csv

いぬ
とり
ねこ,かわいい
neko2
WANKO

NGワードに指定したい文字列を一行ずつ書いていきます。
これらの文字列を含む単語は、追加できなくなります。
2単語以上を含んだ時にNGにしたい場合は、同じ行にカンマ(,)で区切って指定します。
例えば上の指定の場合、以下のようになります。

  • いぬ → ×
  • イヌ → ×
  • わんこ → 
  • とり → ×
  • トリ → ×
  • こいぬ → ×
  • にとり → ×
  • ねこ → 
  • かわいい → 
  • ねこはかわいい → ×
  • Neko2 → ×
  • wanko → ×

どうしても追加して欲しくない単語がある場合は
これで制限することが出来ます。
ひらがな・カタカナや英字大小の区別が付いてますので、
逐次追加してください。

追記:ひらがな、カタカナ(全角半角)は区別しないようにしました。
   英数字も全角半角区別しません。英字の大小も区別しません。

なお、ng_list.csvは用意しなくても問題なく動作します。
NGワードを指定したい時だけ作成すればよいです。

以上、備忘録も兼ねて記録しておくことにしました。

Firefox3.5試してみたよ!

7月1日よりリリースされたのでちょっとだけ試しました。
いつも使ってるアドオンがいくらか対応してないところがあるんで
本格導入はちょっと待ちますが。(・ω・)

雑感としては、確かにちょっと高速になったようなーという気分はありますが、
Javascriptがばりばり仕込まれてるページとかでない限りは
あんまり変わらないようなーという気がしてます。
ニュースサイトとか広告がいっぱい貼ってあったりするサイトは
早くなった感があるかもしれない。(・ω・n

あ、そういうJavascriptばりばりなページとして
ブログの管理画面とかはよく使う上に早い方がよいページではないかなと。
とりあえずWordPressの管理画面は少し快適になったよ!ヽ^シ’ω’)ノシ
あとGmailとかGoogleReaderとかも良くなったかもです。

あとそいえば今日はミクのゲームの発売日だったんですね!!すっかり忘れてた!(・ω・)
どうしようこれちょっと欲しいような気もするけど!!
携帯機ゲームは基本電車内でのプレイとなる自分からしてみると
このゲームを公衆の前では…!羞恥プレイすぎる…!!!(n゚ω゚`)

気になる動画など。

かわいいすごい。(・ω・)
それぞれの楽器がぴったりだと思うんですよ!
うんたんフランちゃんの人ね!


このホメ春香動画の動きとか音声編集のセンスとか
あまりにも非凡すぎて毎回お腹痛いですwwwww
色々ひどすぎるwwwwwww

あと今年最大のズコー貼っておきますね。
痛いニュース(ノ∀`):サガ4?ロマサガ4?→FFのDS新作でした 「FF外伝 光の4戦士」

        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄     
わたしが1位になんかなるわけない ヽ(´・ω・`)ノ
1位になったらわたしが四女かさげぽんを踏む絵を描きますよハハハ
byあやな

なんかうなさまが面白いこと言ってる。ハハハ。

うなさまが4女を射程圏にいれたもよう
この勢いは怖い

2位には食い込みそうですね。(・ω・)+

項目がめがっさ増えましたね。
どれにしようか悩んじゃう(・ω・n

ちょっと増えすぎてる気もします。(・ω・n

誰だ、蟲AAの項目作ったのはwwww

ほんとどうしたらいいのこれ……。

何も着ていないかのような下半身…だと…!
つい◆を探してしまい、見つけて狂喜乱舞した自分は正にしましまさんの掌の上なんですね(´ω`)

入力前もそれはそれで夢の広がる仕様を目指しました!よ!(・ω・)

すでにおへそにやられていたところにftmmとは・・・さすが先生だぜっ

ftmmは正義(ジャスティス)ッ!!!

ルナ娘さんのパンツの食い込み方にシマシマ先生の魂を感じました!ありがとうございます!
アァン…うえのボタンから拍手できなかったので… 
どじっこルナ娘さんきた!これで勝つる!!
横の食い込みムニッ部分がマニアックなこだわりっぷりで大変眼福でございました。やらかそうで素敵です(*´д`)=3

むっちり感が大事なんです!!(*’ω’*)
ちょっとむちっとしてる方がよいとおもいます!!よいです!

www多すぎますよ(っ^ω^c)wwwwwww

サーセンwwwwwwwww

ルナ子さんのPTメンバの名前は架空の名前なんだろうか・・?
それはそうと、しましまさんだけに縞パンなのですね(*’ω’*)

もちろん架空です。出来るだけ頭悪そうな名前にしました。
まぁなんというか…しまぱんのせいでこんな二つ名を授かってしまったわけですが。(n゚ω゚`)

◆でてっきり装備が外れると思ったのに!
でもこれはこれで…ごちそうさまです

そもそも装備が外れていますからね!!

ビキニの下にパンツとな?許さん!

あれはブルマ的なものじゃないかと思って…つい…。(n゚ω゚`)

ftmmもいい・・が、型の飾りがアイスクリームに見える件について
なんか肩がストロベリーアイスに見えてきた・・・
ルナ子さんの肩が苺シュークリームに見えた(゚~゚)

たべものに見えてしまった様子…!
しかし実際あのピンク物体は一体なんなんでしょうか…。魔力の石とかなの…?(n゚ω゚`)

手を合わせ (‘人’) もちそうさま
これは良いしましま(゚∀゚ )
ごちそうさまでした、

おそまつさまでした。(・ω・)

赤いしましま(’ハ’*
ルナ子さんもスカートだった・・・・だったら!。゚゚(´□`。)°゚。

スカートだったら…という想いを込めての一作でした。(・ω・)

このルナ子さんと5女さんはどちらがより頭悪いのでしょうかね・・・(性的な意味で)

このルナ子さんはどちらかというとうっかりさん!(・ω・)
氷Dで涼んだ後に水鎧のまま名無し行っちゃうくらいのうっかりさん!

なんか背景のベッドと支度できたってセリフから、差分以上に卑猥なイメージしか浮かばない件について

だからわざわざ外へ出るイメージを強くするために
「準備できた」ではなく「支度できた」にしたんですけどね…!!

投票総数見てから「うな様踏んで下さい」に投票余裕でした!
あ~んど、ロナ子なぜ(下着)しましまにしたし!
いいぞもっとやr(ry

こまったらしましまにしとけばいいって誰かが言ってたので。

投票してるうち3割弱が踏んでほしい人・・・
なんて紳士の多いところなんでしょう

本当に紳士だらけで困りますね。(n゚ω゚`)

こんな絵を描いているから18禁サイトに昇格できたんだよ、わかってるの!?
ありがとうしましま先生!

ちょっとまってください。“昇格”なの…!!?∑(n゚ω゚`)

ええい、会話ウィンドゥが邪魔だ。
ついでにしましまも邪魔d

カーソルを載せて出てくるテキストを見てください…!(・ω・n

チャット窓無し◆画像あったーヽ(´ー`)ノ

ちゃんと用意しておきましたよ!!(・ω・)b

聞いてない!!
上が脱げないなんて聞いてない!!
パンツ脱いでからコマンド打った俺にあやまれ!

ごめんなさいパンツはけ。(゚д゚)

┌(┌ (┐’ω’)┐*・゜゚・*:.。..。.:*・゜
蟲のはかいこうせん!!
┌(┌ (┐゚ω゚)┐
こうかはばつぐんだ!

ノーマルタイプの技でこうかはばつぐんとは…!!

しましまのおかげで無事ロロナをおうちに迎え入れる事ができました本当にありがとうございました。

い…いいなあ!!!!(´;ω;`)

WordPressのカレンダーを改造してみるよ!

またブログネタなのですが…!
サイドバーなどに設置するカレンダーには、
日曜日の列は赤字にしたり土曜日の日を青字にしたいという
こだわりがあるんですが、デフォルトなどは列ごとに区別できるclassとかは
さっぱり入ってないので、CSSで指定したりできませんでした。

とりあえずプラグインのカレンダーを色々探しましたが、
ぱっと見そのあたりを満たしてそうなのはなさげだったので、
もうこれは作るか…と。(・ω・)

とりあえずプラグインでもAJAX Calenderが機能的にステキだったのと、
いい感じに弄れそうだったのでこれを改造しちゃうことに。
GPLらしいので公開しちゃうー。

ajax-calendar2/model/calender.php

128行目
– echo “\n\t\t<th abbr=\”$wd\” scope=\”col\” title=\”$wd\”>” . $day_abbrev[$wd] . ‘</th>’;
+ $day_name = substr($wd,0,3);
+ $day_classname = strtolower($day_name);
+ echo “\n\t\t<th abbr=\”$wd\” scope=\”col\” title=\”$wd\” class=\”c_$day_classname\”>” . $day_name . ‘</th>’;

222行目
+ $week_v = calendar_week_mod(date(‘w’, mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins);

230行目
– echo ‘<td id=”today”>’;
+ echo ‘<td class=”wd’.$week_v.'” id=”today”>’;

232行目
– echo ‘<td>’;
+ echo ‘<td class=”wd’.$week_v.'”>’;

以上で見出し行に c_sun,c_mon, … , c_sat というclassと、
テーブル内の各列にwd0 ~ wd1というclassが追加されるので、
これらに対してCSSを指定します。

AJAX Calenderの場合は、clalender.cssでデザイン指定しているので、
その中に書くのもよいですし、使用中のテーマファイルのCSSに追加しても良いと思います。

ajax-calendar2/calender.css

.c_sun, .wd0, .wd0 a {
color:#CC0000;
}
.c_sat, .wd6, .wd6 a {
color:#0000CC;
}

平日の色はテーマファイルの色に準拠していると思います。
そちらも変更する場合は、c_mon ~ c_fri と、 wd1~wd5 に指定すればよいです。

うちの場合は他にも色々やってるんですが、
とりあえず列ごとに色を変える方法として紹介しました。

ちなみにほぼ構成は同じなので、WordPressの wp-includes/general-template.php の
カレンダーに関する部分を同じように修正すれば、デフォルトのカレンダーも同様に出来ますが、
あんまりincludesのファイルを弄ると本体アップデートの際に元に戻ってしまうので
出来ればこういうのはプラグインとかテーマファイル内でやりたいですね。