superedit-SQIX_STRUCTURE_DB_SYNC.php 147 KB

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