root/platform/tdiary/plugin/tdiarygraph_flashstyle.rb @ 38791

Revision 37368, 16.6 kB (checked in by drry, 3 years ago)
  • fixed regexes and HTML.
Line 
1# tdiarygraph_flashstyle.rb $Revision: 1.3 $
2#
3# Copyright (c) 2004 phonondrive <tdiary@phonondrive.com>
4# Distributed under the GPL
5#
6# プラグイン配布ページ:
7# http://phonondrive.com/trd/
8# --------------------------------------------------------------------
9#
10#
11#
12# Abstract:
13# --------------------------------------------------------------------
14# counter.rb のカウンタログ (counter.log) をグラフ化した
15# Flash アプレットを表示します。
16#
17#
18# Usage:
19# --------------------------------------------------------------------
20# プラグインは、プラグインフォルダに入れてください。
21# tdiarygraph*.swf を tdiary.rb と同じフォルダにアップロードします。
22# ヘッダ、フッタ部に記述した <%= tdiarygraph_flashstyle %> の部分に、
23# Flash アプレットが表示されます。
24# counter.log は日記登録時に .swf と同じフォルダにコピーされます。
25#
26# ※ counter.rb を使用しており、かつカウンタログ (counter.log) の出力を
27# オンにしている必要があります。
28#
29#
30# Options:
31# --------------------------------------------------------------------
32# グラフの色、透明度、サイズなどは、プリファレンス画面で設定できます。
33#
34#
35# In secure mode:
36# --------------------------------------------------------------------
37# たぶん動作しません。
38#
39#
40# Acknowledgements:
41# --------------------------------------------------------------------
42# counter.rb (counter.log)
43#
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
47#
48#
49=begin ChangeLog
502004.04.27 phonondrive  <tdiary@phonondrive.com>
51   * version 1.3.0
52                キャッシュ対策としてユニークIDを付加してファイル取得するオプションを追加
53                対応 Flash ファイルを e 系列に変更
54                フォントを _sans から 04b03b に変更
55                        04b03b.ttf, copyright (c) 1998-2001 YUJI OSHIMOTO
56                        http://www.04.jp.org/
572004.04.10 phonondrive  <tdiary@phonondrive.com>
58   * version 1.2.1
59                レポート書式で改行タグが機能しない不具合を修正
60                背景の枠線を表示しないオプションを追加
61                対応 Flash ファイルを d 系列に変更
622004.04.09 phonondrive  <tdiary@phonondrive.com>
63   * version 1.2.0
64                ログファイルが転送されない不具合を修正
65                作成するログのデフォルト名を変更 (tdiarygraph.log → counter.log)
66                線幅を絶対値で指定出来るオプションを追加
67                レポート書式のカスタマイズオプションを追加
68                対応 Flash ファイルを c 系列に変更
692004.04.05 phonondrive  <tdiary@phonondrive.com>
70   * version 1.1.1
71                線の太さを変更するオプションを追加
72                対応 Flash ファイルに b 系列を追加
732004.04.05 phonondrive  <tdiary@phonondrive.com>
74   * version 1.1.0
75                Ruby 1.6.x に対応 (1.6.7 で動作確認)
76                作成するログのデフォルト名を変更 (counter.log → tdiarygraph.log)
772004.04.04 phonondrive  <tdiary@phonondrive.com>
78   * version 1.0.0
79=end
80
81
82
83
84# --------------------------------------------------------------------
85# プラグインの表示
86# --------------------------------------------------------------------
87
88def 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)|
91        else
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(/&amp;uid/, "\\&=#{File.mtime(logname.untaint).to_i}")
94        end
95end
96
97
98# --------------------------------------------------------------------
99# 日記登録時の処理 (counter.log のコピー)
100# --------------------------------------------------------------------
101
102if /\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")
104
105        open("#{@cache_path}/counter/counter.log"){|input|
106                open(logname, "w"){|output|
107                        output.write(input.read)
108                }
109        }
110end
111
112
113# --------------------------------------------------------------------
114# プリファレンス画面での設定
115# --------------------------------------------------------------------
116
117add_conf_proc( 'tdiarygraph_f', 'tdiarygraph-flashstyle の設定' ) do
118
119        if @mode == 'saveconf' then
120
121                filename = "tdiarygraph468x60e.swf"
122                width = "468"
123                height = "60"
124                argvs = ""
125
126                argv = Array.new
127
128                @conf['tdiarygraph_f.uid'] = @cgi.params['uid'][0]
129                argv << "#{Time.now.to_i}&amp;uid" if @conf['tdiarygraph_f.uid'] == "1"
130
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]
135
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] != ""
140
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] != ""
165
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] != ""
170
171                @conf['tdiarygraph_f.bold'] = @cgi.params['bold'][0]
172                argv << "bold=#{@cgi.params['bold'][0]}" if @cgi.params['bold'][0] != ""
173
174                @conf['tdiarygraph_f.preview'] = @cgi.params['preview'][0]
175
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]
184                end
185
186                if argv.size > 0 then argvs = "?#{argv.join('&amp;')}" end
187
188                @conf['tdiarygraph_f.templete'] = tdiarygraph_flashstyle_templete(filename, argvs, width, height)
189        end
190
191
192        <<-HTML
193                <h3 class="subtitle">設定の概要</h3>
194                <p>() 内は初期値です。初期値を使用する場合は、空欄のままで構いません。色は RRGGBB 形式で指定して下さい。不透明度は 0 (透明) 〜 100 (不透明) です。線幅はピクセルで指定します。</p>
195                <hr>
196                <h3 class="subtitle">プレビュー</h3>
197                #{tdiarygraph_flashstyle_preview}
198                <hr>
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>
207                </select></p>
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>
212                <hr>
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>
216                <hr>
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>
224                </select></p>
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>[ 使用出来るタグ ] &lt;firstday&gt; : ログ初日, &lt;lastday&gt; : ログ最終日, &lt;days&gt; : ログ日数, &lt;total&gt; : 累計アクセス数, &lt;peak&gt; : 日別最大アクセス数, &lt;br&gt; : 改行</p>
229                <hr>
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>
236                </select></p>
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>
241                <hr>
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>
245                <hr>
246                <h3 class="subtitle">モアレ対策</h3>
247                <p>棒グラフの線幅を相対的に微調整します。(0) 設定した値に対して線幅がリニアに変更されるわけではありません。<br><br><input name="bold" value="#{h @conf['tdiarygraph_f.bold']}" size="20"></p>
248                <hr>
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>
254                </select></p>
255                <hr>
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>
261                </select></p>
262        HTML
263
264end
265
266
267def tdiarygraph_flashstyle_preview
268        unless @conf.mobile_agent?
269        <<-r
270                <p>#{if @conf['tdiarygraph_f.preview'] == "1" then "#{tdiarygraph_flashstyle}" else "プレビュー表示を有効にすると、ここに Flash が表示されます。" end}</p>
271        r
272        end
273end
274
275
276def tdiarygraph_flashstyle_templete( filename="tdiarygraph468x60e.swf", argvs="", width="468", height="60" )
277        <<-r
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>
287                </object>
288        r
289end
290
291
292def tdiarygraph_flashstyle_text_report_format( format="" )
293        if format != ""
294                r = format.gsub('<', '&lt;').gsub('>', '&gt;').gsub(' ', '+')
295        end
296end
Note: See TracBrowser for help on using the browser.