Piotr Labudda 11 лет назад
Родитель
Сommit
b90a0d0094
3 измененных файлов с 218 добавлено и 12 удалено
  1. 1 1
      SE/VERSION
  2. 0 1
      SE/procesy/db_procedures.php
  3. 217 10
      SE/superedit-DB_PROCEDURES_CREATE.php

+ 1 - 1
SE/VERSION

@@ -1 +1 @@
-3.9.9-10
+3.9.9-11

+ 0 - 1
SE/procesy/db_procedures.php

@@ -1 +0,0 @@
-//File @2014-01-20 has been moved to ../superedit-DB_PROCEDURES_CREATE.php

+ 217 - 10
SE/superedit-DB_PROCEDURES_CREATE.php

@@ -38,7 +38,7 @@ if(isset($_SERVER["argv"][1])) {
 
 }
 
-function DB_PROCEDURES_CREATE() {
+function DB_PROCEDURES_CREATE($DB=null) {
 
 
 DEBUG_S(-3,"Deklaruje zmienna SQL do wykonania instalacji procedur",null,__FILE__,__FUNCTION__,__LINE__);
@@ -46,8 +46,127 @@ DEBUG_S(-3,"Deklaruje zmienna SQL do wykonania instalacji procedur",null,__FILE_
 
 $sql['turn_off_database_locking']="SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;";
 
+//! CRM_ZASOBY_BEGIN
+$sql['drop_CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path']="drop function if exists CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path";
+$sql['create_CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path']="CREATE DEFINER=`root`@`localhost` FUNCTION `CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path`(`delimiter` TEXT, `node` INT) RETURNS text CHARSET latin2
+    READS SQL DATA
+BEGIN
+     DECLARE _path TEXT;
+     DECLARE _type CHAR(255);
+     DECLARE _lvl INT;
+     
+ DECLARE _cpath TEXT;
+        DECLARE _id INT;
+        DECLARE _id_cur INT;
+    DECLARE EXIT HANDLER FOR NOT FOUND RETURN _path;
+    SET _id = COALESCE(node, @id);
+      SET _path = '';
+      SET _lvl=1;
+    the_loop: LOOP
+    
+     SET _lvl =_lvl+1;
+    
+       IF _lvl>100 THEN
+       	 RETURN concat('ERROR',_path);
+	     LEAVE the_loop;
+         
+       END IF; 
+    
+                SELECT  PARENT_ID,`DESC`,ID
+              INTO    _id,_type,_id_cur
+         FROM    CRM_LISTA_ZASOBOW
+         WHERE   id = _id
+                    AND COALESCE(id <> @start_with, TRUE);
+               SET _path = CONCAT(_type, delimiter, _path);
+              
+              
+              
+              
+  END LOOP the_loop;
+END";
+
+
+
+//!_CRM_LISTA_ZASOBOW_tree_UPDATE
+$sql['drop__CRM_LISTA_ZASOBOW_tree_UPDATE']="DROP TRIGGER IF EXISTS  `_CRM_LISTA_ZASOBOW_tree_UPDATE`";
+$sql['create__CRM_LISTA_ZASOBOW_tree_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_LISTA_ZASOBOW_tree_UPDATE` BEFORE UPDATE ON `CRM_LISTA_ZASOBOW` FOR EACH ROW BEGIN
+IF NEW.PARENT_ID<>OLD.PARENT_ID or NEW.`DESC`<>OLD.`DESC` THEN 
+SET NEW.path = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.PARENT_ID);	
+update CRM_WSKAZNIK ik set ik.path_CRM_LISTA_ZASOBOW=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.ID) where path_CRM_LISTA_ZASOBOW like concat('%',NEW.ID,'%');
+-- update CRM_LISTA_ZASOBOW ik set ik.path=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', ik.ID) where path like concat('%',OLD.`DESC`,'%') and ik.ID<>OLD.ID;
+END IF;
+END
+";
+
+//!_CRM_LISTA_ZASOBOW_tree_UPDATE_after
+$sql['drop__CRM_LISTA_ZASOBOW_tree_UPDATE_after']="DROP TRIGGER IF EXISTS  `_CRM_LISTA_ZASOBOW_tree_UPDATE_after`";
+/*$sql['create__CRM_LISTA_ZASOBOW_tree_UPDATE_after']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_LISTA_ZASOBOW_tree_UPDATE_after` AFTER UPDATE ON `CRM_LISTA_ZASOBOW` FOR EACH ROW BEGIN
+IF NEW.PARENT_ID<>OLD.PARENT_ID or NEW.`DESC`<>OLD.`DESC` THEN
+-- update CRM_LISTA_ZASOBOW ik set ik.path=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', ik.ID) where path like concat('%',OLD.`DESC`,'%');
+update CRM_WSKAZNIK ik set ik.path_CRM_LISTA_ZASOBOW=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', ik.ID_ZASOB) where path_CRM_LISTA_ZASOBOW like concat('%',OLD.`DESC`,'%');
+END IF;
+
+END
+";
+*/
+
+
+//!_CRM_LISTA_ZASOBOW_tree_INSERT
+$sql['drop__CRM_LISTA_ZASOBOW_tree_INSERT']="DROP TRIGGER IF EXISTS  `_CRM_LISTA_ZASOBOW_tree_INSERT`";
+$sql['create__CRM_LISTA_ZASOBOW_tree_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_LISTA_ZASOBOW_tree_INSERT` BEFORE INSERT ON `CRM_LISTA_ZASOBOW` FOR EACH ROW BEGIN
+
+	SET NEW.path = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.PARENT_ID);
+END
+";
+
+
+
+
+//!_CRM_WSKAZNIK_tree_INSERT
+$sql['drop__CRM_WSKAZNIK_tree_INSERT']="DROP TRIGGER IF EXISTS  `_CRM_WSKAZNIK_tree_INSERT`";
+$sql['create__CRM_WSKAZNIK_tree_INSERT']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_WSKAZNIK_tree_INSERT` BEFORE INSERT ON `CRM_WSKAZNIK` FOR EACH ROW BEGIN
+
+	SET NEW.path_CRM_LISTA_ZASOBOW = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.ID_ZASOB);
+END
+";
+
+
+
+//!_CRM_WSKAZNIK_tree_UPDATE
+$sql['drop__CRM_WSKAZNIK_tree_UPDATE']="DROP TRIGGER IF EXISTS  `_CRM_WSKAZNIK_tree_UPDATE`";
+$sql['create__CRM_WSKAZNIK_tree_UPDATE']="CREATE DEFINER=`root`@`localhost` TRIGGER `_CRM_WSKAZNIK_tree_UPDATE` BEFORE UPDATE ON `CRM_WSKAZNIK` FOR EACH ROW BEGIN
+
+IF NEW.ID_ZASOB<>OLD.ID_ZASOB THEN 
+	SET NEW.path_CRM_LISTA_ZASOBOW = CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/', NEW.ID_ZASOB);
+
+END IF;
+END
+";
+
+
+
+//! event do aktualizacji PROJEKTOW - raz dziennie wszystkie przemapowac TODO trigger powinien aktualizowac pozostale powiazane rekordy, ktore zmienily strukture po zmianie struktury projektow
+
+
+$sql['event_delete_CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree']="drop event if exists _CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree_event";
+$sql['event_create_CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree']="CREATE DEFINER=root@localhost EVENT _CRM_LISTA_ZASOBOW__CRM_WSKAZNIK_tree_event
+    ON SCHEDULE EVERY 1 DAY 
+    STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
+    DO 
+     BEGIN 
+     	update  CRM_LISTA_ZASOBOW set path=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/',ID);
+     	update  CRM_WSKAZNIK set path_CRM_LISTA_ZASOBOW=CRM_LISTA_ZASOBOW_hierarchy_sys_connect_by_path('/',ID_ZASOB);
+
+     END 
+    
+     ";
+
+
+
 
 
+//! CRM_ZASOBY_END
+
 //!IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path
 $sql['drop_IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path']="drop function if exists IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path";
 $sql['create_IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path']="CREATE DEFINER=`root`@`localhost` FUNCTION `IN7_MK_BAZA_DYSTRYBUCJI_hierarchy_sys_connect_by_path`(`delimiter` TEXT, `node` INT) RETURNS text CHARSET latin2
@@ -292,8 +411,6 @@ END";
 
 
 
-
-
 $sql['drop__CRM_PROCES_STATS_proc_wiev']="drop table if exists _CRM_PROCES_STATS_proc_wiev;";
 $sql['create__CRM_PROCES_STATS_proc_wiev']="create table _CRM_PROCES_STATS_proc_wiev
 SELECT  hi.ID,CRM_PROCES_tree_detect_init(hi.ID) as ID_PROCES_INIT,CONCAT(REPEAT('    ', lvl - 1), hi.id) AS treeitem,
@@ -420,6 +537,41 @@ END IF;
 END";
 
 
+$sql['drop__CRM_PROCES_GOTO_CACHE']="drop table if exists _CRM_PROCES_GOTO_CACHE;";
+$sql_tmp['select_CRM_PROCES_GOTO_CACHE']="select t1.ID,t1.ID_PROCES_INIT,t2.IF_TRUE_GOTO , t2.IF_TRUE_GOTO_FLAG, now() as TIMESTAMP
+	 from _CRM_PROCES_STATS_proc_wiev t1 
+	inner join CRM_PROCES as t2 on ( t1.ID=t2.ID and t2.IF_TRUE_GOTO>0 and t2.IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN' ) 
+	-- inner join CRM_PROCES as t3 on ( t2.IF_TRUE_GOTO=t3.ID and t2.IF_TRUE_GOTO>0 and t2.IF_TRUE_GOTO_FLAG='GOTO_AND_RETURN' )  TODO@2014-09-04 trzeba rekursywnie podlapac wzajemne powiazania
+
+	where t1.ID_PROCES_INIT>0
+	";
+$sql['create__CRM_PROCES_GOTO_CACHE']="create table _CRM_PROCES_GOTO_CACHE ".$sql_tmp['select_CRM_PROCES_GOTO_CACHE'] ;
+
+$sql['alter__CRM_PROCES_GOTO_CACHE_ID']="alter table _CRM_PROCES_GOTO_CACHE add index(ID)" ;
+$sql['alter__CRM_PROCES_GOTO_CACHE_ID_PROCES_INIT_type']="alter table _CRM_PROCES_GOTO_CACHE modify ID_PROCES_INIT int(11)" ;
+$sql['alter__CRM_PROCES_GOTO_CACHE_ID_PROCES_INIT']="alter table _CRM_PROCES_GOTO_CACHE add index(ID_PROCES_INIT)" ;
+$sql['alter__CRM_PROCES_GOTO_CACHE_IF_TRUE_GOTO']="alter table _CRM_PROCES_GOTO_CACHE add index(IF_TRUE_GOTO)" ;
+
+
+
+$sql['event_delete_CRM_PROCES_GOTO_CACHE']="drop event if exists _CRM_PROCES_GOTO_CACHE_event";
+$sql['event_create_CRM_PROCES_GOTO_CACHE']="CREATE DEFINER=root@localhost EVENT _CRM_PROCES_GOTO_CACHE_event
+    ON SCHEDULE EVERY 1 DAY 
+    STARTS str_to_date( date_format(now(), '%Y%m%d 0500'), '%Y%m%d %H%i' ) + INTERVAL 1 DAY
+    DO 
+     BEGIN 
+      SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
+       truncate table _CRM_PROCES_INIT_STATS;
+       replace into _CRM_PROCES_INIT_STATS ".$sql_tmp['select_CRM_PROCES_GOTO_CACHE']." ;
+     END 
+    
+     ";
+
+
+
+
+
+
 
 
 $sql['drop__CRM_PROCES_STATS']="drop table if exists _CRM_PROCES_STATS ;";
@@ -612,8 +764,9 @@ BEGIN
 END";
 
 
-$sql['replace__CRM_PROCES_USER_STATS_wiev']="create or replace definer=`root`@`localhost` view _CRM_PROCES_USER_STATS_wiev as
-select  concat(au.ID,cw.ID) as ID,cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
+
+$sql['replace__CRM_PROCES_USER_STATS_wiev_to_group']="create or replace definer=`root`@`localhost` view _CRM_PROCES_USER_STATS_wiev_to_group as
+select  concat(au.ID,cw.ID,0) as ID,cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
 ,au.ADM_ACCOUNT  
 ,cps.path
 , 'TEORETYCZNY' as TEST_TYPE,cps.SCQuest , max(ct.OCENA) as OCENA , max(ct.TEST_END) as TEST_END
@@ -621,7 +774,7 @@ select  concat(au.ID,cw.ID) as ID,cps.ID as ID_PROCES , left(cps.`DESC`,50) as `
 -- , max(if(ct.TEST_TYPE='PRAKTYCZNY',ct.OCENA,NULL)) as OCENA_P
 from ADMIN_USERS as au 
   left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
-  left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING') 
+  left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING')   
   left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cw.ID_PROCES and ct.ID_TESTER=au.ID and ct.TEST_TYPE='TEORETYCZNY' 
   left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cw.ID_PROCES
 
@@ -632,8 +785,33 @@ and cps.SCQuest>0
 
 -- order by ct.OCENA desc
 -- limit 10
+
+-- dodatkowe GOTO_AND_RETURN
+
 union 
-select  concat(au.ID,cw.ID) as ID, cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
+select  concat(au.ID,cw.ID,1) as ID,cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
+,au.ADM_ACCOUNT  
+,cps.path
+, 'TEORETYCZNY' as TEST_TYPE,cps.SCQuest , max(ct.OCENA) as OCENA , max(ct.TEST_END) as TEST_END
+-- , max(if(ct.TEST_TYPE='TEORETYCZNY',ct.OCENA,NULL)) as OCENA_T
+-- , max(if(ct.TEST_TYPE='PRAKTYCZNY',ct.OCENA,NULL)) as OCENA_P
+
+from ADMIN_USERS as au 
+  left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
+  left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB and cw.A_STATUS in ('NORMAL','WAITING') 
+  	left join _CRM_PROCES_GOTO_CACHE as cpgc on cpgc.ID_PROCES_INIT=cw.ID_PROCES
+  
+  left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cpgc.IF_TRUE_GOTO and ct.ID_TESTER=au.ID and ct.TEST_TYPE='TEORETYCZNY' 
+  left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cpgc.IF_TRUE_GOTO
+
+where au.A_STATUS='NORMAL' 
+
+and cps.SCQuest>0
+ group by au.ID, cps.ID
+
+
+union 
+select  concat(au.ID,cw.ID,2) as ID, cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
 ,au.ADM_ACCOUNT  
 ,cps.path
 , 'PRAKTYCZNY' as TEST_TYPE, cps.SCQuestPract , max(ct.OCENA) as OCENA, max(ct.TEST_END) as TEST_END
@@ -647,8 +825,34 @@ where au.A_STATUS='NORMAL'
 
 and cps.SCQuestPract>0
  group by au.ID,cps.ID
+ 
+-- dodatkowe GOTO_AND_RETURN
+
+union 
+select  concat(au.ID,cw.ID,3) as ID, cps.ID as ID_PROCES , left(cps.`DESC`,50) as `DESC`
+,au.ADM_ACCOUNT  
+,cps.path
+, 'PRAKTYCZNY' as TEST_TYPE, cps.SCQuestPract , max(ct.OCENA) as OCENA, max(ct.TEST_END) as TEST_END
+from ADMIN_USERS as au 
+  left join CRM_AUTH_PROFILE as cap on cap.REMOTE_ID=au.ID and cap.REMOTE_TABLE='ADMIN_USERS' and cap.A_STATUS in ('NORMAL','WAITING')
+  left join CRM_WSKAZNIK as cw on cw.ID_ZASOB=cap.ID_ZASOB  and cw.A_STATUS in ('NORMAL','WAITING')
+  	left join _CRM_PROCES_GOTO_CACHE as cpgc on cpgc.ID_PROCES_INIT=cw.ID_PROCES
+
+  left join CRM_TESTY as ct on ct.ID_PROCES_INIT=cpgc.IF_TRUE_GOTO and ct.ID_TESTER=au.ID and ct.TEST_TYPE='PRAKTYCZNY' 
+  left join _CRM_PROCES_INIT_STATS as cps on cps.ID=cpgc.IF_TRUE_GOTO
+
+where au.A_STATUS='NORMAL' 
+
+and cps.SCQuestPract>0
+ group by au.ID,cps.ID
+ 
+";
+
+$sql['replace__CRM_PROCES_USER_STATS_wiev']="create or replace definer=`root`@`localhost` view _CRM_PROCES_USER_STATS_wiev as
+	select ID,ID_PROCES, `DESC`, ADM_ACCOUNT, path,TEST_TYPE,SCQuest,OCENA,TEST_END
+	from _CRM_PROCES_USER_STATS_wiev_to_group
+	group by ADM_ACCOUNT,ID_PROCES,TEST_TYPE ";
 
-order by ADM_ACCOUNT , path,OCENA desc";
 
 $sql['event_drop_CRM_PROCES_USER_OCENA_OKRES']="drop event if exists CRM_PROCES_USER_OCENA_OKRES_event ";
 $sql['event_create_CRM_PROCES_USER_OCENA_OKRES']=" CREATE DEFINER=root@localhost EVENT CRM_PROCES_USER_OCENA_OKRES_event 
@@ -686,8 +890,11 @@ $sql['event_shedule_init']="SET GLOBAL event_scheduler = ON";
 
 foreach($sql as $ind=>$sql_) {
 	DEBUG_S(-3,'wykonuje zapytanie sql dla '.$ind,$sql_,__FILE__,__FUNCTION__,__LINE__);
-	DB::query($sql_) or die('Problem z zapytaniem '.mysql_error());
-	
+	if(!empty($DB)) {
+		$DB->query($sql_) or die('Problem z zapytaniem '.mysql_error());
+	} else {
+		DB::query($sql_) or die('Problem z zapytaniem '.mysql_error());
+	}
 }