############################################################################ # Copyright 2009,2010 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" require "yaml" require "cgi" $cgi = CGI.new require 'gettext' require 'gettext/cgi' include GetText GetText.cgi=$cgi GetText.output_charset = 'utf-8' $:.push("..") require "html" require "poll" require "config" require "charset" class Dudle attr_reader :html, :table, :urlsuffix, :css, :title, :tab def is_poll? @is_poll end def tabs(active_tab) ret = "
" ret end def inittabs @customizetab = [_("Customize"),"customize.cgi"] if @is_poll # set-up tabs @usertabs = [ [_("Poll"),"."], [_("History"),"history.cgi"] ] @configtabs = [ [_("Edit Columns"),"edit_columns.cgi"], [_("Invite Participants"),"invite_participants.cgi"], [_("Access Control"),"access_control.cgi"], [_("Overview"),"overview.cgi"] ] @deletetab = [_("Delete Poll"),"delete_poll.cgi"] end end def revision @requested_revision || VCS.revno end def initialize(revision=nil) @requested_revision = revision @cgi = $cgi @tab = File.basename($0) @tab = "." if @tab == "index.cgi" if File.exists?("data.yaml") && !File.stat("data.yaml").directory? # log last read acces manually (no need to grep server logfiles) File.open("last_read_access","w").close @is_poll = true @basedir = ".." GetText.bindtextdomain("dudle",:path => "#{@basedir}/locale/") @table = YAML::load(VCS.cat(self.revision, "data.yaml")) @urlsuffix = File.basename(File.expand_path(".")) @title = @table.name inittabs configfiles = @configtabs.collect{|name,file| file} @is_config = configfiles.include?(@tab) @wizzardindex = configfiles.index(@tab) if @is_config @tabtitle = (@usertabs + @configtabs + [@deletetab] + [@customizetab]).collect{|title,file| title if file == @tab}.compact[0] @html = HTML.new("dudle - #{@title} - #{@tabtitle}") @html.header["Cache-Control"] = "no-cache" else @is_poll = false @basedir = "." GetText.bindtextdomain("dudle",:path => "#{@basedir}/locale/") inittabs @title = "dudle" @html = HTML.new(@title) end @css = ["default", "classic", "print"].collect{|f| f + ".css"} Dir.open("#{@basedir}/css/").each{|f| if f =~ /\.css$/ @css << "css/#{f}" end } default = $cgi["css"] default = $cgi.cookies["css"][0] if default == "" if $cgi.user_agent =~ /.*MSIE [567]\..*/ css = [default ? default : "default.css"] else css = @css end css.each{|href| @html.add_css("#{@basedir}/#{href}",href.scan(/([^\/]*)\.css/).flatten[0] ,href == default) } @html << <
#{tabs(@tab)}

#{@title}

HEAD ################### # init extenisons # ################### @extensions = [] Dir.open("#{@basedir}/extensions/").each{|f| @extensions << f if File.exists?("#{@basedir}/extensions/#{f}/main.rb") } 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 sucessfully.") + " " + _("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 << "
" lang = [ ["en", "English"], ["de", "Deutsch"] ] lang.each{|short,long| @html << "" unless short == GetText.locale.language @html << long @html << "" unless short == GetText.locale.language } @html << "
" # languageChooser @html << "
" # content @html << "
" # main if File.exists?("#{@basedir}/extensions/") @extensions.each{|e| require "#{@basedir}/extensions/#{e}/main" } end @html << "" @html.out(@cgi) end def <<(htmlbodytext) @html << htmlbodytext end end