Skip to content

Commit

Permalink
Implemented custom skin loading in development mode (also used for "/…
Browse files Browse the repository at this point in the history
…rescue" mode). [#285 state:resolved] [#297 state:resolved].
  • Loading branch information
gaspard committed May 25, 2010
1 parent 1ada922 commit 71d7486
Show file tree
Hide file tree
Showing 30 changed files with 280 additions and 93 deletions.
6 changes: 1 addition & 5 deletions app/controllers/groups_controller.rb
@@ -1,7 +1,7 @@
class GroupsController < ApplicationController
before_filter :check_is_admin
before_filter :find_group, :except => [:index, :new, :create]
before_filter :find_node
before_filter :visitor_node
before_filter :get_users, :except => [:show, :update]
before_filter :get_groups, :except => [:show, :update, :index]
before_filter :filter_users_ids, :only => [:create, :update]
Expand Down Expand Up @@ -78,10 +78,6 @@ def find_group
end
end

def find_node
@node = visitor.contact
end

def get_users
@users = secure!(User) { User.find(:all, :conditions => "status >= #{User::Status[:reader]}", :order=>'login') }
end
Expand Down
6 changes: 1 addition & 5 deletions app/controllers/iformats_controller.rb
@@ -1,7 +1,7 @@
class IformatsController < ApplicationController
before_filter :check_is_admin
before_filter :find_iformat, :except => [:index, :new, :create]
before_filter :find_node
before_filter :visitor_node
layout :admin_layout

def show
Expand Down Expand Up @@ -71,8 +71,4 @@ def find_iformat
end
end
end

def find_node
@node = visitor.contact
end
end
2 changes: 2 additions & 0 deletions app/controllers/preferences_controller.rb
@@ -1,3 +1,4 @@
=begin
class PreferencesController < ApplicationController
before_filter :check_user
layout :admin_layout
Expand Down Expand Up @@ -50,3 +51,4 @@ def check_user
end
end
end
=end
2 changes: 1 addition & 1 deletion app/controllers/relations_controller.rb
@@ -1,6 +1,6 @@
class RelationsController < ApplicationController
before_filter :visitor_node
before_filter :find_relation, :except => [:index, :create, :new]
before_filter :visitor_node
before_filter :check_is_admin
layout :admin_layout

Expand Down
2 changes: 1 addition & 1 deletion app/controllers/sites_controller.rb
@@ -1,7 +1,7 @@
class SitesController < ApplicationController
before_filter :visitor_node
before_filter :remove_methods, :only => [:new, :create, :destroy]
before_filter :find_site, :except => [:index, :create, :new]
before_filter :visitor_node
before_filter :check_is_admin
layout :admin_layout

Expand Down
26 changes: 16 additions & 10 deletions app/controllers/users_controller.rb
@@ -1,6 +1,7 @@
class UsersController < ApplicationController
before_filter :find_user
before_filter :check_is_admin, :only => [:index, :create, :swap_dev]
before_filter :visitor_node
before_filter :check_is_admin, :only => [:index, :create, :dev_skin, :rescue]
before_filter :restrict_access
layout :admin_layout

Expand Down Expand Up @@ -30,19 +31,23 @@ def preferences
end
end

def swap_dev
if session[:dev]
session[:dev] = nil
else
session[:dev] = true
end
# nil ==> no dev mode
# -1 ==> rescue skin
# 0 ==> normal skin
# xx ==> fixed skin
def dev_skin(skin_id = params['skin_id'])
visitor.update_attributes('dev_skin_id' => skin_id)
if request.referer
redirect_to request.referer
else
redirect_to :action => 'show'
redirect_to :action => 'show', :id => visitor.id
end
end

# Use $default skin for rendering
def rescue
dev_skin(-1)
end

# TODO: test
def create
Expand All @@ -65,6 +70,9 @@ def edit

# TODO: test
def update
if skin_id = params['user']['dev_skin_id']
return dev_skin(skin_id)
end

@update = params.delete(:update)

Expand Down Expand Up @@ -114,8 +122,6 @@ def find_user
else
@user = visitor
end
zafu_node('@node', Contact)
@node = @user.contact
end

def get_groups_list
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/virtual_classes_controller.rb
@@ -1,6 +1,6 @@
class VirtualClassesController < ApplicationController
before_filter :visitor_node
before_filter :find_virtual_class, :except => [:index, :create, :new, :import]
before_filter :visitor_node
before_filter :check_is_admin
layout :admin_layout

Expand Down
4 changes: 2 additions & 2 deletions app/models/template.rb
Expand Up @@ -108,11 +108,11 @@ def set_defaults
<!-- link href='favicon.png' rel='shortcut icon' type='image/png' / -->
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<r:void name='stylesheets'>
<r:stylesheets list='reset,zena,code'/>
<r:stylesheets/>
<link href="style.css" rel="Stylesheet" type="text/css"/>
</r:void>
<r:javascripts list='prototype,effects,zena'/>
<r:javascripts/>
<r:uses_datebox/>
</head>
<body>
Expand Down
14 changes: 13 additions & 1 deletion app/models/user.rb
Expand Up @@ -23,6 +23,17 @@
TODO: when a user is 'destroyed', pass everything he owns to another user or just mark the user as 'deleted'...
=end
class User < ActiveRecord::Base
include Property
RESCUE_SKIN_ID = -1
ANY_SKIN_ID = 0

property do |p|
# nil ==> no dev mode
# -1 ==> rescue skin
# 0 ==> dev mode with normal skin
# xx ==> fixed skin
p.integer :dev_skin_id
end

acts_as_authentic do |c|
#c.transition_from_crypto_providers = Zena::InitialCryptoProvider
Expand All @@ -38,7 +49,8 @@ class User < ActiveRecord::Base

safe_attribute :login, :name, :first_name, :email, :time_zone, :created_at, :updated_at, :lang, :id
safe_method :initials => String, :fullname => String, :status => Number, :status_name => String,
:is_anon? => Boolean
:is_anon? => Boolean, :is_admin? => Boolean, :user? => Boolean, :commentator? => Boolean,
:moderated? => Boolean

safe_context :contact => 'Contact', :node => {:method => 'contact', :class => 'Contact'},
:to_publish => ['Version'], :redactions => ['Version'], :proposed => ['Version'],
Expand Down
3 changes: 2 additions & 1 deletion app/views/zafu/default/Node-+adminLayout.zafu
@@ -1,6 +1,7 @@
<r:include template='Node'>
<r:with part='stylesheets'>
<r:stylesheets list='reset,zena,comment,admin,code,search,window'/>
<r:stylesheets/>
<r:stylesheets list='default,admin'/>
<link href="style.css" rel="Stylesheet" type="text/css"/>
</r:with>

Expand Down
3 changes: 2 additions & 1 deletion app/views/zafu/default/Node.zafu
Expand Up @@ -6,7 +6,8 @@
<link href='favicon_tiny.png' rel='shortcut icon' type='image/png' />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<r:void name='stylesheets'>
<r:stylesheets media='all' list='reset,zena,code,default,window'/>
<r:stylesheets media='all'/>
<r:stylesheets media='all' list='reset,default'/>
</r:void>

<r:javascripts/>
Expand Down
4 changes: 1 addition & 3 deletions db/init/base/skins/default/Node-+adminLayout.zafu
Expand Up @@ -11,9 +11,7 @@
</r:with>
<r:with part='title'/>
<r:with part='content' do='content_for_layout'>
<div id='title'>
<h1 do='title' actions='all' live='true'/>
</div>
<r:include template='Node' part='title'/>
<div id='related' do='visitor'>
<r:to_publish>
<h3 class='group' do='trans'>to publish</h3>
Expand Down
2 changes: 1 addition & 1 deletion db/init/base/skins/default/Node.zafu
Expand Up @@ -6,7 +6,7 @@
<link href='favicon_tiny.png' rel='shortcut icon' type='image/png' />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<r:void name='stylesheets'>
<r:stylesheets media='all' list='reset,zena,window,code'/>
<r:stylesheets media='all'/>
<link href="style.css" rel="Stylesheet" type="text/css"/>
</r:void>

Expand Down
9 changes: 9 additions & 0 deletions db/migrate/20100525113858_add_porperties_to_users.rb
@@ -0,0 +1,9 @@
class AddPorpertiesToUsers < ActiveRecord::Migration
def self.up
add_column :users, :properties, :text
end

def self.down
remove_column :users, :properties
end
end
2 changes: 2 additions & 0 deletions lib/zena/acts/secure_node.rb
Expand Up @@ -55,6 +55,8 @@ def make_kpath
end

module InstanceMethods
include RubyLess
safe_method :public? => Boolean, :empty? => Boolean

def record_must_be_secured
errors.add(:base, 'record not secured') unless secured?
Expand Down
5 changes: 4 additions & 1 deletion lib/zena/parser.rb
Expand Up @@ -239,7 +239,7 @@ def include_template

included_text, absolute_url = self.class.get_template_text(@params[:template], @options[:helper], @options[:current_dir])

if absolute_url
if included_text
absolute_url += "::#{@params[:part].gsub('/','_')}" if @params[:part]
absolute_url += "??#{@options[:part].gsub('/','_')}" if @options[:part]
if @options[:included_history].include?(absolute_url)
Expand All @@ -248,7 +248,10 @@ def include_template
included_history = @options[:included_history] + [absolute_url]
current_dir = absolute_url.split('/')[1..-2].join('/')
end
else
return "<span class='parser_error'>[include] template '#{url}' not found</span>"
end

res = self.class.new(included_text, :helper=>@options[:helper], :current_dir=>current_dir, :included_history=>included_history, :part => @params[:part], :root=>@options[:root]) # we set :part to avoid loop failure when doing self inclusion

if @params[:part]
Expand Down
4 changes: 3 additions & 1 deletion lib/zena/routes.rb
Expand Up @@ -5,12 +5,14 @@ def zen_routes
not_found ':prefix/404.html', :controller => 'nodes', :action => 'not_found', :prefix => /\w\w/
login 'login', :controller => 'user_sessions', :action => 'new', :requirements => { :method => :get }
logout 'logout', :controller => 'user_sessions', :action => 'destroy'
rescue_ 'rescue', :controller => 'users', :action => 'dev_skin', :skin_id => '-1'
dev_skin 'dev_skin', :controller => 'users', :action => 'dev_skin'

upload_progress 'upload_progress', :controller => 'documents', :action => 'upload_progress'

resource :session, :controller => "user_sessions" # singleton resource
resources :pings
resources :users, :member => { :preferences => :get, :swap_dev => :get }
resources :users, :member => { :preferences => :get }
resources :groups
resources :iformats

Expand Down
4 changes: 1 addition & 3 deletions lib/zena/use/conditional.rb
Expand Up @@ -5,9 +5,7 @@ def rubyless_class_scope(class_name)
# capital letter ==> class conditional
klass = Node.get_class(class_name)
if klass.kpath =~ %r{^#{node.klass.kpath}}
out "<% if #{node}.kpath_match?('#{klass.kpath}') %>"
out expand_with(:in_if => true, :node => node.move_to(node.name, klass))
out "<% end -%>"
out expand_if("#{node}.kpath_match?('#{klass.kpath}')", node.move_to(node.name, klass))
else
# render nothing: incompatible classes
''
Expand Down
8 changes: 4 additions & 4 deletions lib/zena/use/display.rb
Expand Up @@ -273,10 +273,10 @@ def show_link(link, opt={})
link_to_with_state(_('manage sites'), sites_path)
when 'dev'
return nil unless visitor.is_admin?
if @controller.session[:dev]
link_to(_('turn dev off'), swap_dev_user_path(visitor))
if visitor.dev_skin_id
link_to(_('turn dev off'), dev_skin_path)
else
link_to(_('turn dev on'), swap_dev_user_path(visitor))
link_to(_('turn dev on'), dev_skin_path('skin_id' => '0'))
end
else
nil
Expand Down Expand Up @@ -460,7 +460,7 @@ def r_javascripts
# Insert stylesheet asset tags
def r_stylesheets
if @params[:list] == 'all' || @params[:list].nil?
list = %w{ window zena code }
list = %w{ reset window zena code }
else
list = @params[:list].split(',').map{|e| e.strip}
end
Expand Down
2 changes: 1 addition & 1 deletion lib/zena/use/i18n.rb
Expand Up @@ -197,7 +197,7 @@ def r_wrong_lang(params = @params)
text = params[:text] || %q{<span class='wrong_lang'>[#{v.lang}]</span> }
"<%= #{node}.version.lang == lang ? '' : #{::RubyLess.translate_string(text, self)} %>"
else
"<% if #{node}.version.lang != lang -%>#{expand_with(:in_if => true)}<% end -%>"
expand_if("#{node}.version.lang != lang")
end
end

Expand Down
5 changes: 2 additions & 3 deletions lib/zena/use/query_builder.rb
Expand Up @@ -43,14 +43,13 @@ def querybuilder_eval(method = @method)
end

expand_with_finder(finder)
true
rescue ::QueryBuilder::Error => err
parser_error(err.message)
end

# Select the most pertinent error between RubyLess processing errors and QueryBuilder errors.
def show_errors
if @method =~ / in / || ([:find, :else, :in, :where, :or, :limit, :order] & @params.keys != [])
if @method =~ / in | where / || ([:find, :else, :in, :where, :or, :limit, :order] & @params.keys != [])
# probably a query
@errors.detect {|e| e =~ /Syntax/} || @errors.last
else
Expand Down Expand Up @@ -293,7 +292,7 @@ def parse_raw_filters(params)
[:updated, :created, :event, :log].each do |k|
if value = params[k]
# current, same are synonym for 'today'
filters << Zena::Db.date_condition(value,"TABLE_NAME.#{k}_at", get_context_var('set_var', 'date') || RubyLess::TypedString('main_date', Time))
filters << Zena::Db.date_condition(value,"TABLE_NAME.#{k}_at", get_context_var('set_var', 'date') || ::RubyLess::TypedString('main_date', Time))
end
end

Expand Down
6 changes: 4 additions & 2 deletions lib/zena/use/workflow.rb
Expand Up @@ -15,7 +15,10 @@ module Use
# The workflow module manages the different versions' status and transitions. This module depends on MultiVersion and VersionHash
# and it should be included *before* these two modules.
module Workflow
WORKFLOW_ATTRIBUTES = ['status', 'publish_from']
include RubyLess
safe_method :can_edit? => Boolean, :can_write? => Boolean, :can_drive? => Boolean

WORKFLOW_ATTRIBUTES = %w{status publish_from}
# The Workflow::VersionMethods module should be included in the model used as version.
module VersionMethods
attr_reader :stored_workflow, :status_set
Expand Down Expand Up @@ -249,7 +252,6 @@ def traductions(opts={})
end
end

# FIXME: merge this with the logic in build_redaction
def can_edit?(lang=nil)
# Has the visitor write access to the node & node is not a proposition ?
can_write? && !(Zena::Status[:prop]..Zena::Status[:prop_with]).include?(version.status)
Expand Down

0 comments on commit 71d7486

Please sign in to comment.