# coding: utf-8 ############################################################################ # Copyright 2009-2019 Benjamin Kellermann # # # # This file is part of Dudle. # # # # Dudle is free software: you can redistribute it and/or modify it under # # the terms of the GNU Affero General Public License as published by # # the Free Software Foundation, either version 3 of the License, or # # (at your option) any later version. # # # # Dudle is distributed in the hope that it will be useful, but WITHOUT ANY # # WARRANTY; without even the implied warranty of MERCHANTABILITY or # # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public # # License for more details. # # # # You should have received a copy of the GNU Affero General Public License # # along with dudle. If not, see . # ############################################################################ $KCODE = "u" if RUBY_VERSION < '1.9.0' require "yaml" require "cgi" $cgi = CGI.new unless $cgi require 'gettext' require 'gettext/cgi' include GetText GetText.cgi=$cgi GetText.output_charset = 'utf-8' require "locale" if File.exists?("data.yaml") && !File.stat("data.yaml").directory? $is_poll = true GetText.bindtextdomain("dudle", :path => Dir.pwd + "/../locale/") else $is_poll = false GetText.bindtextdomain("dudle", :path => Dir.pwd + "/locale/") end $:.push("..") require_relative "date_locale" require_relative "html" require_relative "poll" require_relative "config_defaults" require_relative "charset" class Dudle attr_reader :html, :table, :urlsuffix, :css, :user_css, :title, :tab def is_poll? $is_poll end def tabs_to_html(active_tab) ret = "
" ret end def inittabs @tabs = [] @tabs << [_("Home"),@basedir] if is_poll? @tabs << ["",""] @tabs << [_("Poll"),"."] @tabs << [_("History"),"history.cgi"] @tabs << ["",""] @configtabs = [ [_("Edit Columns"),"edit_columns.cgi"], [_("Invite Participants"),"invite_participants.cgi"], [_("Access Control"),"access_control.cgi"], [_("Overview"),"overview.cgi"] ] @tabs += @configtabs @tabs << [_("Delete Poll"),"delete_poll.cgi"] @tabs << ["",""] else @tabs << [_("Examples"),"example.cgi"] @tabs << [_("About"),"about.cgi"] end @tabs << [_("Customize"),"customize.cgi"] @tabtitle = @tabs.collect{|title,file| title if file == @tab}.compact[0] end def revision @requested_revision || VCS.revno end def breadcrumbs crumbs = $conf.breadcrumbs crumbs << "" + _("Dudle Home") + "" if is_poll? if @tab == "." crumbs << @title else crumbs << "#{@title}" crumbs << @tabtitle end else if @tab != "." crumbs << @tabtitle end end "" end def initialize(params = {:revision => nil, :title => nil, :hide_lang_chooser => nil, :relative_dir => "", :load_extensions => true}) @requested_revision = params[:revision] @hide_lang_chooser = params[:hide_lang_chooser] @cgi = $cgi @tab = File.basename($0) @tab = "." if @tab == "index.cgi" if is_poll? # log last read access manually (no need to grep server logfiles) File.open("last_read_access","w").close unless @cgi.user_agent =~ $conf.bots @basedir = ".." inittabs @table = YAML::load(VCS.cat(self.revision, "data.yaml")) @urlsuffix = File.basename(File.expand_path(".")) @title = @table.name configfiles = @configtabs.collect{|name,file| file} @is_config = configfiles.include?(@tab) @wizzardindex = configfiles.index(@tab) if @is_config @html = HTML.new("dudle - #{@title} - #{@tabtitle}",params[:relative_dir]) @html.add_html_head('') @html.header["Cache-Control"] = "no-cache" else @basedir = "." inittabs @title = params[:title] || "dudle" @html = HTML.new(@title,params[:relative_dir]) end @css = ["default", "classic", "print"].collect{|f| f + ".css"} if Dir.exists?("#{@basedir}/css/") Dir.open("#{@basedir}/css/").each{|f| if f =~ /\.css$/ @css << "css/#{f}" end } end if $cgi.include?("css") @user_css = $cgi["css"] @html.add_cookie("css",@user_css,"/",Time.now + (1*60*60*24*365 * (@user_css == $conf.default_css ? -1 : 1 ))) else @user_css = $cgi.cookies["css"][0] @user_css ||= $conf.default_css end if $cgi.user_agent =~ /.*MSIE [567]\..*/ css = [@user_css] else css = @css end css.each{|href| @html.add_css("#{@basedir}/#{href}",href.scan(/([^\/]*)\.css/).flatten[0] ,href == @user_css) } @html << <
HEAD $conf.header.each{|h| @html << h } @html << < #{tabs_to_html(@tab)}

#{CGI.escapeHTML(@title)}

HEAD ################### # init extenisons # ################### @extensions = [] $d = self # FIXME: this is dirty, but extensions need to know table elem if Dir.exists?("#{@basedir}/extensions/") && params[:load_extensions] Dir.open("#{@basedir}/extensions/").sort.each{|f| if File.exists?("#{@basedir}/extensions/#{f}/main.rb") @extensions << f if File.exists?("#{@basedir}/extensions/#{f}/preload.rb") $current_ext_dir = f require "#{@basedir}/extensions/#{f}/preload" end end } end end def wizzard_nav ret = "
" [[_("Previous"),@wizzardindex == 0], [_("Next"),@wizzardindex >= @configtabs.size()-2], [_("Finish"),@wizzardindex == @configtabs.size()-1]].each{|button,disabled| ret += <
READY } ret += "
" end def wizzard_redirect [[_("Previous"),@wizzardindex-1], [_("Next"),@wizzardindex+1], [_("Finish"),@configtabs.size()-1]].each{|action,linkindex| if $cgi.include?(action) @html.header["status"] = "REDIRECT" @html.header["Cache-Control"] = "no-cache" @html.header["Location"] = @configtabs[linkindex][1] @html << _("All changes were saved successfully.") + " " + _("Proceed!") + "" out exit end } end def out @html << wizzard_nav if @is_config @html.add_cookie("lang",@cgi["lang"],"/",Time.now + (1*60*60*24*365)) if @cgi.include?("lang") @html << "
" # content @html << "
" # languageChooser @html << "" # main $conf.footer.each{|f| @html << f } @extensions.each{|e| if File.exists?("#{@basedir}/extensions/#{e}/main.rb") $current_ext_dir = e require "#{@basedir}/extensions/#{e}/main" end } @html << "" @html.out(@cgi) end def <<(htmlbodytext) @html << htmlbodytext end end