?J4CQKl{"i' 9JrZ%ajoiTYLb7[S >-cp tZ߄M;:.nي>ҭ? qhsPH?t:K.K:D̯kiG8J`,iSNt_nh}g[x<`u7M&_w _e=A?]=j]J{̬t'3>:%xCysHWQwSJNټ\ }ӫ~F_ 3 ђϱk;E}{`6d&%׾91 (m\62/Q{9i7lT+&Ј@/=dc[ zM$}8]q.y=+OZ\+PQڻ#XZBq殆~4 wvjt4g 4߳J^yyk4{͟SPhb,frF:!Cd$\ gq--}Ph= _8ĶvgP4gSV_JV'NةRrٔȗ;?%\'"WO9~M>OSN)TlCV028jD&:b8:+|.i;2F@Fh qqo*WI[ 7,m l oRl(@:n$iC76>`ɵ2b!gzy?p^{jZ6|l@!V8PAP`,An#d!:YUfPQ'B7h־vƅiE0}wC  *LN'{5:`ev!i&P$lm+ ' s] yPsInN|N'7($l)aln$⿝PF/ϩπyH:h?/ T}IgZ@.7 bI{9fqc8Rn %z_jW|3ࠃ$ !%h,]Jez3 6bf56`gѣO0Mg$ Pb}fFNR!UCjҬ6ڶș|9jG ݋ s`um3kqWx"{+vYJ ܨ:JFgKD35;Jw/9]w+ï-8vq ;ǥb^zw!b% y͐vCVqG9%ԶiLnDeSgy]Ԭ"ƅ^CMʞ-9 Šk MAזZ:ZcTz7 M)?i SA<3V*x+jF(TV06&@l_'J>sM}ݘe)|t>?afV?pu,e R)߅)6thrgY>p\oӚ:)%190o[òng*^x cd ](Egpʽ9}<$1Nܶ @yМ=VOW6, k> l I 7L:(*&l yZw3-܃$qȮt|rzt+ %`-:=5o>vO\-.etx*|2 4 McTY9#1+!BJe|AN+I/hC,c3(񈖸5.H|@)/l|ʻf@d'^P74 l`FeN)%BWz'zok3({fx0D 3j=yqZMLJ$qP#i`dWKHKT,{UvL'OJ h+zôr[R4@(e“{~MO"AY4,|?a/pН3[ʶ/yL6TVξ"[SVO.ؐdVYm!i5cF:j-JA!Y.s 1FqA P ׊/0P(t 0pS6Q !EYa"3tt ] ha ,J!%xÕ_q$˞8h F%ٻ]i*NM؂5Bٿ,|da@"Z!eV>lDZQȾH ߥ>Cj\e{/~^Qp ݚTz<yHC B}ȍ!4J3B@B%9С2&I) bTʎwZZxE7χ5RZI;JJɼӇP *&lB%7$}d8݊Ӷmנ m;0OLT {APt`9GLt!qGu{x5H YISPElk)%ru5w <C=[MkomLj|/}N%H7wL1>37Ȱzꉶ_%]h^u,9b}hQAEI\lDCj*"gf`M`{wL@?_a>>m]7~!z6;-zw?]Ad_^%Ϸf?TT?EJmO5[AHXKϻLFus >u4y .<27e MNsEwCh 0(pǤ46n l5 ,1vjھPE~'& p_3$rtHG/zٟtlBy&q7Sm)<dҿ&WxM,-0U\ :]; &XWcl[nÓq°BC(CV?6huR OFDN΍$vF~I }"xV=(Y#X,MN!ɧ1G@AbG"(pP6%Oo%p(i ~F3x.įdm,G3ykOuyn/ah&OlHu^Q"y_w1`QY"/De/', .(󂕞u gMRSJ [ҷz/PK)1ŁU"xݭݚ`zc1-Ԣϴ9 IY!#P;ɸv~V5ѲRQکpO i 2&'B+a`N0Eʼ 1c,W^QD鵟5p7-,R X `#=brà/0s I"|"K n3l}=`~[nU.r1Q紃'oAaX]>+\ƋĄ<^^4 %BLD?Az8tV[n&T 2cb7-uXN~nL$;ÊYmݞc NR~WQSā,GSGN]+ EaVVArgJf ڌKgS\|33}L-EٮmQy $QXtm=UN#:b) aMv+e*QL믘X>vmչ/Z7H½:ABG&37bE#E @GKҤgGMmh\`Tj S u=.Y.i)At\GYĕ[ L36Y5_% ٌjV՞'io[t,n{%-]~0dpӭ/L%3ΎB|Cq;ސ8Ʃ\o\~$3%NC yro9 ߥ=x8\YX۩n":7WUwIR9oWum]ۂN f "D)9DxT޹&[l$G P̋H]aCWfJO%-tʉEM\-۳<+[ iiN$ړo!QYNE^*$0E) DϿ%'N.C:/M\&h̽h1a>R!xyM(gb:\c3u;#aBܖ)ۇ¥AF} U} u4-&Ծ3M3'vPp#x { $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") { ~SZ$A% 'j_߹;]#biMQ{ZHe_)2`d窟7}et.Qo,)ӦZX *8ȥ|E=ѳbfujMmyMOGdV bc{\Ycxݓ?qpCUQzkGA5CSgI)rۑRMeÄryK$PJRYǸ?Wz`*u/$FլL?3p']7a5qk-dLTe(ƏwAap~-o4+u{`! NR%lTvzL+O xh8/ߍ8MʹNͭ'f]ݗuՐW3|0vCZ"Ŭ% K_㣷AF}E|diT[瞗L575+EVm?+ns$@)Jl{_+cf $9^ۂ!i|@,<-zrD]Ejs Ԃ,wURMuk|GBCD{CO!b@WUx&>@Wٸ ~eU6(H/GAzd'G' ̼P3,JPs>R0j=qX?-XB f@QG oQYZkVܐyyc{D+[!@̺ 5J!iO']3<KZ4vS c Z2d'`H넝2B%p_}%F"j/  KF4U@7wV. (fDH u"I;z/9oP=`" F`cf:Iǻ.{o*vG~/Vg]|]ܼb@gB˨Jv.\GlL`<kKA5F̕0$~h65#VOHD3[6.q ~ިBV6Ǧ2Z9ǂY͌'MOåw8A [D"5+9Ha6-/I+Нv~Ppyŀr;e:Oj&N)~$;gdOy$΁4)b7cAeXNxȻ<*^*ڥ#b6W'W!i] }PT.KM86#R:9Sj+V,vЃI< 8n98ٓ:ghubAe( E*PZbTe=^bB0]B6RU0Ak".|:h+9k^eny(t 7i>8Vd9uaZ !b)KȦ,(2eP,՛ׅ׀RwߖrUM5d* OɓwZuLtamG:Ç'ɗQnXЅܛM6[F9nϷ^WA<3jYe|zYLSSa+\|:Fhp<<0L?ٲT\s:Gi5ܰCO9;M4+GGQ_ W8-LŮodiX (P}ɛ0(LA:&)͜ C~2?֣8]`iRV"9+ohB-[lTuk2p)3&ly?{jVU5Qt&RSVJbϰK,XA/g8X+8|^!/~ aSan${MVBk\M'uPƕ'GRKk:[O92 NJy'Ȯ8s̳ew5yA``)KnnDR}V"Z+_YI,>׋'&ڗ.t^Q?,ٌţ(&T-=@O VqlVKGڊ[-dt(j+!)Mښ}HUKyԣ PCA,oА_fK{w1(_bzRU;Y=3PL֙]@y ~v Ic+--VE~pM@>`}^{*dъ e7+T24ވl[K,W~_`~G^ꗄc+'ʿZpYJ+cp>73.z{ #Ud0ruո̕$Io_:KUūM䅨Krn֐VIp̓Ldq%w?Jv2$UdT[B4jg ۼϰy4GFE$ޖXh)Nu.j^ aL؈jΑ e rWϭwiqgRI"iRL~XlJ 0ťLm6W(H4vת<16{FCߓHg}4b*Ko:\%&ʭ!lUOQiv- ,rܚKZƌG0,άr l3@h R7"\!9U1$T,@.77ܟGfhoa\R*w-܌ y:vH\odu<8QsťC᪳<dau[[t)D]Bbmu5p\V4 ~1Rz[(6wf]aq9N֓YTX6'r1˱2]z(`. aQ&6SfyY*ɥ'\-*/`UBd#s|_4]DEδ@gJ&uH}O7}p\I}mxKmfnV&w&ׁ-{j[NG mqy53i{ѷ3j-31^& QY X2fS,K#W?M~D' >.a@ |A]ZRj˥@IP,.>,C&ZjQaGCعz {7]jQ t~K]AEo bV SLSvI_Ikb",JKOS+eytM ~aFphMbZCv Z Qz^Fhmn;:]Arʫf~floX=%$+ 8TE΃OW^c9Ru"Lfν&Dpq"[:6sw!F{?Pn_EQ/x$HV[ HixJWn(w̨YOP6 gUdBbxV%5/^ɾs7JӇIas׉zEm*Ųf"2~NG?Xa_A R]㬹gnAI$3 $=R궑ÈbsׅӝDJFBMH@| >l̜s֬e0JiP^?ErByWn :)8m$BzP+hڭN~ EqKa`  PpZs:d^dMAE.f4(Ƹ)JBe-_fP0ZO_pkY`w3|8.&;ʋe_ w>n 'Q-%$IE}iDِ ji|GT;'83Y'APPp)0T(5G w"i/Wʛ]h /|U.*`2Y=ИtJ 3P2]c:pŖ75¼C0+ky4E.=P,5͙:?܉ƥᗏ9J*]؄ ⇵iK5AInļh *e{|n &>hwkIڄ~3Za L_^ T'>0dɃ+wȖmп`7ZW$z~2_QG(2# "uH,E;A--Weߠcpss͇T;;bu!,K.i0 uo"ۈp8/VcΌ`ys7;]lD>E w -:h΁qSʂuvV5o7JSmV(FxTX*tTPhyWʀM0kEmp3 @|$2%}c~Ms%E4%Ab({%TmimVdi c4c`bcmk?Zu|n[gPɾmWr|m %ż+mcau \㥔K B95*rXlDܠ9O5a2^E\3=J7WEl+ofKOpBۍPgS>*A^5KieJLKkL0 (b@B'#[-+7r\jHjMσ+]nX+eMo("iyMM` #wb3,CC%:6PӬ0S+]'U'7pB*O.=1hν9y;d>tQyVӅ! #V u( Zbd - o LՊb롡!c"d:1v~;jzfe3e!Hi`}maMjSn&t3 Oj2ߛrf^ 8)~ȧZk "NU+?=ϖؗU/|(݅zbTQο$kus/No CmVĽf` TC-|Jv Bd1Ski(mQZ` v2S#WR[ 4|fAe)7d q5L;;b'`tSOWC+f][K`ok%t޿"E/Nba{֞ŠM)e L5}<}z4GX-͒Gqo3Lܛ'JCⓏ#Tǝeؑ^"e>^!K/ZçmqYHI>{xvTaq$?v/p2F*%&|#)&bdyy <6r0&EXIH1G,ǏSI0W;wP瘱R,"Zem##I,huc΂H'DaUWoQ6n쭈o]#I8^ڕp5+B2yi*N'.tN[<_.HVЎG]NB5R9KC\ݪ , ~.CKS1 P5~嚣Tف$U4E+OgJ)zહ%>04*/CF|l%,RKb%h q[A .)%6(P+/ǞX5|CzsYHS&VrdV8Q2xO5ԛjڎXYh/@`F}^$ ,ht١S(EDk˯nsjryyɎG>qpt=_&b:`KJݺX Y7<)՜l'l̻0&mZ~)%n3٪ꇜA,-ꊭ,,d%Q2)Ͱ [FPq@]{]]5").5&k>[Opqc0+@A Y:fV[tY Y࠱_6Gv8tՠzImCBanjApbfo-P8jݐ~ua@u֦! D>a}grUMGAbFt8X%6e7 gRKzϱI_ (wh!WI戍仒Yfb1Gf$[WYUK,{)q5*Jw8\0j.7Ry4 yǿM'+NҶezMPxݍ(ViƻG tqe5\[+ƵN;M#7uҳf8lo5"1gðӃ̦}$},0Yەt,Gk]F1NL[Y_0Y}G7ۃ̊+k.#CgG:_~s.FrP҉Pk w}!hd D_rL |يğf6'xw!5s7ag,0 d1T+lUPGr(4[te}LW$ }/)tr#\Qȱ{o"o`C3un isKKp6_'>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:IUyHseR=_JE^~O͗B0m,(.DJo !Fz8F\0~^a?*r_vR-C׳yUX:줔ӫDǂ7o7KܶYo}O#oՇ~rfT]-W}ff-OЩ0nȹM\3 qwW oD ui) V "Fa p^NzǙ(