blob: 94a028d9abd8d87423b2d1ee3be80127ff23ecec [file] [log] [blame]
require 'open-uri'
#--######################################################################
# Copyright (c) 2006 Logica
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#
# Onno van der Straaten:: initial implementation
#++######################################################################
# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
class PortalController < ApplicationController
before_filter :sidebar
caches_page :home, :about, :archives, :wikis, :users, :privacypolicy, :termsofuse
layout 'portal'
# See also #RssController.index
def home
if User.count > 0
@cadmin = User.find_central_admin
#@versions = Version.find(:all, :order => 'created_on DESC', :conditions => ['version <> 0 and created_on > ?',Time.now - 1.month])
@versions = Version.find(:all, :order => 'created_on DESC', :conditions => ['baseline_process_id is null and version is not null'], :limit => 15)
#@comments = Comment.find(:all, :order => 'created_on DESC', :conditions => ['created_on > ?',Time.now - 1.month])
@comments = Comment.find(:all, :order => 'created_on DESC', :limit => 15)
@templates = Site.templates
@uploads = Upload.find(:all, :order => 'created_on DESC', :limit => 15)
@pages = WikiPage.find(:all, :order => 'created_on DESC', :limit => 15, :conditions => ['tool = ?', 'Wiki'])
@welcome = AdminMessage.text('Welcome')
@tabitems = []
@tabitems << {:text => "Discussion", :id => 'discussion'}
@tabitems << {:text => "Changes", :id => 'changes'}
@tabitems << {:text => "Uploads", :id => 'uploads'}
@tabitems << {:text => "Pages", :id => 'pages'}
else
redirect_to :controller => 'login'
end
end
def wikis
@wikis = Wiki.find(:all, :conditions => ['obsolete_on is null'])
end
def users
version_counts = UserVersion.count(:group => 'user_id')
comment_counts = Comment.count(:group => 'user_id')
upload_counts = Upload.count(:group => 'user_id')
new_page_counts = WikiPage.count(:group => 'user_id', :conditions => ['tool=?','Wiki'])
@contributors = []
User.find(:all).each do |user|
version_count = 0
comment_count = 0
upload_count = 0
new_page_count = 0
count = 0
version_count = version_counts.assoc(user.id)[1] unless version_counts.assoc(user.id).nil?
comment_count = comment_counts.assoc(user.id)[1] unless comment_counts.assoc(user.id).nil?
upload_count = upload_counts.assoc(user.id)[1] unless upload_counts.assoc(user.id).nil?
new_page_count = new_page_counts.assoc(user.id)[1] unless new_page_counts.assoc(user.id).nil?
count = version_count + comment_count + upload_count + new_page_count
@contributors << {:user => user, :version_count => version_count, :comment_count => comment_count, :upload_count => upload_count, :new_page_count => new_page_count, :count => count}
end
@contributors = @contributors.sort_by {|c|-c[:count]}
end
def about
@about = AdminMessage.text('About')
end
#--
# FIXME Bugzilla 231125
#def search
# sidebar
# if params[:q].blank?
# else
# @search_results = WikiPage.find_by_contents(params[:q])
# end
#end
#++
def archives
@cadmin = User.find_central_admin
@year = params[:year]
@month = params[:month]
month_start = Time.gm(@year, @month)
month_end = month_start.at_end_of_month
logger.debug("Versions for archives #{['version <> 0 and created_on >= ? and created_on < ?', month_start, month_end].inspect}")
@versions = UserVersion.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ?',month_start, month_end])
@comments = Comment.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ?',month_start, month_end])
@uploads = Upload.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ?',month_start, month_end])
@updates = Update.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ?',month_start, month_end])
@pages = WikiPage.find(:all, :order => 'created_on ASC', :conditions => ['created_on >= ? and created_on < ? and tool = ?',month_start, month_end, 'Wiki'])
@tabitems = []
@tabitems << {:text => "Discussion (#{@comments.size.to_s})", :id => 'discussion'}
@tabitems << {:text => "Changes (#{@versions.size.to_s})", :id => 'changes'}
@tabitems << {:text => "Uploads (#{@uploads.size.to_s})", :id => 'uploads'}
@tabitems << {:text => "Updates (#{@updates.size.to_s})", :id => 'updates'}
@tabitems << {:text => "Pages (#{@pages.size.to_s})", :id => 'pages'}
end
def feedback
@help = AdminMessage.text('Help')
if request.get?
@feedback = Feedback.new
else
@feedback = Feedback.new(params[:feedback].merge(:user => session['user']))
if @feedback.save
Notifier::deliver_feedback(@feedback)
flash['success'] = "Your feedback or question was succesfully sent. <br>Thanks for your interest in #{ENV['EPFWIKI_APP_NAME']}!"
redirect_to '/'
end
end
end
def privacypolicy
render :inline => "<% @heading = 'Privacy Policy' %><h2>Privacy Policy</h2><%= @privacypolicy %>", :layout => 'portal'
end
def termsofuse
render :inline => "<% @heading = 'Terms of Use' %><h2>Terms of Use</h2><%= @termsofuse %>", :layout => 'portal'
end
#######
private
#######
def sidebar
@privacypolicy = AdminMessage.text('Privacy Policy')
@termsofuse = AdminMessage.text('Terms of Use')
@wikis = Wiki.find(:all, :conditions => ['obsolete_on is null and baseline_process_id is not null'])
@updates_sidebar = Update.find(:all, :order => 'created_on ASC', :conditions => ['finished_on > ? and finished_on is not null and started_on is not null',Time.now - 14.days])
@checkouts = Checkout.find(:all, :order => 'created_on DESC')
version_counts = UserVersion.count(:group => 'month(created_on)', :conditions => ['year(created_on)=?', Time.now.year])
comment_counts = Comment.count(:group => 'month(created_on)', :conditions => ['year(created_on)=?', Time.now.year])
upload_counts = Upload.count(:group => 'month(created_on)', :conditions => ['year(created_on)=?', Time.now.year])
logger.debug([version_counts, comment_counts, upload_counts].inspect)
@archives_count = []
for i in 1..12
cnt = 0
[comment_counts.assoc(i.to_s), upload_counts.assoc(i.to_s), version_counts.assoc(i.to_s)].each {|c| cnt += c[1] unless c.nil? } #cnt += c unless c.nil?
@archives_count << [i, cnt] if cnt > 0
end
@monthly_top = User.find(:all).collect {|u|[u, Version.count(:conditions => ['user_id = ? and baseline_process_id is null and created_on > ?',u.id, Time.now - 1.month]) + u.comments.count(:conditions => ['created_on > ?', Time.now - 1.month]) + u.uploads.count(:conditions => ['created_on > ?', Time.now - 1.month])]}
@monthly_top = @monthly_top.sort_by{|t|-t[1]}
@overall_top = User.find(:all).collect {|u|[u, Version.count(:conditions => ['user_id = ? and baseline_process_id is null',u.id]) + u.comments.count + u.uploads.count]}
@overall_top = @overall_top.sort_by{|t|-t[1]}
@overall_top = @overall_top[0..14]
@monthly_top = @monthly_top[0..14]
end
end