message:<FormattedMessageid='confirmations.unfollow.message'defaultMessage='Are you sure you want to unfollow {name}?'values={{name:<strong>@{account.get('acct')}</strong>}}/>,
message:<FormattedMessageid='confirmations.unfollow.message'defaultMessage='Are you sure you want to unfollow {name}?'values={{name:<strong>@{account.get('acct')}</strong>}}/>,
message:<FormattedMessageid='confirmations.domain_block.message'defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.'values={{domain:<strong>{domain}</strong>}}/>,
message:<FormattedMessageid='confirmations.domain_block.message'defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.'values={{domain:<strong>{domain}</strong>}}/>,
replyMessage:{id:'confirmations.reply.message',defaultMessage:'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?'},
editMessage:{id:'confirmations.edit.message',defaultMessage:'Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?'},
message:<FormattedMessageid='confirmations.domain_block.message'defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.'values={{domain:<strong>{domain}</strong>}}/>,
message:<FormattedMessageid='confirmations.domain_block.message'defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.'values={{domain:<strong>{domain}</strong>}}/>,
message:<FormattedMessageid='confirmations.unfollow.message'defaultMessage='Are you sure you want to unfollow {name}?'values={{name:<strong>@{account.get('acct')}</strong>}}/>,
message:<FormattedMessageid='confirmations.unfollow.message'defaultMessage='Are you sure you want to unfollow {name}?'values={{name:<strong>@{account.get('acct')}</strong>}}/>,
message:<FormattedMessageid='confirmations.cancel_follow_request.message'defaultMessage='Are you sure you want to withdraw your request to follow {name}?'values={{name:<strong>@{account.get('acct')}</strong>}}/>,
message:<FormattedMessageid='confirmations.cancel_follow_request.message'defaultMessage='Are you sure you want to withdraw your request to follow {name}?'values={{name:<strong>@{account.get('acct')}</strong>}}/>,
message:<FormattedMessageid='confirmations.domain_block.message'defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.'values={{domain:<strong>{domain}</strong>}}/>,
message:<FormattedMessageid='confirmations.domain_block.message'defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.'values={{domain:<strong>{domain}</strong>}}/>,
message:<FormattedMessageid='confirmations.cancel_follow_request.message'defaultMessage='Are you sure you want to withdraw your request to follow {name}?'values={{name:<strong>@{account.get('acct')}</strong>}}/>,
message:<FormattedMessageid='confirmations.cancel_follow_request.message'defaultMessage='Are you sure you want to withdraw your request to follow {name}?'values={{name:<strong>@{account.get('acct')}</strong>}}/>,
replyMessage:{id:'confirmations.reply.message',defaultMessage:'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?'},
@ -437,10 +461,13 @@ class Status extends ImmutablePureComponent {
};
handleBlockDomainClick=domain=>{
this.props.dispatch(openModal('CONFIRM',{
message:<FormattedMessageid='confirmations.domain_block.message'defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.'values={{domain:<strong>{domain}</strong>}}/>,
message:<FormattedMessageid='confirmations.domain_block.message'defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.'values={{domain:<strong>{domain}</strong>}}/>,
"defaultMessage":"Awaiting approval. Click to cancel follow request",
"id":"account.requested"
},
{
@ -721,7 +721,7 @@
"id":"privacy.unlisted.short"
},
{
"defaultMessage":"Followers-only",
"defaultMessage":"Followersonly",
"id":"privacy.private.short"
},
{
@ -792,7 +792,7 @@
"id":"confirmations.domain_block.confirm"
},
{
"defaultMessage":"Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable.",
"defaultMessage":"Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
"id":"confirmations.domain_block.message"
}
],
@ -833,7 +833,7 @@
"id":"confirmations.edit.message"
},
{
"defaultMessage":"Hide entire domain",
"defaultMessage":"Block entire domain",
"id":"confirmations.domain_block.confirm"
},
{
@ -980,7 +980,7 @@
"id":"confirmations.unfollow.confirm"
},
{
"defaultMessage":"Hide entire domain",
"defaultMessage":"Block entire domain",
"id":"confirmations.domain_block.confirm"
},
{
@ -1412,7 +1412,7 @@
"id":"navigation_bar.blocks"
},
{
"defaultMessage":"Hidden domains",
"defaultMessage":"Blocked domains",
"id":"navigation_bar.domain_blocks"
},
{
@ -2430,7 +2430,7 @@
"id":"navigation_bar.blocks"
},
{
"defaultMessage":"Hidden domains",
"defaultMessage":"Blocked domains",
"id":"navigation_bar.domain_blocks"
},
{
@ -3535,7 +3535,7 @@
"id":"privacy.unlisted.short"
},
{
"defaultMessage":"Followers-only",
"defaultMessage":"Followersonly",
"id":"privacy.private.short"
},
{
@ -3743,7 +3743,7 @@
"id":"status.admin_account"
},
{
"defaultMessage":"Open this status in the moderation interface",
"defaultMessage":"Open this post in the moderation interface",
@ -123,7 +123,7 @@ class Account < ApplicationRecord
scope:by_recent_status,->{order(Arel.sql('(case when account_stats.last_status_at is null then 1 else 0 end) asc, account_stats.last_status_at desc, accounts.id desc'))}
scope:by_recent_sign_in,->{order(Arel.sql('(case when users.current_sign_in_at is null then 1 else 0 end) asc, users.current_sign_in_at desc, accounts.id desc'))}
ActiveRecord::Base.connection.add_index:users,['reset_password_token'],name:'index_users_on_reset_password_token',unique:true,where:'reset_password_token IS NOT NULL',opclass::text_pattern_ops
end
end
defdeduplicate_users_process_confirmation_token
ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE confirmation_token IS NOT NULL GROUP BY confirmation_token HAVING count(*) > 1").eachdo|row|
ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE remember_token IS NOT NULL GROUP BY remember_token HAVING count(*) > 1").eachdo|row|
ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE reset_password_token IS NOT NULL GROUP BY reset_password_token HAVING count(*) > 1").eachdo|row|
ActiveRecord::Base.connection.add_index:users,['reset_password_token'],name:'index_users_on_reset_password_token',unique:true,where:'reset_password_token IS NOT NULL',opclass::text_pattern_ops