C   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" @@hC}!Ѱ<" 9iׂIIIHk+?c?*Y!du)bT9вU$8GI.澬DSq q}.d8FهKaKdrFh.]y4 JЛ]KBE$$ $ PR΀G]ui$$'! "#031C/Td=SQ?62Ccj{ ̏dچ/cV`Wz͈{Y`dhL ]OBlomrn s-ڗEZN_1%bHϣV7):ӷ)}~(;!b15K[Evϻ>q.% O(c#x$'+`٥vv(M"vB.a T~ϕhy(6nݱl1yNɓxA R8rqv1.cS+_&@ uM5Ĉ XmeLXqy#9]c}ɄLdeJ몓I1T dCaM$T,X bʭ!%F5X1x#!q\F2&RqCol~̱.0ϦLd`. m{Y~k{C}bv;UcN(ouh6 &Y587E$-']n,@TD\+RyUU^Q,f>1qfU Fڥ>IfNUwu#OMMQ6 N*_ k rS`1:!F'<+ b?O2 !Q12A "3a#$?,7!`yǮ(16w a F#?*"sv>Ⱥfv͑s]GnS ȥpG ыEg)Zx rYq] @f_܃pչEڎّC Ŝ*/ hOSvو\5Uy|oHm2CSBW)5{TW=o*R Aks=Cre?i /ں$beo`ޮGHy;fNAl8.\S"aúFYvNk-*`vkʈ2fEEWa, fF^#;[9^~Y$:0#W3Z*IZڹkn--9=G;7F)m{TɆ=Ȭ55Baڞ5M#m5Ʀm8+Hh$}:&eQ[;i]С::o$<~5RB?s35rOֿwP/̅(Z6R>)N4!ʊwz-rw+ykq1bKhƸ4NӐXQ_})+e15nq?[^9<z3Fsi8')9p){RPZ+*p(aYV6lg9;duNt@3sTwzaŇGTbH(#*zc9Kb1tÊ Z?giDHRB^MvOLD,'dqCP$ΔU֟֊=sF$JދZ?NANWP, ¦򙈉&;xdupiIpd;Dž!ֿѮAb%u}j-p>I[Nbi G';4wm]H]#LӘNNRs.]en -8ePsQ;țEݫ7g_LWEZ:/IagnܤiٹŷTH~ia֎~KV A-2m]F"m9-Z bǰ״ @~4Nxčtl>u#rgѐ3;M9<J1vfL8׋1PHgPXv{O}nKQ؋7bX4<`Y7siV)s:{rOhz @4VWB&ɡob܋F4>ysfXWSNO$,.u:ԫgyao4$hD#ٸf^kh7#1Z֥&*v-;bޭQhowy]ه.+7Mⴻ JYgfi3qK C3¹? 5Z.N^Z wKF͂7ރ۞wjTJ.qŠ\Sv1UR욽&NpЖ``уm`vn#z4>eV`'h'jAҔ-4:Hn]9h<nU6m2cE1/Y%I~ʏ|VBƟ@;%M9M}1Dd%gO] у&rf7uܲ(!1AQaq0 ?!*@)JeGj{['v+)(/д%젍ZkkLuRmj.c@Z VJdjh62AO a;oBu H=nKW8Bɰu?бأm,sr|8˨iqI2tZۄJPXEzޔj~]UMuzv!N&1YzJՠ\po'ሸC؊YTD"HM5Ъi߯aFA)ڮzE@hg֝81jk\M38ܢ  s7N}ޭGNBcL pk;Jδ3eiUgAYW]\>GyگQ=fKA;Ta`eM+Q Lň]GM<ĦjHNMx}aX{̣S ԅnMASr ( (Lzo9.;ӳf `Ӕ٢3 IW\9~_saa\ԊWܭX:ӆ38ty*NqPBIYjE>DP!R%-4'皺;~J!7mXhP!曭$\AYj.lC4+jDdgC0-*|`ZD+лC")s8KqpqMs4 7\U`.[Ey8AH!/,(:M -T䓥~ O4-Ԓn}HDN7K$_Ԕ䚞`RhB_aX?4Vŗ@هua;{PcT+7YBo?r-ͩ{ĎA ˼nM286G1V˜Jв"lV55C]h̊A%  'pԂՐ9=d=e{'<3_ :^~4(n-Cs5m![jmIqU~Tw8`pH8uД l maP0 9yCMF1G糞.U~FC{!e(Y:P7~;LN^{1r\ԬG(0dÏOqKZ⑼T{ 2sKdՏ?mMQ=67iH+9d=;QؤH8nLbDyS%({bCupt#C$A"H{jqᶯ:n=EhH`!mMA?v6+MԿ⟚q KiD*Q5CZ2|]:Xd+t:o@M :32b[\5=ֵ7])|tϺwBńe!`:I,9:j@/a 8+v6&{Ǹ@MviA 6T'whs E}xG&'g J~1qff&q˘-vYm /i1 I6u,)#,΁l}*&`$ͬe%w3xѤXcD执g峕5B/|$=%8 a 2.l c@G \/x[өq]v5?N|!\,>{"r/?&!1QAa ᑱ?ĊD肭 nv@yޝ (I…U - bmE>,1v!d& &檔5D&0PԔ͒@Z:†E" Q`”>PH:~OP3W@hMkU \OR5ʄ,f|r}јxo)"+hQK/0`5{M~ '!1AQaq0 ??k#^~G#V,#Z1'ܤ~pO%OO\q`~ }EŰ5 輸dux\$s[{T2t`Bgq4Z]b 㛪3,(@bApr)9:@|b!rg:N^Ʌ x_\pm7I0?>^kw|.K[sF@]Gn*L yO leP.p֍jS=ʨןQF"5zʼnk*8u" Fg cSyVƇNؐ(48hVAӎ^^ jyB p"y]ļlU(7U`3pCGF'&ygozXν: P"@G@x[o&MJ$F.hi w;}/^͇qnmN/TQއO1\,}bQ #¯^S!)X#GPȏt c^\' }iIZa)z4͊Ξy48,f#KP!Jx|wʆ#Z< ~Krp&qH/;R沽+ER~0vV#ʀTS(-ڝBybCDb8~= Yͧ]@nMk2%;%,r6LR腻?^;KŇ=ք =`ɥ/z&I{#JMC}H9^UJ,P pSGd69Ϭu%"ˢP K"k)=9 ㇌,OliXzh " R ^sNkQ >63( PQPy3$f+W՛=4ǁ`*^ EbKt6^!籷ȭK{/;Lpx;aOلz[.NP4]GcTv~sg'LED]j'G]6rYUPw*OİՋi'8۴#gXx+=eU6Rc"u2~?ny;u3'6f b߬M$*k&?6 *^1nێz)Ra}1ٯ%EY2QEp$ EqSt#+x *hUIXM?'//a'G q@0( } G#Ȣp 9;/& `B&$yt(*zxӔS?Kȏ3{p b  ۍ-z܈֦6?<ǬPNG 更 6/h0Ziuae*M'A xvq.>F oN{Q{gDLu=|O xNdq8(EUu,O tDJ ;GeCV YZ T4{(Ӳ'ctfwcjre޳m #7,6BE4QP.P(&^{9H-mo qg1=>p)/"p0!4m‚S6úFNh D )XdT FؤZ⸚kHc8v I `ԁ i4)t*çLe_>ruGEQgǔctō0l6vd GG8v^|#JyZPSO YCuAߐ"xOfHF@KV!少Eҕ]h [).q*0I<8^6}p^thoigiDKp,23I5쓄OY6s7QsOw^wJ/A➰0g(ՄyKԇQS?HwX=ҞX~Q='p?7 @g~G}rgT? JFIF  H H (ICC_PROFILE   0 mntrRGB XYZ acsp   - desc trXYZ d gXYZ x bXYZ  rTRC  (gTRC  (bTRC  (wtpt  cprt  بV7eudakt!Q ,*RGPQNČzŬb 5666p z"c83''Mq6Gitql@90.ۚAcN|li:9蠃p/^ZnLx84v;[#$ nh'c32o8Ɛ5KAv*_?nX?pyֆ̈́#z23F0Oe> {Gu.V (C'h/o%>x1X r:(>}{ycX8b]U:dOMsVAp'Z3'3E-ybj:>jOvUw#2cl~@gFCjțbz ^:-tdfj{XTh8aUM^+dAl"(KK m1$$ XKKqržoqg V FF#pG~:]֦!!Ң:pC+ AzӬ].t`='h_/} @L\,x㌼z԰+J-v+Y['8' % X q=[4Sj~4ݢ#dʂēRL5kX؊>l:t\baBA\Q38( ө:&$ 'L#d{qH>*5;jDo ˷YmԈ*[9*5tUf%3= GUW\'AR_W4_P պ -|4RFJZv0d[ˠzJ|PU8;鯌 'VcL,κ>*eb)f,0"j1 1v՘;bJ++COz7%>NU,=z\cEVK>Ic7} .jHn;^觱GHI HVǂO:ߊ{mSV?K|@ AiAT`2j 1~K8’$ ~]=9ឦG *9EMּm5Xf9Qĸ}i D%+t+;F: v:-&h_rD|! Ә;Zl븂':C&ҀaeKkm6 uT".}J&\ hciB2B+T7t?EPþЌmAF\lc2ЊABmE,cն\QJ]d5 `O Y@8?lx#KiI&Ri1fR2f1N%_g*TӨ??N:}+לɀh٭qL,ʈBrcuBmz ̢TV^ 뙏8' ufUX3㓏>NG:/;Hp饕B1K /%iɫ VQ%:_ -1oL?Roa\i^F|W*Na)P X#y㯨z+Cح\вjirm*dWҡQbBȨi'%NEb?'[h=`OiU϶u nR}GW4fVJmiR~J|l%m'%"LW V27NsXb?_={s}ij4Ý=SNjxFV"ԎI(E)]ӝЖm[4 m`5-7Wf󪥎bZKa#Vb%KY5T$y`46̼p C7HM'l{Oi +Pw~j,S5T4(FԨ;A`*HJTPgt(6/cg5U1@Qb8Y!rBzOQKF+6v%=~XDPpWc_-:߈#c坣CW1:^Q 06Ӭq@ Dj$ UW$?9F\cSM5=2>hב\,()JBk; J#j徻W(p=oQD #UMhU*Fc ?N=nF5Ӑ12w05Z뀩4ڣ霅uC1y%nJ8Ԑ*crR 9W=H9,A׻,.ZFb QEGVNs, q';OMmbtNVqOw*֙kPѬ؈XJIӯEWok+R{%j; Yx 7&&,LԜYbw"lI(*`۹F AS- #$413)Qpڤ3RxOJ$cP]viuq {kyN.- B,@󪳪ڸAor%X0UNb9 򍕑7)*233|Rnb@q|EUý$!7&["XOy ~ƓtADhP]mG파9p=ԜZ]ӭሎOeyq !bI GU:5~FoL ST[е$]$g*w]!;m@ޠ&IUڬ{҄բ-.SmҒ` vU"oL;'5s"W)@äL1i}^Y5$+Pv0o HU @ȓsQM)?M\4Q $2;g WJ/NwFJGD: y όMfW!QUZ%azҳDK_XhM^rԝ^!d'<#ﴛO{/F?+$ Y' wg'$ljGAH7l4xѶc}I*esg~;ͤt@B2iB'9C a8fTR: %NO@ m3sv w .@濾 ,FYrT0mUW_v>>d[A6ڊx:YTLHvӺ!nSD}>[mET0_,'C]pjVᅷPDZ[-V0`>}ܟpmֻ2O6O*ݹXHSN(J /+1՟#(P*gEO#w&j6?;ڡ)+U]l\/{莄*I/9<'$'#'yt/&-\\WPL`/p9qa'e¨E] fAAEYnGtm,ϮwXT>AaN#FjŵjQFdq^<H?yJ܃2*3 T4ЧH**W;(ꭽ¾Pf=eyA4FJ6{e]JqOCf#3SJf iMM\ iT$rG8$9>2:M)Q#NKe&"E8.z<mHk?#t˒A]; G0H:f!i! j{1m}o7u;$99Ӱ\ncz:zALq޶wyKT<4X,'!Y;Ͱ6q GM~_~܂}t>(zl}:r L9 fe}.-R*<`c6oܛ=prҽGB)nQ%)s*&i΍%—Zb{m[NNkbwBw Q*dF HP iܛ; aV68j}\eIGI'͔B;yA :^bn-m#@S6ˎr ;~cmƻgU:X6G%[gc{]c4)fpsgY˅>*"1}2<175)]V5)kdkM~`΂:{4nGPTTb   뎱϶w FFᓂG8>zF_H9_rDl:ҶH5Z!Bj.yk}erb:SOT]!ǎ?n:HεZsyztn[7NZ#UQO$.J#]Cr#YX9c<'$z 9 .$$PnDSn 2u5X g\ ?|Aᬰⶵ >>bE)Cb-ruMc׺*,\)`^m ge\k.۫8گoK1gWMpU޻zI=EErz:#6--/Wm\z8מ0x tA_c?Ծc^MژIMyO>l0ċ}t7[\ʲ9̜m_a[姯rְjP\kx1'CdmvF70e+m-]a?ݝKuSMUm 8f Yb!)2Z.UD \~:ܽ8zR̪Kcbs&ߦ1$, w\gc3F$iU#<`:I4{w.2aQ$EXNo?Gm NN rE$#Jn҉!AH'zePzRog8u(tJP߁Z.pÐ͢Aռ65Xsyvm 6RW7W;|0 >OүG@ٳ<>omԼ()kZJlK,F 4)snOQ{u㌏= Ao,ծ?eKBzG 6e6 f|CU _4C[j͕M8,%emM8\ cv COwTGi _94BDf%'ns8MPc&-y"8R_j 3a+z+N 9QlDQ40E VۋrH2I_YO',:뿉WNHvﵐ0B}na*E zUbN#0e"f.Q H5"-HVn=+ # Eiy- v8=g`o[ 鼛2.D^QeB ؅qϿRC~ B+Jۍ8 4*ӖΝ1R BI\ 1[0 I9y)Y " 7]6qg\ vP  s= Ѭ֕)פE< c`ϷU9W,: ?y1hsU(T ge/룮JA]|4aZVAIeIhBI!l$3![qHnw\7R{oM/ִ>5& gwjFE dc@K:V&W/k+=Yk[ @fU5zzmFȖH,[ n-dc wd[z"g4ϘRr0`B8_; #$^Zo5KZYKj GY%s"!a[9I2TF-w#a]˒Itٮei_FpVЧ૱W3eCi7 "}HApG>h֝5i T٧- '`dX1AF$$ޙ_Z]ڷTC Uy JGO} >A"5a> ZUR -Z\9 jrWݖQRݳ*ļ]$ڵXq=/w z\II#{ӭl^;F_R쵎[ָ[gKKͰoQ )W녕іs*kuzŨQde`WU_KLE~"g r<2GyއL(-VY -Z(IU0 |\;8C mhl:̄DkYHOk|:*DY tsس |zrO;񍃌sT31=jwyШ^nZHm_G̮0W󿓹S;_$mٛIDV=f-H}U]HA*vԶ3\Wh*I#$@6x^OZC&JU 16 XD*if&BDGFYYP[KLX uX .Z hq Ghb8M#Mqt\c> aT 00=㎨ʕGQԪR,ĜI9zӦJO3Rn`C5܊@QO1N.ؔ"I\YÖĐHdL\}IP~jm$ y; :ZGZVJv =&*UF#``R`*S+p\=) ҭ9k̮Ršx0'**ԑLkɺk+zJb#:|MZ ?j$ݼ &X)$6FY6ѕ/; J*nlC*ų_ ԕ{_6:\47ڷs4RmĊ=z *ʪXT[]5Bl#a-˙bv8@H|Rwe9A%5&M%Z02TN)&&GfM 儀oŒM;=.//k~ E"a9/3y,>lj>ZXy&εYP&h gec<``]!}i'c KQulFIʓ_\T58(+cJq~ [dgmm/`Xڙhtkq ו$"c[PVY[uɜ&#몵"ȾqC"ÜȔ!<Mj8u-dx*gϫtTLdKlaWڭ\~|7u`h(w֋cL=˼=FvcGs}зUBSМ;FI;Q$8+V|[CS쮙1%YP Q% LVVK+&,cIb]Vyi ~h?yF4"5As-F ݆x55P&E:W@f;}Gy^]U ITki 1 d﫠*cNh' cؗYnsL:b?H :kM~@8#Iqɔ~:f]P*i]H'fjhxTҗ1O:^t$1]UXz&tODT>(^s&3#N_/x-䬦? ~vU-W$4'ӎvRG|jySW?u4(1 G[ِ22jʎhrmoյشgRͮ%ϟѬ9 oR  n-&F-@hgY_qN;"2 !KJ  šA^, "aG8`=14=5Mqk>U@UT :RgjrKF.O$I9'=i}._ Default page
  • Your IP: 216.73.216.3
  • Server IP: 1.201.172.194
  • Server: Linux hyjg 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
  • Server Software: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/8.2.20
  • PHP Version: 8.2.20
  • Buat File | Buat Folder
Edit File: makegrid.js
'); $editArea.find('textarea').val(value); $editArea .on('keyup', 'textarea', function (e) { $(g.cEdit).find('.edit_box').val($(this).val()); }); $(g.cEdit).on('keyup', '.edit_box', function (e) { $editArea.find('textarea').val($(this).val()); }); $editArea.append('
' + g.cellEditHint + '
'); } else { //handle truncated/transformed values values $editArea.addClass('edit_area_loading'); // initialize the original data $td.data('original_data', null); /** * @var sql_query String containing the SQL query used to retrieve value of truncated/transformed data */ var sql_query = 'SELECT `' + field_name + '` FROM `' + g.table + '` WHERE ' + PMA_urldecode(where_clause); // Make the Ajax call and get the data, wrap it and insert it g.lastXHR = $.post('sql.php', { 'token' : g.token, 'server' : g.server, 'db' : g.db, 'ajax_request' : true, 'sql_query' : sql_query, 'grid_edit' : true }, function (data) { g.lastXHR = null; $editArea.removeClass('edit_area_loading'); if (typeof data !== 'undefined' && data.success === true) { $td.data('original_data', data.value); $(g.cEdit).find('.edit_box').val(data.value); } else { PMA_ajaxShowMessage(data.error, false); } }); // end $.post() } g.isEditCellTextEditable = true; } else if ($td.is('.timefield, .datefield, .datetimefield, .timestampfield')) { var $input_field = $(g.cEdit).find('.edit_box'); // remember current datetime value in $input_field, if it is not null var current_datetime_value = !is_null ? $input_field.val() : ''; var datetime_value = current_datetime_value; var showMillisec = false; var showMicrosec = false; var timeFormat = 'HH:mm:ss'; // check for decimal places of seconds if (($td.attr('data-decimals') > 0) && ($td.attr('data-type').indexOf('time') != -1)){ if (datetime_value && datetime_value.indexOf('.') === false) { datetime_value += '.'; } if ($td.attr('data-decimals') > 3) { showMillisec = true; showMicrosec = true; timeFormat = 'HH:mm:ss.lc'; if (datetime_value) { datetime_value += '000000'; var datetime_value = datetime_value.substring(0, datetime_value.indexOf('.') + 7); $input_field.val(datetime_value); } } else { showMillisec = true; timeFormat = 'HH:mm:ss.l'; if (datetime_value) { datetime_value += '000'; var datetime_value = datetime_value.substring(0, datetime_value.indexOf('.') + 4); $input_field.val(datetime_value); } } } // add datetime picker PMA_addDatepicker($input_field, $td.attr('data-type'), { showMillisec: showMillisec, showMicrosec: showMicrosec, timeFormat: timeFormat }); $input_field.datepicker("show"); // unbind the mousedown event to prevent the problem of // datepicker getting closed, needs to be checked for any // change in names when updating $(document).unbind('mousedown', $.datepicker._checkExternalClick); //move ui-datepicker-div inside cEdit div var datepicker_div = $('#ui-datepicker-div'); datepicker_div.css({'top': 0, 'left': 0, 'position': 'relative'}); $(g.cEdit).append(datepicker_div); if (is_null){ $(g.cEdit).find('.edit_area').hide(); } // cancel any click on the datepicker element $editArea.find('> *').click(function (e) { e.stopPropagation(); }); g.isEditCellTextEditable = true; } else { g.isEditCellTextEditable = true; // only append edit area hint if there is a null checkbox if ($editArea.children().length > 0) { $editArea.append('
' + g.cellEditHint + '
'); } } if ($editArea.children().length > 0 && !is_null) { $editArea.show(); } } }, /** * Post the content of edited cell. */ postEditedCell: function () { if (g.isSaving) { return; } g.isSaving = true; /** * @var relation_fields Array containing the name/value pairs of relational fields */ var relation_fields = {}; /** * @var relational_display string 'K' if relational key, 'D' if relational display column */ var relational_display = $(g.o).find("input[name=relational_display]:checked").val(); /** * @var transform_fields Array containing the name/value pairs for transformed fields */ var transform_fields = {}; /** * @var transformation_fields Boolean, if there are any transformed fields in the edited cells */ var transformation_fields = false; /** * @var full_sql_query String containing the complete SQL query to update this table */ var full_sql_query = ''; /** * @var rel_fields_list String, url encoded representation of {@link relations_fields} */ var rel_fields_list = ''; /** * @var transform_fields_list String, url encoded representation of {@link transform_fields} */ var transform_fields_list = ''; /** * @var where_clause Array containing where clause for updated fields */ var full_where_clause = []; /** * @var is_unique Boolean, whether the rows in this table is unique or not */ var is_unique = $(g.t).find('td.edit_row_anchor').is('.nonunique') ? 0 : 1; /** * multi edit variables */ var me_fields_name = []; var me_fields_type = []; var me_fields = []; var me_fields_null = []; // alert user if edited table is not unique if (!is_unique) { alert(g.alertNonUnique); } // loop each edited row $(g.t).find('td.to_be_saved').parents('tr').each(function () { var $tr = $(this); var where_clause = $tr.find('.where_clause').val(); if (typeof where_clause === 'undefined') { where_clause = ''; } full_where_clause.push(PMA_urldecode(where_clause)); var condition_array = jQuery.parseJSON($tr.find('.condition_array').val()); /** * multi edit variables, for current row * @TODO array indices are still not correct, they should be md5 of field's name */ var fields_name = []; var fields_type = []; var fields = []; var fields_null = []; // loop each edited cell in a row $tr.find('.to_be_saved').each(function () { /** * @var $this_field Object referring to the td that is being edited */ var $this_field = $(this); /** * @var field_name String containing the name of this field. * @see getFieldName() */ var field_name = getFieldName($(g.t), $this_field); /** * @var this_field_params Array temporary storage for the name/value of current field */ var this_field_params = {}; if ($this_field.is('.transformed')) { transformation_fields = true; } this_field_params[field_name] = $this_field.data('value'); /** * @var is_null String capturing whether 'checkbox_null__' is checked. */ var is_null = this_field_params[field_name] === null; fields_name.push(field_name); if (is_null) { fields_null.push('on'); fields.push(''); } else { if ($this_field.is('.bit')) { fields_type.push('bit'); } else if ($this_field.hasClass('hex')) { fields_type.push('hex'); } fields_null.push(''); fields.push($this_field.data('value')); var cell_index = $this_field.index('.to_be_saved'); if ($this_field.is(":not(.relation, .enum, .set, .bit)")) { if ($this_field.is('.transformed')) { transform_fields[cell_index] = {}; $.extend(transform_fields[cell_index], this_field_params); } } else if ($this_field.is('.relation')) { relation_fields[cell_index] = {}; $.extend(relation_fields[cell_index], this_field_params); } } // check if edited field appears in WHERE clause if (where_clause.indexOf(PMA_urlencode(field_name)) > -1) { var field_str = '`' + g.table + '`.' + '`' + field_name + '`'; for (var field in condition_array) { if (field.indexOf(field_str) > -1) { condition_array[field] = is_null ? 'IS NULL' : "= '" + this_field_params[field_name].replace(/'/g, "''") + "'"; break; } } } }); // end of loop for every edited cells in a row // save new_clause var new_clause = ''; for (var field in condition_array) { new_clause += field + ' ' + condition_array[field] + ' AND '; } new_clause = new_clause.substring(0, new_clause.length - 5); // remove the last AND new_clause = PMA_urlencode(new_clause); $tr.data('new_clause', new_clause); // save condition_array $tr.find('.condition_array').val(JSON.stringify(condition_array)); me_fields_name.push(fields_name); me_fields_type.push(fields_type); me_fields.push(fields); me_fields_null.push(fields_null); }); // end of loop for every edited rows rel_fields_list = $.param(relation_fields); transform_fields_list = $.param(transform_fields); // Make the Ajax post after setting all parameters /** * @var post_params Object containing parameters for the POST request */ var post_params = {'ajax_request' : true, 'sql_query' : full_sql_query, 'token' : g.token, 'server' : g.server, 'db' : g.db, 'table' : g.table, 'clause_is_unique' : is_unique, 'where_clause' : full_where_clause, 'fields[multi_edit]' : me_fields, 'fields_name[multi_edit]' : me_fields_name, 'fields_type[multi_edit]' : me_fields_type, 'fields_null[multi_edit]' : me_fields_null, 'rel_fields_list' : rel_fields_list, 'do_transformations' : transformation_fields, 'transform_fields_list' : transform_fields_list, 'relational_display' : relational_display, 'goto' : 'sql.php', 'submit_type' : 'save' }; if (!g.saveCellsAtOnce) { $(g.cEdit).find('*').prop('disabled', true); $(g.cEdit).find('.edit_box').addClass('edit_box_posting'); } else { $(g.o).find('div.save_edited').addClass('saving_edited_data') .find('input').prop('disabled', true); // disable the save button } $.ajax({ type: 'POST', url: 'tbl_replace.php', data: post_params, success: function (data) { g.isSaving = false; if (!g.saveCellsAtOnce) { $(g.cEdit).find('*').removeProp('disabled'); $(g.cEdit).find('.edit_box').removeClass('edit_box_posting'); } else { $(g.o).find('div.save_edited').removeClass('saving_edited_data') .find('input').removeProp('disabled'); // enable the save button back } if (typeof data !== 'undefined' && data.success === true) { PMA_ajaxShowMessage(data.message); // update where_clause related data in each edited row $(g.t).find('td.to_be_saved').parents('tr').each(function () { var new_clause = $(this).data('new_clause'); var $where_clause = $(this).find('.where_clause'); var old_clause = $where_clause.val(); var decoded_old_clause = PMA_urldecode(old_clause); var decoded_new_clause = PMA_urldecode(new_clause); $where_clause.val(new_clause); // update Edit, Copy, and Delete links also $(this).find('a').each(function () { $(this).attr('href', $(this).attr('href').replace(old_clause, new_clause)); // update delete confirmation in Delete link if ($(this).attr('href').indexOf('DELETE') > -1) { $(this).removeAttr('onclick') .unbind('click') .bind('click', function () { return confirmLink(this, 'DELETE FROM `' + g.db + '`.`' + g.table + '` WHERE ' + decoded_new_clause + (is_unique ? '' : ' LIMIT 1')); }); } }); // update the multi edit checkboxes $(this).find('input[type=checkbox]').each(function () { var $checkbox = $(this); var checkbox_name = $checkbox.attr('name'); var checkbox_value = $checkbox.val(); $checkbox.attr('name', checkbox_name.replace(old_clause, new_clause)); $checkbox.val(checkbox_value.replace(decoded_old_clause, decoded_new_clause)); }); }); // update the display of executed SQL query command if (typeof data.sql_query != 'undefined') { //extract query box var $result_query = $($.parseHTML(data.sql_query)); var sqlOuter = $result_query.find('.sqlOuter').wrap('

').parent().html(); var tools = $result_query.find('.tools').wrap('

').parent().html(); // sqlOuter and tools will not be present if 'Show SQL queries' configuration is off if (typeof sqlOuter != 'undefined' && typeof tools != 'undefined') { $existing_query = $(g.o).find('.result_query'); // If two query box exists update query in second else add a second box if ($existing_query.find('div.sqlOuter').length > 1) { $existing_query.children(":nth-child(4)").remove(); $existing_query.children(":nth-child(4)").remove(); $existing_query.append(sqlOuter + tools); } else { $existing_query.append(sqlOuter + tools); } PMA_highlightSQL($existing_query); } } // hide and/or update the successfully saved cells g.hideEditCell(true, data); // remove the "Save edited cells" button $(g.o).find('div.save_edited').hide(); // update saved fields $(g.t).find('.to_be_saved') .removeClass('to_be_saved') .data('value', null) .data('original_data', null); g.isCellEdited = false; } else { PMA_ajaxShowMessage(data.error, false); if (!g.saveCellsAtOnce) { $(g.t).find('.to_be_saved') .removeClass('to_be_saved'); } } } }); // end $.ajax() }, /** * Save edited cell, so it can be posted later. */ saveEditedCell: function () { /** * @var $this_field Object referring to the td that is being edited */ var $this_field = $(g.currentEditCell); var $test_element = ''; // to test the presence of a element var need_to_post = false; /** * @var field_name String containing the name of this field. * @see getFieldName() */ var field_name = getFieldName($(g.t), $this_field); /** * @var this_field_params Array temporary storage for the name/value of current field */ var this_field_params = {}; /** * @var is_null String capturing whether 'checkbox_null__' is checked. */ var is_null = $(g.cEdit).find('input:checkbox').is(':checked'); var value; if ($(g.cEdit).find('.edit_area').is('.edit_area_loading')) { // the edit area is still loading (retrieving cell data), no need to post need_to_post = false; } else if (is_null) { if (!g.wasEditedCellNull) { this_field_params[field_name] = null; need_to_post = true; } } else { if ($this_field.is('.bit')) { this_field_params[field_name] = $(g.cEdit).find('.edit_box').val(); } else if ($this_field.is('.set')) { $test_element = $(g.cEdit).find('select'); this_field_params[field_name] = $test_element.map(function () { return $(this).val(); }).get().join(","); } else if ($this_field.is('.relation, .enum')) { // for relation and enumeration, take the results from edit box value, // because selected value from drop-down, new window or multiple // selection list will always be updated to the edit box this_field_params[field_name] = $(g.cEdit).find('.edit_box').val(); } else if ($this_field.hasClass('hex')) { if ($(g.cEdit).find('.edit_box').val().match(/^[a-f0-9]*$/i) !== null) { this_field_params[field_name] = $(g.cEdit).find('.edit_box').val(); } else { var hexError = '

' + PMA_messages.strEnterValidHex + '
'; PMA_ajaxShowMessage(hexError, false); this_field_params[field_name] = PMA_getCellValue(g.currentEditCell); } } else { this_field_params[field_name] = $(g.cEdit).find('.edit_box').val(); } if (g.wasEditedCellNull || this_field_params[field_name] != PMA_getCellValue(g.currentEditCell)) { need_to_post = true; } } if (need_to_post) { $(g.currentEditCell).addClass('to_be_saved') .data('value', this_field_params[field_name]); if (g.saveCellsAtOnce) { $(g.o).find('div.save_edited').show(); } g.isCellEdited = true; } return need_to_post; }, /** * Save or post currently edited cell, depending on the "saveCellsAtOnce" configuration. */ saveOrPostEditedCell: function () { var saved = g.saveEditedCell(); if (!g.saveCellsAtOnce) { if (saved) { g.postEditedCell(); } else { g.hideEditCell(true); } } else { if (saved) { g.hideEditCell(true, true); } else { g.hideEditCell(true); } } }, /** * Initialize column resize feature. */ initColResize: function () { // create column resizer div g.cRsz = document.createElement('div'); g.cRsz.className = 'cRsz'; // get data columns in the first row of the table var $firstRowCols = $(g.t).find('tr:first th.draggable'); // create column borders $firstRowCols.each(function () { var cb = document.createElement('div'); // column border $(cb).addClass('colborder') .mousedown(function (e) { g.dragStartRsz(e, this); }); $(g.cRsz).append(cb); }); g.reposRsz(); // attach to global div $(g.gDiv).prepend(g.cRsz); }, /** * Initialize column reordering feature. */ initColReorder: function () { g.cCpy = document.createElement('div'); // column copy, to store copy of dragged column header g.cPointer = document.createElement('div'); // column pointer, used when reordering column // adjust g.cCpy g.cCpy.className = 'cCpy'; $(g.cCpy).hide(); // adjust g.cPointer g.cPointer.className = 'cPointer'; $(g.cPointer).css('visibility', 'hidden'); // set visibility to hidden instead of calling hide() to force browsers to cache the image in cPointer class // assign column reordering hint g.reorderHint = PMA_messages.strColOrderHint; // get data columns in the first row of the table var $firstRowCols = $(g.t).find('tr:first th.draggable'); // initialize column order $col_order = $(g.o).find('.col_order'); // check if column order is passed from PHP if ($col_order.length > 0) { g.colOrder = $col_order.val().split(','); for (var i = 0; i < g.colOrder.length; i++) { g.colOrder[i] = parseInt(g.colOrder[i], 10); } } else { g.colOrder = []; for (var i = 0; i < $firstRowCols.length; i++) { g.colOrder.push(i); } } // register events $(g.t).find('th.draggable') .mousedown(function (e) { $(g.o).addClass("turnOffSelect"); if (g.visibleHeadersCount > 1) { g.dragStartReorder(e, this); } }) .mouseenter(function (e) { if (g.visibleHeadersCount > 1) { $(this).css('cursor', 'move'); } else { $(this).css('cursor', 'inherit'); } }) .mouseleave(function (e) { g.showReorderHint = false; $(this).tooltip("option", { content: g.updateHint() }); }) .dblclick(function (e) { e.preventDefault(); $("
") .prop("title", PMA_messages.strColNameCopyTitle) .addClass("modal-copy") .text(PMA_messages.strColNameCopyText) .append( $("") .prop("readonly", true) .val($(this).data("column")) ) .dialog({ resizable: false, modal: true }) .find("input").focus().select(); }); $(g.t).find('th.draggable a') .dblclick(function (e) { e.stopPropagation(); }); // restore column order when the restore button is clicked $(g.o).find('div.restore_column').click(function () { g.restoreColOrder(); }); // attach to global div $(g.gDiv).append(g.cPointer); $(g.gDiv).append(g.cCpy); // prevent default "dragstart" event when dragging a link $(g.t).find('th a').bind('dragstart', function () { return false; }); // refresh the restore column button state g.refreshRestoreButton(); }, /** * Initialize column visibility feature. */ initColVisib: function () { g.cDrop = document.createElement('div'); // column drop-down arrows g.cList = document.createElement('div'); // column visibility list // adjust g.cDrop g.cDrop.className = 'cDrop'; // adjust g.cList g.cList.className = 'cList'; $(g.cList).hide(); // assign column visibility related hints g.showAllColText = PMA_messages.strShowAllCol; // get data columns in the first row of the table var $firstRowCols = $(g.t).find('tr:first th.draggable'); // initialize column visibility var $col_visib = $(g.o).find('.col_visib'); // check if column visibility is passed from PHP if ($col_visib.length > 0) { g.colVisib = $col_visib.val().split(','); for (var i = 0; i < g.colVisib.length; i++) { g.colVisib[i] = parseInt(g.colVisib[i], 10); } } else { g.colVisib = []; for (var i = 0; i < $firstRowCols.length; i++) { g.colVisib.push(1); } } // make sure we have more than one column if ($firstRowCols.length > 1) { var $colVisibTh = $(g.t).find('th:not(.draggable)'); PMA_tooltip( $colVisibTh, 'th', PMA_messages.strColVisibHint ); // create column visibility drop-down arrow(s) $colVisibTh.each(function () { var $th = $(this); var cd = document.createElement('div'); // column drop-down arrow var pos = $th.position(); $(cd).addClass('coldrop') .click(function () { if (g.cList.style.display == 'none') { g.showColList(this); } else { g.hideColList(); } }); $(g.cDrop).append(cd); }); // add column visibility control g.cList.innerHTML = '
'; var $listDiv = $(g.cList).find('div'); var tempClick = function () { if (g.toggleCol($(this).index())) { g.afterToggleCol(); } }; for (var i = 0; i < $firstRowCols.length; i++) { var currHeader = $firstRowCols[i]; var listElmt = document.createElement('div'); $(listElmt).text($(currHeader).text()) .prepend(''); $listDiv.append(listElmt); // add event on click $(listElmt).click(tempClick); } // add "show all column" button var showAll = document.createElement('div'); $(showAll).addClass('showAllColBtn') .text(g.showAllColText); $(g.cList).append(showAll); $(showAll).click(function () { g.showAllColumns(); }); // prepend "show all column" button at top if the list is too long if ($firstRowCols.length > 10) { var clone = showAll.cloneNode(true); $(g.cList).prepend(clone); $(clone).click(function () { g.showAllColumns(); }); } } // hide column visibility list if we move outside the list $(g.t).find('td, th.draggable').mouseenter(function () { g.hideColList(); }); // attach to global div $(g.gDiv).append(g.cDrop); $(g.gDiv).append(g.cList); // some adjustment g.reposDrop(); }, /** * Initialize grid editing feature. */ initGridEdit: function () { function startGridEditing(e, cell) { if (g.isCellEditActive) { g.saveOrPostEditedCell(); } else { g.showEditCell(cell); } e.stopPropagation(); } // create cell edit wrapper element g.cEditStd = document.createElement('div'); g.cEdit = g.cEditStd; g.cEditTextarea = document.createElement('div'); // adjust g.cEditStd g.cEditStd.className = 'cEdit'; $(g.cEditStd).html('
'); $(g.cEditStd).hide(); // adjust g.cEdit g.cEditTextarea.className = 'cEdit'; $(g.cEditTextarea).html('
'); $(g.cEditTextarea).hide(); // assign cell editing hint g.cellEditHint = PMA_messages.strCellEditHint; g.saveCellWarning = PMA_messages.strSaveCellWarning; g.alertNonUnique = PMA_messages.strAlertNonUnique; g.gotoLinkText = PMA_messages.strGoToLink; // initialize cell editing configuration g.saveCellsAtOnce = $(g.o).find('.save_cells_at_once').val(); g.maxTruncatedLen = PMA_commonParams.get('LimitChars'); // register events $(g.t).find('td.data.click1') .click(function (e) { startGridEditing(e, this); // prevent default action when clicking on "link" in a table if ($(e.target).is('.grid_edit a')) { e.preventDefault(); } }); $(g.t).find('td.data.click2') .click(function (e) { $cell = $(this); // In the case of relational link, We want single click on the link // to goto the link and double click to start grid-editing. var $link = $(e.target); if ($link.is('.grid_edit.relation a')) { e.preventDefault(); // get the click count and increase var clicks = $cell.data('clicks'); clicks = (typeof clicks === 'undefined') ? 1 : clicks + 1; if (clicks == 1) { // if there are no previous clicks, // start the single click timer timer = setTimeout(function () { // temporarily remove ajax class so the page loader will not handle it, // submit and then add it back $link.removeClass('ajax'); AJAX.requestHandler.call($link[0]); $link.addClass('ajax'); $cell.data('clicks', 0); }, 700); $cell.data('clicks', clicks); $cell.data('timer', timer); } else { // this is a double click, cancel the single click timer // and make the click count 0 clearTimeout($cell.data('timer')); $cell.data('clicks', 0); // start grid-editing startGridEditing(e, this); } } }) .dblclick(function (e) { if ($(e.target).is('.grid_edit a')) { e.preventDefault(); } else { startGridEditing(e, this); } }); $(g.cEditStd).find('.edit_box').focus(function (e) { g.showEditArea(); }); $(g.cEditStd).on('keydown', '.edit_box, select', function (e) { if (e.which == 13) { // post on pressing "Enter" e.preventDefault(); g.saveOrPostEditedCell(); } }); $(g.cEditStd).keydown(function (e) { if (!g.isEditCellTextEditable) { // prevent text editing e.preventDefault(); } }); $(g.cEditTextarea).find('.edit_box').focus(function (e) { g.showEditArea(); }); $(g.cEditTextarea).on('keydown', '.edit_box, select', function (e) { if (e.which == 13 && !e.shiftKey) { // post on pressing "Enter" e.preventDefault(); g.saveOrPostEditedCell(); } }); $(g.cEditTextarea).keydown(function (e) { if (!g.isEditCellTextEditable) { // prevent text editing e.preventDefault(); } }); $('html').click(function (e) { // hide edit cell if the click is not fromDat edit area if ($(e.target).parents().index($(g.cEdit)) == -1 && !$(e.target).parents('.ui-datepicker-header').length && !$('.browse_foreign_modal.ui-dialog:visible').length ) { g.hideEditCell(); } }).keydown(function (e) { if (e.which == 27 && g.isCellEditActive) { // cancel on pressing "Esc" g.hideEditCell(true); } }); $(g.o).find('div.save_edited').click(function () { g.hideEditCell(); g.postEditedCell(); }); $(window).bind('beforeunload', function (e) { if (g.isCellEdited) { return g.saveCellWarning; } }); // attach to global div $(g.gDiv).append(g.cEditStd); $(g.gDiv).append(g.cEditTextarea); // add hint for grid editing feature when hovering "Edit" link in each table row if (PMA_messages.strGridEditFeatureHint !== undefined) { PMA_tooltip( $(g.t).find('.edit_row_anchor a'), 'a', PMA_messages.strGridEditFeatureHint ); } } }; /****************** * Initialize grid ******************/ // wrap all data cells, except actions cell, with span $(t).find('th, td:not(:has(span))') .wrapInner(''); // create grid elements g.gDiv = document.createElement('div'); // create global div // initialize the table variable g.t = t; // enclosing .sqlqueryresults div g.o = $(t).parents('.sqlqueryresults'); // get data columns in the first row of the table var $firstRowCols = $(t).find('tr:first th.draggable'); // initialize visible headers count g.visibleHeadersCount = $firstRowCols.filter(':visible').length; // assign first column (actions) span if (! $(t).find('tr:first th:first').hasClass('draggable')) { // action header exist g.actionSpan = $(t).find('tr:first th:first').prop('colspan'); } else { g.actionSpan = 0; } // assign table create time // table_create_time will only available if we are in "Browse" tab g.tableCreateTime = $(g.o).find('.table_create_time').val(); // assign the hints g.sortHint = PMA_messages.strSortHint; g.strMultiSortHint = PMA_messages.strMultiSortHint; g.markHint = PMA_messages.strColMarkHint; g.copyHint = PMA_messages.strColNameCopyHint; // assign common hidden inputs var $common_hidden_inputs = $(g.o).find('div.common_hidden_inputs'); g.token = $common_hidden_inputs.find('input[name=token]').val(); g.server = $common_hidden_inputs.find('input[name=server]').val(); g.db = $common_hidden_inputs.find('input[name=db]').val(); g.table = $common_hidden_inputs.find('input[name=table]').val(); // add table class $(t).addClass('pma_table'); // add relative position to global div so that resize handlers are correctly positioned $(g.gDiv).css('position', 'relative'); // link the global div $(t).before(g.gDiv); $(g.gDiv).append(t); // FEATURES enableResize = enableResize === undefined ? true : enableResize; enableReorder = enableReorder === undefined ? true : enableReorder; enableVisib = enableVisib === undefined ? true : enableVisib; enableGridEdit = enableGridEdit === undefined ? true : enableGridEdit; if (enableResize) { g.initColResize(); } if (enableReorder && $(g.o).find('table.navigation').length > 0) // disable reordering for result from EXPLAIN or SHOW syntax, which do not have a table navigation panel { g.initColReorder(); } if (enableVisib) { g.initColVisib(); } if (enableGridEdit && $(t).is('.ajax')) // make sure we have the ajax class { g.initGridEdit(); } // create tooltip for each with draggable class PMA_tooltip( $(t).find("th.draggable"), 'th', g.updateHint() ); // register events for hint tooltip (anchors inside draggable th) $(t).find('th.draggable a') .mouseenter(function (e) { g.showSortHint = true; g.showMultiSortHint = true; $(t).find("th.draggable").tooltip("option", { content: g.updateHint() }); }) .mouseleave(function (e) { g.showSortHint = false; g.showMultiSortHint = false; $(t).find("th.draggable").tooltip("option", { content: g.updateHint() }); }); // register events for dragging-related feature if (enableResize || enableReorder) { $(document).mousemove(function (e) { g.dragMove(e); }); $(document).mouseup(function (e) { $(g.o).removeClass("turnOffSelect"); g.dragEnd(e); }); } // some adjustment $(t).removeClass('data'); $(g.gDiv).addClass('data'); }