# ---------------------------------------------------------------------------
#     CVALIB.PL
#
#      Ver: 8_4_8
# ---------------------------------------------------------------------------
# SSI Web - Web Surveying System
# Copyright Sawtooth Software, Inc. 1998-2015. All rights reserved.
# Orem, UT  USA  (801) 477-4700
#
# Any modification of this script will be considered violation of
# copyright (with the exception of the first line which can be
# modified to reflect the correct path to the Perl interpreter)
#
# Any use of this script or its code for purposes outside of
# the systems created by Sawtooth Software is prohibited.
# ---------------------------------------------------------------------------
 use strict; package cvalib8_4_8; our @ISA = qw(questionlib8_4_8); sub new { my ($__gka) = @_; $__gka->{'_bmc'} = "cva"; bless($__gka); return $__gka; } sub _bls { my ($__gke) = @_; $__gke->SUPER::_bls(); my $__gkb = $authlib8_4_8::_bzi{"hid_respnum"}; my $__gkc = $__gke->{'_bkt'}; my $__gkd = $__gke->{'_bgt'}; my ($__gkf, $__gkg, $__gkh) = _cgt($__gkc, $__gkb, $__gkd); $__gkc->{'_chk'} = $__gkf; $__gkc->{'_chl'} = $__gkg; $__gkc->{'_chm'} = $__gkh; _cia($__gkc, $__gkd, $__gkg); } sub _blt { my ($__gkm) = @_; my $__gki = ""; my $__gkj = ""; my $__gkk = $__gkm->{'_bkt'}; if (exists $__gkk->{'_vm'}) { if (exists $__gkk->{'_vm'}->{'_bfu'}) { my $__gkl = $__gkk->{'_vm'}->{'_bfu'}; if (exists $__gkl->{'_bfw'}) { if ($__gkl->{'_bfw'} eq "left - right") { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .left_concept {text-align: left;}\n"; $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .right_concept {text-align: right;}\n"; } } } $__gkj = ciwlib8_4_8::_bkb($__gkk->{'_vm'}, 0, 0); if ($__gkj) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .level_text_cell {" . $__gkj . "}\n"; } } if (exists $__gkk->{'_bbw'}) { $__gkj = ciwlib8_4_8::_bkb($__gkk->{'_bbw'}, 0, 0); if ($__gkj) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .row_label_cell {" . $__gkj . "}\n"; } } if (exists $__gkk->{'_bef'}) { if (exists $__gkk->{'_bef'}->{'_beg'}) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .alt_color1 {background-color: #" . $__gkk->{'_bef'}->{'_beg'} . ";}\n"; } if (exists $__gkk->{'_bef'}->{'_beh'}) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .alt_color2 {background-color: #" . $__gkk->{'_bef'}->{'_beh'} . ";}\n"; } } if (exists $__gkk->{'_bdk'}) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .inner_table .level_text_cell {border: " . $__gkk->{'_bdk'} . "px solid #000000;}\n"; } if (exists $__gkk->{'_bdl'}) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .inner_table .level_text_cell {padding: " . $__gkk->{'_bdl'} . "px;}\n"; } if (exists $__gkk->{'_bam'}) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .inner_table {" . ciwlib8_4_8::_bkc($__gkk->{'_bam'}) . "}\n"; } if (exists $__gkk->{'_wa'}) { $__gkj = ciwlib8_4_8::_bkb($__gkk->{'_wa'}, 0, 0); if ($__gkj) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .or_header_cell {" . $__gkj . "}\n"; } } if (exists $__gkk->{'_vq'}) { $__gkj = ciwlib8_4_8::_bkb($__gkk->{'_vq'}, 0, 0); if ($__gkj) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .anchor_text_cell {" . $__gkj . "}\n"; } } if (exists $__gkk->{'_uu'}) { if (exists $__gkk->{'_uu'}->{'_bfw'}) { $__gki .= "\n#" . $__gkm->{'_bgt'} . "_div .input_row_cell {text-align:" . $__gkk->{'_uu'}->{'_bfw'} . ";}\n"; } } return $__gki; } sub _bmf { my ($__glq, $__glr, $__gls, $__glt, $__glu) = @_; my $__gkn = $__glq->{'_bkt'}; my $__gko = $__glq->{'_bgt'}; my $__gkp = 0; my $__gkq = 0; my @__gkr = (); my $__gks = 1; my $__gkt = 0; my $__gku = 0; my $__gkv = 0; my $__gkw = ""; if (exists $__gkn->{'_bbw'}) { $__gkq = $__gkn->{'_bbw'}; if (exists $__gkn->{'_bdj'}) { $__gku = $__gkn->{'_bdj'}; } else { $__gku = 30; } } my ($__glv, $__glw, $__glx) = _cgt($__gkn, $__gls, $__gko); $__gkv = @{$__glv->[$__glx]->{'_chq'}}; if ($__gkq) { my $__gkx = @{$__glv->[$__glx]->{'_chq'}}; my $__gky = ""; my $__gkz = 0; my $__gla = 0; my $__glb = 0; if (exists $__gkn->{'_ara'}) { if (exists($__gkn->{'_ara'}->{'_wu'})) { $__gla = authlib8_4_8::_bsp($__gkn->{'_ara'}->{'_wu'}); } if (exists($__gkn->{'_ara'}->{'_wv'})) { $__gkz = authlib8_4_8::_bsp($__gkn->{'_ara'}->{'_wv'}); } } for ($__gkp = 0; $__gkp < $__gkx; $__gkp++) { $__gky = ""; $__glb = $__glv->[$__glx]->{'_chq'}->[$__gkp]->[0]; if ($__glb eq "C-T") { if ($__gla != 0 && @{$__gla}) { $__gky = shift @{$__gla}; } } elsif ($__glb eq "C-B") { if ($__gkz != 0 && @{$__gkz}) { $__gky = shift @{$__gkz}; } } else { if ($__glb =~ m/^C-(\d+)/i) { $__glb = $1; } $__gky = $__gkn->{'_asc'}->[$__glb]->{'_bgt'}; } push @__gkr, $__gky; } } my $__glc = 0; if (exists $__gkn->{'_uu'}) { $__glc = 1; } my $__gld = 10; my $__gle = 100; if ($__gku) { $__gle -= $__gku; } if (!$__glc) { if (exists($__gkn->{'_wa'})) { $__gle -= $__gld; } $__gle = int($__gle / 2); } my $__glf = "alt_color1"; my $__glg = "alt_color2"; if ($__glu == 0) { $__glf = "alt_color2"; $__glg = "alt_color1"; } $__gkw .= "<table class=\"inner_table"; if (exists $__gkn->{'_uu'}) { $__gkw .= " single_concept"; } $__gkw .= "\" width=\"100%\""; if ($__gkn->{'_bal'}) { $__gkw .= " style=\"width: " . $__gkn->{'_bal'} . "px\""; } $__gkw .= ">"; for ($__gkp = 0; $__gkp < $__gkv; $__gkp++) { $__gkw .= "<tr>"; if ($__gkq) { $__gkw .= "<td class=\"row_label_cell\" width=\"" . $__gku . "%\">\n"; $__gkw .= "<div class=\"label_text\">\n"; $__gkw .= $__gkr[$__gkp]; $__gkw .= "</div>\n"; $__gkw .= "</td>\n"; } $__gkw .= "<td class=\"level_text_cell left_concept " . $__glf . "\" width=\"" . $__gle . "%\">\n"; $__gkw .= "<div class=\"level_text\">\n"; $__gkw .= _chy($__gkn, $__glv, 0, $__gkp); $__gkw .= "</div></td>"; if (!$__glc) { if (($__gkp == 0) && (exists($__gkn->{'_wa'}))) { $__gkw .= "<td class=\"or_header_cell\" rowspan=\"" . $__gkv . "\" width=\"" . $__gld . "%\">"; $__gkw .= "<div class=\"or_text\">\n"; $__gkw .= $__gkn->{'_wa'}->{'_bft'}; $__gkw .= "</div></td>"; } $__gkw .= "<td class=\"level_text_cell right_concept " . $__glg . "\" width=\"" . $__gle . "%\">\n"; $__gkw .= "<div class=\"level_text\">\n"; $__gkw .= _chy($__gkn, $__glv, 1, $__gkp); $__gkw .= "</div></td>"; } $__gkw .= "</tr>"; } $__gkw .= "<tr>"; if ($__gkq) { $__gkw .= "<td>&nbsp;</td>"; } my $__glh = 0; if (!$__glc) { $__glh = 2; if (exists($__gkn->{'_wa'})) { $__glh++; } } $__gkw .= "<td class=\"input_row_cell\" "; if ($__glh > 1) { $__gkw .= " colspan=\"" . $__glh . "\""; } $__gkw .= ">"; if (exists $__gkn->{'_vq'}) { my $__gli = @{$__gkn->{'_vq'}->{'_vr'}}; $__gkt = $__gli; my $__glj = 100; $__gkw .= "<table class=\"input_table\" width=\"" . $__glj . "%\">"; my $__glk = 0; if ($__gli > 0) { $__glk = int($__glj / $__gli); } $__gkw .= "<tr>"; for ($__gkp = 0; $__gkp < $__gli; $__gkp++) { $__gkw .= "<td class=\"input_cell clickable\" width=\"" . $__glk . "%\">\n"; $__gkw .= ciwlib8_4_8::_bkd($__gko, $__gkp + 1, 1, $__gkn); $__gkw .= "</td>"; } $__gkw .= "</tr>"; $__gkw .= "<tr>"; for ($__gkp = 0; $__gkp < $__gli; $__gkp++) { $__gkw .= "<td class=\"anchor_text_cell\""; if($__gkn->{'_vq'}->{'_bfw'}->[$__gkp] ne "") { $__gkw .= " style=\"text-align: " . $__gkn->{'_vq'}->{'_bfw'}->[$__gkp] . "\""; } $__gkw .= "><div class=\"anchor_text\">\n"; $__gkw .= $__gkn->{'_vq'}->{'_vr'}->[$__gkp]; $__gkw .= "</div></td>"; } $__gkw .= "</tr>"; $__gkw .= "</table>"; } else { if (exists $__gkn->{'_uu'}) { my $__gll = $__gkn->{'_uu'}; if ($__gll->{'_bgu'} eq "numeric") { if (exists $__gll->{'_bgp'}) { $__gks = $__gll->{'_bgp'}; } if (exists $__gll->{'_aop'}) { $__gkt = $__gll->{'_aop'}; } my $__glm = ""; my $__gln = "left"; if (exists $__gll->{'_uz'}) { $__glm = $__gll->{'_uz'}; if (exists $__gll->{'_abe'}) { $__gln = $__gll->{'_abe'}; } } my $__glo = length(authlib8_4_8::_bpy($__gks)); my $__glp = length(authlib8_4_8::_bpy($__gkt)); if ($__glp > $__glo) { $__glo = $__glp; } if ($__glm && $__gln eq "left") { $__gkw .= $__glm . " "; } $__gkw .= "\n<input type=\"tel\" class=\"numeric_input\" name=\"" . $__gko . "\""; if (exists $__gkn->{'_bku'}) { $__gkw .= " value=\"" . $__gkn->{'_bku'}->{$__gko} . "\""; } elsif ($ciwlib8_4_8::_bkn) { $__gkw .= " value=\"" . $authlib8_4_8::_bzi{$__gko} . "\""; } $__gkw .= " size=\"" . $__glo . "\" id=\"" . $__gko . "_input\"> \n"; if ($__glm && $__gln eq "right") { $__gkw .= $__glm; } } } } $__gkw .= "</td></tr>"; $__gkw .= "</table>"; if ($authlib8_4_8::_byb) { $__gkw .= "<!--LoadTestMode: <question><name>$__gko</name><type>cva</type>"; if (exists $__gkn->{'_uu'}) { my $__gll = $__gkn->{'_uu'}; $__gkw .= "<subtype>single</subtype>"; if ($__gll->{'_bgu'} eq "numeric") { $__gkw .= "<inputtype>numeric</inputtype>"; } else { $__gkw .= "<inputtype>radio</inputtype>"; } } else { $__gkw .= "<subtype>pairwise</subtype>"; } $__gkw .= "<min>$__gks</min><max>$__gkt</max></question>-->\n"; } return $__gkw; } sub _bmg { my($__gmb, $__gmc, $__gmd, $__gme) = @_; my $__gly = $__gmb->{'_bgt'}; my $__glz = $__gmb->{'_bkt'}; my $__gma = ""; if (exists $__glz->{'_vq'}) { $__gma = "SSI_RadCheck(\"" . $__gly . "\",\"" . $__gly . "\",\""; if (exists $__glz->{'_bds'}) { $__gma .= $__glz->{'_bds'}; } $__gma .= "\"," . $__gme . ", true)"; push @{$__gmc}, ($__gma); $__gmd->{'_bli'} = 1; } elsif (exists $__glz->{'_uu'}) { if ($__glz->{'_uu'}->{'_bgu'} eq "numeric") { $__gma = "SSI_NumCheck(\"" . $__gly . "\",\"" . $__gly . "\",\"" . ciwlib8_4_8::_bjo($__glz->{'_bds'}) . "\", " . $__gme; $__gma .= ", true, "; authlib8_4_8::_btm($__glz); $__gma .= $__glz->{'_uu'}->{'_bgp'} . ", " . $__glz->{'_uu'}->{'_aop'} . ", \"\""; $__gma .= ", false)"; push @{$__gmc}, ($__gma); $__gmd->{'_blk'} = 1; } } } sub _chy { my($__gmi, $__gmj, $__gmk, $__gml) = @_; my $__gmf = $__gmj->[$__gmk]->{'_chq'}->[$__gml]->[0]; my $__gmg = $__gmj->[$__gmk]->{'_chq'}->[$__gml]->[1]; my $__gmh = ""; if ($__gmf =~ m/^C-/i) { $__gmh = $__gmg; } else { if ($__gmg ne "") { $__gmh = $__gmi->{'_asc'}->[$__gmf]->{'_bca'}->[$__gmg]; } } if ($__gmh eq "") { $__gmh = "&nbsp;"; } return $__gmh; } sub _cgt { my ($__goq, $__gor, $__gos) = @_; my $__gmm = ""; my $__gmn = 0; my $__gmo = 0; my $__gmp = 0; my $__gmq = 0; my $__gmr = 0; my @__gms = (); my @__gmt = (); my $__gmu = ""; my $__gmv = 0; my $__gmw = 0; my $__gmx = $authlib8_4_8::_bwv{'_cba'}; my $__gmy = 0; my $__gmz = 0; my $__gna = 0; my $__gnb = 0; my $__gnc = 0; my $__gnd = 0; my $__gne = 0; my $__gnf = 0; my $__gng = 0; if($__gos =~ m/^(.*?)_(\d+)/i) { $__gmp = int($2); } my $__gnh = $__gmx . $authlib8_4_8::_byz . "_CVA" . $__goq->{'_ww'} . "_" . $__goq->{'_wx'} . ".cgi"; my ($__got, $__gou) = authlib8_4_8::_bon($__gnh, "read", 1, 1); binmode $__got; if (((-s $__gnh) != $__goq->{'_of'}) && ($authlib8_4_8::_bzy == 0)) { close $__got; authlib8_4_8::_bqa(153, "CVA design file error.", "The size of the CVA Design file (" . $__gnh . ") does not match the size expected by the QST file. Try uploading the file again in binary mode.", ""); } my $__gni = 25; read ($__got, $__gmu, $__gni); ($__gmy, $__gmz, $__gna, $__gnb, $__gnc, $__gnd, $__gne, $__gnf, $__gng) = unpack("VVVVCvvvv", $__gmu); if ($__gmz != $__goq->{'_ww'}) { close $__got; authlib8_4_8::_bqa(154, "CVA design file error.", "Exercise ID in CVA design file (" . $__gnh . ") does not match exercise ID in the QST file.", ""); } elsif ($__gna != $__goq->{'_wx'}) { close $__got; authlib8_4_8::_bqa(155, "CVA design file error.", "Design ID in CVA design file (" . $__gnh . ") does not match design ID in the QST file.", ""); } $__gmo = ($__gor - 1) % $__gnd; _chz($__gos, $__gmz, $__gna, $__gmo, $__gnc); $__gmn = $__gni; $__gmw = $__gnf * $__gng; $__gmn += ($__gmo * $__gne * $__gmw); $__gmn += (($__gmp - 1) * $__gmw); seek ($__got, $__gmn, 0); read $__got, $__gmm, $__gmw; @__gms = unpack("C*", $__gmm); close $__got; my $__gnj = $__goq->{'_us'}; my $__gnk = $__goq->{'_ut'}; my $__gnl = 0; my @__gnm = ("") x $__gng; my $__gnn = 1; if ($__gnj > 0) { $__gnl = authlib8_4_8::_bsh($__gor, $__gng, 32143, $__gnj, $__gnk); } else { for ($__gmq = 0; $__gmq < $__gng; $__gmq++) { $__gnm[$__gmq] = $__gmq; } $__gnl = \@__gnm; } my @__gno = ("") x 2; my @__gnp = ("") x $__gnf; my $__gnq = 0; my $__gnr = 0; my %__gns = (); my $__gnt = 0; my $__gnu = 0; my $__gnv = 0; my $__gnw = 0; my $__gnx = 0; my @__gny = ("") x $__gng; if (exists $__goq->{'_ara'}) { $__gnw = 1; $__gnx = $__goq->{'_ara'}->{'_arb'}; my $__gnz = 0; if (exists $__goq->{'_ara'}->{'_arw'}) { foreach $__gnz (@{$__goq->{'_ara'}->{'_arw'}}) { $__gns{$__gnz - 1} = $__gnz - 1; } } } for ($__gmq = 0; $__gmq < $__gnf; $__gmq++) { my @__goa = (); for ($__gmr = 0; $__gmr < $__gng; $__gmr++) { $__gnt = 0; $__gnr = $__gnl->[$__gmr]; $__gnq = $__gms[($__gng * $__gmq) + $__gnr]; if($__gnw) { $__gny[$__gmr] = $__gms[($__gng * $__gmq) + $__gmr]; } if(!exists $__gns{$__gnr}) { if(exists $__goq->{'_wk'}) { if ($__goq->{'_wk'}->[$__gnr] == $__gnq) { $__gnt = 1; } } if (!$__gnt) { $__gno[0] = $__gnr; $__gno[1] = $__gnq; push @__goa, [@__gno]; } } } if($__gnw) { my $__gob = 0; my $__goc = ""; my $__god = 0; my $__goe = 0; my @__gof = (); my $__gog = 0; my $__goh = 0; my $__goi = 0; my $__goj = 0; my $__gok = 0; my $__gol = 0; my $__gom = 0; my $__gon = 0; foreach $__gob (@{$__gnx}) { $__god = 0; $__gog = @{$__gob->{'_asc'}}; for ($__goi = 0; $__goi < $__gog; $__goi++) { $__goj = 0; $__gok = $__gob->{'_asc'}->[$__goi]; $__goh = $__gny[$__gok - 1]; $__goj = $__goh; for ($__gol = $__goi + 1; $__gol < $__gog; $__gol++) { $__gom = $__gob->{'_asc'}->[$__gol]; $__gon = @{$__goq->{'_asc'}->[$__gom - 1]->{'_bca'}}; $__goj *= $__gon; } $__god += $__goj; } $__goe = $__gob->{'_arn'}->[$__god]; if ($__goe == 0) { $__goc = ""; } else { seek $authlib8_4_8::_byh, $__goe, 0; $__goc = authlib8_4_8::_bps(1); } if ($__gob->{'_aru'} == -1) { push @__gof, ["C-T", $__goc]; } elsif ($__gob->{'_aru'} == -2) { push @__goa, ["C-B", $__goc]; } else { my $__goo = 0; my $__gop = 0; foreach $__goo (@__goa) { if ($__goo->[0] == ($__gob->{'_aru'} - 1)) { $__goo->[0] = "C-" . $__goo->[0]; $__goo->[1] = $__goc; $__gop = 1; last; } } } } if (@__gof > 0) { unshift @__goa, @__gof; } } $__gnp[$__gmq] = {'_chq'=>[@__goa], '_bcm'=>($__gmq + 1)}; if($__gnv < @__goa) { $__gnv = @__goa; $__gnu = $__gmq; } } return (\@__gnp, $__gmo, $__gnu); } sub _chz { my($__gpe, $__gpf, $__gpg, $__gph, $__gpi) = @_; my $__gov = ""; my $__gow = $__gpe; $__gow =~ s/_(.*?)$//; my $__gox = "sys_CVADesignID_" . $__gow; my $__goy = "CVA" . $__gpf . "_" . $__gpg . "_" . $__gpi; my $__goz = authlib8_4_8::_bnc($__gox); if ($__goz ne "") { if ($__gpi == 1) { if ($__goz !~ m/^(.*?)_(\d+)_(\d+)$/ig) { $__goy =~ s/^(.*?)_(\d+)$/$1/; } } if ($__goz ne $__goy) { my $__gpa = "sys_CVADesignError_" . $__gow; if (authlib8_4_8::_bnc($__gpa) eq "") { my $__gpb = "CVA Design Error: This data record contains data from two different CVA designs. " . $__goy; authlib8_4_8::_bse(0, $__gpb . " Call Sawtooth Software (or your Sawtooth Software representative) for assistance."); $authlib8_4_8::_byi{$__gpa} = $__gpb; authlib8_4_8::_bnd($__gpa, $__gpb); } } } else { $authlib8_4_8::_byi{$__gox} = $__goy; authlib8_4_8::_bnd($__gox, $__goy); } my $__gpc = "sys_CVAVersion_" . $__gow; my $__gpd = $__gph + 1; if (authlib8_4_8::_bnc($__gpc) eq "") { $authlib8_4_8::_byi{$__gpc} = $__gpd; authlib8_4_8::_bnd($__gpc, $__gpd); } return $__gov; } sub _cia { my($__gpm, $__gpn, $__gpo) = @_; my @__gpj = ('_bfd', '_bfi', '_wa', '_bfs'); my $__gpk = ""; my $__gpl = ""; foreach $__gpk (@__gpj) { if (exists $__gpm->{$__gpk}) { $__gpl = authlib8_4_8::_bsl($__gpm->{$__gpk}->{'_bft'}); $__gpm->{$__gpk}->{'_bft'} = _cib($__gpl, $__gpn, $__gpo); } } } sub _cib { my($__gpq, $__gpr, $__gps) = @_; $__gps++; my $__gpp = "D - " . $__gps . ", T - " . $__gpr; $__gpq =~ s/\[%CVAVERSION\(\)%\]/$__gpp/gi; return $__gpq; } return 1;
