From 6d156b4febec6b9a0890e95ba07a0dc359c8b496 Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 17:36:48 +0100 Subject: [PATCH 01/11] Added new graphics for Procedures, Triggers and Events --- themes/original/img/b_event_add.png | Bin 0 -> 927 bytes themes/original/img/b_events.png | Bin 0 -> 969 bytes themes/original/img/b_routine_add.png | Bin 0 -> 651 bytes themes/original/img/b_routines.png | Bin 0 -> 666 bytes themes/original/img/b_trigger_add.png | Bin 0 -> 731 bytes themes/original/img/b_triggers.png | Bin 0 -> 707 bytes themes/pmahomme/img/b_event_add.png | Bin 0 -> 927 bytes themes/pmahomme/img/b_events.png | Bin 0 -> 969 bytes themes/pmahomme/img/b_execute.png | Bin 0 -> 549 bytes themes/pmahomme/img/b_routine_add.png | Bin 0 -> 651 bytes themes/pmahomme/img/b_routines.png | Bin 0 -> 666 bytes themes/pmahomme/img/b_trigger_add.png | Bin 0 -> 731 bytes themes/pmahomme/img/b_triggers.png | Bin 0 -> 707 bytes 13 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 themes/original/img/b_event_add.png create mode 100644 themes/original/img/b_events.png create mode 100644 themes/original/img/b_routine_add.png create mode 100644 themes/original/img/b_routines.png create mode 100644 themes/original/img/b_trigger_add.png create mode 100644 themes/original/img/b_triggers.png create mode 100644 themes/pmahomme/img/b_event_add.png create mode 100644 themes/pmahomme/img/b_events.png create mode 100644 themes/pmahomme/img/b_execute.png create mode 100644 themes/pmahomme/img/b_routine_add.png create mode 100644 themes/pmahomme/img/b_routines.png create mode 100644 themes/pmahomme/img/b_trigger_add.png create mode 100644 themes/pmahomme/img/b_triggers.png diff --git a/themes/original/img/b_event_add.png b/themes/original/img/b_event_add.png new file mode 100644 index 0000000000000000000000000000000000000000..6940d74beb19c86d32f1e1a82a35e0b5ba27868b GIT binary patch literal 927 zcmV;Q17Q4#P)Px#24YJ`L;(K){{a7>y{D4^00T!!L_t(I%XQP+Pg`{W!13?-^+Hd3pj=0(6a*yW z1mvQUkm|!CVr2NRT2Mr%TYS>_U}j>BufFi0Z)Pz*_%Jlyg1VIi=b~ntVGU!VtffT8 zW$T8W%#{O_Ue4(`J}vS3{R2L4U&*p8{+gz$VbkLYNkRn4W&_A_(lX5%k;#1JO(Z7y zN77wjv!lc3l;sJlqN307;tPshRk1ZRpkKR2F_FMHIk79H)6qgUd$=YROZ^Sl?C9`0 z9ga9-&no7TBhJ|J5`Wy@B$LS?%Wf*GDrj$2ah#keNS}PVThR6PyNDgYA(u>;!^28? zB;@?*-1l^qmDBC5#ObXj-PTI#R*LV=|3K%VC!IdCs5riuoB##@gr=%ttGuEw`}}jx zxw$#cMy8Nf)^M(@VJ$7;l3fG>0lIs7SonFKy|GcJSy|DiscINNm>zdXe`Z8kzkZ#2 z{Pi3dJjn4=r?`CP490~E=(>)s>$u%AzB)gN#7;a)Dx_gJ$mep{ZFW3v4}*h) zT%3tA@c00WOL1b03l#EsWZ4B9H?dr>F<4lLdhnV?CZ7feDrpy@Fo(I_AMINuEI(_#C0gl-L^nCuX@^vI`S(ef=I^s-g+iYB#C9{`7 zcFUx9e#0Rt45}{y@Ou9TM6R3wPP+s^O)Qqu4WqquYWjT5vDbF}v$HhiGpO}GTJl-$ z>}bR{W*9$v6oBz>kFxUn0zgjsuNw`wJ0uAyD02CL=_*N%x7^9C_Liu@&PQnV^{||p zXJ+9?ZmenV{tNiO`d;;q1Frz3zz%RC`rgKye*&VlY_94c9{KDliyDpbpXIWcfGsbwMR>fLaCJ6vCWYs zy16}I6BDzI5yDJ{1x1vNS6_WFG5!ty6YGOkWT4E<#Hi6kBuboNWz;z=UAtMFt`z(0 zde`syG^5k_;O7tcJbgaW*w`3llWQa8HP%hlWuvrQ6aw@7CJ3ee{7u0Z4aBUFwYqP$z?(=R{g$@Ay5i0GK=!eSa21&}j^Ldxw9jWl0S^Vlj>#KhDPY*J#YnXd)aM$rK7H0M8ro!ME)B3nzc_dgHgX1{J9tqp&uzT+pdZST|jqCPhpZ~IqBquuu6720)8H~p{edaW& z*%@BX-{Li=#nq3m;<_##*+Znam+F2M=Rg8kl9K?k)M~{#{Slgt27#_1exIL-i3tuK zd4lAr=UDl0g=l1efoL2v5Ws4+ar*j@TCEs>?CN^aEtW7%6RXui@hJFxe#Xbg`FeGY z(X*r6$Ze9nu|eCiFbo~;-oe%NB7h=XnW29dXN2q9JhWTnwq(%)aMg~I`E-!8DXS3y-&R7FKoy=a;jP1C5?o0RSp zd8|KzzPMad8jU3Y&$SaLwqCq{|CDRB2lQv3@no-WVz=900000NkvXXu0mjfd<@3t literal 0 HcmV?d00001 diff --git a/themes/original/img/b_routine_add.png b/themes/original/img/b_routine_add.png new file mode 100644 index 0000000000000000000000000000000000000000..95b971948e1902d858ad5870aad6f898f670942b GIT binary patch literal 651 zcmV;60(AX}P)Px#24YJ`L;(K){{a7>y{D4^00J{fL_t(I%dL`6Xp(Ul$G^W<=Zg6r(xJ2MR1kHj zjbh~VG$n`*CB#^NE+e8rv4U!33g#=!EsVMajj=BM*$OtJE~y)BrP&xQ8nH{lETxou z9lpXa^?f>N9U|XD4?OT3p1}J4UPrNqlVzro4QY;7pmrA8^?(85^sWb#Z z_+3Xtjhxx+y>dY+kSxnokP2k8_sT@XhzRONYo}6a%+3T64uvYQw^6e6SlR4MP(5_% zg51&3-uMKc*9V^G5sOE0D{#9x7LS7GdHB3OWg2+A9!Qb|i`j~+!agWe*Bcx8wi5H{SdR&T2iadp!&47T6HPRBV%wlj#c!nI@0NM%wT9kd)GFs zB$iOz%)|9y5k0$X06?m(EgG7BGIeA8-UN$;!w1GP$n1RqvMK?9116tYlx| zdua{U1KqH9A4aJui|FSU$QANQP6?{_iDh){?nITVqSJH;RaS<1uLVU-wvAJQDldIQ z6Vu}8o*@9h75g}L8ukIemVct^>pw0hlj~%;xPtQQL z(OhI+<#Ic*u_40cc496vuL8hCQN)q`4#Ypkpn)3CSMNf@)Ohn@0sN*(`5%aUB2jG4 l7y$50=D?Rs2v06^zW_X1d_f$qG=Bg9002ovPDHLkV1kWaEQ|mE literal 0 HcmV?d00001 diff --git a/themes/original/img/b_routines.png b/themes/original/img/b_routines.png new file mode 100644 index 0000000000000000000000000000000000000000..428b0db73c9606f7c2c77bd9ab6df42c6fdd359b GIT binary patch literal 666 zcmV;L0%iS)P)E6HydBFEc74vuVXF?0-;qHNi#ORfD(*aiZCZ zE<~i(U`!y+47BtM_exO^t7(TWu9m%xPa8#yO^gud+a#r= z;pC749Y&^8jSl*&pvlfv#UM>>>V4QO_8e3Q@Px#24YJ`L;(K){{a7>y{D4^00M(aL_t(I%cYZDNK;`P#-I1>bvrpNo7&lCsOyu8 zf@W1;%znh1LFvhSNIII%-KhHgG=Nw}Yh(ZdBi;oWi0BLAwpvkEk zpCT)ngb+nVRbL^q2kGfTOID7djw7g06eSw~M=6aRJzT=OdYxF7Pym!EOjmmPBotZU zg274T7$24X2dHH9vU^zFD&{|Qgi~YUgrP+LIFsGBMYxOyD~YB zlLWo6B**0x4bQWJd<*Ft=!uA;s9}szwOSoJR$R)vdYxGM6)OY)va$ucy)i>pl5XT~ zGF6^GYbDO^P8JG$&p5zXSl#*4DaNyLR1lp4p5y z9uFd+;Fg-2+L?rEwBNC3FsiE8YPD?F_C1LIl2|krueaM9GXS9Frfsgd^*U>AZYo&L z{Aoe$lO;Km5F#0~vX;s(UeZ2%bf3-6&J%-CADN$<*L)JaG+9W37+pjt5`h$zI-WMU zFH-f_Ih`@xOa&Ywb17qx;ck0?+*5$p&R`PPp!Sb#cSVCJ^2nR9l8-mSM0RXUdS77G*7y!f) z63BAY?im|`8Wf!$+My;CgYWtQz(Eq7v$@)615gDZ6+jq3yXTg#{x@b(JzQbZQ4Ih9 N002ovPDHLkV1j>nKUV+% literal 0 HcmV?d00001 diff --git a/themes/original/img/b_triggers.png b/themes/original/img/b_triggers.png new file mode 100644 index 0000000000000000000000000000000000000000..e9025119c1dfc00195c6ef184cb60c0cd29b9ef4 GIT binary patch literal 707 zcmV;!0zCbRP)r zkxfWcVHAenbLZ>cYh!8ZbVmnFD+-FrT?$TEDE&yQsGLYpidwmJG}`E*(vfi^E&NM} zAZXD>YM>DdbYZp*B6VY=GjN+4XT;ID-*;M+^k0aJ-t{>TFYiOljLk&b)HeXJk>j!F zkr*>9Qsl3#Jv9jc)X~u)wr(>PlvExfQZC_|hvbpMLM!CkRUFg^%}S|K0GbdYbNpDH z86A&c9U=e-R$Nej_6(F%S~8g|dpk4Jy3;BM=9mUoSJmXcnSBk@Fk$GXnfPd-jPx#24YJ`L;(K){{a7>y{D4^00T!!L_t(I%XQP+Pg`{W!13?-^+Hd3pj=0(6a*yW z1mvQUkm|!CVr2NRT2Mr%TYS>_U}j>BufFi0Z)Pz*_%Jlyg1VIi=b~ntVGU!VtffT8 zW$T8W%#{O_Ue4(`J}vS3{R2L4U&*p8{+gz$VbkLYNkRn4W&_A_(lX5%k;#1JO(Z7y zN77wjv!lc3l;sJlqN307;tPshRk1ZRpkKR2F_FMHIk79H)6qgUd$=YROZ^Sl?C9`0 z9ga9-&no7TBhJ|J5`Wy@B$LS?%Wf*GDrj$2ah#keNS}PVThR6PyNDgYA(u>;!^28? zB;@?*-1l^qmDBC5#ObXj-PTI#R*LV=|3K%VC!IdCs5riuoB##@gr=%ttGuEw`}}jx zxw$#cMy8Nf)^M(@VJ$7;l3fG>0lIs7SonFKy|GcJSy|DiscINNm>zdXe`Z8kzkZ#2 z{Pi3dJjn4=r?`CP490~E=(>)s>$u%AzB)gN#7;a)Dx_gJ$mep{ZFW3v4}*h) zT%3tA@c00WOL1b03l#EsWZ4B9H?dr>F<4lLdhnV?CZ7feDrpy@Fo(I_AMINuEI(_#C0gl-L^nCuX@^vI`S(ef=I^s-g+iYB#C9{`7 zcFUx9e#0Rt45}{y@Ou9TM6R3wPP+s^O)Qqu4WqquYWjT5vDbF}v$HhiGpO}GTJl-$ z>}bR{W*9$v6oBz>kFxUn0zgjsuNw`wJ0uAyD02CL=_*N%x7^9C_Liu@&PQnV^{||p zXJ+9?ZmenV{tNiO`d;;q1Frz3zz%RC`rgKye*&VlY_94c9{KDliyDpbpXIWcfGsbwMR>fLaCJ6vCWYs zy16}I6BDzI5yDJ{1x1vNS6_WFG5!ty6YGOkWT4E<#Hi6kBuboNWz;z=UAtMFt`z(0 zde`syG^5k_;O7tcJbgaW*w`3llWQa8HP%hlWuvrQ6aw@7CJ3ee{7u0Z4aBUFwYqP$z?(=R{g$@Ay5i0GK=!eSa21&}j^Ldxw9jWl0S^Vlj>#KhDPY*J#YnXd)aM$rK7H0M8ro!ME)B3nzc_dgHgX1{J9tqp&uzT+pdZST|jqCPhpZ~IqBquuu6720)8H~p{edaW& z*%@BX-{Li=#nq3m;<_##*+Znam+F2M=Rg8kl9K?k)M~{#{Slgt27#_1exIL-i3tuK zd4lAr=UDl0g=l1efoL2v5Ws4+ar*j@TCEs>?CN^aEtW7%6RXui@hJFxe#Xbg`FeGY z(X*r6$Ze9nu|eCiFbo~;-oe%NB7h=XnW29dXN2q9JhWTnwq(%)aMg~I`E-!8DXS3y-&R7FKoy=a;jP1C5?o0RSp zd8|KzzPMad8jU3Y&$SaLwqCq{|CDRB2lQv3@no-WVz=900000NkvXXu0mjfd<@3t literal 0 HcmV?d00001 diff --git a/themes/pmahomme/img/b_execute.png b/themes/pmahomme/img/b_execute.png new file mode 100644 index 0000000000000000000000000000000000000000..7d39b2f4085823464111e8294017eb963bc1e515 GIT binary patch literal 549 zcmV+=0^0qFP)r zlS@lNQ4q)H=*fFCO)RQ!&;yDdQnU$N1-0uVL<=`PXcM$@p_>ST7A;zs1cEIjODk`g z78$Kdg`ip&XrTBA??b!yoOWTRWw>Zy76bGD@tCYM0S>De zyV-1({_KDdV(RJcT>-WH91L?aby=X4e&$)|gvzo^MNyy+PxsRK1$Pq+9`%*?ROS~4 zk|cqm$dJjVp|hilF%6H6vszv3m^<7G1OlzUj==Lg5JEsKitw6BLOPp51O0={$k3=o zrll9R$2AK8=tqD;6p)G%V2lB))gXvG==FN_)Z}z)lM3%RcDESFd7D$ zSuN;V^pMZzmHn_s$Ypa&i}TBongD?p03ie{!-CP!2C_`3&+jcI5=ln^i>uZJ>s#dx zzByntEEo;#a2>fSM&r?FQ55EEwzbD<3#&|3OX=1^00000NkvXXu0mjfZ&2Ta literal 0 HcmV?d00001 diff --git a/themes/pmahomme/img/b_routine_add.png b/themes/pmahomme/img/b_routine_add.png new file mode 100644 index 0000000000000000000000000000000000000000..95b971948e1902d858ad5870aad6f898f670942b GIT binary patch literal 651 zcmV;60(AX}P)Px#24YJ`L;(K){{a7>y{D4^00J{fL_t(I%dL`6Xp(Ul$G^W<=Zg6r(xJ2MR1kHj zjbh~VG$n`*CB#^NE+e8rv4U!33g#=!EsVMajj=BM*$OtJE~y)BrP&xQ8nH{lETxou z9lpXa^?f>N9U|XD4?OT3p1}J4UPrNqlVzro4QY;7pmrA8^?(85^sWb#Z z_+3Xtjhxx+y>dY+kSxnokP2k8_sT@XhzRONYo}6a%+3T64uvYQw^6e6SlR4MP(5_% zg51&3-uMKc*9V^G5sOE0D{#9x7LS7GdHB3OWg2+A9!Qb|i`j~+!agWe*Bcx8wi5H{SdR&T2iadp!&47T6HPRBV%wlj#c!nI@0NM%wT9kd)GFs zB$iOz%)|9y5k0$X06?m(EgG7BGIeA8-UN$;!w1GP$n1RqvMK?9116tYlx| zdua{U1KqH9A4aJui|FSU$QANQP6?{_iDh){?nITVqSJH;RaS<1uLVU-wvAJQDldIQ z6Vu}8o*@9h75g}L8ukIemVct^>pw0hlj~%;xPtQQL z(OhI+<#Ic*u_40cc496vuL8hCQN)q`4#Ypkpn)3CSMNf@)Ohn@0sN*(`5%aUB2jG4 l7y$50=D?Rs2v06^zW_X1d_f$qG=Bg9002ovPDHLkV1kWaEQ|mE literal 0 HcmV?d00001 diff --git a/themes/pmahomme/img/b_routines.png b/themes/pmahomme/img/b_routines.png new file mode 100644 index 0000000000000000000000000000000000000000..428b0db73c9606f7c2c77bd9ab6df42c6fdd359b GIT binary patch literal 666 zcmV;L0%iS)P)E6HydBFEc74vuVXF?0-;qHNi#ORfD(*aiZCZ zE<~i(U`!y+47BtM_exO^t7(TWu9m%xPa8#yO^gud+a#r= z;pC749Y&^8jSl*&pvlfv#UM>>>V4QO_8e3Q@Px#24YJ`L;(K){{a7>y{D4^00M(aL_t(I%cYZDNK;`P#-I1>bvrpNo7&lCsOyu8 zf@W1;%znh1LFvhSNIII%-KhHgG=Nw}Yh(ZdBi;oWi0BLAwpvkEk zpCT)ngb+nVRbL^q2kGfTOID7djw7g06eSw~M=6aRJzT=OdYxF7Pym!EOjmmPBotZU zg274T7$24X2dHH9vU^zFD&{|Qgi~YUgrP+LIFsGBMYxOyD~YB zlLWo6B**0x4bQWJd<*Ft=!uA;s9}szwOSoJR$R)vdYxGM6)OY)va$ucy)i>pl5XT~ zGF6^GYbDO^P8JG$&p5zXSl#*4DaNyLR1lp4p5y z9uFd+;Fg-2+L?rEwBNC3FsiE8YPD?F_C1LIl2|krueaM9GXS9Frfsgd^*U>AZYo&L z{Aoe$lO;Km5F#0~vX;s(UeZ2%bf3-6&J%-CADN$<*L)JaG+9W37+pjt5`h$zI-WMU zFH-f_Ih`@xOa&Ywb17qx;ck0?+*5$p&R`PPp!Sb#cSVCJ^2nR9l8-mSM0RXUdS77G*7y!f) z63BAY?im|`8Wf!$+My;CgYWtQz(Eq7v$@)615gDZ6+jq3yXTg#{x@b(JzQbZQ4Ih9 N002ovPDHLkV1j>nKUV+% literal 0 HcmV?d00001 diff --git a/themes/pmahomme/img/b_triggers.png b/themes/pmahomme/img/b_triggers.png new file mode 100644 index 0000000000000000000000000000000000000000..e9025119c1dfc00195c6ef184cb60c0cd29b9ef4 GIT binary patch literal 707 zcmV;!0zCbRP)r zkxfWcVHAenbLZ>cYh!8ZbVmnFD+-FrT?$TEDE&yQsGLYpidwmJG}`E*(vfi^E&NM} zAZXD>YM>DdbYZp*B6VY=GjN+4XT;ID-*;M+^k0aJ-t{>TFYiOljLk&b)HeXJk>j!F zkr*>9Qsl3#Jv9jc)X~u)wr(>PlvExfQZC_|hvbpMLM!CkRUFg^%}S|K0GbdYbNpDH z86A&c9U=e-R$Nej_6(F%S~8g|dpk4Jy3;BM=9mUoSJmXcnSBk@Fk$GXnfPd-j Date: Sat, 21 May 2011 17:39:09 +0100 Subject: [PATCH 02/11] Removed references to Routines, Triggers and Events from *_structute.php files --- db_structure.php | 15 --------------- tbl_structure.php | 2 -- 2 files changed, 17 deletions(-) diff --git a/db_structure.php b/db_structure.php index ebc69154e4..898a92dfbd 100644 --- a/db_structure.php +++ b/db_structure.php @@ -58,14 +58,6 @@ $titles = PMA_buildActionTitles(); if ($num_tables == 0) { echo '

' . __('No tables found in database') . '

' . "\n"; - // Routines - require './libraries/db_routines.inc.php'; - - // Events - if (PMA_MYSQL_INT_VERSION > 50100) { - require './libraries/db_events.inc.php'; - } - if (empty($db_is_information_schema)) { require './libraries/display_create_table.lib.php'; } // end if (Create Table dialog) @@ -545,13 +537,6 @@ PMA_listNavigator($total_num_tables, $pos, $_url_params, 'db_structure.php', 'fr
50100) { - require './libraries/db_events.inc.php'; -} /** * Work on the database diff --git a/tbl_structure.php b/tbl_structure.php index 9878b9e263..d8597582ee 100644 --- a/tbl_structure.php +++ b/tbl_structure.php @@ -933,8 +933,6 @@ if ($cfg['ShowStats']) { } // END - Calc Table Space -require './libraries/tbl_triggers.lib.php'; - echo '
' . "\n"; /** From aac4d59508b44346d9568d70a51dd3e0ee57f83b Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 17:41:30 +0100 Subject: [PATCH 03/11] Support retreiving Triggers on a per-database basis. --- libraries/database_interface.lib.php | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/libraries/database_interface.lib.php b/libraries/database_interface.lib.php index 9735a8212b..43493ec9d1 100644 --- a/libraries/database_interface.lib.php +++ b/libraries/database_interface.lib.php @@ -1365,7 +1365,7 @@ function PMA_DBI_get_definition($db, $which, $name, $link = null) } /** - * returns details about the TRIGGERs of a specific table + * returns details about the TRIGGERs for a specific table or database * * @uses PMA_DBI_fetch_result() * @param string $db db name @@ -1374,20 +1374,25 @@ function PMA_DBI_get_definition($db, $which, $name, $link = null) * * @return array information about triggers (may be empty) */ -function PMA_DBI_get_triggers($db, $table, $delimiter = '//') +function PMA_DBI_get_triggers($db, $table = '', $delimiter = '//') { $result = array(); - if (! $GLOBALS['cfg']['Server']['DisableIS']) { - // Note: in http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html - // their example uses WHERE TRIGGER_SCHEMA='dbname' so let's use this - // instead of WHERE EVENT_OBJECT_SCHEMA='dbname' - $triggers = PMA_DBI_fetch_result("SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, ACTION_TIMING, ACTION_STATEMENT, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA= '" . PMA_sqlAddslashes($db,true) . "' and EVENT_OBJECT_TABLE = '" . PMA_sqlAddslashes($table, true) . "';"); + // Note: in http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html + // their example uses WHERE TRIGGER_SCHEMA='dbname' so let's use this + // instead of WHERE EVENT_OBJECT_SCHEMA='dbname' + $query = "SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_TIMING, ACTION_STATEMENT, EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA= '" . PMA_sqlAddslashes($db,true) . "';"; + if (! empty($table)) { + $query .= " AND EVENT_OBJECT_TABLE = '" . PMA_sqlAddslashes($table, true) . "';"; + } } else { - $triggers = PMA_DBI_fetch_result("SHOW TRIGGERS FROM " . PMA_backquote(PMA_sqlAddslashes($db,true)) . " LIKE '" . PMA_sqlAddslashes($table, true) . "';"); + $query = "SHOW TRIGGERS FROM " . PMA_backquote(PMA_sqlAddslashes($db,true)); + if (! empty($table)) { + $query .= " LIKE '" . PMA_sqlAddslashes($table, true) . "';"; + } } - if ($triggers) { + if ($triggers = PMA_DBI_fetch_result($query)) { foreach ($triggers as $trigger) { if ($GLOBALS['cfg']['Server']['DisableIS']) { $trigger['TRIGGER_NAME'] = $trigger['Trigger']; @@ -1398,6 +1403,7 @@ function PMA_DBI_get_triggers($db, $table, $delimiter = '//') } $one_result = array(); $one_result['name'] = $trigger['TRIGGER_NAME']; + $one_result['table'] = $trigger['EVENT_OBJECT_TABLE']; $one_result['action_timing'] = $trigger['ACTION_TIMING']; $one_result['event_manipulation'] = $trigger['EVENT_MANIPULATION']; From 44301dd2502a409be99dfa34185bcef94d0fbae7 Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 17:43:19 +0100 Subject: [PATCH 04/11] Added new tabs for Routines, Triggers and Events --- libraries/db_links.inc.php | 20 ++++++++++++++++++++ libraries/tbl_links.inc.php | 18 ++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/libraries/db_links.inc.php b/libraries/db_links.inc.php index 7eaf343a4e..8bbb6a9f57 100644 --- a/libraries/db_links.inc.php +++ b/libraries/db_links.inc.php @@ -93,6 +93,17 @@ if (! $db_is_information_schema) { $tab_privileges['text'] = __('Privileges'); $tab_privileges['icon'] = 's_rights.png'; } + $tab_routines['link'] = 'db_routines.php'; + $tab_routines['text'] = __('Routines'); + $tab_routines['icon'] = 'b_routines.png'; + + $tab_events['link'] = 'db_events.php'; + $tab_events['text'] = __('Events'); + $tab_events['icon'] = 'b_events.png'; + + $tab_triggers['link'] = 'db_triggers.php'; + $tab_triggers['text'] = __('Triggers'); + $tab_triggers['icon'] = 'b_triggers.png'; } /** @@ -110,6 +121,15 @@ if (! $db_is_information_schema) { if ($is_superuser) { $tabs[] =& $tab_privileges; } + if (PMA_MYSQL_INT_VERSION >= 50002) { + $tabs[] =& $tab_routines; + } + if (PMA_MYSQL_INT_VERSION >= 50106) { + $tabs[] =& $tab_events; + } + if (PMA_MYSQL_INT_VERSION >= 50002) { + $tabs[] =& $tab_triggers; + } } if (PMA_Tracker::isActive()) { $tabs[] =& $tab_tracking; diff --git a/libraries/tbl_links.inc.php b/libraries/tbl_links.inc.php index e31dd5305f..1a09a577ee 100644 --- a/libraries/tbl_links.inc.php +++ b/libraries/tbl_links.inc.php @@ -39,6 +39,13 @@ $err_url = $cfg['DefaultTabTable'] . PMA_generate_common_url($url_params); */ require_once './libraries/header.inc.php'; +/** + * Ensure that $db_is_information_schema is not null + */ +if (! isset($db_is_information_schema)) { + $db_is_information_schema = false; +} + /** * Displays links */ @@ -61,7 +68,7 @@ $tabs['search']['icon'] = 'b_search.png'; $tabs['search']['text'] = __('Search'); $tabs['search']['link'] = 'tbl_select.php'; -if (! (isset($db_is_information_schema) && $db_is_information_schema)) { +if (!$db_is_information_schema) { $tabs['insert']['icon'] = 'b_insrow.png'; $tabs['insert']['link'] = 'tbl_change.php'; $tabs['insert']['text'] = __('Insert'); @@ -76,7 +83,7 @@ $tabs['export']['text'] = __('Export'); * Don't display "Import" and "Operations" * for views and information_schema */ -if (! $tbl_is_view && ! (isset($db_is_information_schema) && $db_is_information_schema)) { +if (! $tbl_is_view && !$db_is_information_schema) { $tabs['import']['icon'] = 'b_tblimport.png'; $tabs['import']['link'] = 'tbl_import.php'; $tabs['import']['text'] = __('Import'); @@ -90,13 +97,16 @@ if(PMA_Tracker::isActive()) { $tabs['tracking']['text'] = __('Tracking'); $tabs['tracking']['link'] = 'tbl_tracking.php'; } -if (! $tbl_is_view && ! (isset($db_is_information_schema) && $db_is_information_schema)) { +if (! $db_is_information_schema && PMA_MYSQL_INT_VERSION >= 50002) { + $tabs['triggers']['link'] = 'tbl_triggers.php'; + $tabs['triggers']['text'] = __('Triggers'); + $tabs['triggers']['icon'] = 'b_triggers.png'; } /** * Views support a limited number of operations */ -if ($tbl_is_view && ! (isset($db_is_information_schema) && $db_is_information_schema)) { +if ($tbl_is_view && !$db_is_information_schema) { $tabs['operation']['icon'] = 'b_tblops.png'; $tabs['operation']['link'] = 'view_operations.php'; $tabs['operation']['text'] = __('Operations'); From 058b6175c12ac3f9335f369ef2161d93d4cf0e6c Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 17:49:22 +0100 Subject: [PATCH 05/11] Recycled old Routines functionality and linked it to the new entry in the menu --- db_routines.php | 40 +++++++++++++++++++++++++ libraries/common.lib.php | 2 ++ libraries/db_routines.inc.php | 55 ++++++++++++++++++++++++----------- 3 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 db_routines.php diff --git a/db_routines.php b/db_routines.php new file mode 100644 index 0000000000..c47b243f32 --- /dev/null +++ b/db_routines.php @@ -0,0 +1,40 @@ + diff --git a/libraries/common.lib.php b/libraries/common.lib.php index e8e6b8a9d0..d75eb27b26 100644 --- a/libraries/common.lib.php +++ b/libraries/common.lib.php @@ -3021,6 +3021,8 @@ function PMA_buildActionTitles() { $titles['Empty'] = PMA_getIcon('b_empty.png', __('Empty'), true); $titles['NoEmpty'] = PMA_getIcon('bd_empty.png', __('Empty'), true); $titles['Edit'] = PMA_getIcon('b_edit.png', __('Edit'), true); + $titles['Export'] = PMA_getIcon('b_export.png', __('Export'), true); + $titles['Execute'] = PMA_getIcon('b_execute.png', __('Execute'), true); return $titles; } ?> diff --git a/libraries/db_routines.inc.php b/libraries/db_routines.inc.php index d6a5b07ac4..a10c7bbc8c 100644 --- a/libraries/db_routines.inc.php +++ b/libraries/db_routines.inc.php @@ -18,17 +18,24 @@ if (! defined('PHPMYADMIN')) { exit; } +// $url_query .= '&goto=db_routines.php' . rawurlencode("?db=$db"); + $routines = PMA_DBI_fetch_result('SELECT SPECIFIC_NAME,ROUTINE_NAME,ROUTINE_TYPE,DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA= \'' . PMA_sqlAddslashes($db,true) . '\';'); -if ($routines) { - PMA_generate_slider_effect('routines', __('Routines')); - echo '
' . "\n"; - echo ' ' . __('Routines') . '' . "\n"; - echo ''; +echo '
' . "\n"; +echo ' ' . __('Routines') . '' . "\n"; + +if (! $routines) { + echo __('There are no routines to display.'); +} else { + echo ''; + echo '
'; echo sprintf(' + + ', @@ -37,12 +44,14 @@ if ($routines) { __('Return type')); $ct=0; $delimiter = '//'; + $conditional_class_add = ''; + $conditional_class_drop = ''; + $conditional_class_export = ''; if ($GLOBALS['cfg']['AjaxEnable']) { - $conditional_class = 'class="drop_procedure_anchor"'; - } else { - $conditional_class = ''; + $conditional_class_add = 'class="add_routine_anchor"'; + $conditional_class_drop = 'class="drop_procedure_anchor"'; + $conditional_class_export = 'class="export_procedure_anchor"'; } - foreach ($routines as $routine) { // information_schema (at least in MySQL 5.0.45) @@ -50,9 +59,9 @@ if ($routines) { // so we rely on PMA_DBI_get_definition() which // uses SHOW CREATE + $create_proc = PMA_DBI_get_definition($db, $routine['ROUTINE_TYPE'], $routine['SPECIFIC_NAME']); $definition = 'DROP ' . $routine['ROUTINE_TYPE'] . ' ' . PMA_backquote($routine['SPECIFIC_NAME']) . $delimiter . "\n" - . PMA_DBI_get_definition($db, $routine['ROUTINE_TYPE'], $routine['SPECIFIC_NAME']) - . "\n"; + . $create_proc . "\n"; //if ($routine['ROUTINE_TYPE'] == 'PROCEDURE') { // $sqlUseProc = 'CALL ' . $routine['SPECIFIC_NAME'] . '()'; @@ -66,15 +75,16 @@ if ($routines) { a method for running the function*/ //} if ($routine['ROUTINE_TYPE'] == 'PROCEDURE') { - $sqlDropProc = 'DROP PROCEDURE ' . PMA_backquote($routine['SPECIFIC_NAME']); + $sqlDropProc = 'DROP PROCEDURE IF EXISTS ' . PMA_backquote($routine['SPECIFIC_NAME']); } else { - $sqlDropProc = 'DROP FUNCTION ' . PMA_backquote($routine['SPECIFIC_NAME']); + $sqlDropProc = 'DROP FUNCTION IF EXISTS ' . PMA_backquote($routine['SPECIFIC_NAME']); } echo sprintf(' - + + ', @@ -82,13 +92,24 @@ if ($routines) { $sqlDropProc, $routine['ROUTINE_NAME'], ! empty($definition) ? PMA_linkOrButton('db_sql.php?' . $url_query . '&sql_query=' . urlencode($definition) . '&show_query=1&db_query_force=1&delimiter=' . urlencode($delimiter), $titles['Edit']) : ' ', - '' . $titles['Drop'] . '', + ! empty($definition) ? PMA_linkOrButton('#', $titles['Execute']) : ' ', + $create_proc, + '' . $titles['Export'] . '', + '' . $titles['Drop'] . '', $routine['ROUTINE_TYPE'], $routine['DTD_IDENTIFIER']); $ct++; } echo '
%s       %s %s
%s%s %s %s%s %s %s
'; - echo '
' . "\n"; - echo '' . "\n"; } +echo '' . "\n"; + +/** + * Display the form for adding a new routine + */ +echo '
' . "\n" + . ' ' . "\n" + . PMA_getIcon('b_routine_add.png') . __('Add a new Routine') . '' . "\n" + . '
' . "\n"; + ?> From d3210ef1b67b91a7668c7c55aad909592b558a06 Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 17:49:58 +0100 Subject: [PATCH 06/11] Recycled old Triggers functionality and linked it to the new entry in the menu --- db_triggers.php | 40 ++++++++++++++ libraries/display_triggers.inc.php | 86 ++++++++++++++++++++++++++++++ libraries/tbl_triggers.lib.php | 58 -------------------- tbl_triggers.php | 40 ++++++++++++++ 4 files changed, 166 insertions(+), 58 deletions(-) create mode 100644 db_triggers.php create mode 100644 libraries/display_triggers.inc.php delete mode 100644 libraries/tbl_triggers.lib.php create mode 100644 tbl_triggers.php diff --git a/db_triggers.php b/db_triggers.php new file mode 100644 index 0000000000..3a358cc462 --- /dev/null +++ b/db_triggers.php @@ -0,0 +1,40 @@ + diff --git a/libraries/display_triggers.inc.php b/libraries/display_triggers.inc.php new file mode 100644 index 0000000000..513a700bbd --- /dev/null +++ b/libraries/display_triggers.inc.php @@ -0,0 +1,86 @@ +' . "\n"; +echo ' ' . __('Triggers') . '' . "\n"; +if (! $triggers) { + echo __('There are no triggers to display.'); +} else { + echo ''; + echo '' . "\n"; + + // Print table header + echo "\n\n"; + if (empty($table)) { + // if we don't have a table name, we will be showing the per-database list. + // so we must specify which table each trigger belongs to + echo "\n"; + } + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo ""; + + $ct=0; + $delimiter = '//'; + $conditional_class_add = ''; + $conditional_class_drop = ''; + $conditional_class_export = ''; + if ($GLOBALS['cfg']['AjaxEnable']) { + $conditional_class_add = 'class="add_trigger_anchor"'; + $conditional_class_drop = 'class="drop_trigger_anchor"'; + $conditional_class_export = 'class="export_trigger_anchor"'; + } + // Print table contents + foreach ($triggers as $trigger) { + $drop_and_create = $trigger['drop'] . $delimiter . "\n" . $trigger['create'] . "\n"; + $row = ($ct%2 == 0) ? 'even' : 'odd'; + $editlink = PMA_linkOrButton('tbl_sql.php?' . $url_query . '&sql_query=' + . urlencode($drop_and_create) . '&show_query=1&delimiter=' . urlencode($delimiter), $titles['Edit']); + $exprlink = '' . $titles['Export'] . ''; + $droplink = '' . $titles['Drop'] . ''; + + echo "\n"; + echo "\n"; + if (empty($table)) { + echo "\n"; + } + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + $ct++; + } + echo '
" . __('Name') . "" . __('Table') . "   " . __('Time') . "" . __('Event') . "
"; + echo "{$trigger['name']}"; + echo $trigger['table'] . "$editlink$exprlink$droplink{$trigger['action_timing']}{$trigger['event_manipulation']}
'; +} +echo ''; + +/** + * Display the form for adding a new trigger + */ +if (! empty($table)) { + echo '
' . "\n" + . ' ' . "\n" + . PMA_getIcon('b_trigger_add.png') . __('Add a new Trigger') . '' . "\n" + . '
' . "\n"; +} + +?> diff --git a/libraries/tbl_triggers.lib.php b/libraries/tbl_triggers.lib.php deleted file mode 100644 index 0663ef4a99..0000000000 --- a/libraries/tbl_triggers.lib.php +++ /dev/null @@ -1,58 +0,0 @@ -' . "\n"; - echo '' . "\n"; - echo ' ' . "\n"; - echo sprintf(' - - - - - - ', - __('Name'), - __('Time'), - __('Event')); - $ct=0; - $delimiter = '//'; - if ($GLOBALS['cfg']['AjaxEnable']) { - $conditional_class = 'class="drop_trigger_anchor"'; - } else { - $conditional_class = ''; - } - - foreach ($triggers as $trigger) { - $drop_and_create = $trigger['drop'] . $delimiter . "\n" . $trigger['create'] . "\n"; - - echo sprintf(' - - - - - - ', - ($ct%2 == 0) ? 'even' : 'odd', - $trigger['name'], - PMA_linkOrButton('tbl_sql.php?' . $url_query . '&sql_query=' . urlencode($drop_and_create) . '&show_query=1&delimiter=' . urlencode($delimiter), $titles['Change']), - '' . $titles['Drop'] . '', - $trigger['action_timing'], - $trigger['event_manipulation']); - $ct++; - } - echo '
' . __('Triggers') . '
%s  %s%s
%s%s%s%s%s
'; - echo '' . "\n"; -} -?> diff --git a/tbl_triggers.php b/tbl_triggers.php new file mode 100644 index 0000000000..a35e99f7f5 --- /dev/null +++ b/tbl_triggers.php @@ -0,0 +1,40 @@ + From d2728442f8807a051da28083f00a5779d1c5f00c Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 17:50:14 +0100 Subject: [PATCH 07/11] Recycled old Events functionality and linked it to the new entry in the menu --- db_events.php | 40 +++++++++++++++++++++++++++++ libraries/db_events.inc.php | 50 +++++++++++++++++++++++++------------ 2 files changed, 74 insertions(+), 16 deletions(-) create mode 100644 db_events.php diff --git a/db_events.php b/db_events.php new file mode 100644 index 0000000000..c238df777d --- /dev/null +++ b/db_events.php @@ -0,0 +1,40 @@ + diff --git a/libraries/db_events.inc.php b/libraries/db_events.inc.php index 6e93299ac0..780b315ecd 100644 --- a/libraries/db_events.inc.php +++ b/libraries/db_events.inc.php @@ -10,25 +10,31 @@ if (! defined('PHPMYADMIN')) { $events = PMA_DBI_fetch_result('SELECT EVENT_NAME, EVENT_TYPE FROM information_schema.EVENTS WHERE EVENT_SCHEMA= \'' . PMA_sqlAddslashes($db,true) . '\';'); -if ($events) { - PMA_generate_slider_effect('events', __('Events')); - echo '
' . "\n"; - echo ' ' . __('Events') . '' . "\n"; - echo ''; +echo '
' . "\n"; +echo ' ' . __('Events') . '' . "\n"; +if (! $events) { + echo __('There are no events to display.'); +} else { + echo ''; + echo '
'; echo sprintf(' + ', __('Name'), __('Type')); $ct=0; $delimiter = '//'; + $conditional_class_add = ''; + $conditional_class_drop = ''; + $conditional_class_export = ''; if ($GLOBALS['cfg']['AjaxEnable']) { - $conditional_class = 'class="drop_event_anchor"'; - } else { - $conditional_class = ''; + $conditional_class_add = 'class="add_event_anchor"'; + $conditional_class_drop = 'class="drop_event_anchor"'; + $conditional_class_export = 'class="export_event_anchor"'; } foreach ($events as $event) { @@ -36,26 +42,38 @@ if ($events) { // the full CREATE EVENT statement in a way that could be useful for us // so we rely on PMA_DBI_get_definition() which uses SHOW CREATE EVENT - $definition = 'DROP EVENT ' . PMA_backquote($event['EVENT_NAME']) . $delimiter . "\n" - . PMA_DBI_get_definition($db, 'EVENT', $event['EVENT_NAME']) - . "\n"; + $create_event = PMA_DBI_get_definition($db, 'EVENT', $event['EVENT_NAME']); + $definition = 'DROP EVENT IF EXISTS ' . PMA_backquote($event['EVENT_NAME']) + . $delimiter . "\n" . $create_event . "\n"; $sqlDrop = 'DROP EVENT ' . PMA_backquote($event['EVENT_NAME']); echo sprintf(' - + + ', ($ct%2 == 0) ? 'even' : 'odd', + $sqlDrop, $event['EVENT_NAME'], - ! empty($definition) ? PMA_linkOrButton('db_sql.php?' . $url_query . '&sql_query=' . urlencode($definition) . '&show_query=1&db_query_force=1&delimiter=' . urlencode($delimiter), $titles['Structure']) : ' ', - '' . $titles['Drop'] . '', + ! empty($definition) ? PMA_linkOrButton('db_sql.php?' . $url_query . '&sql_query=' . urlencode($definition) . '&show_query=1&db_query_force=1&delimiter=' . urlencode($delimiter), $titles['Edit']) : ' ', + $create_event, + '' . $titles['Export'] . '', + '' . $titles['Drop'] . '', $event['EVENT_TYPE']); $ct++; } echo '
%s      %s
%s%s %s%s %s %s
'; - echo '
' . "\n"; - echo '' . "\n"; } +echo '' . "\n"; + +/** + * Display the form for adding a new event + */ +echo '
' . "\n" + . ' ' . "\n" + . PMA_getIcon('b_event_add.png') . __('Add a new Event') . '' . "\n" + . '
' . "\n"; + ?> From 63693133e2cc01adfe7a2891feadb4d2864a7468 Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 17:52:56 +0100 Subject: [PATCH 08/11] Moved JS related to Routines, Triggers and Events into their own files. --- js/db_events.js | 67 ++++++++++++++++++++++++++++++++++++++ js/db_routines.js | 67 ++++++++++++++++++++++++++++++++++++++ js/db_structure.js | 74 ------------------------------------------ js/display_triggers.js | 67 ++++++++++++++++++++++++++++++++++++++ js/functions.js | 40 ----------------------- 5 files changed, 201 insertions(+), 114 deletions(-) create mode 100644 js/db_events.js create mode 100644 js/db_routines.js create mode 100644 js/display_triggers.js diff --git a/js/db_events.js b/js/db_events.js new file mode 100644 index 0000000000..23e559999f --- /dev/null +++ b/js/db_events.js @@ -0,0 +1,67 @@ +$(document).ready(function() { + /** + * Ajax Event handler for 'Drop Event' + * + * @uses $.PMA_confirm() + * @uses PMA_ajaxShowMessage() + * @see $cfg['AjaxEnable'] + */ + $('.drop_event_anchor').live('click', function(event) { + event.preventDefault(); + + /** + * @var curr_event_row Object reference to current event's row + */ + var $curr_event_row = $(this).parents('tr'); + /** + * @var question String containing the question to be asked for confirmation + */ + var question = $curr_event_row.children('td').children('.drop_sql').text(); + + $(this).PMA_confirm(question, $(this).attr('href') , function(url) { + + PMA_ajaxShowMessage(PMA_messages['strDroppingEvent']); + + $.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) { + if(data.success == true) { + PMA_ajaxShowMessage(data.message); + $("#result_query").remove(); + if ($('#event_list tr').length == 2) { + $('#event_list').remove(); + $('#no_events').show(); + } else { + $curr_event_row.hide("medium").remove(); + } + } + else { + PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error); + } + }) // end $.get() + }) // end $.PMA_confirm() + }) // end Drop Event + + /** + * Ajax Event handler for 'Export Event' + * + * @see $cfg['AjaxEnable'] + */ + $('.export_event_anchor').live('click', function(event) { + event.preventDefault(); + + /** + * @var button_options Object containing options for jQueryUI dialog buttons + */ + var button_options = {}; + button_options[PMA_messages['strClose']] = function() {$(this).dialog("close").remove();} + /** + * @var button_options The export SQL query to display to the user + */ + var query = $(this).parents('tr').find('.create_sql').html(); + + // show dialog + $('
').dialog({ + width: 450, + buttons: button_options + }).find('textarea').width('100%'); + }); // end Export Procedure +}, 'top.frame_content'); //end $(document).ready() for Drop Event diff --git a/js/db_routines.js b/js/db_routines.js new file mode 100644 index 0000000000..3fbd012e26 --- /dev/null +++ b/js/db_routines.js @@ -0,0 +1,67 @@ +$(document).ready(function() { + /** + * Ajax Event handler for 'Drop Procedure' + * + * @uses $.PMA_confirm() + * @uses PMA_ajaxShowMessage() + * @see $cfg['AjaxEnable'] + */ + $('.drop_procedure_anchor').live('click', function(event) { + event.preventDefault(); + + /** + * @var curr_proc_row Object containing reference to the current procedure's row + */ + var $curr_proc_row = $(this).parents('tr'); + /** + * @var question String containing the question to be asked for confirmation + */ + var question = $curr_proc_row.children('td').children('.drop_sql').text(); + + $(this).PMA_confirm(question, $(this).attr('href'), function(url) { + + PMA_ajaxShowMessage(PMA_messages['strDroppingProcedure']); + + $.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) { + if(data.success == true) { + PMA_ajaxShowMessage(data.message); + $("#result_query").remove(); + if ($('#routine_list tr').length == 2) { + $('#routine_list').remove(); + $('#no_routines').show(); + } else { + $curr_proc_row.hide("medium").remove(); + } + } + else { + PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error); + } + }) // end $.get() + }) // end $.PMA_confirm() + }); // end Drop Procedure + + /** + * Ajax Event handler for 'Export Procedure' + * + * @see $cfg['AjaxEnable'] + */ + $('.export_procedure_anchor').live('click', function(event) { + event.preventDefault(); + + /** + * @var button_options Object containing options for jQueryUI dialog buttons + */ + var button_options = {}; + button_options[PMA_messages['strClose']] = function() {$(this).dialog("close").remove();} + /** + * @var button_options The export SQL query to display to the user + */ + var query = $(this).parents('tr').find('.create_sql').html(); + + // show dialog + $('
').dialog({ + width: 450, + buttons: button_options + }).find('textarea').width('100%'); + }); // end Export Procedure +}, 'top.frame_content'); //end $(document).ready() for Drop Procedure diff --git a/js/db_structure.js b/js/db_structure.js index 4affd75bd2..2693a0e11e 100644 --- a/js/db_structure.js +++ b/js/db_structure.js @@ -147,80 +147,6 @@ $(document).ready(function() { }); // end $.PMA_confirm() }); //end of Drop Table Ajax action - /** - * Ajax Event handler for 'Drop Event' - * - * @uses $.PMA_confirm() - * @uses PMA_ajaxShowMessage() - * @see $cfg['AjaxEnable'] - */ - $('.drop_event_anchor').live('click', function(event) { - event.preventDefault(); - - /** - * @var curr_event_row Object reference to current event's row - */ - var curr_event_row = $(this).parents('tr'); - /** - * @var curr_event_name String containing the name of {@link curr_event_row} - */ - var curr_event_name = $(curr_event_row).children('td:first').text(); - /** - * @var question String containing the question to be asked for confirmation - */ - var question = 'DROP EVENT ' + curr_event_name; - - $(this).PMA_confirm(question, $(this).attr('href') , function(url) { - - PMA_ajaxShowMessage(PMA_messages['strDroppingEvent']); - - $.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) { - if(data.success == true) { - PMA_ajaxShowMessage(data.message); - $(curr_event_row).hide("medium").remove(); - } - else { - PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error); - } - }) // end $.get() - }) // end $.PMA_confirm() - }) //end Drop Event - - /** - * Ajax Event handler for 'Drop Procedure' - * - * @uses $.PMA_confirm() - * @uses PMA_ajaxShowMessage() - * @see $cfg['AjaxEnable'] - */ - $('.drop_procedure_anchor').live('click', function(event) { - event.preventDefault(); - - /** - * @var curr_proc_row Object containing reference to the current procedure's row - */ - var curr_proc_row = $(this).parents('tr'); - /** - * @var question String containing the question to be asked for confirmation - */ - var question = $(curr_proc_row).children('td').children('.drop_procedure_sql').val(); - - $(this).PMA_confirm(question, $(this).attr('href'), function(url) { - - PMA_ajaxShowMessage(PMA_messages['strDroppingProcedure']); - - $.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) { - if(data.success == true) { - PMA_ajaxShowMessage(data.message); - $(curr_event_row).hide("medium").remove(); - } - else { - PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error); - } - }) // end $.get() - }) // end $.PMA_confirm() - }) //end Drop Procedure - /** * Ajax Event handler for 'Drop tracking' * diff --git a/js/display_triggers.js b/js/display_triggers.js new file mode 100644 index 0000000000..447f20a1f0 --- /dev/null +++ b/js/display_triggers.js @@ -0,0 +1,67 @@ +$(document).ready(function() { + /** + * Ajax Event handler for 'Drop Trigger' + * + * @uses $.PMA_confirm() + * @uses PMA_ajaxShowMessage() + * @see $cfg['AjaxEnable'] + */ + $(".drop_trigger_anchor").live('click', function(event) { + event.preventDefault(); + + /** + * @var curr_row Object reference to the current trigger's + */ + var $curr_trig_row = $(this).parents('tr'); + /** + * @var question String containing the question to be asked for confirmation + */ + var question = $curr_trig_row.children('td').children('.drop_sql').text(); + + $(this).PMA_confirm(question, $(this).attr('href'), function(url) { + + PMA_ajaxShowMessage(PMA_messages['strProcessingRequest']); + + $.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) { + if(data.success == true) { + PMA_ajaxShowMessage(data.message); + $("#result_query").remove(); + if ($('#trigger_list tr').length == 2) { + $('#trigger_list').remove(); + $('#no_triggers').show(); + } else { + $curr_trig_row.hide("medium").remove(); + } + } + else { + PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error); + } + }) // end $.get() + }) // end $.PMA_confirm() + }) // end $().live() + + /** + * Ajax Event handler for 'Export Trigger' + * + * @see $cfg['AjaxEnable'] + */ + $('.export_trigger_anchor').live('click', function(event) { + event.preventDefault(); + + /** + * @var button_options Object containing options for jQueryUI dialog buttons + */ + var button_options = {}; + button_options[PMA_messages['strClose']] = function() {$(this).dialog("close").remove();} + /** + * @var button_options The export SQL query to display to the user + */ + var query = $(this).parents('tr').find('.create_sql').html(); + + // show dialog + $('
').dialog({ + width: 450, + buttons: button_options + }).find('textarea').width('100%'); + }); // end Export Procedure +}, 'top.frame_content'); //end $(document).ready() for Drop Trigger diff --git a/js/functions.js b/js/functions.js index a5118df9a2..ab4bd7083d 100644 --- a/js/functions.js +++ b/js/functions.js @@ -1601,46 +1601,6 @@ $(document).ready(function() { }, 'top.frame_content'); //end $(document).ready for 'Create Table' -/** - * Attach Ajax event handlers for Drop Trigger. Used on tbl_structure.php - * @see $cfg['AjaxEnable'] - */ -$(document).ready(function() { - - $(".drop_trigger_anchor").live('click', function(event) { - event.preventDefault(); - - $anchor = $(this); - /** - * @var curr_row Object reference to the current trigger's - */ - var $curr_row = $anchor.parents('tr'); - /** - * @var question String containing the question to be asked for confirmation - */ - var question = 'DROP TRIGGER IF EXISTS `' + $curr_row.children('td:first').text() + '`'; - - $anchor.PMA_confirm(question, $anchor.attr('href'), function(url) { - - PMA_ajaxShowMessage(PMA_messages['strProcessingRequest']); - $.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) { - if(data.success == true) { - PMA_ajaxShowMessage(data.message); - $("#topmenucontainer") - .next('div') - .remove() - .end() - .after(data.sql_query); - $curr_row.hide("medium").remove(); - } - else { - PMA_ajaxShowMessage(data.error); - } - }) // end $.get() - }) // end $.PMA_confirm() - }) // end $().live() -}, 'top.frame_content'); //end $(document).ready() for Drop Trigger - /** * Attach Ajax event handlers for Drop Database. Moved here from db_structure.js * as it was also required on db_create.php From ebce205059a939b04d77f3dbfa2ec59d14693ee3 Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 18:10:46 +0100 Subject: [PATCH 09/11] Updated documentation --- Documentation.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation.html b/Documentation.html index 5b3da22006..192fec4d35 100644 --- a/Documentation.html +++ b/Documentation.html @@ -137,6 +137,8 @@ vim: expandtab ts=4 sw=4 sts=4 tw=78 FAQ 3.6)
  • support mysqli, the improved MySQL extension (see FAQ 1.17)
  • +
  • create, edit, call, export and drop stored procedures and functions
  • +
  • create, edit, export and drop events and triggers
  • communicate in 62 different languages
  • synchronize two databases residing on the same as well as remote servers @@ -5082,6 +5084,8 @@ Jakub Wilk, Thomas Michael Winningham, Vilius Zigmantas, "Manuzhai".
  • SSL (Secure Sockets Layer) - a cryptographic protocol which provides secure communication on the Internet.
  • +
  • Stored procedure + - a subroutine available to applications accessing a relational database system
  • SQL - Structured Query Language
  • table @@ -5093,6 +5097,9 @@ Jakub Wilk, Thomas Michael Winningham, Vilius Zigmantas, "Manuzhai". - a type of archive file format: the Tape ARchive format.
  • TCP (Transmission Control Protocol) - one of the core protocols of the Internet protocol suite.
  • +
  • trigger + - a procedural code that is automatically executed in response to + certain events on a particular table or view in a database
  • UFPDF - Unicode/UTF-8 extension for FPDF
  • URL (Uniform Resource Locator) From e80c65a88a6da66ace528a95f7ed7039ac856bfb Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 18:48:17 +0100 Subject: [PATCH 10/11] Show status of the event scheduler and offer option to toggle it --- libraries/db_events.inc.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/libraries/db_events.inc.php b/libraries/db_events.inc.php index 780b315ecd..92e4ea259a 100644 --- a/libraries/db_events.inc.php +++ b/libraries/db_events.inc.php @@ -68,11 +68,31 @@ if (! $events) { } echo '' . "\n"; +/** + * Display the state of the event scheduler + * and offer an option to toggle it. + */ +if (! empty($_GET['toggle_scheduler'])) { + $new_scheduler_state = $_GET['toggle_scheduler']; + if ($new_scheduler_state === 'ON' || $new_scheduler_state === 'OFF') { + PMA_DBI_query("SET GLOBAL event_scheduler='$new_scheduler_state'"); + } +} +$es_state = PMA_DBI_fetch_value("SHOW GLOBAL VARIABLES LIKE 'event_scheduler'", 0, 1); +if ($es_state === 'ON' || $es_state === 'OFF') { + $es_change = ($es_state == 'ON') ? 'OFF' : 'ON'; + echo '
    ' . "\n" . PMA_getIcon('b_events.png') . __('The event scheduler is ') . $es_state . ':' + . ' ' + . __('Turn') . " $es_change\n" + . '' . "\n" + . '
    ' . "\n"; +} + /** * Display the form for adding a new event */ echo '
    ' . "\n" - . ' ' . "\n" + . ' ' . "\n" . PMA_getIcon('b_event_add.png') . __('Add a new Event') . '' . "\n" . '
    ' . "\n"; From 0c6cceef136e8ec3de7e2e34f91ac91637811588 Mon Sep 17 00:00:00 2001 From: Rouslan Date: Sat, 21 May 2011 19:33:42 +0100 Subject: [PATCH 11/11] E_ALL fixes --- db_events.php | 1 + db_routines.php | 1 + db_triggers.php | 1 + libraries/db_events.inc.php | 17 +++++++++-------- libraries/db_routines.inc.php | 17 +++++++++-------- libraries/display_triggers.inc.php | 17 +++++++++-------- 6 files changed, 30 insertions(+), 24 deletions(-) diff --git a/db_events.php b/db_events.php index c238df777d..9577b4af80 100644 --- a/db_events.php +++ b/db_events.php @@ -10,6 +10,7 @@ $GLOBALS['js_include'][] = 'db_events.js'; require_once './libraries/common.lib.php'; require_once './libraries/db_common.inc.php'; +require_once './libraries/db_info.inc.php'; /** * Create labels for the list diff --git a/db_routines.php b/db_routines.php index c47b243f32..b5c17d88e8 100644 --- a/db_routines.php +++ b/db_routines.php @@ -10,6 +10,7 @@ $GLOBALS['js_include'][] = 'db_routines.js'; require_once './libraries/common.lib.php'; require_once './libraries/db_common.inc.php'; +require_once './libraries/db_info.inc.php'; /** * Create labels for the list diff --git a/db_triggers.php b/db_triggers.php index 3a358cc462..834332a750 100644 --- a/db_triggers.php +++ b/db_triggers.php @@ -10,6 +10,7 @@ $GLOBALS['js_include'][] = 'display_triggers.js'; require_once './libraries/common.lib.php'; require_once './libraries/db_common.inc.php'; +require_once './libraries/db_info.inc.php'; /** * Create labels for the list diff --git a/libraries/db_events.inc.php b/libraries/db_events.inc.php index 92e4ea259a..888286288f 100644 --- a/libraries/db_events.inc.php +++ b/libraries/db_events.inc.php @@ -10,6 +10,15 @@ if (! defined('PHPMYADMIN')) { $events = PMA_DBI_fetch_result('SELECT EVENT_NAME, EVENT_TYPE FROM information_schema.EVENTS WHERE EVENT_SCHEMA= \'' . PMA_sqlAddslashes($db,true) . '\';'); +$conditional_class_add = ''; +$conditional_class_drop = ''; +$conditional_class_export = ''; +if ($GLOBALS['cfg']['AjaxEnable']) { + $conditional_class_add = 'class="add_event_anchor"'; + $conditional_class_drop = 'class="drop_event_anchor"'; + $conditional_class_export = 'class="export_event_anchor"'; +} + echo '
    ' . "\n"; echo ' ' . __('Events') . '' . "\n"; if (! $events) { @@ -28,14 +37,6 @@ if (! $events) { __('Type')); $ct=0; $delimiter = '//'; - $conditional_class_add = ''; - $conditional_class_drop = ''; - $conditional_class_export = ''; - if ($GLOBALS['cfg']['AjaxEnable']) { - $conditional_class_add = 'class="add_event_anchor"'; - $conditional_class_drop = 'class="drop_event_anchor"'; - $conditional_class_export = 'class="export_event_anchor"'; - } foreach ($events as $event) { // information_schema (at least in MySQL 5.1.22) does not return diff --git a/libraries/db_routines.inc.php b/libraries/db_routines.inc.php index a10c7bbc8c..708bfdd5d5 100644 --- a/libraries/db_routines.inc.php +++ b/libraries/db_routines.inc.php @@ -22,6 +22,15 @@ if (! defined('PHPMYADMIN')) { $routines = PMA_DBI_fetch_result('SELECT SPECIFIC_NAME,ROUTINE_NAME,ROUTINE_TYPE,DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA= \'' . PMA_sqlAddslashes($db,true) . '\';'); +$conditional_class_add = ''; +$conditional_class_drop = ''; +$conditional_class_export = ''; +if ($GLOBALS['cfg']['AjaxEnable']) { + $conditional_class_add = 'class="add_routine_anchor"'; + $conditional_class_drop = 'class="drop_procedure_anchor"'; + $conditional_class_export = 'class="export_procedure_anchor"'; +} + echo '
    ' . "\n"; echo ' ' . __('Routines') . '' . "\n"; @@ -44,14 +53,6 @@ if (! $routines) { __('Return type')); $ct=0; $delimiter = '//'; - $conditional_class_add = ''; - $conditional_class_drop = ''; - $conditional_class_export = ''; - if ($GLOBALS['cfg']['AjaxEnable']) { - $conditional_class_add = 'class="add_routine_anchor"'; - $conditional_class_drop = 'class="drop_procedure_anchor"'; - $conditional_class_export = 'class="export_procedure_anchor"'; - } foreach ($routines as $routine) { // information_schema (at least in MySQL 5.0.45) diff --git a/libraries/display_triggers.inc.php b/libraries/display_triggers.inc.php index 513a700bbd..e1237d14d8 100644 --- a/libraries/display_triggers.inc.php +++ b/libraries/display_triggers.inc.php @@ -12,6 +12,15 @@ $url_query .= '&goto=tbl_triggers.php'; $triggers = PMA_DBI_get_triggers($db, $table); +$conditional_class_add = ''; +$conditional_class_drop = ''; +$conditional_class_export = ''; +if ($GLOBALS['cfg']['AjaxEnable']) { + $conditional_class_add = 'class="add_trigger_anchor"'; + $conditional_class_drop = 'class="drop_trigger_anchor"'; + $conditional_class_export = 'class="export_trigger_anchor"'; +} + echo '
    ' . "\n"; echo ' ' . __('Triggers') . '' . "\n"; if (! $triggers) { @@ -36,14 +45,6 @@ if (! $triggers) { $ct=0; $delimiter = '//'; - $conditional_class_add = ''; - $conditional_class_drop = ''; - $conditional_class_export = ''; - if ($GLOBALS['cfg']['AjaxEnable']) { - $conditional_class_add = 'class="add_trigger_anchor"'; - $conditional_class_drop = 'class="drop_trigger_anchor"'; - $conditional_class_export = 'class="export_trigger_anchor"'; - } // Print table contents foreach ($triggers as $trigger) { $drop_and_create = $trigger['drop'] . $delimiter . "\n" . $trigger['create'] . "\n";