superedit-SQIX_STRUCTURE_DB_SYNC.php 156 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406
  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> n.p. %PISM%,%zasob%,%ADMINISTRACJA%,%wyposazenie%,%global%,%WMS%,%ISP%,%BI%</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. $sql='drop trigger if exists _CRM_LISTA_ZASOBOW_tree_AFTER_UPDATE ;';
  380. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  381. //_CRM_LISTA_ZASOBOW_tree_UPDATE
  382. $sql='drop trigger if exists _CRM_LISTA_ZASOBOW_tree_UPDATE ;';
  383. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  384. DEBUG_S(-3,'Koniecznie należy przywrócić trigger _CRM_LISTA_ZASOBOW_tree_AFTER_UPDATE oraz _CRM_LISTA_ZASOBOW_tree_UPDATE','',__FILE__, __FUNCTION__, __LINE__);
  385. //! function EXPORT_DATA_WITH_TRANSLATE_TABLE(
  386. function EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,$TABLE,$ARRAY_WITH_IDS,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE) {
  387. foreach($ARRAY_WITH_IDS as $ID_TO_IMPORT => $NIC) {
  388. flush();
  389. $last_inserted_id="";
  390. $sql="select * from ".$TABLE." where `ID`='".$ID_TO_IMPORT."'" ;
  391. DEBUG_S(3,"Importuje dane dla tabeli ".$TABLE." ",$sql,__FILE__, __FUNCTION__, __LINE__);
  392. $result_sel=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Blad SQL',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  393. while($h=mysql_fetch_object($result_sel)){
  394. //print_r($h);
  395. $SRC_TABLE_ID="";
  396. if($TABLE=='CRM_LISTA_ZASOBOW') {
  397. if(isset($CRM_IMPORT_TRANSLATE[$TABLE][$h->PARENT_ID])) {
  398. 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__);
  399. $h->PARENT_ID=$CRM_IMPORT_TRANSLATE[$TABLE][$h->PARENT_ID];
  400. }
  401. if(isset($CRM_IMPORT_TRANSLATE[$TABLE][$h->ALIAS_ID])) {
  402. 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__);
  403. $h->ALIAS_ID=$CRM_IMPORT_TRANSLATE[$TABLE][$h->ALIAS_ID];
  404. }
  405. }
  406. if(isset($h->A_CLASSIFIED)) $h->A_CLASSIFIED='';
  407. if(isset($h->A_ADM_COMPANY)) $h->A_ADM_COMPANY='';
  408. //dodatkowo sprawdzamy liste przekierowanych wczesniej importow TRANSLATE
  409. $sql="select `DST_TABLE_ID` from `CRM_IMPORT_TRANSLATE` where `REM_TABLE`='".$TABLE."' and `SRC_TABLE_ID`='".$h->ID."' ;" ;
  410. $result_tst=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  411. $DST_FOUND_ID=0; $IF_NOT_REPLACED=true;
  412. while($tst=$CONNREMOTE->fetch($result_tst)) {
  413. //$h->PARENT_ID=$tst->DST_TABLE_ID;
  414. $DST_FOUND_ID=$tst->DST_TABLE_ID;
  415. $IF_NOT_REPLACED=false; //zaznaczamy, ze nie byl wczesniej zaimportowany
  416. if($CONFIRM_SQL_UPDATE!='REPLACE') {
  417. break 2;
  418. } 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__);
  419. }
  420. // ! sprawdzmy czy w naszej tabeli nie ma jakiegos parenta, ktory zostal juz wstawiony jako inny ID - mozna z nim wstawic rekord nowy jako nadrzedny ?
  421. // if($TABLE=='CRM_WSKAZNIK') {
  422. // $sql="select DST_TABLE_ID from CRM_IMPORT_TRANSLATE where `REM_TABLE`='CRM_LISTA_ZASOBOW' and `SRC_TABLE_ID`='".$h->ID_ZASOB."' ;" ;
  423. // $result_tst=mysql_query($sql,$CONNREMOTE) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  424. // while($tst=mysql_fetch_object($result_tst)) {
  425. // }
  426. // }
  427. //if(isset($CRM_IMPORT_TRANSLATE[$TABLE][$h->ID])) { //to oznacza, ze jest zasob taki sam jak obcy, to polaczenia
  428. //
  429. //}
  430. $SYNC_SQIX_STATUS='SYSTEM_IMPORT';
  431. foreach($h as $IND=>$VAL) {//karmie komorki
  432. if($IND=='ID') {
  433. $SRC_TABLE_ID=$VAL;
  434. } else if($IND=='SYNC_SQIX_STATUS') {
  435. //@2014-02-05 proba wlasciwego oznaczenia nadpisanego P_ID aby nic mu juz tego PARENTA nie zmienilo potem:
  436. //@2014-04-03 to nie dziala!!! TODO nalezy ignorowac kolumne P_ID w takim wypadku!
  437. //@2017-11-15 bledne zalozenie, ze replace nie wymaga tlumaczenia - przeciez nadpisze sie P_ID!
  438. //if($CONFIRM_SQL_UPDATE!='REPLACE')
  439. // if(($DST_FOUND_ID>0)) $SYNC_SQIX_STATUS='_FIX_ZASOB';
  440. } else if(($TABLE=='CRM_LISTA_ZASOBOW')&&($IND=='A_LDAP_GID')) {
  441. //} else if(($CONFIRM_SQL_UPDATE=='REPLACE')&&($DST_FOUND_ID>0)&&($IND=='P_ID')) {
  442. // $SYNC_SQIX_STATUS='_FIX_ZASOB';
  443. //pusto nie nadpisujemy P_ID
  444. //} else if(($CONFIRM_SQL_UPDATE=='REPLACE')&&($DST_FOUND_ID>0)&&($IND=='PARENT_ID')) {
  445. // $SYNC_SQIX_STATUS='_FIX_ZASOB';
  446. //pusto nie nadpisujemy P_ID
  447. } else {
  448. $FIELDS[$IND]=$VAL;
  449. if($IF_NOT_REPLACED) $SQL_METHOD='insert';
  450. else if($CONFIRM_SQL_UPDATE=='REPLACE') {
  451. $SQL_METHOD='replace' ;
  452. }
  453. $sql_ins['sql']=$SQL_METHOD." into `".$TABLE."` ( `ID` , `SYNC_SQIX_STATUS` ";
  454. $sql_ins['fields']="";
  455. $sql_ins['values']=" '".$DST_FOUND_ID."' , '{$SYNC_SQIX_STATUS}' ";
  456. }
  457. }
  458. foreach($FIELDS as $IND=>$VAL) {
  459. $sql_ins['fields'].=", `".$IND."`";
  460. $sql_ins['values'].=", '". $CONNREMOTE->_(insert_converted($VAL))."'";
  461. }
  462. //die1($sql_ins['values']);
  463. $sql_ins['sql'].=$sql_ins['fields']." ) values ( ".$sql_ins['values']." ) ;";
  464. if(!empty($CONFIRM_SQL_UPDATE)) $result_ins=$CONNREMOTE->query($sql_ins['sql']) or DIE('Problem ze sql:481: '.$sql_ins['sql'].' / '.mysql_error($CONNREMOTE));
  465. $last_inserted_id=$CONNREMOTE->insert_id();
  466. 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__);
  467. if(empty($last_inserted_id)) {
  468. 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__) ;
  469. if(!empty($CONFIRM_SQL_UPDATE)) DIE();
  470. } else if($IF_NOT_REPLACED) {
  471. //$CRM_IMPORT_TRANSLATE[$TABLE][$SRC_TABLE_ID]=$last_inserted_id; //zapisujemy jaki dostal id nowy rekord
  472. $sql_translate="insert into CRM_IMPORT_TRANSLATE (`REM_TABLE`,`SRC_TABLE_ID`,`DST_TABLE_ID` ) values ('".$TABLE."','".$SRC_TABLE_ID."','".$last_inserted_id."')";
  473. DEBUG_S(-3,'Dopisujemy ID do tabeli slownikowej',$sql_translate,__FILE__, __FUNCTION__, __LINE__) ;
  474. 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();
  475. }
  476. }
  477. }
  478. }
  479. $HOW_MANY_RECURRENCES_EXEC=0;
  480. function FIND_CHILDS_OR_PARENTS_OF_FIELD($ID,$PARENT_OR_CHILD,$TABLE,$CONN,$HOW_MANY_RECURRENCES_EXEC,$found=array()) {
  481. 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__);
  482. $HOW_MANY_RECURRENCES_EXEC++;
  483. $RECURENCES_MAX=1000; //TODO to be in config!
  484. 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();}
  485. if($PARENT_OR_CHILD=='PARENT') {
  486. $sql="select PARENT_ID from ".$TABLE." where ID='".$ID."' ";
  487. 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' ";
  488. //if($TABLE=='CRM_LISTA_ZASOBOW') $sql.=" and EXPORT_PARAM='PUBLIC' ";
  489. } else if($PARENT_OR_CHILD=='CHILD') {
  490. $sql_what="";
  491. if($TABLE=='CRM_LISTA_ZASOBOW') $sql_what.=" , ALIAS_ID "; //to get also aliases STUFF
  492. $sql="select ID ".$sql_what." from ".$TABLE." where PARENT_ID='".$ID."' ";
  493. 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' ";
  494. if($TABLE=='CRM_LISTA_ZASOBOW') $sql.=" and EXPORT_PARAM='PUBLIC' ";
  495. }
  496. DEBUG_S(6,'Zapytanie do poszukania dziecka/rodzica ID "'.$ID.'"',array($HOW_MANY_RECURRENCES_EXEC,$sql),__FILE__, __FUNCTION__, __LINE__);
  497. $result=$CONN->query($sql) or DEBUG_S(-3,'Problem ze SQL przy szukaniu powiazan dzieci/rodzicow',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  498. $cnt=0;
  499. while($h=mysql_fetch_object($result)) {
  500. $cnt++;
  501. if($PARENT_OR_CHILD=='PARENT') $connections=$h->PARENT_ID;
  502. else if($PARENT_OR_CHILD=='CHILD') $connections=$h->ID;
  503. //$ret[]=$connections;
  504. $IMPORT[]=$connections;
  505. // if($HOW_MANY_RECURRENCES_EXEC<$RECURENCES_MAX)
  506. $found[]=$connections;
  507. //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
  508. $x=FIND_CHILDS_OR_PARENTS_OF_FIELD($connections,$PARENT_OR_CHILD,$TABLE,$CONN,$HOW_MANY_RECURRENCES_EXEC,null);
  509. if(!empty($x)) {
  510. foreach($x as $push) {
  511. array_push($IMPORT,$push);
  512. }
  513. }
  514. if(!empty($h->ALIAS_ID)) { //wyszukanie struktur dla ALIASOW //Moze sie zapetlic!
  515. DEBUG_S(3,' Natrafilem na ALIAS_ID wyszukuje jego rodzicow('.$h->ALIAS_ID.')',null,__FILE__,__FUNCTION__,__LINE__);
  516. $IMPORT[]=$h->ALIAS_ID;
  517. $x=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ALIAS_ID,'PARENT',$TABLE,$CONN,$HOW_MANY_RECURRENCES_EXEC,null);
  518. if(!empty($x)) {
  519. foreach($x as $push) {
  520. array_push($IMPORT,$push);
  521. }
  522. }
  523. }
  524. }
  525. // foreach($IMPORT as $VAR){
  526. // $RETURN[]=$VAR;
  527. // }
  528. //foreach($childs_of_proces as $VAR){
  529. //$RETURN[]=$VAR;
  530. //}
  531. //DEBUG_S(3,'Znalazlem tyle skojarzonych rekordow: ',$IMPORT,__FILE__,__FUNCTION__,__LINE__);
  532. if(!empty($IMPORT))
  533. return $IMPORT;
  534. }
  535. $sql="select `ID` from CRM_PROCES where ( `TAGS` like '".$SYSTEM_PROFILE_STRING_IMPORT_EXPORT."' or `ID` like '".$SYSTEM_PROFILE_STRING_IMPORT_EXPORT."' ";
  536. if(strstr($SYSTEM_PROFILE_STRING_IMPORT_EXPORT,',')) {
  537. $search = explode(',',$SYSTEM_PROFILE_STRING_IMPORT_EXPORT);
  538. foreach($search as $string) {
  539. $sql.=" or `TAGS` like '".$string."' ";
  540. $sql.=" or `ID` like '".$string."' ";
  541. }
  542. }
  543. $sql.=" ) and `A_STATUS`!='DELETED' and EXPORT_PARAM!='PRIVATE'"; // ! szukam glownej listy procesow do importu wg klucza
  544. DEBUG_S(-3,'1. szukam procesow spelniajacych kryteria import ',array($SYSTEM_PROFILE_STRING_IMPORT_EXPORT,$sql),__FILE__, __FUNCTION__, __LINE__);
  545. $result=$CONNLOCAL->query($sql);
  546. $childs_of_proces_arr=array();
  547. while($h=mysql_fetch_object($result)) {
  548. array_push($childs_of_proces_arr,$h->ID);
  549. $x=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID,'CHILD','CRM_PROCES',$CONNLOCAL,null,null);
  550. foreach($x as $push) { array_push($childs_of_proces_arr,$push); }
  551. $x=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID,'PARENT','CRM_PROCES',$CONNLOCAL,null,null);
  552. foreach($x as $push) { array_push($childs_of_proces_arr,$push); }
  553. }
  554. DEBUG_S(-3,'wyszlo : Znaleziono liste procesow do exportu przed :',$childs_of_proces_arr,__FILE__, __FUNCTION__, __LINE__);
  555. foreach($childs_of_proces_arr as $cos) {
  556. $childs_of_proces_arr_zjebany[$cos]=1;
  557. }
  558. flush();
  559. DEBUG_S(-3,'Znaleziono liste procesow do exportu :',$childs_of_proces_arr_zjebany,__FILE__, __FUNCTION__, __LINE__);
  560. foreach($childs_of_proces_arr_zjebany as $PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA=>$NIC) {
  561. // ! szukam CRM_IMAGE po procesach
  562. $sql="select ID from CRM_IMAGE where REMOTE_ID='".$PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA."' and REMOTE_TABLE='CRM_PROCES' " ;
  563. $result_img=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Szukam CRM_IMAGE do procesow/zasobow sql: ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  564. while($hh=mysql_fetch_object($result_img)){
  565. $crm_image_to_import[$hh->ID]=1;
  566. }
  567. $sql="select CP.ID from CRM_TESTY_PYTANIA as CP
  568. left join CRM_WSKAZNIK as CW on CW.ID=CP.ID_WSKAZNIK
  569. left join CRM_LISTA_ZASOBOW as CZ on CZ.ID=CW.ID_ZASOB
  570. where CP.ID_PROCES='".$PROCES_DO_KROTREGO_SZUKAM_WSKAZNIKA."'
  571. and ( CZ.EXPORT_PARAM!='PRIVATE' OR CZ.EXPORT_PARAM IS NULL ) " ; // ! todo verify- bylo $h->ID_ZASOB , chyba blad
  572. $result_pyt=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Szukam testow/pytan do procesu sql: ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  573. while($hh=mysql_fetch_object($result_pyt)){
  574. $pytania_to_import[$hh->ID]=1;
  575. }
  576. $sql="select t1.ID ,t1.ID_ZASOB , t1.ID_PROCES , CZ.ALIAS_ID from CRM_WSKAZNIK as t1
  577. left join CRM_LISTA_ZASOBOW as CZ on CZ.ID=t1.ID_ZASOB
  578. 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
  579. 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__);
  580. $result=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Problem z zapytaniem SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  581. while($h=mysql_fetch_object($result)) {
  582. $wskazniki_to_import[$h->ID]=array('ID_PROCES'=>$h->ID_PROCES, 'ID_ZASOB'=>$h->ID_ZASOB);
  583. if(!empty($h->ALIAS_ID)) {
  584. DEBUG_S(1,'Dodaje zasob do importu z uwagi na ALIAS_ID('.$h->ALIAS_ID.')',null,__FILE__,__FUNCTION__,__LINE__);
  585. $zasoby_to_import[][]=$h->ALIAS_ID;
  586. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ALIAS_ID,'PARENT','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  587. } //TODO@2014-08-13 testing
  588. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID_ZASOB,'PARENT','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  589. $zasoby_to_import[][]=$h->ID_ZASOB;
  590. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID_ZASOB,'CHILD','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  591. $sql="select ID from CRM_TESTY_PYTANIA where ID_WSKAZNIK='".$h->ID."' " ; // ! todo verify- bylo $h->ID_ZASOB , chyba blad
  592. $result_pyt=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Szukam testow/pytan do procesu sql: ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  593. while($hh=mysql_fetch_object($result_pyt)){
  594. $pytania_to_import[$hh->ID]=1;
  595. }
  596. $sql="select ID from CRM_IMAGE where REMOTE_ID='".$h->ID_ZASOB."' and REMOTE_TABLE='CRM_LISTA_ZASOBOW' " ;
  597. $result_pyt=$CONNLOCAL->query($sql) or DEBUG_S(-3,'Szukam CRM_IMAGE do procesow/zasobow sql: ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  598. while($hh=mysql_fetch_object($result_pyt)){
  599. $crm_image_to_import[$hh->ID]=1;
  600. }
  601. //TODO tutaj cechy trzeba importnac
  602. }
  603. DEBUG_S(4,'zasoby_to_import/wskazniki',array($zasoby_to_import,$wskazniki_to_import),__FILE__, __FUNCTION__, __LINE__);
  604. foreach($zasoby_to_import as $VAR) {
  605. foreach($VAR as $ZASOBY){
  606. $zasoby_to_import_arr[$ZASOBY]=1;
  607. }
  608. }
  609. DEBUG_S(4,'$zasoby_to_import_arr',$zasoby_to_import_arr,__FILE__, __FUNCTION__, __LINE__);
  610. unset($zasoby_to_import);
  611. }
  612. DEBUG_S(1,'Ogolnie znaleziono zasoby_to_import_arr',$zasoby_to_import_arr,__FILE__, __FUNCTION__, __LINE__);
  613. //@2013-07 - wyszukanie specjalnych funkcji do importu
  614. $sql="select CZ.ID as ID_ZASOB, CZ.ALIAS_ID from CRM_LISTA_ZASOBOW as CZ
  615. 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'";
  616. DEBUG_S(2,'1. szukam typespecial/funkcji do importu (',$sql,__FILE__, __FUNCTION__, __LINE__);
  617. $result=$CONNLOCAL->query($sql) or die1('\nProblem z '.$sql);
  618. while($h=mysql_fetch_object($result)) {
  619. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID_ZASOB,'PARENT','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  620. $zasoby_to_import[][]=$h->ID_ZASOB;
  621. if(!empty($h->ALIAS_ID)) $zasoby_to_import[][]=$h->ALIAS_ID;
  622. $zasoby_to_import[]=FIND_CHILDS_OR_PARENTS_OF_FIELD($h->ID_ZASOB,'CHILD','CRM_LISTA_ZASOBOW',$CONNLOCAL,null,null);
  623. }
  624. DEBUG_S(-3,'typespecial zasoby_to_import_arr',$zasoby_to_import,__FILE__, __FUNCTION__, __LINE__);
  625. foreach($zasoby_to_import as $VAR) {
  626. foreach($VAR as $ZASOBY){
  627. $zasoby_to_import_arr[$ZASOBY]=1;
  628. }
  629. }
  630. unset($zasoby_to_import);
  631. //@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
  632. // $sql='truncate table _zasob_path_idx;';
  633. // if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  634. //_CRM_LISTA_ZASOBOW_tree_AFTER_UPDATE
  635. //$sql='drop trigger if exists _CRM_LISTA_ZASOBOW_tree_AFTER_UPDATE ;';
  636. //if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  637. //_CRM_LISTA_ZASOBOW_tree_UPDATE
  638. //$sql='drop trigger if exists _CRM_LISTA_ZASOBOW_tree_UPDATE ;';
  639. //if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  640. //todo
  641. 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__);
  642. //importuje PROCESU
  643. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_PROCES',$childs_of_proces_arr_zjebany,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  644. DEBUG_S(-3,'Importuje CRM_WSKAZNIK w oparciu o klucze ID',$wskazniki_to_import,__FILE__, __FUNCTION__, __LINE__);
  645. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_WSKAZNIK',$wskazniki_to_import,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  646. DEBUG_S(-3,'Importuje CRM_LISTA_ZASOBOW w oparciu o klucze ID',$zasoby_to_import_arr,__FILE__, __FUNCTION__, __LINE__);
  647. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_LISTA_ZASOBOW',$zasoby_to_import_arr,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  648. DEBUG_S(-3,'Importuje CRM_TESTY_PYTANIA w oparciu o klucze ID',$pytania_to_import,__FILE__, __FUNCTION__, __LINE__);
  649. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_TESTY_PYTANIA',$pytania_to_import,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  650. DEBUG_S(-3,'Importuje CRM_IMAGE w oparciu o klucze ID',$crm_image_to_import,__FILE__, __FUNCTION__, __LINE__);
  651. EXPORT_DATA_WITH_TRANSLATE_TABLE($CONNLOCAL,$CONNREMOTE,'CRM_IMAGE',$crm_image_to_import,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  652. // aktualizujemy PARAM_OUT dla zaimportowanych zasobow:
  653. //@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.
  654. $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 '' ";
  655. $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  656. while($h=mysql_fetch_object($result)) {
  657. if (false !== strpos($h->DESC, 'VIEWTABLE_AJAX')) {
  658. $id_zas_new_h_DESC = $h->DESC;
  659. $matches = array();
  660. if (preg_match_all('/&ZASOB_ID=([0-9]+)/', $id_zas_new_h_DESC, $matches)) {
  661. if (count($matches) >= 2 && !empty($matches[1])) {
  662. $sqlIds = implode(",", $matches[1]);
  663. $sql_to_find_parent="select `DST_TABLE_ID`, `SRC_TABLE_ID`
  664. from `CRM_IMPORT_TRANSLATE`
  665. where `REM_TABLE` = 'CRM_LISTA_ZASOBOW'
  666. and `SRC_TABLE_ID` in({$sqlIds})
  667. ";
  668. $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('');
  669. while($h_res_to_find_TS=mysql_fetch_object($res_to_find_parent_param)) {
  670. $paramOutLinkZasobId = $h_res_to_find_TS->SRC_TABLE_ID;
  671. $newLinkZasobId = $h_res_to_find_TS->DST_TABLE_ID;
  672. $id_zas_new_h_DESC = preg_replace('/&ZASOB_ID='.$paramOutLinkZasobId.'/', '&ZASOB_ID='.$newLinkZasobId, $id_zas_new_h_DESC);
  673. }
  674. 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." ; ";
  675. $CONNREMOTE->query($sql_upd) or die('Error with upd TYPESPECIAL PARAM_OUT line: 709:'.$sql_upd);
  676. DEBUG_S(-3,'Nadpisuje TYPESPECIAL PARAM_OUT, ktory ma uzyty URL z ID_ZASOB',$sql_upd,__FILE__,__FUNCTION__,__LINE__);
  677. }
  678. }
  679. }
  680. }
  681. }
  682. //@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
  683. // $sql='truncate table _zasob_path_idx;';
  684. // if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__);
  685. // ! aktualizujemy numery P_ID powiazanych tabel po tabeli translate dla IMPORTow z wyjatkiem celowo nadpisanych P_ID
  686. $sql='select * from CRM_IMPORT_TRANSLATE ;' ;
  687. $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze sql ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  688. while($h=mysql_fetch_object($result)) {
  689. set_time_limit(36000);
  690. if(isset($sql)) unset($sql);
  691. if($h->REM_TABLE=='CRM_LISTA_ZASOBOW') {
  692. //trzeba sprawdzic, czy dany typ jest komorka w tabeli
  693. //tylko jezeli wszedl z tego importu
  694. /* TODO @2017-09-25 nie dziala funkcja get_cols jak nie ma tabeli ma fatal error
  695. if(isset($zasoby_to_import_arr[$h->SRC_TABLE_ID])) {
  696. $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'";
  697. //trzeba sprawdzic, czy taka komorka istnieje w danej tabeli
  698. $res_chk=$CONNLOCAL->query($sql_chk);
  699. while($chk=$CONNLOCAL->fetch($res_chk)) {
  700. //jak nie istnieje, trzeba ja dodac
  701. //$sql_chk="select";
  702. DEBUG_S(3,'Sprawdzam czy istnieje komorka fizycznie w bazie',array($chk,$sql_chk),__FILE__,__FUNCTION__,__LINE__);
  703. $chk_obj= new Data_Source() ;
  704. $chk_obj->setTable($chk->TABLE);
  705. $chk_obj->get_cols();
  706. if(empty($chk_obj->_col_types)) {
  707. 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__);
  708. $sql_="select TABLE_STRUCTURE from CRM_LISTA_ZASOBOW where ID=".$chk->ID_TABLE ;
  709. $res_str=$CONNLOCAL->query($sql_); unset($sql_);
  710. $struct=$CONNLOCAL->get_by_id('CRM_LISTA_ZASOBOW',$chk->ID_TABLE);
  711. DEBUG_S(4,'The structure of table is',$struct,__FILE__,__FUNCTION__,__LINE__);
  712. if(!empty($struct->TABLE_STRUCTURE)) { //parsing unserialize to build structure
  713. $arr_=unserialize(stripcslashes($struct->TABLE_STRUCTURE));
  714. if(is_array($arr_)) {
  715. $arr[$chk->TABLE]=$arr_;
  716. DEBUG_S(4,'Uruchamian STRUCTURE_GENERATE_PARSE',$arr,__FILE__,__FUNCTION__,__LINE__);
  717. if($struct->TABLE_STRUCTURE[$chk->TABLE]=='BASE TABLE')
  718. $CONNREMOTE->STRUCTURE_GENERATE_PARSE($arr);
  719. else DEBUG_S(3,'(TODO TESTOWO WYLACZONE DLA VIEW BO NIE DZIALAJA WIDOKI!!!!)',$arr,__FILE__,__FUNCTION__,__LINE__);
  720. unset($arr);unset($arr_);
  721. }
  722. }
  723. }
  724. // DEBUG_S(3,'ckh_obj from '.$h->SRC_TABLE_ID,$chk_obj);
  725. list($src_col_type,$src_col_default)=explode(';',$chk_obj->_col_types[$chk->DESC]);
  726. 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__);
  727. unset($chk_obj);
  728. //print_r($CONNREMOTE);
  729. //die();
  730. }
  731. } */
  732. // else echo "<br> id ".$h->SRC_TABLE_ID." nie jest w arrayu";
  733. /* if(in_array($h->SRC_TABLE_ID, array_keys($zasoby_to_import_arr))) {
  734. $zasobObj = ProcesHelper::getZasobTableInfo($h->DST_TABLE_ID);
  735. if ($zasobObj) {
  736. $tabele_to_import[$zasobObj->P__ID][$zasobObj->ID]=$zasobObj->DESC;
  737. DEBUG_S(-3,'Znaleziona tabela do importy',$zasobObj,__FILE__,__FUNCTION__,__LINE__);
  738. }
  739. }
  740. */
  741. //nie powinno siᅣ? podmieniac ID dla rekordow ze sztywno ustalanym P_ID
  742. //@2014-04-03 podmiana kolejnosci w in_array
  743. if( in_array($h->SRC_TABLE_ID,$CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW']) ) {
  744. 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__);
  745. continue ;
  746. }
  747. //@2014-04-03 podmiana kolejnosci w in_array
  748. if( in_array($h->DST_TABLE_ID,$CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW']) ) {
  749. 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__);
  750. continue ;
  751. }
  752. $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 '' ;";
  753. $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
  754. $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 '' ;";
  755. $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
  756. }
  757. if($h->REM_TABLE=='CRM_PROCES') {
  758. $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%' );";
  759. $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%' );";
  760. $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
  761. $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' ;";
  762. $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' ;";
  763. }
  764. // if($h->REM_TABLE=='CRM_TESTY_PYTANIA') {
  765. // $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' ; ";
  766. //
  767. // }
  768. if($h->REM_TABLE=='CRM_WSKAZNIK') {
  769. //$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' ;";
  770. $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%' ;";
  771. $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' ;";
  772. }
  773. // if($h->REM_TABLE=='CRM_IMAGE') {
  774. // $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' ;";
  775. // $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' ;";
  776. // }
  777. // echo "\n ".$sql;
  778. foreach($sql as $zap) {
  779. DEBUG_S(5,'Syncrhonizacja numerow ID ZAP '.$zap,'',__FILE__, __FUNCTION__, __LINE__);
  780. 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
  781. }
  782. }
  783. // ! wszystkie importy zaznaczamy z SYNC_SQIX_STATUS='SYSTEM_IMPORT_FIXED'
  784. $tables=array('CRM_WSKAZNIK','CRM_PROCES','CRM_LISTA_ZASOBOW','CRM_IMAGE','CRM_TESTY_PYTANIA');
  785. foreach($tables as $table) {
  786. $sql="update `".$table."` set `SYNC_SQIX_STATUS`='SYSTEM_IMPORT_FIXED' where `SYNC_SQIX_STATUS`='SYSTEM_IMPORT' ";
  787. DEBUG_S(-3,'Przemiania zsynchronizowanych rekordow aby drugi raz ich nie aktualizowac'.$sql,'',__FILE__, __FUNCTION__, __LINE__);
  788. 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
  789. }
  790. // ! wszystkie importy A_ADM_COMPANY oraz A_CLASSIFIED - nieustalone
  791. $tables=array('CRM_WSKAZNIK','CRM_PROCES','CRM_LISTA_ZASOBOW','CRM_TESTY_PYTANIA');
  792. foreach($tables as $table) {
  793. $sql="update `".$table."` set `A_ADM_COMPANY`='', A_CLASSIFIED='' where 1=1 ";
  794. DEBUG_S(-3,'8631# Wszystkie importy A_ADM_COMPANY oraz A_CLASSIFIED - nieustalone '.$sql,'',__FILE__, __FUNCTION__, __LINE__);
  795. 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
  796. }
  797. //synchronizacja struktur
  798. DEBUG_S(-3,'tabele_to_import',$tabele_to_import,__FILE__, __FUNCTION__, __LINE__);
  799. //importuje struktury
  800. // foreach($tabele_to_import as $id_bazy=>$tabele) {
  801. // //$db[$id_bazy]=DB::getDB($id_bazy);
  802. // $struct[$id_bazy]=$CONNLOCAL->STRUCTURE_GENERATE($tabele,null,null); //TODO id_bases_try_to_get_struct
  803. // }
  804. DEBUG_S(3,'struct - struktura do exporty',$struct,__FILE__, __FUNCTION__, __LINE__);
  805. // die('smierc');
  806. // $STRUCT_TABLE['CRM_PROCES']='PARENT_ID';
  807. // $STRUCT_TABLE['CRM_WSKAZNIK']='ID_PROCES'; //TODO PARENT ID
  808. // $STRUCT_TABLE['CRM_LISTA_ZASOBOW']='PARENT_ID';
  809. }//eof FUNC FROM_ZASOBY_TO_ZASOBY
  810. //funkcja do usuniecia zasobow ze zdublowanymi nazwami, najlepiej tych, ktore nie maja uzytych procesow
  811. function STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES($DUP_RESOURCE_PARENT_ID,$DUP_RESOURCE_DESC,$CONNREMOTE,$CONFIRM_SQL_UPDATE) {
  812. DEBUG_S(-3,'Bede czyscic tabele struktury dla ',array($DUP_RESOURCE_PARENT_ID,$DUP_RESOURCE_DESC,$CONNREMOTE,__FILE__, __FUNCTION__, __LINE__));
  813. //szukamy ID zasobow zduplikowanych
  814. $sql="select CZ.`ID` as CZ_ID ,CZ.`A_STATUS` as CZ_A_STATUS, CZ.`DESC` as CZ_DESC , CZ.`OPIS` as CZ_OPIS ,
  815. CP.`ID` as CP_ID, CP.`TYPE` as CP_TYPE, CP.`OPIS` as CP_OPIS , CP.`A_STATUS` as CP_A_STATUS ,
  816. 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
  817. from CRM_LISTA_ZASOBOW as CZ
  818. left join CRM_WSKAZNIK as CW on CW.`ID_ZASOB`=CZ.`ID` and CW.`A_STATUS`!='DELETED'
  819. left join CRM_PROCES as CP on CP.`ID`=CW.`ID_PROCES` and CP.`A_STATUS`!='DELETED'
  820. where CZ.`PARENT_ID`='".$DUP_RESOURCE_PARENT_ID."' and CZ.`DESC`='".$DUP_RESOURCE_DESC."'
  821. ";
  822. echo "\n ".$sql;
  823. $result=$CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  824. if(mysql_num_rows($result)==1) die1('Niewlasciwe wyzwolenie funkcji, jest tylko 1 zasob');
  825. while($h=mysql_fetch_object($result)) {
  826. //settype($h->CZ_ID, "integer");
  827. $ZASOB_TO_DEL[$h->CZ_ID]=0;
  828. if($h->CZ_A_STATUS=='DELETED') $ZASOB_TO_DEL[$h->CZ_ID]+=101; //status deleted to duzy motyw do usuniecia
  829. if(strlen($h->CZ_OPIS)<10) { $ZASOB_TO_DEL[$h->CZ_ID]+=11; //krotki opis
  830. echo " CZ_OPIS:: (".$h->CZ_OPIS.")";
  831. }
  832. if($h->CP_A_STATUS=='DELETED') $ZASOB_TO_DEL[$h->CZ_ID]+=102; //status deleted to duzy motyw do usuniecia
  833. if(strlen($h->CP_OPIS)<10) $ZASOB_TO_DEL[$h->CZ_ID]+=12; //krotki opis
  834. if($h->CW_A_STATUS=='DELETED') $ZASOB_TO_DEL[$h->CZ_ID]+=103; //status deleted to duzy motyw do usuniecia
  835. if(strlen($h->CW_OPIS_ZASOB)<10) $ZASOB_TO_DEL[$h->CZ_ID]+=13; //krotki opis
  836. //$ZASOB_TO_DEL[$h->CZ_ID]+=rand(0,30);
  837. }
  838. //$ZASOB_TO_DEL=array_flip($ZASOB_TO_DEL);
  839. print_r($ZASOB_TO_DEL);
  840. arsort($ZASOB_TO_DEL);
  841. print_r($ZASOB_TO_DEL);
  842. //kasujemy rekordy z bazy danych -> ustalamy status na DELETED i kasujemy PARENT_ID na NULL
  843. $max_count=count($ZASOB_TO_DEL)-1;
  844. $count=1;
  845. foreach($ZASOB_TO_DEL as $ID_ZASOBU=>$POINTS_TO_REM) {
  846. $sql="update CRM_LISTA_ZASOBOW set `PARENT_ID`=NULL, `A_STATUS`='DELETED' where `ID`='".$ID_ZASOBU."'";
  847. echo "\n".$sql;
  848. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  849. $count++;
  850. if($count>$max_count) break;
  851. }
  852. }
  853. // ! CREATE_ZASOBY_STRUCTURES_CONFIG
  854. if($SYNC_OPTIONS=='CREATE_ZASOBY_STRUCTURES_CONFIG') {//budowa struktur w bazie
  855. $TABLES_IMPORT=$CONNREMOTE->STRUCTURE_GENERATE($TABLES_STRUCTURE,null,$TABLES_STRUCTURE_DATA);
  856. // $CONNREMOTE->STRUCTURE_GENERATE_to_xsd($TABLES_IMPORT,$CONNREMOTE,'/tmp/schema'); //Generujemy XSD dla struktur
  857. // $TABLES_IMPORT=STRUCTURE_GENERATE($TABLES_STRUCTURE,$CONNREMOTE,$TABLES_STRUCTURE_DATA);
  858. // $TABLES_STRUCTURE_DATA
  859. $RETURN=serialize($TABLES_IMPORT);
  860. if (is_writable('config/.config_base_structure.php')) {
  861. $fp = fopen('config/.config_base_structure.php', 'w');
  862. fwrite($fp, $RETURN);
  863. fclose($fp);
  864. DEBUG_S(-3,'Zapisano aktualna strukture danych do config/.config_base_structure.php','',__FILE__,__FUNCTION__,__LINE__);
  865. //print_r($TABLES_IMPORT);
  866. //print_r($TABLES_IMPORT);
  867. } else {
  868. echo "\n\n\n config/.config_base_structure.php - nie jest do zapisu - zatem Zmienna do przekopiowania do konfiga config/".$config_base_structure." : \n";
  869. echo $RETURN;
  870. echo "\n";
  871. }
  872. // ! SYNC_ZASOBY_STRUCTURES_FROM_CONFIG
  873. } 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
  874. 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");
  875. $handle = fopen(APP_PATH_ROOT."/config/".$config_base_structure, "r");
  876. $config_base_structure_serialized = fread($handle, filesize(APP_PATH_ROOT."/config/".$config_base_structure));
  877. fclose($handle);
  878. //echo $config_base_structure_serialized;
  879. $config_base_structure_unserialized=unserialize($config_base_structure_serialized);
  880. //print_r($config_base_structure_unserialized['CRM_AUTH_PROFILE']);
  881. if($SYNC_OPTIONS=='SYNC_ZASOBY_STRUCTURES_FROM_CONFIG_WITHOUT_PROCEDURES_AND_VIEWS') $SKIP_OPTIONS=array('SKIP-PROCEDURE','SKIP-VIEW');
  882. DEBUG_S(5,'SKIP_OPTIONS,config_base_structure_unserialized',array($SKIP_OPTIONS,$config_base_structure_unserialized),__FILE__, __FUNCTION__, __LINE__) ;
  883. $CONNREMOTE->STRUCTURE_GENERATE_PARSE($config_base_structure_unserialized,$SKIP_OPTIONS); //@2014-08-14 TEST IT
  884. /*
  885. foreach($config_base_structure_unserialized as $TABLE=>$ARR_TABLE) { //dla kazdej tabeli
  886. set_time_limit(36000);
  887. //! if($TABLE<>'_CRM_PROCES_USER_STATS_wiev') continue; //trigger development
  888. //! try to sync __SCHEMA_FUNCTIONS__ARRAY__
  889. if($TABLE=='__SCHEMA_FUNCTIONS__ARRAY__') {
  890. DEBUG_S(-3,'Try to synchronize functions and procedures',$ARR_TABLE,__FILE__,__FUNCTION__,__LINE__);
  891. //BEGIN PROCEDURE
  892. $sql=" SHOW PROCEDURE STATUS; ;" ; //listujemy nasze procedury
  893. DEBUG_S(-3,'Looking for PROCEDURE ',$sql,__FILE__,__FUNCTION__,__LINE__);
  894. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  895. while($h=mysql_fetch_object($result)) {
  896. if($h->Db<>$CONNREMOTE->getDatabaseName()) continue;
  897. set_time_limit(36000);
  898. $sql_="show create PROCEDURE {$h->Name} ;" ;
  899. //echo $sql_;
  900. $result_=$CONNREMOTE->query($sql_) or die1('\nProblem z '.$sql_);
  901. while($h_=mysql_fetch_object($result_)) {
  902. $FIELDS_CHECKED['FOUNDS'][$h->Name]=$h_;
  903. if(!isset($ARR_TABLE['PROCEDURE'][$h->Name])) {
  904. DEBUG_S(-3,'We have some more functions - we will not delete them:'.$h->Name,null,__FILE__,__FUNCTION__,__LINE__);
  905. //$FIELDS_CHECKED['TO_DELETE'][$h->Name]=$h_;
  906. }
  907. }
  908. }
  909. DEBUG_S(-3,'Try to unserialize PROCEDURE and install to db:',$ARR_TABLE['PROCEDURE'],__FILE__,__FUNCTION__,__LINE__);
  910. foreach($ARR_TABLE['PROCEDURE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  911. if(!isset($FIELDS_CHECKED['FOUNDS'][$TRIGGER_INDEX])) { $FIELDS_CHECKED['TO_CREATE'][$TRIGGER_INDEX]=$TRIGGER_OBJECT;
  912. DEBUG_S(-3,'We have object to create '.$TRIGGER_INDEX,$TRIGGER_OBJECT,__FILE__,__FUNCTION__,__LINE__);
  913. }
  914. }
  915. //staramy sie zaktualizowac stare triggery, pod warunkiem, ze sie roznia
  916. foreach($FIELDS_CHECKED['FOUNDS'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  917. DEBUG_S(-3,'OBJ/OBJ for '.$TRIGGER_INDEX,array($TRIGGER_OBJECT->{'Create Procedure'},$ARR_TABLE['PROCEDURE'][$TRIGGER_INDEX]->{'Create Procedure'}),__FILE__, __FUNCTION__, __LINE__);
  918. if(isset($ARR_TABLE['PROCEDURE'][$TRIGGER_INDEX])) //we first try to find if this trigger exists or delete it
  919. if($TRIGGER_OBJECT->{'Create Procedure'}<>$ARR_TABLE['PROCEDURE'][$TRIGGER_INDEX]->{'Create Procedure'} ) {
  920. DEBUG_S(-3,"Data are different ({$TRIGGER_INDEX}). We add object to be created as new.",__FILE__, __FUNCTION__, __LINE__);
  921. $FIELDS_CHECKED['TO_CREATE'][$TRIGGER_INDEX]=$ARR_TABLE['PROCEDURE'][$TRIGGER_INDEX];
  922. $FIELDS_CHECKED['TO_DELETE'][$TRIGGER_INDEX]=true;
  923. }
  924. }
  925. if(isset($FIELDS_CHECKED['TO_DELETE'])) {
  926. DEBUG_S(-3,'We have some data to delete',$FIELDS_CHECKED['TO_DELETE'],__FILE__,__FUNCTION__,__LINE__);
  927. foreach($FIELDS_CHECKED['TO_DELETE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT ) {
  928. $sql="DROP PROCEDURE IF EXISTS `{$TRIGGER_INDEX}`; ";
  929. DEBUG_S(-3,' sql to delete '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  930. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  931. }
  932. }
  933. //tworzymy brakujace procedury
  934. foreach ($FIELDS_CHECKED['TO_CREATE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  935. $sql=$TRIGGER_OBJECT->{'Create Procedure'};
  936. DEBUG_S(-3,'Try to add new '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  937. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  938. }
  939. unset($FIELDS_CHECKED);
  940. //EOF PROCEDURE
  941. //BEGIN FUNCTION
  942. $sql=" SHOW FUNCTION STATUS ;" ; //listujemy nasze procedury
  943. DEBUG_S(-3,'Looking for FUNCTION ',$sql,__FILE__,__FUNCTION__,__LINE__);
  944. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  945. while($h=mysql_fetch_object($result)) {
  946. set_time_limit(36000);
  947. $sql_="show create FUNCTION {$h->Name} ;" ;
  948. //echo $sql_;
  949. $result_=$CONNREMOTE->query($sql_) or die1('\nProblem z '.$sql_);
  950. while($h_=mysql_fetch_object($result_)) {
  951. $FIELDS_CHECKED['FOUNDS'][$h->Name]=$h_;
  952. if(!isset($ARR_TABLE['FUNCTION'][$h->Name])) {
  953. DEBUG_S(-3,'We have some more functions - we will not delete them:'.$h->Name,null,__FILE__,__FUNCTION__,__LINE__);
  954. // $FIELDS_CHECKED['TO_DELETE'][$h->Name]=$h_;
  955. }
  956. }
  957. }
  958. DEBUG_S(-3,'Try to unserialize FUNCTION and install to db:',$ARR_TABLE['FUNCTION'],__FILE__,__FUNCTION__,__LINE__);
  959. foreach($ARR_TABLE['FUNCTION'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  960. if(!isset($FIELDS_CHECKED['FOUNDS'][$TRIGGER_INDEX])) { $FIELDS_CHECKED['TO_CREATE'][$TRIGGER_INDEX]=$TRIGGER_OBJECT;
  961. DEBUG_S(-3,'We have object to create '.$TRIGGER_INDEX,$TRIGGER_OBJECT,__FILE__,__FUNCTION__,__LINE__);
  962. }
  963. }
  964. //staramy sie zaktualizowac stare triggery, pod warunkiem, ze sie roznia
  965. foreach($FIELDS_CHECKED['FOUNDS'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  966. DEBUG_S(-3,'OBJ/OBJ for '.$TRIGGER_INDEX,array($TRIGGER_OBJECT->{'Create Function'},$ARR_TABLE['FUNCTION'][$TRIGGER_INDEX]->{'Create Function'}),__FILE__, __FUNCTION__, __LINE__);
  967. if(isset($ARR_TABLE['FUNCTION'][$TRIGGER_INDEX])) //we first try to find if this trigger exists or delete it
  968. if($TRIGGER_OBJECT->{'Create Function'}<>$ARR_TABLE['FUNCTION'][$TRIGGER_INDEX]->{'Create Function'} ) {
  969. DEBUG_S(-3,"Data are different ({$TRIGGER_INDEX}). We add object to be created as new.",__FILE__, __FUNCTION__, __LINE__);
  970. $FIELDS_CHECKED['TO_CREATE'][$TRIGGER_INDEX]=$ARR_TABLE['FUNCTION'][$TRIGGER_INDEX];
  971. $FIELDS_CHECKED['TO_DELETE'][$TRIGGER_INDEX]=true;
  972. }
  973. }
  974. if(isset($FIELDS_CHECKED['TO_DELETE'])) {
  975. DEBUG_S(-3,'We have some data to delete',$FIELDS_CHECKED['TO_DELETE'],__FILE__,__FUNCTION__,__LINE__);
  976. foreach($FIELDS_CHECKED['TO_DELETE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT ) {
  977. $sql="DROP FUNCTION IF EXISTS `{$TRIGGER_INDEX}`; ";
  978. DEBUG_S(-3,' sql to delete '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  979. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  980. }
  981. }
  982. //tworzymy brakujace procedury
  983. foreach ($FIELDS_CHECKED['TO_CREATE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  984. $sql=$TRIGGER_OBJECT->{'Create Function'};
  985. DEBUG_S(-3,'Try to add new '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  986. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  987. }
  988. unset($FIELDS_CHECKED);
  989. //EOF FUNCTION
  990. //die1('app in devel');
  991. continue; //no go to another table in loop
  992. } //eof
  993. //! detect if src table is TABLE or VIEW
  994. // foreach($TABLES as $TABLE ){
  995. $sql="show full tables like '".$TABLE."' ;" ;
  996. DEBUG_S(-3,'SQL:'.$CONNREMOTE->getDatabaseName(),$sql,__FILE__, __FUNCTION__, __LINE__) ;
  997. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  998. while($h=mysql_fetch_object($result)) {
  999. $FIELDS_CHECKED['Table_type']=$h->{'Table_type'};
  1000. }
  1001. if(mysql_num_rows($result)==0) {
  1002. // nie ma tabeli - trzeba zapisac
  1003. if($ARR_TABLE['Table_type']=='BASE TABLE') {
  1004. //DEBUG_S(-3,"\n BRAK TABELI dodajemy : ".$TABLE."!!!",null,__FILE__,__FUNCTION__,__LINE__);
  1005. $sql="create table ".$TABLE." ( ".$ARR_TABLE['FIELDS'][0]->Field." ".$ARR_TABLE['FIELDS'][0]->Type ; // ID int(11) NOT NULL AUTO_INCREMENT,
  1006. if($ARR_TABLE['FIELDS'][0]->Null=='NO') $sql.=" not null "; else $sql.=" null ";
  1007. //if($ARR_TABLE['FIELDS'][0]->Extra=='auto_increment') $sql.=" AUTO_INCREMENT "; else $sql.=" ";
  1008. $sql.=" ) DEFAULT CHARSET=latin2 ";
  1009. DEBUG_S(-3,"Brak tabeli: ".$TABLE." dodajemy sql:",$sql,__FILE__,__FUNCTION__,__LINE__) ;
  1010. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem z CREATE '.$sql);
  1011. if($TABLE=='CRM_LISTA_ZASOBOW') {
  1012. $sql=" alter table `".$TABLE."` AUTO_INCREMENT=1000 ";
  1013. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem z AUTO INCREMENT '.$sql);
  1014. }
  1015. } else if($ARR_TABLE['Table_type']=='VIEW') {
  1016. $sql=$ARR_TABLE['VIEW']->{'Create View'};
  1017. DEBUG_S(-3,"Brak widoku: ".$TABLE." dodajemy sql:",$sql,__FILE__,__FUNCTION__,__LINE__) ;
  1018. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem ze '.$sql);
  1019. }
  1020. } else {
  1021. //try to detect if types are the same
  1022. if($ARR_TABLE['Table_type']<>$FIELDS_CHECKED['Table_type']) die1('Todo: ERROR VIEW/TABLE different types ');
  1023. if($ARR_TABLE['Table_type']=='VIEW') {
  1024. if(isset($ARR_TABLE['VIEW'])) {
  1025. $sql_="show create view `{$TABLE}` ;" ;
  1026. echo $sql_;
  1027. $result_=$CONNREMOTE->query($sql_) or die1('\nProblem z '.$sql_);
  1028. while($h_=mysql_fetch_object($result_)) {
  1029. DEBUG_S(-3,"//! get current view info ".$TABLE." sql/res",array($sql_,$h_),__FILE__, __FUNCTION__, __LINE__);
  1030. $FIELDS_CHECKED['VIEW']=$h_;
  1031. }
  1032. //ereg_replace(, , )
  1033. if(strtolower($FIELDS_CHECKED['VIEW']->{'Create View'})<>strtolower($ARR_TABLE['VIEW']->{'Create View'})) {
  1034. $sql="drop view `{$TABLE}`";
  1035. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem ze '.$sql);
  1036. $sql_=$ARR_TABLE['VIEW']->{'Create View'};
  1037. 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__);
  1038. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql_) or die1('\nProblem ze '.$sql_);
  1039. }
  1040. }
  1041. }
  1042. }
  1043. //always create
  1044. if($ARR_TABLE['Table_type']=='BASE TABLE') {
  1045. set_time_limit(36000);
  1046. $sql=" describe `".$TABLE."` ;" ;
  1047. DEBUG_S(-3,'SQL:describe '.$TABLE,$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1048. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1049. $FIELDS_CHECKED=""; unset($FIELDS_CHECKED);
  1050. foreach($ARR_TABLE['FIELDS'] as $TSTIND=>$TST_VAL) { //tu robie tabelke do odhaczania z niej zmiennych
  1051. $FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'][$TST_VAL->Field]=1;
  1052. $FIELDS_CHECKED['FIELD_IN_CONFIG_THAT_EXISTS'][$TST_VAL->Field]=1;
  1053. }
  1054. DEBUG_S(-3,'FIELDS_CHECKED',$FIELDS_CHECKED,__FILE__, __FUNCTION__, __LINE__) ;
  1055. $var_passed=false;
  1056. while($h=mysql_fetch_object($result)) {
  1057. //tu sprawdzamy czy sa wszystkie kolumny i maja takie same typy
  1058. $FIELDS_CHECKED['FIELD_FROM_DB'][$h->Field]=1;
  1059. if(!isset($FIELDS_CHECKED['FIELD_IN_CONFIG_THAT_EXISTS'][$h->Field])) {
  1060. DEBUG_S(-3,'Za duzo o komorke '.$h->Field,$FIELDS_CHECKED,__FILE__, __FUNCTION__, __LINE__) ;
  1061. $FIELDS_CHECKED['FIELD_IN_CONFIG_THAT_NOT_EXISTS'][$h->Field]=1;
  1062. }
  1063. foreach($ARR_TABLE['FIELDS'] as $TSTIND=>$TST_VAL) { //tu sprawdzam czy kolumna jest i jaka
  1064. // echo "\n Tst ".$TST_VAL->Field." ==? ".$h->Field;
  1065. if($TST_VAL->Field==$h->Field) {
  1066. $FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB'][$h->Field]=1;
  1067. if(isset($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'][$h->Field])) //jezeli byla komorka ramowa
  1068. unset($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'][$h->Field]);
  1069. }
  1070. }
  1071. //$TABLES_IMPORT[$TABLE]['FIELDS']=$h;
  1072. }
  1073. 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__);
  1074. DEBUG_S(-3,'FIELDS_CHECKED',$FIELDS_CHECKED,__FILE__, __FUNCTION__, __LINE__) ;
  1075. //dodajemy brakujace komorki
  1076. if(count($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'])>0) {
  1077. foreach($FIELDS_CHECKED['FIELD_IN_CONFIG_TO_BE_PASSED'] as $FIELD_TO_ADD=>$VAL ){
  1078. set_time_limit(36000);
  1079. //echo "\n Trying to add column: ".$FIELD_TO_ADD;
  1080. if(isset($INDEX_OF_CONFIG_TABLE)) unset($INDEX_OF_CONFIG_TABLE);
  1081. foreach($ARR_TABLE['FIELDS'] as $TSTIND=>$TST_VAL) { //trzeba znalezc numer ID indeksu brakujacej komorki
  1082. if($TST_VAL->Field==$FIELD_TO_ADD) $INDEX_OF_CONFIG_TABLE=$TSTIND;
  1083. }
  1084. // $sql="create table ".$TABLE." ( ".$ARR_TABLE['FIELDS'][0]->Field." ".$ARR_TABLE['FIELDS'][0]->Type ; // ID int(11) NOT NULL AUTO_INCREMENT,
  1085. //if($ARR_TABLE['FIELDS'][0]->Extra=='auto_increment') $sql.=" AUTO_INCREMENT "; else $sql.=" ";
  1086. $sql="alter table `".$TABLE."` add `".$FIELD_TO_ADD."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ";
  1087. if(($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default)) {
  1088. if(($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default=='NULL')||($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default=='CURRENT_TIMESTAMP'))
  1089. $sql.=" DEFAULT ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default." ";// (".$INDEX_OF_CONFIG_TABLE.")";
  1090. else $sql.=" DEFAULT '".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default."' ";// (".$INDEX_OF_CONFIG_TABLE.")";
  1091. }
  1092. if($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Null=='NO') $sql.=" not null "; else $sql.=" null ";
  1093. $sql.=" ;";
  1094. echo "\n ".$sql;
  1095. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem z sql',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1096. }
  1097. } //eof dodajemy brakujace komorki
  1098. //Sprawdzamy czy sa zgodne typy komorek...
  1099. $sql=" describe `".$TABLE."` ;" ;
  1100. DEBUG_S(-3,'describe '.$TABLE,$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1101. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1102. while($h=mysql_fetch_object($result)) {
  1103. set_time_limit(36000);
  1104. $FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB_PROFILE'][$h->Field]=$h;
  1105. }
  1106. DEBUG_S(-3,'FIELDS_CHECKED',$FIELDS_CHECKED,__FILE__, __FUNCTION__, __LINE__) ;
  1107. foreach($FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB_PROFILE'] as $FIELD_TO_CHK=>$VAL) {
  1108. if(isset($INDEX_OF_CONFIG_TABLE)) unset($INDEX_OF_CONFIG_TABLE);
  1109. foreach($ARR_TABLE['FIELDS'] as $TSTIND=>$TST_VAL) { //trzeba znalezc numer ID indeksu brakujacej komorki
  1110. if($TST_VAL->Field==$FIELD_TO_CHK) $INDEX_OF_CONFIG_TABLE=$TSTIND;
  1111. }
  1112. if(isset($FIELDS_CHECKED['FIELD_IN_CONFIG_THAT_NOT_EXISTS'][$FIELD_TO_CHK])) continue; //jezeli komorki nie ma i jest tylko lokalnie - ignorujemy!
  1113. // to jakis glupi warunek ?
  1114. if(!isset($INDEX_OF_CONFIG_TABLE)) die1('Nie znaleziono indeksu w konfiguracji dla '.$TABLE.' i komorki '.$FIELD_TO_CHK);
  1115. // echo "\nsprawdzamy wszystkie wlasciwosci dla db ".$TABLE." ".$FIELD_TO_CHK." col ".$INDEX_OF_CONFIG_TABLE;
  1116. $CHK_TYPES_ARS=array('Type','Null','Default');
  1117. $sql="";
  1118. // echo "\n if ".$VAL->Type." =? ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type ;
  1119. if($VAL->Type!=$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type) {
  1120. //! aktualizujemy typy
  1121. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ; ";
  1122. if(strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'char(')&& strstr($VAL->Type, 'char(')){
  1123. $src_char_len=ereg_replace('[^0-9]', '',$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type );
  1124. $dst_char_len=ereg_replace('[^0-9]', '',$VAL->Type );
  1125. if($src_char_len>$dst_char_len) {
  1126. DEBUG_S(-3,'Aktualizacja rozszerzajaca zakres pola CHAR : CUR_CHAR_LEN ='.$src_char_len." and dest=".$dst_char_len ,$sql,__FILE__, __FUNCTION__, __LINE__);
  1127. 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);
  1128. } else {
  1129. DEBUG_S(-3,'celowe pominiecie - aktualizacja moze skasowac dane w bazie!!! :',$sql,__FILE__, __FUNCTION__, __LINE__);
  1130. // die1();
  1131. }
  1132. } else if(strstr($VAL->Type, 'enum(') && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'enum(' )) { //jezeli zmienia sie ENUM na inne ENUM
  1133. preg_match('/^enum\((.*)\)$/', $ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, $src_char_len);
  1134. preg_match('/^enum\((.*)\)$/', $VAL->Type, $dst_char_len);
  1135. $src_char_len=explode(',', $src_char_len[1]);$dst_char_len=explode(',', $dst_char_len[1]);
  1136. foreach($src_char_len as $var) {
  1137. if( !in_array($var, $dst_char_len)) $dst_char_len[]=$var;
  1138. }
  1139. $dst_char_len="enum(".implode(",", $dst_char_len).")";
  1140. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$dst_char_len." ; ";
  1141. 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__);
  1142. 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);
  1143. } else if(strstr($VAL->Type, 'set(') && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'set(' )) { //jezeli zmienia sie ENUM na inne ENUM
  1144. preg_match('/^set\((.*)\)$/', $ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, $src_char_len);
  1145. preg_match('/^set\((.*)\)$/', $VAL->Type, $dst_char_len);
  1146. $src_char_len=explode(',', $src_char_len[1]);$dst_char_len=explode(',', $dst_char_len[1]);
  1147. foreach($src_char_len as $var) {
  1148. if( !in_array($var, $dst_char_len)) $dst_char_len[]=$var;
  1149. }
  1150. $dst_char_len="set(".implode(",", $dst_char_len).")";
  1151. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$dst_char_len." ; ";
  1152. 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__);
  1153. 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);
  1154. } else if(strstr($VAL->Type, 'int(') && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'int(' )) {
  1155. preg_match('/^int\((.*)\)$/', $ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, $src_char_len);
  1156. preg_match('/^int\((.*)\)$/', $VAL->Type, $dst_char_len);
  1157. if($src_char_len[1]>$dst_char_len[1]) {
  1158. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ; ";
  1159. DEBUG_S(-3,'Aktualizacja rozszerzajaca zakres pola INT ma byc ='.$src_char_len[1]." byla dest=".$dst_char_len[1] ,$sql,__FILE__, __FUNCTION__, __LINE__);
  1160. // 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);
  1161. } else {
  1162. 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__);
  1163. }
  1164. } else if( ( strstr($VAL->Type, 'char(') || strstr($VAL->Type, 'varchar(') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'text' )
  1165. || ( strstr($VAL->Type, 'bigint(') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'longblob' )
  1166. || ( strstr($VAL->Type, 'mediumtext') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'longblob' )
  1167. || ( strstr($VAL->Type, 'decimal(42') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'decimal(41' )
  1168. || ( strstr($VAL->Type, 'decimal(43') ) && strstr($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type, 'decimal(41' )
  1169. ) {
  1170. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ; ";
  1171. DEBUG_S(-3,'Aktualizacja rozszerzajaca zakres pola varchar/char() do text()',$sql,__FILE__, __FUNCTION__, __LINE__);
  1172. 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);
  1173. // 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__);
  1174. } else {
  1175. 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__);
  1176. die1();
  1177. 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);
  1178. }
  1179. }
  1180. if($VAL->Null!=$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Null)
  1181. if($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Null=='YES') {
  1182. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." NULL ; ";
  1183. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1184. } else {
  1185. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." NOT NULL ; ";
  1186. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1187. }
  1188. if($VAL->Default!=$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default) {
  1189. if($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default=='CURRENT_TIMESTAMP')
  1190. $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)." ; ";
  1191. else if(empty($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Default))
  1192. $sql=" alter table `".$TABLE."` CHANGE `".$FIELD_TO_CHK."` `".$FIELD_TO_CHK."` ".$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Type." ; ";
  1193. 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."' ; ";
  1194. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1195. }
  1196. //autoincrement:
  1197. if(($VAL->Extra!=$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Extra)&&$ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE]->Extra=='auto_increment' ) {
  1198. //sprawdzmy czy nie ma w tabeli klucza z PRIMARY z ID
  1199. $sql="show keys from `".$TABLE."`";
  1200. $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1201. $TEST_IF_HAS_PRIMARY=false;
  1202. while($tst=mysql_fetch_object($result)) { //dla kazdego klucza
  1203. if($tst->Column_name==$FIELD_TO_CHK) //sprawdz czy jest klucz do tej kolumny
  1204. if($tst->Key_name=='PRIMARY') $TEST_IF_HAS_PRIMARY=true; //jezeli jest primary, to flagujemy
  1205. }
  1206. if($TEST_IF_HAS_PRIMARY==false) { //bedziemy dodawac primary key
  1207. $sql="ALTER TABLE `".$TABLE."` ADD PRIMARY KEY ( `".$FIELD_TO_CHK."` )";
  1208. $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1209. }
  1210. $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." ; ";
  1211. echo "\n SQL auto_increment ".$sql ;
  1212. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL ',$sql,__FILE__, __FUNCTION__, __LINE__) or DIE();
  1213. }
  1214. //foreach($ARR_TABLE['FIELDS'][$INDEX_OF_CONFIG_TABLE] as $TST_FIELD_IND=>$TST_FIELD_VAL) {
  1215. // echo "\n TST2 ".$TST_FIELD_IND." ?= ".$FIELDS_CHECKED['FIELD_FOUND_IN_REMOTE_DB_PROFILE'][$TST_FIELD_IND]->$TST_FIELD_IND;
  1216. //}
  1217. }
  1218. //print_r($FIELDS_CHECKED);
  1219. $sql=" show index from `".$TABLE."` ;" ;
  1220. echo "\n ".$sql;
  1221. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1222. while($h=mysql_fetch_object($result)) {
  1223. set_time_limit(36000);
  1224. $FIELDS_CHECKED['INDEX_FOUND_IN_TABLES'][$h->Key_name]=$h;
  1225. }
  1226. foreach($ARR_TABLE['INDEX'] as $FOUND_INDEX_NAME=>$FOUND_INDEX_ARR){
  1227. $FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES'][$FOUND_INDEX_NAME]=$FOUND_INDEX_ARR;
  1228. }
  1229. 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__);
  1230. //teraz wygaszam znalezione indeksy
  1231. foreach($ARR_TABLE['INDEX'] as $FOUND_INDEX_NAME=>$FOUND_INDEX_ARR){
  1232. echo "\n If jest ".$FOUND_INDEX_NAME;
  1233. if(isset($FIELDS_CHECKED['INDEX_FOUND_IN_TABLES'][$FOUND_INDEX_NAME]))
  1234. unset($FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES'][$FOUND_INDEX_NAME]);
  1235. }
  1236. //print_r($FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES']);
  1237. //brakujace klucze dodajemy
  1238. foreach($FIELDS_CHECKED['INDEX_TO_BE_FOUND_IN_TABLES'] as $FOUND_INDEX_NAME=>$FOUND_INDEX_ARR) {
  1239. if($FOUND_INDEX_NAME=='PRIMARY') {
  1240. $FOUND_INDEX_ARR->Column_name=str_replace('`','',$FOUND_INDEX_ARR->Column_name);
  1241. $sql="ALTER TABLE `".$TABLE."` ADD PRIMARY KEY ( `".$FOUND_INDEX_ARR->Column_name."` ) ;";
  1242. echo "\n 927: ".$sql;
  1243. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or print_r($FIELDS_CHECKED) && die1('\nProblem z '.$sql);
  1244. $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 ; ";
  1245. echo "\n ".$sql;
  1246. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or print_r($FIELDS_CHECKED) && die1('\nProblem z '.$sql);
  1247. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or print_r($FIELDS_CHECKED) && die1('\nProblem z '.$sql);
  1248. } else if($FOUND_INDEX_ARR->Non_unique==1) {
  1249. $sql="ALTER TABLE `".$TABLE."` ADD KEY `".$FOUND_INDEX_ARR->Key_name."` ( ".$FOUND_INDEX_ARR->Column_name." ) ;" ;
  1250. echo "\n ".$sql;
  1251. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1252. } else {
  1253. set_time_limit(36000);
  1254. //@2013-01-17 poprawka do kluczy bledu w stylu ALTER TABLE `IN7_PRODUKTY_CECHY` ADD UNIQUE `UNIK_CECHY_PRODUKTU` ( CECHA_ID, PRODUKT_ID , DESC ) ;
  1255. $CORRECT_INDEX_FOUNDKEY="";
  1256. if(!strstr($FOUND_INDEX_ARR->Column_name,'`')) {
  1257. $explode=explode(' ',$FOUND_INDEX_ARR->Column_name);
  1258. foreach($explode as $exploded) {
  1259. $exploded=str_replace(',','',$exploded); //wywalenie przecinkow
  1260. if((!strstr($exploded,' '))&&(strlen($exploded)>1))
  1261. if($CORRECT_INDEX_FOUNDKEY) $CORRECT_INDEX_FOUNDKEY.=" , `".$exploded."` ";
  1262. else $CORRECT_INDEX_FOUNDKEY.=" `".$exploded."` ";
  1263. }
  1264. } else $CORRECT_INDEX_FOUNDKEY=$FOUND_INDEX_ARR->Column_name;
  1265. // $CORRECT_INDEX_FOUNDKEY=$FOUND_INDEX_ARR->Column_name;
  1266. $sql="ALTER TABLE `".$TABLE."` ADD UNIQUE `".$FOUND_INDEX_ARR->Key_name."` ( ".$CORRECT_INDEX_FOUNDKEY." ) ;" ;
  1267. echo "\n ".$sql;
  1268. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1269. }
  1270. }
  1271. flush();
  1272. //print_r($FIELDS_CHECKED);
  1273. unset($FIELDS_CHECKED);
  1274. $sql=" show triggers like '".$TABLE."' ;" ; //listujemy nasze triggery z tej tabeli
  1275. DEBUG_S(-3,'Looking for triggers in '.$TABLE,$sql,__FILE__,__FUNCTION__,__LINE__);
  1276. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1277. while($h=mysql_fetch_object($result)) {
  1278. set_time_limit(36000);
  1279. $sql_="show create trigger {$h->Trigger} ;" ;
  1280. //echo $sql_;
  1281. $result_=$CONNREMOTE->query($sql_) or die1('\nProblem z '.$sql_);
  1282. while($h_=mysql_fetch_object($result_)) {
  1283. $FIELDS_CHECKED['TRIGGER_FOUNDS'][$h->Trigger]=$h_;
  1284. if(!isset($ARR_TABLE['TRIGGERS'][$h->Trigger])) $FIELDS_CHECKED['TRIGGER_TO_DELETE'][$h->Trigger]=$h_;
  1285. }
  1286. }
  1287. DEBUG_S(-3,'Try to unserialize trigger and install to db:',$ARR_TABLE['TRIGGERS'],__FILE__,__FUNCTION__,__LINE__);
  1288. //! try to synchronize triggers $TABLE=>$ARR_TABLE
  1289. foreach($ARR_TABLE['TRIGGERS'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  1290. if(!isset($FIELDS_CHECKED['TRIGGER_FOUNDS'][$TRIGGER_INDEX])) $FIELDS_CHECKED['TRIGGER_TO_CREATE'][$TRIGGER_INDEX]=$TRIGGER_OBJECT;
  1291. }
  1292. //staramy sie zaktualizowac stare triggery, pod warunkiem, ze sie roznia
  1293. foreach($FIELDS_CHECKED['TRIGGER_FOUNDS'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  1294. DEBUG_S(-3,'TRIGGER_OBJECT/$TRIGGER_OBJECT for '.$TRIGGER_INDEX,array($TRIGGER_OBJECT,$ARR_TABLE['TRIGGERS'][$TRIGGER_INDEX]),__FILE__, __FUNCTION__, __LINE__);
  1295. if(isset($ARR_TABLE['TRIGGERS'][$TRIGGER_INDEX])) //we first try to find if this trigger exists or delete it
  1296. if($TRIGGER_OBJECT->{'SQL Original Statement'}<>$ARR_TABLE['TRIGGERS'][$TRIGGER_INDEX]->{'SQL Original Statement'} ) {
  1297. DEBUG_S(-3,"Triggers are different ({$TRIGGER_INDEX}). We add object to be created as new.",__FILE__, __FUNCTION__, __LINE__);
  1298. $FIELDS_CHECKED['TRIGGER_TO_CREATE'][$TRIGGER_INDEX]=$ARR_TABLE['TRIGGERS'][$TRIGGER_INDEX];
  1299. $FIELDS_CHECKED['TRIGGER_TO_DELETE'][$TRIGGER_INDEX]=true;
  1300. }
  1301. }
  1302. if(isset($FIELDS_CHECKED['TRIGGER_TO_DELETE'])) {
  1303. DEBUG_S(-3,'We have some triggers to delete',$FIELDS_CHECKED['TRIGGER_TO_DELETE'],__FILE__,__FUNCTION__,__LINE__);
  1304. foreach($FIELDS_CHECKED['TRIGGER_TO_DELETE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT ) {
  1305. $sql="DROP TRIGGER IF EXISTS `{$TRIGGER_INDEX}`; ";
  1306. DEBUG_S(-3,' sql to delete trigger '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  1307. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1308. }
  1309. }
  1310. //tworzymy brakujace procedury
  1311. foreach ($FIELDS_CHECKED['TRIGGER_TO_CREATE'] as $TRIGGER_INDEX=>$TRIGGER_OBJECT) {
  1312. //$sql="DROP TRIGGER IF EXISTS `{$TRIGGER_INDEX}`; ";
  1313. //DEBUG_S(-3,'Delete old trigger '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  1314. //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();
  1315. //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();
  1316. $sql=$TRIGGER_OBJECT->{'SQL Original Statement'};
  1317. DEBUG_S(-3,'Try to add new trigger '.$TRIGGER_INDEX,$sql,__FILE__,__FUNCTION__,__LINE__);
  1318. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL:',$sql,__FILE__, __FUNCTION__, __LINE__) or die1();
  1319. }
  1320. }
  1321. //tu bedziemy dodawac wartosci insert :
  1322. $sql="select count(*) as ilosc from `".$TABLE."` ;" ;
  1323. DEBUG_S(-3,'SQL: licze czy cos jest w tabeli ',$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1324. $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1325. $ilosc=0;
  1326. //while($h=mysql_fetch_object($result)) {
  1327. // $ilosc=$h->ilosc;
  1328. //}
  1329. //if($ilosc>0) {
  1330. // DEBUG_S(-2,'Nie trzeba dodawac rekordow - juz jakies sa w tabeli: ilosc : ',$ilosc,__FILE__,__FUNCTION__,__LINE__);
  1331. // continue ;
  1332. //} else {
  1333. if(!empty($ARR_TABLE['VALUES']))
  1334. foreach($ARR_TABLE['VALUES'] as $ROW) {
  1335. $sql="insert ignore into `".$TABLE."` values ( ";
  1336. $vals="";
  1337. foreach($ROW as $FIELD=>$VAL) {
  1338. if(!$vals) $vals.="'".$VAL."'" ; else $vals.=" , '".$VAL."' ";
  1339. }
  1340. $sql.=$vals." ) ;";
  1341. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1342. DEBUG_S(-3,'Dodanie rekordu do tabeli ',$sql,__FILE__,__FUNCTION__,__LINE__);
  1343. }
  1344. //}
  1345. }
  1346. */
  1347. //}
  1348. } else if($SYNC_OPTIONS=='FROM_DATABASE_TO_ZASOBY') { //! FROM_DATABASE_TO_ZASOBY budowa struktur w bazie
  1349. // w tym miejscu wprowadzamy informacje odczytane ze struktur bazy danych do zasobow - czyli do tabeli z zasobami i cechami
  1350. if(!isset($DATABASE_ROOT_ZASOB_ID)) die1(' Nie podano glownego numeru ID zasobow, do ktorych ma byc doklejona struktura tabel');
  1351. $TABLES_READ_FROM_LOCALDB=array();
  1352. if(strstr($SYSTEM_PROFILE_STRING_IMPORT_EXPORT, '%')) {
  1353. $sql="show tables like '".$SYSTEM_PROFILE_STRING_IMPORT_EXPORT."' ;";
  1354. $result=$CONNLOCAL->query($sql) or die1(' Problem ze sql '.$sql);
  1355. } else {
  1356. $result=$CONNLOCAL->show_tables($SYSTEM_PROFILE_STRING_IMPORT_EXPORT);
  1357. }
  1358. while($h=$CONNLOCAL->fetch_array($result)) {
  1359. $TABLES_READ_FROM_LOCALDB[]=$h[0];
  1360. }
  1361. DEBUG_S(-3,'zapytanie',$sql,__FILE__,__FUNCTION__,__LINE__);
  1362. DEBUG_S(-3,'TABLES_READ_FROM_LOCALDB',$TABLES_READ_FROM_LOCALDB,__FILE__,__FUNCTION__,__LINE__);
  1363. $STRUCTURE_LOCAL=$CONNLOCAL->STRUCTURE_GENERATE($TABLES_READ_FROM_LOCALDB,null,null,array('with_view'));
  1364. // $STRUCTURE_LOCAL=STRUCTURE_GENERATE($TABLES_READ_FROM_LOCALDB,$CONNLOCAL);
  1365. DEBUG_S(-3,'Aktualizuje CRM_LISTA_ZASOBOW (COLUMN_DEFAULT etc... ) na podstawie STRUCTURE_LOCAL(STRUCTURE_GENERATE)',$STRUCTURE_LOCAL,__FILE__,__FUNCTION__,__LINE__);
  1366. foreach($STRUCTURE_LOCAL as $NAME=>$TBL_STRUC) {
  1367. if($NAME=='__SCHEMA_FUNCTIONS__ARRAY__') continue;
  1368. $zasobID=ProcesHelper::getZasobTableID($NAME);
  1369. if($zasobID) {
  1370. $sql_obj->TABLE_STRUCTURE=$CONNLOCAL->_(serialize($TBL_STRUC));
  1371. $sql_obj->ID=$zasobID;
  1372. DEBUG_S(-3,'zapisanie struktur dla calej tabeli w rekordzie zasobu tabeli',$sql_obj,__FILE__,__FUNCTION__,__LINE__);
  1373. if(!empty($CONFIRM_SQL_UPDATE)) $CONNLOCAL->UPDATE_OBJ('CRM_LISTA_ZASOBOW',$sql_obj);
  1374. foreach($TBL_STRUC['FIELDS'] as $FIELD) {
  1375. $sql="update CRM_LISTA_ZASOBOW set
  1376. `COLUMN_DEFAULT`='".$FIELD->Default."'
  1377. ,`IS_NULLABLE`=";
  1378. if($FIELD->Null=='NO') $sql.="0"; else $sql.="1";
  1379. $sql.=",`COLUMN_TYPE`='".$CONNLOCAL->_($FIELD->Type)."'
  1380. where PARENT_ID='".$zasobID."' and `DESC`='".$FIELD->Field."' ";
  1381. // echo "<br> \n SQL (".$NAME.") = ".$sql;
  1382. if(!empty($CONFIRM_SQL_UPDATE)) $CONNLOCAL->query($sql);
  1383. }
  1384. }
  1385. }
  1386. //1.szukamy numerow cech w drzewie cech dla Type,Null,Default .
  1387. //2.bierzemy szukamy tabeli w strukturze
  1388. //3.szukamy odpowiednich komorek w strukturze ( jak nie ma dodajemy )
  1389. //4.szukamy czy komorka ma dodane cechy ( jak nie ma dodajemy) ,
  1390. //4a. a jak ma to sprawdzamy czy sie zgadzaja
  1391. //4b. jak sie nie zgadzaja, to updatujemy
  1392. //1.
  1393. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `ID`='".$DATABASE_ROOT_ZASOB_ID."' and A_STATUS!='DELETED' ";
  1394. $result=$CONNREMOTE->query($sql);
  1395. if(mysql_num_rows($result)==0) {
  1396. die1("\n BLAD , nie ma w strukturze zasobow , zaproponowanego numeru zasobu [".$DATABASE_ROOT_ZASOB_ID."] , do dolaczenia struktury bazy danych !");
  1397. } else { //jest numer zasobu lecimy po tabelach
  1398. //wyszukujemy jakie numery tabel sa w strukturze w bazie
  1399. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `PARENT_ID`='".$DATABASE_ROOT_ZASOB_ID."' and `TYPE`='TABELA' ";
  1400. DEBUG_S(3,'SQL 389',$sql,__FILE__, __FUNCTION__, __LINE__);
  1401. $result=$CONNREMOTE->query($sql);
  1402. while($h=mysql_fetch_object($result)) {
  1403. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$h->DESC]=$h->ID;
  1404. if(isset($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM_COUNT'][$h->DESC]))
  1405. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM_COUNT'][$h->DESC]++; else $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM_COUNT'][$h->DESC]=1;
  1406. } //sql foreach
  1407. foreach($STRUCTURE_LOCAL as $LOCAL_TABLE_FOUND=>$LOCAL_TAB_ARR) {
  1408. $SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOCAL_TABLE_FOUND]=1;
  1409. }
  1410. //przeszukajmy tabele
  1411. foreach($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1412. if(isset($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOOK_FOR_TABLE])) {
  1413. echo "\n Znalazlem:".$LOOK_FOR_TABLE;
  1414. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1415. if($LOOK_FOR_TABLE<>'__SCHEMA_FUNCTIONS__ARRAY__') //@2014-04-24 zglaszal sie blad , chyba trzeba dac wyjatek
  1416. 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);
  1417. }
  1418. }
  1419. //teraz mamy tylko tych, co brakuje, trzeba dopisac
  1420. DEBUG_S(-3,'TABELE_DO_ZNALEZIENIA_W_REM',$SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'],__FILE__,__FUNCTION__,__LINE__);
  1421. foreach($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1422. $sql="INSERT INTO `CRM_LISTA_ZASOBOW` (`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS`,`SYNC_SQIX_STATUS`,`A_RECORD_CREATE_DATE` )
  1423. values ( '".$DATABASE_ROOT_ZASOB_ID."','TABELA','".$LOOK_FOR_TABLE."','WAITING','system-import-sync-db-sqix',now() )";
  1424. DEBUG_S(-3,'SQL 413',$sql,__FILE__, __FUNCTION__, __LINE__);
  1425. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1426. if($CONNREMOTE->insert_id()>0) { //usuwamy z poszukiwania
  1427. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1428. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOOK_FOR_TABLE]=$CONNREMOTE->insert_id();
  1429. }
  1430. }
  1431. //szukamy czy sa w tabeli CECH parametry dla Type,Null,Default TODO to trzeba dac do konfigu?
  1432. $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
  1433. DEBUG_S(-3,'SQL 425',$sql,__FILE__, __FUNCTION__, __LINE__);
  1434. $result=$CONNREMOTE->query($sql);
  1435. if(mysql_num_rows($result)==0) { //trzeba dodac glowne zagniezdzenie
  1436. $sql="insert into `IN7_CECHY` (`PARENT_ID`,`ID`,`A_STATUS`,`TYPE`,`VALUE`,`DESC_ABLE` ,`TYPE_SPECIAL`) values
  1437. ('0','','WAITING','DATABASE_OPTIONS','DATABASE_OPTIONS','N','STANDARD' )";
  1438. DEBUG_S(-3,'SQL 430',$sql,__FILE__, __FUNCTION__, __LINE__);
  1439. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  1440. $DRZEWO_CECH['KONFIG_SYSTEMU_SE_ROOT']=$CONNREMOTE->insert_id();
  1441. } else { //znalezlismy cos
  1442. list($DRZEWO_CECH['KONFIG_SYSTEMU_SE_ROOT'])=mysql_fetch_array($result);
  1443. }
  1444. //szukamy podparametrow
  1445. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1446. foreach($VVALUE as $TYPE=>$VALUE) {
  1447. $sql="select `ID`,`A_STATUS`,`TYPE`,`VALUE` from `IN7_CECHY` where `VALUE`='".$VALUE."' ; ";
  1448. DEBUG_S(-3,'SQL 441',$sql,__FILE__, __FUNCTION__, __LINE__);
  1449. $result=$CONNREMOTE->query($sql) or die1('problem ze sql 704 '.$sql);
  1450. if(mysql_num_rows($result)==0) { //trzeba dodac podrzedne cechy
  1451. $sql="insert into `IN7_CECHY` (`PARENT_ID`,`ID`,`A_STATUS`,`TYPE`,`VALUE`,`DESC_ABLE` ,`TYPE_SPECIAL` , `TYPE_SPECIAL_PARAM`) values
  1452. ('".$DRZEWO_CECH['KONFIG_SYSTEMU_SE_ROOT']."','','WAITING','".$VALUE."','".$VALUE."','Y','STANDARD','".$TYPE."' )";
  1453. DEBUG_S(-3,'SQL 446',$sql,__FILE__, __FUNCTION__, __LINE__);
  1454. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('problem ze sql 709 '.$sql);
  1455. $DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]=$CONNREMOTE->insert_id();
  1456. } else { //znalezlismy ID tech cech
  1457. list($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE])=mysql_fetch_array($result);
  1458. }
  1459. if($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]<1) {
  1460. 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__);
  1461. die1('');
  1462. }
  1463. }
  1464. }
  1465. //3. teraz sprawdzamy jakie cechy sa opisane w zasobach/cechach dla naszych tabel/komorek
  1466. foreach($STRUCTURE_LOCAL as $LOCAL_TABLE_FOUND=>$LOCAL_TAB_ARR) { //jedziemy po zrodlowych tabelach
  1467. //wyszukujemy jakie numery komorek sa w strukturze w bazie
  1468. flush();
  1469. $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' ";
  1470. DEBUG_S(-3,'wyszukujemy jakie numery komorek sa w strukturze w bazie ',array($LOCAL_TABLE_FOUND,$sql),__FILE__, __FUNCTION__, __LINE__);
  1471. $result=$CONNREMOTE->query($sql); //tu wyswietlamy komorki znalezione w bazie zasobow dla tego wezla
  1472. //if(isset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'])) unset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT']);
  1473. if(isset($SYNC_463)) unset($SYNC_463);
  1474. while($h=mysql_fetch_object($result)) {
  1475. $SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$h->DESC]=$h->ID;
  1476. 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;
  1477. }
  1478. foreach($STRUCTURE_LOCAL[$LOCAL_TABLE_FOUND]['FIELDS'] as $ID_FIELD=>$ID_FIELD_VAL) {
  1479. $SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'][$ID_FIELD_VAL->Field]=1;
  1480. }
  1481. //przeszukajmy tabele
  1482. foreach($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1483. if(isset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$LOOK_FOR_TABLE])) {
  1484. echo "\n Znalazlem:".$LOOK_FOR_TABLE;
  1485. unset($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1486. if($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$LOOK_FOR_TABLE]>1) {
  1487. //Usuwamy nadmiarowe definicje w zasobach
  1488. echo "\n Znalazlem wiecej niz 1 zasob w tabeli:".$LOOK_FOR_TABLE." ilosc:".$SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$LOOK_FOR_TABLE];
  1489. STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOCAL_TABLE_FOUND],$LOOK_FOR_TABLE,$CONNREMOTE,$CONFIRM_SQL_UPDATE);
  1490. $STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES_HAPPEN=true;
  1491. }
  1492. }
  1493. }
  1494. if(isset($STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES_HAPPEN)) { //jezeli wydarzylo zdublowanie danych, trzeba powtorzyc wyzwolenie funkcji szukania danych wlasciwych ID
  1495. unset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM']); //flushujemy tabele
  1496. $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' ";
  1497. DEBUG_S(-3,'490 : STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES_HAPPEN flushujemy tabele ',array($LOCAL_TABLE_FOUND,$sql),__FILE__, __FUNCTION__, __LINE__);
  1498. $result=$CONNREMOTE->query($sql); //tu wyswietlamy komorki znalezione w bazie zasobow dla tego wezla
  1499. while($h=mysql_fetch_object($result)) {
  1500. $SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$h->DESC]=$h->ID;
  1501. }
  1502. unset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'][$h->DESC]);
  1503. unset($STRUCTURE_SYNC_REMOVE_DUP_RESOURCE_NAMES_HAPPEN);
  1504. }
  1505. //to teraz dla brakujacych robimy inserty
  1506. foreach($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1507. $DESC_PL="";
  1508. $OPIS="";
  1509. if($LOOK_FOR_TABLE=='ID') {
  1510. $DESC_PL="Id";
  1511. $OPIS="Numer unikalny rekordu w tabeli, dodawany automatycznie przy dodawaniu nowego rekordu (mozna traktowac jak l.p.)";
  1512. } else if($LOOK_FOR_TABLE=='A_CLASSIFIED') {
  1513. $DESC_PL="Odczyt<br>dla";
  1514. $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";
  1515. }else if($LOOK_FOR_TABLE=='A_ADM_COMPANY') {
  1516. $DESC_PL="zapis<br>dla";
  1517. $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";
  1518. }else if($LOOK_FOR_TABLE=='A_STATUS') {
  1519. $DESC_PL="status";
  1520. $OPIS="Szczegolowy opis statusu, czesto status rekordu ma okreslone znaczenie biznesowe. W tym polu warto dodawac adnotacje na temat danego rekordu i jego statusu";
  1521. }else if($LOOK_FOR_TABLE=='A_STATUS_INFO') {
  1522. $DESC_PL="opis<br>status";
  1523. $OPIS="Szczegolowy opis statusu, czesto status rekordu ma okreslone znaczenie biznesowe. W tym polu warto dodawac adnotacje na temat danego rekordu i jego statusu";
  1524. }else if($LOOK_FOR_TABLE=='A_PROBLEM_DATE') {
  1525. $DESC_PL="data<br>probl.";
  1526. $OPIS="W przypadku checi dodania na rekordzie problemu nalezy wprowadzic tutaj date wystapienia problemu. Ulatwia to sledzenie problemow po datach. ";
  1527. }else if($LOOK_FOR_TABLE=='A_PROBLEM_DESC') {
  1528. $DESC_PL="opis<br>probl.";
  1529. $OPIS="W tym polu należy opisac szczegolowo problem jaki zachodzi na danym rekordzie. Sugeruje sie aby zapisac sugerowany sposob jego rozwiazania.";
  1530. } else if($LOOK_FOR_TABLE=='A_PROBLEM') {
  1531. $DESC_PL="problem?";
  1532. $OPIS="To pole jest specjalnie traktowane przez system i oznacza sie w nim, czy na danym rekordzie istnieje jakis problem. ";
  1533. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_TYPE') {
  1534. $DESC_PL="spotk.<br>typ";
  1535. $OPIS="W tym polu zaznacza sie typ spotkania: Typ uzgodnienia : ARRANGED = Uzgodniono termin, TO_ARRANGE = Do uzgodnienia termin, RELATE = Zależne ";
  1536. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_INFO') {
  1537. $DESC_PL="Notatki<br>spotk.";
  1538. $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.";
  1539. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_PERIOD') {
  1540. $DESC_PL="spotk.<br>dł.";
  1541. $OPIS="Długość oczekiwanego spotkania w minutach. Przydatne do wstępnego ocenienia czasochłonności do wykonania zalecenia/uwag z adnotacji.";
  1542. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_USER') {
  1543. $DESC_PL="osoba<br>odp.";
  1544. $OPIS="Osoba odpowiedzialna za załatwienie danego rekordu. UWAGA ta osoba otrzymuje także prawo zapisu do rekordu, niezależnie od grupy rekordu.";
  1545. }else if($LOOK_FOR_TABLE=='L_APPOITMENT_DATE') {
  1546. $DESC_PL="termin<br>przyp.";
  1547. $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.";
  1548. }else if($LOOK_FOR_TABLE=='A_RECORD_UPDATE_AUTHOR') {
  1549. $DESC_PL="kto<br>aktual.";
  1550. $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.";
  1551. }else if($LOOK_FOR_TABLE=='A_RECORD_UPDATE_DATE') {
  1552. $DESC_PL="data<br>akt";
  1553. $OPIS="Ostatnia data aktualizacji rekordu - pole aktualizowane automatycznie przy każdej aktualizacji rekordu ";
  1554. }else if($LOOK_FOR_TABLE=='A_RECORD_CREATE_AUTHOR') {
  1555. $DESC_PL="autor";
  1556. $OPIS="Kto utworzył dany rekord - pole jest ustawiane automatycznie przy wstawianiu rekordu do tabeli";
  1557. }else if($LOOK_FOR_TABLE=='A_RECORD_CREATE_DATE') {
  1558. $DESC_PL="data<br>utw.";
  1559. $OPIS="Ostatnia data stworzenia rekordu - pole aktualizowane automatycznie jeden raz, podczas tworzenia rekordu ";
  1560. }else if($LOOK_FOR_TABLE=='ID_KORESP_OFFER') {
  1561. $DESC_PL="oferta?<br>utw.";
  1562. $OPIS="Oznaczenie, jaka oferte otrzymal dany obiekt przestrzenny - z jaka oferta wykonawcza jest on powiazany ";
  1563. }else if($LOOK_FOR_TABLE=='WORK_PLAN_START') {
  1564. $DESC_PL="plan<br>start";
  1565. $OPIS="Data planowanego rozpoczęcia prac dla danego elementu";
  1566. }else if($LOOK_FOR_TABLE=='WORK_PLAN_FINISH') {
  1567. $DESC_PL="plan<br>ukoncz.";
  1568. $OPIS="Data planowanego zakonczenia prac dla danego elementu ";
  1569. }else if($LOOK_FOR_TABLE=='T_WORKPOINTS_TIME_HOURS') {
  1570. $DESC_PL="dl.<br>prac[h]";
  1571. $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ść.";
  1572. }
  1573. $sql="INSERT INTO `CRM_LISTA_ZASOBOW` (`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS`,`SYNC_SQIX_STATUS`,`A_RECORD_CREATE_DATE`,`DESC_PL`,`OPIS` )
  1574. 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."' )";
  1575. DEBUG_S(-3,'dodaje do zasobow komorke tabeli '.$LOOK_FOR_TABLE,array($sql,$LOCAL_TABLE_FOUND,$SYNC_279,$SYNC_463),__FILE__, __FUNCTION__, __LINE__);
  1576. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1577. if($CONNREMOTE->insert_id()>0) { //usuwamy z poszukiwania
  1578. unset($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1579. $SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$LOOK_FOR_TABLE]=$CONNREMOTE->insert_id();
  1580. }
  1581. }
  1582. //teraz synchronizacja cech do bazy - cech dotyczacych tych komorek
  1583. foreach($LOCAL_TAB_ARR['FIELDS'] as $ID_FIELD=>$ID_FIELD_VAL ) {
  1584. //tu powinnismy robin foreach $CECHY_POSZUKIWANE - aby przeleciec wszystkie cechy komorki z tabeli
  1585. $NUMER_ID_TABELI_Z_BAZY=$SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$ID_FIELD_VAL->Field];
  1586. if(!isset($NUMER_ID_TABELI_Z_BAZY)) {
  1587. 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__);
  1588. die1();
  1589. }
  1590. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1591. foreach($VVALUE as $TYPE=>$VALUE) {
  1592. //sprawdzamy zgodnosc oczekiwanego typu lokalnego z parametrami w konfigu
  1593. // echo "\n Sprawdzam zgodnosc struktur: ".key($ID_FIELD_VAL)." oraz ".$TYPE ;
  1594. if(key($ID_FIELD_VAL)!=$TYPE) continue;
  1595. else DEBUG_S(-3,"--- dalej Sprawdzam zgodnosc struktur:".array(key($ID_FIELD_VAL),$TYPE),__FILE__, __FUNCTION__, __LINE__);
  1596. //SZUKAMY CO JEST W CECHACH
  1597. $sql="select `ID`,`A_STATUS`,`CECHA_ID`,`PRODUKT_ID`,`DESC` from `IN7_PRODUKTY_CECHY` where
  1598. `A_STATUS`!='DELETED' and `CECHA_ID`='".$DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]."' and
  1599. `PRODUKT_ID`='".$NUMER_ID_TABELI_Z_BAZY."' ";
  1600. DEBUG_S(-3,'Szukamy co jest w cechach',$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1601. //SPRAWDZAMY Z TYM CO POWINNO BYC W BAZIE
  1602. $result=$CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  1603. $ZNALEZIONO_W_BAZIE_CECHE=false;
  1604. while($h=mysql_fetch_object($result)) {
  1605. $ZNALEZIONO_W_BAZIE_CECHE=true;
  1606. if(addslashes($ID_FIELD_VAL->$TYPE)==$h->DESC) {
  1607. DEBUG_S(-3,'\n Zgodnosc cechy ',$h->DESC,__FILE__, __FUNCTION__, __LINE__);
  1608. break; //nie robimy dalej tego foreach, bo jest zgodnosc tej cechy?
  1609. } else {
  1610. //JEZELI JEST COS NIE TAK - UPDATUJEMY TE ROZNICE - WYSWIETLAMY ERRORY else
  1611. $sql="delete from IN7_PRODUKTY_CECHY where ID='".$h->ID."' limit 1 ";
  1612. DEBUG_S(-3,"\n Brak zgodnosci w sprawie cechy ".$h->DESC." ".$ID_FIELD_VAL->$TYPE."!=".$h->DESC,$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1613. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1('problem ze sql '.$sql);
  1614. }
  1615. }
  1616. //else DODAJEMY OPISY CECH DO BAZY DANYCH
  1617. if(!($ZNALEZIONO_W_BAZIE_CECHE)) {
  1618. $sql="insert into `IN7_PRODUKTY_CECHY` (`A_STATUS`,`CECHA_ID`,`PRODUKT_ID`,`DESC` ,`SYNC_SQIX_STATUS`,`A_RECORD_CREATE_DATE` ) values
  1619. ('NORMAL','".$DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]."','".$NUMER_ID_TABELI_Z_BAZY."',
  1620. '".addslashes($ID_FIELD_VAL->$TYPE)."' ,'system-import-sync-db-sqix',now() ) ";
  1621. DEBUG_S(-3,'Dodajemy opisy cech do bazy danych',$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1622. 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);
  1623. }
  1624. }
  1625. }
  1626. }
  1627. DEBUG_S(-3,"ZNALEZIONO_KOMORKI_W_BAZIE_REM",$SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM'],__FILE__, __FUNCTION__, __LINE__) ;
  1628. DEBUG_S(-3,"KOMORKI_DO_ZNALEZIENIA_W_REM",$SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM'],__FILE__, __FUNCTION__, __LINE__) ;
  1629. unset($SYNC_463['ZNALEZIONO_KOMORKI_W_BAZIE_REM']);
  1630. unset($SYNC_463['KOMORKI_DO_ZNALEZIENIA_W_REM']);
  1631. }
  1632. print_r($DRZEWO_CECH);
  1633. print_r($SYNC_279);
  1634. //unset($SYNC_279);
  1635. }
  1636. } //eof if($SYNC_OPTIONS=='FROM_DATABASE_TO_ZASOBY') {//budowa struktur w bazie
  1637. else if($SYNC_OPTIONS=='CREATE_ZASOBY_DATABASE_DESC') {
  1638. // ! CREATE_ZASOBY_DATABASE_DESC
  1639. //@2013-01-18: sqix: dobudowanie brakujacych zasobow do systemu dotyczacych samego systemu:
  1640. $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
  1641. DEBUG_S(-3,'sql do znalezienia czy nie ma zasobow :',$sql,__FILE__,__FUNCTION__,__LINE__);
  1642. $res=$CONNREMOTE->query($sql);
  1643. while($h=mysql_fetch_object($res)) {
  1644. $ID_ZASOBU_SYSTEMU_SE=$h->ID;
  1645. }
  1646. 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__);
  1647. else {
  1648. DEBUG_S(-3,"Nie ma zasobu dotyczacego systemu SE w zasobach, zatem dodamy go nizej :::",$ID_ZASOBU_SYSTEMU_SE,__FILE__,__FUNCTION__,__LINE__);
  1649. $cnf=Config::getConfFile('default_db');
  1650. $sql_arr=array("insert into CRM_LISTA_ZASOBOW (`PARENT_ID`,`TYPE`,`DESC`,`OPIS`) values ('0','SERWER','".$_SERVER['SERVER_NAME']."','podstawowy serwer obsglugujacy system SE');",
  1651. "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');");
  1652. foreach($sql_arr as $sql) {
  1653. $sql=str_replace('%LAST_INSERT_ID%',$last_insert_id,$sql);
  1654. DEBUG_S(-2,'zapytanie SQL dodajace zasoby ',$sql,__FILE__,__FUNCTION__,__LINE__);
  1655. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql);
  1656. $last_insert_id=$CONNREMOTE->insert_id();
  1657. echo "<br>LAST insert ID to ".$last_insert_id;
  1658. }
  1659. foreach($CRM_IMPORT_TRANSLATE['CRM_LISTA_ZASOBOW'] as $LCL=>$RMT) {
  1660. $sql="insert into CRM_IMPORT_TRANSLATE (REM_TABLE,SRC_TABLE_ID,DST_TABLE_ID) values ('CRM_LISTA_ZASOBOW','".$LCL."','".$RMT."')";
  1661. DEBUG_S(-2,'zapytanie SQL dodajace CRM_IMPORT_TRANSLATE ',$sql,__FILE__,__FUNCTION__,__LINE__);
  1662. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql);
  1663. }
  1664. $last_insert_id=$CONNREMOTE->insert_id();
  1665. 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__);
  1666. }
  1667. }
  1668. else if($SYNC_OPTIONS=='FROM_ZASOBY_TO_DATABASE') {//budowa struktur w bazie
  1669. // w tym miejscu wprowadzamy informacje odczytane ze struktur bazy danych do zasobow - czyli do tabeli z zasobami i cechami
  1670. if(!isset($DATABASE_ROOT_ZASOB_ID)) die1(' Nie podano glownego numeru ID zasobow, do ktorych ma byc doklejona struktura tabel');
  1671. $sql="show tables like '%' ;";
  1672. $result=$CONNLOCAL->query($sql) or die1(' Problem ze sql '.$sql);
  1673. $TABLES_READ_FROM_LOCALDB=array();
  1674. while($h=mysql_fetch_array($result)) {
  1675. $TABLES_READ_FROM_LOCALDB[]=$h[0];
  1676. //print_r($h);
  1677. }
  1678. $STRUCTURE_LOCAL=$CONNREMOTE->STRUCTURE_GENERATE($TABLES_READ_FROM_LOCALDB);
  1679. //$STRUCTURE_LOCAL=STRUCTURE_GENERATE($TABLES_READ_FROM_LOCALDB,$CONNREMOTE);
  1680. //print_r($STRUCTURE_LOCAL);
  1681. //1.szukamy numerow cech w drzewie cech dla Type,Null,Default .
  1682. //2.bierzemy szukamy tabeli w strukturze
  1683. //3.szukamy odpowiednich komorek w strukturze ( jak nie ma dodajemy )
  1684. //4.szukamy czy komorka ma dodane cechy ( jak nie ma dodajemy) ,
  1685. //4a. a jak ma to sprawdzamy czy sie zgadzaja
  1686. //4b. jak sie nie zgadzaja, to updatujemy
  1687. //1.
  1688. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `ID`='".$DATABASE_ROOT_ZASOB_ID."' and A_STATUS!='DELETED' ";
  1689. $result=$CONNLOCAL->query($sql);
  1690. if(mysql_num_rows($result)==0) {
  1691. die1("\n BLAD , nie ma w strukturze zasobow , zaproponowanego numeru zasobu [".$DATABASE_ROOT_ZASOB_ID."] , do dolaczenia struktury bazy danych !");
  1692. } else { //jest numer zasobu lecimy po tabelach
  1693. //wyszukujemy jakie numery tabel sa w strukturze w bazie
  1694. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `PARENT_ID`='".$DATABASE_ROOT_ZASOB_ID."' and `TYPE`='TABELA' ";
  1695. $result=$CONNLOCAL->query($sql);
  1696. while($h=mysql_fetch_object($result)) {
  1697. $SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$h->DESC]=$h->ID;
  1698. $SYNC_279['TABELE_DO_SPRAWDZENIA_W_REM'][$h->DESC]=$h->ID;
  1699. } //sql foreach
  1700. foreach($STRUCTURE_LOCAL as $LOCAL_TABLE_FOUND=>$LOCAL_TAB_ARR) {
  1701. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOCAL_TABLE_FOUND]=1;
  1702. }
  1703. //przeszukajmy tabele
  1704. foreach($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1705. if(isset($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOOK_FOR_TABLE])) {
  1706. echo "\n Znalazlem:".$LOOK_FOR_TABLE;
  1707. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1708. }
  1709. }
  1710. //teraz mamy tylko tych, co brakuje, trzeba dopisac
  1711. foreach($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1712. $sql="CREATE TABLE `".$LOOK_FOR_TABLE."` ( ID int(11)) DEFAULT CHARSET=latin2 " ;
  1713. echo "\n ".$sql;
  1714. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or die1('\nProblem z '.$sql);
  1715. if($CONNREMOTE->insert_id()>0) { //usuwamy z poszukiwania
  1716. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1717. $SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM'][$LOOK_FOR_TABLE]=$CONNREMOTE->insert_id();
  1718. }
  1719. }
  1720. //szukamy czy sa w tabeli CECH parametry dla Type,Null,Default TODO to trzeba dac do konfigu?
  1721. $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
  1722. $result=$CONNLOCAL->query($sql);
  1723. if(mysql_num_rows($result)==0)
  1724. die1('Brak oczekiwanej definicji w systemie zasobow bazy danych TYPE=DATABASE_OPTIONS !!! ');
  1725. else { //znalezlismy cos
  1726. list($DRZEWO_CECH['KONFIG_SYSTEMU_SE_ROOT'])=mysql_fetch_array($result);
  1727. }
  1728. //szukamy podparametrow
  1729. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1730. foreach($VVALUE as $TYPE=>$VALUE) {
  1731. $sql="select `ID`,`A_STATUS`,`TYPE`,`VALUE` from `IN7_CECHY` where `TYPE`='".$VALUE."' ; ";
  1732. echo "\n ".$sql;
  1733. $result=$CONNLOCAL->query($sql) or die1('problem ze sql '.$sql);
  1734. if(mysql_num_rows($result)==0)
  1735. die1('Brak oczekiwanej definicji w systemie zasobow bazy danych TYPE='.$VALUE.' !!! ');
  1736. else { //znalezlismy ID tech cech
  1737. list($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE])=mysql_fetch_array($result);
  1738. }
  1739. if($DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]<1) {
  1740. 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__);
  1741. die1('');
  1742. }
  1743. }
  1744. }
  1745. //3. teraz sprawdzamy jakie cechy sa opisane w zasobach/cechach dla naszych tabel/komorek
  1746. foreach($SYNC_279['TABELE_DO_SPRAWDZENIA_W_REM'] as $LOCAL_TABLE_FOUND=>$LOCAL_TAB_ARR) { //jedziemy po zrodlowych tabelach
  1747. //wyszukujemy jakie numery komorek sa w strukturze w bazie
  1748. flush();
  1749. $sql="select `ID`,`PARENT_ID`,`TYPE`,`DESC`,`A_STATUS` from `CRM_LISTA_ZASOBOW` where `PARENT_ID`='".$LOCAL_TAB_ARR."' and `TYPE`='KOMORKA' ";
  1750. echo "\n".$LOCAL_TABLE_FOUND.":".$sql;
  1751. $result=$CONNLOCAL->query($sql); //tu wyswietlamy komorki znalezione w bazie zasobow dla tego wezla
  1752. //if(isset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT'])) unset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM_COUNT']);
  1753. while($h=mysql_fetch_object($result)) {
  1754. $SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'][$h->DESC]=$h->ID;
  1755. $SYNC_279['KOMORKI_DO_SPRAWDZENIA_W_REM'][$h->DESC]=$h->ID;
  1756. echo ",".$h->DESC."=".$h->ID;
  1757. }
  1758. foreach($STRUCTURE_LOCAL[$LOCAL_TABLE_FOUND]['FIELDS'] as $ID_FIELD=>$ID_FIELD_VAL) {
  1759. $SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$ID_FIELD_VAL->Field]=1;
  1760. }
  1761. //przeszukajmy tabele
  1762. foreach($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1763. if(isset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$LOOK_FOR_TABLE])) {
  1764. echo "\n Znalazlem:".$LOOK_FOR_TABLE;
  1765. unset($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1766. }
  1767. }
  1768. //to teraz dla brakujacych robimy inserty
  1769. foreach($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'] as $LOOK_FOR_TABLE=>$VAL ) {
  1770. if(isset($KOMPLET_DANYCH_KOMORKI))unset($KOMPLET_DANYCH_KOMORKI);
  1771. DEBUG_S(-3,'Dla brakujacych komorek bede robic inserty (uzywajac poszukiwanych cech) :',array($LOOK_FOR_TABLE,$VAL),__FILE__, __FUNCTION__, __LINE__);
  1772. //musimy zbudowac parametry komorki do wprowadzenia - zaladowac je trzeba ze struktury
  1773. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1774. foreach($VVALUE as $TYPE=>$VALUE) {
  1775. $sql="select `ID`,`A_STATUS`,`CECHA_ID`,`PRODUKT_ID`,`DESC` from `IN7_PRODUKTY_CECHY` where
  1776. `A_STATUS`!='DELETED' and `CECHA_ID`='".$DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]."' and
  1777. `PRODUKT_ID`='".$VAL."' ";
  1778. $res2=$CONNLOCAL->query($sql);
  1779. 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__);
  1780. while($hh=mysql_fetch_object($res2)) {
  1781. $KOMPLET_DANYCH_KOMORKI[$TYPE]=$hh->DESC;
  1782. }
  1783. }
  1784. }
  1785. DEBUG_S(-3,'Komplet danych Komorki:',$KOMPLET_DANYCH_KOMORKI,__FILE__, __FUNCTION__, __LINE__);
  1786. if(count($KOMPLET_DANYCH_KOMORKI)<5) {
  1787. 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__) ;
  1788. die1(); }
  1789. 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.');
  1790. $sql="ALTER TABLE `".$LOCAL_TABLE_FOUND."` ADD `".$KOMPLET_DANYCH_KOMORKI['Field']."` ".$KOMPLET_DANYCH_KOMORKI['Type']." " ;
  1791. if($KOMPLET_DANYCH_KOMORKI['Null']=='YES') $sql.=" NULL ";
  1792. if(!empty($KOMPLET_DANYCH_KOMORKI['Default'])) $sql.=" default ".$KOMPLET_DANYCH_KOMORKI['Default']." ";
  1793. echo "\n ".$sql;
  1794. 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);
  1795. if(mysql_affected_rows($CONNREMOTE)>0) { //usuwamy z poszukiwania
  1796. unset($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM'][$LOOK_FOR_TABLE]);
  1797. $SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM'][$LOOK_FOR_TABLE]=$CONNREMOTE->insert_id();
  1798. }
  1799. }
  1800. //teraz synchronizacja cech do bazy - cech dotyczacych tych komorek
  1801. //foreach($SYNC_279['KOMORKI_DO_SPRAWDZENIA_W_REM'] as $ID_FIELD=>$ID_FIELD_VAL ) {
  1802. // //tu powinnismy robin foreach $CECHY_POSZUKIWANE - aby przeleciec wszystkie cechy komorki z tabeli
  1803. // $NUMER_ID_TABELI_Z_BAZY=$ID_FIELD_VAL;
  1804. foreach($STRUCTURE_LOCAL[$LOCAL_TABLE_FOUND]['FIELDS'] as $TSTIND=>$ID_FIELD_VAL_FLD) { //tu robie tabelke do odhaczania z niej zmiennych
  1805. $SA_PROBLEMY_W_KOMORKACH=false;
  1806. if(isset($KOMPLET_DANYCH_KOMORKI))unset($KOMPLET_DANYCH_KOMORKI);
  1807. echo "\n SRU: dla ".$TSTIND. "oraz tabeli".$ID_FIELD_VAL_FLD->Field;
  1808. //print_r($ID_FIELD_VAL_FLD);
  1809. //die1();
  1810. //print_r($STRUCTURE_LOCAL[$LOCAL_TABLE_FOUND]);
  1811. foreach($CECHY_POSZUKIWANE as $IINDEX=>$VVALUE) {
  1812. foreach($VVALUE as $TYPE=>$VALUE) {
  1813. //sprawdzamy czy jestesmy w dobrej komorce foreach
  1814. //if($ID_FIELD!=$ID_FIELD_VAL_TBL->Field) continue;
  1815. //sprawdzamy zgodnosc oczekiwanego typu lokalnego z parametrami w konfigu
  1816. echo "\n Sprawdzam zgodnosc strukturr: ".$TYPE." dla pola LEFT:" ;
  1817. // print_r($ID_FIELD_VAL_FLD);
  1818. //die1();
  1819. //if($ID_FIELD_VAL_FLD->$TYPE!=$TYPE) {
  1820. //echo "\n".$ID_FIELD_VAL_FLD->$TYPE."!=".$TYPE ;}
  1821. echo "\n--- dalej Sprawdzam zgodnosc struktur:".$LOCAL_TABLE_FOUND."::: ".$ID_FIELD_VAL_FLD->Field." ".$TYPE ;
  1822. //SZUKAMY CO JEST W CECHACH
  1823. $sql="select `ID`,`A_STATUS`,`CECHA_ID`,`PRODUKT_ID`,`DESC` from `IN7_PRODUKTY_CECHY` where
  1824. `A_STATUS`!='DELETED' and `CECHA_ID`='".$DRZEWO_CECH['NUMER_CECHY_DLA_DB_'.$IINDEX.$TYPE]."' and
  1825. `PRODUKT_ID`='".$SYNC_279['KOMORKI_DO_SPRAWDZENIA_W_REM'][$ID_FIELD_VAL_FLD->Field]."' ";
  1826. echo "\n ".$sql;
  1827. //SPRAWDZAMY Z TYM CO POWINNO BYC W BAZIE
  1828. $result=$CONNLOCAL->query($sql) or die1('problem ze sql '.$sql);
  1829. while($h=mysql_fetch_object($result)) {
  1830. $KOMPLET_DANYCH_KOMORKI[$TYPE]=$h->DESC;
  1831. if($ID_FIELD_VAL_FLD->$TYPE==addslashes($h->DESC)) {
  1832. echo "\n Zgodnosc cechy ".$TYPE." ".$h->DESC." z ".addslashes($ID_FIELD_VAL_FLD->$TYPE);
  1833. break; //nie robimy dalej tego foreach, bo jest zgodnosc tej cechy?
  1834. } else {
  1835. DEBUG_S(-3,"\n BRAK ZGODNOSCI! cechy ".$TYPE." ".$h->DESC." z ".addslashes($ID_FIELD_VAL_FLD->$TYPE),'',__FILE__, __FUNCTION__, __LINE__) ;
  1836. $SA_PROBLEMY_W_KOMORKACH=123;
  1837. }
  1838. }
  1839. //else DODAJEMY OPISY CECH DO BAZY DANYCH
  1840. }
  1841. echo "\n TEstuje problemy w komorkach:(".$SA_PROBLEMY_W_KOMORKACH.")";
  1842. if($SA_PROBLEMY_W_KOMORKACH) {
  1843. echo " ---- TAK SA - idziemy!:";
  1844. $SA_PROBLEMY_W_KOMORKACH=false;
  1845. print_r($KOMPLET_DANYCH_KOMORKI);
  1846. if(count($KOMPLET_DANYCH_KOMORKI)<5) die1('Niie ma w bazie zasobow odpowiedniej definicji tabeli/komorki - zla struktura!');
  1847. 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.');
  1848. $sql="ALTER TABLE `".$LOCAL_TABLE_FOUND."` CHANGE `".$ID_FIELD_VAL_FLD->Field."` `".$ID_FIELD_VAL_FLD->Field."` ".$KOMPLET_DANYCH_KOMORKI['Type']." " ;
  1849. if($KOMPLET_DANYCH_KOMORKI['Null']=='YES') $sql.=" NULL ";
  1850. if(!empty($KOMPLET_DANYCH_KOMORKI['Default'])) $sql.=" default '".$KOMPLET_DANYCH_KOMORKI['Default']."' ";
  1851. echo "\n ".$sql;
  1852. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($sql) or DEBUG_S(-3,'Problem ze SQL: ',$sql,__FILE__, __FUNCTION__, __LINE__) or die1('');
  1853. if(mysql_affected_rows($CONNREMOTE)>0) echo "\R Success alter";
  1854. //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);
  1855. }
  1856. }
  1857. }
  1858. echo "\nZNALEZIONO_KOMORKI_W_BAZIE_REM\n";print_r($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM']);
  1859. echo "\nKOMORKI_DO_ZNALEZIENIA_W_REM\n";print_r($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM']);
  1860. unset($SYNC_279['ZNALEZIONO_KOMORKI_W_BAZIE_REM']);
  1861. unset($SYNC_279['KOMORKI_DO_ZNALEZIENIA_W_REM']);
  1862. unset($SYNC_279['TABELE_DO_ZNALEZIENIA_W_REM']);
  1863. unset($SYNC_279['ZNALEZIONO_TABELE_W_BAZIE_REM']);
  1864. unset($SYNC_279['TABELE_DO_SPRAWDZENIA_W_REM']);
  1865. unset($SYNC_279['KOMORKI_DO_SPRAWDZENIA_W_REM']);
  1866. }
  1867. print_r($DRZEWO_CECH);
  1868. print_r($SYNC_279);
  1869. //unset($SYNC_279);
  1870. }
  1871. }// else if($SYNC_OPTIONS=='FROM_ZASOBY_TO_DATABASE')
  1872. else if($SYNC_OPTIONS=='FROM_ZASOBY_TO_ZASOBY') {
  1873. FROM_ZASOBY_TO_ZASOBY($CONNLOCAL,$CONNREMOTE,$SYSTEM_PROFILE_STRING_IMPORT_EXPORT,$CONFIRM_SQL_UPDATE,$CRM_IMPORT_TRANSLATE);
  1874. // ! CLEAR_IMPORTED_ZASOBY_REMOTE
  1875. } else if($SYNC_OPTIONS=='CLEAR_IMPORTED_ZASOBY_REMOTE') {
  1876. //jedziemy po wszystkich tabelach z CRM_IMPORT_TRANSLATE
  1877. if( isset($sql)) unset($sql);
  1878. if( isset($zap)) unset($zap);
  1879. echo "\n<br> Będą kasowane zaimportowane zasoby, procesy, wskazniki, pytania, zdjecia dla zaimportowanych struktur - aby wgrac od nowa czyste ";
  1880. $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' ) ";
  1881. $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' ) ";
  1882. $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' ) ";
  1883. $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' ) ";
  1884. $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' ) ";
  1885. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_PROCES'";
  1886. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_WSKAZNIK'";
  1887. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_LISTA_ZASOBOW'";
  1888. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_TESTY_PYTANIA'";
  1889. $sql[]="delete t2.* from `CRM_IMPORT_TRANSLATE` as t2 where t2.`REM_TABLE`='CRM_IMAGE'";
  1890. DEBUG_S(-3,'Zapytanie SQL czyszczace tabele: ',$sql,__FILE__, __FUNCTION__, __LINE__) ;
  1891. foreach($sql as $zap_ind=>$zap) {
  1892. DEBUG_S(-3,'Wyzwalam : Zapytanie SQL czyszczace tabele: ',$zap,__FILE__, __FUNCTION__, __LINE__) ;
  1893. if(!empty($CONFIRM_SQL_UPDATE)) $result=$CONNREMOTE->query($zap) or die1('\nProblem z '.$zap);
  1894. }
  1895. //! MAKE_SE_AND_HIST_FIELDS_FOR_TABLE
  1896. } else if($SYNC_OPTIONS=='MAKE_SE_AND_HIST_FIELDS_FOR_TABLE') {
  1897. $result=$CONNLOCAL->show_tables($SYSTEM_PROFILE_STRING_IMPORT_EXPORT);
  1898. while($h=$CONNLOCAL->fetch_array($result)) {
  1899. if(!strstr($h[0], '_HIST')) {
  1900. if(!empty($CONFIRM_SQL_UPDATE)) $CONNLOCAL->MAKE_SE_AND_HIST_FIELDS_FOR_TABLE($h[0]);
  1901. else DEBUG_S(-3,'Suppressed running command function CONNLOCAL->MAKE_SE_AND_HIST_FIELDS_FOR_TABLE('.$h[0].')',__FILE__,__FUNCTION__,__LINE__);
  1902. }
  1903. }
  1904. //! IMPORT_SORT_DESC_INFO
  1905. } else if($SYNC_OPTIONS=='SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS') {
  1906. SYSTEM_IMPORT_FIX_ZASOB_FIX_PROC_FIX_ALIAS($CONNREMOTE,$CONFIRM_SQL_UPDATE);
  1907. } else if($SYNC_OPTIONS=='IMPORT_SORT_DESC_INFO') {
  1908. echo "<br>f.IMPORT_SORT_DESC_INFO";
  1909. $cnf=Config::getConfFile('default_db');
  1910. $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']}";
  1911. exec($exec,$out,$exit);
  1912. DEBUG_S(-3,'Importuje swieza tabele zasobow',array($cnf,$out,$exit));
  1913. flush();
  1914. $sql="update {$cnf['database']}.CRM_LISTA_ZASOBOW cz , {$cnf['database']}.CRM_LISTA_ZASOBOW cz2
  1915. , test.CRM_LISTA_ZASOBOW cs , test.CRM_LISTA_ZASOBOW cs2
  1916. set cz.DESC_PL=cs.DESC_PL
  1917. , cz.SORT_PRIO=cs.SORT_PRIO
  1918. where cz.`DESC`=cs.`DESC` and cz.DESC_PL like ''
  1919. and cz.PARENT_ID=cz2.ID and cs.PARENT_ID=cs2.ID
  1920. and cs2.`DESC`=cz2.`DESC` ";
  1921. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1922. //! CLEAR_TREE_DUBLES_AND_MOVE_WSK
  1923. } else if($SYNC_OPTIONS=='CLEAR_TREE_DUBLES_AND_MOVE_WSK') {
  1924. $sql="select cz.ID, group_concat(cz.ID) as ID_GROUP, cz.`DESC`, count(cz.ID) as cnt
  1925. from CRM_LISTA_ZASOBOW as cz
  1926. 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' )
  1927. group by cz.PARENT_ID,cz.`DESC` ,cz.`TYPE`,cz.ALIAS_ID having cnt>1
  1928. limit 100
  1929. ";
  1930. DEBUG_S(-3,'szukam',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1931. $res=$CONNREMOTE->query($sql);
  1932. while($h=DB::fetch($res)) {
  1933. //if(empty($h->DESC2)) {
  1934. //bedziemy przerzucac na cz.ID wskazniki,
  1935. $to_move=explode(',',$h->ID_GROUP);
  1936. $dest_move=$to_move[0];
  1937. unset($to_move[0]);
  1938. foreach($to_move as $mv) {
  1939. echo "<hr> ".$h->DESC." (".$h->ID_GROUP.")";
  1940. $sql="update CRM_LISTA_ZASOBOW set PARENT_ID='".$dest_move."' where PARENT_ID='".$mv."' ";
  1941. DEBUG_S(3,'aktualizuje PARENT_ID',array($sql,$mv,$h),__FILE__,__FUNCTION__,__LINE__);
  1942. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1943. $sql="update CRM_LISTA_ZASOBOW set ALIAS_ID='".$dest_move."' where ALIAS_ID='".$mv."' ";
  1944. DEBUG_S(3,'aktualizuje PARENT_ID',array($sql,$mv,$h),__FILE__,__FUNCTION__,__LINE__);
  1945. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1946. $sql="update CRM_WSKAZNIK set ID_ZASOB='".$dest_move."' where ID_ZASOB='".$mv."' ";
  1947. DEBUG_S(-3,'aktualizuje WSKAZNIK',array($sql,$mv,$h),__FILE__,__FUNCTION__,__LINE__);
  1948. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1949. // a reszte kasowac, damy info w CRM_IMPORT_TRANSLATE jak bylo cos na niego
  1950. $sql="update CRM_IMPORT_TRANSLATE set DST_TABLE_ID='".$dest_move."' where DST_TABLE_ID='".$mv."' and REM_TABLE='CRM_LISTA_ZASOBOW'";
  1951. DEBUG_S(-3,'aktualizuje CRM_TRANS',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1952. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1953. $sql="update CRM_LISTA_ZASOBOW set PARENT_ID='-1', `DESC`='DELETED', A_RECORD_UPDATE_AUTHOR=concat('script CLEAR_TREE',`DESC`) where ID='".$mv."'";
  1954. DEBUG_S(-3,'aktualizuje - kasuje stary',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1955. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1956. $sql="update ignore USERS2 set CRM_LISTA_ZASOBOW_ID='".$dest_move."' where CRM_LISTA_ZASOBOW_ID='".$mv."' ";
  1957. DEBUG_S(-3,'aktualizuje USERS2',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1958. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1959. $sql="update ignore ADMIN_USERS set CRM_LISTA_ZASOBOW_ID='".$dest_move."' where CRM_LISTA_ZASOBOW_ID='".$mv."' ";
  1960. DEBUG_S(-3,'aktualizuje ADMIN_USERS',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1961. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1962. $sql="update ignore CRM_AUTH_PROFILE set ID_ZASOB='".$dest_move."' where ID_ZASOB='".$mv."' ";
  1963. DEBUG_S(-3,'aktualizuje CRM_AUTH_PROFILE',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1964. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1965. $sql="delete from CRM_AUTH_PROFILE where ID_ZASOB='".$mv."' ";
  1966. DEBUG_S(-3,'delete from CRM_AUTH_PROFILE',array($sql),__FILE__,__FUNCTION__,__LINE__);
  1967. if(!empty($CONFIRM_SQL_UPDATE)) $CONNREMOTE->query($sql) or die1(' Problem ze sql '.$sql);
  1968. }
  1969. //}
  1970. }
  1971. }
  1972. echo "</pre>\n";
  1973. unset($_SESSION['DEBUG']);
  1974. }
  1975. echo "<HR>EOF";
  1976. ?>