<% # vim:set ts=2 sts=2 sw=2 bs=2 ai si et nu ff=dos ft=ruby: # $Id$ $KCODE = "utf" ERuby::charset = "utf-8" _lib = File::dirname(ENV["SCRIPT_FILENAME"].split(/\/html\//)[1]).untaint load "../../cgi-bin/#{_lib}/loader.rb".untaint load "../../cgi-bin/#{_lib}/lib/ssi2.rb".untaint load "../../cgi-bin/#{_lib}/lib/counter.rb".untaint # カウンター def make_counter(eb, counter, order, off = false) counter.total=order[:total] counter.start=order[:start] off_counter = 0 counter.format.each do |_i,_j| if _i != counter.now order[:counter] << sprintf( %[%s ], _j, order[:argv].size.nonzero? ? "&" + order[:argv].join("&") : "", _i ) else order[:counter] << sprintf(%[%s ], _i) end off_counter += 1 end if off and off_counter == 1 order[:counter] = "" end if counter.now != 1 and counter.count.nonzero? order[:prev] = sprintf( %[前へ ], counter.now - 2, order[:argv].size.nonzero? ? "&" + order[:argv].join("&") : "" ) end if counter.now != counter.count order[:next] = sprintf( %[次へ ], counter.now, order[:argv].size.nonzero? ? "&" + order[:argv].join("&") : "" ) end order end def make_cal(eb, date, days = [], selected = 0) cal = Array::new _today = Date::today cal << %[] (0..6).each do |_i| _class = "" _class = "sunday" if _i == 0 _class = "saturday" if _i == 6 cal << %[] end cal << %[] if (_b = (date.week_beginning.wday)) > 0 cal << %[] _b.times do cal << %[] end if _b == 6 cal << %[] end end date.each_day do |_d| if _d.to_s == selected.to_s _str = %[#{_d.day}] else if days.index(_d.day) _str = %[#{_d.day}] else _str = _d.day end end _class = [] if _d == _today _class << "today" end #if _d.holiday? # _class << "holiday" #end case _d.wday when 0 _class << "sunday" cal << %[] when 6 _class << "saturday" cal << %[] else cal << %[] end end if (_b = (date.week_end.wday)) < 6 if _b == 0 cal << %[] end _b.times do cal << %[] end cal << %[] end cal << %[
#{Date::jwday(_i)}
#{_str}#{_str}
#{_str}
] <<-EOS

#{_today.strftime("%Y/%m")}

#{cal.join("\n")}
EOS end eb = EasyBLOG::new params = eb.params counter = Counter::new counter.limit = eb.config.limit order = Hash::new order[:argv] = Array::new order[:prev] = "" order[:next] = "" order[:counter] = "" order[:start] = 0 order[:total] = 0 dbsafe = Hash::new safe = Hash::new safe[:q] = Hash::new where = Hash::new where[:blog] = ["not blg_invisible"] websafe = Hash::new websafe[:q] = Hash::new websafe[:main] = Array::new websafe[:category] = Array::new websafe[:date] = Array::new websafe[:day] = Array::new websafe[:recent] = Array::new websafe[:title] = "" websafe[:blog_title] = eb.config.title.escapeHTML websafe[:category_name] = "" category_all = nil category = nil category_design = { :mode => nil, :html => nil, } blog = Array::new mode = nil today = Date::today date = DateMonth::new(today.year, today.month) if params.key?(:c) and params[:c].first =~ /^\d{1,7}$/ dbsafe[:blg_oid] = $& dbsafe[:cat_oid] = "" dbsafe[:date] = "" where[:blog] = ["blg_oid = #{dbsafe[:blg_oid]}", "not blg_invisible"] category_all = true if params.key?(:md) and params[:md].first =~ /^[s]$/ mode = dbsafe[:blg_oid] end elsif params.key?(:a) and params[:a].first =~ /^\w{1,20}$/ dbsafe[:blg_alias] = eb.dbquote($&) dbsafe[:cat_oid] = "" dbsafe[:date] = "" where[:blog] = ["blg_alias = '#{dbsafe[:blg_alias]}'", "not blg_invisible"] category_all = true else # カウンター関係 if params.key?(:start) and params[:start].first =~ /^\d{1,3}$/ order[:start] = params[:start].first.to_i end if params.key?(:cat_oid) and params[:cat_oid].first =~ /^\d{1,7}$/ dbsafe[:cat_oid] = $& else dbsafe[:cat_oid] = "" end if params.key?(:search) if params.key?(:word) and params[:word].first != "" safe[:search] = "t" safe[:tg] = "" dbsafe[:word] = eb.dbquote(params[:word].first) if params.key?(:p) safe[:p] = true order[:argv] << "p=t" end if params.key?(:tg) and params[:tg].first =~ /^[tks]+$/i _tmp = $& _where = Array::new if _tmp[/t/] safe[:tg] << "t" _where << "blg_title like '%#{dbsafe[:word]}%'" end if _tmp[/k/] safe[:tg] << "k" _where << "blg_keyword like '%#{dbsafe[:word]}%'" end if _tmp[/s/] safe[:tg] << "s" _where << "blg_string like '%#{dbsafe[:word]}%'" end where[:blog] << _where.join(" or ") websafe[:tg] = safe[:tg] order[:argv] << "tg=#{websafe[:tg]}" else where[:blog] << "(blg_title like '%#{dbsafe[:word]}%' or blg_keyword like '%#{dbsafe[:word]}%' or blg_string like '%#{dbsafe[:word]}%')" end websafe[:word] = params[:word].first.escapeHTML order[:argv] << "search=t" order[:argv] << "word=#{websafe[:word]}" #category_all = true else safe[:search] = nil end end if params.key?(:date) and params[:date].first =~ /^20\d\d\-(0[1-9]|1[120])(\-\d\d)?$/ if $2 if dbsafe[:day] = DateMonth::date?($&, true) where[:blog] << "blg_entry = '#{dbsafe[:day].to_s}'" end else dbsafe[:date] = $& end category_all = true else dbsafe[:date] = "" end end def make_menu_recent(eb, conn) _recent = Array::new conn.execute(<<-EOS) do |r| select blg_oid, blg_entry, blg_title, blg_html, blg_keyword, null, null, blg_modify, blg_alias from tbl_blog where not blg_invisible order by blg_entry desc, blg_modify desc limit #{eb.config.recent_limit} offset 0; EOS if r[8] and r[8] != "" pam = "a=#{r[8]}" else pam = "c=#{r[0]}" end _recent << %[
  • #{r[2].escapeHTML}
  • ] end eb.config.recent_template.sub(/%%recent%%/){_recent.join("\n")} end def make_menu_category(eb, conn, selected, category_all) #fields = [ :cat_oid, :cat_name, :cat_description, :cat_priority, ] _category_count = 0 _category = Array::new conn.execute(<<-EOS) do |r| select cat_oid, cat_name, count(cat_oid) from tbl_category join tbl_category_list on cat_oid = cal_cat_oid join tbl_blog on blg_oid = cal_blg_oid where not blg_invisible group by cat_oid, cat_name order by cat_priority, cat_name; EOS if r[0] != selected _category << %[
  • #{r[1].escapeHTML}(#{r[2]})
  • ] else _category << %[
  • #{r[1].escapeHTML}(#{r[2]})
  • ] category_all = true end end conn.execute(<<-EOS) do |r| select count(blg_oid) from tbl_blog where not blg_invisible; EOS _category_count = r[0] end if category_all _category.unshift(%[
  • 全て表示(#{_category_count})
  • ]) else _category.unshift(%[
  • 全て表示(#{_category_count})
  • ]) end eb.config.category_template.sub(/%%category%%/){_category.join("\n")} end def make_menu_date(date, eb) eb.config.archive_template.sub(/%%archive%%/){date.join("\n")} end def make_days(conn, date) _days = Array::new conn.execute(<<-EOS) do |r| select distinct strftime('%d', blg_entry) from tbl_blog where strftime('%Y-%m', blg_entry) = '#{date.strftime('%Y-%m')}' EOS _days << r[0].to_i end _days end eb.session do |conn| conn.execute(<<-EOS, dbsafe[:cat_oid]) do |r| select cat_oid, cat_name, cat_design_mode, cat_design_html from tbl_category where cat_oid = ?; EOS safe[:q][:cat_oid] = r[0] order[:argv] << "cat_oid=#{r[0].escape}" #where[:blog] << "blg_cat_oid = #{safe[:q][:cat_oid]}" if not safe[:q][:cat_oid].empty? where[:blog] << "cal_cat_oid = #{safe[:q][:cat_oid]}" end if r[1] and r[1] != "" websafe[:category_name] = r[1].escapeHTML end if dbsafe[:cat_oid] != "" and dbsafe[:cat_oid] == r[0] category_design[:mode] = r[2] category_design[:html] = r[3] end end archive_limit = eb.config.archive_limit conn.execute(<<-EOS) do |r| select strftime('%Y-%m', blg_entry), count(blg_entry) from tbl_blog where not blg_invisible group by strftime('%Y-%m', blg_entry) order by blg_entry desc; EOS (_y,_m) = r[0].split(/\-/) if eb.config.archive_label_format _date = eb.config.archive_label_format \ .sub(/%Y/){_y}.sub(/%y/){_y[/\d\d$/]} \ .sub(/%M/){_m}.sub(/%m/){_m.to_i.to_s} \ .sub(/%J/){ Date::jyear(_y.to_i).sub(/^[HSTM]/){ case $& when "H" "平成" when "S" "昭和" when "T" "大正" when "M" "明治" else $& end } } else _date = r[0] end _attr = "" if archive_limit if websafe[:date].size == archive_limit if dbsafe[:date] != "" and "#{_y}#{_m}".to_i >= dbsafe[:date].sub(/\-/, "").to_i archive_limit += 1 else websafe[:date] << %[
  • [以前のリスト]
  • ] _hidden = true end elsif websafe[:date].size > archive_limit _hidden = true end if _hidden _attr = %[class="EasyBLOG_menu_archive" style="display: none;"] end end if dbsafe[:date] != r[0] websafe[:date] << %[
  • #{_date}(#{r[1]})
  • ] else websafe[:date] << %[
  • #{_date}(#{r[1]})
  • ] where[:blog] << "strftime('%Y-%m', blg_entry) = '#{dbsafe[:date]}'" order[:argv] << "date=#{r[0].escape}" end end websafe[:recent] = make_menu_recent(eb, conn) websafe[:category] = make_menu_category(eb, conn, safe[:q][:cat_oid], category_all) websafe[:date] = make_menu_date(websafe[:date], eb) websafe[:day] = make_days(conn, today) category = Hash::new if dbsafe[:blg_oid] or dbsafe[:blg_alias] blog = conn.execute(<<-EOS) select blg_oid, blg_entry, blg_title, blg_html, blg_keyword, null, null, blg_modify, blg_alias from tbl_blog where #{where[:blog].join(" and ")} EOS websafe[:count] = 1 order[:total] = websafe[:count] if eb.config.history_back and eb.config.history_back != "" websafe[:history_back] = eb.config.history_back else websafe[:history_back] = "" end if eb.config.next_page_tag and eb.config.next_page_tag != "" blog = blog.collect{|a| a[3].sub!(/#{Regexp::quote(eb.config.next_page_tag)}/, "") a } end else websafe[:history_back] = "" if dbsafe[:cat_oid] != "" conn.execute(<<-EOS) do |r| select count(blg_oid) from tbl_blog join tbl_category_list on blg_oid = cal_blg_oid join tbl_category on cat_oid = cal_cat_oid where #{where[:blog].join(" and ")} EOS websafe[:count] = r[0].to_i order[:total] = websafe[:count] end blog = conn.execute(<<-EOS) select blg_oid, blg_entry, blg_title, blg_html, blg_keyword, cat_oid, cat_name, blg_modify, blg_string, blg_alias from tbl_blog join tbl_category_list on blg_oid = cal_blg_oid join tbl_category on cat_oid = cal_cat_oid where #{where[:blog].join(" and ")} order by blg_entry #{eb.config.date_order}, blg_modify #{eb.config.date_order} limit #{eb.config.limit} offset #{order[:start]*eb.config.limit}; EOS else conn.execute(<<-EOS) do |r| select count(blg_oid) from tbl_blog where #{where[:blog].join(" and ")} EOS websafe[:count] = r[0].to_i order[:total] = websafe[:count] end blog = conn.execute(<<-EOS) select blg_oid, blg_entry, blg_title, blg_html, blg_keyword, null, null, blg_modify, blg_string, blg_alias from tbl_blog where #{where[:blog].join(" and ")} order by blg_entry #{eb.config.date_order}, blg_modify #{eb.config.date_order} limit #{eb.config.limit} offset #{order[:start]*eb.config.limit}; EOS end if eb.config.next_page_tag and eb.config.next_page_tag != "" blog = blog.collect{|a| if a[9] and a[9] != "" pam = "a=#{a[9]}" else pam = "c=#{a[0]}" end if pos = a[3].index(eb.config.next_page_tag) a[3] = a[3][0..(pos-1)] if eb.config.next_page_button and eb.config.next_page_button != "" a[3] << eb.config.next_page_button.sub(/href=\"[^\"]*\"/){%[href="#{eb.filename}?#{pam}"]} else a[3] << %[

    [続きを読む]

    ] end end a } end end blog_oid = blog.collect{|a| a[0]}.uniq conn.execute(<<-EOS) do |r| select blg_oid, cat_oid, cat_name from tbl_blog join tbl_category_list on blg_oid = cal_blg_oid join tbl_category on cat_oid = cal_cat_oid where blg_oid in(#{blog_oid.join(", ")}); EOS unless category.key?(r[0]) category[r[0]] = Array::new end category[r[0]] << [r[1], r[2]] end blog.each do |r| if r[9] and r[9] != "" pam = "a=#{r[9]}" else pam = "c=#{r[0]}" end if dbsafe[:blg_oid] or dbsafe[:blg_alias] _title = %[#{r[2].escapeHTML}] websafe[:title] = _title else _title = %[#{r[2].escapeHTML}] end __title = r[2] __uri = "http://#{ENV["SERVER_NAME"]}/#{_lib}/#{eb.filename}?#{pam}" _category = Array::new if category.key?(r[0]) category[r[0]].each do |v| _category << %[#{v[1].escapeHTML}] end _category = _category.join(", ") else _category = %[] end _body = eb.swap(r[3]) if not safe[:search] or (safe[:search] and safe[:p]) if eb.config.buttons _buttons = %[
    ] eb.config.button_order.each do |_r| _buttons << (eb.config.button[_r] || "").sub(/%%URI%%/){__uri.escapeHTML}.sub(/%%TITLE%%/){__title.escapeHTML} end _buttons << %[
    ] unless websafe[:buttons_script] websafe[:buttons_script] = "" eb.config.button_order.each do |_r| websafe[:buttons_script] << eb.config.button["#{_r}_script".intern]||"" end end end if mode websafe[:main] << eb.config.blog_template \ .sub(/%%title%%/){_title} \ .sub(/%%body%%/){_body} \ .sub(/%%buttons%%/){_buttons||""} \ .sub(/%%date%%/){r[1].escapeHTML} #websafe[:main] << <<-EOS #

    #{_title}

    #
    #{_body}
    # #{_buttons||""} #EOS else websafe[:main] << eb.config.blog_template \ .sub(/%%title%%/){_title} \ .sub(/%%body%%/){_body} \ .sub(/%%buttons%%/){_buttons||""} \ .sub(/%%date%%/){r[1].escapeHTML} #websafe[:main] << <<-EOS #

    #{_title}

    #
    #{_body}
    # #{_buttons||""} #EOS end else websafe[:main] << <<-EOS

    #{r[2].escapeHTML}

    #{r[8].cut(0,80).escapeHTML} … [続きを読む]
    EOS end end end if mode print %[
    ] print websafe[:main] print %[
    ] else websafe[:cal] = make_cal(eb, date, websafe[:day], dbsafe[:day]) order = make_counter(eb, counter, order, true) if order[:counter] != "" navi = %[

    #{order[:prev]} #{order[:counter]} #{order[:next]}

    ] else navi = "" end html = <<-EOS
    #{websafe[:history_back]} #{websafe[:main].join("\n")} #{navi}
    #{websafe[:buttons_script]||""} EOS case category_design[:mode].to_i when 1, 5 if category_design[:mode].to_i == 5 and counter.now > 1 category_design[:html] = "" end websafe[:main] = <<-EOS #{category_design[:html]} #{html} EOS when 2, 6 if category_design[:mode].to_i == 6 and counter.now > 1 category_design[:html] = "" end websafe[:main] = <<-EOS #{html} #{category_design[:html]} EOS when 3, 7 if category_design[:mode].to_i == 7 and counter.now > 1 websafe[:main] = html else websafe[:main] = category_design[:html].sub(/(?:<(?:p|div)>\s*)?@@記事@@(?:\s*<\/(?:p|div)>)?/){html} end else websafe[:main] = html end ERuby::import("./html.rhtml") end %>