landmarks.rb 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. class Landmark < ActiveRecord::Base
  2. validates :name, presence: true
  3. validates :description, presence: true
  4. validates :category, presence: true
  5. before_save :set_default_warning
  6. def self.restricted_find(search, author)
  7. # Find Landmark
  8. case search.to_i
  9. when 0
  10. where(user_id: author.id).
  11. find_by!('name ilike ?', search)
  12. else
  13. find(search) if Util::Roles.admin?(author)
  14. end
  15. end
  16. def set_default_warning
  17. if self.warning.nil?
  18. self.warning = "This is a verified safe location!"
  19. self.w_url = "https://cdn.dribbble.com/users/250235/screenshots/2850450/pokemon_center_1x.png"
  20. self.w_rating = "SFW"
  21. end
  22. end
  23. def self.from_form(app)
  24. key_mapping = {
  25. "Description" => "description",
  26. "Type" => "category",
  27. "Main Region" => "region",
  28. "Parent Landmark" => "location",
  29. "Kinks" => "kink",
  30. "Warning Description" => "warning",
  31. "Warning URL" => "w_url",
  32. "Warning Rating" => "w_rating",
  33. "History" => "history",
  34. "Folklore" => "folk_lore",
  35. "Layout URL" => "layout_url"
  36. }
  37. hash = {
  38. "name" => nil,
  39. "description" => nil,
  40. "category" => nil,
  41. "url" => nil,
  42. "location" => nil,
  43. "region" => nil,
  44. "warning" => nil,
  45. "w_url" => nil,
  46. "kink" => nil,
  47. "layout_url" => nil,
  48. "user_id" => nil,
  49. "w_rating" => nil,
  50. "history" => nil,
  51. "folk_lore" => nil,
  52. "edit_url" => nil
  53. }
  54. user_id = UID.match(app.description)
  55. hash["user_id"] = case app.description
  56. when /server/i
  57. 'Server'
  58. else
  59. user_id[1]
  60. end
  61. hash["name"] = app.title
  62. hash["edit_url"] = app.footer.text
  63. hash["url"] = app.image&.url
  64. app.fields.each do |field|
  65. next if field.nil?
  66. db_column = key_mapping[field.name]
  67. if db_column == "region"
  68. r = Region.find_by(name: field.value)
  69. hash[db_column] = r.id
  70. elsif db_column == "location"
  71. lm = Landmark.find_by(name: field.value)
  72. hash[db_column] = lm.id
  73. elsif db_column == "kink"
  74. hash[db_column] = field.value.split(/,\s?/)
  75. else
  76. hash[db_column] = field.value
  77. end
  78. end
  79. hash = hash.reject { |k,v| k == nil }
  80. hash
  81. end
  82. end