%
% Need some discussion on workflow
%
% makeindex < aebpro_man.idx > aebpro_man.ind
\RequirePackage[!use=preview,!use=usebw]{spdef}
\documentclass[10pt]{article}
\usepackage[fleqn]{amsmath}
%\usepackage{hyperref}
\usepackage[
    web={centertitlepage,designv,forcolorpaper,latextoc,pro},
    exerquiz,
%    linktoattachments,
    aebxmp
]{aeb_pro}
\usepackage[!showscore]{eq-pin2corr}

%\previewOn\pmpvOn

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

\declPINId{5243}{02JRVZdRgYgCA-Rtje8VkD} % PIN number, hash string
%\classPINVar{_PinCode1}


%\usepackage{booktabs}
%\usepackage{aeb_mlink}
%\usepackage{eq-pin2corr}
%\usepackage{graphicx,array}
%\usepackage{ifthen}
%\usepackage{myriadpro}
%\usepackage{calibri}

\usepackage[altbullet]{lucidbry}

%\usepackage{xbmks}
%\DeclareInitView{layoutmag={navitab:UseOutlines}}

%\xbmksetup{colors={int=red},styles={intbf}}

\addtolength{\marginparwidth}{20pt}

%\previewtrue
%\usepackage{makeidx}
%\makeindex
\usepackage{acroman}
\usepackage[active]{srcltx}

\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}
\makeatletter
\renewcommand*{\thesubsubsection}{\texorpdfstring{$\bullet$}{\textbullet}}
\renewcommand*{\theparagraph}{\texorpdfstring{\protect\P}{\textparagraph}}
\renewcommand*{\thesubparagraph}{\texorpdfstring{\protect\P\protect\P}{\textparagraph\textparagraph}}
\renewcommand{\paragraph}
    {\renewcommand{\@seccntformat}[1]{\theparagraph\space}%
    \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
\renewcommand*\l@paragraph{\@dottedtocline{4}{5.0em}{1em}} %{7.0em}{4.1em}}
\renewcommand{\subparagraph}
    {\renewcommand{\@seccntformat}[1]{\thesubparagraph\space}%
    \@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}{\bfseries}}
\def\dps{$\mbox{$\mathfrak D$\kern-.3em\mbox{$\mathfrak P$}%
   \kern-.6em \hbox{$\mathcal S$}}$}

\newenvironment{aebQuote}
   {\list{}{\leftmargin\amtIndent}%
    \item\relax}{\endlist}
\def\parboxValign{t}
\newcommand{\FmtMP}[2][0pt]{\mbox{}\marginpar{%
    \raisebox{.5\baselineskip+#1}{%
    \expandafter\parbox\expandafter[\parboxValign]%
        {\marginparwidth}{\aebbkFmtMp#2}}}}
\def\aebbkFmtMp{\kern0pt\itshape\small
    \ifusebw\color{gray}\else\color{blue}\fi
    \raggedleft\hspace{0pt}}\newcommand{\BlogArticle}{%
    \makebox[0pt][l]{\hspace{-1pt}\color{blue}\Pisymbol{webd}{254}%
    }\raisebox{.5pt}{\ifusebw\color{black}\else
    \color{red}\fi\ding{045}}}
\def\dps{$\mbox{$\mathfrak D$\kern-.3em\mbox{$\mathfrak P$}%
   \kern-.6em \hbox{$\mathcal S$}}$}

\def\chgCurrLblName#1{\def\@currentlabelname{#1}}
\def\echgCurrLblName#1{\edef\@currentlabelname{#1}}
\let\db\@gobble

%\newenvironment{aebQuote}
%               {\list{}{\leftmargin\amtIndent}%
%                \item\relax}
%               {\endlist}

\makeatother

%\getDimsFromGraphic{graphics/dpsweb}{\dpswebW}{\dpswebH}


%\urlstyle{rm}
\urlstyle{sf}
\let\uif\textsf
\let\app\textsf
\def\psf#1{\textbf{\textsf{#1}}}
%\let\amtIndent\leftmargini
\edef\amtIndent{\the\parindent}

\renewcommand*\descriptionlabel[1]{\hspace\labelsep
    \normalfont #1}

\let\tops\texorpdfstring

\DeclareDocInfo
{
    university={Acro\negthinspace\TeX.Net},
    title={The \textsf{eq-pin2corr} package\tops{\\}{: } Apply PIN security to quizzes},
    author={D. P. Story},
    email={dpstory@acrotex.net},
    subject={Documentation for the eq-pin2corr package from AcroTeX: Apply PIN security to quizzes},
    talksite={\url{www.acrotex.net}},
    version={0.5, 2021/15/06},
    Keywords={AcroTeX, mini-toc},
    copyrightStatus=True,
    copyrightNotice={Copyright (C) \the\year, D. P. Story},
    copyrightInfoURL={http://www.acrotex.net}
}

\def\dps{$\hbox{$\mathfrak D$\kern-.3em\hbox{$\mathfrak P$}%
   \kern-.6em \hbox{$\mathcal S$}}$}

\universityLayout{fontsize=Large}
\titleLayout{fontsize=LARGE}
\authorLayout{fontsize=Large}
\tocLayout{fontsize=Large,color=aeb}
\sectionLayout{indent=-62.5pt,fontsize=large,color=aeb}
\subsectionLayout{indent=-31.25pt,color=aeb}
\subsubsectionLayout{indent=0pt,color=aeb}
\subsubDefaultDing{\tops{$\bullet$}{\textbullet}}

\widestNumber{0.00.}
%\pagestyle{empty}
%\parindent0pt\parskip\medskipamount

\begin{defineJS}{\btnAct}
  var resp=app.response({
    cQuestion: "Enter a PIN number",
    cTitle: "Get Hash String"
  });
  if (resp != null) {
    var f=this.getField("txt");
    f.value=Collab.hashString(resp);
  } 
\end{defineJS}


\frenchspacing

\chngDocObjectTo{\newDO}{doc}
\begin{docassembly}
var titleOfManual="The eq-pin2corr package MANUAL";
var manualfilename="Manual_BG_Print_pin2corr.pdf";
var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown
var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
var doc;
var buildIt=false;
if ( buildIt ) {
    console.println("Creating new " + manualfilename + " file.");
    doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
    var _path=this.path;
    var pos=_path.lastIndexOf("/");
    _path=_path.substring(0,pos)+"/"+manualfilename;
    \docSaveAs\newDO ({ cPath: _path });
    doc.closeDoc();
    doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
    f=doc.getField("ManualTitle");
    f.value=titleOfManual;
    doc.flattenPages();
    \docSaveAs\newDO({ cPath: manualfilename });
    doc.closeDoc();
} else {
    console.println("Using the current "+manualfilename+" file.");
}
var _path=this.path;
var pos=_path.lastIndexOf("/");
_path=_path.substring(0,pos)+"/"+manualfilename;
\addWatermarkFromFile({
    bOnTop:false,
    bOnPrint:false,
    cDIPath:_path
});
\executeSave();
\end{docassembly}

\begin{document}

\maketitle


\selectColors{linkColor=black}
\tableofcontents
\selectColors{linkColor=webgreen}

\def\AcroT{Acro\!\TeX}\def\cAcroT{\textcolor{blue}{\AcroT}}
\def\AcroEB{\AcroT{} eDucation Bundle}\def\cAcroEB{\textcolor{blue}{\AcroEB}}
\def\AcroB{\AcroT{} Bundle}\def\cAcroB{\textcolor{blue}{\AcroB}}
\def\bUrl{http://www.math.uakron.edu/~dpstory}

\hypersetup{linktocpage}

\section{Introduction}

This package is an add-on to the \env{quiz} environment of the \pkg{exerquiz}
package.

\paragraph*{Purpose.} This package adds PIN security to a quiz created by
 the \env{quiz} environment. To correct a quiz, the document consumer must
press the \uif{Correct} button of a quiz and successfully enter the correct
PIN number. For example,

\usePINCorrBtn

\begin{quiz*}{qz1}
Solve each, passing is 100\%.\hfill\llap{\smash{\parbox[t]{145pt}{\leavevmode\llap{\color{red}\ding{042}\enspace}Take the quiz, when finished, press the \uif{Correct} button and enter the PIN number
to correct the quiz.}}}
\begin{questions}
    \item The sum of 1 and 1 is \dots
\begin{answers}{8}
\bChoices
  \Ans0 0\eAns
  \Ans0 1\eAns
  \Ans1 2\eAns
  \Ans0 3\eAns
  \Ans0 4\eAns
\eChoices
\end{answers}
  \item $ \cos(\pi) = \RespBoxMath{-1}{1}{.0001}{[0,1]}\cgBdry[1bp]
\CorrAnsButton{-1} $

\item $\displaystyle\frac{d}{dx}{\sin(x)}=\RespBoxMath{cos(x)}{4}{.0001}{[0,1]}\cgBdry[1bp]
\CorrAnsButton{cos(x)} $
\end{questions}
\end{quiz*}\quad\ScoreField[\rectW{2.25in}]\currQuiz\olBdry\CorrButton{\currQuiz} (PIN: \numPINId)\vcgBdry[6pt]

Answers: \AnswerField\currQuiz\vcgBdry[6pt]

 This package is designed for the educational sector, for instructors who use
 the quizzes from the \pkg{exerquiz} package to assess the
 understanding their students of the course material.

 \paragraph*{PDF Viewers.} Discussion of PDF viewers for the document author and the document consumer.
 \begin{aebQuote}
 \begin{description}
 \item[\textbf{Instructor:}] Any PDF viewer may be used as a PDF
     \emph{previewer}, \app{sumatraPDF}, for instance. To verify the newly
     created quiz is functioning correctly, \app{Adobe Reader DC}
     (\FmtMP{\app{AR}}\app{AR}) or \app{Acrobat DC}
     (\FmtMP{\app{AA}}\app{AA}) \emph{must be used}.
 \item[\textbf{Document consumers (students):}] The \pkg{exerquiz} and
     \pkg{eq-pin2tocorr} extensively use JavaScript to perform many
     background tasks. For the student to have any success in this
     workflow, he/she must use \app{Adobe Reader DC}(\FmtMP{\app{AR}}\app{AR}).
 \end{description}
 \end{aebQuote}
 \paragraph*{Workflow.} The package is designed for the following workflow:\begingroup\tightsettings
 \begin{enumerate}
     \item The instructor creates\FmtMP{create quiz} the quiz using the
         \pkg{exerquiz} and \pkg{eq-pin2corr} packages.
     \item The instructor delivers\FmtMP{deliver quiz} the ``PDF quiz'' to
         each student. (System drive or email)
     \item The student takes\FmtMP{take quiz} the quiz. The student can
         press the \uif{Correct} but, unless s/he knows the PIN, the quiz
         is not marked up.
     \item The student saves\FmtMP{save quiz} the PDF quiz in \app{Adobe
         Reader DC}.
     \item The student returns\FmtMP{return quiz} the PDF to the
         instructor. (System drive or email)
     \item The instructor opens the returned PDF quiz in AA/AR and
         presses\FmtMP{correct quiz} the \uif{Correct} button to mark up
         the quiz. The instructor \emph{saves the quiz}. The instructor
         records the grade of the student.
     \item The instructor returns\FmtMP{returns quiz} the PDF, at some
         point, to the student.
     \item Both instructor and student happily\FmtMP{happy people} go on
         with their lives.
     \end{enumerate}
 The implementation details are left to the instructor.
\endgroup

\paragraph*{Document creation.} Any of the PDF creators current to the
{\LaTeX} world can be used: (1) \app{pdflatex}, (2) \app{lualatex}, (3)
\app{xelatex}, and my old friend, (4) \app{dvips}/\app{Distiller} (or
\app{dvips}/\app{ps2pdf}). In the latter case (4), \app{Acrobat} is required
to import Document JavaScripts.

\section{The preamble}

The minimal preamble for documents that use the \pkg{eq-pin2corr} package.
\bVerb\def\1{\rlap{\hskip150pt\%\textsf{ or some other class}}}%
\def\2{\rlap{\hskip150pt\%\textsf{ recommended but not required}}}%
\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
!1\documentclass{article}
!2\usepackage[!ameta(options)]{web}
\usepackage[!ameta(options)]{exerquiz}!textbf([2021/02/17])
\usepackage[!ameta(options)]{eq-pin2corr}
...
\declPINId{!ameta(pin-num)}{!ameta(hash-string)}
\classPINVar{!ameta(class-pin-var)}
...
\begin{document}
\end{Verbatim}
\eVerb A recent version of \pkg{exerquiz} (2021/02/17 or later) is required;
\pkg{eq-pin2corr} brings in the \pkg{eq-save} package (2021/02/17 or later).

\section{Package options}

There are two options for this package: \opt{showscore} and \opt{!showscore}.
If you took the test on page~3, you will have noticed that when \uif{End
Quiz} control is pressed the phase \textsf{"Success! Now save and send to the
instructor"} appears in the \cs{ScoreField} or the \cs{PointsField}, this is
the default behavior. Passing \FmtMP{\opt{showscore}}\opt{showscore} in the
optional argument list of \pkg{eq-key2corr} causes the actual score to appear
in the same box (eg, \texttt{Score: 2 out of  3}), which is historically what
always appears in these boxes. The other option \FmtMP{\opt{!showscore}}\opt{!showscore} is a
convenience option to aid in switching from one option to the other without
too much cut and paste. The default definition of the text string that
appears is,
\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small]
\flJSStr[noquotes]{\SaveAndSendMsg}{Success! %
Now save and send to the instructor}
\end{Verbatim}
Refer to the \texttt{eformsman.pdf} for a discussion of \cs{flJSStr}.

\paragraph*{Local controls.} The two options can be turned off and on locally with \FmtMP{\cs{showScoreOff}}\cs{showScoreOff} and
\FmtMP{\cs{showScoreOn}}\cs{showScoreOn} commands.

\section{Setting the pin-hash values}

In the preamble, as indicated above, are two commands, the first is required,
the second is optional.
\bVerb\takeMeasure{\string\declPINId\darg{\ameta{pin-num}}\darg{\ameta{hash-string}}}%
%\setlength{\dimen0}{\wd\webtempboxi+2\fboxsep+2\fboxrule}%
\def\1{\rlap{\sffamily\hskip\linewidth(optional)}}
\begin{dCmd}[commandchars=!()]{\bxSize}
\declPINId{!ameta(pin-num)}{!ameta(hash-string)}
!1\classPINVar{!ameta(class-pin-var)}
\end{dCmd}
\eVerb It is through the \cs{declPINId} command that the PIN security is set up.

\paragraph*{\cs{declPINId\darg{\ameta{pin-num}}\darg{\ameta{hash-string}}}} The \ameta{pin-num} is a number, perhaps four digits,
that is used to pass through the security of the \uif{Correct} button.\footnote{The \ameta{pin-num} does not have to be a number,
it can be any password (passcode) that is easy to remember. I prefer a four digit number.} Once you decide on the
PIN number, you need to generate the corresponding \emph{hash-string}. The hash-string is obtained from the demo file
\texttt{get-hash-string.pdf}, the contents of that files is reproduced below.
\begin{aebQuote}
\pushButton[\CA{Push}\AAmouseup{\btnAct}]{btn}{}{11bp}\olBdry
\textField[\textSize{8}]{txt}{2in}{11bp}\olBdry
\pushButton[\CA{Reset}\AAmouseup{this.resetForm();}]{reset}{}{11bp}
\end{aebQuote}
Press the button labeled \uif{Push} and enter your PIN number into the dialog
box (enter, for example, \texttt{\numPINId}), then press \uif{OK}, the
corresponding hash-string appears in the text field, \texttt{\hashPINId}.
Copy the PIN number (\texttt{\numPINId}) into the first argument of
\cs{declPINId} and copy the hash-string (\texttt{\hashPINId}) from the text
field into the second argument, like so,
\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
\declPINId{!numPINId}{!hashPINId}
\end{Verbatim}
The above is placed in the preamble of the document.

When the user enters a PIN number (right or wrong), it is converted to a
hash-string and compared with the hash string of the correct PIN number; if
they match, then the quiz is corrected. It is important to note that the PIN
number \emph{does not appear anywhere} in the document, so it cannot be
discovered. Knowledge of the correct hash-string does not help. Of course
both PIN number and hash string appear in the source file of the document.

\paragraph*{\cs{classPINVar\darg{\ameta{class-pin-var}}}} From the
instructor's viewpoint, it takes a lot of effort to enter the PIN number for
every quiz that is submitted (it may be in the hundreds). There is a way of
avoiding the requirement of entering the PIN number, and that is through the
use of the \cs{classPINVar} command. This method will work if you have
\app{Adobe Acrobat} or if you only have \app{Adobe Reader DC}. The steps for
doing this are as follows:
\begin{enumerate}
    \item Decide on a class PIN variable name, it can be a generic one, or one specialize to your class,
    for example, \cs{classPINVar\darg{Calc2Sprg21}}, then declare it in the preamble:
\begin{Verbatim}[xleftmargin=\amtIndent]
\classPINVar{Calc2Spr21}
\end{Verbatim}
The value of the argument must be a valid JavaScript name.
    \item Go to the user config.js file of AA/AR and edit that file by
        including the following line in it,
\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()]
var Calc2Spr21 = "!hashPINId";
\end{Verbatim}
where the hash string used here is the same one corresponding to the PIN
number for the document (\texttt{\numPINId} in our example).
\end{enumerate}
\app{AA/AR} only reads \texttt{config.js} one time when it opens, so
\texttt{Calc2Spr21} will not be known until the next time \app{AA/AR} is opened.
The location of the \texttt{config.js} file is described in general in the
file \texttt{\href{install_jsfiles.pdf}{install\_jsfiles.pdf}}, found in the \texttt{doc} folder of this
distribution.

Once the above line is placed in the \texttt{config.js} file, the instructor does not
enter the PIN number, pressing \uif{Correct} immediately corrects the quiz.

\section{Turning the PIN security feature on and off}

The security PIN feature can be turned on and off through the following two
commands.
\bVerb\takeMeasure{\string\restoreCorrBtn}%
\def\1{\leavevmode\rlap{\sffamily\hskip\linewidth(Turn on PIN security)}}%
\def\2{\leavevmode\rlap{\sffamily\hskip\linewidth(Turn off PIN security)}}%
\begin{dCmd}[commandchars=!()]{\bxSize}
!1\usePINCorrBtn
!2\restoreCorrBtn
\end{dCmd}
\eVerb These can placed anywhere outside a \env{quiz} environment. The
commands take effect beginning at the next quiz in the document.

\medbreak\noindent
Now, I really must get back to retirement.\enspace\dps


\end{document}
