Skip to content

Commit

Permalink
Merge branch 'user_profile_list' into development
Browse files Browse the repository at this point in the history
  • Loading branch information
cykod committed Oct 6, 2010
2 parents 51dd05f + b3cbbb5 commit a5c5f0d
Show file tree
Hide file tree
Showing 17 changed files with 363 additions and 83 deletions.
84 changes: 42 additions & 42 deletions app/controllers/editor/auth_controller.rb
Expand Up @@ -3,7 +3,7 @@
class Editor::AuthController < ParagraphController #:nodoc:all
permit 'editor_editor'

user_actions [:add_feature, :add_login_feature]
user_actions [:add_feature, :add_login_feature, :add_user_edit_feature]

# Editor for authorization paragraphs
editor_header "Member Paragraphs", :paragraph_member
Expand Down Expand Up @@ -215,7 +215,8 @@ class UserEditAccountOptions < HashModel
:work_address_required_fields => [],
:address_required_fields => [],
:content_publication_id => nil, :content_publication_user_field => nil,
:access_token_id => nil, :user_level => 4
:access_token_id => nil, :user_level => 4,
:features => []

page_options :success_page_id

Expand All @@ -229,14 +230,33 @@ def validate
self.required_fields = [] if @passed_hash[:required_fields].blank?
self.optional_fields = [] if @passed_hash[:optional_fields].blank?
if self.content_publication_id
if self.content_publication_user_field
errors.add(:content_publication_user_field) unless self.publication_field_options.rassoc self.content_publication_user_field
else
errors.add(:content_publication_user_field) unless self.content_publication_user_field
end
if self.content_publication_user_field
errors.add(:content_publication_user_field) unless self.publication_field_options.rassoc self.content_publication_user_field
else
errors.add(:content_publication_user_field) unless self.content_publication_user_field
end
end
if !self.features.is_a?(Array)
self.features = self.features.to_a.sort { |a,b| a[0] <=> b[0] }.map { |elm| obj = Handlers::ParagraphFeature.new(elm[1]); obj.to_hash }

self.user_edit_features.each do |feature|
if !feature.options.valid?
self.errors.add_to_base('Feature Error')
end
end
end
end

def user_edit_features
@edut_features ||= self.features.map do |feature|
Handlers::ParagraphFeature.new(feature.merge({ :feature_type => 'editor_auth_user_edit_feature'}))
end
end

def available_features
[['--Select a feature to add--','']] + get_handler_options(:editor,:auth_user_edit_feature)
end

def available_field_list
{ :email => [ 'Email'.t,:text_field, :email ],
:password => [ 'Reset Password'.t, :password_field, :password ],
Expand Down Expand Up @@ -419,41 +439,6 @@ def login_features
end
end

def edit_account
@options = EditAccountOptions.new(params[:edit_profile] || @paragraph.data || {})

if request.post? && @options.valid?
if @options.include_subscriptions.is_a?(Array)
@options.include_subscriptions = @options.include_subscriptions.find_all { |elem| !elem.blank? }.collect { |elem| elem.to_i }
else
@options.include_subscriptions = []
end
@options.success_page = @options.success_page.to_i
@paragraph.data = @options.to_h
@paragraph.save
render_paragraph_update
return
end

@content_publications = [ ['No Publication', 0 ] ] + ContentPublication.find(:all,:conditions => 'publication_type = "create"',:order => 'content_models.name, content_publications.name',
:include => :content_model ).collect { |pub| [ pub.content_model.name + ' - ' + pub.name, pub.id ] }

@pages = [[ '--Select Page--'.t, nil ]] + SiteNode.page_options()

@fields = %w{username gender first_name last_name dob address work_address}
@field_options = [ [ 'Required', 'required' ], [ 'Optional','optional' ], ['Do not Display','off' ] ]
@subscriptions = UserSubscription.find_select_options(:all,:order => 'name')
end

class EditAccountOptions < HashModel
default_options :success_page => nil, :form_display => 'normal', :first_name => 'required', :last_name => 'required',
:gender => 'required', :username => 'off', :dob => 'off', :address => 'off', :work_address => 'off', :add_tags => '',
:include_subscriptions => [], :country => 'United States', :reset_password => 'show',
:address_type => 'us', :edit_button => nil
validates_presence_of :success_page
integer_options :success_page
end

def enter_vip
@options = EnterVipOptions.new(params[:enter_vip] || @paragraph.data || {})

Expand Down Expand Up @@ -555,4 +540,19 @@ def add_login_feature
end

end

def add_user_edit_feature
@info = get_handler_info(:editor,:auth_user_edit_feature,params[:feature_handler])

if @info && myself.editor?
@feature = Handlers::ParagraphFeature.new({ })
@feature.feature_handler = @info[:identifier]
@feature.feature_type = 'editor_auth_user_edit_feature'
render :partial => 'user_edit_feature', :locals => { :feature => @feature, :idx => params[:index] }
else
render :nothing => true
end

end

end
5 changes: 5 additions & 0 deletions app/controllers/editor/auth_feature.rb
Expand Up @@ -144,6 +144,11 @@ def user_edit_account_feature(data)
end

c.button_tag('edit:submit')

data[:options].user_edit_features.each do |feature|
feature.feature_instance.feature_tags(c,data[:feature])
end

end
end

Expand Down
25 changes: 25 additions & 0 deletions app/controllers/editor/auth_renderer.rb
Expand Up @@ -218,6 +218,14 @@ def user_edit_account
end
end

@feature = { }


@options.user_edit_features.each do |feature|
feature.feature_instance.generate(params,@usr)
end


if request.post? && ( params[:user] || params[:model] ) && !editor? && myself.id
params[:user] ||= {}
handle_image_upload(params[:user],:domain_file_id)
Expand Down Expand Up @@ -252,6 +260,12 @@ def user_edit_account
all_valid = false unless @model.errors.length == 0
end

@options.user_edit_features.each do |feature|
all_valid=false unless feature.feature_instance.valid?
end



# if there are no errors on anything
# save the user,
@failed = true unless all_valid
Expand Down Expand Up @@ -286,6 +300,11 @@ def user_edit_account

@model.save if @model

@options.user_edit_features.each do |feature|
feature.feature_instance.post_process(@usr)
end


if @options.access_token_id
tkn = AccessToken.find_by_id(@options.access_token_id)
@usr.add_token!(tkn) if tkn
Expand Down Expand Up @@ -313,6 +332,12 @@ def user_edit_account
end

@reset_password = flash['reset_password']

@options.user_edit_features.each do |feature|
feature.feature_instance.feature_data(@feature)
end


render_paragraph :feature => :user_edit_account
end

Expand Down
1 change: 0 additions & 1 deletion app/models/node_engine/builtin_handler.rb
Expand Up @@ -68,7 +68,6 @@ def before_page
@output.status = 'Lock'
@output.redirect = redirection

@output.paction = engine.user.action("/lock/lockout",:identifier => redirection)
return @output
end
end
Expand Down
13 changes: 13 additions & 0 deletions app/views/editor/auth/_user_edit_feature.rhtml
@@ -0,0 +1,13 @@
<div id='user_edit_feature_<%= idx %>' style='border:1px solid #CCCCCC; padding:10px; margin:10px;' class='text_field_control label'>
<div style='float:right;'>
<a href='javascript:void(0);' onclick='UserEditEditor.removeFeature(<%= idx %>);'><img src='<%= theme_src('icons/actions/delete.gif') %>'/></a>
</div>
<img class='handle' style='cursor:pointer;' src='<%= theme_src('icons/paragraph_move.gif') %>' id='handle_<%= idx %>' align='absmiddle' />
<%= feature.name %><br/>
<input type='hidden' name='user_edit_account[features][<%= idx %>][feature_handler]' value='<%= feature.feature_handler %>'/>
<% cms_fields_for "user_edit_account[features][#{idx}][feature_options]", feature.options do |ff| -%>
<%= render :partial => feature.options_partial, :locals => { :f => ff, :prefix => "user_edit[features][#{idx}][feature_options]", :options => feature.options } %>
<% end -%>

</div>

16 changes: 16 additions & 0 deletions app/views/editor/auth/_user_edit_features.rhtml
@@ -0,0 +1,16 @@



<input type='hidden' id='user_edit_features_order' name='features_order' value=''/>
Add a feature: <select name='add_feature' id='user_edit_add_feature'><%= options_for_select @options.available_features %></select><button onclick='UserEditEditor.addFeature($("user_edit_add_feature").value); return false;' >Add Feature</button>
<br/><br/>

<div id='user_edit_features'>
<% @options.user_edit_features.each_with_index do |feature,idx| -%>
<%= render :partial => 'user_edit_feature', :locals => { :feature => feature, :idx => idx } %>
<% end -%>
</div>

<script>
UserEditEditor.recreateFeatureSortables();
</script>
47 changes: 46 additions & 1 deletion app/views/editor/auth/user_edit_account.rhtml
@@ -1,6 +1,48 @@
<script>
UserEditEditor = {
featureIdx: <%= @options.user_edit_features.length -%>,


submitForm: function() {
var arr = Sortable.sequence('user_edit_features');
$('user_edit_features_order').value = arr.join(",");

},


addFeature: function(feature) {
if(feature) {
var index = UserEditEditor.featureIdx++;
new Ajax.Updater('user_edit_features',
"<%= url_for :action => 'add_user_edit_feature', :paragraph => @paragraph.id %>",
{ parameters: { feature_handler: feature, index: index },
insertion: 'bottom',
evalScripts: true,
onComplete: function(req) {
UserEditEditor.recreateFeatureSortables();
} });

}

},

recreateFeatureSortables: function() {
Sortable.create("user_edit_features",{ tag: "div", handle: "handle" } );
},

removeFeature: function(idx) {
Element.remove($('user_edit_feature_' + idx));
}

}

</script>



<div class='cms_form'>
<% paragraph_options_form_for 'User Edit Account Options', :user_edit_account, @options do |f| %>
<% tabled_ajax_tabs ['Options','Fields','Actions'],'Options' do |t| %>
<% tabled_ajax_tabs ['Options','Fields','Edit Features','Actions'],'Options' do |t| %>
<% t.tabled_tab do %>
<%= f.header 'Registration Control' -%>
<%= f.select :mail_template_id, [['--Select Template--'.t,nil]] + MailTemplate.select_options %>
Expand All @@ -24,6 +66,9 @@
<%= f.select :content_publication_user_field, @options.publication_field_options() if @options.publication %>
<%= f.ordered_array :include_subscriptions, UserSubscription.select_options %>
<% end -%>
<% t.tab do %>
<%= render :partial => 'user_edit_features' -%>
<% end -%>
<% t.tab do %>
<div id='cms_triggered_actions'>
<%= render :partial => '/editor/includes/actions' %>
Expand Down
Expand Up @@ -13,6 +13,10 @@ class UserProfile::AdminController < ModuleController
register_handler :model, :end_user, "UserProfileUserHandler", :actions => [:after_save]
register_handler :members, :view, "UserProfile::ManageController"

register_handler :editor, :auth_user_edit_feature, "UserProfile::UserEditExtension"



register_permissions :user_profile, [ [ :manage, 'Manage User Profile', 'Manage User Profile' ],
[ :config, 'Configure User Profile', 'Configure User Profile' ]
]
Expand Down
Expand Up @@ -6,24 +6,47 @@ class UserProfile::PageController < ParagraphController

editor_for :display_profile, :name => "Display Profile", :feature => :user_profile_page_display_profile, :inputs => { :user_profile => [ [:url, 'User URL', :path]] }, :outputs => [ [ :profile_content, "Profile Entry",:content] ]

editor_for :list_profiles, :name => 'List Profiles', :feature => :user_profile_page_list_profiles


class DisplayProfileOptions < HashModel
# this needs to be set as a paragraph option.. they have to pick which profile they want displayed on the page
attributes :profile_type_id => nil, :default_to_user => true
page_options :profile_type_id
boolean_options :default_to_user

validates_presence_of :profile_type_id

options_form(fld(:profile_type_id,:select,:options => :profile_type_select_options),
fld(:default_to_user,:radio_buttons,:options => :yes_no))
fld(:default_to_user,:yes_no))

def profile_type_select_options
UserProfileType.select_options_with_nil
end
def yes_no
[["Yes".t,true],["No".t,false]]
end


class ListProfilesOptions < HashModel
attributes :profile_type_id => nil, :order_by => 'newest', :registered_only => true, :per_page => 20, :hide_protected => false, :profile_detail_page_id => nil

validates_presence_of :profile_type_id
integer_options :per_page
page_options :profile_detail_page_id
boolean_options :registered_only, :hide_protected


has_options :order_by, [['Newest','newest'],['Updated','updated'],['Alphabetical','alpha']]

options_form(fld(:profile_type_id,:select,:options => :profile_type_select_options),
fld(:profile_detail_page_id, :page_selector, :description => 'Leave blank for cannonical url'),
fld(:order_by,:select, :options => :order_by_select_options),
fld(:per_page,:text_field),
fld(:hide_protected,:yes_no,:description => 'Hide protected users'),
fld(:registered_only,:yes_no,:description => 'Only show registered users (recommended)'))

def profile_type_select_options
UserProfileType.select_options_with_nil
end

end


Expand Down

0 comments on commit a5c5f0d

Please sign in to comment.