Class: Decidim::Forms::Questionnaire

Inherits:
ApplicationRecord show all
Includes:
Publicable, Templates::Templatable, Traceable, TranslatableResource
Defined in:
decidim-forms/app/models/decidim/forms/questionnaire.rb

Overview

The data store for a Questionnaire in the Decidim::Forms component.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Publicable

#previously_published?, #publish!, #published?, #unpublish!

Instance Attribute Details

#override_editObject (readonly)

Returns the value of attribute override_edit.



21
22
23
# File 'decidim-forms/app/models/decidim/forms/questionnaire.rb', line 21

def override_edit
  @override_edit
end

#questionnaire_template_idObject

Returns the value of attribute questionnaire_template_id.



20
21
22
# File 'decidim-forms/app/models/decidim/forms/questionnaire.rb', line 20

def questionnaire_template_id
  @questionnaire_template_id
end

Class Method Details

.log_presenter_class_for(_log) ⇒ Object



43
44
45
# File 'decidim-forms/app/models/decidim/forms/questionnaire.rb', line 43

def self.log_presenter_class_for(_log)
  Decidim::Forms::AdminLog::QuestionnairePresenter
end

Instance Method Details

#count_participantsObject



47
48
49
# File 'decidim-forms/app/models/decidim/forms/questionnaire.rb', line 47

def count_participants
  Decidim::Forms::QuestionnaireParticipants.new(self).count_participants
end

#override_edit!Object



29
30
31
# File 'decidim-forms/app/models/decidim/forms/questionnaire.rb', line 29

def override_edit!
  @override_edit = true
end

#pristine?Boolean



39
40
41
# File 'decidim-forms/app/models/decidim/forms/questionnaire.rb', line 39

def pristine?
  created_at.to_i == updated_at.to_i && questions.empty?
end

#questions_editable?Boolean

Public: returns whether the questionnaire questions can be modified or not.



24
25
26
27
# File 'decidim-forms/app/models/decidim/forms/questionnaire.rb', line 24

def questions_editable?
  has_component = questionnaire_for.respond_to? :component
  (has_component && !questionnaire_for.component.published?) || override_edit.presence || responses.empty?
end

#responded_by?(user) ⇒ Boolean

Public: returns whether the questionnaire is responded by the user or not.



34
35
36
37
# File 'decidim-forms/app/models/decidim/forms/questionnaire.rb', line 34

def responded_by?(user)
  query = user.is_a?(String) ? { session_token: user } : { user: }
  responses.where(query).any? if questions.present?
end