Files
danbooru/db/populate.rb
evazion c82e05d828 users: add stricter checks for user promotions.
New rules for user promotions:

* Moderators can no longer promote other users to moderator level. Only
  Admins can promote users to Mod level. Mods can only promote up to Builder level.
* Admins can no longer promote other users to Admin level. Only Owners
  can promote users to Admin. Admins can only promote up to Mod level.
* Admins can no longer demote themselves or other admins.

These rules are being changed to account for the new Owner user level.

Also change it so that when a user upgrades their account, the promotion
is done by DanbooruBot. This means that the inviter and the mod action
will show DanbooruBot as the promoter instead of the user themselves.
2020-12-13 21:21:08 -06:00

207 lines
4.8 KiB
Ruby

require 'set'
CurrentUser.ip_addr = "127.0.0.1"
Delayed::Worker.delay_jobs = false
used_names = Set.new([""])
def rand_string(n, unique = false)
string = ""
n = rand(n) + 1
while used_names.include?(string)
consonants = "bcdfghjklmnpqrstvwxz".scan(/./)
vowels = "aeiouy".scan(/./)
string = ""
n.times do
string << consonants[rand(consonants.size)]
string << vowels[rand(vowels.size)]
end
return string unless unique
end
used_names.add(string)
string
end
def rand_sentence(n, unique = false)
(0..n).map {rand_string(n, unique)}.join(" ") + "."
end
def rand_paragraph(n, unique = false)
(0..n).map {rand_sentence(n, unique)}.join(" ")
end
def rand_document(n, unique = false)
(0..n).map {rand_paragraph(n, unique)}.join("\n\n")
end
if User.count == 0
puts "Creating users"
begin
user = User.create(
:name => "admin",
:password => "password1",
:password_confirmation => "password1"
)
CurrentUser.user = user
User::Levels.constants.reject { |x| x == :ADMIN }.each do |level|
newuser = User.create(
name: level.to_s.downcase,
password: "password1",
password_confirmation: "password1"
)
newuser.promote_to!(User::Levels.const_get(level), user)
end
newuser = User.create(
:name => "banned",
:password => "password1",
:password_confirmation => "password1"
)
Ban.create(:user_id => newuser.id, :reason => "from the start", :duration => 99999)
newuser = User.create(
:name => "uploader",
:password => "password1",
:password_confirmation => "password1"
)
newuser.promote_to!(User::Levels::BUILDER, :can_upload_free => true, :is_upgrade => true, :skip_dmail => true)
newuser = User.create(
:name => "approver",
:password => "password1",
:password_confirmation => "password1"
)
newuser.promote_to!(User::Levels::BUILDER, :can_approve_posts => true, :is_upgrade => true, :skip_dmail => true)
end
0.upto(10) do |i|
User.create(
:name => rand_string(8, true),
:password => "password1",
:password_confirmation => "password1"
)
end
used_names = Set.new([""])
else
puts "Skipping users"
user = User.find_by_name("albert")
end
CurrentUser.user = User.admins.first
CurrentUser.ip_addr = "127.0.0.1"
if Upload.count == 0
puts "Creating uploads"
1.upto(50) do |i|
color1 = rand(4096).to_s(16)
color2 = rand(4096).to_s(16)
width = rand(100..2099)
height = (width * (rand(0.5) + 1)).to_i
url = "http://ipsumimage.appspot.com/#{width}x#{height},#{color1}"
tags = rand(1_000_000_000).to_s.scan(/../).join(" ")
puts url
service = UploadService.new(source: url, tag_string: tags, rating: "s")
service.start!
end
else
puts "Skipping uploads"
end
if Comment.count == 0
puts "Creating comments"
Post.all.each do |post|
rand(100).times do
Comment.create(:post_id => post.id, :body => rand_paragraph(6))
end
end
else
puts "Skipping comments"
end
if Note.count == 0
puts "Creating notes"
Post.order("random()").limit(10).each do |post|
rand(5).times do
note = Note.create(:post_id => post.id, :x => rand(post.image_width), :y => rand(post.image_height), :width => 100, :height => 100, :body => Time.now.to_f.to_s)
rand(20).times do |i|
note.update(body: rand_sentence(6))
end
end
end
else
puts "Skipping notes"
end
if Artist.count == 0
puts "Creating artists"
20.times do |i|
Artist.create(:name => rand_string(9, true))
end
used_names = Set.new([""])
else
puts "Skipping artists"
end
if TagAlias.count == 0
puts "Creating tag aliases"
20.times do |i|
TagAlias.create(:antecedent_name => rand_string(9, true), :consequent_name => rand_string(9, true))
end
used_names = Set.new([""])
else
puts "Skipping tag aliases"
end
if TagImplication.count == 0
puts "Creating tag implictions"
20.times do |i|
TagImplication.create(:antecedent_name => rand_string(9, true), :consequent_name => rand_string(9, true))
end
used_names = Set.new([""])
else
puts "Skipping tag implications"
end
if Pool.count == 0
puts "Creating pools"
1.upto(20) do |i|
pool = Pool.create(:name => rand_string(9, true))
rand(33).times do |j|
pool.add!(Post.order("random()").first)
end
end
used_names = Set.new([""])
end
if Favorite.count == 0
puts "Creating favorites"
Post.order("random()").limit(50).each do |post|
user = User.order("random()").first
post.add_favorite!(user)
post.add_favorite!(CurrentUser.user)
end
else
puts "Skipping favorites"
end
if ForumTopic.count == 0
puts "Creating forum posts"
20.times do |i|
topic = ForumTopic.create(:title => rand_sentence(6))
rand(100).times do |j|
post = ForumPost.create(:topic_id => topic.id, :body => rand_document(6))
end
end
end