Created
September 3, 2017 01:09
-
-
Save RyanFriedman/3ca7e35be7dc252d1b020bdd427d0100 to your computer and use it in GitHub Desktop.
Poorly written Ruby on Rails code from SynaypseIndia - SynapseIndia.com
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function entryFunction(){ | |
$("#save_modal_radio_id").click(function(){ | |
saveModal('radio'); | |
}) | |
$("#dynamic_location_field").click(function(){ | |
dynamic_location_field() | |
}); | |
$("#concate_location").click(function(){ | |
concatLocations(); | |
}); | |
$("#add_button_name").click(function(){ | |
add_button('name'); | |
}); | |
$("#add_button_email").click(function(){ | |
add_button('email'); | |
}); | |
$("#add_button_city").click(function(){ | |
add_button('city'); | |
}); | |
$("#dynamic_add_button_text_field").click(function(){ | |
dynamic_add_button('text_field'); | |
}); | |
$("#dynamic_add_button_text_area").click(function(){ | |
dynamic_add_button('text_area'); | |
}); | |
$("#dynamic_add_button_checkbox").click(function(){ | |
dynamic_add_button('checkbox'); | |
}); | |
$("#add_new_opt_id").click(function(){ | |
addNewOption("dropdown"); | |
}) | |
$("#save_modal_dropdown_id").click(function(){ | |
saveModal('dropdown'); | |
}) | |
$("#save_modal_drpdown_id").click(function(){ | |
saveModal('dropdown'); | |
}) | |
function addNewOption(type){ | |
var count = $(".dynamic_"+type+"_options").length; | |
$("#new_dynamic_"+type+"_option").append("<div id='dynamic_"+type+"_options_"+count+"'><input type='text' class='dynamic_"+type+"_options form-control' placeholder='Options'/><a class='btn btn-danger' onclick=removeLocationElement('dynamic_"+type+"_options_"+count+"') >Remove</a></div>");//"); | |
} | |
$("#add_new_option_id").click(function(){ | |
addNewOption("radio"); | |
}) | |
} | |
function dynamic_location_field(){ | |
var count = $(".dynamic_location_options").length; | |
$("#new_dynamic_location_element").before("<div id='dynamic_location_options_"+count+"'><input type='text' class='dynamic_location_options form-control' placeholder='Locations'/><a class='btn btn-danger' onclick=removeLocationElement(dynamic_location_options_"+count+"') >Remove</a></div>"); | |
} | |
function concatLocations(){ | |
var locations = []; | |
$(".dynamic_location_options").each(function() { | |
locations.push($( this ).val()); | |
}); | |
insertOptions(locations); | |
} | |
function insertOptions(locations){ | |
var pre_locations = $("#entry_entry_field_locations").val(); | |
for(var i =0; i< locations.length; i++){ | |
$("#entries_locations").append("<option value='"+locations[i]+"'>"+locations[i]+"</label>"); | |
} | |
var location_options = locations.toString(); | |
var location = pre_locations+","+location_options | |
if(/^,/.test(location)){ | |
location = location.replace(/^,/, ""); | |
} | |
$("#entry_entry_field_locations").val(location); | |
} | |
function removeLocationElement(id){ | |
$("#"+id).remove(); | |
} | |
function addNewOption(type){ | |
var count = $(".dynamic_"+type+"_options").length; | |
$("#new_dynamic_"+type+"_option").append("<div id='dynamic_"+type+"_options_"+count+"'><input type='text' class='dynamic_"+type+"_options form-control' placeholder='Options'/><a class='btn btn-danger' onclick=removeLocationElement('dynamic_"+type+"_options_"+count+"') >Remove</a></div>");//"); | |
} | |
function append_text_field_values(type, result){ | |
var text_field = $("#entry_entry_field_"+type); | |
var text_field_values = text_field.val(); | |
if(text_field_values.length > 0){ | |
text_field.val(text_field_values+","+result); | |
}else{ | |
text_field.val(result); | |
} | |
return "<label class='dynamic_label'>" + result + "</label>"; | |
} | |
function append_html_elements(type, label, count, html_element){ | |
if(label.length > 0){ | |
$(".preview-box").append("<div id='div"+count+"'>"+ label + html_element+"<button onclick=closeDiv('"+type+"',div"+count+") class='glyphicon glyphicon-trash btn btn-danger'></button ></div>"); | |
} | |
} | |
function custom_append_html_elements(type, label, count, html_element){ | |
if(label.length > 0){ | |
$(".preview-box").append("<div class='field-preview col-md-12' id='div"+count+"'>" + label + html_element + "<div class='col-md-2'><span id='close"+count+"' onclick=closeSingleDiv('div"+count+"','"+type+"')><button class='glyphicon glyphicon-trash btn btn-danger'></button></span></div></div>"); | |
var text_field = $("#entry_entry_field_"+type); | |
text_field.val("true"); | |
} | |
} | |
function getText(type, id){ | |
var label_id = "label_"+type+id; | |
var lable_res = $("#"+label_id).val(); | |
$("#"+label_id).replaceWith("<label>"+lable_res+"</label>"); | |
var result = lable_res; | |
var text_field = $("#entry_entry_field_"+type); | |
var text_field_values = $("#entry_entry_field_"+type).val(); | |
if(text_field_values.length > 0){ | |
text_field.val(text_field_values+","+result); | |
}else{ | |
text_field.val(result); | |
} | |
$("#"+"done_edit_"+id).remove(); | |
} | |
function dynamic_add_button(type){ | |
var count = $(".dynamic_label").length; | |
var label = ""; | |
var html_element = ""; | |
switch(type){ | |
case "text_field": | |
html_element = "<div class='col-md-5'><label class='dynamic_label'></label><input class='form-control' type='text' id='label_text_field"+count+"' placeholder='Please Enter Field Name' name='Name' id='name_label' /><a class='btn btn-info' id='done_edit_"+count+"' onclick=getText('"+type+"',"+count+") >F</a></div><div class='col-md-2'><input class='form-control' type='text' name='"+result+"' id='input_text"+count+"' disabled /></div>"; | |
$(".preview-box").append("<div class='field-preview col-md-12' id='div"+count+"'>"+html_element+"<button onclick=closeDiv('"+type+"',div"+count+") class='glyphicon glyphicon-trash btn btn-danger'></button ></div>"); | |
break; | |
case "text_area": | |
html_element = "<div class='col-md-5'><label class='dynamic_label'></label><input type='text' id='label_text_area"+count+"' placeholder='Please Enter Field Name' name='Name' id='name_label' /><a class='btn btn-info' id='done_edit_"+count+"' onclick=getText('"+type+"',"+count+") >F</a></div><div class='col-md-2'><textarea rows='2' name='"+result+"' id='input_text"+count+"'></textarea></div>"; | |
$(".preview-box").append("<div class='field-preview col-md-12' id='div"+count+"'>"+html_element+"<button onclick=closeDiv('"+type+"',div"+count+") class='glyphicon glyphicon-trash btn btn-danger'></button ></div>"); | |
break; | |
case "radio": | |
var result = prompt("Please enter label radio button"); | |
if (result.length > 0) { | |
var first_option = prompt("Please enter first option"); | |
var second_option = prompt("Please enter second option"); | |
label = "<label class='dynamic_label'>"+result+"</label>"; | |
html_element = "<input type='radio' name='"+result+"' value='"+first_option+"' checked> "+first_option+"<input type='radio' name='"+result+"' value='"+second_option+"'> "+second_option+"<input type='radio' name='"+result+"' value='other'> Other"; | |
} | |
break; | |
case "dropdown": | |
label = "dropdown"; | |
break; | |
case "checkbox": | |
html_element = "<label class='dynamic_label'></label><input type='text' id='label_checkbox"+count+"' placeholder='Please Enter Field Name' name='Name' id='name_label' /><a class='btn btn-info' id='done_edit_"+count+"' onclick=getText('"+type+"',"+count+") >Done Edit</a><input type='checkbox' name='"+result+"' value='"+result+"'>";//+result+""; | |
$(".preview-box").append("<div id='div"+count+"'>"+html_element+"<button onclick=closeDiv('"+type+"',div"+count+") class='btn btn-danger'>Remove</button ></div>"); | |
break; | |
} | |
} | |
function add_button(type){ | |
if($('.'+type+'_class').length > 0) | |
{ | |
} | |
else{ | |
var count = $(".dynamic_label").length; | |
var label = ""; | |
var html_element = ""; | |
switch(type){ | |
case "name": | |
label = "<div class='col-md-4'><label class='dynamic_label'>Name</label></div>"; | |
html_element = "<div class='col-md-6'><input type='text' name='name' class='form-control name_class' id='input_text" + count + "' disabled/></div>"; | |
custom_append_html_elements(type, label, count, html_element) | |
break; | |
case "email": | |
label = "<div class='col-md-4'><label class='dynamic_label'>Email</label></div>"; | |
html_element = "<div class='col-md-6'><input type='text' name='email' class='form-control email_class' id='input_text" + count + "' disabled/></div>"; | |
custom_append_html_elements(type, label, count, html_element); | |
break; | |
case "city": | |
label = "<div class='col-md-4'><label class='dynamic_label'>City</label></div>"; | |
html_element = "<div class='col-md-6'><input type='text' name='city' class='form-control city_class' id='input_text" + count +"' disabled/></div>"; | |
custom_append_html_elements(type, label, count, html_element); | |
break; | |
} | |
} | |
} | |
function closeDiv(type, id){ | |
var text_field = $("#entry_entry_field_"+type).val(); | |
var t = text_field.replace(/\ /g, "").split(','); | |
var check = $(id).children("label").text(); | |
t.splice($.inArray(check, t), 1); | |
$(id).remove(); | |
var check = $(id).children("label").text(); | |
$("#entry_entry_field_"+type).val(t.join(',')); | |
} | |
function closeRadioDiv(type, id, eid){ | |
if(localStorage.getItem(type+'_button_values') == ""){ | |
localStorage.setItem(type+'_button_values', ""); | |
$("#entry_entry_field_"+type).val(localStorage.getItem(type+'_button_values')); | |
}else{ | |
var arrays = JSON.parse(localStorage.getItem(type+'_button_values')); | |
$("#"+id).remove(); | |
if(arrays.length == undefined){ | |
localStorage.setItem(type+'_button_values', "");//, ""); | |
}else{ | |
var flag = ""; | |
for(var i =0; i< arrays.length; i++){ | |
if(arrays[i].key == eid){ | |
flag = i; | |
} | |
} | |
arrays.splice(flag, 1); | |
localStorage.setItem(type+'_button_values', JSON.stringify(arrays)); | |
} | |
$("#entry_entry_field_"+type).val(localStorage.getItem(type+'_button_values')); | |
} | |
} | |
function closeSingleDiv(id, type){ | |
$("#entry_entry_field_"+type).val("false"); | |
$("#"+id).remove(); | |
} | |
function saveModal(type){ | |
var options = []; | |
$(".dynamic_"+type+"_options").each(function() { | |
options.push($( this ).val()); | |
}); | |
var label = $("#label_option_"+type).val(); | |
var options = options; | |
createRadioDropdownDyn(label, options, type); | |
} | |
function createRadioDropdownDyn(label, options, type){ | |
var count = $(".dynamic_label").length; | |
if(options.length > 0 && label.length > 0){ | |
var radio_options_html = ""; | |
switch(type){ | |
case "radio": | |
for(var i = 0; i< options.length; i++){ | |
if (options[i] != "") { | |
radio_options_html = radio_options_html+"<input type='radio' id='radio_input_"+options[i]+"' name='"+label+"' value='"+options[i]+"' disabled>"+options[i]; | |
} | |
} | |
break; | |
case "dropdown": | |
radio_options_html = "<select>"; | |
for (var i = 0; i< options.length; i++) { | |
radio_options_html = radio_options_html+"<option value='"+options[i]+"'>"+options[i]+"</option>"; | |
} | |
radio_options_html = radio_options_html+"</select>"; | |
break; | |
} | |
html_element = "<label class='dynamic_label'>"+label+": </label>"+radio_options_html; | |
$(".preview-box").append("<div id='div"+count+"'>"+html_element+"<a onclick=closeRadioDiv('"+type+"','div"+count+"','"+label+"') class='btn btn-danger'>Remove</a ></div>"); | |
var val = $("#entry_entry_field_"+type).val(); | |
var arr = []; | |
if(localStorage.getItem(type+'_button_values') == null){ | |
var obj = new Object(); | |
obj.key = label; | |
obj.value = options; | |
arr.push(obj); | |
arr = obj; | |
localStorage.setItem(type+'_button_values', JSON.stringify(arr)); | |
}else{ | |
var obj = new Object(); | |
obj.key = label; | |
obj.value = options; | |
var arr = new Array(); | |
if(localStorage.getItem(type+'_button_values') == ""){ | |
arr.push(obj); | |
localStorage.setItem(type+'_button_values', JSON.stringify(arr)); | |
}else{ | |
var radio_options = JSON.parse(localStorage.getItem(type+'_button_values')); | |
if(radio_options.length == undefined){ | |
arr.push(radio_options); | |
arr.push(obj); | |
}else{ | |
var arr = new Array(); | |
for(var i = 0; i < radio_options.length; i++){ | |
arr.push(radio_options[i]); | |
} | |
arr.push(obj); | |
} | |
localStorage.setItem(type+'_button_values', JSON.stringify(arr)); | |
} | |
} | |
$("#entry_entry_field_"+type).val(localStorage.getItem(type+'_button_values')); | |
}else{ | |
} | |
} | |
function dynamicFields(type, data){ | |
data = JSON.parse(data); | |
for(var i =0; i < data.length; i++){ | |
var count = $(".dynamic_label").length; | |
dynamic_add_button(type); | |
$("#label_"+type+count).val(data[i]); | |
$("#done_edit_"+count).click(); | |
} | |
} | |
function entriesFunction(entries_name,entries_email,entries_city,entries_text_field,entries_text_area,entries_checkbox,entries_location,entries_radio_result,entries_dropdown){ | |
localStorage.clear(); | |
var name = entries_name; | |
if(name == "true"){ | |
add_button("name") | |
} | |
var email = entries_email; | |
if(email == "true"){ | |
add_button("email") | |
} | |
var city = entries_city; | |
if(city == "true"){ | |
add_button("city") | |
} | |
var data = entries_text_field; | |
dynamicFields("text_field", data); | |
var data = entries_text_area; | |
dynamicFields("text_area", data); | |
var data = entries_checkbox; | |
dynamicFields("checkbox", data); | |
var locations = entries_location; | |
locations = locations.split(","); | |
insertOptions(locations); | |
var radio_result = entries_radio_result; | |
for(var i=0; i < radio_result.length; i++){ | |
createRadioDropdownDyn(radio_result[i].key, radio_result[i].value, "radio"); | |
} | |
var dropdown_result = entries_dropdown; | |
for(var i=0; i < dropdown_result.length; i++){ | |
createRadioDropdownDyn(dropdown_result[i].key, dropdown_result[i].value, "dropdown"); | |
} | |
$("#response-message-entry").html("").append("updated successfully"); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class GiveawaysController < ApplicationController | |
# before_action :set_giveaway, :only => :create | |
before_action :authenticate_user!, :except => [:show] | |
before_action :authenticate_user! | |
skip_before_action :verify_authenticity_token | |
layout "home_layout", :only => [:edit] | |
def create | |
@giveaway = Giveaway.where(:guid => params[:giveaway][:guid]) | |
@giveaway.update(giveaway_params) | |
insert_images(params) | |
end | |
def update | |
@giveaway = Giveaway.find_by(:guid => params[:giveaway][:guid]) | |
User.find(@giveaway.user_id).update(user_params) | |
@user = User.find(@giveaway.user_id) | |
@giveaway.update(giveaway_params) | |
if(params.has_key?(:images)) | |
insert_images(params) | |
end | |
insert_giveaway(@giveaway, @user) | |
end | |
def show | |
giveaway = get_giveaway(params[:guid]) | |
unless(giveaway.sharing.nil?) | |
@facebook_page_url = giveaway.sharing.fb_link | |
end | |
if(params.has_key?(:key)) | |
bonus_entry = BonusEntry.find_by(:key => params[:key]) | |
if(bonus_entry.nil?) | |
@shared_type = {:type_present => false, :key_present => false, :shared_type => "", :shared_key => ""} | |
else | |
if(params.has_key?(:type)) | |
giveaway_entry = GiveawayEntry.find(bonus_entry.giveaway_entry_id) | |
sharing = giveaway.sharing | |
unless(sharing.nil?) | |
case params[:type] | |
when "tweet" | |
giveaway_entry.update_attributes(:bonus_points => (giveaway_entry.bonus_points + sharing.twitter_bonus_point)) | |
when "fb" | |
giveaway_entry.update_attributes(:bonus_points => (giveaway_entry.bonus_points + sharing.fb_bonus_point)) | |
when "email" | |
giveaway_entry.update_attributes(:bonus_points => (giveaway_entry.bonus_points + sharing.email_bonus_point)) | |
when "sl" | |
giveaway_entry.update_attributes(:bonus_points => (giveaway_entry.bonus_points + 5)) | |
else | |
end | |
end | |
@shared_type = {:type_present => true, :key_present => true, :shared_type => params[:type], :shared_key => params[:key]} | |
else | |
@shared_type = {:type_present => false, :key_present => true, :shared_type => "", :shared_key => ""} | |
end | |
end | |
else | |
@shared_type = {:type_present => false, :key_present => false, :shared_type => "", :shared_key => ""} | |
end | |
@google_client_id = Rails.application.secrets.google_client_id | |
@fb_app_id = Rails.application.secrets.facebook_app_id | |
@giveaway = giveaway | |
unless(@giveaway.nil?) | |
@user = User.find(@giveaway.user_id) | |
@empty = false | |
@prizes = Prize.where(:giveaway_id => @giveaway.id) | |
else | |
@empty = true | |
end | |
render layout: "empty_layout" | |
end | |
def insert_images(params) | |
images = params[:images][:image] | |
unless(images.nil?) | |
images.each do |image| | |
image_details = current_user.images.create(:image => image) | |
end | |
end | |
end | |
def new | |
guid = Time.now().to_i | |
@user = current_user | |
@giveaway = @user.giveaways.create(:guid => guid) | |
redirect_to "/giveaways/create/#{guid}" | |
end | |
def edit | |
@user = current_user | |
@giveaway = get_giveaway(params[:guid]) | |
insert_giveaway(@giveaway, @user) | |
end | |
def insert_giveaway(giveaway, user) | |
@giveaway = giveaway | |
@user = user | |
@entry = Entry.find_by(:giveaway_id => @giveaway.id) | |
if(@entry.nil?) | |
@new_entry = true | |
@entry = Entry.new | |
@entry_field = EntryField.new | |
else | |
@new_entry = false | |
@entry_field = @entry.entry_fields.first | |
@radio_result = [] | |
@dropdown_result = [] | |
["radio", "dropdown"].each do |element| | |
element_entry_field = @entry.entry_fields.first.entry_field_options.where(:field_type => element) | |
element_entry_field.each do |radio| | |
@radio_result.push({:key => radio.key, :value => radio.options}.to_hash) if element == "radio" | |
@dropdown_result.push({:key => radio.key, :value => radio.options}.to_hash) if element == "dropdown" | |
end | |
end | |
@radio_result = @radio_result.to_json | |
@dropdown_result = @dropdown_result.to_json | |
end | |
@prize = Prize.where(:giveaway_id => @giveaway.id) | |
if(@prize.count > 0) | |
@prize_nil = false | |
else | |
@prize_nil = true | |
@prize = Prize.new | |
end | |
@sharing = Sharing.find_by(:giveaway_id => @giveaway.id) | |
if(@sharing.nil?) | |
@sharing_nil = true | |
@sharing = Sharing.new | |
else | |
@sharing_nil = false | |
end | |
end | |
def upload_image | |
end | |
def remove_image | |
image = Image.find(params[:id]) | |
if(image.nil?) | |
@result = record_not_found | |
else | |
image.delete | |
@result = record_deleted | |
end | |
end | |
def change_status | |
giveaway = get_giveaway(params[:guid]) | |
if(giveaway.nil?) | |
@message = record_not_found | |
else | |
state = (params[:state] == "true")? true : false | |
giveaway.update(:complete => state) | |
@message = record_updated | |
end | |
end | |
private | |
# Use callbacks to share common setup or constraints between actions. | |
def set_giveaway | |
@giveaway = Giveaway.find(params[:id]) | |
end | |
# Never trust parameters from the scary internet, only allow the white list through. | |
def giveaway_params | |
params.require(:giveaway).permit( | |
:name, :description, :rules, :show_captcha, :hide_entry_count, :guid, | |
:start_date, :end_date, :time_zone, :header_image, :background_image, | |
:user_attributes => [ :id, :name, :company_name, :biography, :business_logo, :headshot ] | |
) | |
end | |
def user_params | |
params.require(:giveaway).require(:user_attributes).permit(:id, :name, :company_name, :biography, :business_logo, :headshot) | |
end | |
def get_giveaway(guid) | |
Giveaway.find_by(:guid => guid) | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SharingsController < ApplicationController | |
# skip_before_action :verify_authenticity_token | |
skip_before_action :verify_authenticity_token, | |
only: [:create ] | |
def create | |
sharing = params[:sharing] | |
@sharing = Sharing.new() | |
insert_sharing(params, @sharing, sharing) | |
@giveaway = Giveaway.find(sharing[:giveaway_id]) | |
end | |
def update | |
sharing = params[:sharing] | |
@giveaway = Giveaway.find(params[:sharing][:giveaway_id]) | |
@sharing = Sharing.find_by(:giveaway_id => @giveaway.id) | |
insert_sharing(params, @sharing, sharing) | |
@prize = Prize.where(:giveaway_id => @giveaway.id) | |
end | |
def insert_sharing(params, sharing_object, sharing) | |
@sharing = sharing_object | |
@sharing.update(sharing_params) | |
fb_share = (sharing[:fb_share] == "true")? true : false | |
twitter_share = (sharing[:twitter_share] == "true")? true : false | |
email_share = (sharing[:email_share] == "true")? true : false | |
fb_page = (sharing[:fb_page] == "true")? true : false | |
twitter_page = (sharing[:twitter_page] == "true")? true : false | |
instagram_page = (sharing[:instagram_page] == "true")? true : false | |
@sharing.update( | |
:fb_share => fb_share, | |
:twitter_share => twitter_share, | |
:fb_page => fb_page, | |
:twitter_page => twitter_page, | |
:instagram_page => instagram_page, | |
:email_share => email_share | |
) | |
entry_fields = params[:sharing][:entry_field] | |
unless(params[:sharing][:entry_field].nil?) | |
params[:sharing][:entry_field][:question].each_with_index do |question, index| | |
@question = Question.create( | |
:answer_this_question => (entry_fields[:answer_this_question][index] == "true")? true : false, | |
:question=> question, | |
:option=> params["option#{index}".to_sym], | |
:sharing_id => @sharing.id | |
) | |
if(params["option#{index}".to_sym] == "text_field") | |
answer_type = false | |
@option = Option.create( | |
:option => "", | |
:question_id => @question.id, | |
:answer => false, | |
:answer_in_text => params[:sharing][:entry_field]["answer#{index}".to_sym] | |
) | |
else | |
params[:sharing][:entry_field]["options#{index}"].each_with_index do |option, opt_index| | |
@option = Option.create( | |
:option => option, | |
:question_id => @question.id | |
) | |
end | |
end | |
end | |
end | |
end | |
def update_question | |
@question = Question.find(params[:id]) | |
if(@question.nil?) | |
@message = record_not_found | |
else | |
@question.update( | |
:question => params[:question] | |
) | |
@message = record_updated | |
end | |
render :json => {:message => @message}.to_json | |
end | |
def get_partial | |
end | |
def remove_question | |
question = Question.find(params[:id]) | |
if(question.nil?) | |
@message = record_not_found | |
else | |
question.destroy | |
@message = record_deleted | |
end | |
end | |
def sharing_params | |
params.require(:sharing).permit(:fb_bonus_point, :fb_content, :twitter_bonus_point, :twitter_content, :email_share, :email_bonus_point, :email_content, :fb_entries, :fb_link, :twitter_entries, :twitter_link, :instagram_entries, :instagram_link, :giveaway_id) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment