superedit-SQIX_STRUCTURE_DB_SYNC.php 154 KB

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