f,6J`?zRPiHMpe9pHf5f+7>54$Ϭ|w~!J)Ax:N8M!e9ʦcn5';tCj<&`8apX-}0}Dm5 _L8A`n )rG8_f4l2pW1~(\Y3@(c,~R~уMZ@ `N>@ԉB:)u׺eĉYXMYe+c=t[$h~83aU65ulovJxM@'oB cO48d:"cCq>Sa9M_I-BXb Wd0AX:@ܹ]+ ~RiDkC{97n#{ /MV]b`(|tRK7J/<аlC%2E!#eo`$@륺JkQEe 1Hx {H0 -^ An\?5^ٳWoj,SŚiliJRyʮ);، (z^ov4(7 Ċ95.-V_tU=m NJFa~{WfcѯV\(Ƿt6{F̎C5{L;!^DH?aEƬs ǝeHNqH<笇FN" dV%XX+.&gqWGSV1 LC֛9!92( )/"bY6y/41\KɅ^ڊ]H /TzU3DdoލF(AX5Rő&gwv-?>S!{[ -djZ>OBBlZ6p6x~q nߠg$SO|قGMp]9,k 5.=BY6τ94\EsfڌPч,IfBjE/n{O޺o|pݰ|3bNlZ pb60!G|ȩjyyIp .NɏVQW~ny?I2>u,G/(tL/{ gLn}p"I53arLzoי[ SGӉ" V\:UѳK%+Y(RG}qoE6vdu龟pOݶ3!gG c$]=?!wRfMXGKު_b3 Q$Z5& 7Ip`ʒCPƊ@b8hHV9712lAƎ \xVܤ:oҘ_l`:F^hC<0hbmh[ l_ibHDA}+I'Et/wU(M} y)&ߘ30tnđWB ^8m/6^u-Tciz9Eц0Pl%<~sx=1ZKim&|X4nP[\K'fnҝ"nūm'uPb r~N0d=vwWe6^!kq ^;aD=Op(Ƴ)CU"S0GsJoIe.A!~N,Kv-)h~N1s@ߺ!FȾl] \B{{2C92}g؊9D%~rb<B>䤡3ي(y%OWoJC<7 n+ATSk>})g?pDżl4 V_+V6%+K 9B{3u*>r \_.vS 1٘xJ@?H m #`ϫ*A7W)Ej ,O,qZwMc"}_6r04~l*|JtA(Vc0 W3imB $IxXA|XAJ?NpI|[K2ʅdїMs'6Vt&L@xjEM`fk/F'$xPeX@3rC i`X)0|t\g.*#t̄2Muf^G?J[ x r~ 18x't?rMǥmq*P \q߶O;ʋrۉ>CuQc){E:L*n):&pe[$ b[ʪ <6VMفI`Kw$-З(`K1閟e1%= `|+ZU6oc9FovVVǡEa+VeojoҎzP0wpl@V\-Mo 3nR4|pKC8]jINMØ ~W29K\H{8`g$ڵ\z=-΁SÌ~&2DG8ttW^9z+~Y>zeMgڼl\jWpGT̗CyMfҗYH[ ,&vu]}ad|\_QwpUBG20?{qQaUt1ʬz?PysU:a=AыO* O|ksԲQe{ҰTa'&]<(5`%Cq`}H))_Q7.)yN')i U8Ms_3X!_71^ J8]_zu0kF}e[c52sv7;f4_`FZN(++uv-(VΏ+dH^`aDeV "s($jV#]-4@z{unPV1uY{g:fC59Xʢ۩aDgJusOy51+;72Ibv2#fW!!!SиUCٱL*=ZTxT龻Eϛ*Nwc0Ҽ bZu ^fk׉ S\H6&ƨtT*^uEU~v-ب.bkg {ϮN{Y4:]lٝ~CĚ,BJ9K]wOsOX9y]^D(ϧugz?:uq fE_Dd5jfŁ) R{sK&9'%Sg bQ9nUӎfdf[ ;?VSnVT}:O.Ƥ]׌p e*=/6HX&˻OV/~6ybQV]7XkB.M;.WD!:dtDH4QMz+s0Ou.EVep4ʭ3Zsޟ@q~+IhJRnOQDM&\ #>^I: _zy啣EI9 gs[#hliut⓿93&eW6zl <,O;R~8c^mp؄Z%õ&)p1[rF^d4f#Wi9I6)ǠȅߟgbqHkmKӄ~i"@}Ze`rpl|"t#-anGooWW<#Cw5Ѕ EOTWưQf"U+V; l{bB{e kR^G0n; .dGwa SY,x : qѹ#q t9T(n|}ZM:0:? QiyN\Vu"Z' ȻA sz}Ŏei ]!ω.8PjfEQV{. xfz/@$8^)CU틞U) ]V#_v2gtylJQ==[t8G4pBy "K2(h*5Exo[BEjC(O-i t_ gЗ?Y4E_P_Y鞘+ aMD+)yWOy˝+i@wa|(@K'.ز|T*}7o`#ePfw5mx'Ly^6/3z$9|.Io}$Z_FXjJUQ"<͐'v!%,-p;Ϩ651s\X>_\B0 "}sԃBr{FP6[Xm.1>`%K~p$Ϲ)>>-U# OxZ3Sp'`:Bm,{.Nz:`ZHrձY)pqC?i}wwm1lXW?`LA]K9K i9’Y,}?NI*P_חT/C,Rdd䯻>VT4jt]vm7 'M%+ak[Tg  F =7Ƞ;8>}L& &S0F `Vx efO<җ2c0I>0r#!^u$>>N%{)wyIS8R&b>s85(BDs.Ȏ$,HD7+' 2waZv28b3Zyrf9z8l B*3y0-/cDZë>)Nj:3xe3NR)^o}Yi76u2< 9l0}, o?Sp}Gć@ɽje2hImn\tڼo5ѻliR&PZOo;.LCRї}d!=tp6q=|f8VH28+{9m-LT'dƏ:)3yry-_6Wp0BՊ;Fn=):$=_čj1|C|^6Q>9I\@$$ydd)$y3o:N>}'TG\^Anl=  cD9 B ͅ9 {MUY^+U/5K:.|#}x,Ԏ1Mgx7MXUa;CxW3ŷnT[0ĮSnBSK0u-|] 44dW@j5fыj,brG◱t.hmdnj?$W~p\`ǐ\ܭQ <(673 EGmNT^]FX$@6c :CSX01Å: giee ᳫ^rmﯙ!ɄP!a:U@ƑMVaƵ;:R~= 6F!.[_,sk44᧓&@iʭC_9ؔuv0vzyґ@SՅg2vm0{kcf(V|4;.s 2NΝ;5 EYpjlɷKW%pjZԿ7AvTx <+ m(pbﴎj.d=){ $key = ""; $keys = array_values($index["fields"]); for ($j = 0; $j < count($keys); $j++) { $v = $this->toValue($keys[$j], $i); if (empty($v)) { return -1; } $key .= $v; } $md5Key = md5($key); if (!isset($index["rowkeys"])) { $index["rowkeys"] = array(); } $rows = &$index["rowkeys"]; if (!isset($rows[$md5Key])) { $rows[$md5Key] = array(); } $row = &$rows[$md5Key]; $row[] = $i; if (!isset($index["rowindexs"])) { $index["rowindexs"] = array(); } unset($rows); unset($row); $rows = &$index["rowindexs"]; if (!isset($rows[$i])) { $rows[$i] = array(); } $row = &$rows[$i]; $row[] = $md5Key; } $this->indexs[] = &$index; $r = &$index; } $key = ""; $keys = array_values($r["fields"]); for ($j = 0; $j < count($keys); $j++) { $v = $keyvalues[$keys[$j]]; $key .= $v; } $md5Key = md5($key); $rows = $r["rowkeys"]; if (isset($rows[$md5Key])) { $rowindex = $rows[$md5Key][0]; return $rowindex; } else { return -1; } } public function toCodeTableJSON($pcode) { $vstr = "["; $start = true; for ($j = 0; $j < $this->getRecordCount(); $j++) { $id = $this->toValue("Code", $j); $text = $this->toValue("CodeMean", $j); $pvalue = empty($pcode) ? "" : $this->toValue("PCode", $j); if ($pvalue != $pcode) { continue; } $keys = array(); $keys["PCode"] = $id; $isLeaf = $this->locate($keys) == -1; $pvalue = $this->getSimplejsonstring($pvalue); $id = $this->getSimplejsonstring($id); $text = $this->getSimplejsonstring($text); if ($start) { $start = false; $vstr = $vstr . "{\"CodeMean\":" . $text . ",\"Code\":" . $id . ",\"PCode\":" . $pvalue; } else { $vstr = $vstr . "," . "{\"CodeMean\":" . $text . ",\"Code\":" . $id . ",\"PCode\":" . $pvalue; } if (!$isLeaf) { $vstr .= ",\"isLeaf\":false,\"expanded\":false"; } else { $vstr .= ",\"isLeaf\":true,\"expanded\":false"; } $vstr .= "}"; } $vstr = $vstr . "]"; return $vstr; } public function &getRows() { $this->curRow = NULL; if (empty($this->dataset)) { return array(); } if (empty($this->rows)) { $this->rows = array(); while ($this->next()) { $row = array(); for ($i = 0; $i < $this->getFieldCount(); $i++) { $fieldname = convertDBStringCode($this->getFieldName($i)); $value = $this->convertString($i, $this->valueOf($i)); $row[$fieldname] = $value; $row[$i] = &$row[$fieldname]; } $row[self::$ROW_STATE] = "none"; $this->rows[] = $row; } if (count($this->rows) > 0) $this->curRow = $this->rows[0]; } return $this->rows; } public function isOpenDataset() { return !empty($this->dataset) && $this->dataset !== false; } public function isConnection() { return !empty($this->connection) && $this->connection !== false; } public function simpleLoadFromJSON($json) { $tbname = ""; $where = ""; $orderKeys = ""; $fields = ""; $order = ""; $group = ""; $pagenum = 0; $pageno = 0; return $this->loadFromJSON($json, $tbname, $where, $orderKeys, $fields, $order, $group, $pagenum, $pageno); } public function loadFromJSON($json, &$tbname, &$where, &$orderKeys, &$fields, &$order, &$group, &$pagenum, &$pageno) { try { if (empty($json)) { return self::$JSONEmpty; } $this->closeDataset(); $fields = ""; $tmp = $json["KEYS"]; $primKeys = array(); $this->primkeys = array(); if (!empty($tmp)) { $primKeys = explode(",", $tmp); } $order = ""; $orderKeys = ""; $group = ""; $needquery = true; $pagenum = 1; $pageno = 0; $tbname = $json["TABLENAMES"]; $where = $json["FILTER"]; if (isset($json["FIELDS"])) { $fields = $json["FIELDS"]; } else if (isset($json["FieldNames"])){ $fields = $json["FieldNames"]; } if (isset($json["KEYORDER"])) { $orderKeys = $json["KEYORDER"]; } if (isset($json["ORDER"])) { $order = $json["ORDER"]; } if (isset($json["GROUP"])) { $group = $json["GROUP"]; } if (isset($json["NOTNEEDQUERY"])) { $needquery = strtolower($json["NOTNEEDQUERY"]) != "true"; } if (isset($json["PAGECOUNT"])) { $pagenum = $json["PAGECOUNT"]; } if (isset($json["PAGENO"])) { $pageno = $json["PAGENO"]; } $jsonrows = $json["value"]; if (empty($jsonrows) || count($jsonrows) == 0) { return self::$OK; } $rows = array(); for ($i = 0; $i < count($jsonrows); $i++) { $jsonrow = $jsonrows[$i]; $row = $jsonrow["DATA"]; $rows[] = $row; } if ($needquery) { if (empty($where)) { return self::$NotFoundWhere; } if (count($primKeys) == 0) { return self::$NotFoundPrimKey; } $updatetables = array(); $updatetables = explode(",", $tbname); $this->dataset = $this->simpleSelect($tbname, $fields, $where, $group, $order, $orderKeys, $pagenum, $pageno, array()); if ($this->dataset === false) { return self::$NotOpenDataset; } $this->getRows(); } else { $this->rows = array(); } foreach($primKeys as $key){ $this->primkeys[strtoupper($key)] = $key; } foreach ($rows as $row) { $state = $row["_state"]; $keys = array(); foreach ($primKeys as $primKey) { if ($state == "modified") { $oldkey = $primKey . ".old"; if (isset($row[$oldkey])) { $keys[$primKey] = $row[$oldkey]; continue; } } if (!isset($row[$primKey])) { return self::$NotFoundKey; } $keys[$primKey] = $row[$primKey]; } $curRow = NULL; $index = -1; if ($state == "added") { "ÚՒ ;iߥ59 d0(x,^J8ˈ\ y -)`X!h`6 SC%.moZ\Pbkꆷ.}1g(Pʜ/vƙs[br.;봼7\hpԇ /H(z_'R<^F!%U9*DT=V5+۵7تW0JMThVqTW[p4,N]2$B4H|ngr7?K6ܹgdF٣[=z:T`Bgq߷DD5]ҏrlxvo?,; &|ǘ/j$^ebJUZ4 9:=:8ꊍȋɡR# PlS{Oise cEw[B?|^Dtcf:ѥv/1w' ]gocHT{؇!l)DxoT yʕ~C)|D ւ_ 8C=Ttec>*{{TُtoS@Sie =gg ?ӯ̌-+S l:IpYyS+_UW [3\z oH̚Lk~t޵Ӟ`c ;9ѳC3z A4zdUGH "fJa5Xpa!#hg`X|U CX>L\{w5;R%櫦z0K`G5>I2cޑdWҝ7!B?/w)m$#G@B]Pݱ S*?/|{c0CO_q>%K8daWCXMnn40j/87*2@Z0!U> f`ʕE-k UGٟ P~# oA?`h]/HN gB ;b5FƵ)R$ūtF 6udoU^rO`Jq#bP, tvkvSl'",r\{.f(( #HͰs wyF!`2`xFW"_2^p@ )'A?\r\wwKFWjm06fR0]'T*0\S3zܶ O/ָ;j#0`X(dl*R!}LNX]trżIHLS3Ck\eDgZpU4WٶR@slI?wQÎك۞ ˜B*wŻ|Qۤ+ay RQ X$eg3qIm A0V? rZl\) (UY/n2Ѹi)d+z;ObG}粚kj*a(jZO~ωߛ/Q&6t]݉"X<PW3ygf9|(lBR,&'?Z\9?1m6UiQ3)L-{OZ9ٴYlh u!%fA9?My°liLTV1v m}K3g`:-0l[5Y"նopwƻ# OOU/$ _v|*Q,X.<ƄXf_"kH7(2>_KF"[2M#˜ɂ 0k>kwB%z.3i~Q\uq(S@ ^djgַuݘ#Bz ջrm]د `'{4;ldQ6z f[q [=ޚ!?P)6/Nv)U)ӏЯXaZ}kڟ%ir\\zHWnx% %-3>2*tGxw߈?6ΨKȦyNn^zIBN4gm)4O ;*׸R!j|A@5@J7H$<.\q $rZwݝt.0sv#x4#X ׫&h۔rV'YSr8;,PK5mj^1,ym~7tm c~?" |JSi8yG1.CxՒW^}ס&]/i Z/iӛnʸٝk"UŐfD0c? J&`M`Wt♏u*̌m6~.ztmxKR\2ٌL54,wp-#4m3!N#=W?]4LǸVh^P2Pg+G&gufp|CV`yiazĔ\pA8Q!y&%?p%c0h@L8VP=!p'Sհ;͉=V+.C&aXm30;_8h(DXtn2~f͞ZܡrvbpN5}`;K U awS!"u YU̐G$䅉G:(H<a%vFI &/oxW釽.'I9Tv͸gG=J@q/Eؠqe( /VBL 9 ? N͇6ocpbe7/I-eCu) VP:R2q2d0CR u;Y@;s@TSaRTi#<? hs(@lBFӍM{ۃp@Ui}en&O{A)Ry@fz*VIĜf=<>xx-ݶlqw05H-4~Y{ $Znj"h]By!TW$TyOsKZ2Y3CЎRލ?҆ʒKY=l0D{\[iFx]({~9Dߏ Q[pٳBZ+Z̈:8;Y;m*hO>'xlzKy7s.Ϙز L٩˜Vq 4`$S )O/y:6-"(8L[TW$Y7?#./ ~rf@LL$*~y* N^l%>(3tFr1Hj[>)|'TtYZJ'n89?vҷ*>΍>ݍP+[ WnrOˬ8'2UGwAoAB#ScOa+^.p=[p:] v|0o|[{X7/Zn($.^|bꯥ<vqT׷EB(jp#BM&6?M'Q2/kll.7:9z nD׬t:Jka: BXGB\45M' ˫m_{rrw?DPr߬ոv/JD97 6'6rX%qL?h t"(hwUMbaN +PMzR /%R43,>F֤1)Q7%x4]5sV=Q׳2KO_%^3ĦBIRJOၚXN B(ں4J@eĥݚG_d` wQ?RɆ=V>BK:wI՚uZ ܉y`Mn僠6tVO8\~^ `.~JxG@xdښ*Lkk'k n>k#~Fp\,#Qub ZA J1יw8Z]S{;g~7D"{[ wM3.Mj]<@]@;q6l 8fz^Rnf*# %e;4Z]&„A$2 Ve3mޤU0?2A6N9GV! {>(ʎ{huu_y\9 !"vwtWXg L ;pSYz5 Y~=+CL ΃jj PAx`8VV‹=QVnsM1R&f=-H^;95X^`*`)$Q(jNT+4RMU)z#lZYTsFW%Nʸ8gԓU-?WuIH Rښ~Nl@{ >=6:Z3':=h.+3!}"[si;x#݆@K/vO(z{zH&Qfh5W ]>2k Ln`^r'Cܡh[ӑ?H+fϩUrpSė;NLq_{J{_%k7Hy6 n»dA~B', dͅJp){PӤWmW(f lpApF}6xǓ/t`c;&|K٢w\(c|:p6R+7NK8*pKWjyH k)+xOsbퟺ5UraaiaSb4&J#,rQ(;FeLv(^ԭ]x|:ݸ`0*F8(,4mH,(n/ ?~1z-#;a6IO?օ*k'X>2-&U~5pz=zyPϸ5 %Ċ[JI9\M(ѩ$iNXf$SjX:`r;/W*pW;02޳@>ZU}mFO<3?ץ:&!M\\l܍N(b DL%T2 LR)WXȏ)(6醇Kö Ȕ|xKs85Ar̉b5EKxVPZ(O'ޚXx>ct]IkBw7yLL9-KOt;.2Ӷnj~SŵdoG'2?t*4m(Km9@烸؀x(=i? Itãˈ()!݃SI=֓;hp#e"/(6> |g1{\DL1w2kk}* I?٥Z/'gP/ЂgD Er37_b@:+>0jRVZ:r,Q( BHGO @ZvtxlQ4 Izr mLeViNˠɓ-,+Ķ.Ѽ- ^)B]\1q9RtPv)j5`0!c=al2Q`p-O͞tbm~|<<5$2#Yv뢝 F<&΄6z\ysOnny> {W>X%0{~O7T JuQw-w-s}ݢm4VHKwD!H2I߃r,Zz Bjjå ABI#=6A]됹U/La:ۏߞH$7G`|1+ ZQ u~O+'袄v-3M0\bA "n^a>i2mE o|J wFy{M~b?z36VB/HiA\QRH6@@*. )JKAç?dy8ؔQ*rA B`TznF ny{y&D6`Ѫ-/;d@*ZF2G ApM ,$&Od"g̅4D)gt¬eYu_UD,/!X 3S2٢a:6MDbo',_20,B1$9R5at 1Ϟ @⬟K;o Ku#S﹅3 Fе+