superedit-SQIX_STRUCTURE_DB_SYNC.php 155 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400
  1. <?php
  2. //@2014-01-20 added joining structure without loos data for CHAR->CHAR - only resize to bigger field if needed in new structure (sqix)
  3. echo "version @2015-05-25 @2015-05-21 added TYPESPECIAL/TYPESPECIALS/VARIABLE/VARIABLES FIX DUBLES
  4. version: @2014-01-21 added joining structure without loos data for ENUM->ENUM, SET->SET - try to add item in enum(sqix)<br>";
  5. //
  6. //[0] => alter table `SES_TV_A` CHANGE `P_DEVICE` `P_DEVICE` enum('BRAK','DEKODER SD','DEKODER HD','MODUL CAM','MULTIROOM') ;
  7. // [1] => enum('BRAK','DEKODER SD','DEKODER HD','MODUL CAM','MULTIROOM')
  8. // [2] => enum('BRAK','DEKODER SD','DEKODER HD','MODUL CAM','MULTIROOM')
  9. // [3] => enum('BRAK','DEKODER SD','DEKODER HD','MODUL CAM')
  10. //todo ID z import_translate nie moga byc podmieniane po imporcie, bo maja juz ID docelowe (wartosci nie klucze)
  11. require_once dirname(__FILE__) . "/se-lib/Lib.php";
  12. require_once dirname(__FILE__) . "/se-lib/ProcesHelper.php";
  13. require_once dirname(__FILE__) . "/se-lib/Data_Source.php";
  14. require_once dirname(__FILE__) . "/se-lib/Config.php";
  15. //$cnf_test=Config::getData();
  16. //DEBUG_S(-3,'Configs_test',$cnf_test,__FILE__,__FUNCTION__,__LINE__);
  17. //
  18. function die1($arg) {
  19. echo "\n<br> ERROR!!! ".$arg." error ".mysql_error();
  20. exit(1);
  21. }
  22. if(isset($_SERVER["argv"][1])) {
  23. //wymuszenie argumentu z polecenia (ta zmienna oznaczac ma domene (np. biuro.biall-net.pl )
  24. //php -r"include('/Library/Server/Web/Data/Sites/Default/SE/superedit-SQIX_STRUCTURE_DB_SYNC.php') ;" biuro.biall-net.pl
  25. $_SERVER['SERVER_NAME']=$_SERVER["argv"][1];
  26. $_REQUEST['SYSTEM_PROFILE_STRING_IMPORT_EXPORT']=$_SERVER["argv"][2]; //filtr do importu
  27. $_REQUEST['submit']=true;
  28. define('DS', DIRECTORY_SEPARATOR);
  29. define('APP_PATH_ROOT', dirname(__FILE__));
  30. define('APP_PATH_WWW', dirname(__FILE__));
  31. define('APP_PATH_CONFIG', APP_PATH_ROOT . DS . 'config');
  32. require_once APP_PATH_ROOT . DS . 'se-lib' . DS . 'Lib.php';
  33. Lib::loadClass('V');
  34. Lib::loadClass('Config');
  35. Lib::loadClass('DB');
  36. Lib::loadClass('User');
  37. session_start();
  38. include_once(APP_PATH_CONFIG.'/.config-'.$_SERVER['SERVER_NAME'].'.php');
  39. include('superedit-DEBUG_S.php');
  40. // $PROJ_mount_point=Config::getConfFile('import_db', '') ;
  41. // print_r($PROJ_mount_point);
  42. } else {
  43. //Lib::loadClass('Config');
  44. //$var=Config::getData();
  45. //print_r($var);
  46. //die('test');
  47. //$_SESSION['DEBUG']=6;
  48. }
  49. //@2013-10-05 added correct database config handling
  50. //@2013-07-24 added for CRM_LISTA_ZASOBOW $sql=" alter table `".$TABLE."` AUTO_INCREMENT=1000 ";
  51. //warto przed updatem zrobic :
  52. //update CRM_LISTA_ZASOBOW set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS' ;
  53. //update CRM_IMAGE set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_PROC' ;
  54. //update CRM_PROCES set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_PROC_FIX_GOTO' ;
  55. //update CRM_TESTY set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_PROC' ;
  56. //update CRM_TESTY_PYTANIA set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_PROC' ;
  57. //update CRM_WSKAZNIK set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC' ;
  58. //@2013-02-17 : prawidlowa kolejnosc instalacji to najpierw init wlasny (brakuje zasobow wewnetrznych do konfigow) ,
  59. //,CREATE_ZASOBY_DATABASE_DESC , opisac jakie dosaly ID do konfiga $CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW'][36]=$DATABASE_ROOT_ZASOB_ID;
  60. //, import procesow ZASOBY_ZASOBY ?
  61. //TODO!!!!! @2013-02-17: CREATE_ZASOBY_DATABASE_DESC powinno robic konfig z $DATABASE_ROOT_ZASOB_ID=$var; jakos
  62. //TODO!!!! @2013-02-12 : nie wgrywa zdjec! dorobic
  63. //TODO!!! @2012-12-20: funckja SQIX_STRUCTURE_SYNC po pierwszej synchronizacji jak nie ma tabeli dorzuca tylko tabele z jedna komorka ID! Trzeba poprawic tak aby bylo tworzone wszystko za 1 razem
  64. //TODO!! @2013-01-27 : przy importowaniu wskaznikow z ZASOBY_TO_ZASOBY nie zachowana jest wlasciwa kolejnosc czynnosci...
  65. //TODO!! @2013-01-27 : pewnie nie dziala IF TRUE GOTO ! synchronizacja...
  66. // @2013-01-24 rozwaznaia - graf dokumentacja sqix jak to ma dzialac:
  67. // wszedl ID zasobu src=3 na dst=1003
  68. // wszedl ID zasobu src=4(parent 3) na dst=1004 , z (parent =3 TODO)
  69. // wszedl ID zasobu src=5(parent 4) na dst=1005 , z (parent=4 TODO)
  70. // wszedl ID procesu src=501(parent 500) na dst =5501 ( z parent 500 TODO)
  71. // wszedl ID procesu src=502(parent 501) na dst =5502 (z parent 501 TODO)
  72. // wszedl ID procesu src=503(parent 502) na dst =5503 (z parent 502 TODO)
  73. // wszedl ID wskaznika src=10 na dst 9910 , z (parent procesu=501 TODO, zasobu=4 TODO)
  74. // wszedl ID wskaznika src=11 na dst 9911 , z parent prcoces=502 TODO, zasobu=5 TODO)
  75. //@2012-10-19 by sqix //Kod nie skonczony na linii 420 - trzeba lepiej przegrac informacje o strukturze tabel - najepiej na poszczegolne cechy, bo default value jak ma srednik to jest dupa
  76. //Typowa kolejnosc uzycia :
  77. //1) w bazie wzorcowej nalezy wykonac funkcje z parametrem CREATE_ZASOBY_STRUCTURES_CONFIG -> stworzony plik wgrac w .config_base_structure.php
  78. //2) przegrac plik .config_base_structure.php do docelowego serwera, gdzie mamy zainstalowac struktury bazowe
  79. //3) uruchomic na docelowym serwerze ta funkcje z paramerem SYNC_ZASOBY_STRUCTURES_FROM_CONFIG - aby zbudowac lokalne tabele bazowe z .config_base_structure.php
  80. //4) uruchmonic na docelowym serwerze ta funkcje z parametrem FROM_DATABASE_TO_ZASOBY - aby uzupelnic tabele zasobow o aktualne tabele systemowe
  81. //5) TODO zaimportowac z serwera wzorcowych procesow procesy wzorcowe FROM_ZASOBY_TO_ZASOBY ( korzysta z systemu $SYSTEM_PROFILE_STRING_IMPORT_EXPORT )
  82. function SQIX_STRUCTURE_DB_SYNC($LOCAL_DB_ZASOB_ID,$REMOTE_DB_ZASOB_ID,$DATABASE_ROOT_ZASOB_ID,$CONFIRM_SQL_UPDATE='',$SYNC_OPTIONS='',$DEBUG_LEVEL=null,$SKIP_OPTIONS=null) {
  83. global $CNF_ZASOB,$localpath,$SYSTEM_PROFILE_STRING_IMPORT_EXPORT,$DATABASE_ROOT_ZASOB_ID,$CRM_IMPORT_TRANSLATE,$kodowania_local,$kodowania_remote;
  84. if(empty($DEBUG_LEVEL)) $DEBUG_LEVEL=0;
  85. $_SESSION['DEBUG']=$DEBUG_LEVEL;
  86. //todo zczytaz z konfiga @2013-10
  87. $CNF_ZASOB=array('import_db'=>array('SQL_DATABASE'=>'import_db'),'default_db'=>array('SQL_DATABASE'=>'default_db'),'test_db'=>array('SQL_DATABASE'=>'test_db'),'test3_db'=>array('SQL_DATABASE'=>'test3_db'));
  88. $sql="select `ID`,`DESC` from `CRM_LISTA_ZASOBOW` where `TYPE`='DATABASE_MYSQL' or `TYPE`='DATABASE_POSTGRESQL' or `TYPE`='BAZA_DANYCH' ;";
  89. $db=DB::getdb();
  90. $res=$db->query($sql);
  91. while($h=$db->fetch($res)) {
  92. $CNF_ZASOB[$h->ID]['SQL_DATABASE']=$h->DESC;
  93. }
  94. if(empty($DATABASE_ROOT_ZASOB_ID)) $DATABASE_ROOT_ZASOB_ID=2;
  95. //todo powinno dzialac z konfiga
  96. DEBUG_S(-3,'Parametry CRM_IMPORT_TRANSLATE - do ustalania konkretnych ID przy imporcie zasobow',$CRM_IMPORT_TRANSLATE);
  97. if(empty($CRM_IMPORT_TRANSLATE)) {
  98. $CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW'][36]=2; //baza danych[36] na baze danych zainicjalizowana
  99. $CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW'][14]=1; //server[14] na zainicjalizowany [1] tutaj definiujemy z zasob
  100. }
  101. DEBUG_S(-3,'Parametry CRM_IMPORT_TRANSLATE - do ustalania konkretnych ID przy imporcie zasobow',$CRM_IMPORT_TRANSLATE);
  102. //Funkcja odbudowuje podstawowe zasoby struktur dotyczacych systemu PROCESOW - konfig : CREATE_ZASOBY_STRUCTURES_CONFIG oraz SYNC_ZASOBY_STRUCTURES_FROM_CONFIG
  103. //Nastepnie opcje umozliwiaja synchronizacje struktur pozostalych baz danych na podstawie zapisow w tabeli zasobow (
  104. //$DATABASE_ROOT_ZASOB_ID - w tym miejscu podajemy numer zasobu, od kt￳rego system bedize
  105. // rysowal tabele i komorki w drzewie zasob￳w ( lub je czytal)
  106. //$SYNC_OPTIONS='CREATE_ZASOBY_STRUCTURES_CONFIG' from LOCAL -else option - this make base config file for structures
  107. //$SYNC_OPTIONS='SYNC_ZASOBY_STRUCTURES_FROM_CONFIG' from CONFIG to REMOTE -else option - buduje z konfiga structure i je odswieza dla lokalnej struktury glownych tabel - dziala na zdalnej tabeli
  108. //$SYNC_OPTIONS='FROM_ZASOBY_TO_DATABASE' from LOCAL to REMOTE -else option
  109. //$SYNC_OPTIONS='FROM_DATABASE_TO_ZASOBY' from LOCAL to REMOTE -else option
  110. //$SYNC_OPTIONS='FROM_ZASOBY_TO_ZASOBY' - from LOCAL to REMOTE TODO importuje zasoby oraz procesy z oznaczeniem where TAGS=%$SYSTEM_PROFILE_STRING_IMPORT_EXPORT% ,
  111. // z zasobu LOCAL do zasobu REMOTE ( zasoby powiazuje rekursywnie - zaimportowane zasoby maja oznaczenie LOCAL oraz jego ID w polach DESC )
  112. // draft dzialania tego algorytmu jest w sprawie BIALL_NET 1412 / 2012-10-06.MAPA_PROCESU.Mapy_procesow_biallnet_system_oraz_procesy5.graffle / Schemat Structure_zasob_sync(procesy)
  113. // uruchamia sie funkcja FROM_ZASOBY_TO_ZASOBY($CONNLOCAL,$CONNREMOTE,$SYSTEM_PROFILE_STRING_IMPORT_EXPORT)
  114. //$SYNC_OPTIONS='CLEAR_IMPORTED_ZASOBY_REMOTE' to REMOTE -else option
  115. //$CONFIRM_SQL_UPDATE - jezeli tu bedzie jakas wartosc, to system bedzie wykonywac zapytania do bazy danych updatujace strukture, w przeciwnym razie bedzie tylko wypisywac zapytania
  116. /*
  117. if(0){
  118. $LOCAL_DB_ZASOB_ID=$_REQUEST['LOCAL_DB_ZASOB_ID'];
  119. $CONNLOCAL=mysql_connect($CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['INTERFACE_ADDR'], $CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_USER'], $CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_USER_PASS'])
  120. or die('nie moge polaczyc z '.$CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['INTERFACE_ADDR']);
  121. mysql_select_db($CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_DATABASE'],$CONNLOCAL);
  122. $res=$CONNLOCAL->query("SHOW VARIABLES LIKE 'character\_set\_%';");
  123. if ($r = mysql_fetch_object($res)) {
  124. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($r);echo'</pre>';
  125. }
  126. $sql = "SELECT * FROM `CRM_PROCES` WHERE `ID` =344";
  127. $res=$CONNLOCAL->query($sql);
  128. if ($r = mysql_fetch_object($res)) {
  129. echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($r);echo'</pre>';
  130. }
  131. die('404');
  132. }
  133. */
  134. if($_SESSION['ADM_ADMIN_LEVEL']!=0) {
  135. unset($_SESSION['DEBUG']);
  136. die1('MUST BE USER ADMIN TO RUN THIS MODULE - ADMIN_LEVEL==0 now is:'.$_SESSION['ADM_ADMIN_LEVEL']);
  137. }
  138. if(empty($LOCAL_DB_ZASOB_ID)) {
  139. $LOCAL_DB_ZASOB_ID=$DATABASE_ROOT_ZASOB_ID; //local oznacza SOURCE
  140. $REMOTE_DB_ZASOB_ID=$DATABASE_ROOT_ZASOB_ID; //REMOTE oznacza DESTINATION
  141. //TODO zmienic na sciagniecie domyslnego numeru ID biezacej bazy danych @2014-06-26 //if(empty($DATABASE_ROOT_ZASOB_ID)) $DATABASE_ROOT_ZASOB_ID=$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['ZASOB_ROOT_ID_PLACE']; //domyslny localhost root numer z konfiga?
  142. }
  143. $SYSTEM_PROFILE_STRING_IMPORT_EXPORT='%GLOBAL%'; //override config
  144. //Generuje menu dla ADMIN_LEVEL=0
  145. if((!isset($LOCAL_DB_ZASOB_ID)||isset($REMOTE_DB_ZASOB_ID)||isset($SYNC_OPTIONS))&&(($_SESSION['ADMIN_LEVEL']==0)||($_SERVER["argv"][1]))) {
  146. if(!empty($_REQUEST['LOCAL_DB_ZASOB_ID'])) $LOCAL_DB_ZASOB_ID=$_REQUEST['LOCAL_DB_ZASOB_ID'];
  147. if(!empty($_REQUEST['REMOTE_DB_ZASOB_ID'])) $REMOTE_DB_ZASOB_ID=$_REQUEST['REMOTE_DB_ZASOB_ID'];
  148. if(!empty($_REQUEST['CONFIRM_SQL_UPDATE'])) $CONFIRM_SQL_UPDATE=$_REQUEST['CONFIRM_SQL_UPDATE'];
  149. if(!empty($_REQUEST['SYNC_OPTIONS'])) $SYNC_OPTIONS=$_REQUEST['SYNC_OPTIONS'];
  150. if(!empty($_REQUEST['DATABASE_ROOT_ZASOB_ID'])) $DATABASE_ROOT_ZASOB_ID=$_REQUEST['DATABASE_ROOT_ZASOB_ID'];
  151. if(!empty($_REQUEST['SYSTEM_PROFILE_STRING_IMPORT_EXPORT'])) $SYSTEM_PROFILE_STRING_IMPORT_EXPORT=$_REQUEST['SYSTEM_PROFILE_STRING_IMPORT_EXPORT'];
  152. if(!empty($_REQUEST['CREATE_ZASOBY_DATABASE_DESC'])) $CREATE_ZASOBY_DATABASE_DESC=$_REQUEST['CREATE_ZASOBY_DATABASE_DESC'];
  153. if(!empty($_REQUEST['DEBUG_LEVEL'])) $DEBUG_LEVEL=$_REQUEST['DEBUG_LEVEL'];
  154. // if(!empty($_REQUEST['MERGE_RESOURCES_OPTION'])) $MERGE_RESOURCES_OPTION=$_REQUEST['MERGE_RESOURCES_OPTION'];
  155. echo "\nTu bedzie menu dla Admina ";
  156. echo "\n<form action=?FUNCTION_INIT=SQIX_STRUCTURE_DB_SYNC>";
  157. echo "<input type=hidden name=FUNCTION_INIT value=SQIX_STRUCTURE_DB_SYNC>";
  158. echo "\n<table border=1><tr><td colspan=3>Menu systemu synchronizacji dla ADMINA</td></tr>";
  159. echo "\n<tr><td>Parametr zrodla</td><td><select name=LOCAL_DB_ZASOB_ID id=LOCAL_DB_ZASOB_ID onchange=\" document.getElementById('DATABASE_ROOT_ZASOB_ID').value=document.getElementById('LOCAL_DB_ZASOB_ID').value \" >"; //document.getElementById(\"DATABASE_ROOT_ZASOB_ID\").value=10; //TODO
  160. print_r($CNF_ZASOB);
  161. foreach ($CNF_ZASOB as $CNF_ZASOB_IND=>$CNF_ZASOB_VAL) {
  162. echo "<option value='".$CNF_ZASOB_IND."' ";
  163. if($LOCAL_DB_ZASOB_ID==$CNF_ZASOB_IND) echo " selected=1 ";
  164. echo ">".$CNF_ZASOB_IND." :IP(".$CNF_ZASOB_VAL['INTERFACE_ADDR'].") DBNAME:(".$CNF_ZASOB_VAL['SQL_DATABASE'].")</option>";
  165. }
  166. echo "</select></td></tr>";
  167. echo "\n<tr><td>Parametr celu</td><td><select name='REMOTE_DB_ZASOB_ID'>";
  168. foreach ($CNF_ZASOB as $CNF_ZASOB_IND=>$CNF_ZASOB_VAL) {
  169. echo "\n<option value='".$CNF_ZASOB_IND."' ";
  170. if($REMOTE_DB_ZASOB_ID==$CNF_ZASOB_IND) echo " selected=1 ";
  171. echo ">".$CNF_ZASOB_IND." :IP(".$CNF_ZASOB_VAL['INTERFACE_ADDR'].") DBNAME:(".$CNF_ZASOB_VAL['SQL_DATABASE'].")</option>";
  172. }
  173. echo "</select></td></tr>";
  174. $SYNC_OPTIONS_MENU['CREATE_ZASOBY_STRUCTURES_CONFIG']="from LOCAL -else option - this make base config file for structures";
  175. $SYNC_OPTIONS_MENU['SYNC_ZASOBY_STRUCTURES_FROM_CONFIG']="from CONFIG to REMOTE -else option - buduje z konfiga structure i je odswieza dla lokalnej struktury glownych tabel - dziala na zdalnej tabeli";
  176. $SYNC_OPTIONS_MENU['SYNC_ZASOBY_STRUCTURES_FROM_CONFIG_WITHOUT_PROCEDURES_AND_VIEWS']="from CONFIG to REMOTE -else option - buduje z konfiga structure i je odswieza dla lokalnej struktury glownych tabel - dziala na zdalnej tabeli - pomija procedury i widoki";
  177. $SYNC_OPTIONS_MENU['CREATE_ZASOBY_DATABASE_DESC']=" (na CONNREMOTE) jezeli pierwszy raz uruchamiasz system nalezy dodac strukture do zasobow gdzie bedzie znajdowac sie definicja struktur systemu SE";
  178. $SYNC_OPTIONS_MENU['FROM_ZASOBY_TO_DATABASE']=" from LOCAL to REMOTE uzupelnia structure z hazy zasobow do BAZY_DANYCH sql";
  179. $SYNC_OPTIONS_MENU['SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS']="Use before FROM_DATABASE_TO_ZASOBY to fix all current resources/processes not to being translated like external ones!!!";
  180. $SYNC_OPTIONS_MENU['FROM_DATABASE_TO_ZASOBY']="from LOCAL to REMOTE - uzupelnia structure zasobow o dane z aktualnej hazy danych razem z CECHAMI";
  181. $SYNC_OPTIONS_MENU['SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS']="Uaktualnia pola w dodanych procesach i zasobach przez uzytkownika informacje o tym, ze dane nie pochodza z importu - nalezy wykonac przed importowaniem zasobow/procesow. W przypadku bledu w imporcie nie nalezy tej funkcji uruchamiac do czasu upewnienia sie, ze wszystkie procesy zostaly zaimportowane";
  182. $SYNC_OPTIONS_MENU['FROM_ZASOBY_TO_ZASOBY']="from LOCAL to REMOTE TODO importuje zasoby oraz procesy z oznaczeniem where TAGS=%$SYSTEM_PROFILE_STRING_IMPORT_EXPORT% ,
  183. z zasobu LOCAL do zasobu REMOTE ( zasoby powiazuje rekursywnie - zaimportowane zasoby maja oznaczenie LOCAL oraz jego ID w polach DESC )
  184. draft dzialania tego algorytmu jest w sprawie BIALL_NET 1412 / 2012-10-06.MAPA_PROCESU.Mapy_procesow_biallnet_system_oraz_procesy5.graffle / Schemat Structure_zasob_sync(procesy)
  185. uruchamia sie funkcja FROM_ZASOBY_TO_ZASOBY(\$CONNLOCAL,\$CONNREMOTE,\$SYSTEM_PROFILE_STRING_IMPORT_EXPORT)";
  186. $SYNC_OPTIONS_MENU['MAKE_SE_AND_HIST_FIELDS_FOR_TABLE']="dodaje do okreslonych tabel kolumny A_RECORD_CREATE_DATE itp oraz tworzy tabele historyczna";
  187. $SYNC_OPTIONS_MENU['CLEAR_IMPORTED_ZASOBY_REMOTE']="kasuje zaimportowane fragmenty procesow z funkcji FROM_ZASOBY_TO_ZASOBY";
  188. $SYNC_OPTIONS_MENU['IMPORT_SORT_DESC_INFO']="importuje parametry sortowania oraz opisy zasobow";
  189. $SYNC_OPTIONS_MENU['CLEAR_TREE_DUBLES_AND_MOVE_WSK']="czysci drzewo zasobow z dubli i przesuwa wskazniki";
  190. echo "\n<tr><td>Opcja glowna funkcji </td><td><select name=SYNC_OPTIONS>";
  191. foreach ($SYNC_OPTIONS_MENU as $CNF_ZASOB_IND=>$CNF_ZASOB_VAL) {
  192. echo "\n <option value='".$CNF_ZASOB_IND."' ";
  193. if($SYNC_OPTIONS==$CNF_ZASOB_IND) echo " selected ";
  194. echo ">".$CNF_ZASOB_IND." ".$CNF_ZASOB_VAL."</option>";
  195. }
  196. echo "</select></td></tr>";
  197. echo "<tr><td>Podaj numer zasobu do wstawiania komorek z bazy danych do jej synchronizacji \$DATABASE_ROOT_ZASOB_ID - do tego numeru system bedzie dopisywac kolejne zasoby TABEL,KOMOREK,CECH. Podaj numer zasobu [ID] o typie BAZA_DANYCH </td>";
  198. echo "\n<td><input type=text name=DATABASE_ROOT_ZASOB_ID id=DATABASE_ROOT_ZASOB_ID value='".$DATABASE_ROOT_ZASOB_ID."'></input></td></tr>";
  199. echo "<tr><td>Podaj filtr/klucz do importu procesow z bazy LOCAL do bazy REMOTE \$SYSTEM_PROFILE_STRING_IMPORT_EXPORT - Te dane beda wyszukane po ADM_COMPANY , system dowiaze brakujace zasoby, przemapuje nowe ID i ustali ich powiazania w oparciu o tabele CRM_IMPORT_TRANSLATE </td>";
  200. echo "\n<td><input type=text name=SYSTEM_PROFILE_STRING_IMPORT_EXPORT value='".$SYSTEM_PROFILE_STRING_IMPORT_EXPORT."'></input></td></tr>";
  201. echo "\n<tr><td>Poziom debugu - ustaw na 6 aby mocno debugowac, na 1 aby slabo</td><td><input type=text name=DEBUG_LEVEL value='".$DEBUG_LEVEL."'></input></td></tr>";
  202. echo "<tr><td>Potwierdzenie dokonania zapisu na tabeli REMOTE</td><td><select name=CONFIRM_SQL_UPDATE>
  203. <option value=\"\"></option><option value=1>WYSLIJ DO BAZY</option><option value=REPLACE>WYSLIJ I NADPISZ STARE IMPORTY DO BAZY</option></td></tr></tr>";
  204. echo "<tr><td colspan=3><input type=submit name=submit value=OK></td></td>";
  205. echo "</table>";
  206. echo "</form><br>\n";
  207. echo "<a href=?FUNCTION_INIT=SQIX_STRUCTURE_DB_SYNC>odswiez</a>";
  208. echo "<img src=icon/superedit-SQIX_STRUCTURE_DB_SYNC.png border=0 width=100%><br> \n";
  209. if(empty($_REQUEST['submit'])||empty($SYNC_OPTIONS) ) die1();
  210. }
  211. // mozemy podac lokalna baze danych do weryfikacji oraz zdalna baze danych do weryfikacji
  212. $config_base_structure=".config_base_structure.php";
  213. //$CONFIRM_SQL_UPDATE='update';
  214. //$SYNC_OPTIONS='FROM_ZASOBY_TO_ZASOBY'; //CLEAR_IMPORTED_ZASOBY_REMOTE //FROM_ZASOBY_TO_ZASOBY
  215. $CECHY_POSZUKIWANE['FIELDS']['Field']='FIELD_PROP_Field';
  216. $CECHY_POSZUKIWANE['FIELDS']['Type']='FIELD_PROP_Type';
  217. $CECHY_POSZUKIWANE['FIELDS']['Null']='FIELD_PROP_Null';
  218. $CECHY_POSZUKIWANE['FIELDS']['Default']='FIELD_PROP_Default';
  219. $CECHY_POSZUKIWANE['FIELDS']['Extra']='FIELD_PROP_Extra';
  220. $CECHY_POSZUKIWANE['INDEX']['Non_unique']='TAB_PR_Non_unique';
  221. $CECHY_POSZUKIWANE['INDEX']['Key_name']='TAB_PR_Key_name';
  222. $CECHY_POSZUKIWANE['INDEX']['Column_name']='TAB_PR_Column_name';
  223. //! set tables used to generate main structure
  224. $TABLES_STRUCTURE_arr['MAIN'] = array('QUALITY_NOTICES','QUALITY_NOTICES_HIST','_ANALIZA_HISTORII_ALL','DEVICES_GROUP','GRAFIK_PRACY','GRAFIK_PRACY_HIST','GRAFIK_PRACY_view','SALES_PLAN','SALES_PLAN_HIST','ITEM_LINK_TYPES','ITEM_LINK_TYPES_HIST','ITEM_LINKS','ITEM_LINKS_HIST','TEST_PERMS','TEST_PERMS_HIST','DEVICES','_CRM_PROCES_INIT_STATS','_CRM_PROCES_USER_STATS_wiev','BUILDINGS','BUILDINGS_HIST','SES_VOIP_A','SES_VOIP_A_HIST','SES_TV_A','SES_TV_A_HIST','USERS2_DEALS','USERS2_DEALS_HIST','DEALS_TABLE','DEALS_TABLE_HIST','USERS2_MARKETING','USERS2_MARKETING_HIST','IN7_MK_BAZA_DYSTRYBUCJI','IN7_MK_BAZA_DYSTRYBUCJI_HIST','TELBOXES','TELBOXES_HIST','NETWORKS_SERVERS','NETWORKS_SERVERS_HIST','ADMIN_USERS','ADMIN_USERS_HIST','CRM_IMPORT_TRANSLATE','IN7_PRODUKTY_CECHY','IN7_CECHY','CRM_AUTH_PROFILE','CRM_AUTH_PROFILE_HIST','CRM_CZYNNOSCI','CRM_CZYNNOSCI_HIST','CRM_IMAGE','CRM_LISTA_ZASOBOW','CRM_LISTA_ZASOBOW_HIST','CRM_PROCES','CRM_PROCES_HIST','CRM_PROCES_LOG','CRM_PROCES_LOG_HIST','CRM_PRZYPADEK','CRM_TESTY','CRM_TESTY_HIST','CRM_TESTY_ODPOWIEDZI','CRM_TESTY_ODPOWIEDZI_HIST','CRM_TESTY_PYTANIA','CRM_TESTY_PYTANIA_HIST','CRM_TESTY_WYNIKI','CRM_TESTY_WYNIKI_HIST','CRM_WSKAZNIK','CRM_WSKAZNIK_HIST','DEVICES_HIST','IN7_DZIENNIK_KORESP','IN7_DZIENNIK_KORESP_HIST','USERS2_OFFERS','USERS2_OFFERS_HIST','USERS2_OFFERS_GROUPS','USERS2_OFFERS_GROUPS_HIST','USERS2_OFFERS_COSTS','USERS2_OFFERS_COSTS_HIST','USERS2_OFFERS_COSTS','USERS2_OFFERS_COSTS_HIST','SERVICES','SES_USERS2_A','USERS2','KIKE_AUTH_PROFILE','LDAP_GROUPS','CRM_TESTY_PYTANIA_TO_IMPORT','CRM_TESTY_PYTANIA_TO_IMPORT_HIST','PROBLEMS','PROBLEMS_HIST','COMPANIES','COMPANIES_HIST','_CRM_PROCES_STATS_proc_wiev','_CRM_PROCES_STATS','CRM_PROCES_USER_OCENA_OKRES','CRM_PROCES_USER_OCENA_OKRES_HIST','KONTAKTY_view','_CRM_PROCES_USER_STATS_wiev_to_group','projects_budget_year_month','projects_budget_year_month_HIST','in7_dziennik_koresp_budget_main_view','in7_dziennik_koresp_budget_view','budget_project_to_realization_view','budget_project_to_realization_main_view','CRM_LISTA_ZASOBOW_ALIASY_view','WMS_LAYERS','WMS_LAYERS_HIST','WMS_MAPS','WMS_MAPS_HIST','CRM_LISTA_ZASOBOW_OFFERS','CRM_LISTA_ZASOBOW_OFFERS_HIST','Rozdzielcza_struktura_wewnetrzna_wsg84','Rozdzielcza_struktura_wewnetrzna_wsg84_HIST','Rozdzielcza_wewn_kabel_ethernet', 'Rozdzielcza_Pakiet5MikrorurekMagistrala_WSG84','Rozdzielcza_Pakiet5MikrorurekMagistrala_WSG84_HIST','Rozdzielcza_rurociagi_obce_wsg84','Rozdzielcza_rurociagi_obce_wsg84_HIST','Rura_oslonowa_rozdzielcza_magistralna','Rozdzielcza_Przeciski_110mm','Rozdzielcza_Przeciski_110mm_HIST',
  225. 'Rozdzielcza_Przeciski_110mm_HIST','Rozdzielcza_Wykop_przedmiar_na_mikrorurki','Rozdzielcza_Wykop_przedmiar_na_mikrorurki_HIST','Rozdzielcza_Zabruki','Rozdzielcza_Zabruki_HIST','Rozdzielcza_Kabel_Swiatlowodowy_wsg84','Rozdzielcza_Kabel_Swiatlowodowy_wsg84_HIST','Rozdzielcza_koszty_dodatkowe_wsg84',
  226. 'Rozdzielcza_koszty_dodatkowe_wsg84_HIST','Rozdzielcza_wezly','Rozdzielcza_wezly_HIST','Rozdzielcza_Mikrokanalizacja_do_klienta','Rozdzielcza_Mikrokanalizacja_do_klienta_HIST','Rozdzielcza_PionyKablowe','Rozdzielcza_PionyKablowe_HIST','opt_kable','opt_kable_HIST','opt_lokalizacje','opt_lokalizacje_HIST','opt_spawy','opt_spawy_HIST','opt_przelacznice_mufy','opt_przelacznice_mufy_HIST','opt_porty','opt_porty_HIST','opt_wlokna','opt_wlokna_HIST','opt_tuby','opt_tuby_HIST','opt_tacki','opt_tacki_HIST','Rozdzielcza_rurociag_wsg84','Rozdzielcza_rurociag_wsg84_HIST','MK_BIALE_PLAMY','MK_BIALE_PLAMY_HIST','CRM_CONFIG','MK_BIALE_PLAMY_lokale','MK_Rewiry_POPC_sum','MK_Rewiry','MK_Rewiry_HIST','Rozdzielcza_Wezly_POPC','Rozdzielcza_Wezly_POPC_HIST','HOLIDAYS_REQUESTS','HOLIDAYS_REQUESTS_HIST','BILLING_OWNER','BILLING_OWNER_HIST','CRM_REF_CONFIG','WORKER_GPS_LOG','WORKER_GPS_LOG_HIST','P5Automation1OrangeRaportSimple','P5Automation1OrangeRaportSimple_HIST','CRM_INSTANCE_CONFIG',
  227. 'TERYT_SIMC','TERYT_TERC','TERYT_ULIC','PNA');
  228. $TABLES_STRUCTURE_DATA_arr['MAIN'] = array('CRM_PRZYPADEK','TERYT_SIMC','TERYT_TERC','TERYT_ULIC','PNA');
  229. $TABLES_STRUCTURE_arr['BiAudit'] = array(
  230. 'BI_audit_ALL',
  231. 'BI_audit_ALL_ref',
  232. 'BI_audit_ALL_ref_RELATIONS',
  233. 'BI_audit_CEIDG',
  234. 'BI_audit_CEIDG_pelnomocnicy',
  235. 'BI_audit_CEIDG_powiazania',
  236. 'BI_audit_ENERGA_FAKTURY',
  237. 'BI_audit_ENERGA_FAKTURY_HIST',
  238. 'BI_audit_ENERGA_KONTRAHENCI_group',
  239. 'BI_audit_ENERGA_KONTRAHENCI_group_HIST',
  240. 'BI_audit_ENERGA_PRACOWNICY',
  241. 'BI_audit_ENERGA_PRACOWNICY_adresy',
  242. 'BI_audit_ENERGA_PRACOWNICY_group',
  243. 'BI_audit_ENERGA_PRACOWNICY_group_HIST',
  244. 'BI_audit_ENERGA_PRACOWNICY_HIST',
  245. 'BI_audit_ENERGA_RUM_KONTRAHENCI',
  246. 'BI_audit_ENERGA_RUM_KONTRAHENCI_HIST',
  247. 'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA',
  248. 'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_HIST',
  249. 'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row',
  250. 'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_row_object',
  251. 'BI_audit_ENERGA_RUM_UMOWY',
  252. 'BI_audit_ENERGA_RUM_UMOWY_HIST',
  253. 'BI_audit_KRS',
  254. 'BI_audit_KRS_address',
  255. 'BI_audit_KRS_company',
  256. 'BI_audit_KRS_MSIG',
  257. 'BI_audit_KRS_MSIG_HIST',
  258. 'BI_audit_KRS_MSIG_poz',
  259. 'BI_audit_KRS_person',
  260. 'BI_audit_KRS_PKD',
  261. 'BI_audit_KRS_PKD_HIST',
  262. 'BI_audit_KW_requested',
  263. 'BI_audit_KW_requested_HIST',
  264. 'BI_audit_KW_requested_person',
  265. 'BI_audit_MSIG',
  266. 'BI_audit_MSIG_address',
  267. 'BI_audit_MSIG_company',
  268. 'BI_audit_MSIG_name',
  269. 'BI_audit_MSIG_person',
  270. 'BI_audit_MSIG_PKD',
  271. 'BI_audit_MSIG_PKD_HIST',
  272. 'BI_audit_operational_raport_note',
  273. 'BI_audit_operational_raport_note_HIST',
  274. 'BI_audit_taxpayer',
  275. );
  276. //$TABLES_STRUCTURE_DATA_arr['BiAudit'] = array('BI_audit_ALL','BI_audit_ALL_ref','BI_audit_ALL_ref_RELATIONS','BI_audit_CEIDG','BI_audit_CEIDG_pelnomocnicy','BI_audit_CEIDG_powiazania','BI_audit_KRS','BI_audit_KRS_company','BI_audit_KRS_person','CRM__#REF_TABLE__11','CRM__#REF_TABLE__12','CRM__#REF_TABLE__18','CRM__#REF_TABLE__19');
  277. $TABLES_STRUCTURE = array();
  278. $TABLES_STRUCTURE_DATA = array();
  279. foreach ($TABLES_STRUCTURE_arr as $item) $TABLES_STRUCTURE = array_merge($TABLES_STRUCTURE, $item);
  280. foreach ($TABLES_STRUCTURE_DATA_arr as $item) $TABLES_STRUCTURE_DATA = array_merge($TABLES_STRUCTURE_DATA, $item);
  281. DEBUG_S(-3,'Lacze z bazami param: REMOTE_DB_ZASOB_ID',array($REMOTE_DB_ZASOB_ID,$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['INTERFACE_ADDR'],$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_USER'],$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_DATABASE']),__FILE__,__FUNCTION__,__LINE__ );
  282. $CONNREMOTE = DB::getDB($REMOTE_DB_ZASOB_ID);
  283. $CONNREMOTE->query('set global max_allowed_packet=1000000000');
  284. /* if(!isset($CNF_ZASOB[$REMOTE_DB_ZASOB_ID])&&($SYNC_OPTIONS!='CREATE_ZASOBY_DATABASE_DESC')) die1('Nie zdefiniowano w konfigu CONNREMOTE bazy '.$REMOTE_DB_ZASOB_ID.' uzyj opcji CREATE_ZASOBY_DATABASE_DESC aby stworzyc te pola i wprowadz zmienna DATABASE_ROOT_ZASOB_ID do konfiga!');
  285. $CONNREMOTE=mysql_connect($CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['INTERFACE_ADDR'], $CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_USER'], $CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_USER_PASS'])
  286. or die1('nie moge polaczyc z '.$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['INTERFACE_ADDR']);
  287. mysql_select_db($CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_DATABASE'],$CONNREMOTE);
  288. if (isset($CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_NAMES'])) $res=mysql_query("SET NAMES '{$CNF_ZASOB[$REMOTE_DB_ZASOB_ID]['SQL_NAMES']}';",$CONNREMOTE);
  289. $res=mysql_query("SHOW VARIABLES LIKE 'character\_set\_%';",$CONNREMOTE);
  290. while($h=mysql_fetch_object($res)) {
  291. $kodowania_remote[$h->Variable_name]=$h->Value;
  292. }
  293. DEBUG_S(-2,'Kodowania tej bazy remote',$kodowania_remote,__FILE__,__FUNCTION__,__LINE__);
  294. //echo "<pre> ".print_r($kodowania_remote)." </pre>";
  295. */
  296. DEBUG_S(-3,'Lacze z bazami param: LOCAL_DB_ZASOB_ID',array($LOCAL_DB_ZASOB_ID,$CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['INTERFACE_ADDR'], $CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_USER'], $CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_DATABASE']),__FILE__,__FUNCTION__,__LINE__ );
  297. $CONNLOCAL = DB::getDB($LOCAL_DB_ZASOB_ID);
  298. $CONNLOCAL->query('set global max_allowed_packet=1000000000');
  299. //DEBUG_S(-3,'LOCAL_DB_ZASOB_ID/REMOTE',array($LOCAL_DB_ZASOB_ID,$REMOTE_DB_ZASOB_ID),__FILE__,__FUNCTION__,__LINE__);
  300. //DEBUG_S(-3,'LOCAL_DB_ZASOB_ID/REMOTE',$CONNLOCAL,__FILE__,__FUNCTION__,__LINE__);
  301. /*
  302. if(!isset($CNF_ZASOB[$LOCAL_DB_ZASOB_ID])&&($SYNC_OPTIONS!='CREATE_ZASOBY_DATABASE_DESC')) die1('Nie zdefiniowano w konfigu CONNREMOTE bazy '.$CONNLOCAL);
  303. $CONNLOCAL=mysql_connect($CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['INTERFACE_ADDR'], $CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_USER'], $CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_USER_PASS'])
  304. or die1('nie moge polaczyc z '.$CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['INTERFACE_ADDR']);
  305. mysql_select_db($CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_DATABASE'],$CONNLOCAL);
  306. if (isset($CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_NAMES'])) $res=mysql_query("SET NAMES '{$CNF_ZASOB[$LOCAL_DB_ZASOB_ID]['SQL_NAMES']}';",$CONNLOCAL);
  307. $res=mysql_query("SHOW VARIABLES LIKE 'character\_set\_%';",$CONNLOCAL);
  308. while($h=mysql_fetch_object($res)) {
  309. $kodowania_local[$h->Variable_name]=$h->Value;
  310. }
  311. DEBUG_S(-2,'Kodowania tej bazy local',$kodowania_local,__FILE__,__FUNCTION__,__LINE__);
  312. //echo "<pre> ".print_r($kodowania_local)." </pre>";
  313. */
  314. echo "<pre>\n";
  315. echo "<hr>Odpalilem SQIX_STRUCTURE_DB_SYNC";
  316. echo "\n Lacze sie z baza lokalna :".$LOCAL_DB_ZASOB_ID;
  317. echo "\n Lacze sie z baza zdalna :".$REMOTE_DB_ZASOB_ID;
  318. echo "\n Funkcja :".$SYNC_OPTIONS;
  319. if(isset($_SESSION['CONFIG']['sql_character_set'])) {
  320. // mysql_query("SET character_set_results = '".$_SESSION['CONFIG']['sql_character_set']."', character_set_client = '".$_SESSION['CONFIG']['sql_character_set']."', character_set_connection = '".$_SESSION['CONFIG']['sql_character_set']."', character_set_database = '".$_SESSION['CONFIG']['sql_character_set']."', character_set_server = '".$_SESSION['CONFIG']['sql_character_set']."'", $CONNLOCAL);
  321. // mysql_query("SET character_set_results = '".$_SESSION['CONFIG']['sql_character_set']."', character_set_client = '".$_SESSION['CONFIG']['sql_character_set']."', character_set_connection = '".$_SESSION['CONFIG']['sql_character_set']."', character_set_database = '".$_SESSION['CONFIG']['sql_character_set']."', character_set_server = '".$_SESSION['CONFIG']['sql_character_set']."'", $CONNREMOTE);
  322. // mysql_query("SET character_set_results = 'latin2', character_set_client = 'latin2', character_set_connection = 'latin2', character_set_database = 'latin2', character_set_server = 'latin2'", $CONNREMOTE);
  323. // mysql_set_charset('latin2',$CONNREMOTE);
  324. // mysql_query("SET NAMES 'utf-8'",$CONNREMOTE);
  325. }
  326. // print_r($CNF_ZASOB[$REMOTE_DB_ZASOB_ID]);
  327. function insert_converted($VAL) {
  328. // ! TODO @2013-02-18 funkcja ma za zadanie w odpowiedni sposob przekonwertowac zapisane dane
  329. global $kodowania_local,$kodowania_remote;
  330. /* $VALX=explode(" ",$VAL);
  331. foreach($VALX as $VALS) {
  332. $hex='';
  333. for ($i=0; $i < strlen($VALS); $i++)
  334. {
  335. $hex .=" ".dechex(ord($VALS[$i]));
  336. }
  337. echo "\n<br>".$VALS."==".$hex ;
  338. }
  339. // if($kodowania_local['character_set_server']<>$kodowania_remote['character_set_server']) {
  340. // $VAL = iconv('UTF-8', 'ISO-8859-2', $VAL);
  341. // $VAL = iconv($kodowania_remote['character_set_server'], $kodowania_local['character_set_server'], $VAL);
  342. //DEBUG_S(-3,'Kodowanie jest inne, wiec bedziemy konwertowac',array($kodowania_local,$kodowania_remote),__FILE__,__FUNCTION__,__LINE__);
  343. //}
  344. */
  345. return $VAL;
  346. }
  347. function SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS($CONNREMOTE,$CONFIRM_SQL_UPDATE) {
  348. // @2014-06-27 - chyba lepiej nie flushowac - jakby sie poprzedni import zwiesil?
  349. $sql_flush[]="update CRM_LISTA_ZASOBOW set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS'" ;
  350. $sql_flush[]="update CRM_IMAGE set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_PROC' ";
  351. $sql_flush[]="update CRM_PROCES set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_PROC_FIX_GOTO'" ;
  352. $sql_flush[]="update CRM_TESTY set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_PROC'" ;
  353. $sql_flush[]="update CRM_TESTY_PYTANIA set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_PROC'" ;
  354. $sql_flush[]="update CRM_WSKAZNIK set SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC' ";
  355. foreach($sql_flush as $sql) {
  356. if(!empty($CONFIRM_SQL_UPDATE)) { $result_ins=$CONNREMOTE->query($sql) or DIE('Problem ze sql:290: '.$sql.' / '.mysql_error($CONNREMOTE));
  357. DEBUG_S(-3,'Zeruje: tabele importow : w tabeli '.$TABLE,$sql,__FILE__,__FUNCTION__,__LINE__);
  358. }
  359. }
  360. }
  361. // ! FROM_ZASOBY_TO_ZASOBY
  362. function FROM_ZASOBY_TO_ZASOBY($CONNLOCAL,$CONNREMOTE,$SYSTEM_PROFILE_STRING_IMPORT_EXPORT,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE) {
  363. //0. zerujemy autorow translate aby import nic nie zepsul
  364. //1.szukam ID Procesow spelniajacych kryteria
  365. //2.szukam wszystkich ID procesow podrzednych - nizej
  366. //3.szukam wszystkich powiazanych WSKAZNIKOW
  367. //4.szukam wszystkich powiazanych ZASOBOW
  368. //4a. szukam wyszstkich zasobow powyzej danego zasobu
  369. //5. CRM_PYTANIA importuje
  370. //5a. trzeba importnac wszystkie CRM_IMAGE todo
  371. //6. wszystkie translacje zapisuje w specjalnej tabeli, kt￳ra tworze
  372. //6.0 @2013-01-23 , teraz mozna wykorzystywac juz ustalone wczesniej translacje jakos
  373. //6a. importuje strukture ID PROCESOW -> na NOWY_ID -> zapisuje
  374. //6b. importuje strukture zasobow -> NOWY_ID_ZASOBU -> zapisuje
  375. //6c. importuje strukture wskaznikow -> Nowy ID wskaznika, translacja ID_PROCESU, translacja ZASOBU
  376. //6d. TODO CECHY TEZ TRZEBA IMPORTNAC!
  377. //7. updatujemy ID z tabeli slownikowej na docelowe
  378. //use before function SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS($CONNREMOTE);
  379. //! function EXPORT_DATA_WITH_TRANSLATE_TABLE(
  380. function EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,$TABLE,$ARRAY_WITH_IDS,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE) {
  381. foreach($ARRAY_WITH_IDS as $ID_TO_IMPORT => $NIC) {
  382. flush();
  383. $last_inserted_id="";
  384. $sql="select * from ".$TABLE." where `ID`='".$ID_TO_IMPORT."'" ;
  385. DEBUG_S(3,"Importuje dane dla tabeli ".$TABLE." ",$sql,__FILE__, __FUNCTION__, __LINE__);
  386. $result_sel=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Blad SQL',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  387. while($h=mysql_fetch_object($result_sel)){
  388. //print_r($h);
  389. $SRC_TABLE_ID="";
  390. if($TABLE=='CRM_LISTA_ZASOBOW') {
  391. if(isset($CRM_IMPORT_TRANSLATE[$TABLE][$h->PARENT_ID])) {
  392. DEBUG_S(2,'NARZUCAM INNY PARENT ID '.$TABLE.' dla ID="'.$h->ID.'" "'.$h->PARENT_ID.'" na "'.$CRM_IMPORT_TRANSLATE[$TABLE][$h->PARENT_ID].'"','',__FILE__,__FUNCTION__,__LINE__);
  393. $h->PARENT_ID=$CRM_IMPORT_TRANSLATE[$TABLE][$h->PARENT_ID];
  394. }
  395. if(isset($CRM_IMPORT_TRANSLATE[$TABLE][$h->ALIAS_ID])) {
  396. DEBUG_S(2,'(CRM_LISTA_ZASOBOW->ALIAS_ID) NARZUCAM INNY PARENT ID '.$TABLE.' dla ID="'.$h->ID.'" "'.$h->ALIAS_ID.'" na "'.$CRM_IMPORT_TRANSLATE[$TABLE][$h->ALIAS_ID].'"','',__FILE__,__FUNCTION__,__LINE__);
  397. $h->ALIAS_ID=$CRM_IMPORT_TRANSLATE[$TABLE][$h->ALIAS_ID];
  398. }
  399. }
  400. if(isset($h->A_CLASSIFIED)) $h->A_CLASSIFIED='';
  401. if(isset($h->A_ADM_COMPANY)) $h->A_ADM_COMPANY='';
  402. //dodatkowo sprawdzamy liste przekierowanych wczesniej importow TRANSLATE
  403. $sql="select `DST_TABLE_ID` from `CRM_IMPORT_TRANSLATE` where `REM_TABLE`='".$TABLE."' and `SRC_TABLE_ID`='".$h->ID."' ;" ;
  404. $result_tst=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  405. $DST_FOUND_ID=0; $IF_NOT_REPLACED=true;
  406. while($tst=$CONNREMOTE->fetch($result_tst)) {
  407. //$h->PARENT_ID=$tst->DST_TABLE_ID;
  408. $DST_FOUND_ID=$tst->DST_TABLE_ID;
  409. $IF_NOT_REPLACED=false; //zaznaczamy, ze nie byl wczesniej zaimportowany
  410. if($CONFIRM_SQL_UPDATE!='REPLACE') {
  411. break 2;
  412. } else DEBUG_S(-3,'ZNALAZLEM_REKORD_IGNORUJE_IMPORT:" w tabeli '.$TABLE.' , src_id:'.$h->ID.', dst_id: '.$tst->DST_TABLE_ID.'" "'.$h->PARENT_ID.'"',$sql,__FILE__,__FUNCTION__,__LINE__);
  413. }
  414. // ! sprawdzmy czy w naszej tabeli nie ma jakiegos parenta, ktory zostal juz wstawiony jako inny ID - mozna z nim wstawic rekord nowy jako nadrzedny ?
  415. // if($TABLE=='CRM_WSKAZNIK') {
  416. // $sql="select DST_TABLE_ID from CRM_IMPORT_TRANSLATE where `REM_TABLE`='CRM_LISTA_ZASOBOW' and `SRC_TABLE_ID`='".$h->ID_ZASOB."' ;" ;
  417. // $result_tst=mysql_query($sql,$CONNREMOTE) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  418. // while($tst=mysql_fetch_object($result_tst)) {
  419. // }
  420. // }
  421. //if(isset($CRM_IMPORT_TRANSLATE[$TABLE][$h->ID])) { //to oznacza, ze jest zasob taki sam jak obcy, to polaczenia
  422. //
  423. //}
  424. $SYNC_SQIX_STATUS='SYSTEM_IMPORT';
  425. foreach($h as $IND=>$VAL) {//karmie komorki
  426. if($IND=='ID') {
  427. $SRC_TABLE_ID=$VAL;
  428. } else if($IND=='SYNC_SQIX_STATUS') {
  429. //@2014-02-05 proba wlasciwego oznaczenia nadpisanego P_ID aby nic mu juz tego PARENTA nie zmienilo potem:
  430. //@2014-04-03 to nie dziala!!! TODO nalezy ignorowac kolumne P_ID w takim wypadku!
  431. //@2017-11-15 bledne zalozenie, ze replace nie wymaga tlumaczenia - przeciez nadpisze sie P_ID!
  432. //if($CONFIRM_SQL_UPDATE!='REPLACE')
  433. // if(($DST_FOUND_ID>0)) $SYNC_SQIX_STATUS='_FIX_ZASOB';
  434. } else if(($TABLE=='CRM_LISTA_ZASOBOW')&&($IND=='A_LDAP_GID')) {
  435. //} else if(($CONFIRM_SQL_UPDATE=='REPLACE')&&($DST_FOUND_ID>0)&&($IND=='P_ID')) {
  436. // $SYNC_SQIX_STATUS='_FIX_ZASOB';
  437. //pusto nie nadpisujemy P_ID
  438. //} else if(($CONFIRM_SQL_UPDATE=='REPLACE')&&($DST_FOUND_ID>0)&&($IND=='PARENT_ID')) {
  439. // $SYNC_SQIX_STATUS='_FIX_ZASOB';
  440. //pusto nie nadpisujemy P_ID
  441. } else {
  442. $FIELDS[$IND]=$VAL;
  443. if($IF_NOT_REPLACED) $SQL_METHOD='insert';
  444. else if($CONFIRM_SQL_UPDATE=='REPLACE') {
  445. $SQL_METHOD='replace' ;
  446. }
  447. $sql_ins['sql']=$SQL_METHOD." into `".$TABLE."` ( `ID` , `SYNC_SQIX_STATUS` ";
  448. $sql_ins['fields']="";
  449. $sql_ins['values']=" '".$DST_FOUND_ID."' , '{$SYNC_SQIX_STATUS}' ";
  450. }
  451. }
  452. foreach($FIELDS as $IND=>$VAL) {
  453. $sql_ins['fields'].=", `".$IND."`";
  454. $sql_ins['values'].=", '". $CONNREMOTE->_(insert_converted($VAL))."'";
  455. }
  456. //die1($sql_ins['values']);
  457. $sql_ins['sql'].=$sql_ins['fields']." ) values ( ".$sql_ins['values']." ) ;";
  458. if(!empty($CONFIRM_SQL_UPDATE)) $result_ins=$CONNREMOTE->query($sql_ins['sql']) or DIE('Problem ze sql:481: '.$sql_ins['sql'].' / '.mysql_error($CONNREMOTE));
  459. $last_inserted_id=$CONNREMOTE->insert_id();
  460. if($TABLE<>'CRM_IMAGE') DEBUG_S(4,'DOdano do tabeli '.$TABLE.' PARENT("'.$h->P_ID.$h->PARENT_ID.'") rekord ID("'.$h->ID.'")(Lastid:"'.$last_inserted_id.'")sql:',$sql_ins['sql'],__FILE__,__FUNCTION__,__LINE__);
  461. if(empty($last_inserted_id)) {
  462. DEBUG_S(-3,'Blad dodania do bazy 1,5/2 SQL, pusty last_inserted_id',array($CONFIRM_SQL_UPDATE,$sql_ins['sql'],$last_inserted_id),__FILE__, __FUNCTION__, __LINE__) ;
  463. if(!empty($CONFIRM_SQL_UPDATE)) DIE();
  464. } else if($IF_NOT_REPLACED) {
  465. //$CRM_IMPORT_TRANSLATE[$TABLE][$SRC_TABLE_ID]=$last_inserted_id; //zapisujemy jaki dostal id nowy rekord
  466. $sql_translate="insert into CRM_IMPORT_TRANSLATE (`REM_TABLE`,`SRC_TABLE_ID`,`DST_TABLE_ID` ) values ('".$TABLE."','".$SRC_TABLE_ID."','".$last_inserted_id."')";
  467. DEBUG_S(-3,'Dopisujemy ID do tabeli slownikowej',$sql_translate,__FILE__, __FUNCTION__, __LINE__) ;
  468. if(!empty($CONFIRM_SQL_UPDATE)) $result_trans=$CONNREMOTE->query($sql_translate) or DEBUG_S(-3,'Blad dodania do bazy translate 2/2 SQL',$sql_translate,__FILE__, __FUNCTION__, __LINE__) or DIE();
  469. }
  470. }
  471. }
  472. }
  473. $HOW_MANY_RECURRENCES_EXEC=0;
  474. function FIND_CHILDS_OR_PARENTS_OF_FIELD($ID,$PARENT_OR_CHILD,$TABLE,$CONN,$HOW_MANY_RECURRENCES_EXEC,$found=array()) {
  475. DEBUG_S(5,'Szukam powiazanych struktur dla tabeli: '.$TABLE.' oraz ID: "'.$ID.'"',array($ID,$PARENT_OR_CHILD,$TABLE,$CONN,$HOW_MANY_RECURRENCES_EXEC,$found),__FILE__,__FUNCTION__,__LINE__);
  476. $HOW_MANY_RECURRENCES_EXEC++;
  477. $RECURENCES_MAX=1000; //TODO to be in config!
  478. if($HOW_MANY_RECURRENCES_EXEC>$RECURENCES_MAX) { DEBUG_S(-3,'Za duzo wyzwolen petli!',array($RECURENCES_MAX,$HOW_MANY_RECURRENCES_EXEC,$ID,$PARENT_OR_CHILD,$TABLE,$found),__FILE__, __FUNCTION__, __LINE__); die1();}
  479. if($PARENT_OR_CHILD=='PARENT') {
  480. $sql="select PARENT_ID from ".$TABLE." where ID='".$ID."' ";
  481. if($TABLE=='CRM_PROCES') $sql.=" union select `IF_TRUE_GOTO` as `PARENT_ID` from `CRM_PROCES` where `ID`='".$ID."' and IF_TRUE_GOTO>0 and IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN' ";
  482. //if($TABLE=='CRM_LISTA_ZASOBOW') $sql.=" and EXPORT_PARAM='PUBLIC' ";
  483. } else if($PARENT_OR_CHILD=='CHILD') {
  484. $sql_what="";
  485. if($TABLE=='CRM_LISTA_ZASOBOW') $sql_what.=" , ALIAS_ID "; //to get also aliases STUFF
  486. $sql="select ID ".$sql_what." from ".$TABLE." where PARENT_ID='".$ID."' ";
  487. if($TABLE=='CRM_PROCES') $sql.=" and EXPORT_PARAM='PUBLIC' union select `IF_TRUE_GOTO` as `ID` from `CRM_PROCES` where `ID`='".$ID."' and IF_TRUE_GOTO>0 and IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN' ";
  488. if($TABLE=='CRM_LISTA_ZASOBOW') $sql.=" and EXPORT_PARAM='PUBLIC' ";
  489. }
  490. DEBUG_S(6,'Zapytanie do poszukania dziecka/rodzica ID "'.$ID.'"',array($HOW_MANY_RECURRENCES_EXEC,$sql),__FILE__, __FUNCTION__, __LINE__);
  491. $result=$CONN->query($sql) or DEBUG_S(-3,'Problem ze SQL przy szukaniu powiazan dzieci/rodzicow',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  492. $cnt=0;
  493. while($h=mysql_fetch_object($result)) {
  494. $cnt++;
  495. if($PARENT_OR_CHILD=='PARENT') $connections=$h->PARENT_ID;
  496. else if($PARENT_OR_CHILD=='CHILD') $connections=$h->ID;
  497. //$ret[]=$connections;
  498. $IMPORT[]=$connections;
  499. // if($HOW_MANY_RECURRENCES_EXEC<$RECURENCES_MAX)
  500. $found[]=$connections;
  501. //if(!in_array($connections, $found))@2014-04-03 TODO jak beda GOTO_AND_RETURN zapetlone, to sie zwiesi i nie wiem jak to wykryc TODO PIOTR jakos zmienna trzeba zapodac inaczej
  502. $x=FIND_CHILDS_OR_PARENTS_OF_FIELD($connections,$PARENT_OR_CHILD,$TABLE,$CONN,$HOW_MANY_RECURRENCES_EXEC,null);
  503. if(!empty($x)) {
  504. foreach($x as $push) {
  505. array_push($IMPORT,$push);
  506. }
  507. }
  508. if(!empty($h->ALIAS_ID)) { //wyszukanie struktur dla ALIASOW //Moze sie zapetlic!
  509. DEBUG_S(3,' Natrafilem na ALIAS_ID wyszukuje jego rodzicow('.$h->ALIAS_ID.')',null,__FILE__,__FUNCTION__,__LINE__);
  510. $IMPORT[]=$h->ALIAS_ID;
  511. $x=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ALIAS_ID,'PARENT',$TABLE,$CONN,$HOW_MANY_RECURRENCES_EXEC,null);
  512. if(!empty($x)) {
  513. foreach($x as $push) {
  514. array_push($IMPORT,$push);
  515. }
  516. }
  517. }
  518. }
  519. // foreach($IMPORT as $VAR){
  520. // $RETURN[]=$VAR;
  521. // }
  522. //foreach($childs_of_proces as $VAR){
  523. //$RETURN[]=$VAR;
  524. //}
  525. //DEBUG_S(3,'Znalazlem tyle skojarzonych rekordow: ',$IMPORT,__FILE__,__FUNCTION__,__LINE__);
  526. if(!empty($IMPORT))
  527. return $IMPORT;
  528. }
  529. $sql="select `ID` from CRM_PROCES where ( `TAGS` like '".$SYSTEM_PROFILE_STRING_IMPORT_EXPORT."' or `ID` like '".$SYSTEM_PROFILE_STRING_IMPORT_EXPORT."' ";
  530. if(strstr($SYSTEM_PROFILE_STRING_IMPORT_EXPORT,',')) {
  531. $search = explode(',',$SYSTEM_PROFILE_STRING_IMPORT_EXPORT);
  532. foreach($search as $string) {
  533. $sql.=" or `TAGS` like '".$string."' ";
  534. $sql.=" or `ID` like '".$string."' ";
  535. }
  536. }
  537. $sql.=" ) and `A_STATUS`!='DELETED' and EXPORT_PARAM!='PRIVATE'"; // ! szukam glownej listy procesow do importu wg klucza
  538. DEBUG_S(-3,'1. szukam procesow spelniajacych kryteria import ',array($SYSTEM_PROFILE_STRING_IMPORT_EXPORT,$sql),__FILE__, __FUNCTION__, __LINE__);
  539. $result=$CONNLOCAL->query($sql);
  540. $childs_of_proces_arr=array();
  541. while($h=mysql_fetch_object($result)) {
  542. array_push($childs_of_proces_arr,$h->ID);
  543. $x=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID,'CHILD','CRM_PROCES',$CONNLOCAL,null,null);
  544. foreach($x as $push) { array_push($childs_of_proces_arr,$push); }
  545. $x=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID,'PARENT','CRM_PROCES',$CONNLOCAL,null,null);
  546. foreach($x as $push) { array_push($childs_of_proces_arr,$push); }
  547. }
  548. DEBUG_S(-3,'wyszlo : Znaleziono liste procesow do exportu przed :',$childs_of_proces_arr,__FILE__, __FUNCTION__, __LINE__);
  549. foreach($childs_of_proces_arr as $cos) {
  550. $childs_of_proces_arr_zjebany[$cos]=1;
  551. }
  552. flush();
  553. DEBUG_S(-3,'Znaleziono liste procesow do exportu :',$childs_of_proces_arr_zjebany,__FILE__, __FUNCTION__, __LINE__);
  554. foreach($childs_of_proces_arr_zjebany as $PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA=>$NIC) {
  555. // ! szukam CRM_IMAGE po procesach
  556. $sql="select ID from CRM_IMAGE where REMOTE_ID='".$PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA."' and REMOTE_TABLE='CRM_PROCES' " ;
  557. $result_img=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Szukam CRM_IMAGE do procesow/zasobow sql: ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  558. while($hh=mysql_fetch_object($result_img)){
  559. $crm_image_to_import[$hh->ID]=1;
  560. }
  561. $sql="select CP.ID from CRM_TESTY_PYTANIA as CP
  562. left join CRM_WSKAZNIK as CW on CW.ID=CP.ID_WSKAZNIK
  563. left join CRM_LISTA_ZASOBOW as CZ on CZ.ID=CW.ID_ZASOB
  564. where CP.ID_PROCES='".$PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA."'
  565. and ( CZ.EXPORT_PARAM!='PRIVATE' OR CZ.EXPORT_PARAM IS NULL ) " ; // ! todo verify- bylo $h->ID_ZASOB , chyba blad
  566. $result_pyt=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Szukam testow/pytan do procesu sql: ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  567. while($hh=mysql_fetch_object($result_pyt)){
  568. $pytania_to_import[$hh->ID]=1;
  569. }
  570. $sql="select t1.ID ,t1.ID_ZASOB , t1.ID_PROCES , CZ.ALIAS_ID from CRM_WSKAZNIK as t1
  571. left join CRM_LISTA_ZASOBOW as CZ on CZ.ID=t1.ID_ZASOB
  572. where t1.ID_PROCES='".$PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA."' and CZ.EXPORT_PARAM!='PRIVATE' ";//and t1.A_STATUS in ('NORMAL','WAITING') - delety tez sie musza przegrac i nadpisac
  573. DEBUG_S(4,'1. szukam wskaznikow ( i zasobow root ) spelniajacych kryteria import '.$PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA,array($PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA,$sql),__FILE__, __FUNCTION__, __LINE__);
  574. $result=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Problem z zapytaniem SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  575. while($h=mysql_fetch_object($result)) {
  576. $wskazniki_to_import[$h->ID]=array('ID_PROCES'=>$h->ID_PROCES, 'ID_ZASOB'=>$h->ID_ZASOB);
  577. if(!empty($h->ALIAS_ID)) {
  578. DEBUG_S(1,'Dodaje zasob do importu z uwagi na ALIAS_ID('.$h->ALIAS_ID.')',null,__FILE__,__FUNCTION__,__LINE__);
  579. $zasoby_to_import[][]=$h->ALIAS_ID;
  580. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ALIAS_ID,'PARENT','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  581. } //TODO@2014-08-13 testing
  582. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID_ZASOB,'PARENT','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  583. $zasoby_to_import[][]=$h->ID_ZASOB;
  584. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID_ZASOB,'CHILD','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  585. $sql="select ID from CRM_TESTY_PYTANIA where ID_WSKAZNIK='".$h->ID."' " ; // ! todo verify- bylo $h->ID_ZASOB , chyba blad
  586. $result_pyt=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Szukam testow/pytan do procesu sql: ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  587. while($hh=mysql_fetch_object($result_pyt)){
  588. $pytania_to_import[$hh->ID]=1;
  589. }
  590. $sql="select ID from CRM_IMAGE where REMOTE_ID='".$h->ID_ZASOB."' and REMOTE_TABLE='CRM_LISTA_ZASOBOW' " ;
  591. $result_pyt=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Szukam CRM_IMAGE do procesow/zasobow sql: ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  592. while($hh=mysql_fetch_object($result_pyt)){
  593. $crm_image_to_import[$hh->ID]=1;
  594. }
  595. //TODO tutaj cechy trzeba importnac
  596. }
  597. DEBUG_S(4,'zasoby_to_import/wskazniki',array($zasoby_to_import,$wskazniki_to_import),__FILE__, __FUNCTION__, __LINE__);
  598. foreach($zasoby_to_import as $VAR) {
  599. foreach($VAR as $ZASOBY){
  600. $zasoby_to_import_arr[$ZASOBY]=1;
  601. }
  602. }
  603. DEBUG_S(4,'$zasoby_to_import_arr',$zasoby_to_import_arr,__FILE__, __FUNCTION__, __LINE__);
  604. unset($zasoby_to_import);
  605. }
  606. DEBUG_S(1,'Ogolnie znaleziono zasoby_to_import_arr',$zasoby_to_import_arr,__FILE__, __FUNCTION__, __LINE__);
  607. //@2013-07 - wyszukanie specjalnych funkcji do importu
  608. $sql="select CZ.ID as ID_ZASOB, CZ.ALIAS_ID from CRM_LISTA_ZASOBOW as CZ
  609. where ( CZ.`DESC`='VARIABLES' or CZ.`DESC`='TYPESPECIALS' or CZ.`TYPE`='TYPESPECIAL' or CZ.`TYPE`='PARAM_OUT' or CZ.`TYPE`='PARAM_IN' or CZ.`TYPE`='SQL_EQUAL' ) and CZ.EXPORT_PARAM!='PRIVATE'";
  610. DEBUG_S(2,'1. szukam typespecial/funkcji do importu (',$sql,__FILE__, __FUNCTION__, __LINE__);
  611. $result=$CONNLOCAL->query($sql) or die1('\nProblem z '.$sql);
  612. while($h=mysql_fetch_object($result)) {
  613. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID_ZASOB,'PARENT','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  614. $zasoby_to_import[][]=$h->ID_ZASOB;
  615. if(!empty($h->ALIAS_ID)) $zasoby_to_import[][]=$h->ALIAS_ID;
  616. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID_ZASOB,'CHILD','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  617. }
  618. DEBUG_S(-3,'typespecial zasoby_to_import_arr',$zasoby_to_import,__FILE__, __FUNCTION__, __LINE__);
  619. foreach($zasoby_to_import as $VAR) {
  620. foreach($VAR as $ZASOBY){
  621. $zasoby_to_import_arr[$ZASOBY]=1;
  622. }
  623. }
  624. unset($zasoby_to_import);
  625. //@2017-11-23 nie da sie robic update w zasobach - z uwagi na tabele _zasob_path_idx - ktora to zawiesza - trzeba ja wyczyscic - dwa razy - przy update i translate update
  626. // $sql='truncate table _zasob_path_idx;';
  627. // if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  628. //_CRM_LISTA_ZASOBOW_tree_AFTER_UPDATE
  629. $sql='drop trigger if exists _CRM_LISTA_ZASOBOW_tree_AFTER_UPDATE ;';
  630. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  631. //_CRM_LISTA_ZASOBOW_tree_UPDATE
  632. $sql='drop trigger if exists _CRM_LISTA_ZASOBOW_tree_UPDATE ;';
  633. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  634. //todo
  635. DEBUG_S(-3,'Importuje CRM_PROCES Bede importowac dane, bo Znaleziono liste wskaznikow oraz zasobow do exportu wskazniki_to_import,zasoby_to_import_arr,pytania_to_import:',$childs_of_proces_arr_zjebany,__FILE__, __FUNCTION__, __LINE__);
  636. //importuje PROCESU
  637. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_PROCES',$childs_of_proces_arr_zjebany,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  638. DEBUG_S(-3,'Importuje CRM_WSKAZNIK w oparciu o klucze ID',$wskazniki_to_import,__FILE__, __FUNCTION__, __LINE__);
  639. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_WSKAZNIK',$wskazniki_to_import,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  640. DEBUG_S(-3,'Importuje CRM_LISTA_ZASOBOW w oparciu o klucze ID',$zasoby_to_import_arr,__FILE__, __FUNCTION__, __LINE__);
  641. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_LISTA_ZASOBOW',$zasoby_to_import_arr,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  642. DEBUG_S(-3,'Importuje CRM_TESTY_PYTANIA w oparciu o klucze ID',$pytania_to_import,__FILE__, __FUNCTION__, __LINE__);
  643. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_TESTY_PYTANIA',$pytania_to_import,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  644. DEBUG_S(-3,'Importuje CRM_IMAGE w oparciu o klucze ID',$crm_image_to_import,__FILE__, __FUNCTION__, __LINE__);
  645. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_IMAGE',$crm_image_to_import,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  646. // aktualizujemy PARAM_OUT dla zaimportowanych zasobow:
  647. //@2015-05-15 TODO-test obejscie typespecial PARAM_OUT dla przekazywanych parametrów np. &ZASOB_ID=4095 - trzeba tutaj tez podmienić na właściwy numer zasobu.
  648. $sql="select `ID`,`DESC` from CRM_LISTA_ZASOBOW where `TYPE`='PARAM_OUT' and SYNC_SQIX_STATUS not like '%FIX_ZASOB%' and SYNC_SQIX_STATUS not like '' ";
  649. $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  650. while($h=mysql_fetch_object($result)) {
  651. if (false !== strpos($h->DESC, 'VIEWTABLE_AJAX')) {
  652. $id_zas_new_h_DESC = $h->DESC;
  653. $matches = array();
  654. if (preg_match_all('/&ZASOB_ID=([0-9]+)/', $id_zas_new_h_DESC, $matches)) {
  655. if (count($matches) >= 2 && !empty($matches[1])) {
  656. $sqlIds = implode(",", $matches[1]);
  657. $sql_to_find_parent="select `DST_TABLE_ID`, `SRC_TABLE_ID`
  658. from `CRM_IMPORT_TRANSLATE`
  659. where `REM_TABLE` = 'CRM_LISTA_ZASOBOW'
  660. and `SRC_TABLE_ID` in({$sqlIds})
  661. ";
  662. $res_to_find_parent_param=$CONNREMOTE->query($sql_to_find_parent) or DEBUG_S(-3,'Problem ze sql ',$sql_to_find_parent,__FILE__, __FUNCTION__, __LINE__) or die1('');
  663. while($h_res_to_find_TS=mysql_fetch_object($res_to_find_parent_param)) {
  664. $paramOutLinkZasobId = $h_res_to_find_TS->SRC_TABLE_ID;
  665. $newLinkZasobId = $h_res_to_find_TS->DST_TABLE_ID;
  666. $id_zas_new_h_DESC = preg_replace('/&ZASOB_ID='.$paramOutLinkZasobId.'/', '&ZASOB_ID='.$newLinkZasobId, $id_zas_new_h_DESC);
  667. }
  668. if($id_zas_new_h_DESC != $h->DESC) { $sql_upd="update CRM_LISTA_ZASOBOW set `DESC`='".$CONNREMOTE->_($id_zas_new_h_DESC)."' where ID=".$h->ID." ; ";
  669. $CONNREMOTE->query($sql_upd) or die('Error with upd TYPESPECIAL PARAM_OUT line: 709:'.$sql_upd);
  670. DEBUG_S(-3,'Nadpisuje TYPESPECIAL PARAM_OUT, ktory ma uzyty URL z ID_ZASOB',$sql_upd,__FILE__,__FUNCTION__,__LINE__);
  671. }
  672. }
  673. }
  674. }
  675. }
  676. //@2017-11-23 nie da sie robic update w zasobach - z uwagi na tabele _zasob_path_idx - ktora to zawiesza - trzeba ja wyczyscic - dwa razy - przy update i translate update
  677. // $sql='truncate table _zasob_path_idx;';
  678. // if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  679. // ! aktualizujemy numery P_ID powiazanych tabel po tabeli translate dla IMPORTow z wyjatkiem celowo nadpisanych P_ID
  680. $sql='select * from CRM_IMPORT_TRANSLATE ;' ;
  681. $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  682. while($h=mysql_fetch_object($result)) {
  683. set_time_limit(36000);
  684. if(isset($sql)) unset($sql);
  685. if($h->REM_TABLE=='CRM_LISTA_ZASOBOW') {
  686. //trzeba sprawdzic, czy dany typ jest komorka w tabeli
  687. //tylko jezeli wszedl z tego importu
  688. /* TODO @2017-09-25 nie dziala funkcja get_cols jak nie ma tabeli ma fatal error
  689. if(isset($zasoby_to_import_arr[$h->SRC_TABLE_ID])) {
  690. $sql_chk="select t2.`ID` as ID_TABLE, t2.`TYPE`,t2.`DESC` as `TABLE`, t1.`DESC`,t1.`COLUMN_DEFAULT`,t1.`IS_NULLABLE`,t1.`COLUMN_TYPE`,t1.`IS_AUTO_INCREMENT` from CRM_LISTA_ZASOBOW as t1 left join CRM_LISTA_ZASOBOW as t2 on t1.PARENT_ID=t2.ID where t1.ID='".$h->SRC_TABLE_ID."' and t1.`TYPE`='KOMORKA' and t2.`TYPE`='TABELA'";
  691. //trzeba sprawdzic, czy taka komorka istnieje w danej tabeli
  692. $res_chk=$CONNLOCAL->query($sql_chk);
  693. while($chk=$CONNLOCAL->fetch($res_chk)) {
  694. //jak nie istnieje, trzeba ja dodac
  695. //$sql_chk="select";
  696. DEBUG_S(3,'Sprawdzam czy istnieje komorka fizycznie w bazie',array($chk,$sql_chk),__FILE__,__FUNCTION__,__LINE__);
  697. $chk_obj= new Data_Source() ;
  698. $chk_obj->setTable($chk->TABLE);
  699. $chk_obj->get_cols();
  700. if(empty($chk_obj->_col_types)) {
  701. DEBUG_S(3,'ckh_obj IS EMPTY!! Creating database from CRM_LISTA_ZASOBOW field: TABLE_STRUCTURE from field_src_id:'.$h->SRC_TABLE_ID." src_field_name:".$chk->DESC." src_table_id ".$chk->ID_TABLE." src_field_name ".$chk->TABLE,$chk_obj,__FILE__,__FUNCTION__,__LINE__);
  702. $sql_="select TABLE_STRUCTURE from CRM_LISTA_ZASOBOW where ID=".$chk->ID_TABLE ;
  703. $res_str=$CONNLOCAL->query($sql_); unset($sql_);
  704. $struct=$CONNLOCAL->get_by_id('CRM_LISTA_ZASOBOW',$chk->ID_TABLE);
  705. DEBUG_S(4,'The structure of table is',$struct,__FILE__,__FUNCTION__,__LINE__);
  706. if(!empty($struct->TABLE_STRUCTURE)) { //parsing unserialize to build structure
  707. $arr_=unserialize(stripcslashes($struct->TABLE_STRUCTURE));
  708. if(is_array($arr_)) {
  709. $arr[$chk->TABLE]=$arr_;
  710. DEBUG_S(4,'Uruchamian STRUCTURE_GENERATE_PARSE',$arr,__FILE__,__FUNCTION__,__LINE__);
  711. if($struct->TABLE_STRUCTURE[$chk->TABLE]=='BASE TABLE')
  712. $CONNREMOTE->STRUCTURE_GENERATE_PARSE($arr);
  713. else DEBUG_S(3,'(TODO TESTOWO WYLACZONE DLA VIEW BO NIE DZIALAJA WIDOKI!!!!)',$arr,__FILE__,__FUNCTION__,__LINE__);
  714. unset($arr);unset($arr_);
  715. }
  716. }
  717. }
  718. // DEBUG_S(3,'ckh_obj from '.$h->SRC_TABLE_ID,$chk_obj);
  719. list($src_col_type,$src_col_default)=explode(';',$chk_obj->_col_types[$chk->DESC]);
  720. if($chk->COLUMN_TYPE!=$src_col_type) DEBUG_S(4,"ERROR BLAD TYPU!!!".$chk->COLUMN_TYPE."!=".$src_col_type."!",array($chk_obj,$chk),__FILE__,__FUNCTION__,__LINE__);
  721. unset($chk_obj);
  722. //print_r($CONNREMOTE);
  723. //die();
  724. }
  725. } */
  726. // else echo "<br> id ".$h->SRC_TABLE_ID." nie jest w arrayu";
  727. /* if(in_array($h->SRC_TABLE_ID, array_keys($zasoby_to_import_arr))) {
  728. $zasobObj = ProcesHelper::getZasobTableInfo($h->DST_TABLE_ID);
  729. if ($zasobObj) {
  730. $tabele_to_import[$zasobObj->P__ID][$zasobObj->ID]=$zasobObj->DESC;
  731. DEBUG_S(-3,'Znaleziona tabela do importy',$zasobObj,__FILE__,__FUNCTION__,__LINE__);
  732. }
  733. }
  734. */
  735. //nie powinno siᅣ? podmieniac ID dla rekordow ze sztywno ustalanym P_ID
  736. //@2014-04-03 podmiana kolejnosci w in_array
  737. if( in_array($h->SRC_TABLE_ID,$CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW']) ) {
  738. DEBUG_S(-3,'Pominalem translate dla SRC_TABLE_ID '.$h->SRC_TABLE_ID.' z uwagi na in_array w CRM_IMPORT_TRANSLATE',$CRM_IMPORT_TRANSLATE,__FILE__,__FUNCTION__,__LINE__);
  739. continue ;
  740. }
  741. //@2014-04-03 podmiana kolejnosci w in_array
  742. if( in_array($h->DST_TABLE_ID,$CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW']) ) {
  743. DEBUG_S(-3,'Pominalem translate dla SRC_TABLE_ID '.$h->DST_TABLE_ID.' z uwagi na in_array w CRM_IMPORT_TRANSLATE',$CRM_IMPORT_TRANSLATE,__FILE__,__FUNCTION__,__LINE__);
  744. continue ;
  745. }
  746. $sql[]="update ".$h->REM_TABLE." set PARENT_ID='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_ZASOB') where PARENT_ID='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS not like '%FIX_ZASOB%' and SYNC_SQIX_STATUS not like '' ;";
  747. $sql[]="update CRM_WSKAZNIK set ID_ZASOB='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_ZASOB') where ID_ZASOB='".$h->SRC_TABLE_ID."' and ( SYNC_SQIX_STATUS not like '%FIX_ZASOB%' ) and SYNC_SQIX_STATUS not like '' ;"; //WSKAZNIK moze miec 2 razy aktualizacje tylko
  748. $sql[]="update CRM_IMAGE set REMOTE_ID='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`='SYSTEM_IMPORT_FIXED' where REMOTE_ID='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS='SYSTEM_IMPORT' and REMOTE_TABLE='CRM_LISTA_ZASOBOW' and SYNC_SQIX_STATUS not like '' ;";
  749. $sql[]="update ".$h->REM_TABLE." set ALIAS_ID='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_ALIAS') where ALIAS_ID='".$h->SRC_TABLE_ID."' and ( SYNC_SQIX_STATUS not like '%FIX_ALIAS%' and SYNC_SQIX_STATUS not like '' ) ;"; //WSKAZNIK moze miec 2 razy aktualizacje tylko
  750. }
  751. if($h->REM_TABLE=='CRM_PROCES') {
  752. $sql[]="update ".$h->REM_TABLE." set PARENT_ID='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_PROC') where PARENT_ID='".$h->SRC_TABLE_ID."' and ( SYNC_SQIX_STATUS not like '%FIX_PROC%' );";
  753. $sql[]="update ".$h->REM_TABLE." set IF_TRUE_GOTO='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_GOTO') where IF_TRUE_GOTO='".$h->SRC_TABLE_ID."' and ( SYNC_SQIX_STATUS not like '%FIX_GOTO%' );";
  754. $sql[]="update CRM_WSKAZNIK set ID_PROCES='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_PROC') where ID_PROCES='".$h->SRC_TABLE_ID."' and ( SYNC_SQIX_STATUS not like '%FIX_PROC%' ) ;"; //WSKAZNIK moze miec 2 razy aktualizacje tylko
  755. $sql[]="update CRM_IMAGE set REMOTE_ID='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`='SYSTEM_IMPORT_FIXED' where REMOTE_ID='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS='SYSTEM_IMPORT' and REMOTE_TABLE='CRM_PROCES' ;";
  756. $sql[]="update CRM_TESTY_PYTANIA set ID_PROCES='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`='SYSTEM_IMPORT_FIXED' where ID_PROCES='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS='SYSTEM_IMPORT' ;";
  757. }
  758. // if($h->REM_TABLE=='CRM_TESTY_PYTANIA') {
  759. // $sql[]="update ".$h->REM_TABLE." set ID_PROCES='".$h->DST_TABLE_ID."' where ID_PROCES='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS='SYSTEM_IMPORT' ; ";
  760. //
  761. // }
  762. if($h->REM_TABLE=='CRM_WSKAZNIK') {
  763. //$sql[]="update ".$h->REM_TABLE." set ID_PROCES='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_WSKAZNIK') where ID_PROCES='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS='SYSTEM_IMPORT' ;";
  764. $sql[]="update CRM_TESTY_PYTANIA set ID_WSKAZNIK='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_WSKAZNIK') where ID_WSKAZNIK='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS not like '%FIX_WSKAZNIK%' ;";
  765. $sql[]="update CRM_IMAGE set REMOTE_ID='".$h->DST_TABLE_ID."',`SYNC_SQIX_STATUS`=concat(`SYNC_SQIX_STATUS`,'_FIX_WSKAZNIK') where REMOTE_ID='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS not like '%FIX_WSKAZNIK%' and REMOTE_TABLE='CRM_WSKAZNIK' ;";
  766. }
  767. // if($h->REM_TABLE=='CRM_IMAGE') {
  768. // $sql[]="update ".$h->REM_TABLE." set REMOTE_ID='".$h->DST_TABLE_ID."' where ID_PROCES='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS='SYSTEM_IMPORT' ;";
  769. // $sql[]="update CRM_TESTY_PYTANIA set ID_WSKAZNIK='".$h->DST_TABLE_ID."' where ID_WSKAZNIK='".$h->SRC_TABLE_ID."' and SYNC_SQIX_STATUS='SYSTEM_IMPORT' ;";
  770. // }
  771. // echo "\n ".$sql;
  772. foreach($sql as $zap) {
  773. DEBUG_S(5,'Syncrhonizacja numerow ID ZAP '.$zap,'',__FILE__, __FUNCTION__, __LINE__);
  774. if(!empty($CONFIRM_SQL_UPDATE)) $result_sync=$CONNREMOTE->query($zap) or DEBUG_S(-3,'Blad synchronizacji ',$zap,__FILE__, __FUNCTION__, __LINE__) ; //or DIE(); - nie dziala update w zasobach przez trigger
  775. }
  776. }
  777. // ! wszystkie importy zaznaczamy z SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIXED'
  778. $tables=array('CRM_WSKAZNIK','CRM_PROCES','CRM_LISTA_ZASOBOW','CRM_IMAGE','CRM_TESTY_PYTANIA');
  779. foreach($tables as $table) {
  780. $sql="update `".$table."` set `SYNC_SQIX_STATUS`='SYSTEM_IMPORT_FIXED' where `SYNC_SQIX_STATUS`='SYSTEM_IMPORT' ";
  781. DEBUG_S(-3,'Przemiania zsynchronizowanych rekordow aby drugi raz ich nie aktualizowac'.$sql,'',__FILE__, __FUNCTION__, __LINE__);
  782. if(!empty($CONFIRM_SQL_UPDATE)) $result_sync=$CONNREMOTE->query($sql) or DEBUG_S(-3,' aktualizacji ',$sql,__FILE__, __FUNCTION__, __LINE__) ;// or DIE(); - nie dziala update w zasobach przez trigger
  783. }
  784. // ! wszystkie importy A_ADM_COMPANY oraz A_CLASSIFIED - nieustalone
  785. $tables=array('CRM_WSKAZNIK','CRM_PROCES','CRM_LISTA_ZASOBOW','CRM_TESTY_PYTANIA');
  786. foreach($tables as $table) {
  787. $sql="update `".$table."` set `A_ADM_COMPANY`='', A_CLASSIFIED='' where 1=1 ";
  788. DEBUG_S(-3,'8631# Wszystkie importy A_ADM_COMPANY oraz A_CLASSIFIED - nieustalone '.$sql,'',__FILE__, __FUNCTION__, __LINE__);
  789. if(!empty($CONFIRM_SQL_UPDATE)) $result_sync=$CONNREMOTE->query($sql) or DEBUG_S(-3,' aktualizacji ',$sql,__FILE__, __FUNCTION__, __LINE__) ; // or DIE(); - nie dziala update w zasobach przez trigger
  790. }
  791. //synchronizacja struktur
  792. DEBUG_S(-3,'tabele_to_import',$tabele_to_import,__FILE__, __FUNCTION__, __LINE__);
  793. //importuje struktury
  794. // foreach($tabele_to_import as $id_bazy=>$tabele) {
  795. // //$db[$id_bazy]=DB::getDB($id_bazy);
  796. // $struct[$id_bazy]=$CONNLOCAL->STRUCTURE_GENERATE($tabele,null,null); //TODO id_bases_try_to_get_struct
  797. // }
  798. DEBUG_S(3,'struct - struktura do exporty',$struct,__FILE__, __FUNCTION__, __LINE__);
  799. // die('smierc');
  800. // $STRUCT_TABLE['CRM_PROCES']='PARENT_ID';
  801. // $STRUCT_TABLE['CRM_WSKAZNIK']='ID_PROCES'; //TODO PARENT ID
  802. // $STRUCT_TABLE['CRM_LISTA_ZASOBOW']='PARENT_ID';
  803. }//eof FUNC FROM_ZASOBY_TO_ZASOBY
  804. //funkcja do usuniecia zasobow ze zdublowanymi nazwami, najlepiej tych, ktore nie maja uzytych procesow
  805. function STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES($DUP_RESOURCE_PARENT_ID,$DUP_RESOURCE_DESC,$CONNREMOTE,$CONFIRM_SQL_UPDATE) {
  806. DEBUG_S(-3,'Bede czyscic tabele struktury dla ',array($DUP_RESOURCE_PARENT_ID,$DUP_RESOURCE_DESC,$CONNREMOTE,__FILE__, __FUNCTION__, __LINE__));
  807. //szukamy ID zasobow zduplikowanych
  808. $sql="select CZ.`ID` as CZ_ID ,CZ.`A_STATUS` as CZ_A_STATUS, CZ.`DESC` as CZ_DESC , CZ.`OPIS` as CZ_OPIS ,
  809. CP.`ID` as CP_ID, CP.`TYPE` as CP_TYPE, CP.`OPIS` as CP_OPIS , CP.`A_STATUS` as CP_A_STATUS ,
  810. CW.`ID` as CW_ID, CW.`ID_PROCES` as CW_ID_PROCES , CW.`ID_ZASOB` as CW_ID_ZASOB , CW.`OPIS_ZASOB` as CW_OPIS_ZASOB , CW.`A_STATUS` as CW_A_STATUS
  811. from CRM_LISTA_ZASOBOW as CZ
  812. left join CRM_WSKAZNIK as CW on CW.`ID_ZASOB`=CZ.`ID` and CW.`A_STATUS`!='DELETED'
  813. left join CRM_PROCES as CP on CP.`ID`=CW.`ID_PROCES` and CP.`A_STATUS`!='DELETED'
  814. where CZ.`PARENT_ID`='".$DUP_RESOURCE_PARENT_ID."' and CZ.`DESC`='".$DUP_RESOURCE_DESC."'
  815. ";
  816. echo "\n ".$sql;
  817. $result=$CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  818. if(mysql_num_rows($result)==1) die1('Niewlasciwe wyzwolenie funkcji, jest tylko 1 zasob');
  819. while($h=mysql_fetch_object($result)) {
  820. //settype($h->CZ_ID, "integer");
  821. $ZASOB_TO_DEL[$h->CZ_ID]=0;
  822. if($h->CZ_A_STATUS=='DELETED') $ZASOB_TO_DEL[$h->CZ_ID]+=101; //status deleted to duzy motyw do usuniecia
  823. if(strlen($h->CZ_OPIS)<10) { $ZASOB_TO_DEL[$h->CZ_ID]+=11; //krotki opis
  824. echo " CZ_OPIS:: (".$h->CZ_OPIS.")";
  825. }
  826. if($h->CP_A_STATUS=='DELETED') $ZASOB_TO_DEL[$h->CZ_ID]+=102; //status deleted to duzy motyw do usuniecia
  827. if(strlen($h->CP_OPIS)<10) $ZASOB_TO_DEL[$h->CZ_ID]+=12; //krotki opis
  828. if($h->CW_A_STATUS=='DELETED') $ZASOB_TO_DEL[$h->CZ_ID]+=103; //status deleted to duzy motyw do usuniecia
  829. if(strlen($h->CW_OPIS_ZASOB)<10) $ZASOB_TO_DEL[$h->CZ_ID]+=13; //krotki opis
  830. //$ZASOB_TO_DEL[$h->CZ_ID]+=rand(0,30);
  831. }
  832. //$ZASOB_TO_DEL=array_flip($ZASOB_TO_DEL);
  833. print_r($ZASOB_TO_DEL);
  834. arsort($ZASOB_TO_DEL);
  835. print_r($ZASOB_TO_DEL);
  836. //kasujemy rekordy z bazy danych -> ustalamy status na DELETED i kasujemy PARENT_ID na NULL
  837. $max_count=count($ZASOB_TO_DEL)-1;
  838. $count=1;
  839. foreach($ZASOB_TO_DEL as $ID_ZASOBU=>$POINTS_TO_REM) {
  840. $sql="update CRM_LISTA_ZASOBOW set `PARENT_ID`=NULL, `A_STATUS`='DELETED' where `ID`='".$ID_ZASOBU."'";
  841. echo "\n".$sql;
  842. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  843. $count++;
  844. if($count>$max_count) break;
  845. }
  846. }
  847. // ! CREATE_ZASOBY_STRUCTURES_CONFIG
  848. if($SYNC_OPTIONS=='CREATE_ZASOBY_STRUCTURES_CONFIG') {//budowa struktur w bazie
  849. $TABLES_IMPORT=$CONNREMOTE->STRUCTURE_GENERATE($TABLES_STRUCTURE,null,$TABLES_STRUCTURE_DATA);
  850. // $CONNREMOTE->STRUCTURE_GENERATE_to_xsd($TABLES_IMPORT,$CONNREMOTE,'/tmp/schema'); //Generujemy XSD dla struktur
  851. // $TABLES_IMPORT=STRUCTURE_GENERATE($TABLES_STRUCTURE,$CONNREMOTE,$TABLES_STRUCTURE_DATA);
  852. // $TABLES_STRUCTURE_DATA
  853. $RETURN=serialize($TABLES_IMPORT);
  854. if (is_writable('config/.config_base_structure.php')) {
  855. $fp = fopen('config/.config_base_structure.php', 'w');
  856. fwrite($fp, $RETURN);
  857. fclose($fp);
  858. DEBUG_S(-3,'Zapisano aktualna strukture danych do config/.config_base_structure.php','',__FILE__,__FUNCTION__,__LINE__);
  859. //print_r($TABLES_IMPORT);
  860. //print_r($TABLES_IMPORT);
  861. } else {
  862. echo "\n\n\n config/.config_base_structure.php - nie jest do zapisu - zatem Zmienna do przekopiowania do konfiga config/".$config_base_structure." : \n";
  863. echo $RETURN;
  864. echo "\n";
  865. }
  866. // ! SYNC_ZASOBY_STRUCTURES_FROM_CONFIG
  867. } else if($SYNC_OPTIONS=='SYNC_ZASOBY_STRUCTURES_FROM_CONFIG' or $SYNC_OPTIONS=='SYNC_ZASOBY_STRUCTURES_FROM_CONFIG_WITHOUT_PROCEDURES_AND_VIEWS') {//budowa struktur w bazie
  868. if(!file_exists(APP_PATH_ROOT."/config/".$config_base_structure)) die1("Brak konfiga w ".APP_PATH_ROOT."/config/".$config_base_structure." , wygeneruj go za pomoca opcji CREATE_ZASOBY_STRUCTURES_CONFIG");
  869. $handle = fopen(APP_PATH_ROOT."/config/".$config_base_structure, "r");
  870. $config_base_structure_serialized = fread($handle, filesize(APP_PATH_ROOT."/config/".$config_base_structure));
  871. fclose($handle);
  872. //echo $config_base_structure_serialized;
  873. $config_base_structure_unserialized=unserialize($config_base_structure_serialized);
  874. //print_r($config_base_structure_unserialized['CRM_AUTH_PROFILE']);
  875. if($SYNC_OPTIONS=='SYNC_ZASOBY_STRUCTURES_FROM_CONFIG_WITHOUT_PROCEDURES_AND_VIEWS') $SKIP_OPTIONS=array('SKIP-PROCEDURE','SKIP-VIEW');
  876. DEBUG_S(5,'SKIP_OPTIONS,config_base_structure_unserialized',array($SKIP_OPTIONS,$config_base_structure_unserialized),__FILE__, __FUNCTION__, __LINE__) ;
  877. $CONNREMOTE->STRUCTURE_GENERATE_PARSE($config_base_structure_unserialized,$SKIP_OPTIONS); //@2014-08-14 TEST IT
  878. /*
  879. foreach($config_base_structure_unserialized as $TABLE=>$ARR_TABLE) { //dla kazdej tabeli
  880. set_time_limit(36000);
  881. //! if($TABLE<>'_CRM_PROCES_USER_STATS_wiev') continue; //trigger development
  882. //! try to sync __SCHEMA_FUNCTIONS__ARRAY__
  883. if($TABLE=='__SCHEMA_FUNCTIONS__ARRAY__') {
  884. DEBUG_S(-3,'Try to synchronize functions and procedures',$ARR_TABLE,__FILE__,__FUNCTION__,__LINE__);
  885. //BEGIN PROCEDURE
  886. $sql=" SHOW PROCEDURE STATUS; ;" ; //listujemy nasze procedury
  887. DEBUG_S(-3,'Looking for PROCEDURE ',$sql,__FILE__,__FUNCTION__,__LINE__);
  888. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  889. while($h=mysql_fetch_object($result)) {
  890. if($h->Db<>$CONNREMOTE->getDatabaseName()) continue;
  891. set_time_limit(36000);
  892. $sql_="show create PROCEDURE {$h->Name} ;" ;
  893. //echo $sql_;
  894. $result_=$CONNREMOTE->query($sql_) or die1('\nProblem z '.$sql_);
  895. while($h_=mysql_fetch_object($result_)) {
  896. $FIELDS_CHECKED['FOUNDS'][$h->Name]=$h_;
  897. if(!isset($ARR_TABLE['PROCEDURE'][$h->Name])) {
  898. DEBUG_S(-3,'We have some more functions - we will not delete them:'.$h->Name,null,__FILE__,__FUNCTION__,__LINE__);
  899. //$FIELDS_CHECKED['TO_DELETE'][$h->Name]=$h_;
  900. }
  901. }
  902. }
  903. DEBUG_S(-3,'Try to unserialize PROCEDURE and install to db:',$ARR_TABLE['PROCEDURE'],__FILE__,__FUNCTION__,__LINE__);
  904. foreach($ARR_TABLE['PROCEDURE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  905. if(!isset($FIELDS_CHECKED['FOUNDS'][$TRIGGER_INDEX])) { $FIELDS_CHECKED['TO_CREATE'][$TRIGGER_INDEX]=$TRIGGER_OBJECT;
  906. DEBUG_S(-3,'We have object to create '.$TRIGGER_INDEX,$TRIGGER_OBJECT,__FILE__,__FUNCTION__,__LINE__);
  907. }
  908. }
  909. //staramy sie zaktualizowac stare triggery, pod warunkiem, ze sie roznia
  910. foreach($FIELDS_CHECKED['FOUNDS'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  911. DEBUG_S(-3,'OBJ/OBJ for '.$TRIGGER_INDEX,array($TRIGGER_OBJECT->{'Create Procedure'},$ARR_TABLE['PROCEDURE'][$TRIGGER_INDEX]->{'Create Procedure'}),__FILE__, __FUNCTION__, __LINE__);
  912. if(isset($ARR_TABLE['PROCEDURE'][$TRIGGER_INDEX])) //we first try to find if this trigger exists or delete it
  913. if($TRIGGER_OBJECT->{'Create Procedure'}<>$ARR_TABLE['PROCEDURE'][$TRIGGER_INDEX]->{'Create Procedure'} ) {
  914. DEBUG_S(-3,"Data are different ({$TRIGGER_INDEX}). We add object to be created as new.",__FILE__, __FUNCTION__, __LINE__);
  915. $FIELDS_CHECKED['TO_CREATE'][$TRIGGER_INDEX]=$ARR_TABLE['PROCEDURE'][$TRIGGER_INDEX];
  916. $FIELDS_CHECKED['TO_DELETE'][$TRIGGER_INDEX]=true;
  917. }
  918. }
  919. if(isset($FIELDS_CHECKED['TO_DELETE'])) {
  920. DEBUG_S(-3,'We have some data to delete',$FIELDS_CHECKED['TO_DELETE'],__FILE__,__FUNCTION__,__LINE__);
  921. foreach($FIELDS_CHECKED['TO_DELETE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT ) {
  922. $sql="DROP PROCEDURE IF EXISTS `{$TRIGGER_INDEX}`; ";
  923. DEBUG_S(-3,' sql to delete '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  924. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  925. }
  926. }
  927. //tworzymy brakujace procedury
  928. foreach ($FIELDS_CHECKED['TO_CREATE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  929. $sql=$TRIGGER_OBJECT->{'Create Procedure'};
  930. DEBUG_S(-3,'Try to add new '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  931. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  932. }
  933. unset($FIELDS_CHECKED);
  934. //EOF PROCEDURE
  935. //BEGIN FUNCTION
  936. $sql=" SHOW FUNCTION STATUS ;" ; //listujemy nasze procedury
  937. DEBUG_S(-3,'Looking for FUNCTION ',$sql,__FILE__,__FUNCTION__,__LINE__);
  938. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  939. while($h=mysql_fetch_object($result)) {
  940. set_time_limit(36000);
  941. $sql_="show create FUNCTION {$h->Name} ;" ;
  942. //echo $sql_;
  943. $result_=$CONNREMOTE->query($sql_) or die1('\nProblem z '.$sql_);
  944. while($h_=mysql_fetch_object($result_)) {
  945. $FIELDS_CHECKED['FOUNDS'][$h->Name]=$h_;
  946. if(!isset($ARR_TABLE['FUNCTION'][$h->Name])) {
  947. DEBUG_S(-3,'We have some more functions - we will not delete them:'.$h->Name,null,__FILE__,__FUNCTION__,__LINE__);
  948. // $FIELDS_CHECKED['TO_DELETE'][$h->Name]=$h_;
  949. }
  950. }
  951. }
  952. DEBUG_S(-3,'Try to unserialize FUNCTION and install to db:',$ARR_TABLE['FUNCTION'],__FILE__,__FUNCTION__,__LINE__);
  953. foreach($ARR_TABLE['FUNCTION'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  954. if(!isset($FIELDS_CHECKED['FOUNDS'][$TRIGGER_INDEX])) { $FIELDS_CHECKED['TO_CREATE'][$TRIGGER_INDEX]=$TRIGGER_OBJECT;
  955. DEBUG_S(-3,'We have object to create '.$TRIGGER_INDEX,$TRIGGER_OBJECT,__FILE__,__FUNCTION__,__LINE__);
  956. }
  957. }
  958. //staramy sie zaktualizowac stare triggery, pod warunkiem, ze sie roznia
  959. foreach($FIELDS_CHECKED['FOUNDS'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  960. DEBUG_S(-3,'OBJ/OBJ for '.$TRIGGER_INDEX,array($TRIGGER_OBJECT->{'Create Function'},$ARR_TABLE['FUNCTION'][$TRIGGER_INDEX]->{'Create Function'}),__FILE__, __FUNCTION__, __LINE__);
  961. if(isset($ARR_TABLE['FUNCTION'][$TRIGGER_INDEX])) //we first try to find if this trigger exists or delete it
  962. if($TRIGGER_OBJECT->{'Create Function'}<>$ARR_TABLE['FUNCTION'][$TRIGGER_INDEX]->{'Create Function'} ) {
  963. DEBUG_S(-3,"Data are different ({$TRIGGER_INDEX}). We add object to be created as new.",__FILE__, __FUNCTION__, __LINE__);
  964. $FIELDS_CHECKED['TO_CREATE'][$TRIGGER_INDEX]=$ARR_TABLE['FUNCTION'][$TRIGGER_INDEX];
  965. $FIELDS_CHECKED['TO_DELETE'][$TRIGGER_INDEX]=true;
  966. }
  967. }
  968. if(isset($FIELDS_CHECKED['TO_DELETE'])) {
  969. DEBUG_S(-3,'We have some data to delete',$FIELDS_CHECKED['TO_DELETE'],__FILE__,__FUNCTION__,__LINE__);
  970. foreach($FIELDS_CHECKED['TO_DELETE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT ) {
  971. $sql="DROP FUNCTION IF EXISTS `{$TRIGGER_INDEX}`; ";
  972. DEBUG_S(-3,' sql to delete '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  973. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  974. }
  975. }
  976. //tworzymy brakujace procedury
  977. foreach ($FIELDS_CHECKED['TO_CREATE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  978. $sql=$TRIGGER_OBJECT->{'Create Function'};
  979. DEBUG_S(-3,'Try to add new '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  980. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  981. }
  982. unset($FIELDS_CHECKED);
  983. //EOF FUNCTION
  984. //die1('app in devel');
  985. continue; //no go to another table in loop
  986. } //eof
  987. //! detect if src table is TABLE or VIEW
  988. // foreach($TABLES as $TABLE ){
  989. $sql="show full tables like '".$TABLE."' ;" ;
  990. DEBUG_S(-3,'SQL:'.$CONNREMOTE->getDatabaseName(),$sql,__FILE__, __FUNCTION__, __LINE__) ;
  991. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  992. while($h=mysql_fetch_object($result)) {
  993. $FIELDS_CHECKED['Table_type']=$h->{'Table_type'};
  994. }
  995. if(mysql_num_rows($result)==0) {
  996. // nie ma tabeli - trzeba zapisac
  997. if($ARR_TABLE['Table_type']=='BASE TABLE') {
  998. //DEBUG_S(-3,"\n BRAK TABELI dodajemy : ".$TABLE."!!!",null,__FILE__,__FUNCTION__,__LINE__);
  999. $sql="create table ".$TABLE." ( ".$ARR_TABLE['FIELDS'][0]->Field." ".$ARR_TABLE['FIELDS'][0]->Type ; // ID int(11) NOT NULL AUTO_INCREMENT,
  1000. if($ARR_TABLE['FIELDS'][0]->Null=='NO') $sql.=" not null "; else $sql.=" null ";
  1001. //if($ARR_TABLE['FIELDS'][0]->Extra=='auto_increment') $sql.=" AUTO_INCREMENT "; else $sql.=" ";
  1002. $sql.=" ) DEFAULT CHARSET=latin2 ";
  1003. DEBUG_S(-3,"Brak tabeli: ".$TABLE." dodajemy sql:",$sql,__FILE__,__FUNCTION__,__LINE__) ;
  1004. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem z CREATE '.$sql);
  1005. if($TABLE=='CRM_LISTA_ZASOBOW') {
  1006. $sql=" alter table `".$TABLE."` AUTO_INCREMENT=1000 ";
  1007. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem z AUTO INCREMENT '.$sql);
  1008. }
  1009. } else if($ARR_TABLE['Table_type']=='VIEW') {
  1010. $sql=$ARR_TABLE['VIEW']->{'Create View'};
  1011. DEBUG_S(-3,"Brak widoku: ".$TABLE." dodajemy sql:",$sql,__FILE__,__FUNCTION__,__LINE__) ;
  1012. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem ze '.$sql);
  1013. }
  1014. } else {
  1015. //try to detect if types are the same
  1016. if($ARR_TABLE['Table_type']<>$FIELDS_CHECKED['Table_type']) die1('Todo: ERROR VIEW/TABLE different types ');
  1017. if($ARR_TABLE['Table_type']=='VIEW') {
  1018. if(isset($ARR_TABLE['VIEW'])) {
  1019. $sql_="show create view `{$TABLE}` ;" ;
  1020. echo $sql_;
  1021. $result_=$CONNREMOTE->query($sql_) or die1('\nProblem z '.$sql_);
  1022. while($h_=mysql_fetch_object($result_)) {
  1023. DEBUG_S(-3,"//! get current view info ".$TABLE." sql/res",array($sql_,$h_),__FILE__, __FUNCTION__, __LINE__);
  1024. $FIELDS_CHECKED['VIEW']=$h_;
  1025. }
  1026. //ereg_replace(, , )
  1027. if(strtolower($FIELDS_CHECKED['VIEW']->{'Create View'})<>strtolower($ARR_TABLE['VIEW']->{'Create View'})) {
  1028. $sql="drop view `{$TABLE}`";
  1029. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem ze '.$sql);
  1030. $sql_=$ARR_TABLE['VIEW']->{'Create View'};
  1031. DEBUG_S(-3,"//! Views are different for ".$TABLE." . Dropping old view and adding new (old/new/sql/sql):",array(strtolower($FIELDS_CHECKED['VIEW']->{'Create View'}),$ARR_TABLE['VIEW']->{'Create View'},$sql,$sql_,$h_),__FILE__, __FUNCTION__, __LINE__);
  1032. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql_) or die1('\nProblem ze '.$sql_);
  1033. }
  1034. }
  1035. }
  1036. }
  1037. //always create
  1038. if($ARR_TABLE['Table_type']=='BASE TABLE') {
  1039. set_time_limit(36000);
  1040. $sql=" describe `".$TABLE."` ;" ;
  1041. DEBUG_S(-3,'SQL:describe '.$TABLE,$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1042. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1043. $FIELDS_CHECKED=""; unset($FIELDS_CHECKED);
  1044. foreach($ARR_TABLE['FIELDS'] as $TSTIND=>$TST_VAL) { //tu robie tabelke do odhaczania z niej zmiennych
  1045. $FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'][$TST_VAL->Field]=1;
  1046. $FIELDS_CHECKED['FIELD_IN_CONFIG_THAT_EXISTS'][$TST_VAL->Field]=1;
  1047. }
  1048. DEBUG_S(-3,'FIELDS_CHECKED',$FIELDS_CHECKED,__FILE__, __FUNCTION__, __LINE__) ;
  1049. $var_passed=false;
  1050. while($h=mysql_fetch_object($result)) {
  1051. //tu sprawdzamy czy sa wszystkie kolumny i maja takie same typy
  1052. $FIELDS_CHECKED['FIELD_FROM_DB'][$h->Field]=1;
  1053. if(!isset($FIELDS_CHECKED['FIELD_IN_CONFIG_THAT_EXISTS'][$h->Field])) {
  1054. DEBUG_S(-3,'Za duzo o komorke '.$h->Field,$FIELDS_CHECKED,__FILE__, __FUNCTION__, __LINE__) ;
  1055. $FIELDS_CHECKED['FIELD_IN_CONFIG_THAT_NOT_EXISTS'][$h->Field]=1;
  1056. }
  1057. foreach($ARR_TABLE['FIELDS'] as $TSTIND=>$TST_VAL) { //tu sprawdzam czy kolumna jest i jaka
  1058. // echo "\n Tst ".$TST_VAL->Field." ==? ".$h->Field;
  1059. if($TST_VAL->Field==$h->Field) {
  1060. $FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB'][$h->Field]=1;
  1061. if(isset($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'][$h->Field])) //jezeli byla komorka ramowa
  1062. unset($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'][$h->Field]);
  1063. }
  1064. }
  1065. //$TABLES_IMPORT[$TABLE]['FIELDS']=$h;
  1066. }
  1067. if(!empty($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'])) DEBUG_S(-3,'Brakuje komorek dla '.$TABLE." ",array($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED']),__FILE__, __FUNCTION__, __LINE__);
  1068. DEBUG_S(-3,'FIELDS_CHECKED',$FIELDS_CHECKED,__FILE__, __FUNCTION__, __LINE__) ;
  1069. //dodajemy brakujace komorki
  1070. if(count($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'])>0) {
  1071. foreach($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'] as $FIELD_TO_ADD=>$VAL ){
  1072. set_time_limit(36000);
  1073. //echo "\n Trying to add column: ".$FIELD_TO_ADD;
  1074. if(isset($INDEX_OF_CONFIG_TABLE)) unset($INDEX_OF_CONFIG_TABLE);
  1075. foreach($ARR_TABLE['FIELDS'] as $TSTIND=>$TST_VAL) { //trzeba znalezc numer ID indeksu brakujacej komorki
  1076. if($TST_VAL->Field==$FIELD_TO_ADD) $INDEX_OF_CONFIG_TABLE=$TSTIND;
  1077. }
  1078. // $sql="create table ".$TABLE." ( ".$ARR_TABLE['FIELDS'][0]->Field." ".$ARR_TABLE['FIELDS'][0]->Type ; // ID int(11) NOT NULL AUTO_INCREMENT,
  1079. //if($ARR_TABLE['FIELDS'][0]->Extra=='auto_increment') $sql.=" AUTO_INCREMENT "; else $sql.=" ";
  1080. $sql="alter table `".$TABLE."` add `".$FIELD_TO_ADD."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ";
  1081. if(($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default)) {
  1082. if(($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default=='NULL')||($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default=='CURRENT_TIMESTAMP'))
  1083. $sql.=" DEFAULT ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default." ";// (".$INDEX_OF_CONFIG_TABLE.")";
  1084. else $sql.=" DEFAULT '".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default."' ";// (".$INDEX_OF_CONFIG_TABLE.")";
  1085. }
  1086. if($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Null=='NO') $sql.=" not null "; else $sql.=" null ";
  1087. $sql.=" ;";
  1088. echo "\n ".$sql;
  1089. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem z sql',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1090. }
  1091. } //eof dodajemy brakujace komorki
  1092. //Sprawdzamy czy sa zgodne typy komorek...
  1093. $sql=" describe `".$TABLE."` ;" ;
  1094. DEBUG_S(-3,'describe '.$TABLE,$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1095. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1096. while($h=mysql_fetch_object($result)) {
  1097. set_time_limit(36000);
  1098. $FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB_PROFILE'][$h->Field]=$h;
  1099. }
  1100. DEBUG_S(-3,'FIELDS_CHECKED',$FIELDS_CHECKED,__FILE__, __FUNCTION__, __LINE__) ;
  1101. foreach($FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB_PROFILE'] as $FIELD_TO_CHK=>$VAL) {
  1102. if(isset($INDEX_OF_CONFIG_TABLE)) unset($INDEX_OF_CONFIG_TABLE);
  1103. foreach($ARR_TABLE['FIELDS'] as $TSTIND=>$TST_VAL) { //trzeba znalezc numer ID indeksu brakujacej komorki
  1104. if($TST_VAL->Field==$FIELD_TO_CHK) $INDEX_OF_CONFIG_TABLE=$TSTIND;
  1105. }
  1106. if(isset($FIELDS_CHECKED['FIELD_IN_CONFIG_THAT_NOT_EXISTS'][$FIELD_TO_CHK])) continue; //jezeli komorki nie ma i jest tylko lokalnie - ignorujemy!
  1107. // to jakis glupi warunek ?
  1108. if(!isset($INDEX_OF_CONFIG_TABLE)) die1('Nie znaleziono indeksu w konfiguracji dla '.$TABLE.' i komorki '.$FIELD_TO_CHK);
  1109. // echo "\nsprawdzamy wszystkie wlasciwosci dla db ".$TABLE." ".$FIELD_TO_CHK." col ".$INDEX_OF_CONFIG_TABLE;
  1110. $CHK_TYPES_ARS=array('Type','Null','Default');
  1111. $sql="";
  1112. // echo "\n if ".$VAL->Type." =? ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type ;
  1113. if($VAL->Type!=$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type) {
  1114. //! aktualizujemy typy
  1115. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ; ";
  1116. if(strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'char(')&& strstr($VAL->Type, 'char(')){
  1117. $src_char_len=ereg_replace('[^0-9]', '',$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type );
  1118. $dst_char_len=ereg_replace('[^0-9]', '',$VAL->Type );
  1119. if($src_char_len>$dst_char_len) {
  1120. DEBUG_S(-3,'Aktualizacja rozszerzajaca zakres pola CHAR : CUR_CHAR_LEN ='.$src_char_len." and dest=".$dst_char_len ,$sql,__FILE__, __FUNCTION__, __LINE__);
  1121. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('\nProblem z '.$sql);
  1122. } else {
  1123. DEBUG_S(-3,'celowe pominiecie - aktualizacja moze skasowac dane w bazie!!! :',$sql,__FILE__, __FUNCTION__, __LINE__);
  1124. // die1();
  1125. }
  1126. } else if(strstr($VAL->Type, 'enum(') && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'enum(' )) { //jezeli zmienia sie ENUM na inne ENUM
  1127. preg_match('/^enum\((.*)\)$/', $ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, $src_char_len);
  1128. preg_match('/^enum\((.*)\)$/', $VAL->Type, $dst_char_len);
  1129. $src_char_len=explode(',', $src_char_len[1]);$dst_char_len=explode(',', $dst_char_len[1]);
  1130. foreach($src_char_len as $var) {
  1131. if( !in_array($var, $dst_char_len)) $dst_char_len[]=$var;
  1132. }
  1133. $dst_char_len="enum(".implode(",", $dst_char_len).")";
  1134. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$dst_char_len." ; ";
  1135. DEBUG_S(-3,'Uzupelniamy strukture o ewentualnie brakujace elementy (sql,wynik polaczenia,import.strukt.,akt_strukt.)',array($sql,$dst_char_len,$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type,$VAL->Type),__FILE__, __FUNCTION__, __LINE__);
  1136. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('\nProblem z '.$sql);
  1137. } else if(strstr($VAL->Type, 'set(') && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'set(' )) { //jezeli zmienia sie ENUM na inne ENUM
  1138. preg_match('/^set\((.*)\)$/', $ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, $src_char_len);
  1139. preg_match('/^set\((.*)\)$/', $VAL->Type, $dst_char_len);
  1140. $src_char_len=explode(',', $src_char_len[1]);$dst_char_len=explode(',', $dst_char_len[1]);
  1141. foreach($src_char_len as $var) {
  1142. if( !in_array($var, $dst_char_len)) $dst_char_len[]=$var;
  1143. }
  1144. $dst_char_len="set(".implode(",", $dst_char_len).")";
  1145. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$dst_char_len." ; ";
  1146. DEBUG_S(-3,'Uzupelniamy strukture o ewentualnie brakujace elementy (sql,wynik polaczenia,import.strukt.,akt_strukt.)',array($sql,$dst_char_len,$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type,$VAL->Type),__FILE__, __FUNCTION__, __LINE__);
  1147. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('\nProblem z '.$sql);
  1148. } else if(strstr($VAL->Type, 'int(') && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'int(' )) {
  1149. preg_match('/^int\((.*)\)$/', $ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, $src_char_len);
  1150. preg_match('/^int\((.*)\)$/', $VAL->Type, $dst_char_len);
  1151. if($src_char_len[1]>$dst_char_len[1]) {
  1152. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ; ";
  1153. DEBUG_S(-3,'Aktualizacja rozszerzajaca zakres pola INT ma byc ='.$src_char_len[1]." byla dest=".$dst_char_len[1] ,$sql,__FILE__, __FUNCTION__, __LINE__);
  1154. // if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('\nProblem z '.$sql);
  1155. } else {
  1156. DEBUG_S(-3,'Pominieta Aktualizacja zawiezajaca zakres pola INT ma byc ='.$src_char_len[1]." byla dest=".$dst_char_len[1] ,$sql,__FILE__, __FUNCTION__, __LINE__);
  1157. }
  1158. } else if( ( strstr($VAL->Type, 'char(') || strstr($VAL->Type, 'varchar(') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'text' )
  1159. || ( strstr($VAL->Type, 'bigint(') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'longblob' )
  1160. || ( strstr($VAL->Type, 'mediumtext') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'longblob' )
  1161. || ( strstr($VAL->Type, 'decimal(42') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'decimal(41' )
  1162. || ( strstr($VAL->Type, 'decimal(43') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'decimal(41' )
  1163. ) {
  1164. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ; ";
  1165. DEBUG_S(-3,'Aktualizacja rozszerzajaca zakres pola varchar/char() do text()',$sql,__FILE__, __FUNCTION__, __LINE__);
  1166. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('\nProblem z '.$sql);
  1167. // DEBUG_S(-3,'Pominieta Aktualizacja zawiezajaca zakres pola INT ma byc ='.$src_char_len[1]." byla dest=".$dst_char_len[1] ,$sql,__FILE__, __FUNCTION__, __LINE__);
  1168. } else {
  1169. DEBUG_S(-3,'Celowe zabicie z uwagi na niebezpieczenstwo zmiany typu: sql/old/new',array($sql,$VAL->Type,$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type),__FILE__, __FUNCTION__, __LINE__);
  1170. die1();
  1171. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('\nProblem z '.$sql);
  1172. }
  1173. }
  1174. if($VAL->Null!=$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Null)
  1175. if($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Null=='YES') {
  1176. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." NULL ; ";
  1177. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1178. } else {
  1179. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." NOT NULL ; ";
  1180. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1181. }
  1182. if($VAL->Default!=$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default) {
  1183. if($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default=='CURRENT_TIMESTAMP')
  1184. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." DEFAULT ".str_replace("'","",$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default)." ; ";
  1185. else if(empty($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default))
  1186. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ; ";
  1187. else $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." DEFAULT '".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default."' ; ";
  1188. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1189. }
  1190. //autoincrement:
  1191. if(($VAL->Extra!=$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Extra)&&$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Extra=='auto_increment' ) {
  1192. //sprawdzmy czy nie ma w tabeli klucza z PRIMARY z ID
  1193. $sql="show keys from `".$TABLE."`";
  1194. $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1195. $TEST_IF_HAS_PRIMARY=false;
  1196. while($tst=mysql_fetch_object($result)) { //dla kazdego klucza
  1197. if($tst->Column_name==$FIELD_TO_CHK) //sprawdz czy jest klucz do tej kolumny
  1198. if($tst->Key_name=='PRIMARY') $TEST_IF_HAS_PRIMARY=true; //jezeli jest primary, to flagujemy
  1199. }
  1200. if($TEST_IF_HAS_PRIMARY==false) { //bedziemy dodawac primary key
  1201. $sql="ALTER TABLE `".$TABLE."` ADD PRIMARY KEY ( `".$FIELD_TO_CHK."` )";
  1202. $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1203. }
  1204. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Extra." ; ";
  1205. echo "\n SQL auto_increment ".$sql ;
  1206. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1207. }
  1208. //foreach($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE] as $TST_FIELD_IND=>$TST_FIELD_VAL) {
  1209. // echo "\n TST2 ".$TST_FIELD_IND." ?= ".$FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB_PROFILE'][$TST_FIELD_IND]->$TST_FIELD_IND;
  1210. //}
  1211. }
  1212. //print_r($FIELDS_CHECKED);
  1213. $sql=" show index from `".$TABLE."` ;" ;
  1214. echo "\n ".$sql;
  1215. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1216. while($h=mysql_fetch_object($result)) {
  1217. set_time_limit(36000);
  1218. $FIELDS_CHECKED['INDEX_FOUND_IN_TABLES'][$h->Key_name]=$h;
  1219. }
  1220. foreach($ARR_TABLE['INDEX'] as $FOUND_INDEX_NAME=>$FOUND_INDEX_ARR){
  1221. $FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES'][$FOUND_INDEX_NAME]=$FOUND_INDEX_ARR;
  1222. }
  1223. DEBUG_S(-3,'Znaleziono indeksy w tabeli '.$TABLE." FOUND/TO_BE_FOUND",array($FIELDS_CHECKED['INDEX_FOUND_IN_TABLES'],$FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES']),__FILE__, __FUNCTION__, __LINE__);
  1224. //teraz wygaszam znalezione indeksy
  1225. foreach($ARR_TABLE['INDEX'] as $FOUND_INDEX_NAME=>$FOUND_INDEX_ARR){
  1226. echo "\n If jest ".$FOUND_INDEX_NAME;
  1227. if(isset($FIELDS_CHECKED['INDEX_FOUND_IN_TABLES'][$FOUND_INDEX_NAME]))
  1228. unset($FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES'][$FOUND_INDEX_NAME]);
  1229. }
  1230. //print_r($FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES']);
  1231. //brakujace klucze dodajemy
  1232. foreach($FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES'] as $FOUND_INDEX_NAME=>$FOUND_INDEX_ARR) {
  1233. if($FOUND_INDEX_NAME=='PRIMARY') {
  1234. $FOUND_INDEX_ARR->Column_name=str_replace('`','',$FOUND_INDEX_ARR->Column_name);
  1235. $sql="ALTER TABLE `".$TABLE."` ADD PRIMARY KEY ( `".$FOUND_INDEX_ARR->Column_name."` ) ;";
  1236. echo "\n 927: ".$sql;
  1237. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or print_r($FIELDS_CHECKED) && die1('\nProblem z '.$sql);
  1238. $sql="ALTER TABLE `".$TABLE."` CHANGE `".$FOUND_INDEX_ARR->Column_name."` `".$FOUND_INDEX_ARR->Column_name."` ".$FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB_PROFILE'][$FOUND_INDEX_ARR->Column_name]->Type." AUTO_INCREMENT ; ";
  1239. echo "\n ".$sql;
  1240. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or print_r($FIELDS_CHECKED) && die1('\nProblem z '.$sql);
  1241. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or print_r($FIELDS_CHECKED) && die1('\nProblem z '.$sql);
  1242. } else if($FOUND_INDEX_ARR->Non_unique==1) {
  1243. $sql="ALTER TABLE `".$TABLE."` ADD KEY `".$FOUND_INDEX_ARR->Key_name."` ( ".$FOUND_INDEX_ARR->Column_name." ) ;" ;
  1244. echo "\n ".$sql;
  1245. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1246. } else {
  1247. set_time_limit(36000);
  1248. //@2013-01-17 poprawka do kluczy bledu w stylu ALTER TABLE `IN7_PRODUKTY_CECHY` ADD UNIQUE `UNIK_CECHY_PRODUKTU` ( CECHA_ID, PRODUKT_ID , DESC ) ;
  1249. $CORRECT_INDEX_FOUNDKEY="";
  1250. if(!strstr($FOUND_INDEX_ARR->Column_name,'`')) {
  1251. $explode=explode(' ',$FOUND_INDEX_ARR->Column_name);
  1252. foreach($explode as $exploded) {
  1253. $exploded=str_replace(',','',$exploded); //wywalenie przecinkow
  1254. if((!strstr($exploded,' '))&&(strlen($exploded)>1))
  1255. if($CORRECT_INDEX_FOUNDKEY) $CORRECT_INDEX_FOUNDKEY.=" , `".$exploded."` ";
  1256. else $CORRECT_INDEX_FOUNDKEY.=" `".$exploded."` ";
  1257. }
  1258. } else $CORRECT_INDEX_FOUNDKEY=$FOUND_INDEX_ARR->Column_name;
  1259. // $CORRECT_INDEX_FOUNDKEY=$FOUND_INDEX_ARR->Column_name;
  1260. $sql="ALTER TABLE `".$TABLE."` ADD UNIQUE `".$FOUND_INDEX_ARR->Key_name."` ( ".$CORRECT_INDEX_FOUNDKEY." ) ;" ;
  1261. echo "\n ".$sql;
  1262. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1263. }
  1264. }
  1265. flush();
  1266. //print_r($FIELDS_CHECKED);
  1267. unset($FIELDS_CHECKED);
  1268. $sql=" show triggers like '".$TABLE."' ;" ; //listujemy nasze triggery z tej tabeli
  1269. DEBUG_S(-3,'Looking for triggers in '.$TABLE,$sql,__FILE__,__FUNCTION__,__LINE__);
  1270. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1271. while($h=mysql_fetch_object($result)) {
  1272. set_time_limit(36000);
  1273. $sql_="show create trigger {$h->Trigger} ;" ;
  1274. //echo $sql_;
  1275. $result_=$CONNREMOTE->query($sql_) or die1('\nProblem z '.$sql_);
  1276. while($h_=mysql_fetch_object($result_)) {
  1277. $FIELDS_CHECKED['TRIGGER_FOUNDS'][$h->Trigger]=$h_;
  1278. if(!isset($ARR_TABLE['TRIGGERS'][$h->Trigger])) $FIELDS_CHECKED['TRIGGER_TO_DELETE'][$h->Trigger]=$h_;
  1279. }
  1280. }
  1281. DEBUG_S(-3,'Try to unserialize trigger and install to db:',$ARR_TABLE['TRIGGERS'],__FILE__,__FUNCTION__,__LINE__);
  1282. //! try to synchronize triggers $TABLE=>$ARR_TABLE
  1283. foreach($ARR_TABLE['TRIGGERS'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  1284. if(!isset($FIELDS_CHECKED['TRIGGER_FOUNDS'][$TRIGGER_INDEX])) $FIELDS_CHECKED['TRIGGER_TO_CREATE'][$TRIGGER_INDEX]=$TRIGGER_OBJECT;
  1285. }
  1286. //staramy sie zaktualizowac stare triggery, pod warunkiem, ze sie roznia
  1287. foreach($FIELDS_CHECKED['TRIGGER_FOUNDS'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  1288. DEBUG_S(-3,'TRIGGER_OBJECT/$TRIGGER_OBJECT for '.$TRIGGER_INDEX,array($TRIGGER_OBJECT,$ARR_TABLE['TRIGGERS'][$TRIGGER_INDEX]),__FILE__, __FUNCTION__, __LINE__);
  1289. if(isset($ARR_TABLE['TRIGGERS'][$TRIGGER_INDEX])) //we first try to find if this trigger exists or delete it
  1290. if($TRIGGER_OBJECT->{'SQL Original Statement'}<>$ARR_TABLE['TRIGGERS'][$TRIGGER_INDEX]->{'SQL Original Statement'} ) {
  1291. DEBUG_S(-3,"Triggers are different ({$TRIGGER_INDEX}). We add object to be created as new.",__FILE__, __FUNCTION__, __LINE__);
  1292. $FIELDS_CHECKED['TRIGGER_TO_CREATE'][$TRIGGER_INDEX]=$ARR_TABLE['TRIGGERS'][$TRIGGER_INDEX];
  1293. $FIELDS_CHECKED['TRIGGER_TO_DELETE'][$TRIGGER_INDEX]=true;
  1294. }
  1295. }
  1296. if(isset($FIELDS_CHECKED['TRIGGER_TO_DELETE'])) {
  1297. DEBUG_S(-3,'We have some triggers to delete',$FIELDS_CHECKED['TRIGGER_TO_DELETE'],__FILE__,__FUNCTION__,__LINE__);
  1298. foreach($FIELDS_CHECKED['TRIGGER_TO_DELETE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT ) {
  1299. $sql="DROP TRIGGER IF EXISTS `{$TRIGGER_INDEX}`; ";
  1300. DEBUG_S(-3,' sql to delete trigger '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  1301. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1302. }
  1303. }
  1304. //tworzymy brakujace procedury
  1305. foreach ($FIELDS_CHECKED['TRIGGER_TO_CREATE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  1306. //$sql="DROP TRIGGER IF EXISTS `{$TRIGGER_INDEX}`; ";
  1307. //DEBUG_S(-3,'Delete old trigger '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  1308. //if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',array($sql,mysql_error() ),__FILE__, __FUNCTION__, __LINE__) or die1();
  1309. //if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query("show create trigger {$TRIGGER_INDEX}") or DEBUG_S(-3,'Problem ze SQL:'.mysql_error(),$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1310. $sql=$TRIGGER_OBJECT->{'SQL Original Statement'};
  1311. DEBUG_S(-3,'Try to add new trigger '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  1312. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1313. }
  1314. }
  1315. //tu bedziemy dodawac wartosci insert :
  1316. $sql="select count(*) as ilosc from `".$TABLE."` ;" ;
  1317. DEBUG_S(-3,'SQL: licze czy cos jest w tabeli ',$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1318. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1319. $ilosc=0;
  1320. //while($h=mysql_fetch_object($result)) {
  1321. // $ilosc=$h->ilosc;
  1322. //}
  1323. //if($ilosc>0) {
  1324. // DEBUG_S(-2,'Nie trzeba dodawac rekordow - juz jakies sa w tabeli: ilosc : ',$ilosc,__FILE__,__FUNCTION__,__LINE__);
  1325. // continue ;
  1326. //} else {
  1327. if(!empty($ARR_TABLE['VALUES']))
  1328. foreach($ARR_TABLE['VALUES'] as $ROW) {
  1329. $sql="insert ignore into `".$TABLE."` values ( ";
  1330. $vals="";
  1331. foreach($ROW as $FIELD=>$VAL) {
  1332. if(!$vals) $vals.="'".$VAL."'" ; else $vals.=" , '".$VAL."' ";
  1333. }
  1334. $sql.=$vals." ) ;";
  1335. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1336. DEBUG_S(-3,'Dodanie rekordu do tabeli ',$sql,__FILE__,__FUNCTION__,__LINE__);
  1337. }
  1338. //}
  1339. }
  1340. */
  1341. //}
  1342. } else if($SYNC_OPTIONS=='FROM_DATABASE_TO_ZASOBY') { //! FROM_DATABASE_TO_ZASOBY budowa struktur w bazie
  1343. // w tym miejscu wprowadzamy informacje odczytane ze struktur bazy danych do zasobow - czyli do tabeli z zasobami i cechami
  1344. if(!isset($DATABASE_ROOT_ZASOB_ID)) die1(' Nie podano glownego numeru ID zasobow, do ktorych ma byc doklejona struktura tabel');
  1345. $TABLES_READ_FROM_LOCALDB=array();
  1346. if(strstr($SYSTEM_PROFILE_STRING_IMPORT_EXPORT, '%')) {
  1347. $sql="show tables like '".$SYSTEM_PROFILE_STRING_IMPORT_EXPORT."' ;";
  1348. $result=$CONNLOCAL->query($sql) or die1(' Problem ze sql '.$sql);
  1349. } else {
  1350. $result=$CONNLOCAL->show_tables($SYSTEM_PROFILE_STRING_IMPORT_EXPORT);
  1351. }
  1352. while($h=$CONNLOCAL->fetch_array($result)) {
  1353. $TABLES_READ_FROM_LOCALDB[]=$h[0];
  1354. }
  1355. DEBUG_S(-3,'zapytanie',$sql,__FILE__,__FUNCTION__,__LINE__);
  1356. DEBUG_S(-3,'TABLES_READ_FROM_LOCALDB',$TABLES_READ_FROM_LOCALDB,__FILE__,__FUNCTION__,__LINE__);
  1357. $STRUCTURE_LOCAL=$CONNLOCAL->STRUCTURE_GENERATE($TABLES_READ_FROM_LOCALDB,null,null,array('with_view'));
  1358. // $STRUCTURE_LOCAL=STRUCTURE_GENERATE($TABLES_READ_FROM_LOCALDB,$CONNLOCAL);
  1359. DEBUG_S(-3,'Aktualizuje CRM_LISTA_ZASOBOW (COLUMN_DEFAULT etc... ) na podstawie STRUCTURE_LOCAL(STRUCTURE_GENERATE)',$STRUCTURE_LOCAL,__FILE__,__FUNCTION__,__LINE__);
  1360. foreach($STRUCTURE_LOCAL as $NAME=>$TBL_STRUC) {
  1361. if($NAME=='__SCHEMA_FUNCTIONS__ARRAY__') continue;
  1362. $zasobID=ProcesHelper::getZasobTableID($NAME);
  1363. if($zasobID) {
  1364. $sql_obj->TABLE_STRUCTURE=$CONNLOCAL->_(serialize($TBL_STRUC));
  1365. $sql_obj->ID=$zasobID;
  1366. DEBUG_S(-3,'zapisanie struktur dla calej tabeli w rekordzie zasobu tabeli',$sql_obj,__FILE__,__FUNCTION__,__LINE__);
  1367. if(!empty($CONFIRM_SQL_UPDATE)) $CONNLOCAL->UPDATE_OBJ('CRM_LISTA_ZASOBOW',$sql_obj);
  1368. foreach($TBL_STRUC['FIELDS'] as $FIELD) {
  1369. $sql="update CRM_LISTA_ZASOBOW set
  1370. `COLUMN_DEFAULT`='".$FIELD->Default."'
  1371. ,`IS_NULLABLE`=";
  1372. if($FIELD->Null=='NO') $sql.="0"; else $sql.="1";
  1373. $sql.=",`COLUMN_TYPE`='".$CONNLOCAL->_($FIELD->Type)."'
  1374. where PARENT_ID='".$zasobID."' and `DESC`='".$FIELD->Field."' ";
  1375. // echo "<br> \n SQL (".$NAME.") = ".$sql;
  1376. if(!empty($CONFIRM_SQL_UPDATE)) $CONNLOCAL->query($sql);
  1377. }
  1378. }
  1379. }
  1380. //1.szukamy numerow cech w drzewie cech dla Type,Null,Default .
  1381. //2.bierzemy szukamy tabeli w strukturze
  1382. //3.szukamy odpowiednich komorek w strukturze ( jak nie ma dodajemy )
  1383. //4.szukamy czy komorka ma dodane cechy ( jak nie ma dodajemy) ,
  1384. //4a. a jak ma to sprawdzamy czy sie zgadzaja
  1385. //4b. jak sie nie zgadzaja, to updatujemy
  1386. //1.
  1387. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `ID`='".$DATABASE_ROOT_ZASOB_ID."' and A_STATUS!='DELETED' ";
  1388. $result=$CONNREMOTE->query($sql);
  1389. if(mysql_num_rows($result)==0) {
  1390. die1("\n BLAD , nie ma w strukturze zasobow , zaproponowanego numeru zasobu [".$DATABASE_ROOT_ZASOB_ID."] , do dolaczenia struktury bazy danych !");
  1391. } else { //jest numer zasobu lecimy po tabelach
  1392. //wyszukujemy jakie numery tabel sa w strukturze w bazie
  1393. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `PARENT_ID`='".$DATABASE_ROOT_ZASOB_ID."' and `TYPE`='TABELA' ";
  1394. DEBUG_S(3,'SQL 389',$sql,__FILE__, __FUNCTION__, __LINE__);
  1395. $result=$CONNREMOTE->query($sql);
  1396. while($h=mysql_fetch_object($result)) {
  1397. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$h->DESC]=$h->ID;
  1398. if(isset($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM_COUNT'][$h->DESC]))
  1399. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM_COUNT'][$h->DESC]++; else $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM_COUNT'][$h->DESC]=1;
  1400. } //sql foreach
  1401. foreach($STRUCTURE_LOCAL as $LOCAL_TABLE_FOUND=>$LOCAL_TAB_ARR) {
  1402. $SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOCAL_TABLE_FOUND]=1;
  1403. }
  1404. //przeszukajmy tabele
  1405. foreach($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1406. if(isset($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOOK_FOR_TABLE])) {
  1407. echo "\n Znalazlem:".$LOOK_FOR_TABLE;
  1408. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1409. if($LOOK_FOR_TABLE<>'__SCHEMA_FUNCTIONS__ARRAY__') //@2014-04-24 zglaszal sie blad , chyba trzeba dac wyjatek
  1410. if($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM_COUNT'][$LOOK_FOR_TABLE]>1) die1('Jest wiecej niz jedna definicja tabeli o takiej samej nazwie:'.$LOOK_FOR_TABLE);
  1411. }
  1412. }
  1413. //teraz mamy tylko tych, co brakuje, trzeba dopisac
  1414. DEBUG_S(-3,'TABELE_DO_ZNALEZIENIA_W_REM',$SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'],__FILE__,__FUNCTION__,__LINE__);
  1415. foreach($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1416. $sql="INSERT INTO `CRM_LISTA_ZASOBOW` (`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS`,`SYNC_SQIX_STATUS`,`A_RECORD_CREATE_DATE` )
  1417. values ( '".$DATABASE_ROOT_ZASOB_ID."','TABELA','".$LOOK_FOR_TABLE."','WAITING','system-import-sync-db-sqix',now() )";
  1418. DEBUG_S(-3,'SQL 413',$sql,__FILE__, __FUNCTION__, __LINE__);
  1419. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1420. if($CONNREMOTE->insert_id()>0) { //usuwamy z poszukiwania
  1421. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1422. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOOK_FOR_TABLE]=$CONNREMOTE->insert_id();
  1423. }
  1424. }
  1425. //szukamy czy sa w tabeli CECH parametry dla Type,Null,Default TODO to trzeba dac do konfigu?
  1426. $sql="select `ID`,`A_STATUS`,`TYPE`,`VALUE` from `IN7_CECHY` where `TYPE`='DATABASE_OPTIONS' ";//szukam glownego zagniezdzenia cech TODO makos to powinno byc ustalone w konfigu
  1427. DEBUG_S(-3,'SQL 425',$sql,__FILE__, __FUNCTION__, __LINE__);
  1428. $result=$CONNREMOTE->query($sql);
  1429. if(mysql_num_rows($result)==0) { //trzeba dodac glowne zagniezdzenie
  1430. $sql="insert into `IN7_CECHY` (`PARENT_ID`,`ID`,`A_STATUS`,`TYPE`,`VALUE`,`DESC_ABLE` ,`TYPE_SPECIAL`) values
  1431. ('0','','WAITING','DATABASE_OPTIONS','DATABASE_OPTIONS','N','STANDARD' )";
  1432. DEBUG_S(-3,'SQL 430',$sql,__FILE__, __FUNCTION__, __LINE__);
  1433. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  1434. $DRZEWO_CECH['KONFIG_SYSTEMU_SE_ROOT']=$CONNREMOTE->insert_id();
  1435. } else { //znalezlismy cos
  1436. list($DRZEWO_CECH['KONFIG_SYSTEMU_SE_ROOT'])=mysql_fetch_array($result);
  1437. }
  1438. //szukamy podparametrow
  1439. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1440. foreach($VVALUE as $TYPE=>$VALUE) {
  1441. $sql="select `ID`,`A_STATUS`,`TYPE`,`VALUE` from `IN7_CECHY` where `VALUE`='".$VALUE."' ; ";
  1442. DEBUG_S(-3,'SQL 441',$sql,__FILE__, __FUNCTION__, __LINE__);
  1443. $result=$CONNREMOTE->query($sql) or die1('problem ze sql 704 '.$sql);
  1444. if(mysql_num_rows($result)==0) { //trzeba dodac podrzedne cechy
  1445. $sql="insert into `IN7_CECHY` (`PARENT_ID`,`ID`,`A_STATUS`,`TYPE`,`VALUE`,`DESC_ABLE` ,`TYPE_SPECIAL` , `TYPE_SPECIAL_PARAM`) values
  1446. ('".$DRZEWO_CECH['KONFIG_SYSTEMU_SE_ROOT']."','','WAITING','".$VALUE."','".$VALUE."','Y','STANDARD','".$TYPE."' )";
  1447. DEBUG_S(-3,'SQL 446',$sql,__FILE__, __FUNCTION__, __LINE__);
  1448. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('problem ze sql 709 '.$sql);
  1449. $DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]=$CONNREMOTE->insert_id();
  1450. } else { //znalezlismy ID tech cech
  1451. list($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE])=mysql_fetch_array($result);
  1452. }
  1453. if($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]<1) {
  1454. DEBUG_S(-3,"System nie mogl odnalezc numeru ID glownych cechy - powinien go dodac",array($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE],$IINDEX,$TYPE),__FILE__, __FUNCTION__, __LINE__);
  1455. die1('');
  1456. }
  1457. }
  1458. }
  1459. //3. teraz sprawdzamy jakie cechy sa opisane w zasobach/cechach dla naszych tabel/komorek
  1460. foreach($STRUCTURE_LOCAL as $LOCAL_TABLE_FOUND=>$LOCAL_TAB_ARR) { //jedziemy po zrodlowych tabelach
  1461. //wyszukujemy jakie numery komorek sa w strukturze w bazie
  1462. flush();
  1463. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `PARENT_ID`='".$SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOCAL_TABLE_FOUND]."' and `TYPE`='KOMORKA' ";
  1464. DEBUG_S(-3,'wyszukujemy jakie numery komorek sa w strukturze w bazie ',array($LOCAL_TABLE_FOUND,$sql),__FILE__, __FUNCTION__, __LINE__);
  1465. $result=$CONNREMOTE->query($sql); //tu wyswietlamy komorki znalezione w bazie zasobow dla tego wezla
  1466. //if(isset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'])) unset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT']);
  1467. if(isset($SYNC_463)) unset($SYNC_463);
  1468. while($h=mysql_fetch_object($result)) {
  1469. $SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$h->DESC]=$h->ID;
  1470. if(isset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$h->DESC])) $SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$h->DESC]++; else $SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$h->DESC]=1;
  1471. }
  1472. foreach($STRUCTURE_LOCAL[$LOCAL_TABLE_FOUND]['FIELDS'] as $ID_FIELD=>$ID_FIELD_VAL) {
  1473. $SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'][$ID_FIELD_VAL->Field]=1;
  1474. }
  1475. //przeszukajmy tabele
  1476. foreach($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1477. if(isset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$LOOK_FOR_TABLE])) {
  1478. echo "\n Znalazlem:".$LOOK_FOR_TABLE;
  1479. unset($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1480. if($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$LOOK_FOR_TABLE]>1) {
  1481. //Usuwamy nadmiarowe definicje w zasobach
  1482. echo "\n Znalazlem wiecej niz 1 zasob w tabeli:".$LOOK_FOR_TABLE." ilosc:".$SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$LOOK_FOR_TABLE];
  1483. STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOCAL_TABLE_FOUND],$LOOK_FOR_TABLE,$CONNREMOTE,$CONFIRM_SQL_UPDATE);
  1484. $STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES_HAPPEN=true;
  1485. }
  1486. }
  1487. }
  1488. if(isset($STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES_HAPPEN)) { //jezeli wydarzylo zdublowanie danych, trzeba powtorzyc wyzwolenie funkcji szukania danych wlasciwych ID
  1489. unset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM']); //flushujemy tabele
  1490. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `PARENT_ID`='".$SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOCAL_TABLE_FOUND]."' and `TYPE`='KOMORKA' ";
  1491. DEBUG_S(-3,'490 : STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES_HAPPEN flushujemy tabele ',array($LOCAL_TABLE_FOUND,$sql),__FILE__, __FUNCTION__, __LINE__);
  1492. $result=$CONNREMOTE->query($sql); //tu wyswietlamy komorki znalezione w bazie zasobow dla tego wezla
  1493. while($h=mysql_fetch_object($result)) {
  1494. $SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$h->DESC]=$h->ID;
  1495. }
  1496. unset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$h->DESC]);
  1497. unset($STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES_HAPPEN);
  1498. }
  1499. //to teraz dla brakujacych robimy inserty
  1500. foreach($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1501. $DESC_PL="";
  1502. $OPIS="";
  1503. if($LOOK_FOR_TABLE=='ID') {
  1504. $DESC_PL="Id";
  1505. $OPIS="Numer unikalny rekordu w tabeli, dodawany automatycznie przy dodawaniu nowego rekordu (mozna traktowac jak l.p.)";
  1506. } else if($LOOK_FOR_TABLE=='A_CLASSIFIED') {
  1507. $DESC_PL="Odczyt<br>dla";
  1508. $OPIS="Jaka grupa moze odczytywac dany rekord. W przypadku checi ukrycia czesci danych nalezy stworzyc grupe(zasob), przypisac ta grupe dla wybranych uzytkownikow systemu, nastepnie ustalic ta grupe dla rekordow ktore maja byc widoczne tylko dla tej grupy w tym polu";
  1509. }else if($LOOK_FOR_TABLE=='A_ADM_COMPANY') {
  1510. $DESC_PL="zapis<br>dla";
  1511. $OPIS="jaka grupa moze edytowac/zapisywac/zmieniac dany rekord. W przypadku checi zabezpieczenia przed zapisem czesci danych nalezy stworzyc grupe(zasob), przypisac ta grupe dla wybranych uzytkownikow systemu, nastepnie ustalic ta grupe dla rekordow ktore maja byc widoczne tylko dla tej grupy w tym polu";
  1512. }else if($LOOK_FOR_TABLE=='A_STATUS') {
  1513. $DESC_PL="status";
  1514. $OPIS="Szczegolowy opis statusu, czesto status rekordu ma okreslone znaczenie biznesowe. W tym polu warto dodawac adnotacje na temat danego rekordu i jego statusu";
  1515. }else if($LOOK_FOR_TABLE=='A_STATUS_INFO') {
  1516. $DESC_PL="opis<br>status";
  1517. $OPIS="Szczegolowy opis statusu, czesto status rekordu ma okreslone znaczenie biznesowe. W tym polu warto dodawac adnotacje na temat danego rekordu i jego statusu";
  1518. }else if($LOOK_FOR_TABLE=='A_PROBLEM_DATE') {
  1519. $DESC_PL="data<br>probl.";
  1520. $OPIS="W przypadku checi dodania na rekordzie problemu nalezy wprowadzic tutaj date wystapienia problemu. Ulatwia to sledzenie problemow po datach. ";
  1521. }else if($LOOK_FOR_TABLE=='A_PROBLEM_DESC') {
  1522. $DESC_PL="opis<br>probl.";
  1523. $OPIS="W tym polu należy opisac szczegolowo problem jaki zachodzi na danym rekordzie. Sugeruje sie aby zapisac sugerowany sposob jego rozwiazania.";
  1524. } else if($LOOK_FOR_TABLE=='A_PROBLEM') {
  1525. $DESC_PL="problem?";
  1526. $OPIS="To pole jest specjalnie traktowane przez system i oznacza sie w nim, czy na danym rekordzie istnieje jakis problem. ";
  1527. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_TYPE') {
  1528. $DESC_PL="spotk.<br>typ";
  1529. $OPIS="W tym polu zaznacza sie typ spotkania: Typ uzgodnienia : ARRANGED = Uzgodniono termin, TO_ARRANGE = Do uzgodnienia termin, RELATE = Zależne ";
  1530. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_INFO') {
  1531. $DESC_PL="Notatki<br>spotk.";
  1532. $OPIS="Adnotacje do załatwienia. Adnotacje/uwagi/notatki na temat konieczności wykonania działań oraz notatki z ustaleń, w rozumieniu co należy wykonać w przyszłości w oparciu o te ustalenia dla danego rekordu, przed terminem.";
  1533. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_PERIOD') {
  1534. $DESC_PL="spotk.<br>dł.";
  1535. $OPIS="Długość oczekiwanego spotkania w minutach. Przydatne do wstępnego ocenienia czasochłonności do wykonania zalecenia/uwag z adnotacji.";
  1536. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_USER') {
  1537. $DESC_PL="osoba<br>odp.";
  1538. $OPIS="Osoba odpowiedzialna za załatwienie danego rekordu. UWAGA ta osoba otrzymuje także prawo zapisu do rekordu, niezależnie od grupy rekordu.";
  1539. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_DATE') {
  1540. $DESC_PL="termin<br>przyp.";
  1541. $OPIS="Termin przypomnienia/adnotacji, po którym dany rekord należy załatwiać/uznać za zaległy. Należy po tym terminie wykonywać czynności opisane w adnotacji.";
  1542. }else if($LOOK_FOR_TABLE=='A_RECORD_UPDATE_AUTHOR') {
  1543. $DESC_PL="kto<br>aktual.";
  1544. $OPIS="W tym polu system zapisuje konto użytkownika, który ostatnio aktualizował rekord. Po wprowadzeniu zmian w grafiku pojawi się w tym polu nazwa konta użytkownika, który dokonał aktualizacji.";
  1545. }else if($LOOK_FOR_TABLE=='A_RECORD_UPDATE_DATE') {
  1546. $DESC_PL="data<br>akt";
  1547. $OPIS="Ostatnia data aktualizacji rekordu - pole aktualizowane automatycznie przy każdej aktualizacji rekordu ";
  1548. }else if($LOOK_FOR_TABLE=='A_RECORD_CREATE_AUTHOR') {
  1549. $DESC_PL="autor";
  1550. $OPIS="Kto utworzył dany rekord - pole jest ustawiane automatycznie przy wstawianiu rekordu do tabeli";
  1551. }else if($LOOK_FOR_TABLE=='A_RECORD_CREATE_DATE') {
  1552. $DESC_PL="data<br>utw.";
  1553. $OPIS="Ostatnia data stworzenia rekordu - pole aktualizowane automatycznie jeden raz, podczas tworzenia rekordu ";
  1554. }else if($LOOK_FOR_TABLE=='ID_KORESP_OFFER') {
  1555. $DESC_PL="oferta?<br>utw.";
  1556. $OPIS="Oznaczenie, jaka oferte otrzymal dany obiekt przestrzenny - z jaka oferta wykonawcza jest on powiazany ";
  1557. }else if($LOOK_FOR_TABLE=='WORK_PLAN_START') {
  1558. $DESC_PL="plan<br>start";
  1559. $OPIS="Data planowanego rozpoczęcia prac dla danego elementu";
  1560. }else if($LOOK_FOR_TABLE=='WORK_PLAN_FINISH') {
  1561. $DESC_PL="plan<br>ukoncz.";
  1562. $OPIS="Data planowanego zakonczenia prac dla danego elementu ";
  1563. }else if($LOOK_FOR_TABLE=='T_WORKPOINTS_TIME_HOURS') {
  1564. $DESC_PL="dl.<br>prac[h]";
  1565. $OPIS="Ilość czasu pracy, jaka została poświęcona w [godzinach] na pracę w ramach ułożenia/zainstalowania danego elementu. W przypadku wielu aktualizacji, system powinien dodawać wartości historycznie i w tym polu wyświetlać sumaryczną wartość.";
  1566. }
  1567. $sql="INSERT INTO `CRM_LISTA_ZASOBOW` (`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS`,`SYNC_SQIX_STATUS`,`A_RECORD_CREATE_DATE`,`DESC_PL`,`OPIS` )
  1568. values ( '".$SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOCAL_TABLE_FOUND]."','KOMORKA','".$LOOK_FOR_TABLE."','WAITING','system-import-sync-db-sqix',now(),'".$DESC_PL."','".$OPIS."' )";
  1569. DEBUG_S(-3,'dodaje do zasobow komorke tabeli '.$LOOK_FOR_TABLE,array($sql,$LOCAL_TABLE_FOUND,$SYNC_279,$SYNC_463),__FILE__, __FUNCTION__, __LINE__);
  1570. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1571. if($CONNREMOTE->insert_id()>0) { //usuwamy z poszukiwania
  1572. unset($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1573. $SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$LOOK_FOR_TABLE]=$CONNREMOTE->insert_id();
  1574. }
  1575. }
  1576. //teraz synchronizacja cech do bazy - cech dotyczacych tych komorek
  1577. foreach($LOCAL_TAB_ARR['FIELDS'] as $ID_FIELD=>$ID_FIELD_VAL ) {
  1578. //tu powinnismy robin foreach $CECHY_POSZUKIWANE - aby przeleciec wszystkie cechy komorki z tabeli
  1579. $NUMER_ID_TABELI_Z_BAZY=$SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$ID_FIELD_VAL->Field];
  1580. if(!isset($NUMER_ID_TABELI_Z_BAZY)) {
  1581. DEBUG_S(-3,"Brak zmiennej NUMER_ID_TABELI_Z_BAZY uniemozliwia weryfikacje numeru cechy i dalsza prace",$NUMER_ID_TABELI_Z_BAZY,__FILE__, __FUNCTION__, __LINE__);
  1582. die1();
  1583. }
  1584. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1585. foreach($VVALUE as $TYPE=>$VALUE) {
  1586. //sprawdzamy zgodnosc oczekiwanego typu lokalnego z parametrami w konfigu
  1587. // echo "\n Sprawdzam zgodnosc struktur: ".key($ID_FIELD_VAL)." oraz ".$TYPE ;
  1588. if(key($ID_FIELD_VAL)!=$TYPE) continue;
  1589. else DEBUG_S(-3,"--- dalej Sprawdzam zgodnosc struktur:".array(key($ID_FIELD_VAL),$TYPE),__FILE__, __FUNCTION__, __LINE__);
  1590. //SZUKAMY CO JEST W CECHACH
  1591. $sql="select `ID`,`A_STATUS`,`CECHA_ID`,`PRODUKT_ID`,`DESC` from `IN7_PRODUKTY_CECHY` where
  1592. `A_STATUS`!='DELETED' and `CECHA_ID`='".$DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]."' and
  1593. `PRODUKT_ID`='".$NUMER_ID_TABELI_Z_BAZY."' ";
  1594. DEBUG_S(-3,'Szukamy co jest w cechach',$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1595. //SPRAWDZAMY Z TYM CO POWINNO BYC W BAZIE
  1596. $result=$CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  1597. $ZNALEZIONO_W_BAZIE_CECHE=false;
  1598. while($h=mysql_fetch_object($result)) {
  1599. $ZNALEZIONO_W_BAZIE_CECHE=true;
  1600. if(addslashes($ID_FIELD_VAL->$TYPE)==$h->DESC) {
  1601. DEBUG_S(-3,'\n Zgodnosc cechy ',$h->DESC,__FILE__, __FUNCTION__, __LINE__);
  1602. break; //nie robimy dalej tego foreach, bo jest zgodnosc tej cechy?
  1603. } else {
  1604. //JEZELI JEST COS NIE TAK - UPDATUJEMY TE ROZNICE - WYSWIETLAMY ERRORY else
  1605. $sql="delete from IN7_PRODUKTY_CECHY where ID='".$h->ID."' limit 1 ";
  1606. DEBUG_S(-3,"\n Brak zgodnosci w sprawie cechy ".$h->DESC." ".$ID_FIELD_VAL->$TYPE."!=".$h->DESC,$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1607. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  1608. }
  1609. }
  1610. //else DODAJEMY OPISY CECH DO BAZY DANYCH
  1611. if(!($ZNALEZIONO_W_BAZIE_CECHE)) {
  1612. $sql="insert into `IN7_PRODUKTY_CECHY` (`A_STATUS`,`CECHA_ID`,`PRODUKT_ID`,`DESC` ,`SYNC_SQIX_STATUS`,`A_RECORD_CREATE_DATE` ) values
  1613. ('NORMAL','".$DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]."','".$NUMER_ID_TABELI_Z_BAZY."',
  1614. '".addslashes($ID_FIELD_VAL->$TYPE)."' ,'system-import-sync-db-sqix',now() ) ";
  1615. DEBUG_S(-3,'Dodajemy opisy cech do bazy danych',$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1616. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('\nProblem z table '.$LOCAL_TABLE_FOUND.' Komorka '.$ID_FIELD_VAL->Field.' , parameter : '.$TYPE.' sql: '.$sql);
  1617. }
  1618. }
  1619. }
  1620. }
  1621. DEBUG_S(-3,"ZNALEZIONO_KOMORKI_W_BAZIE_REM",$SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'],__FILE__, __FUNCTION__, __LINE__) ;
  1622. DEBUG_S(-3,"KOMORKI_DO_ZNALEZIENIA_W_REM",$SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'],__FILE__, __FUNCTION__, __LINE__) ;
  1623. unset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM']);
  1624. unset($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM']);
  1625. }
  1626. print_r($DRZEWO_CECH);
  1627. print_r($SYNC_279);
  1628. //unset($SYNC_279);
  1629. }
  1630. } //eof if($SYNC_OPTIONS=='FROM_DATABASE_TO_ZASOBY') {//budowa struktur w bazie
  1631. else if($SYNC_OPTIONS=='CREATE_ZASOBY_DATABASE_DESC') {
  1632. // ! CREATE_ZASOBY_DATABASE_DESC
  1633. //@2013-01-18: sqix: dobudowanie brakujacych zasobow do systemu dotyczacych samego systemu:
  1634. $sql="select ID from CRM_LISTA_ZASOBOW where `TYPE`='SERWER' and `ID` like '14'"; //to jest wlasciwy na ten moment numer zasobu dla firmy BIALL-NET
  1635. DEBUG_S(-3,'sql do znalezienia czy nie ma zasobow :',$sql,__FILE__,__FUNCTION__,__LINE__);
  1636. $res=$CONNREMOTE->query($sql);
  1637. while($h=mysql_fetch_object($res)) {
  1638. $ID_ZASOBU_SYSTEMU_SE=$h->ID;
  1639. }
  1640. if($ID_ZASOBU_SYSTEMU_SE) DEBUG_S(-3,"Juz jest w systemie ZASOBOW wprowadzony serwer obslugujacy system, znajduje sie pod numerem zasobu :",$ID_ZASOBU_SYSTEMU_SE,__FILE__,__FUNCTION__,__LINE__);
  1641. else {
  1642. DEBUG_S(-3,"Nie ma zasobu dotyczacego systemu SE w zasobach, zatem dodamy go nizej :::",$ID_ZASOBU_SYSTEMU_SE,__FILE__,__FUNCTION__,__LINE__);
  1643. $cnf=Config::getConfFile('default_db');
  1644. $sql_arr=array("insert into CRM_LISTA_ZASOBOW (`PARENT_ID`,`TYPE`,`DESC`,`OPIS`) values ('0','SERWER','".$_SERVER['SERVER_NAME']."','podstawowy serwer obsglugujacy system SE');",
  1645. "insert into CRM_LISTA_ZASOBOW (`PARENT_ID`,`TYPE`,`DESC`,`OPIS`) values ('%LAST_INSERT_ID%','BAZA_DANYCH','".$cnf['database']."','baza danych od podstawowy serwer obsglugujacy system SE');");
  1646. foreach($sql_arr as $sql) {
  1647. $sql=str_replace('%LAST_INSERT_ID%',$last_insert_id,$sql);
  1648. DEBUG_S(-2,'zapytanie SQL dodajace zasoby ',$sql,__FILE__,__FUNCTION__,__LINE__);
  1649. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql);
  1650. $last_insert_id=$CONNREMOTE->insert_id();
  1651. echo "<br>LAST insert ID to ".$last_insert_id;
  1652. }
  1653. foreach($CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW'] as $LCL=>$RMT) {
  1654. $sql="insert into CRM_IMPORT_TRANSLATE (REM_TABLE,SRC_TABLE_ID,DST_TABLE_ID) values ('CRM_LISTA_ZASOBOW','".$LCL."','".$RMT."')";
  1655. DEBUG_S(-2,'zapytanie SQL dodajace CRM_IMPORT_TRANSLATE ',$sql,__FILE__,__FUNCTION__,__LINE__);
  1656. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql);
  1657. }
  1658. $last_insert_id=$CONNREMOTE->insert_id();
  1659. if(!empty($CONFIRM_SQL_UPDATE)) DEBUG_S(-3,'UWAGA DODAJ DO KONFIGA ZMIENNA DATABASE_ROOT_ZASOB_ID z numerem: '.$last_insert_id," \$DATABASE_ROOT_ZASOB_ID=".$last_insert_id.";",__FILE__,__FUNCTION__,__LINE__);
  1660. }
  1661. }
  1662. else if($SYNC_OPTIONS=='FROM_ZASOBY_TO_DATABASE') {//budowa struktur w bazie
  1663. // w tym miejscu wprowadzamy informacje odczytane ze struktur bazy danych do zasobow - czyli do tabeli z zasobami i cechami
  1664. if(!isset($DATABASE_ROOT_ZASOB_ID)) die1(' Nie podano glownego numeru ID zasobow, do ktorych ma byc doklejona struktura tabel');
  1665. $sql="show tables like '%' ;";
  1666. $result=$CONNLOCAL->query($sql) or die1(' Problem ze sql '.$sql);
  1667. $TABLES_READ_FROM_LOCALDB=array();
  1668. while($h=mysql_fetch_array($result)) {
  1669. $TABLES_READ_FROM_LOCALDB[]=$h[0];
  1670. //print_r($h);
  1671. }
  1672. $STRUCTURE_LOCAL=$CONNREMOTE->STRUCTURE_GENERATE($TABLES_READ_FROM_LOCALDB);
  1673. //$STRUCTURE_LOCAL=STRUCTURE_GENERATE($TABLES_READ_FROM_LOCALDB,$CONNREMOTE);
  1674. //print_r($STRUCTURE_LOCAL);
  1675. //1.szukamy numerow cech w drzewie cech dla Type,Null,Default .
  1676. //2.bierzemy szukamy tabeli w strukturze
  1677. //3.szukamy odpowiednich komorek w strukturze ( jak nie ma dodajemy )
  1678. //4.szukamy czy komorka ma dodane cechy ( jak nie ma dodajemy) ,
  1679. //4a. a jak ma to sprawdzamy czy sie zgadzaja
  1680. //4b. jak sie nie zgadzaja, to updatujemy
  1681. //1.
  1682. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `ID`='".$DATABASE_ROOT_ZASOB_ID."' and A_STATUS!='DELETED' ";
  1683. $result=$CONNLOCAL->query($sql);
  1684. if(mysql_num_rows($result)==0) {
  1685. die1("\n BLAD , nie ma w strukturze zasobow , zaproponowanego numeru zasobu [".$DATABASE_ROOT_ZASOB_ID."] , do dolaczenia struktury bazy danych !");
  1686. } else { //jest numer zasobu lecimy po tabelach
  1687. //wyszukujemy jakie numery tabel sa w strukturze w bazie
  1688. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `PARENT_ID`='".$DATABASE_ROOT_ZASOB_ID."' and `TYPE`='TABELA' ";
  1689. $result=$CONNLOCAL->query($sql);
  1690. while($h=mysql_fetch_object($result)) {
  1691. $SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$h->DESC]=$h->ID;
  1692. $SYNC_279['TABELE_DO_SPRAWDZENIA_W_REM'][$h->DESC]=$h->ID;
  1693. } //sql foreach
  1694. foreach($STRUCTURE_LOCAL as $LOCAL_TABLE_FOUND=>$LOCAL_TAB_ARR) {
  1695. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOCAL_TABLE_FOUND]=1;
  1696. }
  1697. //przeszukajmy tabele
  1698. foreach($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1699. if(isset($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOOK_FOR_TABLE])) {
  1700. echo "\n Znalazlem:".$LOOK_FOR_TABLE;
  1701. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1702. }
  1703. }
  1704. //teraz mamy tylko tych, co brakuje, trzeba dopisac
  1705. foreach($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1706. $sql="CREATE TABLE `".$LOOK_FOR_TABLE."` ( ID int(11)) DEFAULT CHARSET=latin2 " ;
  1707. echo "\n ".$sql;
  1708. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1709. if($CONNREMOTE->insert_id()>0) { //usuwamy z poszukiwania
  1710. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1711. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOOK_FOR_TABLE]=$CONNREMOTE->insert_id();
  1712. }
  1713. }
  1714. //szukamy czy sa w tabeli CECH parametry dla Type,Null,Default TODO to trzeba dac do konfigu?
  1715. $sql="select `ID`,`A_STATUS`,`TYPE`,`VALUE` from `IN7_CECHY` where `TYPE`='DATABASE_OPTIONS' ";//szukam glownego zagniezdzenia cech TODO makos to powinno byc ustalone w konfigu
  1716. $result=$CONNLOCAL->query($sql);
  1717. if(mysql_num_rows($result)==0)
  1718. die1('Brak oczekiwanej definicji w systemie zasobow bazy danych TYPE=DATABASE_OPTIONS !!! ');
  1719. else { //znalezlismy cos
  1720. list($DRZEWO_CECH['KONFIG_SYSTEMU_SE_ROOT'])=mysql_fetch_array($result);
  1721. }
  1722. //szukamy podparametrow
  1723. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1724. foreach($VVALUE as $TYPE=>$VALUE) {
  1725. $sql="select `ID`,`A_STATUS`,`TYPE`,`VALUE` from `IN7_CECHY` where `TYPE`='".$VALUE."' ; ";
  1726. echo "\n ".$sql;
  1727. $result=$CONNLOCAL->query($sql) or die1('problem ze sql '.$sql);
  1728. if(mysql_num_rows($result)==0)
  1729. die1('Brak oczekiwanej definicji w systemie zasobow bazy danych TYPE='.$VALUE.' !!! ');
  1730. else { //znalezlismy ID tech cech
  1731. list($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE])=mysql_fetch_array($result);
  1732. }
  1733. if($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]<1) {
  1734. DEBUG_S(-3,"System nie mogl odnalezc numeru ID glownych cechy - powinien go dodac",array($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE],$IINDEX,$TYPE),__FILE__, __FUNCTION__, __LINE__);
  1735. die1('');
  1736. }
  1737. }
  1738. }
  1739. //3. teraz sprawdzamy jakie cechy sa opisane w zasobach/cechach dla naszych tabel/komorek
  1740. foreach($SYNC_279['TABELE_DO_SPRAWDZENIA_W_REM'] as $LOCAL_TABLE_FOUND=>$LOCAL_TAB_ARR) { //jedziemy po zrodlowych tabelach
  1741. //wyszukujemy jakie numery komorek sa w strukturze w bazie
  1742. flush();
  1743. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `PARENT_ID`='".$LOCAL_TAB_ARR."' and `TYPE`='KOMORKA' ";
  1744. echo "\n".$LOCAL_TABLE_FOUND.":".$sql;
  1745. $result=$CONNLOCAL->query($sql); //tu wyswietlamy komorki znalezione w bazie zasobow dla tego wezla
  1746. //if(isset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'])) unset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT']);
  1747. while($h=mysql_fetch_object($result)) {
  1748. $SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'][$h->DESC]=$h->ID;
  1749. $SYNC_279['KOMORKI_DO_SPRAWDZENIA_W_REM'][$h->DESC]=$h->ID;
  1750. echo ",".$h->DESC."=".$h->ID;
  1751. }
  1752. foreach($STRUCTURE_LOCAL[$LOCAL_TABLE_FOUND]['FIELDS'] as $ID_FIELD=>$ID_FIELD_VAL) {
  1753. $SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$ID_FIELD_VAL->Field]=1;
  1754. }
  1755. //przeszukajmy tabele
  1756. foreach($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1757. if(isset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$LOOK_FOR_TABLE])) {
  1758. echo "\n Znalazlem:".$LOOK_FOR_TABLE;
  1759. unset($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1760. }
  1761. }
  1762. //to teraz dla brakujacych robimy inserty
  1763. foreach($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1764. if(isset($KOMPLET_DANYCH_KOMORKI))unset($KOMPLET_DANYCH_KOMORKI);
  1765. DEBUG_S(-3,'Dla brakujacych komorek bede robic inserty (uzywajac poszukiwanych cech) :',array($LOOK_FOR_TABLE,$VAL),__FILE__, __FUNCTION__, __LINE__);
  1766. //musimy zbudowac parametry komorki do wprowadzenia - zaladowac je trzeba ze struktury
  1767. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1768. foreach($VVALUE as $TYPE=>$VALUE) {
  1769. $sql="select `ID`,`A_STATUS`,`CECHA_ID`,`PRODUKT_ID`,`DESC` from `IN7_PRODUKTY_CECHY` where
  1770. `A_STATUS`!='DELETED' and `CECHA_ID`='".$DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]."' and
  1771. `PRODUKT_ID`='".$VAL."' ";
  1772. $res2=$CONNLOCAL->query($sql);
  1773. if(mysql_num_rows($CONNLOCAL)==0) DEBUG_S(-3,"Nie znalazlem oczekiwanych cech dla komorki :",array($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE],$VAL,$sql),__FILE__, __FUNCTION__, __LINE__);
  1774. while($hh=mysql_fetch_object($res2)) {
  1775. $KOMPLET_DANYCH_KOMORKI[$TYPE]=$hh->DESC;
  1776. }
  1777. }
  1778. }
  1779. DEBUG_S(-3,'Komplet danych Komorki:',$KOMPLET_DANYCH_KOMORKI,__FILE__, __FUNCTION__, __LINE__);
  1780. if(count($KOMPLET_DANYCH_KOMORKI)<5) {
  1781. DEBUG_S(-3,"Nie ma w bazie zasobow odpowiedniej definicji tabeli/komorki - zla struktura! (Jest w Zasobach, bez dokladnych definicji - nalezy pewnie usunac z zasobow zasob [".$VAL."])",$KOMPLET_DANYCH_KOMORKI,__FILE__, __FUNCTION__, __LINE__) ;
  1782. die1(); }
  1783. if(!isset($KOMPLET_DANYCH_KOMORKI['Field'])||!isset($KOMPLET_DANYCH_KOMORKI['Type'])||!isset($KOMPLET_DANYCH_KOMORKI['Null'])||!isset($KOMPLET_DANYCH_KOMORKI['Default'])||!isset($KOMPLET_DANYCH_KOMORKI['Extra'])) die1('Zla struktura - niepelne definicje tabel/komorek w zasobach.');
  1784. $sql="ALTER TABLE `".$LOCAL_TABLE_FOUND."` ADD `".$KOMPLET_DANYCH_KOMORKI['Field']."` ".$KOMPLET_DANYCH_KOMORKI['Type']." " ;
  1785. if($KOMPLET_DANYCH_KOMORKI['Null']=='YES') $sql.=" NULL ";
  1786. if(!empty($KOMPLET_DANYCH_KOMORKI['Default'])) $sql.=" default ".$KOMPLET_DANYCH_KOMORKI['Default']." ";
  1787. echo "\n ".$sql;
  1788. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL: ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('\nProblem z '.$sql);
  1789. if(mysql_affected_rows($CONNREMOTE)>0) { //usuwamy z poszukiwania
  1790. unset($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1791. $SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$LOOK_FOR_TABLE]=$CONNREMOTE->insert_id();
  1792. }
  1793. }
  1794. //teraz synchronizacja cech do bazy - cech dotyczacych tych komorek
  1795. //foreach($SYNC_279['KOMORKI_DO_SPRAWDZENIA_W_REM'] as $ID_FIELD=>$ID_FIELD_VAL ) {
  1796. // //tu powinnismy robin foreach $CECHY_POSZUKIWANE - aby przeleciec wszystkie cechy komorki z tabeli
  1797. // $NUMER_ID_TABELI_Z_BAZY=$ID_FIELD_VAL;
  1798. foreach($STRUCTURE_LOCAL[$LOCAL_TABLE_FOUND]['FIELDS'] as $TSTIND=>$ID_FIELD_VAL_FLD) { //tu robie tabelke do odhaczania z niej zmiennych
  1799. $SA_PROBLEMY_W_KOMORKACH=false;
  1800. if(isset($KOMPLET_DANYCH_KOMORKI))unset($KOMPLET_DANYCH_KOMORKI);
  1801. echo "\n SRU: dla ".$TSTIND. "oraz tabeli".$ID_FIELD_VAL_FLD->Field;
  1802. //print_r($ID_FIELD_VAL_FLD);
  1803. //die1();
  1804. //print_r($STRUCTURE_LOCAL[$LOCAL_TABLE_FOUND]);
  1805. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1806. foreach($VVALUE as $TYPE=>$VALUE) {
  1807. //sprawdzamy czy jestesmy w dobrej komorce foreach
  1808. //if($ID_FIELD!=$ID_FIELD_VAL_TBL->Field) continue;
  1809. //sprawdzamy zgodnosc oczekiwanego typu lokalnego z parametrami w konfigu
  1810. echo "\n Sprawdzam zgodnosc strukturr: ".$TYPE." dla pola LEFT:" ;
  1811. // print_r($ID_FIELD_VAL_FLD);
  1812. //die1();
  1813. //if($ID_FIELD_VAL_FLD->$TYPE!=$TYPE) {
  1814. //echo "\n".$ID_FIELD_VAL_FLD->$TYPE."!=".$TYPE ;}
  1815. echo "\n--- dalej Sprawdzam zgodnosc struktur:".$LOCAL_TABLE_FOUND."::: ".$ID_FIELD_VAL_FLD->Field." ".$TYPE ;
  1816. //SZUKAMY CO JEST W CECHACH
  1817. $sql="select `ID`,`A_STATUS`,`CECHA_ID`,`PRODUKT_ID`,`DESC` from `IN7_PRODUKTY_CECHY` where
  1818. `A_STATUS`!='DELETED' and `CECHA_ID`='".$DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]."' and
  1819. `PRODUKT_ID`='".$SYNC_279['KOMORKI_DO_SPRAWDZENIA_W_REM'][$ID_FIELD_VAL_FLD->Field]."' ";
  1820. echo "\n ".$sql;
  1821. //SPRAWDZAMY Z TYM CO POWINNO BYC W BAZIE
  1822. $result=$CONNLOCAL->query($sql) or die1('problem ze sql '.$sql);
  1823. while($h=mysql_fetch_object($result)) {
  1824. $KOMPLET_DANYCH_KOMORKI[$TYPE]=$h->DESC;
  1825. if($ID_FIELD_VAL_FLD->$TYPE==addslashes($h->DESC)) {
  1826. echo "\n Zgodnosc cechy ".$TYPE." ".$h->DESC." z ".addslashes($ID_FIELD_VAL_FLD->$TYPE);
  1827. break; //nie robimy dalej tego foreach, bo jest zgodnosc tej cechy?
  1828. } else {
  1829. DEBUG_S(-3,"\n BRAK ZGODNOSCI! cechy ".$TYPE." ".$h->DESC." z ".addslashes($ID_FIELD_VAL_FLD->$TYPE),'',__FILE__, __FUNCTION__, __LINE__) ;
  1830. $SA_PROBLEMY_W_KOMORKACH=123;
  1831. }
  1832. }
  1833. //else DODAJEMY OPISY CECH DO BAZY DANYCH
  1834. }
  1835. echo "\n TEstuje problemy w komorkach:(".$SA_PROBLEMY_W_KOMORKACH.")";
  1836. if($SA_PROBLEMY_W_KOMORKACH) {
  1837. echo " ---- TAK SA - idziemy!:";
  1838. $SA_PROBLEMY_W_KOMORKACH=false;
  1839. print_r($KOMPLET_DANYCH_KOMORKI);
  1840. if(count($KOMPLET_DANYCH_KOMORKI)<5) die1('Niie ma w bazie zasobow odpowiedniej definicji tabeli/komorki - zla struktura!');
  1841. if(!isset($KOMPLET_DANYCH_KOMORKI['Field'])||!isset($KOMPLET_DANYCH_KOMORKI['Type'])||!isset($KOMPLET_DANYCH_KOMORKI['Null'])||!isset($KOMPLET_DANYCH_KOMORKI['Default'])||!isset($KOMPLET_DANYCH_KOMORKI['Extra'])) die1('Zla struktura - niepelne definicje tabel/komorek w zasobach.');
  1842. $sql="ALTER TABLE `".$LOCAL_TABLE_FOUND."` CHANGE `".$ID_FIELD_VAL_FLD->Field."` `".$ID_FIELD_VAL_FLD->Field."` ".$KOMPLET_DANYCH_KOMORKI['Type']." " ;
  1843. if($KOMPLET_DANYCH_KOMORKI['Null']=='YES') $sql.=" NULL ";
  1844. if(!empty($KOMPLET_DANYCH_KOMORKI['Default'])) $sql.=" default '".$KOMPLET_DANYCH_KOMORKI['Default']."' ";
  1845. echo "\n ".$sql;
  1846. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL: ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  1847. if(mysql_affected_rows($CONNREMOTE)>0) echo "\R Success alter";
  1848. //if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('\nProblem z table '.$LOCAL_TABLE_FOUND.' Komorka '.$ID_FIELD_VAL->Field.' , parameter : '.$TYPE.' sql: '.$sql);
  1849. }
  1850. }
  1851. }
  1852. echo "\nZNALEZIONO_KOMORKI_W_BAZIE_REM\n";print_r($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM']);
  1853. echo "\nKOMORKI_DO_ZNALEZIENIA_W_REM\n";print_r($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM']);
  1854. unset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM']);
  1855. unset($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM']);
  1856. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM']);
  1857. unset($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM']);
  1858. unset($SYNC_279['TABELE_DO_SPRAWDZENIA_W_REM']);
  1859. unset($SYNC_279['KOMORKI_DO_SPRAWDZENIA_W_REM']);
  1860. }
  1861. print_r($DRZEWO_CECH);
  1862. print_r($SYNC_279);
  1863. //unset($SYNC_279);
  1864. }
  1865. }// else if($SYNC_OPTIONS=='FROM_ZASOBY_TO_DATABASE')
  1866. else if($SYNC_OPTIONS=='FROM_ZASOBY_TO_ZASOBY') {
  1867. FROM_ZASOBY_TO_ZASOBY($CONNLOCAL,$CONNREMOTE,$SYSTEM_PROFILE_STRING_IMPORT_EXPORT,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  1868. // ! CLEAR_IMPORTED_ZASOBY_REMOTE
  1869. } else if($SYNC_OPTIONS=='CLEAR_IMPORTED_ZASOBY_REMOTE') {
  1870. //jedziemy po wszystkich tabelach z CRM_IMPORT_TRANSLATE
  1871. if( isset($sql)) unset($sql);
  1872. if( isset($zap)) unset($zap);
  1873. echo "\n<br> Będą kasowane zaimportowane zasoby, procesy, wskazniki, pytania, zdjecia dla zaimportowanych struktur - aby wgrac od nowa czyste ";
  1874. $sql[]="delete t1.* from `CRM_PROCES` as t1 , `CRM_IMPORT_TRANSLATE` as t2 where ( t1.`ID`=t2.`DST_TABLE_ID` and t2.`REM_TABLE`='CRM_PROCES' ) ";
  1875. $sql[]="delete t1.* from `CRM_WSKAZNIK` as t1 , `CRM_IMPORT_TRANSLATE` as t2 where ( t1.`ID`=t2.`DST_TABLE_ID` and t2.`REM_TABLE`='CRM_WSKAZNIK' ) ";
  1876. $sql[]="delete t1.* from `CRM_LISTA_ZASOBOW` as t1 , `CRM_IMPORT_TRANSLATE` as t2 where ( t1.`ID`=t2.`DST_TABLE_ID` and t2.`REM_TABLE`='CRM_LISTA_ZASOBOW' ) ";
  1877. $sql[]="delete t1.* from `CRM_TESTY_PYTANIA` as t1 , `CRM_IMPORT_TRANSLATE` as t2 where ( t1.`ID`=t2.`DST_TABLE_ID` and t2.`REM_TABLE`='CRM_TESTY_PYTANIA' ) ";
  1878. $sql[]="delete t1.* from `CRM_IMAGE` as t1 , `CRM_IMPORT_TRANSLATE` as t2 where ( t1.`ID`=t2.`DST_TABLE_ID` and t2.`REM_TABLE`='CRM_IMAGE' ) ";
  1879. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_PROCES'";
  1880. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_WSKAZNIK'";
  1881. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_LISTA_ZASOBOW'";
  1882. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_TESTY_PYTANIA'";
  1883. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_IMAGE'";
  1884. DEBUG_S(-3,'Zapytanie SQL czyszczace tabele: ',$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1885. foreach($sql as $zap_ind=>$zap) {
  1886. DEBUG_S(-3,'Wyzwalam : Zapytanie SQL czyszczace tabele: ',$zap,__FILE__, __FUNCTION__, __LINE__) ;
  1887. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($zap) or die1('\nProblem z '.$zap);
  1888. }
  1889. //! MAKE_SE_AND_HIST_FIELDS_FOR_TABLE
  1890. } else if($SYNC_OPTIONS=='MAKE_SE_AND_HIST_FIELDS_FOR_TABLE') {
  1891. $result=$CONNLOCAL->show_tables($SYSTEM_PROFILE_STRING_IMPORT_EXPORT);
  1892. while($h=$CONNLOCAL->fetch_array($result)) {
  1893. if(!strstr($h[0], '_HIST')) {
  1894. if(!empty($CONFIRM_SQL_UPDATE)) $CONNLOCAL->MAKE_SE_AND_HIST_FIELDS_FOR_TABLE($h[0]);
  1895. else DEBUG_S(-3,'Suppressed running command function CONNLOCAL->MAKE_SE_AND_HIST_FIELDS_FOR_TABLE('.$h[0].')',__FILE__,__FUNCTION__,__LINE__);
  1896. }
  1897. }
  1898. //! IMPORT_SORT_DESC_INFO
  1899. } else if($SYNC_OPTIONS=='SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS') {
  1900. SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS($CONNREMOTE,$CONFIRM_SQL_UPDATE);
  1901. } else if($SYNC_OPTIONS=='IMPORT_SORT_DESC_INFO') {
  1902. echo "<br>f.IMPORT_SORT_DESC_INFO";
  1903. $cnf=Config::getConfFile('default_db');
  1904. $exec="/usr/local/mysql/bin/mysqldump --skip-lock-tables -h se.dev.webone.pl -ucrmexportprof -pcrmexportprof SES_USERS2 CRM_LISTA_ZASOBOW |/usr/local/mysql/bin/mysql -Dtest -u{$cnf['user']} -p{$cnf['pass']}";
  1905. exec($exec,$out,$exit);
  1906. DEBUG_S(-3,'Importuje swieza tabele zasobow',array($cnf,$out,$exit));
  1907. flush();
  1908. $sql="update {$cnf['database']}.CRM_LISTA_ZASOBOW cz , {$cnf['database']}.CRM_LISTA_ZASOBOW cz2
  1909. , test.CRM_LISTA_ZASOBOW cs , test.CRM_LISTA_ZASOBOW cs2
  1910. set cz.DESC_PL=cs.DESC_PL
  1911. , cz.SORT_PRIO=cs.SORT_PRIO
  1912. where cz.`DESC`=cs.`DESC` and cz.DESC_PL like ''
  1913. and cz.PARENT_ID=cz2.ID and cs.PARENT_ID=cs2.ID
  1914. and cs2.`DESC`=cz2.`DESC` ";
  1915. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1916. //! CLEAR_TREE_DUBLES_AND_MOVE_WSK
  1917. } else if($SYNC_OPTIONS=='CLEAR_TREE_DUBLES_AND_MOVE_WSK') {
  1918. $sql="select cz.ID, group_concat(cz.ID) as ID_GROUP, cz.`DESC`, count(cz.ID) as cnt
  1919. from CRM_LISTA_ZASOBOW as cz
  1920. where cz.PARENT_ID!='-1' and cz.`DESC` like '_%' and ( cz.`TYPE`='KOMORKA' or cz.`TYPE`='TABELA' or cz.`TYPE`='TYPESPECIALS' or cz.`TYPE`='TYPESPECIAL' or cz.`TYPE`='VARIABLES' or cz.`TYPE`='VARIABLE' )
  1921. group by cz.PARENT_ID,cz.`DESC` ,cz.`TYPE`,cz.ALIAS_ID having cnt>1
  1922. limit 100
  1923. ";
  1924. DEBUG_S(-3,'szukam',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1925. $res=$CONNREMOTE->query($sql);
  1926. while($h=DB::fetch($res)) {
  1927. //if(empty($h->DESC2)) {
  1928. //bedziemy przerzucac na cz.ID wskazniki,
  1929. $to_move=explode(',',$h->ID_GROUP);
  1930. $dest_move=$to_move[0];
  1931. unset($to_move[0]);
  1932. foreach($to_move as $mv) {
  1933. echo "<hr> ".$h->DESC." (".$h->ID_GROUP.")";
  1934. $sql="update CRM_LISTA_ZASOBOW set PARENT_ID='".$dest_move."' where PARENT_ID='".$mv."' ";
  1935. DEBUG_S(3,'aktualizuje PARENT_ID',array($sql,$mv,$h),__FILE__,__FUNCTION__,__LINE__);
  1936. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1937. $sql="update CRM_LISTA_ZASOBOW set ALIAS_ID='".$dest_move."' where ALIAS_ID='".$mv."' ";
  1938. DEBUG_S(3,'aktualizuje PARENT_ID',array($sql,$mv,$h),__FILE__,__FUNCTION__,__LINE__);
  1939. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1940. $sql="update CRM_WSKAZNIK set ID_ZASOB='".$dest_move."' where ID_ZASOB='".$mv."' ";
  1941. DEBUG_S(-3,'aktualizuje WSKAZNIK',array($sql,$mv,$h),__FILE__,__FUNCTION__,__LINE__);
  1942. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1943. // a reszte kasowac, damy info w CRM_IMPORT_TRANSLATE jak bylo cos na niego
  1944. $sql="update CRM_IMPORT_TRANSLATE set DST_TABLE_ID='".$dest_move."' where DST_TABLE_ID='".$mv."' and REM_TABLE='CRM_LISTA_ZASOBOW'";
  1945. DEBUG_S(-3,'aktualizuje CRM_TRANS',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1946. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1947. $sql="update CRM_LISTA_ZASOBOW set PARENT_ID='-1', `DESC`='DELETED', A_RECORD_UPDATE_AUTHOR=concat('script CLEAR_TREE',`DESC`) where ID='".$mv."'";
  1948. DEBUG_S(-3,'aktualizuje - kasuje stary',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1949. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1950. $sql="update ignore USERS2 set CRM_LISTA_ZASOBOW_ID='".$dest_move."' where CRM_LISTA_ZASOBOW_ID='".$mv."' ";
  1951. DEBUG_S(-3,'aktualizuje USERS2',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1952. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1953. $sql="update ignore ADMIN_USERS set CRM_LISTA_ZASOBOW_ID='".$dest_move."' where CRM_LISTA_ZASOBOW_ID='".$mv."' ";
  1954. DEBUG_S(-3,'aktualizuje ADMIN_USERS',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1955. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1956. $sql="update ignore CRM_AUTH_PROFILE set ID_ZASOB='".$dest_move."' where ID_ZASOB='".$mv."' ";
  1957. DEBUG_S(-3,'aktualizuje CRM_AUTH_PROFILE',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1958. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1959. $sql="delete from CRM_AUTH_PROFILE where ID_ZASOB='".$mv."' ";
  1960. DEBUG_S(-3,'delete from CRM_AUTH_PROFILE',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1961. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1962. }
  1963. //}
  1964. }
  1965. }
  1966. echo "</pre>\n";
  1967. unset($_SESSION['DEBUG']);
  1968. }
  1969. echo "<HR>EOF";
  1970. ?>