| 
									
										
										
										
											2017-07-12 03:24:04 +02:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Form::AdminSettings | 
					
						
							|  |  |  |   include ActiveModel::Model | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-23 14:07:04 +01:00
										 |  |  |   KEYS = %i( | 
					
						
							|  |  |  |     site_contact_username | 
					
						
							|  |  |  |     site_contact_email | 
					
						
							|  |  |  |     site_title | 
					
						
							|  |  |  |     site_short_description | 
					
						
							|  |  |  |     site_description | 
					
						
							|  |  |  |     site_extended_description | 
					
						
							|  |  |  |     site_terms | 
					
						
							|  |  |  |     registrations_mode | 
					
						
							|  |  |  |     closed_registrations_message | 
					
						
							|  |  |  |     open_deletion | 
					
						
							|  |  |  |     timeline_preview | 
					
						
							|  |  |  |     show_staff_badge | 
					
						
							| 
									
										
										
										
											2019-12-16 23:55:50 +01:00
										 |  |  |     enable_bootstrap_timeline_accounts | 
					
						
							| 
									
										
										
										
											2019-03-23 14:07:04 +01:00
										 |  |  |     bootstrap_timeline_accounts | 
					
						
							|  |  |  |     theme | 
					
						
							|  |  |  |     min_invite_role | 
					
						
							|  |  |  |     activity_api_enabled | 
					
						
							|  |  |  |     peers_api_enabled | 
					
						
							|  |  |  |     show_known_fediverse_at_about_page | 
					
						
							|  |  |  |     preview_sensitive_media | 
					
						
							|  |  |  |     custom_css | 
					
						
							|  |  |  |     profile_directory | 
					
						
							| 
									
										
										
										
											2019-03-30 20:03:56 -07:00
										 |  |  |     thumbnail | 
					
						
							|  |  |  |     hero | 
					
						
							|  |  |  |     mascot | 
					
						
							| 
									
										
										
										
											2019-07-17 21:09:15 +02:00
										 |  |  |     spam_check_enabled | 
					
						
							| 
									
										
										
										
											2019-08-06 17:57:52 +02:00
										 |  |  |     trends | 
					
						
							| 
									
										
										
										
											2019-10-09 00:30:15 +02:00
										 |  |  |     trendable_by_default | 
					
						
							| 
									
										
										
										
											2019-08-19 11:35:48 +02:00
										 |  |  |     show_domain_blocks | 
					
						
							|  |  |  |     show_domain_blocks_rationale | 
					
						
							| 
									
										
										
										
											2019-09-11 07:44:58 +01:00
										 |  |  |     noindex | 
					
						
							| 
									
										
										
										
											2019-03-23 14:07:04 +01:00
										 |  |  |   ).freeze | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   BOOLEAN_KEYS = %i( | 
					
						
							|  |  |  |     open_deletion | 
					
						
							|  |  |  |     timeline_preview | 
					
						
							|  |  |  |     show_staff_badge | 
					
						
							| 
									
										
										
										
											2019-12-16 23:55:50 +01:00
										 |  |  |     enable_bootstrap_timeline_accounts | 
					
						
							| 
									
										
										
										
											2019-03-23 14:07:04 +01:00
										 |  |  |     activity_api_enabled | 
					
						
							|  |  |  |     peers_api_enabled | 
					
						
							|  |  |  |     show_known_fediverse_at_about_page | 
					
						
							|  |  |  |     preview_sensitive_media | 
					
						
							|  |  |  |     profile_directory | 
					
						
							| 
									
										
										
										
											2019-07-17 21:09:15 +02:00
										 |  |  |     spam_check_enabled | 
					
						
							| 
									
										
										
										
											2019-08-06 17:57:52 +02:00
										 |  |  |     trends | 
					
						
							| 
									
										
										
										
											2019-10-09 00:30:15 +02:00
										 |  |  |     trendable_by_default | 
					
						
							| 
									
										
										
										
											2019-09-11 07:44:58 +01:00
										 |  |  |     noindex | 
					
						
							| 
									
										
										
										
											2019-03-23 14:07:04 +01:00
										 |  |  |   ).freeze | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   UPLOAD_KEYS = %i( | 
					
						
							|  |  |  |     thumbnail | 
					
						
							|  |  |  |     hero | 
					
						
							|  |  |  |     mascot | 
					
						
							|  |  |  |   ).freeze | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   attr_accessor(*KEYS) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-10 03:34:16 +02:00
										 |  |  |   validates :site_short_description, :site_description, html: { wrap_with: :p } | 
					
						
							|  |  |  |   validates :site_extended_description, :site_terms, :closed_registrations_message, html: true | 
					
						
							| 
									
										
										
										
											2019-03-23 14:07:04 +01:00
										 |  |  |   validates :registrations_mode, inclusion: { in: %w(open approved none) } | 
					
						
							|  |  |  |   validates :min_invite_role, inclusion: { in: %w(disabled user moderator admin) } | 
					
						
							|  |  |  |   validates :site_contact_email, :site_contact_username, presence: true | 
					
						
							|  |  |  |   validates :site_contact_username, existing_username: true | 
					
						
							|  |  |  |   validates :bootstrap_timeline_accounts, existing_username: { multiple: true } | 
					
						
							| 
									
										
										
										
											2019-08-19 11:35:48 +02:00
										 |  |  |   validates :show_domain_blocks, inclusion: { in: %w(disabled users all) } | 
					
						
							|  |  |  |   validates :show_domain_blocks_rationale, inclusion: { in: %w(disabled users all) } | 
					
						
							| 
									
										
										
										
											2019-03-23 14:07:04 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def initialize(_attributes = {}) | 
					
						
							|  |  |  |     super | 
					
						
							|  |  |  |     initialize_attributes | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def save | 
					
						
							|  |  |  |     return false unless valid? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     KEYS.each do |key| | 
					
						
							|  |  |  |       value = instance_variable_get("@#{key}") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 22:30:46 -07:00
										 |  |  |       if UPLOAD_KEYS.include?(key) && !value.nil? | 
					
						
							| 
									
										
										
										
											2019-03-23 14:07:04 +01:00
										 |  |  |         upload = SiteUpload.where(var: key).first_or_initialize(var: key) | 
					
						
							|  |  |  |         upload.update(file: value) | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         setting = Setting.where(var: key).first_or_initialize(var: key) | 
					
						
							|  |  |  |         setting.update(value: typecast_value(key, value)) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def initialize_attributes | 
					
						
							|  |  |  |     KEYS.each do |key| | 
					
						
							|  |  |  |       instance_variable_set("@#{key}", Setting.public_send(key)) if instance_variable_get("@#{key}").nil? | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def typecast_value(key, value) | 
					
						
							|  |  |  |     if BOOLEAN_KEYS.include?(key) | 
					
						
							|  |  |  |       value == '1' | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       value | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-07-12 03:24:04 +02:00
										 |  |  | end |