@@ -5,20 +5,26 @@ _php_plugin_desc()
55}
66
77# get env key from a service starting with "php" or "apache"
8- # _php_get_service_env_key "ENV_VARIABLE"
9- _php_get_service_env_key ()
8+ # _php_get_service_key "ENV_VARIABLE"
9+ _php_get_service_key ()
1010{
11- local env_var=$1
11+ local service_key=$1
12+ local service_value=$2
1213
13- local service_keys service_key
14+ local services service
1415 local dc_key
1516
16- service_keys =$( ${VENDORS_BIN_JYPARSER} " ${dc_file} " get " .services | keys" | cut -c3-)
17- for service_key in ${service_keys }
17+ services =$( ${VENDORS_BIN_JYPARSER} " ${dc_file} " get " .services | keys" | cut -c3-)
18+ for service in ${services }
1819 do
1920 # if a service start with "php" or "apache", stop and get his env key
20- if [[ " ${service_key} " == php* ]] || [[ " ${service_key} " == apache* ]]; then
21- dc_key=" .services.${service_key} .environment.${env_var} "
21+ if [[ " ${service} " == php* ]] || [[ " ${service} " == apache* ]]; then
22+ dc_key=" .services.${service} .${service_key} "
23+
24+ if [ ! -z " ${service_value} " ]; then
25+ dc_key=" ${dc_key} .${service_value} "
26+ fi
27+
2228 break
2329 fi
2430 done
@@ -114,7 +120,7 @@ php_xdebug()
114120 exit 1
115121 fi
116122
117- if ! dc_key =$( _php_get_service_env_key " PHP_XDEBUG" ) ; then
123+ if ! dc_xdebug_key =$( _php_get_service_key " environment " " PHP_XDEBUG" ) ; then
118124 exit 1
119125 fi
120126
@@ -123,33 +129,102 @@ php_xdebug()
123129 enable) xdebug_value=1;;
124130 disable) xdebug_value=0;;
125131 switch)
126- xdebug_value=$( ${VENDORS_BIN_JYPARSER} " ${dc_file} " get " ${dc_key } " )
132+ xdebug_value=$( ${VENDORS_BIN_JYPARSER} " ${dc_file} " get " ${dc_xdebug_key } " )
127133 [ " ${xdebug_value} " == " null" ] && xdebug_value=0
128134 # value can be 1 or 0, so substract to reverse
129135 xdebug_value=$(( 1 - xdebug_value))
130136 ;;
131137 esac
132138
133-
139+ local dc_xdebug_value= $( ${VENDORS_BIN_JYPARSER} " ${dc_file} " get " ${dc_xdebug_key} " )
134140 if [ ${xdebug_value} -eq 0 ]; then
135- ${VENDORS_BIN_JYPARSER} " ${dc_file} " del " ${dc_key} " > " ${dc_file_tmp} " \
141+ _check_xdebug_state ${dc_xdebug_value} ${xdebug_value}
142+
143+ ${VENDORS_BIN_JYPARSER} " ${dc_file} " del " ${dc_xdebug_key} " > " ${dc_file_tmp} " \
136144 && mv " ${dc_file_tmp} " " ${dc_file} "
145+ _disable_debugger
137146 ret=$?
138147 message=" XDebug disabled"
139148 else
140- ${VENDORS_BIN_JYPARSER} " ${dc_file} " set " ${dc_key} " 1 > " ${dc_file_tmp} " \
149+ _check_xdebug_state ${dc_xdebug_value} ${xdebug_value}
150+
151+ ${VENDORS_BIN_JYPARSER} " ${dc_file} " set " ${dc_xdebug_key} " 1 > " ${dc_file_tmp} " \
141152 && mv " ${dc_file_tmp} " " ${dc_file} "
153+ _enable_debugger
142154 ret=$?
143155 message=" XDebug enabled"
144156 fi
145157
146158 # refresh container
147159 if [ $ret -eq 0 ]; then
148160 echo " ${message} "
149- $0 up
161+ # $0 up
150162 fi
163+ }
151164
165+ _enable_debugger ()
166+ {
167+ local phpstorm_ip
168+ local plugin_dir=" $( _plugin_files_dir " php" ) "
169+ local origin_xdebug_config_file=" ${plugin_dir} /90-xdebug-config.ini"
170+ local dc_volumes_key=$( _php_get_service_key " volumes" )
171+ local dc_ide_config_key=$( _php_get_service_key " environment" " PHP_IDE_CONFIG" )
172+ local dc_volumes_length
173+ local dc_xdebug_env_value
174+
175+ if [[ -f " ${origin_xdebug_config_file} " ]]; then
176+ target_xdebug_config=" .led/90-xdebug-config.ini"
177+
178+ # get the ip of docker network
179+ phpstorm_ip=$( docker network inspect bridge | jq -r ' .[].IPAM.Config[].Gateway' )
180+ # put it into xdebug config file
181+ sed " s/DOCKER_IP/${phpstorm_ip} /" " ${origin_xdebug_config_file} " > " ${target_xdebug_config} "
182+ dc_xdebug_env_value=" ${target_xdebug_config} :/etc/php.d/90-xdebug-config.ini"
183+
184+ dc_volumes_length=$( ${VENDORS_BIN_JYPARSER} " ${dc_file} " get " ${dc_volumes_key} | length" )
185+ # edit docker-compose file
186+ ${VENDORS_BIN_JYPARSER} " ${dc_file} " set " ${dc_volumes_key} [${dc_volumes_length} ]" \" ${dc_xdebug_env_value} \" > " ${dc_file_tmp} " \
187+ && mv " ${dc_file_tmp} " " ${dc_file} "
188+ ${VENDORS_BIN_JYPARSER} " ${dc_file} " set " ${dc_ide_config_key} " \" serverName=localhost\" > " ${dc_file_tmp} " \
189+ && mv " ${dc_file_tmp} " " ${dc_file} "
190+ fi
191+ }
152192
193+ _disable_debugger ()
194+ {
195+ local dc_volumes_key=$( _php_get_service_key " volumes" )
196+ local dc_ide_config_key=$( _php_get_service_key " environment" " PHP_IDE_CONFIG" )
197+ local dc_volumes_length
198+ target_xdebug_config=" .led/90-xdebug-config.ini"
199+ dc_volumes_length=$( ${VENDORS_BIN_JYPARSER} " ${dc_file} " get " ${dc_volumes_key} | length" )
200+
201+ # edit docker-compose file
202+ ${VENDORS_BIN_JYPARSER} " ${dc_file} " del " ${dc_volumes_key} [${dc_volumes_length} - 1]" > " ${dc_file_tmp} " \
203+ && mv " ${dc_file_tmp} " " ${dc_file} "
204+ ${VENDORS_BIN_JYPARSER} " ${dc_file} " del " ${dc_ide_config_key} " > " ${dc_file_tmp} " \
205+ && mv " ${dc_file_tmp} " " ${dc_file} "
206+
207+ if [[ -e " ${target_xdebug_config} " ]]; then
208+ rm " ${target_xdebug_config} "
209+ fi
210+ }
211+
212+ # Checks the state of xDebug in led, in order to avoid that some
213+ # manipulations are performed several times in a row
214+ _check_xdebug_state ()
215+ {
216+ local dc_xdebug_value=$1
217+ local xdebug_arg_value=$2
218+
219+ if [[ " ${dc_xdebug_value} " -eq 0 && " ${xdebug_arg_value} " -eq 0 ]]; then
220+ echo " Xdebug is already disabled"
221+ exit 1;
222+ fi
223+
224+ if [[ " ${dc_xdebug_value} " -eq 1 && " ${xdebug_arg_value} " -eq 1 ]]; then
225+ echo " Xdebug is already enabled"
226+ exit 1;
227+ fi
153228}
154229
155230# memory
@@ -182,7 +257,7 @@ php_memory()
182257 exit 1
183258 fi
184259
185- if ! dc_key=$( _php_get_service_env_key " PHP_MEMORY_LIMIT" ) ; then
260+ if ! dc_key=$( _php_get_service_key " environment " " PHP_MEMORY_LIMIT" ) ; then
186261 exit 1
187262 fi
188263
0 commit comments