\documentclass{article}
\usepackage{amstext}
\usepackage[designi]{web}
\usepackage{exerquiz}[2019/10/14]

%\previewOn\pmpvOn

% save the original defn of \eq@@EndQuizButtonActions as \eq@@EndQuizButtonActionsSave
\efsave\eq@@EndQuizButtonActions\as\eq@@EndQuizButtonActionsDefSave

\usepackage[ordinary]{thorshammer}

\thQzHeaderL{PWD Quizzes}
\thQzHeaderCQ{Quiz 1}

% save the revised defn of \eq@@EndQuizButtonActions as \eq@@EndQuizButtonActionsThorSave
\efsave\eq@@EndQuizButtonActions\as\eq@@EndQuizButtonActionsThorSave

\renewcommand\eqQuizPointsMsg{%
"\eqptScore\space"+ptScore+" \eqOutOf\space"+nPointTotal}

\let\app\textsf
\let\pkg\textsf
\let\uif\textsf
\let\env\texttt
\let\opt\texttt
\def\cs#1{\texttt{\char`\\#1}}


\execJSOn
\useBeginQuizButton[\CA{Begin}]
\useEndQuizButton[\CA{End}]

% If the students have Acrobat, they can see the pin number
% if they know how; however, if we use a hash string, the actual
% PIN is not retained within document.
\def\PIN{5243} % PIN number, change as desired

% save \CorrBtnActionsJS as \CorrBtnActionsJSSave
\efsave\CorrBtnActionsJS\as\CorrBtnActionsJSSave
\begin{defineJS*}[\makeesc\@]{\CorrBtnActionsPwdJS}
var resp=app.response({
  cQuestion: "Enter the PIN number",
  cTitle: "View Answers",
  bPassword: true
});
var _resp=Collab.hashString(resp);
if (_resp==_PinCode) {
  correctQuiz("@eqBaseName",@thequestionno);
  if (typeof correctSumryTbl == "function")
    correctSumryTbl("@eqBaseName",@thequestionno);
}
\end{defineJS*}

\DeclareQuiz{qz1}

\begin{execJS}{execjs}
this.addScript("Pin Code","var _PinCode = \"" + Collab.hashString("\PIN")+"\"");
\end{execJS}

\begin{document}

\section{Introduction}

\noindent\textbf{Goal:} Make the \uif{Correct} button password
protected.\medskip

\noindent\textbf{Discussion:} This file illustrates the methods
of protecting the \uif{Correct} button with a password. This
file requires \app{Acrobat} to create; while the companion file
(\texttt{quiz-pwd-to-correct-AR.tex}) does not.

If only MC and MS questions are posed, the \pkg{thorshammer}
package is not needed; otherwise, it is needed to support the
other types of questions.

Within \pkg{exerquiz} the command that holds the JavaScript
action of the \uif{Correct} button is \cs{CorrBtnActionsJS}. We
save this macro, and change over to \cs{CorrBtnActionsPwdJS},
defined in the preamble. We use the commands \cs{efsave} and
\cs{efrestore}, defined in \pkg{eforms}, to change the default
action to the password action, and back again. We do the same
thing for the \uif{End Quiz} action. (\pkg{thorshammer}
redefines \cs{eq@@EndQuizButtonActions}, the JavaScript actio of
the \uif{End Quiz} button.)


\newpage

\section{Quiz with PIN to correct}

% require students to answer all questions
\renewcommand\minQuizResp{highThreshold} % 1

For the quiz below, the \uif{Correct} button has an encrypted
password. The password appears in parentheses for the convenience of the casual reader.

% use password version of \CorrButton action
\efrestore\CorrBtnActionsJS\from\CorrBtnActionsPwdJS
\begin{quiz*}{\currQuiz}
Solve each
\begin{questions}
    \item The sum of 1 and 1 is\dots
\begin{answers}{5}
\bChoices
  \Ans0 0\eAns
  \Ans0 1\eAns
  \Ans1 2\eAns
  \Ans0 3\eAns
  \Ans0 4\eAns
\eChoices
\end{answers}
\item $9+8=\RespBoxMath{17}{1}{.0001}{[0,1]}\cgBdry\CorrAnsButton{17}$
\end{questions}
\end{quiz*}\quad\PointsField{\currQuiz}\olBdry\CorrButton{\currQuiz} (PIN: \PIN)\vcgBdry

\AnswerField{\currQuiz}

\newpage

\section{Quiz without PIN to correct}

Now we try to create an ordinary \pkg{exerquiz} quiz without password protection.

% restore \eq@@EndQuizButtonActions from its default defn
\efrestore\eq@@EndQuizButtonActions\from\eq@@EndQuizButtonActionsDefSave
% restore \CorrBtnActionsJS from \CorrBtnActionsJSSave
\efrestore\CorrBtnActionsJS\from\CorrBtnActionsJSSave

\renewcommand\minQuizResp{lowThreshold}

\begin{quiz*}{qz2}
Solve each
\begin{questions}
    \item The sum of 1 and 1 is\dots
\begin{answers}{5}
\bChoices
  \Ans0 0\eAns
  \Ans0 1\eAns
  \Ans1 2\eAns
  \Ans0 3\eAns
  \Ans0 4\eAns
\eChoices
\end{answers}
\item $9+8=\RespBoxMath{17}{1}{.0001}{[0,1]}\cgBdry\CorrAnsButton{17}$
\end{questions}
\end{quiz*}\quad\PointsField{\currQuiz}\olBdry\CorrButton{\currQuiz}\vcgBdry

\AnswerField{\currQuiz}


\newpage

\section{Another quiz with PIN to correct}

It is possible to have a different PIN number for this quiz (multiple PINs in one document), but
I see no need for this.

\DeclareQuiz{qz3}


% restore \eq@@EndQuizButtonActions from \eq@@EndQuizButtonActionsThorSave
\efrestore\eq@@EndQuizButtonActions\from\eq@@EndQuizButtonActionsThorSave
% restore password protection for Correct button
\efrestore\CorrBtnActionsJS\from\CorrBtnActionsPwdJS

% require students to answer all questions
\renewcommand\minQuizResp{highThreshold}

\begin{quiz*}{qz3}
Solve each
\begin{questions}
    \item The sum of 1 and 1 is\dots
\begin{answers}{5}
\bChoices
  \Ans0 0\eAns
  \Ans0 1\eAns
  \Ans1 2\eAns
  \Ans0 3\eAns
  \Ans0 4\eAns
\eChoices
\end{answers}
\item $9+8=\RespBoxMath{17}{1}{.0001}{[0,1]}\cgBdry\CorrAnsButton{17}$
\end{questions}
\end{quiz*}\quad\PointsField{\currQuiz}\olBdry\CorrButton{\currQuiz} (PIN: \PIN)\vcgBdry

\AnswerField{\currQuiz}


\end{document}
