ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙ r_out.id) as INFO FROM `routenames` as r_in INNER JOIN `routenames` as r_out ON r_in.customerid = r_out.customerid WHERE r_in.route_in=NEW.route_in AND r_out.route_out = NEW.route_out INTO Temp; CASE Temp WHEN 0 THEN SET NEW.info = "LOOP"; WHEN 1 THEN SET NEW.info = "OK"; ELSE SET NEW.info = "SUSPEND"; END CASE; END IF; -- Pricelists SELECT rate_sell FROM pricelists INNER JOIN destinations ON (destinations.id=pricelists.destination) WHERE (route_in = NEW.route_in) AND (pricelists.customerid = $lastid) AND (destinations.customerid = $lastid) AND (destinations.chargingcase = NEW.chargingcase) AND NEW.date > valid_from ORDER BY valid_from DESC LIMIT 1 INTO Curr; SET NEW.route_sell = Curr; SET NEW.price_sell = ROUND(Curr * (NEW.chduration/60), 4); SET Curr = 0; SELECT rate_buy FROM pricelists INNER JOIN destinations ON (destinations.id=pricelists.destination) WHERE (route_out = NEW.route_out) AND (pricelists.customerid = $lastid) AND (destinations.customerid = $lastid) AND (destinations.chargingcase = NEW.chargingcase) AND NEW.date > valid_from ORDER BY valid_from DESC LIMIT 1 INTO Curr; SET NEW.route_buy = Curr; SET NEW.price_buy = ROUND(Curr * (NEW.chduration/60), 4); IF (NEW.route_buy > NEW.route_sell) THEN SET NEW.info = "WARNING"; END IF; END; SQL; if (!mysql_query($sql)) echo mysql_errorhandler($sql, "Create Trigger for Customertable (ct_$lastid) failed."); } function GetCustomerDetails($customerid) { $sql = "SELECT * FROM customers WHERE id = ".$customerid." LIMIT 1"; $result = mysql_query($sql); $row = mysql_fetch_array($result,MYSQL_ASSOC); $returnstr = $row["company"]."
".$row["street"]; return $returnstr; } function GetCustomerRow($customerid) { $sql = "SELECT * FROM customers WHERE id = ".$customerid." LIMIT 1"; $result = mysql_query($sql); $row = mysql_fetch_array($result,MYSQL_ASSOC); return $row; } function GetRoutes($customerid,$field) { $_data = array(); $sql = "SELECT DISTINCT(".$field.") FROM routenames WHERE customerid = ".$customerid." ORDER BY route_in"; $result = mysql_query($sql); while($row = mysql_fetch_array($result,MYSQL_ASSOC)) { $_data[] = $row[$field]; } return $_data; } function filecollect($conn_id, $dir) { if (DEBUG) echo ("[".date("d.m.Y H:i:s")."] reading filelist for: '$dir'.\n"); static $flist=array(); $files = ftp_nlist($conn_id, $dir); #var_dump($files); if (is_array($files)) { if (DEBUG) echo ("[".date("d.m.Y H:i:s")."] files: ".print_r($files, true)."\n"); foreach ($files as $file) { if (DEBUG) echo ("[".date("d.m.Y H:i:s")."] file: $file\n"); #$size = ftp_size($conn_id, $file); $size = 99; #if (DEBUG) echo ("[".date("d.m.Y H:i:s")."] size: $size\n"); if ($size != "-1"){ $flist[] = $file; } } } else { if (DEBUG) echo ("[".date("d.m.Y H:i:s")."] ftp_nlist() returned no files.\n"); } return $flist; } function GetField($table,$field,$val,$return,$queryart) { if($queryart == "LIKE") { $sql = mysql_query("SELECT * FROM ".$table." WHERE ".$field." LIKE '".$val."%'"); }else{ $sql = mysql_query("SELECT * FROM ".$table." WHERE ".$field." = '".$val."'"); } $cnt_rows = mysql_num_rows($sql); if($cnt_rows == 0) { return $val; }else{ while ($row = mysql_fetch_array($sql,MYSQL_ASSOC)) { return $row[$return]; } } } function asc2hex($temp) { $len = strlen($temp); for ($i=0; $i<$len; $i++) $data.=sprintf("%02x",ord(substr($temp,$i,1))); return strtoupper($data); } function hex2asc($temp) { $len = strlen($temp); for ($i=0;$i<$len;$i+=2) $data.=chr(hexdec(substr($temp,$i,2))); return strtoupper($data); } function FillEmpty($temp,$length,$align) { while (strlen($temp) < $length) { if($align == "left") { $temp .= "20"; }elseif($align == "right") { $temp = "20".$temp; } } return ($temp); } function IsIntern($customerid) { if ($customerid == "0") { return true; exit; } else { $sql = "SELECT * FROM customers WHERE id = " . $customerid; $result = mysql_query($sql); $row = mysql_fetch_array($result,MYSQL_ASSOC); return $row['category'] == 'intern'; } } function AddToLog($message, $stdout = false) { //CAW: TODO: Aus Config holen $logfile = "/home/billing/logs/".date("Y-m-d").".log"; $line = $message."\n"; $f = fopen($logfile,"a"); fputs($f,$line); fclose($f); if ($stdout) { echo $line; } } function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } /** * Generiert drei Auswahllisten zur Auswahl eines Datums * @param string $praefix Präfix für die Feldnamen, die dann heißen praefix_tag, praefix_monat praefix_jahr * @param int $selectedTag vorausgewählter Tag * @param int $selectedMonat vorausgewählter Monat * @param int $selectedJahr vorausgewähltes Jahr * @return html HTML-Code */ function showDateSelect($praefix="", $selectedTag = 0, $selectedMonat = 0, $selectedJahr = 0) { if($selectedTag=="0"){ $selectedTag=date("d");} if($selectedMonat=="0"){ $selectedMonat=date("m");} if($selectedJahr=="0"){ $selectedJahr=date("Y");} $ausgabe.=" \n"; $ausgabe.="\n"; $ausgabe.="\n"; return $ausgabe; } function showTimeSelect($praefix="",$selectedStunde=-1,$selectedMinute=-1, $increment=5){ if ($selectedStunde=="-1") { $selectedStunde=date("H");} if ($selectedMinute=="-1") { $selectedMinute=date("i");} $selectedMinute = floor($selectedMinute/$increment)*$increment; $ausgabe="\n"; $ausgabe.="\n"; return $ausgabe; } function showDestinationSelect($selectedDestination=0, $showLabel=true, $all=true) { $s = ''; if ($showLabel) { $s .= ''; } $s .= '').'  of '.$num_pages; //########## "+100"-Link if($page+$skip < $num_pages) { $links[] = " $page+$skip))."\">+$skip"; } //########## ">>"-link (ein Seite weiter) if($page+1 < $num_pages) { $links[] = " $page+1))."\">next"; } //########## "last"-link (zur letzten Seite) if($page < $num_pages) { $links[] = " $num_pages))."\">last"; } //########## Zusammenfügen der einzelnen Links zu einem String return implode(" | ", $links); } // Erzeugt neuen Requeststring, alle werden 'durchgeschleift', $NewParams werden ersetzt function GetRequestString($RequestParams, $NewParams = array(), $base = '') { foreach ($RequestParams as $Param) { if (array_key_exists($Param, $NewParams)) { $ausgabe[] = $Param.'='.$NewParams[$Param]; } elseif (isset($_REQUEST[$Param]) and $_REQUEST[$Param] != '') { if (is_array($_REQUEST[$Param])) { foreach ($_REQUEST[$Param] as $key => $value) { $ausgabe[] = $Param.'%5B'.$key.'%5D='.$_REQUEST[$Param][$key]; } } else { $ausgabe[] = $Param.'='.$_REQUEST[$Param]; } } } return ( $base == '' ? $_SERVER['PHP_SELF'] : $base).'?'.implode('&',$ausgabe); } // Erzeugt ein Form, alle sind 'hidden', $NewParams werden ausgelassen (müssen selber in $options definiert werden) function GetRequestForm($RequestParams,$NewParams, $header, $options) { foreach ($RequestParams as $Param) { if (!in_array($Param,$NewParams)) { $ausgabe .= ''; } } return '
'.$ausgabe.$options.'
'; } /** * Erzeugt die Tabellenüberschriften in Abhängigkeit davon ob es als * HTML-Ausgabe (dann mit Links zur Sortierung nach der entsprechenden Spalte) oder * als Export dienen soll (dann nur die Überschrift) */ function OutputTableHeader($result, $fields, $tableHeader = '') { global $RequestParams; if($_REQUEST['action'] == "csv") { return (count($fields)>0) ? implode(';',Fields2Array($result, $fields, $tableHeader))."\r\n" : ''; } else { $ausgabe .= ''; foreach (Fields2Array($result, $fields, $tableHeader) as $feld=>$titel) { if (is_numeric($feld)) $feld++; // MySQL kann nach numerischm Index sortieren, fängt aber bei 1 an statt 0 $pfeil = ""; if($_REQUEST['orderFeld'] == $feld) { $direction = $_REQUEST['orderDirection']=="ASC"? "DESC" : "ASC"; $pfeil = $_REQUEST['orderDirection']=="ASC" ?"(v)" : "(^)"; } else { $direction = "ASC"; } if($_REQUEST['action']=='export' || $_REQUEST['action']=='excel') { $ausgabe.=""; } else { $ausgabe.=""; } } $ausgabe .= ''; } return $ausgabe; } function Fields2Array($result, $fields, $tableHeader = '') { if (is_array($tableHeader)) { foreach ($fields as $field) { $fieldnames[mysql_field_name($result, $field)] = $tableHeader[mysql_field_name($result, $field)]; } } else { foreach ($fields as $field) { $fieldnames[] = mysql_field_name($result, $field); } } return $fieldnames; } /*function show_sql($sql) { #static $count; global $user_config; if (!$user_config['debug']) return; include_once('php-dump.php'); echo 'show sql'; echo ''; dumpq($sql); echo ''; } */ function show_sql($sql) { global $user_config; if (!isset($user_config['debug']) or !$user_config['debug']) { return; } include_once('geshi/geshi.php'); $geshi = new GeSHi($sql, 'mysql'); #$geshi->add_keyword(1, 'IFNULL'); #$geshi->add_keyword(1, 'NULLIF'); #$geshi->add_keyword(1, 'SUM'); echo 'show sql'; echo ''; } function AddOrdinalSuffix($num) { //can handle negative numbers (-1st, -12th, -21st) $last2Digits = abs($num % 100); $lastDigit = $last2Digits % 10; //the only nonconforming set is numbers ending in <...eleventh, ...twelfth, ...thirteenth> return $num.substr("thstndrd", ($last2Digits > 10 && $last2Digits < 14) || $lastDigit > 3 ? 0 : $lastDigit * 2, 2); } function ShowMachineSelect($id = 'none') { $MachineSelect = '\n"; } function ShowCustomerSelect($id = 'none') { $CustomerSelect = '\n"; } function ShowRouteOriginSelect($machine = -1 , $customer = -1, $selected = 'none', $label = false, $filterRO99 = false) { if ($label) echo ''; $RouteOriginSelect = '\n"; } /** Zeigt ein MySQL-Resultset "hübsch" an * */ function ShowTable($result, $format = '', $sortable = false, $vertical = false, $return = false) { //global $RequestParams; $num_fields = mysql_num_fields($result); // F�r jede Spalte kann ein Format angegeben werden, default: %s if ($format != '') { $formats = explode('|',$format); for ($i=0; $i<$num_fields; $i++) { if ($formats[$i] != '') { $fields[] = $i; } } } else { $formats = array_fill(0, mysql_num_fields($result), '%s'); $fields = range(0, $num_fields-1); } $ausgabe = '
$titel $feld, 'orderDirection' => $direction))."\">$titel $pfeil
'; //mysql_field_name($result,0); foreach ($fields as $i) { $ausgabe .= ''; } $ausgabe .= "\n"; $oddrow = true; while ($row = mysql_fetch_row($result)) { $class = $oddrow ? 'odd' : 'even'; $ausgabe .= '\n"; $oddrow = !$oddrow; } $ausgabe .= "
'.mysql_field_name($result, $i).'
'.implode($row,'')."
\n"; /* foreach (Fields2Array($result, $fields, $tableHeader) as $feld=>$titel) { if (is_numeric($feld)) $feld++; // MySQL kann nach numerischem Index sortieren, f�ngt aber bei 1 an statt 0 $pfeil = ""; if ($_REQUEST['orderFeld'] == $feld) { $direction = $_REQUEST['orderDirection']=="ASC"? "DESC" : "ASC"; $pfeil = $_REQUEST['orderDirection']=="ASC" ?"(v)" : "(^)"; } else { $direction = "ASC"; } if ($_REQUEST['action']=='export' || $_REQUEST['action']=='excel') { $ausgabe.="$titel"; } else { $ausgabe.=" $feld, 'orderDirection' => $direction))."\">$titel $pfeil"; } } $ausgabe .= '';*/ if ($return) return $ausgabe; else echo $ausgabe; } function db2screen($value, $type, $html = true) { global $user_config; switch ($type) { case 'currency': $class = $value < 0 ? ' class="minus"' : ''; $value = number_format($value, 2, ',', '.'); if ($html) return "$value ".$user_config['currency'].""; else return "$value ".$user_config['currency']; case 'rate': $class = $value < 0 ? ' class="minus"' : ''; $value = number_format($value, 4, ',', '.'); if ($html) return "$value ".$user_config['currency'].""; else return "$value ".$user_config['currency']; case 'price': $class = $value < 0 ? ' class="minus"' : ''; $value = number_format($value, 4, ',', '.'); if ($html) return "$value ".$user_config['currency'].""; else return "$value ".$user_config['currency']; case 'seconds': $value = number_format($value, 0, ',', '.'); if ($html) return "
$value sec
"; else return "$value sec"; case 'minutes': $value = number_format($value, 0, ',', '.'); if ($html) return "
$value min
"; else return "$value min"; case 'acd': $value = floor($value/60).':'.sprintf('%02u', $value%60); if ($html) return "
$value
"; else return "$value"; case 'percent': case 'asr': if ($html) return "
".number_format($value, 2, ',', '.')."%
"; else return number_format($value, 2, ',', '.')."%"; case 'number': if ($html) return "
".str_replace('.', ',', $value)."
"; else return str_replace('.', ',', $value); case 'rounded': $value = round($value); if ($html) return "
$value
"; else return $value; default: return $value; } } function screen2db($value, $type) { switch ($type) { case 'currency': case 'price': $value = str_replace(',', '.', $value); return floatval($value); case 'percent': return intval($value); } } function mysql_errorhandler($sql='', $message = '', $return = false, $log = false) { if (is_resource($return)) { $link = $return; $return = false; } else { $link = null; } //$ausgabe = "Database Error:
\n"; $ausgabe = ''; if ($message != '') $ausgabe .= "Problem: $message
\n"; if ($sql != '') $ausgabe .= "Query:
".htmlentities($sql)."

\n"; if ($link) { $ausgabe .= "MySQL: (".mysql_errno($link).") - ".mysql_error($link)."
\n"; } else { $ausgabe .= "MySQL: (".mysql_errno().") - ".mysql_error()."
\n"; } if ($return) return $ausgabe; else echo $ausgabe; } /* function makeBackup($customerID,$table) { $host = "localhost"; $user = "web23"; $pass = "christos"; $database = "usr_web23_1"; $folderCustomer = $_SERVER["DOCUMENT_ROOT"]."/backup/customers/"; $timestamp = date("Ymd_His"); system("/usr/bin/mysqldump -u".$user." -p".$pass." -h".$host." ".$database." ".$table." | /bin/gzip >".$folderCustomer."".$timestamp."_".$customerID.".sql.gz", $fp); if (($fp==0) && (false !== chmod("".$folderCustomer."".$timestamp."_".$customerID.".sql.gz", 0666))) { //echo "Backup erfolgreich erstellt!
"; //echo "Download"; AddToLog("[".date("d.m.Y H:i:s")."] [Backup] Backup fuer den gel�schten Customer mit ID $customerID erfolgreich erstellt."); return true; } else { //echo "Fehler beim Erstellen des Backups!
"; AddToLog("[".date("d.m.Y H:i:s")."] [Backup] Fehler beim Backup f�r den gel�schten Customer mit ID $customerID."); return false; } } */ function validate_route($route) { // if (strlen($route) != 14) { // return false; // } return preg_match('|^[\dABCDEF]{14}$|', $route) == 1; } function OddEven($mod = 2) { static $count; return ++$count % $mod ? 'odd' : 'even'; } function SelectFromEnum($table, $field, $default='', $name='', $label='') { if ($label) $output = "
"; if (!$name) $name = $table.'_'.$field; $output = ''; $sql = "SHOW COLUMNS FROM `$table` LIKE '$field'"; $result=mysql_query($sql); if (mysql_num_rows($result)>0) { $row=mysql_fetch_assoc($result); $options=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row['Type'])); $output .= ''; } return "$table.$field is not an ENUM or SET"; } function GetRoutesNames($customerid, $field) { $_data = array(); $sql = "SELECT DISTINCT(".$field."), provider FROM routenames WHERE customerid = ".$customerid." ORDER BY route_in"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) { $_data[$row['provider']] = $row[$field]; } return $_data; } function ShowRouteSelect($CustomerID, $RouteInOut) { // onChange="this.form.submit();" $RouteSelect = '\n"; } function GetCarrierNames($customerid, $field) { $_data = array(); $sql = "SELECT carriers.id, carriers.name FROM carriers INNER JOIN routenames ON (carriers.id = routenames.carrier AND carriers.customerid = routenames.customerid) WHERE carriers.customerid = ".$customerid." ORDER BY carriers.name"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { $_data[$row['id']] = $row['name']; } return $_data; } function ShowCarrierSelect($CustomerID, $CarrierInOut) { // onChange="this.form.submit();" $RouteSelect = '\n"; } function GetVoipCarrierNames($customerid, $field) { $_data = array(); $sql = "SELECT carriers.id, carriers.name FROM carriers INNER JOIN tb_naps ON (carriers.id = tb_naps.carrier AND carriers.customerid = tb_naps.customer_id) WHERE carriers.customerid = ".$customerid." ORDER BY carriers.name"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { $_data[$row['id']] = $row['name']; } return $_data; } function ShowVoipCarrierSelect($CustomerID, $CarrierInOut) { // onChange="this.form.submit();" $RouteSelect = '\n"; } function mysql_evaluate($query, $default_value="undefined") { $result = mysql_query($query); if (!($result)) mysql_errorhandler($query, 'mysql_evaluate failed.'); if (mysql_num_rows($result)==0) return $default_value; else return mysql_result($result,0); } function mysql_evaluate_array($query) { $result = mysql_query($query); if (!($result)) mysql_errorhandler($query, 'mysql_evaluate_array failed.'); $values = array(); for ($i=0; $i $nLength) { // -- String exceeded length, truncate and add trailing dots return substr($strString, 0, $nLength) . $strTrailing; } else { // -- String was already short enough, return the string return $strString; } } /** * OpenSSL-style passwords, shared between anyXess and ProFTPd * * @package anyxess * @link http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-SQL.html ProFTPd and mod_sql mini howto * @param string $password * @return string encoded password */ function encode_password($password) { return '{md5}' . base64_encode(pack("H*", md5($password))); } function si_prefix($number, $precision = 3) { $prefixes = array ('', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'); $div = 1000; $exp = 0; while ($number >= $div) { $number /= $div; $exp++; } $n1 = floor($number); $n2 = substr($number - $n1, 2, $precision - strlen($n1)); if ($n2 != '') { $number = $n1 . '.' . $n2; } else { $number = $n1; } return $number . ' ' . $prefixes[$exp]; } function errorHandler($errno, $errstr='', $errfile='', $errline='') { // if error has been supressed with an @ if (error_reporting() == 0) { return; } global $conf; // check if function has been called by an exception if(func_num_args() == 5) { // called by trigger_error() $exception = null; list($errno, $errstr, $errfile, $errline) = func_get_args(); $backtrace = array_reverse(debug_backtrace()); }else { // caught exception $exc = func_get_arg(0); $errno = $exc->getCode(); $errstr = $exc->getMessage(); $errfile = $exc->getFile(); $errline = $exc->getLine(); $backtrace = $exc->getTrace(); } $errorType = array ( E_ERROR => 'ERROR', E_WARNING => 'WARNING', E_PARSE => 'PARSING ERROR', E_NOTICE => 'NOTICE', E_CORE_ERROR => 'CORE ERROR', E_CORE_WARNING => 'CORE WARNING', E_COMPILE_ERROR => 'COMPILE ERROR', E_COMPILE_WARNING => 'COMPILE WARNING', E_USER_ERROR => 'USER ERROR', E_USER_WARNING => 'USER WARNING', E_USER_NOTICE => 'USER NOTICE', E_STRICT => 'STRICT NOTICE', E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR' ); // create error message if (array_key_exists($errno, $errorType)) { $err = $errorType[$errno]; } else { $err = 'CAUGHT EXCEPTION'; } $errMsg = "$err: $errstr in $errfile on line $errline"; // start backtrace foreach ($backtrace as $v) { if (isset($v['class'])) { $trace = 'in class '.$v['class'].'::'.$v['function'].'('; if (isset($v['args'])) { $separator = ''; foreach($v['args'] as $arg ) { $trace .= "$separator".getArgument($arg); $separator = ', '; } } $trace .= ')'; } elseif (isset($v['function']) && empty($trace)) { $trace = 'in function '.$v['function'].'('; if (!empty($v['args'])) { $separator = ''; foreach($v['args'] as $arg ) { $trace .= "$separator".getArgument($arg); $separator = ', '; } } $trace .= ')'; } } // display error msg, if debug is enabled if($conf['error_debug'] == 1) { echo '

Debug Msg

'.nl2br($errMsg).'
Trace: '.nl2br($trace).'
'; } // what to do switch ($errno) { case E_NOTICE: case E_USER_NOTICE: return; break; default: if($conf['debug'] == 0){ // send email to admin if(!empty($conf['adminEmail'])) { @mail($conf['adminEmail'],'critical error on '.$_SERVER['HTTP_HOST'], $errorText, 'From: Error Handler'); } // end and display error msg exit(displayClientMessage()); } else exit('

aborting.

'); break; } } // end of errorHandler() #set_error_handler('errorHandler'); function displayClientMessage() { echo 'some html page with error message'; } function getArgument($arg) { switch (strtolower(gettype($arg))) { case 'string': return( '"'.str_replace( array("\n"), array(''), $arg ).'"' ); case 'boolean': return (bool)$arg; case 'object': return 'object('.get_class($arg).')'; case 'array': $ret = 'array('; $separtor = ''; foreach ($arg as $k => $v) { $ret .= $separtor.getArgument($k).' => '.getArgument($v); $separtor = ', '; } $ret .= ')'; return $ret; case 'resource': return 'resource('.get_resource_type($arg).')'; default: return var_export($arg, true); } } function ConvertBool($value) { if ($value == 'YES') { return true; } elseif ($value == 'NO') { return false; } die("ERROR: unknown bool value: '$value'"); } function getfiles_config($machine, $cred_type) { #$cred_type = 'axe+ftp'; #$cred_type = 'telnet'; $result = mysql_query("SELECT machine, host, port, user, password, local_path, remote_path, axe_file, axe_vol1, axe_destination, delete_threshold_percent, delete_threshold_files FROM cfg_getfiles INNER JOIN machines ON (cfg_getfiles.machine = machines.id) WHERE type='$cred_type' AND machine=" . $machine); if (mysql_num_rows($result) != 1) { AddToLog("[".gmdate("d.m.Y H:i:s")."] No config defined in cfg_getfiles for \$cred_type = '" . $cred_type . '\' and $machine = ' . $machine, true); exit(); } $config = mysql_fetch_assoc($result); return $config; } function GetShowHideBlock($content, $show = '', $hide = '') { static $i; if (!is_numeric($i)) { $i = 1; } else { $i++; } if ($show != '' and $hide == '') { $hide = $show = $show . '...'; } if ($show == '') { $show = 'Show...'; } if ($hide == '') { $hide = 'Hide...'; } return '' . $show . ' '; } function get_lock($lock = 'all') { global $mysql_local; $lock_name = mysql_real_escape_string('anyxess.' . basename($_SERVER['SCRIPT_FILENAME']) . '.' . $lock); $sql = 'SELECT GET_LOCK("' . $lock_name . '", 0) AS status'; $result = mysql_query($sql, $mysql_local); if (!$result) { die("Invalid query: '$sql'\nError: " . mysql_error() . "\n"); } $status = mysql_fetch_assoc($result); if ($status['status'] !== '1') { #echo "Error: lock '$lock_name' could not be locked:" . mysql_error() . "\n"; return false; } register_shutdown_function('release_lock', $lock_name); return true; } function release_lock($lock_name) { global $mysql_local; #echo "release_lock($lock_name);\n"; $sql = 'SELECT RELEASE_LOCK("' . $lock_name . '") AS status'; $result = mysql_query($sql, $mysql_local); if (!$result) { die("Invalid query: '$sql'\nError: " . mysql_error($mysql_local) . "\n"); } $status = mysql_fetch_assoc($result); if ($status['status'] !== '1') { echo "Error: lock '$lock_name' could not be released:" . mysql_error($mysql_local) . "\n"; } } function getMachineStats($machine_id = null) { if ($machine_id == null) { $sql = 'SELECT id FROM machines ORDER BY id'; $result = mysql_query($sql); $machines = array(); while ($row = mysql_fetch_assoc($result)) { $machines[] = $row; } } else { $machines = array(array('id' => $machine_id)); } $return = array(); foreach ($machines as $machine) { $stats = array(); $stats['machine'] = $machine['id']; $path = '/home/billing/ttfiles/m' . $machine['id']; if (!is_dir($path)) { #trigger_error("Not a valid path: '$path'", E_USER_NOTICE); $return[$machine['id']] = array('machine' => $machine['id'], 'files' => 0, 'size' => 0, 'lag' => 0, 'recent' => -1); continue; } $files = glob($path . '/????_*'); $file_count = 0; $size_count = 0; $timestamp = PHP_INT_MAX; foreach ($files as $file) { $file_count++; $size_count += filesize($file); if ($timestamp > filemtime($file)) { $timestamp = filemtime($file); } } $stats['files'] = $file_count; if ($file_count) { $stats['size'] = $size_count; $stats['lag'] = time() - $timestamp; } else { $stats['size'] = 0; $stats['lag'] = 0; } $recent = mysql_evaluate("SELECT UNIX_TIMESTAMP(MAX(last_modified)) FROM ttfiles WHERE machine = {$machine['id']}"); if ($recent != 'undefined') { $stats['recent'] = time() - $recent; } else { $stats['recent'] = -1; } $return[$machine['id']] = $stats; } if ($machine_id == null) { return $return; } else { return $return[$machine_id]; } } /** * Get ISO-formatted retain date * * Returns the first timestamp up to which CDRs are retained, * older CDRs are to be deleted. * * Currently 3 whole month * * @return string ISO-formatted date */ function get_retain_date() { return date('Y-m-d H:i:s', mktime(23, 59, 59, date('m') - 3, 0, date('Y'))); } /* function getLinuxReturnCode($code) { if (!is_integer($code)) { return false; } $linux_returncodes = array( 1 => 'HUP - Hangup', 2 => 'INT - Interrupt', 3 => 'QUIT - Quit', 4 => 'ILL - Illegal instruction', 5 => 'TRAP - Trace trap', 6 => 'ABRT - Abort', 7 => 'BUS - Bus error', 8 => 'FPE - Floating point exception', 9 => 'KILL - Killed', 10 => 'USR1 - User defined signal 1', 11 => 'SEGV - Memory fault', 12 => 'USR2 - User defined signal 2', 13 => 'PIPE - Broken pipe', 14 => 'ALRM - Alarm clock', 15 => 'TERM - Terminated', 16 => 'STKFLT - Stack fault', 17 => 'CHLD - Child exited', 18 => 'CONT - Continued', 19 => 'STOP - Stopped (signal)', 20 => 'TSTP - Stopped', 21 => 'TTIN - Stopped (tty input)', 22 => 'TTOU - Stopped (tty output)', 23 => 'URG - Urgent I/O condition', 24 => 'XCPU - CPU time limit exceeded', 25 => 'XFSZ - File size limit exceeded', 26 => 'VTALRM - Virtual timer expired', 27 => 'PROF - Profiling timer expired', 28 => 'WINCH - Window size change', 29 => 'POLL - I/O possible', 30 => 'PWR - Power-fail/Restart', 31 => 'SYS' ); if (isset($linux_returncodes[$code])) { return $linux_returncodes[$code]; } return "Unknown Signal $code"; } function getReturnCode($code, $custom_codes = array()) { if (isset($custom_codes[$code])) { return $custom_codes[$code]; } $code -= 128; return getLinuxReturnCode($code); } */ function get_application_mode($attribute = '') { static $application_mode; // interactive // cron // web if (!$application_mode) { // check $_SERVER // $sapi = php_sapi_name(); // posix_isatty(STDOUT) } } function cprint($string) { # https://github.com/etopian/php-cli-framework/blob/master/cli.php if (php_sapi_name() != 'cli') { return; } $time = date('H:i:s'); echo "[$time] $string\n"; } function debug_cprint($string) { static $debug = false; if ($string === true) { $debug = true; return; } if ($debug) { cprint($string); } } function parseDbUri($connection_string) { // mysql://username:password@hostname:port/database/tablename // Regex: '~mysql://([^:@/]*):?([^@/]*)@?([^/]*)/?([^/]*)~'; $parts = parse_url($connection_string); $path = $parts['path']; unset ($parts['path']); $path = trim($path, '/'); #echo $path . strpos('/', $path) . "\n";exit; if (($pos = strpos($path, '/')) !== false) { $parts['db'] = substr($path, 0, $pos); $parts['table'] = substr($path, $pos + 1); } else { $parts['db'] = $path; } if (!isset($parts['port'])) { $parts['port'] = 3306; } return $parts; }