1
# tdiarygraph_flashstyle.rb $Revision: 1.3 $
3
# Copyright (c) 2004 phonondrive <tdiary@phonondrive.com>
4
# Distributed under the GPL
7
# http://phonondrive.com/trd/
8
# --------------------------------------------------------------------
13
# --------------------------------------------------------------------
14
# counter.rb のカウンタログ (counter.log) をグラフ化した
19
# --------------------------------------------------------------------
20
# プラグインは、プラグインフォルダに入れてください。
21
# tdiarygraph*.swf を tdiary.rb と同じフォルダにアップロードします。
22
# ヘッダ、フッタ部に記述した <%= tdiarygraph_flashstyle %> の部分に、
24
# counter.log は日記登録時に .swf と同じフォルダにコピーされます。
26
# ※ counter.rb を使用しており、かつカウンタログ (counter.log) の出力を
31
# --------------------------------------------------------------------
32
# グラフの色、透明度、サイズなどは、プリファレンス画面で設定できます。
36
# --------------------------------------------------------------------
41
# --------------------------------------------------------------------
42
# counter.rb (counter.log)
44
# Copyright (c) 2002 MUTOH Masao <mutoh@highway.ne.jp>
45
# Distributed under the GPL2.
46
# http://ponx.s5.xrea.com/hiki/ja/counter.rb.html
50
2004.04.27 phonondrive <tdiary@phonondrive.com>
52
キャッシュ対策としてユニークIDを付加してファイル取得するオプションを追加
53
対応 Flash ファイルを e 系列に変更
54
フォントを _sans から 04b03b に変更
55
04b03b.ttf, copyright (c) 1998-2001 YUJI OSHIMOTO
57
2004.04.10 phonondrive <tdiary@phonondrive.com>
59
レポート書式で改行タグが機能しない不具合を修正
61
対応 Flash ファイルを d 系列に変更
62
2004.04.09 phonondrive <tdiary@phonondrive.com>
65
作成するログのデフォルト名を変更 (tdiarygraph.log → counter.log)
68
対応 Flash ファイルを c 系列に変更
69
2004.04.05 phonondrive <tdiary@phonondrive.com>
72
対応 Flash ファイルに b 系列を追加
73
2004.04.05 phonondrive <tdiary@phonondrive.com>
75
Ruby 1.6.x に対応 (1.6.7 で動作確認)
76
作成するログのデフォルト名を変更 (counter.log → tdiarygraph.log)
77
2004.04.04 phonondrive <tdiary@phonondrive.com>
84
# --------------------------------------------------------------------
86
# --------------------------------------------------------------------
88
def tdiarygraph_flashstyle
89
if @conf['tdiarygraph_f.templete'] == nil or @conf['tdiarygraph_f.templete'] == ""
90
%Q|使用を開始するには、<a href="./#{h @update}?conf=tdiarygraph_f">プリファレンス画面</a>にて一度設定を完了して下さい。(tdiarygraph-flashstyle)|
92
logname = ((@conf['tdiarygraph_f.log_path'] != "" and @conf['tdiarygraph_f.log_path'] != nil) ? @conf['tdiarygraph_f.log_path'] : "counter.log")
93
@conf['tdiarygraph_f.templete'].sub(/&uid/, "\\&=#{File.mtime(logname.untaint).to_i}")
98
# --------------------------------------------------------------------
99
# 日記登録時の処理 (counter.log のコピー)
100
# --------------------------------------------------------------------
102
if /\A(?:append|replace)\z/ =~ @mode and @cgi.params['hide'][0] != 'true' then
103
logname = ((@conf['tdiarygraph_f.log_path'] != "" and @conf['tdiarygraph_f.log_path'] != nil) ? @conf['tdiarygraph_f.log_path'] : "counter.log")
105
open("#{@cache_path}/counter/counter.log"){|input|
106
open(logname, "w"){|output|
107
output.write(input.read)
113
# --------------------------------------------------------------------
115
# --------------------------------------------------------------------
117
add_conf_proc( 'tdiarygraph_f', 'tdiarygraph-flashstyle の設定' ) do
119
if @mode == 'saveconf' then
121
filename = "tdiarygraph468x60e.swf"
128
@conf['tdiarygraph_f.uid'] = @cgi.params['uid'][0]
129
argv << "#{Time.now.to_i}&uid" if @conf['tdiarygraph_f.uid'] == "1"
131
@conf['tdiarygraph_f.type'] = @cgi.params['type'][0]
132
@conf['tdiarygraph_f.filename'] = @cgi.params['filename'][0]
133
@conf['tdiarygraph_f.width'] = @cgi.params['width'][0]
134
@conf['tdiarygraph_f.height'] = @cgi.params['height'][0]
136
@conf['tdiarygraph_f.log_path'] = @cgi.params['log_path'][0]
137
argv << "log_path=#{@cgi.params['log_path'][0]}" if @cgi.params['log_path'][0] != ""
138
@conf['tdiarygraph_f.init_num'] = @cgi.params['init_num'][0]
139
argv << "init_num=#{@cgi.params['init_num'][0]}" if @cgi.params['init_num'][0] != ""
141
@conf['tdiarygraph_f.text_text'] = @cgi.params['text_text'][0].upcase
142
argv << "text_text=#{h NKF::nkf('-s', @cgi.params['text_text'][0].upcase)}" if @cgi.params['text_text'][0] != ""
143
@conf['tdiarygraph_f.text_rgb'] = @cgi.params['text_rgb'][0]
144
argv << "text_rgb=0x#{@cgi.params['text_rgb'][0]}" if @cgi.params['text_rgb'][0] != ""
145
@conf['tdiarygraph_f.text_report'] = @cgi.params['text_report'][0]
146
argv << "text_report=#{@cgi.params['text_report'][0]}" if @cgi.params['text_report'][0] == "0"
147
@conf['tdiarygraph_f.text_report_format'] = @cgi.params['text_report_format'][0]
148
argv << "text_report_format=#{tdiarygraph_flashstyle_text_report_format(@cgi.params['text_report_format'][0])}" if @cgi.params['text_report_format'][0] != ""
149
@conf['tdiarygraph_f.text_report_rgb'] = @cgi.params['text_report_rgb'][0]
150
argv << "text_report_rgb=0x#{@cgi.params['text_report_rgb'][0]}" if @cgi.params['text_report_rgb'][0] != ""
151
@conf['tdiarygraph_f.bg_rgb'] = @cgi.params['bg_rgb'][0]
152
argv << "bg_rgb=0x#{@cgi.params['bg_rgb'][0]}" if @cgi.params['bg_rgb'][0] != ""
153
@conf['tdiarygraph_f.bg_alpha'] = @cgi.params['bg_alpha'][0]
154
argv << "bg_alpha=#{@cgi.params['bg_alpha'][0]}" if @cgi.params['bg_alpha'][0] != ""
155
@conf['tdiarygraph_f.bg_frame'] = @cgi.params['bg_frame'][0]
156
argv << "bg_frame=#{@cgi.params['bg_frame'][0]}" if @cgi.params['bg_frame'][0] == "1"
157
@conf['tdiarygraph_f.bar_rgb'] = @cgi.params['bar_rgb'][0]
158
argv << "bar_rgb=0x#{@cgi.params['bar_rgb'][0]}" if @cgi.params['bar_rgb'][0] != ""
159
@conf['tdiarygraph_f.bar_alpha'] = @cgi.params['bar_alpha'][0]
160
argv << "bar_alpha=#{@cgi.params['bar_alpha'][0]}" if @cgi.params['bar_alpha'][0] != ""
161
@conf['tdiarygraph_f.line_rgb'] = @cgi.params['line_rgb'][0]
162
argv << "line_rgb=0x#{@cgi.params['line_rgb'][0]}" if @cgi.params['line_rgb'][0] != ""
163
@conf['tdiarygraph_f.line_alpha'] = @cgi.params['line_alpha'][0]
164
argv << "line_alpha=#{@cgi.params['line_alpha'][0]}" if @cgi.params['line_alpha'][0] != ""
166
@conf['tdiarygraph_f.bar_width'] = @cgi.params['bar_width'][0]
167
argv << "bar_width=#{@cgi.params['bar_width'][0]}" if @cgi.params['bar_width'][0] != ""
168
@conf['tdiarygraph_f.line_width'] = @cgi.params['line_width'][0]
169
argv << "line_width=#{@cgi.params['line_width'][0]}" if @cgi.params['line_width'][0] != ""
171
@conf['tdiarygraph_f.bold'] = @cgi.params['bold'][0]
172
argv << "bold=#{@cgi.params['bold'][0]}" if @cgi.params['bold'][0] != ""
174
@conf['tdiarygraph_f.preview'] = @cgi.params['preview'][0]
176
if @cgi.params['type'][0] == "0"
177
filename = @cgi.params['filename'][0]
178
width = @cgi.params['width'][0]
179
height = @cgi.params['height'][0]
180
elsif @cgi.params['type'][0]
181
filename = "tdiarygraph#{@cgi.params['type'][0].delete('-')}.swf"
182
width = @cgi.params['type'][0].split('-').first.split('x')[0]
183
height = @cgi.params['type'][0].split('-').first.split('x')[1]
186
if argv.size > 0 then argvs = "?#{argv.join('&')}" end
188
@conf['tdiarygraph_f.templete'] = tdiarygraph_flashstyle_templete(filename, argvs, width, height)
193
<h3 class="subtitle">設定の概要</h3>
194
<p>() 内は初期値です。初期値を使用する場合は、空欄のままで構いません。色は RRGGBB 形式で指定して下さい。不透明度は 0 (透明) 〜 100 (不透明) です。線幅はピクセルで指定します。</p>
196
<h3 class="subtitle">プレビュー</h3>
197
#{tdiarygraph_flashstyle_preview}
199
<h3 class="subtitle">表示する Flash アプレットの選択</h3>
200
<p><select name="type">
201
<option value="0"#{" selected" if @conf['tdiarygraph_f.type'] == "0"}>プリセットを使用しない</option>
202
<option value="468x60-e"#{" selected" if @conf['tdiarygraph_f.type'] == "468x60-e" or @conf['tdiarygraph_f.type'] == nil or @conf['tdiarygraph_f.type'] == ""}>tdiarygraph468x60e.swf, 468x60</option>
203
<option value="728x90-e"#{" selected" if @conf['tdiarygraph_f.type'] == "728x90-e"}>tdiarygraph728x90e.swf, 728x90</option>
204
<option value="125x125-e"#{" selected" if @conf['tdiarygraph_f.type'] == "125x125-e"}>tdiarygraph125x125e.swf, 125x125</option>
205
<option value="240x180-e"#{" selected" if @conf['tdiarygraph_f.type'] == "240x180-e"}>tdiarygraph240x180e.swf, 240x180</option>
206
<option value="120x90-e"#{" selected" if @conf['tdiarygraph_f.type'] == "120x90-e"}>tdiarygraph120x90e.swf, 120x90</option>
208
<h3 class="subtitle">プリセットを使用しない場合は、以下で指定して下さい。</h3>
209
<p>Flash のファイル名<br><input name="filename" value="#{h @conf['tdiarygraph_f.filename']}" size="40"></p>
210
<p>Flash の表示幅<br><input name="width" value="#{h @conf['tdiarygraph_f.width']}" size="20"></p>
211
<p>Flash の表示高さ<br><input name="height" value="#{h @conf['tdiarygraph_f.height']}" size="20"></p>
213
<h3 class="subtitle">アクセスログデータ</h3>
214
<p>本プラグインが作成する counter.log の複製のファイル名 (counter.log)<br><input name="log_path" value="#{h @conf['tdiarygraph_f.log_path']}" size="20"></p>
215
<p>累計アクセス数の初期値。(0) counter.rb で init_num を指定している場合は、同じ値 (#{@conf['counter.init_num']}) を設定してください。<br><input name="init_num" value="#{h @conf['tdiarygraph_f.init_num']}" size="20"></p>
217
<h3 class="subtitle">タイトルテキスト</h3>
218
<p>タイトルテキスト (TDIARYGRAPH-FLASHSTYLE)<br>使用出来る文字は、英大文字 (A-Z) と数字 (0-9)、および記号のみです。<br><input name="text_text" value="#{h @conf['tdiarygraph_f.text_text']}" size="20"></p>
219
<p>タイトルテキストの色 (FFFFFF)<br><input name="text_rgb" value="#{h @conf['tdiarygraph_f.text_rgb']}" size="20"></p>
220
<h3 class="subtitle">レポートテキスト</h3>
221
<p>レポートの表示有無 (表示)<br><select name="text_report">
222
<option value="1"#{" selected" if @conf['tdiarygraph_f.text_report'] != "0"}>表示</option>
223
<option value="0"#{" selected" if @conf['tdiarygraph_f.text_report'] == "0"}>非表示</option>
225
<p>レポートテキストの色 (CCCCCC)<br><input name="text_report_rgb" value="#{h @conf['tdiarygraph_f.text_report_rgb']}" size="20"></p>
226
<h3 class="subtitle">レポート書式のカスタマイズ</h3>
227
<p>タグを埋め込んだ位置にデータが展開されます。<br>使用出来る文字 (タグを除く) は、英大文字 (A-Z) と数字 (0-9)、および記号のみです。<br><input name="text_report_format" value="#{h @conf['tdiarygraph_f.text_report_format']}" size="70"></p>
228
<p>[ 使用出来るタグ ] <firstday> : ログ初日, <lastday> : ログ最終日, <days> : ログ日数, <total> : 累計アクセス数, <peak> : 日別最大アクセス数, <br> : 改行</p>
230
<h3 class="subtitle">背景や棒グラフの色</h3>
231
<p>背景の色 (333333)<br><input name="bg_rgb" value="#{h @conf['tdiarygraph_f.bg_rgb']}" size="20"></p>
232
<p>背景の不透明度 (100)<br><input name="bg_alpha" value="#{h @conf['tdiarygraph_f.bg_alpha']}" size="20"></p>
233
<p>背景の枠線 (非表示)<br><select name="bg_frame">
234
<option value="0"#{" selected" if @conf['tdiarygraph_f.bg_frame'] == "0" or @conf['tdiarygraph_f.bg_frame'] == nil or @conf['tdiarygraph_f.bg_frame'] == ""}>非表示</option>
235
<option value="1"#{" selected" if @conf['tdiarygraph_f.bg_frame'] == "1"}>左と上に表示</option>
237
<p>日別アクセス数棒グラフの色 (CCCCCC)<br><input name="bar_rgb" value="#{h @conf['tdiarygraph_f.bar_rgb']}" size="20"></p>
238
<p>日別アクセス数棒グラフの不透明度 (100)<br><input name="bar_alpha" value="#{h @conf['tdiarygraph_f.bar_alpha']}" size="20"></p>
239
<p>累計アクセス数棒グラフの色 (666666)<br><input name="line_rgb" value="#{h @conf['tdiarygraph_f.line_rgb']}" size="20"></p>
240
<p>累計アクセス数棒グラフの不透明度 (100)<br><input name="line_alpha" value="#{h @conf['tdiarygraph_f.line_alpha']}" size="20"></p>
242
<h3 class="subtitle">棒グラフの線幅</h3>
243
<p>日別アクセス数棒グラフの線幅を絶対値で指定します。<br><input name="bar_width" value="#{h @conf['tdiarygraph_f.bar_width']}" size="20"></p>
244
<p>累計アクセス数棒グラフの線幅を絶対値で指定します。<br><input name="line_width" value="#{h @conf['tdiarygraph_f.line_width']}" size="20"></p>
246
<h3 class="subtitle">モアレ対策</h3>
247
<p>棒グラフの線幅を相対的に微調整します。(0) 設定した値に対して線幅がリニアに変更されるわけではありません。<br><br><input name="bold" value="#{h @conf['tdiarygraph_f.bold']}" size="20"></p>
249
<h3 class="subtitle">ユニークID を使用したファイル取得</h3>
250
<p>ファイル取得のリクエストにユニークID (例えば ?#{Time.now.to_i}) を含めることにより、古いファイルがブラウザにキャッシュされたままになるのを防ぎます。Flash のユニークID はプリファレンス設定時に、ログファイルのユニークID はエントリ登録時に更新されます。</p>
251
<p>ユニークID の付加 (付加する)<br><select name="uid">
252
<option value="1"#{" selected" if @conf['tdiarygraph_f.uid'] != "0"}>付加する</option>
253
<option value="0"#{" selected" if @conf['tdiarygraph_f.uid'] == "0"}>付加しない</option>
256
<h3 class="subtitle">プレビュー</h3>
257
<p>表示したい SWF ファイル (.swf) が tdiary.rb と同じフォルダにアップロードされている必要があります。また、カウンタログファイルが SWF ファイルと同じフォルダに転送されていない場合にはグラフが表示されません。</p>
258
<p>プレビュー (非表示)<br><select name="preview">
259
<option value="0"#{" selected" if @conf['tdiarygraph_f.preview'] != "1"}>非表示</option>
260
<option value="1"#{" selected" if @conf['tdiarygraph_f.preview'] == "1"}>表示</option>
267
def tdiarygraph_flashstyle_preview
268
unless @conf.mobile_agent?
270
<p>#{if @conf['tdiarygraph_f.preview'] == "1" then "#{tdiarygraph_flashstyle}" else "プレビュー表示を有効にすると、ここに Flash が表示されます。" end}</p>
276
def tdiarygraph_flashstyle_templete( filename="tdiarygraph468x60e.swf", argvs="", width="468", height="60" )
278
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab" width="#{h width}" height="#{h height}" id="tdiarygraph" align="middle">
279
<param name="allowScriptAccess" value="sameDomain">
280
<param name="movie" value="#{h filename}#{h argvs}">
281
<param name="play" value="false">
282
<param name="loop" value="false">
283
<param name="quality" value="high">
284
<param name="wmode" value="transparent">
285
<param name="bgcolor" value="#ffffff">
286
<embed src="#{h filename}#{h argvs}" play="false" loop="false" quality="high" wmode="transparent" bgcolor="#ffffff" width="#{h width}" height="#{h height}" name="tdiarygraph" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"></embed>
292
def tdiarygraph_flashstyle_text_report_format( format="" )
294
r = format.gsub('<', '<').gsub('>', '>').gsub(' ', '+')