Dashboard agora com rss e ical

master
Alinson S. Xavier 18 years ago
parent ba4a6a20fe
commit e5bc6024ba

@ -19,6 +19,8 @@ class LogController < ApplicationController
@log_entries = @course.log_entries.find(:all, :limit => 50) #.paginate(:page => params[:page], :per_page => 30)
respond_to do |format|
format.html
format.rss { response.content_type = Mime::RSS }
format.xml { render :xml => @log_entries }
end
end

@ -68,7 +68,7 @@ class UsersController < ApplicationController
@user.save!
setup_session(@user)
flash[:message] = 'User account created'[]
redirect_to user_path(@user)
redirect_to dashboard_url
rescue ActiveRecord::RecordInvalid
flash[:warning] = 'Não foi possível cadastrar a conta.'
end
@ -82,7 +82,7 @@ class UsersController < ApplicationController
@user.save!
@color = @user.pref_color
flash[:message] = 'Settings updated'[]
redirect_to index_path
redirect_to dashboard_url
end
end
@ -110,11 +110,24 @@ class UsersController < ApplicationController
@news = []
@events = []
unless @current_user.courses.empty?
@news = News.find(:all, :conditions => [ 'receiver_id in (?)', @current_user.courses ],
if params[:format] == 'html'
return unless require_login
@user = @current_user
else
@user = User.find_by_secret(params[:secret])
end
unless @user.courses.empty?
@news = News.find(:all, :conditions => [ 'receiver_id in (?)', @user.courses ],
:order => 'timestamp desc', :limit => 5)
@events = Event.find(:all, :conditions => [ 'course_id in (?) and (time > ?) and (time < ?)',
@current_user.courses, 1.day.ago, 21.days.from_now ], :order => 'time')
@user.courses, 1.day.ago, 21.days.from_now ], :order => 'time')
end
respond_to do |format|
format.html
format.rss { response.content_type = Mime::RSS }
format.ics { response.content_type = Mime::ICS; render :text => Event.to_ical(@user.courses) }
end
end

@ -16,6 +16,21 @@ class LogEntry < ActiveRecord::Base
belongs_to :course
def reversible?() false end
def to_xml(options = {})
options[:indent] ||= 2
xml = options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
xml.instruct! unless options[:skip_instruct]
xml.log_entry do
xml.id self.id
xml.course_id self.course_id
xml.created_at self.created_at
xml.target_id self.target_id
xml.user_id self.user_id
xml.type self.type
xml.version self.version unless self.version.nil?
end
end
end
require 'log_entry/attachment_log_entry.rb'

@ -48,6 +48,8 @@ class User < ActiveRecord::Base
xml.user do
xml.id self.id
xml.name self.name
xml.display_name self.display_name
xml.login self.login
xml.created_at self.created_at
xml.last_seen self.last_seen
xml.description self.description
@ -91,6 +93,7 @@ class User < ActiveRecord::Base
def before_save
self.salt = User.random_string(10) if !self.salt?
self.secret = User.random_string(32) if !self.secret?
self.hashed_password = User.encrypt(@password, self.salt) if !@password.blank?
end

@ -47,5 +47,5 @@
.content= @content
%br{'style' => 'clear:both'}
#footer
#footer

@ -1,6 +1,8 @@
%h4.title= h(@course.full_name)
%h1.title Mudanças recentes
= auto_discovery_link_tag :rss, formatted_course_log_url(@course, :rss)
.box
%table
%tr
@ -11,9 +13,4 @@
%tr
%td= entry.created_at.strftime("%d/%m/%y&nbsp;%H:%M:%S")
%td= link_to truncate(h(entry.user.display_name), 20), user_path(entry.user)
%td
= render(:partial => 'log/attachment_log_entry', :locals => { :entry => entry }) if entry.kind_of?(AttachmentLogEntry)
= render(:partial => 'log/event_log_entry', :locals => { :entry => entry }) if entry.kind_of?(EventLogEntry)
= render(:partial => 'log/news_log_entry', :locals => { :entry => entry }) if entry.kind_of?(NewsLogEntry)
= render(:partial => 'log/wiki_log_entry', :locals => { :entry => entry }) if entry.kind_of?(WikiLogEntry)
= "(" + link_to("undo", undo_course_log_url(@course, entry)) + ")" if entry.reversible?
%td= render(:partial => 'log/log_entry', :locals => { :entry => entry })

@ -28,11 +28,6 @@ h1, h2, h3, h4, h5, th {
background-color: <%= color[0] %>;
}
#footer {
background-color: <%= color[3] %>;
border-top: 5px solid <%= color[3] %>;
}
.icon img:hover {
background-color: <%= color[1] %>;
}

@ -120,13 +120,15 @@ body {
font-weight: normal;
min-width: 780px;
background-image: url(<%= App.base_path %>/images/bg_body.png);
background-repeat: repeat-x;
background-color: #f4f4f4;
background-color: #fff;
}
#wrapper {
margin: 0em auto;
margin: 0em -9px;
padding: 0px 9px;
background-image: url(<%= App.base_path %>/images/bg_body.png);
background-repeat: repeat-x;
background-color: #f4f4f4;
}
#header {
@ -194,16 +196,14 @@ body {
#site {
padding: 0px;
margin-top: 18px;
border-bottom: 30px solid #eee;
}
#footer {
display: none;
background-image: url(<%= App.base_path %>/images/footer_bg.png);
background-position: top;
background-repeat: repeat-x;
margin: 0em;
height: 10em;
border-top: 3px solid #f0f0f0;
margin: 0px -9px;
padding: 18px 0px;
text-align: center;
color: #aaa;
}
.float_panel_left {

@ -1,15 +1,18 @@
%h4.title Dashboard
%h1.title= "Bem vindo, #{h(@current_user.display_name)}"
= auto_discovery_link_tag :rss, formatted_dashboard_url(:secret => @current_user.secret, :format => 'rss')
.dashboard
.box
.cmd
=link_to "rss", formatted_dashboard_url(:secret => @current_user.secret, :format => 'rss')
- last_time = nil
%h3 Notícias Recentes
%h3 Notícias Recentes
- if @news.empty?
%ul
%li.no_itens Nenhum notícia recente
%table
- @news.each do |n|
%tr
@ -22,13 +25,14 @@
%p= h(n.body)
.box
.cmd
=link_to "ical", formatted_dashboard_url(:secret => @current_user.secret, :format => 'ics')
- last_time = nil
%h3 Próximos Eventos
%h3 Próximos Eventos
- if @events.empty?
%ul
%li.no_itens Nenhum evento próximo
%table
- @events.each do |n|
%tr
@ -49,3 +53,4 @@
- @current_user.courses.each do |course|
%li= link_to(h(course.full_name), course_url(course))

@ -0,0 +1,18 @@
xml.instruct! :xml, :version=>"1.0"
xml.rss(:version=>"2.0") do
xml.channel do
xml.title("#{App.title} - " + "News"[].titleize)
xml.link(dashboard_url)
xml.language(App.language)
xml.description("{app} news"[:news_about, App.title])
for news_item in @news
xml.item do
xml.title(news_item.course.short_name + ": " + news_item.title)
xml.description(news_item.body)
xml.pubDate(news_item.timestamp.rfc2822)
xml.link(course_news_url(news_item.course, news_item))
xml.guid(course_news_url(news_item.course, news_item))
end
end
end
end

@ -71,7 +71,8 @@ ActionController::Routing::Routes.draw do |map|
end
# Pagina pessoal
map.dashboard '/dashboard', :controller => 'users', :action => 'dashboard'
map.dashboard '/dashboard', :controller => 'users', :action => 'dashboard', :format => 'html'
map.formatted_dashboard '/dashboard/:secret.:format', :controller => 'users', :action => 'dashboard'
# Stylesheets
map.connect 'stylesheets/:action.:format', :controller => 'stylesheets'

@ -0,0 +1,13 @@
class UserSecret < ActiveRecord::Migration
def self.up
add_column :users, :secret, :string, :null => true
User.find(:all).each do |user|
user.update_attribute(:secret, User.random_string(32))
end
change_column :users, :secret, :string, :null => false
end
def self.down
remove_column :users, :secret
end
end

@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 29) do
ActiveRecord::Schema.define(:version => 30) do
create_table "attachments", :force => true do |t|
t.string "file_name", :null => false
@ -87,6 +87,7 @@ ActiveRecord::Schema.define(:version => 29) do
t.datetime "last_seen", :null => false
t.string "login_key"
t.boolean "admin", :default => false, :null => false
t.string "secret", :null => false
end
create_table "wiki_page_versions", :force => true do |t|

@ -35,6 +35,9 @@ wiki_page_removed: Página wiki removida
wiki_page_updated: Página wiki atualizada
wiki_page_restored: Página wiki restaurada
recent_changes: Mudanças recentes
log_about: Mudanças recentes em {disciplina}
undo: Desfazer
login_required: É necessário fazer login para acessar esta área do site