capistrano-typo3 0.2.4 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,52 @@
1
+ class DT3Div
2
+ def self.downloadTo(src_url,src_path,dest_filepath)
3
+ p src_url
4
+ p src_path
5
+ p dest_filepath
6
+ Net::HTTP.start(src_url) { |http2|
7
+ resp2 = http2.get(src_path)
8
+ open(dest_filepath, "w+") { |file2|
9
+ file2.write(resp2.body)
10
+ }
11
+ }
12
+ return true
13
+ end
14
+
15
+ def self.checkValidDir(dir)
16
+ if dir!= '..' and dir != '.' and dir!= '.svn' and dir!= '.git'
17
+ return true
18
+ else
19
+ return false
20
+ end
21
+ end
22
+
23
+ def self.rmsymlink(symlink)
24
+ if File.symlink?( symlink )
25
+ FileUtils.rm_r( symlink )
26
+ end
27
+ end
28
+
29
+ def self.hashlist_to_table_string(hashlist)
30
+
31
+ if(hashlist.count < 1)
32
+ return
33
+ end
34
+
35
+ table = Text::Table.new
36
+ table.head = []
37
+ table.rows = []
38
+
39
+ hashlist[0].each {|key,val|
40
+ table.head << key
41
+ }
42
+ hashlist.each {|keyd_row|
43
+ row = []
44
+ keyd_row.each {|key,val|
45
+ row << val
46
+ }
47
+ table.rows << row
48
+ }
49
+
50
+ return table.to_s
51
+ end
52
+ end
@@ -0,0 +1,179 @@
1
+ class DT3MySQL
2
+
3
+ def self.mysql_executable_dir
4
+ if fetch(:rake_mysql_exec_dir)
5
+ return fetch(:rake_mysql_exec_dir)
6
+ else
7
+ return '/usr/bin'
8
+ end
9
+ end
10
+
11
+ def self.flush_tables
12
+ tablelist = `#{self.create_mysql_base_command} -e "show tables" | grep -v Tables_in | grep -v "+"`
13
+ dropsql = ''
14
+ tablelist.split("\n").each {|table|
15
+ dropsql +="drop table #{table};"
16
+ }
17
+ self.mysql_execute(dropsql)
18
+ return true
19
+ end
20
+
21
+ def self.show_tables
22
+ return self.mysql_execute('show tables')
23
+ end
24
+
25
+ def self.truncate_table(table)
26
+ self.mysql_execute("TRUNCATE TABLE #{table};")
27
+ end
28
+
29
+ def self.create_mysql_base_command_with(user,host,password,db,exec='mysql')
30
+ cmd = "#{self.mysql_executable_dir}/#{exec} -u#{user} -h#{host} -p#{password} #{db}"
31
+ return cmd
32
+ end
33
+
34
+ def self.test_connection
35
+ stdout = self.mysql_execute('SHOW TABLES;')
36
+ if stdout.include? 'denied'
37
+ return false
38
+ else
39
+ return 1
40
+ end
41
+ end
42
+
43
+ def self.dump_db_version(name=nil, table_exclude_list=nil)
44
+
45
+ if not File.directory?(TYPO3_DB_DUMP_DIR)
46
+ FileUtils.mkdir TYPO3_DB_DUMP_DIR
47
+ end
48
+
49
+ filename =''
50
+ numbers = []
51
+ dbsettings = Typo3Helper::get_db_settings
52
+
53
+ if name
54
+ filename = File.join(TYPO3_DB_DUMP_DIR,"#{dbsettings['name']}-#{ENV['name']}.sql")
55
+ version = name
56
+ else
57
+ Dir.foreach(TYPO3_DB_DUMP_DIR) {|sql|
58
+ tmpname = sql.split('.')
59
+ if(tmpname.count == 3)
60
+ numbers << tmpname[1].to_i
61
+ end
62
+ }
63
+ if(numbers.count > 0)
64
+ version = (numbers.max + 1)
65
+ else
66
+ version = 1
67
+ end
68
+
69
+ filename = File.join(TYPO3_DB_DUMP_DIR,"#{dbsettings['name']}.#{version.to_s}.sql")
70
+ end
71
+
72
+ print "new image:#{dbsettings['name']} version:#{version}\n"
73
+ DT3MySQL::mysqldump_to(filename,table_exclude_list)
74
+ end
75
+
76
+ def self.db_image_list
77
+ images_arr = []
78
+ idx = 0
79
+
80
+ Dir.glob("#{TYPO3_DB_DUMP_DIR}/*.sql").sort.each {|sql|
81
+ image = Hash.new
82
+ if File.extname(sql) == '.sql'
83
+ idx = idx+1
84
+ image['index'] = idx
85
+
86
+ image['filesize (Mb)'] = '%.2f' % (File.size(sql).to_f / 2**20)
87
+
88
+
89
+ if(sql.split('.').count == 3)
90
+ image['version'] = sql.split('.')[1]
91
+ image['name'] = File.basename(sql.split('.')[0])
92
+ elsif(sql.split('-').count == 2)
93
+ image['version'] = sql.split('-')[1].split('.')[0]
94
+ image['name'] = File.basename(sql.split('-')[0])
95
+ else
96
+ image['version'] = '[MASTER]'
97
+ image['name'] = File.basename(sql,'.*')
98
+ end
99
+ image['time'] = File.mtime(sql).strftime("%Y-%m-%d")
100
+ image['filename'] = sql
101
+
102
+ images_arr << image
103
+ end
104
+ }
105
+ return images_arr
106
+ end
107
+
108
+ def self.create_exclude_list
109
+
110
+ table_exclude_list = %w( be_users be_sessions cache_* cf_* fe_session_data fe_sessions static_countries \
111
+ static_country_zones static_currencies static_languages static_territories sys_history sys_log tx_devlog \
112
+ zzz_deleted_* )
113
+
114
+ tables = self.show_tables
115
+ table_arr = tables.split("\n")
116
+
117
+ substr_arr = []
118
+ excltable_arr = []
119
+ realexclude_list = []
120
+
121
+ table_exclude_list.each {|excltable|
122
+ if(excltable.include? '*')
123
+ substr_arr << excltable[0,excltable.index('*')]
124
+ else
125
+ excltable_arr << excltable
126
+ end
127
+ }
128
+
129
+ table_arr.each {|table|
130
+ if(excltable_arr.include?(table))
131
+ realexclude_list << table
132
+ else
133
+ substr_arr.each {|substr|
134
+ if(table[0,substr.length] == substr)
135
+ realexclude_list << table
136
+ end
137
+ }
138
+ end
139
+ }
140
+
141
+ return realexclude_list.uniq
142
+ end
143
+
144
+ def self.create_mysql_base_command(exec='mysql')
145
+ return self.create_mysql_base_command_with(fetch(:dbuser),fetch(:dbhost),fetch(:dbpass),fetch(:dbname),exec)
146
+ end
147
+
148
+ def self.mysql_execute(sql)
149
+ "#{self.create_mysql_base_command} -e \"#{sql}\""
150
+ end
151
+
152
+ def self.create_exclude_string(excludelist,db)
153
+ s = ''
154
+ excludelist.each {|extab|
155
+ if(s.length>0)
156
+ s += " "
157
+ end
158
+ s += "--ignore-table=#{db}.#{extab}"
159
+ }
160
+ return s
161
+ end
162
+
163
+ def self.mysqldump_to(outputfile,excludelist=nil,no_schema=nil)
164
+
165
+ if(not excludelist.nil?)
166
+ excludestring = self.create_exclude_string(excludelist,db)
167
+ else
168
+ excludestring = ''
169
+ end
170
+
171
+ cmd="#{create_mysql_base_command('mysqldump')} #{excludestring} > #{outputfile}"
172
+ system(cmd)
173
+ end
174
+
175
+ def self.mysql_import(user,pass,host,db,insqlfile)
176
+ cmd ="#{create_mysql_base_command} < #{insqlfile}"
177
+ system(cmd)
178
+ end
179
+ end
@@ -0,0 +1,481 @@
1
+ require 'open-uri'
2
+ require 'json'
3
+
4
+ class Typo3Helper
5
+
6
+ def self.typo3_version_list
7
+
8
+ source = "https://get.typo3.org/json"
9
+ content = ""
10
+ open(source) do |s|
11
+ content = s.read
12
+ end
13
+
14
+ my_hash = JSON.parse(content)
15
+ _version_arr= []
16
+
17
+ my_hash.each do |k,v|
18
+
19
+ if(v['releases'])
20
+
21
+ v['releases'].each do |rel,relprops|
22
+ _version_arr << rel
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+ return _version_arr.uniq.sort
29
+ end
30
+
31
+ def self.get_typo3_versions
32
+
33
+ version_arr = self.typo3_version_list
34
+ return_string = ""
35
+ version_arr.each { |v|
36
+ return_string << "TYPO3 version: "+ v+ "\n"
37
+ }
38
+
39
+ return return_string
40
+ end
41
+
42
+ # from 4.7.12 it should return 12
43
+ def self.minor_version total_version
44
+ version_m = total_version.split "."
45
+ return version_m[2]
46
+ end
47
+
48
+ # from 4.7.12 it should return 4.7
49
+ def self.major_version total_version
50
+ version_m = total_version.split "."
51
+ return "#{version_m[0]}.#{version_m[1]}"
52
+ end
53
+
54
+ def self.typo3_version_list_for_table
55
+ version_arr = []
56
+ idx = 0
57
+ versions_list_in = []
58
+ versions = Typo3Helper::get_typo3_versions
59
+ versions_list_in << Typo3Helper::last_minor_version(versions,'6.2')
60
+ versions_list_in << Typo3Helper::last_minor_version(versions,'7.0')
61
+ versions_list_in << Typo3Helper::last_minor_version(versions,'7.6')
62
+ versions_list_in << Typo3Helper::last_minor_version(versions,'8.1')
63
+
64
+ versions_list_in.each {|version_in|
65
+ idx = idx+1
66
+ version = Hash.new
67
+ version['index'] = idx
68
+ version['main version'] = self.major_version version_in
69
+ version['last minor version'] = version_in
70
+
71
+ version_arr << version
72
+ }
73
+ return version_arr
74
+ end
75
+
76
+ def self.php_exexcutable
77
+ if(CONFIG['PHPEXEC'])
78
+ return CONFIG['PHPEXEC']
79
+ else
80
+ return 'php'
81
+ end
82
+ end
83
+
84
+ # Get last minor version bases on configuration or argument, e.g 6.2 returns ATOW 6.2.9
85
+ def self.typo3_last_version(version=nil)
86
+
87
+ if version.nil?
88
+ version = CONFIG['TYPO3_MAIN_VERSION']
89
+ end
90
+
91
+ if version.split('.').count == 3
92
+ typo3_version = version
93
+ else
94
+ versions = self.get_typo3_versions
95
+ typo3_version = Typo3Helper::last_minor_version(versions,version.to_s)
96
+ end
97
+
98
+ return typo3_version
99
+ end
100
+
101
+ def self.download_typo3_source version
102
+
103
+ tarball= "typo3source/typo3_src-#{version}.tar.gz"
104
+
105
+ unless File.directory?('typo3source')
106
+ FileUtils.mkdir('typo3source')
107
+ end
108
+
109
+ unless File.exist?(tarball)
110
+ if(CONFIG['TYPO3_ALTERNATIVE_SOURCE_URL'])
111
+ altsrc = CONFIG['TYPO3_ALTERNATIVE_SOURCE_URL']
112
+ srcurl = altsrc[7..(altsrc.index('/',8)-1)]
113
+ srcpath = altsrc[(altsrc.index('/',8))..-1]
114
+ version = altsrc[altsrc.index('typo3_src-')+10,6]
115
+
116
+ DT3Div::downloadTo(srcurl,srcpath,tarball)
117
+ else
118
+ srcurl = "get.typo3.org"
119
+ srcpath = "/#{version}"
120
+
121
+ DT3Div::downloadTo(srcurl,srcpath,tarball)
122
+ end
123
+ end
124
+
125
+ if File.directory?(File.join('typo3source', "typo3_src-#{version}"))
126
+ FileUtils.rm_r(File.join('typo3source',"typo3_src-#{version}"))
127
+ end
128
+ system("tar xzf #{tarball} -C typo3source/")
129
+ end
130
+
131
+ def self.last_minor_version(versions, majorversion)
132
+ list = []
133
+ versions.each_line do |line|
134
+ if(line[15,3]==majorversion)
135
+ if(line.chomp[19,2].to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/))
136
+ list << sprintf('%02d',line.chomp[19,2])
137
+ end
138
+ end
139
+ end
140
+ return majorversion+"."+list.sort.reverse[0].to_i.to_s
141
+ end
142
+
143
+ def self.flush_config_cache()
144
+ system("rm -Rf current/dummy/typo3conf/temp_CACHED_*")
145
+ end
146
+
147
+ def self.flush_cache()
148
+ system("rm -Rf current/dummy/typo3temp/*")
149
+ system("rm -Rf current/dummy/typo3conf/temp_CACHED_*")
150
+ end
151
+
152
+ #truncates a list of tables
153
+ def self.truncate_tables(tables)
154
+
155
+ all_current_tables = capture DT3MySQL::show_tables.split("\n")
156
+
157
+ tables.each do |table|
158
+ if all_current_tables.include?(table)
159
+ execute DT3MySQL::truncate_table(table)
160
+ end
161
+ end
162
+ end
163
+
164
+ def self.truncate_cache_tables()
165
+ cache_tables= %w(cache_extensions cache_hash cache_imagesizes cache_md5params cache_pages cache_pagesection cache_sys_dmail_stat cache_treelist cache_typo3temp_log cachingframework_cache_hash cachingframework_cache_hash_tags cachingframework_cache_pages cachingframework_cache_pages_tags cachingframework_cache_pagesection cachingframework_cache_pagesection_tags cf_cache_hash cf_cache_hash_tags cf_cache_pages cf_cache_pages_tags cf_cache_pagesection cf_cache_pagesection_tags cf_extbase_object cf_extbase_object_tags cf_extbase_reflection cf_extbase_reflection_tags cf_tt_news_cache cf_tt_news_cache_tags cf_tx_solr cf_tx_solr_tags tt_news_cache tt_news_cache_tags tx_realurl_chashcache tx_realurl_errorlog tx_realurl_pathcache tx_realurl_uniqalias tx_realurl_urldecodecache tx_realurl_urlencodecache tx_solr_cache tx_solr_cache_tags)
166
+ self.truncate_tables(cache_tables)
167
+ end
168
+
169
+ def self.truncate_session_tables()
170
+
171
+ session_tables=%w(be_sessions fe_session_data fe_sessions)
172
+ self.truncate_tables(session_tables)
173
+ end
174
+
175
+ def self.get_db_settings
176
+ if(self.typo3_localconf_version == 6)
177
+ cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");$arr = include \"#{TYPO3_V6_LOCAL_CONF_PATH}\";echo \"{$arr[\"DB\"][\"username\"]} {$arr[\"DB\"][\"password\"]} {$arr[\"DB\"][\"host\"]} {$arr[\"DB\"][\"database\"]}\";\'"
178
+ elsif(self.typo3_localconf_version == 4)
179
+ cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");include \"#{TYPO3_V4_LOCAL_CONF_PATH}\";echo \"$typo_db_username $typo_db_password $typo_db_host $typo_db\";\'"
180
+ end
181
+
182
+ dbsettings =%x[ #{cmd} ].split(' ')
183
+
184
+ dbsetarr = {}
185
+ dbsetarr['name'] = dbsettings[3]
186
+ dbsetarr['host'] = dbsettings[2]
187
+ dbsetarr['user'] = dbsettings[0]
188
+ dbsetarr['password'] = dbsettings[1]
189
+
190
+ return dbsetarr
191
+ end
192
+
193
+ # replaces database settings in the localconf file
194
+ def self.make_set_localconf_database_settings_command(db,user,password,host='localhost')
195
+ cmd1 = "php -r \'define(\"TYPO3_MODE\", \"BE\");" \
196
+ "$arr = include \"#{fetch(:typo3_v6_local_conf_path)}\"; " \
197
+ "echo \"<?php\\n\";" \
198
+ "echo \"return \";" \
199
+ "$arr[\"DB\"][\"username\"]=\"#{user}\"; " \
200
+ "$arr[\"DB\"][\"database\"]=\"#{db}\";" \
201
+ "$arr[\"DB\"][\"password\"]=\"#{password}\";" \
202
+ "$arr[\"DB\"][\"host\"]=\"#{host}\";" \
203
+ "var_export($arr);" \
204
+ "echo \";\\n?>\";\'" \
205
+ "> #{fetch(:typo3_v6_local_conf_path)}.tmp"
206
+ cmd1
207
+ end
208
+
209
+ def self.set_v4_typo3_extconf_settings(extconfvars)
210
+ text = File.read(TYPO3_V4_LOCAL_CONF_PATH)
211
+ extconfvars.each do |key,arr|
212
+
213
+ typo3_conf_vars = "$TYPO3_CONF_VARS['EXT']['extConf']['#{key}'] = '#{PHP.serialize(arr).gsub("'", "\\\\'")}'; #{TYPO3_MODIFY_SIGNATURE}"
214
+
215
+ if text.include?("$TYPO3_CONF_VARS['EXT']['extConf']['#{key}']")
216
+ text = text.gsub(/^\$TYPO3_CONF_VARS\['EXT'\]\['extConf'\]\['#{key}'\].*/, typo3_conf_vars)
217
+ else
218
+ text = text.gsub(/^\?>/, typo3_conf_vars + "\n?>")
219
+ end
220
+
221
+ end
222
+ File.open(TYPO3_V4_LOCAL_CONF_PATH, "w") {|file| file.puts text}
223
+
224
+ end
225
+
226
+ def self.set_typo3_extconf_settings(extconfvars)
227
+ if(self.typo3_localconf_version == 4)
228
+ return set_v4_typo3_extconf_settings extconfvars
229
+ elsif(self.typo3_localconf_version == 6)
230
+ return set_v6_typo3_extconf_settings extconfvars
231
+ end
232
+
233
+ end
234
+
235
+ def self.set_v6_typo3_extconf_settings(extconfvars)
236
+ confVars = {}
237
+ confVars['EXT'] = {}
238
+ confVars['EXT']['extConf'] = {}
239
+
240
+ extconfvars.each do |key,arr|
241
+ confVars['EXT']['extConf'][key] = "#{PHP.serialize(arr).gsub("'", "\\\\'")}"
242
+ end
243
+ self.set_v6_typo3_conf_vars confVars
244
+ end
245
+
246
+ def self.set_v4_typo3_conf_vars(confvars)
247
+ text = File.read(TYPO3_V4_LOCAL_CONF_PATH)
248
+
249
+ confvars.each do |mainKey, mainHash|
250
+ mainHash.each do |key,var|
251
+
252
+ confstring = "$TYPO3_CONF_VARS['#{mainKey}']['#{key}'] = '#{var}'; #{TYPO3_MODIFY_SIGNATURE}"
253
+
254
+ if text.include?("$TYPO3_CONF_VARS['#{mainKey}']['#{key}']")
255
+ text = text.gsub(/^\$TYPO3_CONF_VARS\['#{mainKey}'\]\['#{key}'\].*/, confstring)
256
+ else
257
+ text = text.gsub(/^\?>/, confstring + "\n?>")
258
+ end
259
+ end
260
+ end
261
+
262
+ File.open(TYPO3_V4_LOCAL_CONF_PATH, "w") {|file| file.puts text}
263
+ end
264
+
265
+ def self.set_v6_typo3_conf_vars(confvars)
266
+
267
+ outfile = TYPO3_V6_LOCAL_CONF_PATH
268
+
269
+ confhash = self.get_v6_localconf_array
270
+ confjson = confhash.deep_merge!(confvars)
271
+
272
+ File.open('tmpjson', 'w') { |file| file.write(confjson.to_json) }
273
+
274
+ cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");echo \"<?php\\n\";echo \"return \";$contents = file_get_contents(\"./tmpjson\"); $arr = json_decode($contents);var_export($arr);echo \";\\n?>\";\'"
275
+ newphpconf = `#{cmd}`
276
+
277
+ newphpconf.gsub!('))',')')
278
+ newphpconf.gsub!('stdClass::__set_state(','')
279
+
280
+ cmd = "rm tmpjson"
281
+ system (cmd)
282
+ cmd = "cp #{outfile} #{outfile}.bak"
283
+ system (cmd)
284
+
285
+ File.open(outfile, 'w') { |file| file.write(newphpconf) }
286
+ end
287
+
288
+ def self.set_typo3_conf_vars(confvars)
289
+ if(confvars)
290
+
291
+ if(self.typo3_localconf_version == 6)
292
+ self.set_v6_typo3_conf_vars(confvars)
293
+
294
+ elsif(self.typo3_localconf_version == 4)
295
+ self.set_v4_typo3_conf_vars(confvars)
296
+
297
+ end
298
+ end
299
+
300
+ return true
301
+ end
302
+
303
+ def self.set_localconf_extlist(extList)
304
+ if(self.typo3_localconf_version == 4)
305
+ self.set_v4_localconf_extlist(extList)
306
+ elsif(self.typo3_localconf_version == 6)
307
+ self.set_v6_localconf_extlist(extList)
308
+ end
309
+ end
310
+
311
+ def self.set_v4_localconf_extlist(extList)
312
+
313
+ extList = Typo3Helper::get_v4_localconf_extlist('extList')
314
+ extList_fe = Typo3Helper::get_v4_localconf_extlist('extList_FE')
315
+
316
+ CONFIG['DISABLE_EXTENSIONS'].each do |delext|
317
+ extList.delete(delext)
318
+ extList_fe.delete(delext)
319
+ end
320
+
321
+ newconf= "$TYPO3_CONF_VARS['EXT']['extList'] = '#{extList.join(',')}'"
322
+ newconf_FE= "$TYPO3_CONF_VARS['EXT']['extList_FE'] = '#{extList_fe.join(',')}'"
323
+
324
+ text = File.read(TYPO3_V4_LOCAL_CONF_PATH)
325
+ text = text.gsub(/^\$TYPO3_CONF_VARS\['EXT'\]\['extList'\].*/, newconf+"; #{TYPO3_MODIFY_SIGNATURE}")
326
+ text = text.gsub(/^\$TYPO3_CONF_VARS\['EXT'\]\['extList_FE'\].*/, newconf_FE+"; #{TYPO3_MODIFY_SIGNATURE}")
327
+
328
+ File.open(TYPO3_V4_LOCAL_CONF_PATH, "w") {|file| file.puts text}
329
+
330
+ end
331
+
332
+ ## Based on a list with extKeys it set the new active extensions
333
+ def self.set_v6_localconf_extlist(extList)
334
+
335
+ outfile = File.join('current','dummy','typo3conf','PackageStates.php')
336
+ confhash = self.get_v6_package_states
337
+ # require 'pp'
338
+ # PP.pp confhash
339
+ confhash['packages'].each do |extKey, extAttr|
340
+ if extList.include? extKey
341
+ extAttr['state']='active'
342
+ else
343
+ extAttr['state']='inactive'
344
+ end
345
+ confhash['packages'][extKey] = extAttr
346
+ end
347
+
348
+ File.open('tmpjson', 'w') { |file| file.write(confhash.to_json) }
349
+
350
+ cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");echo \"<?php\\n\";echo \"return \";$contents = file_get_contents(\"./tmpjson\");
351
+ $arr_unsorted = array();
352
+ $arr_sorted = array();
353
+ $arr_unsorted[\"packages\"] = array();
354
+ $arr_sorted[\"packages\"] = array();
355
+ $arr = json_decode($contents);
356
+ foreach($arr->packages as $key => $a){
357
+ if($key==\"core\") $arr_sorted[\"packages\"][$key] = $a;
358
+ else $arr_unsorted[\"packages\"][$key] = $a;
359
+ }
360
+ foreach($arr_unsorted[\"packages\"] as $key => $a){
361
+ $arr_sorted[\"packages\"][$key] = $a;
362
+ }
363
+ $arr->packages = $arr_sorted[\"packages\"];
364
+ var_export($arr);
365
+ echo \";\\n?>\";\'"
366
+ newphpconf = `#{cmd}`
367
+
368
+ newphpconf.gsub!('))',')')
369
+ newphpconf.gsub!('stdClass::__set_state(','')
370
+
371
+ cmd = "rm tmpjson"
372
+ system (cmd)
373
+ cmd = "cp #{outfile} #{outfile}.bak"
374
+ system (cmd)
375
+
376
+ File.open(outfile, 'w') { |file| file.write(newphpconf) }
377
+ end
378
+
379
+ def self.symlink_source version
380
+ system("rm -f #{File.join('current','dummy','typo3_src')}")
381
+ system("ln -sf ../../../typo3source/typo3_src-#{version} #{File.join('current','dummy','typo3_src')}")
382
+ #system("cd current/dummy && ln -sf ../../../typo3source/typo3_src-#{version} typo3_src")
383
+ end
384
+
385
+ def self.typo3_localconf_version
386
+ if(CONFIG['TYPO3_MAIN_VERSION'].to_s.split('.')[0].to_i > 4)
387
+ return 6
388
+ else
389
+ return 4
390
+ end
391
+ end
392
+
393
+ def self.typo3_localconf_file
394
+ if self.typo3_localconf_version == 4
395
+ return TYPO3_V4_LOCAL_CONF_PATH
396
+ elsif self.typo3_localconf_version == 6
397
+ return TYPO3_V6_LOCAL_CONF_PATH
398
+ end
399
+ end
400
+
401
+ def self.get_v6_localconf_array
402
+ cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");$arr = include \"#{TYPO3_V6_LOCAL_CONF_PATH}\";echo json_encode($arr);'"
403
+ json = `#{cmd}`
404
+ return JSON.parse(json)
405
+ end
406
+
407
+ def self.get_v6_package_states
408
+ infile = File.join('current','dummy','typo3conf','PackageStates.php')
409
+ cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");$arr = include \"#{infile}\";echo json_encode($arr);'"
410
+ json = `#{cmd}`
411
+ return JSON.parse(json)
412
+ end
413
+
414
+ def self.get_v4_localconf_array
415
+ infile = File.join('current','dummy','typo3conf','localconf.php')
416
+ cmd = "php -r '\define(\"TYPO3_MODE\", \"BE\");include \"#{infile}\";echo serialize($TYPO3_CONF_VARS);\'"
417
+ ret =%x[ #{cmd} ]
418
+ return PHP.unserialize(ret)
419
+ end
420
+
421
+ def self.get_localconf_extlist
422
+ if(self.typo3_localconf_version == 6)
423
+ confhash = self.get_v6_package_states
424
+ activeList = []
425
+ confhash['packages'].each do |extKey, extAttr|
426
+ if extAttr['state']=='active'
427
+ activeList << extKey
428
+ end
429
+ end
430
+ return activeList
431
+
432
+ elsif(self.typo3_localconf_version == 4)
433
+ return get_v4_localconf_extlist('extList')
434
+ end
435
+ end
436
+
437
+ def self.get_v4_localconf_extlist(extlistKey='extList')
438
+ cmd = "php -r '\define(\"TYPO3_MODE\", \"BE\");include \"#{TYPO3_V4_LOCAL_CONF_PATH}\";echo $TYPO3_CONF_VARS[\"EXT\"][\"#{extlistKey}\"];\'"
439
+ extList =%x[ #{cmd} ]
440
+ return extList.split(',');
441
+ end
442
+
443
+ #unused at the moment, could be handy
444
+ def self.get_confarray_from_localconf
445
+ if(self.typo3_localconf_version == 6)
446
+ return self.get_v6_localconf_array
447
+ elsif(self.typo3_localconf_version == '4')
448
+ return self.get_v4_localconf_array
449
+ end
450
+ end
451
+
452
+ def self.get_extconfarray_from_localconf(infile)
453
+ if(self.typo3_localconf_version == 6)
454
+ confhash = self.get_v6_localconf_array
455
+ extensionArr = Hash.new
456
+ confhash['EXT']['extConf'].each {|extkey,extconf|
457
+ extensionArr[extkey] = PHP.unserialize(extconf)
458
+ }
459
+ return extensionArr
460
+
461
+ elsif
462
+ cmd = "php -r '\define(\"TYPO3_MODE\", \"BE\");include \"#{infile}\";echo serialize($TYPO3_CONF_VARS[\"EXT\"][\"extConf\"]);\'"
463
+ ret =%x[ #{cmd} ]
464
+
465
+ extensionArr = Hash.new
466
+ _extArray= PHP.unserialize(ret)
467
+ _extArray.each {|extkey,extconf|
468
+ extensionArr[extkey] = PHP.unserialize(extconf)
469
+
470
+ }
471
+ return extensionArr
472
+ end
473
+ end
474
+
475
+ def self.download_ext_xml
476
+ DT3Div.downloadTo('typo3.org','/fileadmin/ter/extensions.xml.gz','current/dummy/typo3temp/extensions.xml.gz')
477
+ system('gunzip -c current/dummy/typo3temp/extensions.xml.gz > current/dummy/typo3temp/extensions.xml');
478
+ return true
479
+ end
480
+
481
+ end