(* ::Package:: *) (* only counts the click history true or false *) qClick[n_,i_,s_,a2_,diag_]:=Module[{}, qAppend[{n,i,Boole[s],Last[StringSplit[DateString[]]],(*a2,*)diag}]; (* removed a2 for now *) ]; qClickPlus[n0_]:=DynamicModule[{n=n0}, qAppend[{n,0,1}]; ]; qAppend[text_]:=Module[{s,fname}, (*fname=FileNameJoin[{$TemporaryDirectory,StringReplace[DateString[], {" "->"_", ":"->"_"}]<>"symbolix.txt"}];*) fname=FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}]; s=OpenAppend[fname]; Write[s,text]; {Close[s], fname} ]; qSendLocal=ToString[Hold[DynamicModule[{status="",a, body,text,ret1,ret2,tmp="",msg,res=False, track,res2,arg,Gg2, Gg3={},qClicks,q,first=True,studentID="", buttonEnable=False ,resF ,ID,path,examName,examName2,examIDString2,qNum2,qNum,weights}, Manipulate[ text=Dynamic[status]; buttonEnable=Dynamic[If[studentID!="", True]]; body={{Dynamic[If[res==True,Text[Style[""<>"\nTo Track this test: email "<>ToString[track]<>", "<>IntegerString[Hash[ToString[Gg2]<>ToString[track]<>"Mehran1339","MD5"],16]<>" to Prof. Madani Naidjate \n"<>"Test results stored in file: "<>res2[[2]],Red,Background->Yellow]], ""]], Dynamic[Which[(res == True), "\n\!\(\* StyleBox[\"\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"!\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"You\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"took\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"the\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<> examName <>" \!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"..\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\".\",\nFontColor->RGBColor[1, 0, 0]]\)\n\!\(\* StyleBox[\"Grade\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\":\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<>ToString[Gg3.weights], (res == True), "\n \!\(\* StyleBox[\"Please\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"study\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"the\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)"<> examName <>" \!\(\* StyleBox[\"and\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"write\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"this\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"test\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\" \",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\"again\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\".\",\nFontColor->RGBColor[1, 0, 0]]\)\n\!\(\* StyleBox[\"Grade\",\nFontColor->RGBColor[1, 0, 0]]\)\!\(\* StyleBox[\":\",\nFontColor->RGBColor[1, 0, 0]]\) "<>ToString[Ceiling[qTrunc4[Mean[Gg3.weights]]]],True,""]]},{"",""}}; Deploy[ Style[Panel[Column[{Grid[Transpose[body],Alignment->Left,Spacings->{4,0.5}(*,ItemSize->20)*)],Dynamic@If[res==True,BarcodeImage[studentID<>","<>ToString[Gg3],"QR"],""]}],text,ImageMargins->1],DefaultOptions->{InputField->{ContinuousAction->True},FontSize->Large}]], {{a, 0,""}, Column[{InputField[Dynamic[studentID], String, ContinuousAction->True,FieldHint->"Enter your ID"],Style[Dynamic[ Button["Send Answers",Off[Import::nffil];Off[DeleteFile::nffil]; If[ first == True,q=Import[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}],"List"]; Gg2=SortBy[DeleteDuplicates[Table[ToExpression[q[[i]]],{i, 1, Length[q]}]], #[[1]]&]]; Gg3=Gg2[[All,3]]; qNum=Length@Gg3; qNum2=Length@Gg3; res=True; (*arg=studentID<>" , "<>examName2<>" , "<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]]<>" , "<>ToString[Gg2]<>" , "<>examIDString2<>" , "<>DateString[]<>" , "<>ToString[track]<>" , "<>IntegerString[Hash[ToString[Gg3]<>ToString[track]<>"gilan1339","MD5"],16];*) arg={"\"ID\""<>":\""<>studentID<>"\"","\"Course\""<>":\""<>examIDString2<>"\"","\"Exam\""<>":\""<>examName<>"\"", "\"Grade\""<>":\""<>ToString[Gg3.weights]<>"\"","\"Date\""<>":\""<>DateString[]<>"\"","\"Clicks\""<>":\""<>ToString[Gg2]<>"\"", "\"Track\""<>":\""<>ToString[track]<>"\"", "\"Code\""<>":\""<>IntegerString[Hash[ToString[Gg3]<>ToString[track]<>"gilan1339","MD5"],16]<>"\""}; res2=qFlushLAN[arg,studentID,path]; (* use this for debug, in production might not be used resF=URLFetch["http://symbolicexams.lossofgenerality.com/wp-content/plugins/test-receiver/results.php","Parameters"->{"results"->studentID<>" , "<>examName2<>" , "<>ToString[Ceiling[qTrunc4[Mean[Gg3]]*100]]<>" , "<>ToString[Gg2]<>" , "<>examIDString2<>" , "<>DateString[]<>" , "<>ToString[track]<>" , "<>IntegerString[Hash[ToString[Gg3]<>ToString[track]<>"Mehran1339","MD5"],16]},"ReadTimeout"->10,"ConnectTimeout"->50,"Method"->"POST"];*) (*resF=URLFetch["http://symbolicexams.lossofgenerality.com/wp-content/plugins/test-receiver/results.php","Body"->ToString[arg,OutputForm],"ReadTimeout"->10,"ConnectTimeout"->50,"Method"->"POST"];*) resF=URLFetch["http://compclassnotes.com/bu/metcs248/api/ccnl/result","Body"->ToString[arg,OutputForm],"ReadTimeout"->10,"ConnectTimeout"->50,"Method"->"POST"]; status=If[resF===$Failed,"Failure to Send Answers, see MY DOCUMENTS for results file\nTake snapshot of the screen","Answers Sent, Good Luck!\n"];If[ first==True,DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}]]];first=False;DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"id"<>"symbolix.txt"}]];(*<>ToString[res2[[1]]]*)(*Clear["Global`*"];ClearAll[qClickPlus,qClick,readName]*),Method->"Queued" ,Enabled->buttonEnable]],DynamicEvaluationTimeout->10000] }]&}, TrackedSymbols->Manipulate, SaveDefinitions->True,AppearanceElements->None,SynchronousUpdating->False,ContinuousAction->False, Initialization:>( libs;path=path0; If[path=="", path=$UserDocumentsDirectory]; examName=examName0;examName2=examName20;examIDString2=examIDString20; qNum2=qNum0; weights=weights0; track=RandomInteger[{100000,900000}];first=True;studentID="";buttonEnable=False;Gg3=ConstantArray[0,Length@weights];DeleteFile[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}]];)] ]],InputForm]<>"\n"; analyze=ToString[Hold[DynamicModule[{g,q,groups,keys,mean}, Panel@Column[{ Button["Analyze", q=Import[FileNameJoin[{$UserDocumentsDirectory,"DARADARADARA"<>"symbolix.txt"}],"List"]; g=SortBy[DeleteDuplicates[Table[ToExpression[q[[i]]],{i, 1, Length[q]}]], #[[1]]&]; groups=GroupBy[g,{#[[1]],#[[2]]}&]; keys=Keys@groups; mean=Table[ If [Mean@groups[keys[[i]]][[All,3]]>0,Mean@groups[keys[[i]]][[All,3]],0.1], {i,1,Length@keys}]; ] , Dynamic@PieChart3D[mean,ChartLabels->ToString/@keys,ImageSize->500,SectorOrigin->{Automatic,1},LabelingFunction->(Placed[#,"RadialCallout",myFormat]&)] }] , Initialization:>( mean={0};keys={{1,1}}; myFormat[d_]:=If[d==0.1, 0,d]; ) ] ],InputForm]<>"\n"; qFlushLAN[text_, id_, path_] := Module[{s, fname}, (*fname=FileNameJoin[{$TemporaryDirectory,StringReplace[ DateString[], {" "->"_", ":"->"_"}]<>"symbolix.txt"}];*) fname = FileNameJoin[{path, If[id === "", "NOID", id] <> StringReplace[DateString[], {" " -> "_", ":" -> "_"}] <> "symbolix.json"}]; s = OpenWrite[fname,PageWidth->Infinity]; WriteString[s, text]; {Close[s], fname} ];