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 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