QUESTIONS_FROM values: 'L' - X questions from every lesson in course 'C' - X questions from every lesson from every chapter in the course In this case questions taken from immediate lessons of all chapters (X per chapter) in the course. In new data model it means, get X questions from every lesson in the course, except 1) immediate lessons-childs of the course and 2) lessons, contains other lessons (because, in old data model chapters doesn't contains questions)
'H' - all questions from the selected chapter (recursive) in the course This case must be ignored, because converter to new data model updates 'H' to 'R', but in case when chapter is not exists updates didn't become. So QUESTIONS_FROM stayed in 'H' value. And it means, that there is no chapter exists with QUESTIONS_FROM_ID, so we can't do work. And we should just ignore, for backward compatibility (so, don't throw an error). 'S' - all questions from the selected lesson (unilesson_id in QUESTIONS_FROM_ID) 'A' - all questions of the course (nothing interesting in QUESTIONS_FROM_ID)
new values: 'R' - all questions from the tree with root at selected lesson (include questions of selected lesson) in the course (unilesson_id in QUESTIONS_FROM_ID)
'H' - all questions from the selected chapter (recursive) in the course This case must be ignored, because converter to new data model updates 'H' to 'R', but in case when chapter is not exists updates didn't become. So QUESTIONS_FROM stayed in 'H' value. And it means, that there is no chapter exists with QUESTIONS_FROM_ID, so we can't do work. And we should just ignore, for backward compatibility (so, don't throw an error).
См. определение в файле attempt.php строка 664