Add email regex feature.
Edit defined_by_applicant feature.
Add agree and disagree record time and let admin can click in backend page.
Edit frontend select email feature.
Remove items and enquiry_for_applicants page.
This commit is contained in:
bohung committed 2022-08-13 11:35:29 +08:00
1 parent d0062fed8f
commit 10cb149fc7
18 files changed
+563 -105

No files matched your search

@@ -0,0 +1,37 @@
<div class="control-group">
<div class="control-label muted"><%= t('application_form_signup.procedure') %></div>
<div class="controls" id="procedure_block">
<% host_url = Site.first.root_url
if host_url == "http://"
host_url = request.protocol + request.host_with_port
end
agree_link = host_url + Rails.application.routes.url_helpers.xhr_application_forms_agree_link_path(:locale=>I18n.locale, :id=>@application_form_signup.id.to_s, :cipher=>@application_form_signup.get_cipher_stage(@application_form_signup.process_stage))
agree_link += "&reviewer=#{current_user.member_profile_id}"
agree_link = nil unless OrbitHelper.user_can_edit?(@application_form_signup) || @application_form.organizer_id == current_user.member_profile_id
%>
<%= @application_form_signup.procedure(agree_link).html_safe %>
<script>
$('.agree_link, .disagree_link').click(function(event){
event.preventDefault();
var href = $(this).attr('href');
$.get(href).done(function(html){
var text = $(html).find('.agree_text, .disagree_text, .finish_text, .error_text').text().trim();
alert(text);
$.get(window.location.href).done(function(html){
$(html).find('#procedure_block, #review_progress_block').each(function(i, v){
var id = $(v).attr('id');
$('#' + id).replaceWith(v);
});
})
})
return false;
})
</script>
</div>
</div>
<div class="control-group">
<div class="control-label muted"><%= t('application_form_signup.records') %></div>
<div class="controls" id="review_progress_block">
<%= @application_form_signup.review_progress(true, true).html_safe %>
</div>
</div>
@@ -0,0 +1,57 @@
<fieldset class="form-horizontal main-forms">
<% content_for :page_specific_css do %>
<%= stylesheet_link_tag "lib/main-forms" %>
<%= stylesheet_link_tag "lib/fileupload" %>
<%= stylesheet_link_tag "lib/main-list" %>
<% end %>
<% content_for :page_specific_javascript do %>
<%= javascript_include_tag "lib/bootstrap-fileupload" %>
<%= javascript_include_tag "lib/bootstrap-datetimepicker" %>
<%= javascript_include_tag "lib/datetimepicker/datetimepicker.js" %>
<%= javascript_include_tag "lib/datetimepicker/date.time.picker.js" %>
<%= javascript_include_tag "lib/file-type" %>
<%= javascript_include_tag "lib/module-area" %>
<% end %>
<style type="text/css">
.form-horizontal .control-label{
padding-top: 0;
}
</style>
<!-- Input Area -->
<div class="input-area">
<!-- Language -->
<div class="tab-content">
<!-- Title -->
<div class="control-group">
<div class="control-label muted"><%= t('application_form.title') %></div>
<div class="controls">
<%= @application_form.title %>
</div>
</div>
<div class="control-group">
<div class="control-label muted"><%= t('application_form_signup.created_at') %></div>
<div class="controls">
<%= @application_form_signup.created_at.strftime("%Y/%m/%d %H:%M") %><%= @application_form_signup.ip.present? ? " (#{@application_form_signup.ip})" : "" %>
</div>
</div>
<%= render :partial => 'view' %>
<% fields_info = @application_form_signup.get_display_fields %>
<% fields_info.each do |info| %>
<div class="control-group">
<div class="control-label muted"><%= info['title'] %></div>
<div class="controls">
<%= info['value'] %>
</div>
</div>
<% end %>
</div>
</div>
<div class="form-actions">
<%= link_to t('application_form.go_back'), "/admin/application_forms/#{@application_form.id}/application_form_signup", :class=>"btn" %>
</div>
</fieldset>
@@ -51,7 +51,7 @@
val += "<div class=\"quick-edit\">
<ul class=\"nav nav-pills\">"
if @can_edit
val += "<li><a href=\"/admin/application_form_signups/#{application_form_signup.id}/edit\">#{t(:edit)}</a></li>
val += "<li><a href=\"/admin/application_form_signups/#{application_form_signup.id}/view\">#{t('application_form.view')}</a></li>
<li><a href=\"#{print_admin_application_form_path(application_form_signup.id)}\" target=\"_blank\">#{t('application_form.print')}</a></li>
<li><a href=\"#{admin_application_form_signup_path(application_form_signup.id)}\" class=\"delete text-error\" rel=\"nofollow\" data-method=\"delete\" data-confirm=\"Are you sure?\">#{t(:delete_)}</a></li>"
end
@@ -69,7 +69,7 @@
val += "<div class=\"quick-edit\">
<ul class=\"nav nav-pills\">"
if @can_edit
val += "<li><a href=\"/admin/application_form_signups/#{application_form_signup.id}/edit\">#{t(:edit)}</a></li>
val += "<li><a href=\"/admin/application_form_signups/#{application_form_signup.id}/view\">#{t('application_form.view')}</a></li>
<li><a href=\"#{admin_application_form_signup_path(application_form_signup.id)}\" class=\"delete text-error\" rel=\"nofollow\" data-method=\"delete\" data-confirm=\"Are you sure?\">#{t(:delete_)}</a></li>"
end
val += "</ul>
@@ -115,6 +115,7 @@
end %>
<% elsif names[0] == "application_form_signup" %>
<% val = (application_form_signup.send("display_"+names[1]) rescue application_form_signup.send(names[1])) rescue nil %>
<% val = val.strftime('%Y/%m/%d %H:%M') if names[1] == 'created_at' %>
<% elsif names[0] == "application_form_review_result" %>
<% if names[1] == "review" %>
<% val = contribute_ids.map{|contribute_id| "<a href=\"#{edit_admin_application_form_review_result_path(contribute_id)}\" class=\"btn\">#{t("application_form.review")}</a>"} %>
@@ -107,6 +107,7 @@
<th><%= t('application_form.name') %></th>
<th><%= t('application_form.placeholder') %></th>
<th><%= t('application_form.disable') %></th>
<th></th>
<!-- <th><%= t('application_form.hidden') %></th> -->
</thead>
<tbody>
@@ -126,8 +127,23 @@
<input type="hidden" class="field_set" name='<%= "application_form_main[application_form_signup_field_sets][#{signup_index}][disabled]" %>' value="false">
<%= check_box_tag("application_form_main[application_form_signup_field_sets][#{signup_index}][disabled]", true ,attr_signup.disabled) %>
</td>
<td>
<% if attr_signup.field_name != 'recaptcha' %>
<td style="padding-left: 1em;">
<% if attr_signup.field_name == 'email' %>
<label for="application_form_email_regex" style="float: left;margin-right: 0.3em;"><%= t("application_form.email_regex") %>:</label>
<%= f.check_box :email_regex_enable, {:id=>"email_regex_enable", :style=>"float: left;"} %><%= t("ask.enable") %>
<div style="clear: both;"></div>
<%= f.text_field :email_regex, {:id=>"application_form_email_regex", :style => "width: 30em;"}.merge(f.object.email_regex_enable ? {} : {:disabled=>"disabled"}) %>
<script>
$("#email_regex_enable").click(function(){
if($(this).prop("checked")){
$("#application_form_email_regex").removeAttr("disabled");
}else{
$("#application_form_email_regex").attr("disabled","disabled");
}
})
</script>
<% end %>
<% if false #attr_signup.field_name != 'recaptcha' %>
<!-- <input type="hidden" class="field_set" name='<%= "application_form_main[application_form_signup_field_sets][#{signup_index}][hidden]" %>' value="false"> -->
<%= hidden_field_tag("application_form_main[application_form_signup_field_sets][#{signup_index}][hidden]",attr_signup.hidden) %>
<%#= check_box_tag("application_form_main[application_form_signup_field_sets][#{signup_index}][hidden]", true ,attr_signup.hidden) %>
@@ -370,13 +386,13 @@
<% content_for :page_specific_javascript do %>
<script>
function check_members_button(){
$('.controls>.members').each(function(){
if ($(this).parent().find('select[name="application_form_main[reviewer_type_list][]"]').val()=='fixed'){
$(this).removeClass('hide');
}else{
$(this).addClass('hide');
}
})
// $('.controls>.members').each(function(){
// if ($(this).parent().find('select[name="application_form_main[reviewer_type_list][]"]').val()=='fixed'){
// $(this).removeClass('hide');
// }else{
// $(this).addClass('hide');
// }
// })
}
$(function() {
$("#main-wrap").after("");
@@ -2,19 +2,27 @@
<% @field_name_translations = [] %>
<% default_hidden = [] %>
<%
default_application_form_signup_fields = ["serial_number", "review_progress"]
default_show = []
default_application_form_signup_fields = ApplicationFormMain::DefaultSignupFields
default_application_form_signup_fields.each do |f|
@field_names << "application_form_signup.#{f}"
@field_name_translations << t("application_form_signup.#{f}")
default_show << "application_form_signup.#{f}"
end
%>
<% if @application_form.present? %>
<% @max_stage = @application_form.get_max_stage %>
<% if @application_form.application_form_signup_field_sets.count != 0 %>
<% @application_form.application_form_signup_field_sets.each do |field_set| %>
<% next if field_set.field_name == "password" %>
<% default_hidden << "application_form_signup_field_set.#{field_set.field_name}" if (field_set.hidden) %>
<% @field_names << "application_form_signup_field_set.#{field_set.field_name}" %>
<%
field_name = field_set.field_name
if ApplicationFormMain::ExceptFieldSetDisplays.include?(field_name)
default_hidden << "application_form_signup_field_set.#{field_name}"
next
end
%>
<% default_hidden << "application_form_signup_field_set.#{field_name}" if (field_set.hidden) %>
<% @field_names << "application_form_signup_field_set.#{field_name}" %>
<% @field_name_translations << field_set.name[I18n.locale] %>
<% end %>
<% else %>
@@ -28,17 +36,6 @@
<% @field_names << "application_form_signup_fields.#{s.key}" %>
<% @field_name_translations << s.title %>
<% end %>
<% if @application_form.application_form_submission_field_sets.count != 0 %>
<% show1 = !(@application_form.application_form_submission_field_sets.select{|v| v.field_name=='title'}[0].hidden)
show2 = !(@application_form.application_form_submission_field_sets.select{|v| v.field_name=='file'}[0].hidden)
show3 = !(@application_form.application_form_submission_field_sets.select{|v| v.field_name=='description'}[0].hidden)
%>
<% else %>
<% show1 = true
show2 = true
show3 = true
%>
<% end %>
<% @application_form.application_form_submission_fields.each do |s| %>
<% @field_names << "application_form_submission_fields.#{s.key}" %>
<% if s.markup != "application_form_preferred_session"
@@ -48,8 +45,12 @@
end %>
<% end %>
<% @display_field = @application_form_signup_admin_setting.display_field rescue [] %>
<% if @display_field.blank?
<%
if @display_field.blank?
@display_field = @field_names - default_hidden
else
@display_field = @display_field - ApplicationFormMain::ExceptFieldSetDisplays.map{|f| "application_form_signup_field_set.#{f}"}
@display_field = (ApplicationFormMain::StaticSignupFields + @display_field).uniq
end %>
<% if @enable_review_result
@field_names.insert(1,"application_form_review_result.review")
@@ -65,13 +66,10 @@
@display_field << "application_form_review_result.presentation_type"
end%>
<% else %>
<% @field_names = [] %>
<% @field_name_translations = [] %>
<% default_show = [] %>
<% application_form_signup_field_sets = ApplicationFormSignupFieldSet.all.uniq{|s| s.field_name} %>
<% if application_form_signup_field_sets.count != 0 %>
<% application_form_signup_field_sets.each do |field_set| %>
<% next if field_set.field_name == "password" %>
<% next if ApplicationFormMain::ExceptFieldSetDisplays.include?(field_set) %>
<% default_show << "application_form_signup_field_set.#{field_set.field_name}" if !(field_set.hidden) %>
<% @field_names << "application_form_signup_field_set.#{field_set.field_name}" %>
<% @field_name_translations << field_set.name[I18n.locale] %>
@@ -87,19 +85,17 @@
<% @field_names << "application_form_signup_fields.#{s.key}" %>
<% @field_name_translations << s.title %>
<% end %>
<% show1 = true
show2 = true
show3 = true
%>
<% application_form_submission_fields = ApplicationFormSignupField.all.uniq{|s| s.key} %>
<% application_form_submission_fields.each do |s| %>
<% @field_names << "application_form_submission_fields.#{s.key}" %>
<% @field_name_translations << s.title %>
<% end %>
<% @display_field = @application_form_signup_admin_setting.display_field %>
<% @display_field.delete("application_form_signup_field_set.password") %>
<% @display_field.delete("application_form_signup_field_set.recaptcha") %>
<% if @display_field.blank?
@display_field = default_show
<%
if @display_field.blank?
@display_field = default_show
else
@display_field = @display_field - ApplicationFormMain::ExceptFieldSetDisplays.map{|f| "application_form_signup_field_set.#{f}"}
@display_field = (ApplicationFormMain::StaticSignupFields + @display_field).uniq
end %>
<% end %>
@@ -38,7 +38,7 @@
</thead>
<tbody>
<% @field_names[((i/max_length) *max_length) ..i].each do |fn|%>
<td><%= check_box_tag "#{f.object_name}[display_field][]",fn , @display_field.include?(fn) %></td>
<td><%= check_box_tag "#{f.object_name}[display_field][]",fn , @display_field.include?(fn), (ApplicationFormMain::StaticSignupFields.include?(fn) ? {disabled: 'disabled'} : {}) %></td>
<% end %>
</tbody>
</table>
@@ -0,0 +1,131 @@
<% unless @include_js_css_flag %>
<%= javascript_include_tag "lib/checkbox.card.js" %>
<%= stylesheet_link_tag 'basic/global' %>
<%= stylesheet_link_tag 'member_select' %>
<style>
.modal-backdrop, .modal-backdrop.fade.in {
opacity: 0.8;
filter: alpha(opacity=80);
}
.modal-header {
padding: 9px 15px;
border-bottom: 1px solid #eee;
}
.modal-header h3 {
margin: 0;
line-height: 30px;
font-weight: bold;
color: inherit;
text-rendering: optimizelegibility;
}
.modal-body input, .modal-body label {
font-size: 14px;
font-weight: normal;
line-height: 20px;
}
.modal {
position: fixed;
top: 10%;
left: 50%;
z-index: 1050;
width: 560px;
margin-left: -280px;
background-color: #ffffff;
border: 1px solid #999;
border: 1px solid rgba(0, 0, 0, 0.3);
*border: 1px solid #999;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
outline: none;
-webkit-box-shadow: 0 3px 7px rgb(0 0 0 / 30%);
-moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
box-shadow: 0 3px 7px rgb(0 0 0 / 30%);
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
}
.modal-body input[type="checkbox"] {
cursor: pointer;
}
</style>
<% @include_js_css_flag = true %>
<% end %>
<% index = '' unless defined?(index) %>
<div id="selected_<%=select_name rescue 'email_users'%>" class="selected_users <%=extra_class rescue ''%>">
<% email_members.each do |email_member| %>
<span class="alert alert-info selected_user" id="<%= email_member.id %>">
<span class='close remove_user' onclick='removeUser<%=index%>($(this))'>x</span>
<%= email_member.name %>
<%= hidden_field_tag field, email_member.id %>
</span>
<% end %>
</div>
<a class="btn btn-primary btn-small select_user_modal<%=index%>"><%= t('application_form.select') %></a>
<script type="text/javascript">
mail_users<%=index%> = Array();
$(function(){
$.each($("#selected_<%=select_name rescue'email_users'%> .selected_user"),function(i){
mail_users<%=index%>.push($(this).attr("id"));
});
$(".select_user_modal<%=index%>").click(function(){
if($("#select_user<%=index%>").length==0) {
$("body").append("<span id='select_user<%=index%>'><%=escape_javascript(render(:partial=>'application_forms/select_emails', :locals=>{:member_profiles=>member_profiles,:@index=>(index)})) %></span>");
$('.checkbox-card').cardCheck();
}
$("#member-filter").modal('show');
});
});
var removeUser<%=index%> = function(user){
var id = $(user).parent().attr('id');
$("#select_user<%=index%> input[type='checkbox'][value=\""+id+"\"]").prop('checked', false).parent('.check-item').removeClass('active').css('display','');
mail_users<%=index%> = $.grep(mail_users<%=index%>, function(value) {return value != id;});
$(user).parent().remove();
}
Array.prototype.unique = function(){
const distinct = (value, index, self) =>{
return self.indexOf(value) === index;
}
return this.filter(distinct);
}
var updateUsers<%=index%> = function(){
$("#select_user<%=index%> .check-item input[type='checkbox']:checked").each(function(i, v){
mail_users<%=index%>.push($(v).val());
});
$("#selected_<%=select_name rescue'email_users'%>").html("");
mail_users<%=index%> = mail_users<%=index%>.unique();
$.each(mail_users<%=index%>, function(i, user_id){
var username = $("input[value='"+user_id+"']").parent().find(".user-name").html();
$("#selected_<%=select_name rescue'email_users'%>").append(
" <span class='alert alert-info selected_user' id='"+user_id+"'>"+
"<span class='close remove_user' onclick='removeUser<%=index%>($(this))'>x</span>"+
username+
"<input type='hidden' name='<%= field %>' value='"+user_id+"' >"+
"</span>"
);
});
}
var updateModal<%=index%> = function(){
$.each($("#selected_<%=select_name rescue'email_users'%> .selected_user"),function(){
var user_id = $(this).attr('id');
$("input[value='"+user_id+"']").parent("li").hide();
});
$('.check-item').click(function(){
var user_id = $(this).find("input[type='checkbox']").val();
$(this).toggleClass("active");
if($(this).hasClass("active")){
mail_users<%=index%>.push(user_id);
}else{
mail_users<%=index%> = $.grep(mail_users<%=index%>, function(value) {return value != user_id;});
}
});
}
</script>
@@ -0,0 +1,50 @@
<div id="member-filter" class="modal fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h3><%= t('list.user') %></h3>
</div>
<div class="modal-body">
<div class="tabbable tabs-left">
<fieldset class="clearfix">
<div class="member-filter-result nano">
<div class="content">
<i class="icon-search"></i>
<input class="search_names" placeholder="<%=t('users.name')%>" style="margin: 1em;">
<div style="margin-bottom: 1em;"></div>
<ul class="checkbox-card clearfix">
<% member_profiles.each do |profile| %>
<% next if profile.email.nil? %>
<li class="check-item">
<label>
<%= image_tag profile.get_avatar, class: "user-pic" %>
<span class="user-name"><%= profile.name %></span>
</label>
<%= check_box_tag 'email_user_ids[]', profile.id , false , :id => "email_user_ids_#{(profile.id rescue '')}" %>
</li>
<% end %>
</ul>
</div>
</div>
</fieldset>
<div class="form-actions condition">
<button type="button" class="btn" data-dismiss="modal"><%= t(:cancel) %></button>
<button type="button" class="btn btn-primary" data-dismiss="modal" onclick="updateUsers<%=@index rescue ''%>()"><%= t(:submit) %></button>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('.search_names').off('input').on('input',function(){
var name = $(this).val();
var $check_items = $(this).parent().find('.check-item');
$check_items.each(function(i,item){
if( $(item).find('.user-name').text().search(name) == -1){
$(item).css('display','none');
}else{
$(item).css('display','');
}
})
})
})
</script>
+76 -7
View File
@@ -4,6 +4,7 @@
@application_form_signup = data["application_form_signup"]
@time_now = data["time_now"]
@form_index = 0
email_regex = @application_form.get_email_regex(true)
if data["prefix_url"]
prefix_url = data["prefix_url"]
else
@@ -107,6 +108,39 @@
<div class="col-sm-10">
<%= f.email_field :email, :class=>"input-medium form-control availibility", :placeholder=> signup_field.placeholder[I18n.locale], :required => true %>
</div>
<script type="text/javascript">
$(document).ready(function(){
function scrollIntoView(selector, offset = 0) {
window.scroll(0, document.querySelector(selector).offsetTop - offset);
}
var email_regex = "<%=email_regex%>";
if(email_regex.length != 0){
email_regex = new RegExp(email_regex);
var submit_flag = false;
var $form = $("#new-application_form-signup");
var email_field = $('#application_form_signup_email');
if($form.length != 0 && email_field.length != 0){
$form.submit(function(){
if(!submit_flag){
submit_flag = true;
if(email_regex.test(email_field.val())){
submit_flag = false;
}else{
email_field.css("border", "2px solid red");
scrollIntoView('#application_form_signup_email');
alert("<%=t('application_form.please_check_email_format')%>");
email_field.one("input",function(){
email_field.css("border", "");
})
submit_flag = false;
return false;
}
}
})
}
}
})
</script>
<% elsif signup_field.field_name == 'note' %>
<div class="col-sm-10">
<div class="input-append">
@@ -173,6 +207,39 @@
<div class="col-sm-10">
<%= f.email_field :email, :class=>"input-medium form-control availibility", :placeholder=> t(:email), :required => true %>
</div>
<script type="text/javascript">
$(document).ready(function(){
function scrollIntoView(selector, offset = 0) {
window.scroll(0, document.querySelector(selector).offsetTop - offset);
}
var email_regex = "<%=email_regex%>";
if(email_regex.length != 0){
email_regex = new RegExp(email_regex);
var submit_flag = false;
var $form = $("#new-application_form-signup");
var email_field = $('#application_form_signup_email');
if($form.length != 0 && email_field.length != 0){
$form.submit(function(){
if(!submit_flag){
submit_flag = true;
if(email_regex.test(email_field.val())){
submit_flag = false;
}else{
email_field.css("border", "2px solid red");
scrollIntoView('#application_form_signup_email');
alert("<%=t('application_form.please_check_email_format')%>");
email_field.one("input",function(){
email_field.css("border", "");
})
submit_flag = false;
return false;
}
}
})
}
}
})
</script>
</div>
<% end %>
@@ -180,11 +247,12 @@
<% if flag %>
<div class="form-group">
<label for="status" class="col-sm-2 control-label"><%= t("application_form.reviewers.#{k+1}") %></label>
<div class="col-sm-10">
<div class="col-sm-10">
<% tmp = Array(@application_form.reviewer_ids_list[k]) %>
<% if @application_form.reviewer_type_list[k]=='fixed' %>
<%= MemberProfile.where(:id.in=>Array(@application_form.reviewer_ids_list[k])).collect{|m| m.name}.join(', ') %>
<%= MemberProfile.where(:id.in=>tmp).collect{|m| m.name}.join(', ') %>
<% else %>
<%= render partial: 'admin/member_selects/email_selection_box', locals: {field: "#{f.object_name}[reviewer_ids_list][#{k}][]", email_members: [], index: "#{k+1}", select_name: "reviewer_ids_list_#{k}"} %>
<%= render partial: 'application_forms/email_selection_box', locals: {field: "#{f.object_name}[reviewer_ids_list][#{k}][]", email_members: [], member_profiles: (tmp.count == 0 ? MemberProfile.all : MemberProfile.where(:id.in=>tmp)), index: "#{k+1}", select_name: "reviewer_ids_list_#{k}"} %>
<% end %>
</div>
</div>
@@ -306,11 +374,7 @@
type : "get",
success : function(data){
if( data.success == true ){
alert("1tttt");
}else{
alert("1ssss2");
}
}
})
@@ -338,3 +402,8 @@ alert("1ssss2");
<%= t('application_form.sign_up_overdue') %>
<% end %>
<script type="text/javascript">
var email_regex = "<%=email_regex%>";
if(email_regex.length != 0)
email_regex = new RegExp(email_regex);
</script>