Skip to content

Commit

Permalink
Merge commit 'core/members-wizard' into development
Browse files Browse the repository at this point in the history
  • Loading branch information
cykod committed Aug 3, 2010
2 parents 16e5982 + af79239 commit 9f044b7
Show file tree
Hide file tree
Showing 13 changed files with 263 additions and 81 deletions.
3 changes: 2 additions & 1 deletion app/controllers/content_controller.rb
Expand Up @@ -32,7 +32,8 @@ class ContentController < ModuleController #:nodoc: all
register_handler :user_segment, :fields, 'EndUserTagSegmentField'
register_handler :user_segment, :fields, 'UserSubscriptionEntrySegmentField'

register_handler :structure, :wizard, 'SimpleSiteWizardController'
register_handler :structure, :wizard, 'Wizards::SimpleSite'
register_handler :structure, :wizard, 'Wizards::MembersSetup'

def index
@content_models,@content_actions = CmsController.get_content_models_and_actions
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/editor/auth_controller.rb
Expand Up @@ -195,7 +195,7 @@ class UserEditAccountOptions < HashModel
include HandlerActions


attributes :required_fields => [ 'email', 'password', 'password_confirmation'],
attributes :required_fields => [ 'email' ],
:user_class_id => nil, :modify_profile => 'keep', :mail_template_id => nil,
:optional_fields => [ 'first_name','last_name'],
:success_page_id => nil,
Expand Down
39 changes: 0 additions & 39 deletions app/controllers/simple_site_wizard_controller.rb

This file was deleted.

23 changes: 23 additions & 0 deletions app/controllers/structure_controller.rb
Expand Up @@ -69,6 +69,29 @@ def wizards

end

def wizard
@version = SiteVersion.find_by_id(params[:version])
SiteVersion.override_current(@version)

@wizard_info = get_handler_info(:structure, :wizard, params[:path].join('/'))

cms_page_path [["Website", url_for(:controller => '/structure', :action => 'index', :version => @version.id)]], '%s Wizard' / @wizard_info[:name]

@the_wizard = @wizard_info[:class].new params[:wizard]

@the_wizard.set_defaults unless params[:wizard]

if request.post?
if ! params[:commit]
redirect_to :controller => '/structure', :action => 'wizards', :version => @version.id
elsif @the_wizard.valid?
@the_wizard.run_wizard
flash[:notice] = '%s Wizard Finished' / @wizard_info[:name]
redirect_to :controller => '/structure', :version => @version.id
end
end
end

def site_version
@version = SiteVersion.find_by_id(params[:site_version]) || SiteVersion.new

Expand Down
10 changes: 9 additions & 1 deletion app/models/page_revision.rb
Expand Up @@ -281,5 +281,13 @@ def add_paragraph(renderer_class,name,paragraph_options={ },options={ })
end



def push_paragraph(renderer_class,name,paragraph_options={ },options={ })
para = self.page_paragraphs.find(:first, :conditions => {:zone_idx => options[:zone] || 1,:display_type => name,:display_module => renderer_class}) || self.add_paragraph(renderer_class,name,paragraph_options,options)
para.data = paragraph_options
if block_given?
yield para
end
para.save
para
end
end
34 changes: 33 additions & 1 deletion app/models/site_node.rb
Expand Up @@ -38,6 +38,8 @@ class SiteNode < DomainModel

attr_accessor :page_info, :closed

named_scope :with_type, lambda { |type| {:conditions => {:node_type => type}} }

# Expires the entire site when save or deleted
expires_site

Expand Down Expand Up @@ -114,6 +116,10 @@ def self.node_path(page_id,default_url=nil)
def add_modifier(type)
returning md = self.site_node_modifiers.create(:modifier_type => type) do
md.move_to_top
if block_given?
yield md
md.save
end
end
end

Expand All @@ -124,7 +130,33 @@ def add_subpage(title,type = 'P')
nd
end


def self.generate_node_path(title)
title.underscore.strip.gsub(/[ _]+/, '-').gsub(/[^a-z0-9.\-]/, '')
end

def push_subpage(title, type='P')
nd = self.site_version.site_nodes.with_type(type).find_by_title(title) || self.add_subpage(title, type)
if block_given?
# only pages have revisions
if type == 'P'
rv = nd.live_revisions.first.create_temporary
yield nd, rv
rv.make_real
else
yield nd
end
end
nd
end

def push_modifier(type)
framework = self.site_node_modifiers.find_by_modifier_type(type) || self.add_modifier(type)
if block_given?
yield framework
end
framework
end

def create_temporary_revision(revision_id) #:nodoc:
rev = self.page_revisions.find_by_id(revision_id)
return nil unless rev
Expand Down
10 changes: 10 additions & 0 deletions app/models/site_node_modifier.rb
Expand Up @@ -12,6 +12,9 @@ class SiteNodeModifier < DomainModel
has_many :page_revisions, :dependent => :destroy, :order => "revision DESC, language",
:as => :revision_container

has_many :ordered_revisions, :dependent => :destroy, :order => "revision DESC, page_revisions.id DESC",
:as => :revision_container, :class_name => 'PageRevision'

include SiteAuthorizationEngine::Target
access_control :access

Expand All @@ -22,6 +25,13 @@ def before_create #:nodoc:
end
end

def new_revision
rv = self.ordered_revisions.first.create_temporary
yield rv
rv.make_real
rv
end

# Returns the name of the modifier class
def modifier_options_class_name(full=true)
(full ? "SiteNodeModifier::" : "") + self.modifier_type.camelcase + "ModifierOptions"
Expand Down
30 changes: 30 additions & 0 deletions app/models/wizard_model.rb
@@ -0,0 +1,30 @@

class WizardModel < HashModel

def self.wizard_url
{ :controller => '/structure', :action => 'wizard', :path => self.name.underscore.split('/') }
end

def strict?; true; end # :nodoc:

# override to setup default values
def set_defaults; end

def wizard_partial; '/structure/wizard_form'; end

def root_node
@root_node ||= SiteVersion.current.root_node
end

def destroy_basic_paragraph(rv)
para = rv.page_paragraphs.first
para.destroy if para.display_module == nil && para.display_type == 'html' && para.display_body.blank?
end

def find_page(title)
SiteVersion.current.site_nodes.with_type('P').find_by_title title
end

# Must define a run_wizard method
# def run_wizard; end
end
110 changes: 110 additions & 0 deletions app/models/wizards/members_setup.rb
@@ -0,0 +1,110 @@

class Wizards::MembersSetup < WizardModel

def self.structure_wizard_handler_info
{ :name => "Setup a Members Site",
:description => 'This wizard will setup the pages for a members site.',
:permit => "editor_structure_advanced",
:url => self.wizard_url
}
end

attributes :add_to_id => nil, :add_to_existing => true, :add_to_subpage => nil, :members_group_node_name => 'Members Site', :sidebar_login => true

validates_format_of :add_to_subpage, :with => /^[a-zA-Z0-9\-_]+$/, :message => 'is an invalid url', :allow_blank => true
validates_presence_of :add_to_id
validates_presence_of :members_group_node_name

integer_options :add_to_id
boolean_options :add_to_existing, :sidebar_login

options_form(
fld(:add_to, :add_page_selector),
fld(:members_group_node_name, :text_field),
fld(:sidebar_login, :check_boxes, :options => [['Add login to sidebar', true]])
)

def validate
nd = SiteNode.find_by_id(self.add_to_id)
if (self.add_to_existing.blank? && self.add_to_subpage.blank?)
self.errors.add(:add_to," must have a subpage selected\nand add to existing must be checked")
end
end

def run_wizard
base_node = SiteNode.find(self.add_to_id)

if self.add_to_existing.blank?
base_node = base_node.add_subpage(self.add_to_subpage)
end

if self.sidebar_login
self.root_node.push_modifier('framework') do |framework|
framework.new_revision do |rv|
rv.push_paragraph '/editor/auth', 'login', {}, :zone => 3
end
end
end

base_node.push_subpage(self.members_group_node_name, 'G') do |group_node|

login_page_id = nil
login_para = nil
# Login
group_node.push_subpage('login') do |nd, rv|
login_page_id = nd.id
# remove basic paragraph
self.destroy_basic_paragraph(rv)
login_para = rv.push_paragraph '/editor/auth', 'login'
end

# Registered
success_page_id = nil
group_node.push_subpage('registered') do |nd, rv|
success_page_id = nd.id
# Basic Paragraph
rv.page_paragraphs[0].update_attribute :display_body, "<p>Thank you for registering.</p>"
end

# Register
group_node.push_subpage('register') do |nd, rv|
# remove basic paragraph
self.destroy_basic_paragraph(rv)
rv.push_paragraph '/editor/auth', 'user_register', {:success_page_id => success_page_id}
end

# Missing Password
group_node.push_subpage('missing-password') do |nd, rv|
# remove basic paragraph
self.destroy_basic_paragraph(rv)
rv.push_paragraph '/editor/auth', 'missing_password'
end

# Members View Account
group_node.push_subpage('members') do |members_node, rv|
# Add members only lock
members_node.push_modifier('lock') do |lock|
lock.options.access_control = 'lock'
lock.options.redirect = login_page_id
lock.options.options = []
lock.save
UserClass.default_user_class.has_role('access', lock)
end

# remove basic paragraph
self.destroy_basic_paragraph(rv)
rv.push_paragraph '/editor/auth', 'view_account', nil

# Members Edit Account
members_node.push_subpage('edit-account') do |nd, rv|
# remove basic paragraph
self.destroy_basic_paragraph(rv)
rv.push_paragraph '/editor/auth', 'user_edit_account', {:success_page_id => members_node.id}
end

login_para.data[:success_page] = members_node.id
login_para.save
end
end
end
end

0 comments on commit 9f044b7

Please sign in to comment.