MyUCDavis Quiz Builder Question Pool Export

Summary

With an import question pool feature pending in SmartSite's Tests & Quizzes (Samigo), it is desirable to be able to export instructor's questions from MyUCDavis Quiz Builder in a Saimgo-compliant format to initiate the migration path.

Quiz Builder stores all questions in a single question pool, but gives the instructor an option of organizing subsets of these questions in a collection. In Tests & Quizzes, there is no primary question pool and users are free to organize their questions into pools and subpools as desired. For migration purposes, collections and subpools represent the same concept in two different systems.

Some instructors do not use Quiz Builder collections, so they will need the ability to export their entire question pool. Other instructors use collections heavily and may prefer to export their questions in these smaller, pre-organized sets. Therefore, both Export Question Pool and Export Collection functions will be developed in Quiz Builder to allow instructors to export their questions in either manner.

Phases

Design Specification

The goals for the Quiz Builder question pool export design are as follows:

1. Minimal code changes to Quiz Builder. Since new development is no longer being promoted for faculty, the simplest functionality to achieve the result is desirable.
2. Simple export functionality consistent with the existing export quiz function.
3. The export process must document gains/losses from one system to the other.
4. The export format must be consistent with the current Samigo import requirements.

Faculty who use the existing Edit/Browse Questions and Edit/Browse Collections features are already familiar with Quiz Builder. It's desirable to limit changes to make the new exports easy for faculty to access and use. For faculty who are migrating their Quiz Builder content, a consistent UI and functionality for quiz, question pool or collection exports will minimize the amount of learning required to use these functions.

The export process will inform faculty of any content that will not be exported and question differences between Quiz Builder and Tests & Quizzes. The export process will be as close to a one-button process as possible. Finally, the content must be exported in a format that is readily consumable by Tests & Quizzes, i.e., that requires no modifications by faculty for the import to succeed.

GUI Review: Export Question Pool

The existing default screen for Edit/Browse Questions is the Browse Questions screen which allows the user to select questions from their pool list.

I propose to add a link entitled 'Export Question Pool' beneath the 'Edit Question' and 'Copy Question' under the list of questions. When the user selects this link, a new window will open, similar to the export quiz window. The screen will be titled 'Question Pool Export for username' where the user's first and last name are in place of username. Download instructions appear next, followed by detailed information under Question Pool Export Notes. Details listed will include any media associated with the questions, listing question types that will not be translated (i.e., calculated questions) and how the questions differ between Quiz Builder and Tests & Quizzes.

Pressing the Download button will generate a Samigo-compliant xml file which will be exported to the user's local machine. A separate download in the media listing under Question Pool Export Notes will download a ZIP file with any media files associated with the pool questions.

GUI Review: Export Collection

The existing default screen for Edit/Browse Collections is the New Collection screen which allows the user to create a new collection from their list of questions. After selecting an existing collection, the screen changes to show the name of the collection and to allow additional links Delete Collection and/or Add Collection to Quiz.

I propose to add a link entitled 'Export Collection' to the list of links for an existing collection. When the user selects this link, a new window will open, similar to the export quiz window. The new window will be entitled 'Collection Export: collectionname' where the collection name is displayed in place of collectionname. Download instructions will appear next, followed by detailed information under Collection Export Notes. Details listed will include any media associated with the questions, listing question types that will not be translated (i.e., calculated questions) and how the questions differ between Quiz Builder and Samigo.

Pressing the Download button will generate a Samigo-compliant xml file which will be exported to the user's local machine. A separate download in the media listing under Collection Export Notes will download a ZIP file with any media files associated with the pool questions.

Code Functionality

Currently, the MyUCDavis cms runs on ColdFusion MX 6 with an Oracle database. New code for exporting question pools will use the existing environment and will include ColdFusion code, CF components, and JavaScript. The export file generated via download will be Samigo-compliant XML.

Code modifications to 5 existing files in the directory 'login/CourseManagement/quiz/' is required. No new files are anticipated at this time.

File Name

Proposed Addition/Modification

qz_win_ques_list.cfm

Added an Export Question Pool link to this page. Limited to code where mode=question, since this same list box is used for questions and quizzes under various pages. Code modifications include adding a link with JavaScript function exportPool() to open a new window as "qz_quiz_exportxml.cfm?quizID=0&export=questionPool" where no data is passed through the url.

qz_col_title.cfm

Added the Export Collection link. Limited to code for editing an existing collection. Code modifications include adding a link with JavaScript function export_collection() to open a new window as "qz_quiz_exportxml.cfm?quizID=0&export=collection&collectionid=#collectionid#" so that the collection id is passed via the url.

qz_quiz_properties.cfm

Modified Export Quiz url to add export="quiz"

qz_quiz_exportxml.cfm

Modified export instructions on this display page to reflect whether the export is a quiz, question pool or collection. Added total number of questions, Download Pool button, and output for media files.

qz_quiz_exportxml.cfc

Separated out section functions from question functions. getSectionArray populates the section array from quiz data while setSectionArray populates the section array with sectionid=0 and name="Default". The section array is then fed into setSectionData for attaching items and their parameters for delivery to the xml file generation page. Added several functions specific to qpools and collections plus a media function. Modified certain functions where query output passed into a "where variable in ()" clause might exceed 1000 records due to Oracle limits.

qz_quiz_exportxmldoc.cfm

Modified file by adding logic based on quizid and export url values to determine which function calls (quiz, question pool, or collection) will be made. Modified the xml file generation to allow question pool or collection data to be delivered in the same downloadable xml format.

qz_quiz_exportfiles.cfm

The export media code is being developed at the same time and is an active link on qz_quiz_exportxml.cfm, so it needs to be released concurrently, even though the test plan will be separate.

Useful Information

After struggling with multiple non-standard ascii issues, I discovered this ColdFusion code for dealing with the issue at http://www.octadyne.com/html_entity_acsii_table.cfm. Wrapping this function around user generated text solved the invalid xml issues I was running into.

<cfscript>
/**
 * Coverts special characters to character entities, making a string safe for display in HTML.
 * 
 * @param string 	 String to format. (Required)
 * @return Returns a string. 
 * @author Gyrus (gyrus@norlonto.net) 
 * @version 1, April 30, 2003 
 */
function HTMLSafe(string)
{
	var badChars="#chr(128)#,#chr(130)#,#chr(131)#,#chr(132)#,#chr(133)#,#chr(134)#,#chr(135)#,
#chr(136)#,#chr(137)#,#chr(138)#,#chr(139)#,#chr(140)#,#chr(142)#,#chr(145)#,#chr(146)#,#chr(147)#,
#chr(148)#,#chr(149)#,#chr(150)#,#chr(151)#,#chr(152)#,#chr(153)#,#chr(154)#,#chr(155)#,#chr(156)#,
#chr(158)#,#chr(159)#,#chr(161)#,#chr(162)#,#chr(163)#,#chr(164)#,#chr(165)#,#chr(166)#,#chr(167)#,
#chr(168)#,#chr(169)#,#chr(170)#,#chr(171)#,#chr(172)#,#chr(173)#,#chr(174)#,#chr(175)#,#chr(176)#,
#chr(177)#,#chr(178)#,#chr(179)#,#chr(180)#,#chr(181)#,#chr(182)#,#chr(183)#,#chr(184)#,#chr(185)#,
#chr(186)#,#chr(187)#,#chr(188)#,#chr(189)#,#chr(190)#,#chr(191)#,#chr(192)#,#chr(193)#,#chr(194)#,
#chr(195)#,#chr(196)#,#chr(197)#,#chr(198)#,#chr(199)#,#chr(200)#,#chr(201)#,#chr(202)#,#chr(203)#,
#chr(204)#,#chr(205)#,#chr(206)#,#chr(207)#,#chr(208)#,#chr(209)#,#chr(210)#,#chr(211)#,#chr(212)#,
#chr(213)#,#chr(214)#,#chr(215)#,#chr(216)#,#chr(217)#,#chr(218)#,#chr(219)#,#chr(220)#,#chr(221)#,
#chr(222)#,#chr(223)#,#chr(224)#,#chr(225)#,#chr(226)#,#chr(227)#,#chr(228)#,#chr(229)#,#chr(230)#,
#chr(231)#,#chr(232)#,#chr(233)#,#chr(234)#,#chr(235)#,#chr(236)#,#chr(237)#,#chr(238)#,#chr(239)#,
#chr(240)#,#chr(241)#,#chr(242)#,#chr(243)#,#chr(244)#,#chr(245)#,#chr(246)#,#chr(247)#,#chr(248)#,
#chr(249)#,#chr(250)#,#chr(251)#,#chr(252)#,#chr(253)#,#chr(254)#,#chr(255)#";

        var goodChars="&euro;,&sbquo;,&fnof;,&bdquo;,&hellip;,&dagger;,&Dagger;,&circ;,&permil;,
&Scaron;,&lsaquo;,&OElig;,&##381;,&lsquo;,&rsquo;,&ldquo;,&rdquo;,&bull;,&ndash;,&mdash;,&tilde;
,&trade;,&scaron;,&rsaquo;,&oelig;,&##382;,&##376;,&iexcl;,&cent;,&pound;,&curren;,&yen;,&brvbar;
,&sect;,&uml;,&copy;,&ordf;,&laquo;,&not;,&shy;,&reg;,&macr;,&deg;,&plusmn;,&sup2;,&sup3;,&acute;
,&micro;,&para;,&middot;,&cedil;,&sup1;,&ordm;,&raquo;,&frac14;,&frac12;,&frac34;,&iquest;,&Agrave;,
&Aacute;,&Acirc;,&Atilde;,&Auml;,&Aring;,&AElig;,&Ccedil;,&Egrave;,&Eacute;,&Ecirc;,&Euml;,&Igrave;,
&Iacute;,&Icirc;,&Iuml;,&ETH;,&Ntilde;,&Ograve;,&Oacute;,&Ocirc;,&Otilde;,&Ouml;,&times;,&Oslash;,
&Ugrave;,&Uacute;,&Ucirc;,&Uuml;,&Yacute;,&THORN;,&szlig;,&agrave;,&aacute;,&acirc;,&atilde;,&auml;,
&aring;,&aelig;,&ccedil;,&egrave;,&eacute;,&ecirc;,&euml;,&igrave;,&iacute;,&icirc;,&iuml;,&eth;,
&ntilde;,&ograve;,&oacute;,&ocirc;,&otilde;,&ouml;,&divide;,&oslash;,&ugrave;,&uacute;,&ucirc;,
&uuml;,&yacute;,&thorn;,&yuml;";
	
	// if you like to go number route then comment the above goodChars and uncomment the following
	//var goodChars="&##8364;,&##8218;,&##402;,&##8222;,&##8230;,&##8224;,&##8225;,&##710;,&##8240;,
&##352;,&##8249;,&##338;,&##381;,&##8216;,&##8217;,&##8220;,&##8221;,&##8226;,&##8211;,&##8212;,&##732;,
&##8482;,&##353;,&##8250;,&##339;,&##382;,&##376;,&##161;,&##162;,&##163;,&##164;,&##165;,&##166;,&##167;,
&##168;,&##169;,&##170;,&##171;,&##172;,&##173;,&##174;,&##175;,&##176;,&##177;,&##178;,&##179;,&##180;,
&##181;,&##182;,&##183;,&##184;,&##185;,&##186;,&##187;,&##188;,&##189;,&##190;,&##191;,&##192;,&##193;,
&##194;,&##195;,&##196;,&##197;,&##198;,&##199;,&##200;,&##201;,&##202;,&##203;,&##204;,&##205;,&##206;,
&##207;,&##208;,&##209;,&##210;,&##211;,&##212;,&##213;,&##214;,&##215;,&##216;,&##217;,&##218;,&##219;,
&##220;,&##221;,&##222;,&##223;,&##224;,&##225;,&##226;,&##227;,&##228;,&##229;,&##230;,&##231;,&##232;,
&##233;,&##234;,&##235;,&##236;,&##237;,&##238;,&##239;,&##240;,&##241;,&##242;,&##243;,&##244;,&##245;,
&##246;,&##247;,&##248;,&##249;,&##250;,&##251;,&##252;,&##253;,&##254;,&##255;";


	// Return immediately if blank string
	if (NOT Len(Trim(string))) return string;
	
	// Do replacing
	return ReplaceList(string, badChars, goodChars);
}
</cfscript>

Code Review

Brian Donnelly, or another qualified member of the MyUCDavis team, will perform code review on these file changes.

QA Testing

A Question Pool Export Test Plan will be created to allow testers to step through the expected new feature behaviour and function results. Export question pools will be tested as a stand-alone feature and the same test will be used when all parts of the MyUCDavis-Samigo quiz/question pool migration features are accessible. The separate tests for each process encompass the test plan.

Release

The code migration path after code review and QA process are completed follow the existing MyUCDavis code release. Release of this code set may be delayed to coincide with or follow the release of import question pool code in SmartSite.