| Server IP : 172.67.187.206 / Your IP : 162.159.115.41 Web Server : Apache/2.4.25 (Win32) OpenSSL/1.0.2j PHP/5.6.30 System : Windows NT WIN-ECQAAA40806 6.2 build 9200 (Windows Server 2012 Standard Edition) i586 User : SYSTEM ( 0) PHP Version : 5.6.30 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Inetpub/www/myschool/triamudom/tuprblearn/backup/util/ui/amd/build/ |
Upload File : |
{"version":3,"sources":["../src/async_backup.js"],"names":["define","$","ajax","Str","notification","Templates","STATUS_FINISHED_ERR","STATUS_FINISHED_OK","Asyncbackup","checkdelayoriginal","checkdelay","checkdelaymultipler","backupid","contextid","restoreurl","typeid","backupintervalid","allbackupintervalid","timeout","updateElement","percentage","percentagewidth","Math","round","elementbar","percentagetext","toFixed","attr","css","text","updateInterval","intervalid","callback","value","clearInterval","setInterval","updateBackupTableRow","statuscell","parent","tablerow","cellsiblings","siblings","timecell","timevalue","filenamecell","filename","call","methodname","args","done","response","context","time","size","filesize","fileurl","render","then","html","js","replaceNodeContents","fail","exception","Error","updateRestoreTableRow","coursecell","resourcename","updateProgress","progress","elementstatus","elementdetail","elementbutton","stringRequests","status","addClass","strProcessing","get_string","title","catch","removeClass","strStatus","strStatusDetail","key","component","get_strings","strings","children","last","strComplete","strDetail","strButton","param","updateProgressAll","forEach","element","type","operation","getBackupProgress","getAllBackupProgress","backupids","progressbars","find","not","each","push","id","substring","length","asyncBackupAllStatus","asyncBackupStatus","backup","restore","removeAttr"],"mappings":"AAyBAA,OAAM,4BAAC,CAAC,QAAD,CAAW,WAAX,CAAwB,UAAxB,CAAoC,mBAApC,CAAyD,gBAAzD,CAAD,CACE,SAASC,CAAT,CAAYC,CAAZ,CAAkBC,CAAlB,CAAuBC,CAAvB,CAAqCC,CAArC,CAAgD,IAQhDC,CAAAA,CAAmB,CAAG,GAR0B,CAShDC,CAAkB,CAAG,GAT2B,CAchDC,CAAW,CAAG,EAdkC,CAehDC,CAAkB,CAAG,IAf2B,CAgBhDC,CAAU,CAAG,IAhBmC,CAiBhDC,CAAmB,CAAG,GAjB0B,CAkBhDC,CAlBgD,CAmBhDC,CAnBgD,CAoBhDC,CApBgD,CAqBhDC,CArBgD,CAsBhDC,CAtBgD,CAuBhDC,CAvBgD,CAwBhDC,CAAO,CAAG,GAxBsC,CAgCpD,QAASC,CAAAA,CAAT,CAAuBP,CAAvB,CAAiCQ,CAAjC,CAA6C,IACrCC,CAAAA,CAAe,CAAGC,IAAI,CAACC,KAAL,CAAWH,CAAX,EAAyB,GADN,CAErCI,CAAU,CAAGvB,CAAC,CAAC,IAAMW,CAAN,CAAiB,MAAlB,CAFuB,CAGrCa,CAAc,CAAGL,CAAU,CAACM,OAAX,CAAmB,CAAnB,EAAwB,GAHJ,CAMzCF,CAAU,CAACG,IAAX,CAAgB,eAAhB,CAAiCN,CAAjC,EACAG,CAAU,CAACI,GAAX,CAAe,OAAf,CAAwBP,CAAxB,EACAG,CAAU,CAACK,IAAX,CAAgBJ,CAAhB,CACH,CAUD,QAASK,CAAAA,CAAT,CAAwBC,CAAxB,CAAoCC,CAApC,CAA8CC,CAA9C,CAAqD,CACjDC,aAAa,CAACH,CAAD,CAAb,CACA,MAAOI,CAAAA,WAAW,CAACH,CAAD,CAAWC,CAAX,CACrB,CAOD,QAASG,CAAAA,CAAT,CAA8BxB,CAA9B,CAAwC,IAChCyB,CAAAA,CAAU,CAAGpC,CAAC,CAAC,IAAMW,CAAN,CAAiB,MAAlB,CAAD,CAA2B0B,MAA3B,GAAoCA,MAApC,EADmB,CAEhCC,CAAQ,CAAGF,CAAU,CAACC,MAAX,EAFqB,CAGhCE,CAAY,CAAGH,CAAU,CAACI,QAAX,EAHiB,CAIhCC,CAAQ,CAAGF,CAAY,CAAC,CAAD,CAJS,CAKhCG,CAAS,CAAG1C,CAAC,CAACyC,CAAD,CAAD,CAAYb,IAAZ,EALoB,CAMhCe,CAAY,CAAGJ,CAAY,CAAC,CAAD,CANK,CAOhCK,CAAQ,CAAG5C,CAAC,CAAC2C,CAAD,CAAD,CAAgBf,IAAhB,EAPqB,CASpC3B,CAAI,CAAC4C,IAAL,CAAU,CAAC,CAEPC,UAAU,CAAE,2CAFL,CAGPC,IAAI,CAAE,CACF,SAAYH,CADV,CAEF,UAAahC,CAFX,CAHC,CAAD,CAAV,EAOI,CAPJ,EAOOoC,IAPP,CAOY,SAASC,CAAT,CAAmB,CAE3B,GAAIC,CAAAA,CAAO,CAAG,CACNN,QAAQ,CAAEA,CADJ,CAENO,IAAI,CAAET,CAFA,CAGNU,IAAI,CAAEH,CAAQ,CAACI,QAHT,CAINC,OAAO,CAAEL,CAAQ,CAACK,OAJZ,CAKNzC,UAAU,CAAEoC,CAAQ,CAACpC,UALf,CAAd,CAQAT,CAAS,CAACmD,MAAV,CAAiB,gCAAjB,CAAmDL,CAAnD,EAA4DM,IAA5D,CAAiE,SAASC,CAAT,CAAeC,CAAf,CAAmB,CAChFtD,CAAS,CAACuD,mBAAV,CAA8BrB,CAA9B,CAAwCmB,CAAxC,CAA8CC,CAA9C,CAEH,CAHD,EAGGE,IAHH,CAGQ,UAAW,CACfzD,CAAY,CAAC0D,SAAb,CAAuB,GAAIC,CAAAA,KAAJ,CAAU,0BAAV,CAAvB,CAEH,CAND,CAOH,CAxBD,CAyBH,CAOD,QAASC,CAAAA,CAAT,CAA+BpD,CAA/B,CAAyC,IACjCyB,CAAAA,CAAU,CAAGpC,CAAC,CAAC,IAAMW,CAAN,CAAiB,MAAlB,CAAD,CAA2B0B,MAA3B,GAAoCA,MAApC,EADoB,CAEjCC,CAAQ,CAAGF,CAAU,CAACC,MAAX,EAFsB,CAGjCE,CAAY,CAAGH,CAAU,CAACI,QAAX,EAHkB,CAIjCwB,CAAU,CAAGzB,CAAY,CAAC,CAAD,CAJQ,CAKjCE,CAAQ,CAAGF,CAAY,CAAC,CAAD,CALU,CAMjCG,CAAS,CAAG1C,CAAC,CAACyC,CAAD,CAAD,CAAYb,IAAZ,EANqB,CAQrC3B,CAAI,CAAC4C,IAAL,CAAU,CAAC,CAEPC,UAAU,CAAE,4CAFL,CAGPC,IAAI,CAAE,CACF,SAAYpC,CADV,CAEF,UAAaC,CAFX,CAHC,CAAD,CAAV,EAOI,CAPJ,EAOOoC,IAPP,CAOY,SAASC,CAAT,CAAmB,IAEvBgB,CAAAA,CAAY,CAAGjE,CAAC,CAACgE,CAAD,CAAD,CAAcpC,IAAd,EAFQ,CAGvBsB,CAAO,CAAG,CACNe,YAAY,CAAEA,CADR,CAENpD,UAAU,CAAEoC,CAAQ,CAACpC,UAFf,CAGNsC,IAAI,CAAET,CAHA,CAHa,CAS3BtC,CAAS,CAACmD,MAAV,CAAiB,iCAAjB,CAAoDL,CAApD,EAA6DM,IAA7D,CAAkE,SAASC,CAAT,CAAeC,CAAf,CAAmB,CACjFtD,CAAS,CAACuD,mBAAV,CAA8BrB,CAA9B,CAAwCmB,CAAxC,CAA8CC,CAA9C,CAEH,CAHD,EAGGE,IAHH,CAGQ,UAAW,CACfzD,CAAY,CAAC0D,SAAb,CAAuB,GAAIC,CAAAA,KAAJ,CAAU,0BAAV,CAAvB,CAEH,CAND,CAOH,CAvBD,CAwBH,CAQD,QAASI,CAAAA,CAAT,CAAwBC,CAAxB,CAAkC,IAC1BhD,CAAAA,CAAU,CAAuB,GAApB,CAAAgD,CAAQ,CAACA,QADI,CAE1B5C,CAAU,CAAGvB,CAAC,CAAC,IAAMW,CAAN,CAAiB,MAAlB,CAFY,CAG1ByD,CAAa,CAAGpE,CAAC,CAAC,IAAMW,CAAN,CAAiB,SAAlB,CAHS,CAI1B0D,CAAa,CAAGrE,CAAC,CAAC,IAAMW,CAAN,CAAiB,SAAlB,CAJS,CAK1B2D,CAAa,CAAGtE,CAAC,CAAC,IAAMW,CAAN,CAAiB,SAAlB,CALS,CAM1B4D,CAN0B,CAQ9B,GAAIJ,CAAQ,CAACK,MAAT,KAAJ,CAAyC,CAGrCjD,CAAU,CAACkD,QAAX,CAAoB,YAApB,EAEAvD,CAAa,CAACP,CAAD,CAAWQ,CAAX,CAAb,CAGA,GAAIuD,CAAAA,CAAa,CAAG,QAAU5D,CAAV,CAAmB,YAAvC,CACAZ,CAAG,CAACyE,UAAJ,CAAeD,CAAf,CAA8B,QAA9B,EAAwClB,IAAxC,CAA6C,SAASoB,CAAT,CAAgB,CACzDR,CAAa,CAACxC,IAAd,CAAmBgD,CAAnB,EACA,MAAOA,CAAAA,CACV,CAHD,EAGGC,KAHH,CAGS,UAAW,CAChB1E,CAAY,CAAC0D,SAAb,CAAuB,GAAIC,CAAAA,KAAJ,CAAU,iCAAmCY,CAA7C,CAAvB,CACH,CALD,CAOH,CAhBD,IAgBO,IAAIP,CAAQ,CAACK,MAAT,EAAmBnE,CAAvB,CAA4C,CAI/CkB,CAAU,CAACkD,QAAX,CAAoB,WAApB,EAGAlD,CAAU,CAACuD,WAAX,CAAuB,YAAvB,EAEA5D,CAAa,CAACP,CAAD,CAAW,GAAX,CAAb,CAT+C,GAY3CoE,CAAAA,CAAS,CAAG,QAAUjE,CAAV,CAAmB,OAZY,CAa3CkE,CAAe,CAAG,QAAUlE,CAAV,CAAmB,aAbM,CAc/CyD,CAAc,CAAG,CACb,CAACU,GAAG,CAAEF,CAAN,CAAiBG,SAAS,CAAE,QAA5B,CADa,CAEb,CAACD,GAAG,CAAED,CAAN,CAAuBE,SAAS,CAAE,QAAlC,CAFa,CAAjB,CAIAhF,CAAG,CAACiF,WAAJ,CAAgBZ,CAAhB,EAAgCf,IAAhC,CAAqC,SAAS4B,CAAT,CAAkB,CACnDhB,CAAa,CAACxC,IAAd,CAAmBwD,CAAO,CAAC,CAAD,CAA1B,EACAf,CAAa,CAACzC,IAAd,CAAmBwD,CAAO,CAAC,CAAD,CAA1B,EAEA,MAAOA,CAAAA,CACV,CALD,EAMCP,KAND,CAMO,UAAW,CACd1E,CAAY,CAAC0D,SAAb,CAAuB,GAAIC,CAAAA,KAAJ,CAAU,uBAAV,CAAvB,CAEH,CATD,EAWA9D,CAAC,CAAC,kBAAD,CAAD,CAAsBqF,QAAtB,CAA+B,MAA/B,EAAuCP,WAAvC,CAAmD,sBAAnD,EACA9E,CAAC,CAAC,kBAAD,CAAD,CAAsBqF,QAAtB,CAA+B,MAA/B,EAAuCC,IAAvC,GAA8Cb,QAA9C,CAAuD,sBAAvD,EAGAxC,aAAa,CAAClB,CAAD,CAEhB,CAnCM,IAmCA,IAAIoD,CAAQ,CAACK,MAAT,EAAmBlE,CAAvB,CAA2C,CAI9CiB,CAAU,CAACkD,QAAX,CAAoB,YAApB,EAEAvD,CAAa,CAACP,CAAD,CAAW,GAAX,CAAb,CAGA,GAAI4E,CAAAA,CAAW,CAAG,QAAUzE,CAAV,CAAmB,UAArC,CACAZ,CAAG,CAACyE,UAAJ,CAAeY,CAAf,CAA4B,QAA5B,EAAsC/B,IAAtC,CAA2C,SAASoB,CAAT,CAAgB,CACvDR,CAAa,CAACxC,IAAd,CAAmBgD,CAAnB,EACA,MAAOA,CAAAA,CACV,CAHD,EAGGC,KAHH,CAGS,UAAW,CAChB1E,CAAY,CAAC0D,SAAb,CAAuB,GAAIC,CAAAA,KAAJ,CAAU,iCAAmCyB,CAA7C,CAAvB,CACH,CALD,EAOA,GAAc,SAAV,EAAAzE,CAAJ,CAAyB,CACrBb,CAAI,CAAC4C,IAAL,CAAU,CAAC,CAEPC,UAAU,CAAE,4CAFL,CAGPC,IAAI,CAAE,CACF,SAAYpC,CADV,CAEF,UAAaC,CAFX,CAHC,CAAD,CAAV,EAOI,CAPJ,EAOOoC,IAPP,CAOY,SAASC,CAAT,CAAmB,IACvBuC,CAAAA,CAAS,CAAG,QAAU1E,CAAV,CAAmB,gBADR,CAEvB2E,CAAS,CAAG,QAAU3E,CAAV,CAAmB,gBAFR,CAGvByD,CAAc,CAAG,CACjB,CAACU,GAAG,CAAEO,CAAN,CAAiBN,SAAS,CAAE,QAA5B,CAAsCQ,KAAK,CAAEzC,CAAQ,CAACpC,UAAtD,CADiB,CAEjB,CAACoE,GAAG,CAAEQ,CAAN,CAAiBP,SAAS,CAAE,QAA5B,CAFiB,CAHM,CAO3BhF,CAAG,CAACiF,WAAJ,CAAgBZ,CAAhB,EAAgCf,IAAhC,CAAqC,SAAS4B,CAAT,CAAkB,CACnDf,CAAa,CAACZ,IAAd,CAAmB2B,CAAO,CAAC,CAAD,CAA1B,EACAd,CAAa,CAAC1C,IAAd,CAAmBwD,CAAO,CAAC,CAAD,CAA1B,EACAd,CAAa,CAAC5C,IAAd,CAAmB,MAAnB,CAA2BuB,CAAQ,CAACpC,UAApC,EAEA,MAAOuE,CAAAA,CACV,CAND,EAOCP,KAPD,CAOO,UAAW,CACd1E,CAAY,CAAC0D,SAAb,CAAuB,GAAIC,CAAAA,KAAJ,CAAU,uBAAV,CAAvB,CAEH,CAVD,CAYH,CA1BD,CA2BH,CA5BD,IA4BO,IACC0B,CAAAA,CAAS,CAAG,QAAU1E,CAAV,CAAmB,gBADhC,CAEC2E,CAAS,CAAG,QAAU3E,CAAV,CAAmB,gBAFhC,CAGHyD,CAAc,CAAG,CACb,CAACU,GAAG,CAAEO,CAAN,CAAiBN,SAAS,CAAE,QAA5B,CAAsCQ,KAAK,CAAE7E,CAA7C,CADa,CAEb,CAACoE,GAAG,CAAEQ,CAAN,CAAiBP,SAAS,CAAE,QAA5B,CAFa,CAAjB,CAIAhF,CAAG,CAACiF,WAAJ,CAAgBZ,CAAhB,EAAgCf,IAAhC,CAAqC,SAAS4B,CAAT,CAAkB,CACnDf,CAAa,CAACZ,IAAd,CAAmB2B,CAAO,CAAC,CAAD,CAA1B,EACAd,CAAa,CAAC1C,IAAd,CAAmBwD,CAAO,CAAC,CAAD,CAA1B,EACAd,CAAa,CAAC5C,IAAd,CAAmB,MAAnB,CAA2Bb,CAA3B,EAEA,MAAOuE,CAAAA,CACV,CAND,EAOCP,KAPD,CAOO,UAAW,CACd1E,CAAY,CAAC0D,SAAb,CAAuB,GAAIC,CAAAA,KAAJ,CAAU,uBAAV,CAAvB,CAEH,CAVD,CAYH,CAED9D,CAAC,CAAC,kBAAD,CAAD,CAAsBqF,QAAtB,CAA+B,MAA/B,EAAuCP,WAAvC,CAAmD,sBAAnD,EACA9E,CAAC,CAAC,kBAAD,CAAD,CAAsBqF,QAAtB,CAA+B,MAA/B,EAAuCC,IAAvC,GAA8Cb,QAA9C,CAAuD,sBAAvD,EAGAxC,aAAa,CAAClB,CAAD,CAChB,CACJ,CAQD,QAAS4E,CAAAA,CAAT,CAA2BxB,CAA3B,CAAqC,CACjCA,CAAQ,CAACyB,OAAT,CAAiB,SAASC,CAAT,CAAkB,IAC3B1E,CAAAA,CAAU,CAAsB,GAAnB,CAAA0E,CAAO,CAAC1B,QADM,CAE3BxD,CAAQ,CAAGkF,CAAO,CAAClF,QAFQ,CAG3BY,CAAU,CAAGvB,CAAC,CAAC,IAAMW,CAAN,CAAiB,MAAlB,CAHa,CAI3BmF,CAAI,CAAGD,CAAO,CAACE,SAJY,CAM/B,GAAIF,CAAO,CAACrB,MAAR,KAAJ,CAAwC,CAIpCjD,CAAU,CAACkD,QAAX,CAAoB,YAApB,EAEAvD,CAAa,CAACP,CAAD,CAAWQ,CAAX,CAEhB,CARD,IAQO,IAAI0E,CAAO,CAACrB,MAAR,EAAkBnE,CAAtB,CAA2C,CAI9CkB,CAAU,CAACkD,QAAX,CAAoB,WAApB,EACAlD,CAAU,CAACkD,QAAX,CAAoB,UAApB,EAGAzE,CAAC,CAAC,IAAMW,CAAN,CAAiB,MAAlB,CAAD,CAA2BmE,WAA3B,CAAuC,YAAvC,EAEA5D,CAAa,CAACP,CAAD,CAAW,GAAX,CAEhB,CAZM,IAYA,IAAIkF,CAAO,CAACrB,MAAR,EAAkBlE,CAAtB,CAA0C,CAI7CiB,CAAU,CAACkD,QAAX,CAAoB,YAApB,EACAlD,CAAU,CAACkD,QAAX,CAAoB,UAApB,EAEAvD,CAAa,CAACP,CAAD,CAAW,GAAX,CAAb,CAGA,GAAY,QAAR,EAAAmF,CAAJ,CAAsB,CAClB3D,CAAoB,CAACxB,CAAD,CACvB,CAFD,IAEO,CACHoD,CAAqB,CAACpD,CAAD,CACxB,CAEJ,CAEJ,CA5CD,CA6CH,CAKD,QAASqF,CAAAA,CAAT,EAA6B,CACzB/F,CAAI,CAAC4C,IAAL,CAAU,CAAC,CAEPC,UAAU,CAAE,uCAFL,CAGPC,IAAI,CAAE,CACF,UAAa,CAACpC,CAAD,CADX,CAEF,UAAaC,CAFX,CAHC,CAAD,CAAV,UAOuBK,CAPvB,EAOgC,CAPhC,EAOmC+B,IAPnC,CAOwC,SAASC,CAAT,CAAmB,CAEvDiB,CAAc,CAACjB,CAAQ,CAAC,CAAD,CAAT,CAAd,CACAxC,CAAU,CAAGD,CAAb,CACAO,CAAgB,CAAGc,CAAc,CAACd,CAAD,CAAmBiF,CAAnB,CAAsCxF,CAAtC,CACpC,CAZD,EAYGoD,IAZH,CAYQ,UAAW,CACfnD,CAAU,CAAGA,CAAU,CAAGC,CAA1B,CACAK,CAAgB,CAAGc,CAAc,CAACd,CAAD,CAAmBiF,CAAnB,CAAsCvF,CAAtC,CACpC,CAfD,CAgBH,CAKD,QAASwF,CAAAA,CAAT,EAAgC,IACxBC,CAAAA,CAAS,CAAG,EADY,CAExBC,CAAY,CAAGnG,CAAC,CAAC,WAAD,CAAD,CAAeoG,IAAf,CAAoB,eAApB,EAAqCC,GAArC,CAAyC,WAAzC,CAFS,CAI5BF,CAAY,CAACG,IAAb,CAAkB,UAAW,CACzBJ,CAAS,CAACK,IAAV,CAAgB,KAAKC,EAAN,CAAUC,SAAV,CAAoB,CAApB,CAAuB,EAAvB,CAAf,CACH,CAFD,EAIA,GAAuB,CAAnB,CAAAP,CAAS,CAACQ,MAAd,CAA0B,CACtBzG,CAAI,CAAC4C,IAAL,CAAU,CAAC,CAEPC,UAAU,CAAE,uCAFL,CAGPC,IAAI,CAAE,CACF,UAAamD,CADX,CAEF,UAAatF,CAFX,CAHC,CAAD,CAAV,UAOuBK,CAPvB,EAOgC,CAPhC,EAOmC+B,IAPnC,CAOwC,SAASC,CAAT,CAAmB,CACvD0C,CAAiB,CAAC1C,CAAD,CAAjB,CACAxC,CAAU,CAAGD,CAAb,CACAQ,CAAmB,CAAGa,CAAc,CAACb,CAAD,CAAsBiF,CAAtB,CAA4CzF,CAA5C,CACvC,CAXD,EAWGoD,IAXH,CAWQ,UAAW,CACfnD,CAAU,CAAGA,CAAU,CAAGC,CAA1B,CACAM,CAAmB,CAAGa,CAAc,CAACb,CAAD,CAAsBiF,CAAtB,CAA4CxF,CAA5C,CACvC,CAdD,CAeH,CAhBD,IAgBO,CACHwB,aAAa,CAACjB,CAAD,CAChB,CACJ,CAQDT,CAAW,CAACoG,oBAAZ,CAAmC,SAASzD,CAAT,CAAkB,CACjDtC,CAAS,CAAGsC,CAAZ,CACAlC,CAAmB,CAAGkB,WAAW,CAAC+D,CAAD,CAAuBxF,CAAvB,CACpC,CAHD,CAcAF,CAAW,CAACqG,iBAAZ,CAAgC,SAASC,CAAT,CAAiB3D,CAAjB,CAA0B4D,CAA1B,CAAmChB,CAAnC,CAAyC,CACrEnF,CAAQ,CAAGkG,CAAX,CACAjG,CAAS,CAAGsC,CAAZ,CACArC,CAAU,CAAGiG,CAAb,CAEA,GAAY,QAAR,EAAAhB,CAAJ,CAAsB,CAClBhF,CAAM,CAAG,QACZ,CAFD,IAEO,CACHA,CAAM,CAAG,SACZ,CAGDd,CAAC,CAAC,kBAAD,CAAD,CAAsBqF,QAAtB,CAA+B,GAA/B,EAAoC0B,UAApC,CAA+C,MAA/C,EAGAhG,CAAgB,CAAGmB,WAAW,CAAC8D,CAAD,CAAoBvF,CAApB,CAE/B,CAjBH,CAmBE,MAAOF,CAAAA,CACZ,CAxaK,CAAN","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * This module updates the UI during an asynchronous\n * backup or restore process.\n *\n * @module backup/util/async_backup\n * @package core\n * @copyright 2018 Matt Porritt <[email protected]>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.7\n */\ndefine(['jquery', 'core/ajax', 'core/str', 'core/notification', 'core/templates'],\n function($, ajax, Str, notification, Templates) {\n\n /**\n * Module level constants.\n *\n * Using var instead of const as ES6 isn't fully supported yet.\n */\n var STATUS_EXECUTING = 800;\n var STATUS_FINISHED_ERR = 900;\n var STATUS_FINISHED_OK = 1000;\n\n /**\n * Module level variables.\n */\n var Asyncbackup = {};\n var checkdelayoriginal = 15000; // This is the default time to use.\n var checkdelay = 15000; // How often we should check for progress updates.\n var checkdelaymultipler = 1.5; // If a request fails this multiplier will be used to increase the checkdelay value\n var backupid; // The backup id to get the progress for.\n var contextid; // The course this backup progress is for.\n var restoreurl; // The URL to view course restores.\n var typeid; // The type of operation backup or restore.\n var backupintervalid; // The id of the setInterval function.\n var allbackupintervalid; // The id of the setInterval function.\n var timeout = 2000; // Timeout for ajax requests.\n\n /**\n * Helper function to update UI components.\n *\n * @param {string} backupid The id to match elements on.\n * @param {number} percentage The completion percentage to apply.\n */\n function updateElement(backupid, percentage) {\n var percentagewidth = Math.round(percentage) + '%';\n var elementbar = $('#' + backupid + '_bar');\n var percentagetext = percentage.toFixed(2) + '%';\n\n // Set progress bar percentage indicators\n elementbar.attr('aria-valuenow', percentagewidth);\n elementbar.css('width', percentagewidth);\n elementbar.text(percentagetext);\n }\n\n /**\n * Updates the interval we use to check for backup progress.\n *\n * @param {Number} intervalid The id of the interval\n * @param {Function} callback The function to use in setInterval\n * @param {Number} value The specified interval (in milliseconds)\n * @returns {Number}\n */\n function updateInterval(intervalid, callback, value) {\n clearInterval(intervalid);\n return setInterval(callback, value);\n }\n\n /**\n * Update backup table row when an async backup completes.\n *\n * @param {string} backupid The id to match elements on.\n */\n function updateBackupTableRow(backupid) {\n var statuscell = $('#' + backupid + '_bar').parent().parent();\n var tablerow = statuscell.parent();\n var cellsiblings = statuscell.siblings();\n var timecell = cellsiblings[1];\n var timevalue = $(timecell).text();\n var filenamecell = cellsiblings[0];\n var filename = $(filenamecell).text();\n\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_backup',\n args: {\n 'filename': filename,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n // We have the data now update the UI.\n var context = {\n filename: filename,\n time: timevalue,\n size: response.filesize,\n fileurl: response.fileurl,\n restoreurl: response.restoreurl\n };\n\n Templates.render('core/async_backup_progress_row', context).then(function(html, js) {\n Templates.replaceNodeContents(tablerow, html, js);\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to load table row'));\n return;\n });\n });\n }\n\n /**\n * Update restore table row when an async restore completes.\n *\n * @param {string} backupid The id to match elements on.\n */\n function updateRestoreTableRow(backupid) {\n var statuscell = $('#' + backupid + '_bar').parent().parent();\n var tablerow = statuscell.parent();\n var cellsiblings = statuscell.siblings();\n var coursecell = cellsiblings[0];\n var timecell = cellsiblings[1];\n var timevalue = $(timecell).text();\n\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_restore',\n args: {\n 'backupid': backupid,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n // We have the data now update the UI.\n var resourcename = $(coursecell).text();\n var context = {\n resourcename: resourcename,\n restoreurl: response.restoreurl,\n time: timevalue\n };\n\n Templates.render('core/async_restore_progress_row', context).then(function(html, js) {\n Templates.replaceNodeContents(tablerow, html, js);\n return;\n }).fail(function() {\n notification.exception(new Error('Failed to load table row'));\n return;\n });\n });\n }\n\n /**\n * Update the Moodle user interface with the progress of\n * the backup process.\n *\n * @param {object} progress The progress and status of the process.\n */\n function updateProgress(progress) {\n var percentage = progress.progress * 100;\n var elementbar = $('#' + backupid + '_bar');\n var elementstatus = $('#' + backupid + '_status');\n var elementdetail = $('#' + backupid + '_detail');\n var elementbutton = $('#' + backupid + '_button');\n var stringRequests;\n\n if (progress.status == STATUS_EXECUTING) {\n // Process is in progress.\n // Add in progress class color to bar\n elementbar.addClass('bg-success');\n\n updateElement(backupid, percentage);\n\n // Change heading\n var strProcessing = 'async' + typeid + 'processing';\n Str.get_string(strProcessing, 'backup').then(function(title) {\n elementstatus.text(title);\n return title;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: backup ' + strProcessing));\n });\n\n } else if (progress.status == STATUS_FINISHED_ERR) {\n // Process completed with error.\n\n // Add in fail class color to bar\n elementbar.addClass('bg-danger');\n\n // Remove in progress class color to bar\n elementbar.removeClass('bg-success');\n\n updateElement(backupid, 100);\n\n // Change heading and text\n var strStatus = 'async' + typeid + 'error';\n var strStatusDetail = 'async' + typeid + 'errordetail';\n stringRequests = [\n {key: strStatus, component: 'backup'},\n {key: strStatusDetail, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementstatus.text(strings[0]);\n elementdetail.text(strings[1]);\n\n return strings;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n $('.backup_progress').children('span').removeClass('backup_stage_current');\n $('.backup_progress').children('span').last().addClass('backup_stage_current');\n\n // Stop checking when we either have an error or a completion.\n clearInterval(backupintervalid);\n\n } else if (progress.status == STATUS_FINISHED_OK) {\n // Process completed successfully.\n\n // Add in progress class color to bar\n elementbar.addClass('bg-success');\n\n updateElement(backupid, 100);\n\n // Change heading and text\n var strComplete = 'async' + typeid + 'complete';\n Str.get_string(strComplete, 'backup').then(function(title) {\n elementstatus.text(title);\n return title;\n }).catch(function() {\n notification.exception(new Error('Failed to load string: backup ' + strComplete));\n });\n\n if (typeid == 'restore') {\n ajax.call([{\n // Get the table data via webservice.\n methodname: 'core_backup_get_async_backup_links_restore',\n args: {\n 'backupid': backupid,\n 'contextid': contextid\n },\n }])[0].done(function(response) {\n var strDetail = 'async' + typeid + 'completedetail';\n var strButton = 'async' + typeid + 'completebutton';\n var stringRequests = [\n {key: strDetail, component: 'backup', param: response.restoreurl},\n {key: strButton, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementdetail.html(strings[0]);\n elementbutton.text(strings[1]);\n elementbutton.attr('href', response.restoreurl);\n\n return strings;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n });\n } else {\n var strDetail = 'async' + typeid + 'completedetail';\n var strButton = 'async' + typeid + 'completebutton';\n stringRequests = [\n {key: strDetail, component: 'backup', param: restoreurl},\n {key: strButton, component: 'backup'}\n ];\n Str.get_strings(stringRequests).then(function(strings) {\n elementdetail.html(strings[0]);\n elementbutton.text(strings[1]);\n elementbutton.attr('href', restoreurl);\n\n return strings;\n })\n .catch(function() {\n notification.exception(new Error('Failed to load string'));\n return;\n });\n\n }\n\n $('.backup_progress').children('span').removeClass('backup_stage_current');\n $('.backup_progress').children('span').last().addClass('backup_stage_current');\n\n // Stop checking when we either have an error or a completion.\n clearInterval(backupintervalid);\n }\n }\n\n /**\n * Update the Moodle user interface with the progress of\n * all the pending processes.\n *\n * @param {object} progress The progress and status of the process.\n */\n function updateProgressAll(progress) {\n progress.forEach(function(element) {\n var percentage = element.progress * 100;\n var backupid = element.backupid;\n var elementbar = $('#' + backupid + '_bar');\n var type = element.operation;\n\n if (element.status == STATUS_EXECUTING) {\n // Process is in element.\n\n // Add in element class color to bar\n elementbar.addClass('bg-success');\n\n updateElement(backupid, percentage);\n\n } else if (element.status == STATUS_FINISHED_ERR) {\n // Process completed with error.\n\n // Add in fail class color to bar\n elementbar.addClass('bg-danger');\n elementbar.addClass('complete');\n\n // Remove in element class color to bar\n $('#' + backupid + '_bar').removeClass('bg-success');\n\n updateElement(backupid, 100);\n\n } else if (element.status == STATUS_FINISHED_OK) {\n // Process completed successfully.\n\n // Add in element class color to bar\n elementbar.addClass('bg-success');\n elementbar.addClass('complete');\n\n updateElement(backupid, 100);\n\n // We have a successful backup. Update the UI with download and file details.\n if (type == 'backup') {\n updateBackupTableRow(backupid);\n } else {\n updateRestoreTableRow(backupid);\n }\n\n }\n\n });\n }\n\n /**\n * Get the progress of the backup process via ajax.\n */\n function getBackupProgress() {\n ajax.call([{\n // Get the backup progress via webservice.\n methodname: 'core_backup_get_async_backup_progress',\n args: {\n 'backupids': [backupid],\n 'contextid': contextid\n },\n }], true, true, false, timeout)[0].done(function(response) {\n // We have the progress now update the UI.\n updateProgress(response[0]);\n checkdelay = checkdelayoriginal;\n backupintervalid = updateInterval(backupintervalid, getBackupProgress, checkdelayoriginal);\n }).fail(function() {\n checkdelay = checkdelay * checkdelaymultipler;\n backupintervalid = updateInterval(backupintervalid, getBackupProgress, checkdelay);\n });\n }\n\n /**\n * Get the progress of all backup processes via ajax.\n */\n function getAllBackupProgress() {\n var backupids = [];\n var progressbars = $('.progress').find('.progress-bar').not('.complete');\n\n progressbars.each(function() {\n backupids.push((this.id).substring(0, 32));\n });\n\n if (backupids.length > 0) {\n ajax.call([{\n // Get the backup progress via webservice.\n methodname: 'core_backup_get_async_backup_progress',\n args: {\n 'backupids': backupids,\n 'contextid': contextid\n },\n }], true, true, false, timeout)[0].done(function(response) {\n updateProgressAll(response);\n checkdelay = checkdelayoriginal;\n allbackupintervalid = updateInterval(allbackupintervalid, getAllBackupProgress, checkdelayoriginal);\n }).fail(function() {\n checkdelay = checkdelay * checkdelaymultipler;\n allbackupintervalid = updateInterval(allbackupintervalid, getAllBackupProgress, checkdelay);\n });\n } else {\n clearInterval(allbackupintervalid); // No more progress bars to update, stop checking.\n }\n }\n\n /**\n * Get status updates for all backups.\n *\n * @public\n * @param {number} context The context id.\n */\n Asyncbackup.asyncBackupAllStatus = function(context) {\n contextid = context;\n allbackupintervalid = setInterval(getAllBackupProgress, checkdelay);\n };\n\n /**\n * Get status updates for backup.\n *\n * @public\n * @param {string} backup The backup record id.\n * @param {number} context The context id.\n * @param {string} restore The restore link.\n * @param {string} type The operation type (backup or restore).\n */\n Asyncbackup.asyncBackupStatus = function(backup, context, restore, type) {\n backupid = backup;\n contextid = context;\n restoreurl = restore;\n\n if (type == 'backup') {\n typeid = 'backup';\n } else {\n typeid = 'restore';\n }\n\n // Remove the links from the progress bar, no going back now.\n $('.backup_progress').children('a').removeAttr('href');\n\n // Periodically check for progress updates and update the UI as required.\n backupintervalid = setInterval(getBackupProgress, checkdelay);\n\n };\n\n return Asyncbackup;\n});\n"],"file":"async_backup.min.js"}