class Moodle2CC::Moodle2::Parsers::QuestionnaireParser

Constants

QUESTIONNAIRE_MODULE_NAME
QUESTIONNAIRE_XML

Public Class Methods

new(backup_dir) click to toggle source
# File lib/moodle2cc/moodle2/parsers/questionnaire_parser.rb, line 8
def initialize(backup_dir)
  @backup_dir = backup_dir
end

Public Instance Methods

parse() click to toggle source
# File lib/moodle2cc/moodle2/parsers/questionnaire_parser.rb, line 12
def parse
  activity_dirs = activity_directories(@backup_dir, QUESTIONNAIRE_MODULE_NAME)
  activity_dirs.map { |dir| parse_questionnaire(dir) }
end

Private Instance Methods

parse_questionnaire(dir) click to toggle source
# File lib/moodle2cc/moodle2/parsers/questionnaire_parser.rb, line 19
def parse_questionnaire(dir)
  questionnaire = Moodle2CC::Moodle2::Models::Questionnaire.new
  activity_dir = File.join(@backup_dir, dir)

  File.open(File.join(activity_dir, QUESTIONNAIRE_XML)) do |f|
    xml = Nokogiri::XML(f)
    questionnaire.id = xml.at_xpath('/activity/questionnaire/@id').value
    questionnaire.module_id = xml.at_xpath('/activity/@moduleid').value
    questionnaire.name = parse_text(xml, '/activity/questionnaire/name')
    questionnaire.intro = parse_text(xml, '/activity/questionnaire/intro')
    questionnaire.intro_format = parse_text(xml, '/activity/questionnaire/introformat')

    questionnaire.open_date = parse_text(xml, '/activity/questionnaire/opendate')
    questionnaire.close_date = parse_text(xml, '/activity/questionnaire/closedate')
    questionnaire.time_modified = parse_text(xml, '/activity/questionnaire/timemodified')

    xml.search('/activity/questionnaire/surveys/survey/questions/question').each do |node|
      question = Moodle2CC::Moodle2::Models::Questionnaire::Question.new
      question.id = node.attributes['id'].value
      question.name = parse_text(node, 'name')
      question.type_id = parse_text(node, 'type_id')
      question.position = parse_text(node, 'position')
      question.content = parse_text(node, 'content')

      question.length = parse_text(node, 'length') # used for rating scale
      question.precise = parse_text(node, 'precise') # used for rating scale type

      question.deleted = parse_boolean(node, 'deleted')
      node.search('quest_choices/quest_choice').each do |choice_node|
        question.choices << {
          :id => choice_node.attributes['id'].value,
          :content => parse_text(choice_node, 'content')
        }
      end
      questionnaire.questions << question
    end
    questionnaire.questions.sort_by!{|q| q.position.to_i}
  end
  parse_module(activity_dir, questionnaire)

  questionnaire
end