superedit-SQIX_STRUCTURE_DB_SYNC.php 151 KB

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