% Requires Acrobat
\documentclass{article}
\usepackage{amstext}
\usepackage[designi]{web}
\usepackage{exerquiz}[2019/10/11]

\efsave\eq@@EndQuizButtonActions\as\eq@@EndQuizButtonActionsDefSave

\usepackage[ordinary]{thorshammer}

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

\efsave\eq@@EndQuizButtonActions\as\eq@@EndQuizButtonActionsThorSave

%\previewOn\pmpvOn

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

\let\app\textsf
\let\pkg\textsf
\let\env\texttt
\let\opt\texttt
\let\uif\textsf

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

% If the students have Acrobat, they can see the pin number
% if they know how.

\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{qz}

\def\PIN{5243} % PIN number, change as desired
\begin{insDLJS}{pin}{Pin Code}
var _PinCode = "02JRVZdRgYgCA-Rtje8VkD";
\end{insDLJS}

\parindent0pt
\parskip6pt

\begin{document}

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

\noindent\textbf{Discussion:}
This demo file uses a \emph{hash string} to encode the password for the instructor to correct
the quiz, it avoids the use of  \app{Adobe Acrobat} by getting the hash string from the
PDF \texttt{get-hash-string}. Copy the hash string generated from \texttt{get-hash-string}
as the value of the JavaScript variable \texttt{\_PinCode} in the \textsf{insDLJS} environment
seen in this source file for this document. Then, compile this document and distribute.

%Delay the correction of this next quiz by expanding the new command
%\verb|\pwdCorrBtnJS|.

\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} 