class Typo3Helper

Public Class Methods

download_ext_xml() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 475
def self.download_ext_xml
  DT3Div.downloadTo('typo3.org','/fileadmin/ter/extensions.xml.gz','current/dummy/typo3temp/extensions.xml.gz')
  system('gunzip -c current/dummy/typo3temp/extensions.xml.gz > current/dummy/typo3temp/extensions.xml');
  return true
end
download_typo3_source(version) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 101
def self.download_typo3_source version

  tarball= "typo3source/typo3_src-#{version}.tar.gz"

  unless File.directory?('typo3source')
    FileUtils.mkdir('typo3source')
  end

  unless File.exist?(tarball)
    if(CONFIG['TYPO3_ALTERNATIVE_SOURCE_URL'])
      altsrc = CONFIG['TYPO3_ALTERNATIVE_SOURCE_URL']
      srcurl = altsrc[7..(altsrc.index('/',8)-1)]
      srcpath = altsrc[(altsrc.index('/',8))..-1]
      version = altsrc[altsrc.index('typo3_src-')+10,6]

      DT3Div::downloadTo(srcurl,srcpath,tarball)
    else
      srcurl = "get.typo3.org"
      srcpath = "/#{version}"

      DT3Div::downloadTo(srcurl,srcpath,tarball)
    end
  end

  if File.directory?(File.join('typo3source', "typo3_src-#{version}"))
    FileUtils.rm_r(File.join('typo3source',"typo3_src-#{version}"))
  end
  system("tar xzf #{tarball} -C typo3source/")
end
flush_cache() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 147
def self.flush_cache()
  system("rm -Rf current/dummy/typo3temp/*")
  system("rm -Rf current/dummy/typo3conf/temp_CACHED_*")
end
flush_config_cache() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 143
def self.flush_config_cache()
  system("rm -Rf current/dummy/typo3conf/temp_CACHED_*")
end
get_confarray_from_localconf() click to toggle source

unused at the moment, could be handy

# File lib/capistrano/typo3/typo3_helper.rb, line 444
def self.get_confarray_from_localconf
  if(self.typo3_localconf_version == 6)
    return self.get_v6_localconf_array
  elsif(self.typo3_localconf_version == '4')
    return self.get_v4_localconf_array
  end
end
get_db_settings() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 175
def self.get_db_settings
  if(self.typo3_localconf_version == 6)
    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\"]}\";\'"
  elsif(self.typo3_localconf_version == 4)
    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\";\'"
  end

  dbsettings =%x[ #{cmd} ].split(' ')

  dbsetarr = {}
  dbsetarr['name'] = dbsettings[3]
  dbsetarr['host'] = dbsettings[2]
  dbsetarr['user'] = dbsettings[0]
  dbsetarr['password'] = dbsettings[1]

  return dbsetarr
end
get_extconfarray_from_localconf(infile) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 452
def self.get_extconfarray_from_localconf(infile)
  if(self.typo3_localconf_version == 6)
    confhash = self.get_v6_localconf_array
    extensionArr = Hash.new
    confhash['EXT']['extConf'].each {|extkey,extconf|
      extensionArr[extkey] = PHP.unserialize(extconf)
    }
    return extensionArr

  elsif
    cmd = "php -r '\define(\"TYPO3_MODE\", \"BE\");include \"#{infile}\";echo serialize($TYPO3_CONF_VARS[\"EXT\"][\"extConf\"]);\'"
    ret =%x[ #{cmd} ]

    extensionArr = Hash.new
    _extArray= PHP.unserialize(ret)
    _extArray.each {|extkey,extconf|
      extensionArr[extkey] = PHP.unserialize(extconf)

    }
    return extensionArr
  end
end
get_localconf_extlist() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 421
def self.get_localconf_extlist
  if(self.typo3_localconf_version == 6)
    confhash = self.get_v6_package_states
    activeList = []
    confhash['packages'].each do |extKey, extAttr|
       if extAttr['state']=='active'
         activeList << extKey
       end
    end
    return activeList

  elsif(self.typo3_localconf_version == 4)
    return get_v4_localconf_extlist('extList')
  end
end
get_typo3_versions() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 31
def self.get_typo3_versions

  version_arr = self.typo3_version_list
  return_string = ""
  version_arr.each { |v|
    return_string << "TYPO3 version: "+ v+ "\n"
  }

  return return_string
end
get_v4_localconf_array() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 414
def self.get_v4_localconf_array
  infile = File.join('current','dummy','typo3conf','localconf.php')
  cmd = "php -r '\define(\"TYPO3_MODE\", \"BE\");include \"#{infile}\";echo serialize($TYPO3_CONF_VARS);\'"
  ret =%x[ #{cmd} ]
  return PHP.unserialize(ret)
end
get_v4_localconf_extlist(extlistKey='extList') click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 437
def self.get_v4_localconf_extlist(extlistKey='extList')
    cmd = "php -r '\define(\"TYPO3_MODE\", \"BE\");include \"#{TYPO3_V4_LOCAL_CONF_PATH}\";echo $TYPO3_CONF_VARS[\"EXT\"][\"#{extlistKey}\"];\'"
    extList =%x[ #{cmd} ]
    return extList.split(',');
end
get_v6_localconf_array() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 401
def self.get_v6_localconf_array
  cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");$arr = include \"#{TYPO3_V6_LOCAL_CONF_PATH}\";echo json_encode($arr);'"
  json = `#{cmd}`
  return JSON.parse(json)
end
get_v6_package_states() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 407
def self.get_v6_package_states
  infile = File.join('current','dummy','typo3conf','PackageStates.php')
  cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");$arr = include \"#{infile}\";echo json_encode($arr);'"
  json = `#{cmd}`
  return JSON.parse(json)
end
last_minor_version(versions, majorversion) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 131
def self.last_minor_version(versions, majorversion)
  list = []
  versions.each_line do |line|
    if(line[15,3]==majorversion)
      if(line.chomp[19,2].to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/))
        list << sprintf('%02d',line.chomp[19,2])
      end
    end
  end
  return majorversion+"."+list.sort.reverse[0].to_i.to_s
end
major_version(total_version) click to toggle source

from 4.7.12 it should return 4.7

# File lib/capistrano/typo3/typo3_helper.rb, line 49
def self.major_version total_version
  version_m = total_version.split "."
  return "#{version_m[0]}.#{version_m[1]}"
end
make_set_localconf_database_settings_command(db,user,password,host='localhost') click to toggle source

replaces database settings in the localconf file

# File lib/capistrano/typo3/typo3_helper.rb, line 194
def self.make_set_localconf_database_settings_command(db,user,password,host='localhost')
    cmd1 = "php -r \'define(\"TYPO3_MODE\", \"BE\");" \
      "$arr = include \"#{fetch(:typo3_v6_local_conf_path)}\"; " \
      "echo \"<?php\\n\";" \
      "echo \"return \";" \
      "$arr[\"DB\"][\"username\"]=\"#{user}\"; " \
      "$arr[\"DB\"][\"database\"]=\"#{db}\";" \
      "$arr[\"DB\"][\"password\"]=\"#{password}\";" \
      "$arr[\"DB\"][\"host\"]=\"#{host}\";" \
      "var_export($arr);" \
      "echo \";\\n?>\";\'" \
      "> #{fetch(:typo3_v6_local_conf_path)}.tmp"
    cmd1
end
minor_version(total_version) click to toggle source

from 4.7.12 it should return 12

# File lib/capistrano/typo3/typo3_helper.rb, line 43
def self.minor_version total_version
  version_m = total_version.split "."
  return version_m[2]
end
php_exexcutable() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 76
def self.php_exexcutable
  if(CONFIG['PHPEXEC'])
    return CONFIG['PHPEXEC']
  else
    return 'php'
  end
end
set_localconf_extlist(extList) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 303
def self.set_localconf_extlist(extList)
  if(self.typo3_localconf_version == 4)
    self.set_v4_localconf_extlist(extList)
  elsif(self.typo3_localconf_version == 6)
    self.set_v6_localconf_extlist(extList)
  end
end
set_typo3_conf_vars(confvars) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 288
def self.set_typo3_conf_vars(confvars)
  if(confvars)

    if(self.typo3_localconf_version == 6)
      self.set_v6_typo3_conf_vars(confvars)

    elsif(self.typo3_localconf_version == 4)
      self.set_v4_typo3_conf_vars(confvars)

    end
  end

  return true
end
set_typo3_extconf_settings(extconfvars) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 226
def self.set_typo3_extconf_settings(extconfvars)
  if(self.typo3_localconf_version == 4)
    return set_v4_typo3_extconf_settings extconfvars
  elsif(self.typo3_localconf_version == 6)
    return set_v6_typo3_extconf_settings extconfvars
  end

end
set_v4_localconf_extlist(extList) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 311
def self.set_v4_localconf_extlist(extList)

  extList = Typo3Helper::get_v4_localconf_extlist('extList')
  extList_fe = Typo3Helper::get_v4_localconf_extlist('extList_FE')

  CONFIG['DISABLE_EXTENSIONS'].each do |delext|
    extList.delete(delext)
    extList_fe.delete(delext)
  end

  newconf= "$TYPO3_CONF_VARS['EXT']['extList'] = '#{extList.join(',')}'"
  newconf_FE= "$TYPO3_CONF_VARS['EXT']['extList_FE'] = '#{extList_fe.join(',')}'"

  text = File.read(TYPO3_V4_LOCAL_CONF_PATH)
  text = text.gsub(/^\$TYPO3_CONF_VARS\['EXT'\]\['extList'\].*/, newconf+"; #{TYPO3_MODIFY_SIGNATURE}")
  text = text.gsub(/^\$TYPO3_CONF_VARS\['EXT'\]\['extList_FE'\].*/, newconf_FE+"; #{TYPO3_MODIFY_SIGNATURE}")

  File.open(TYPO3_V4_LOCAL_CONF_PATH, "w") {|file| file.puts text}

end
set_v4_typo3_conf_vars(confvars) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 246
def self.set_v4_typo3_conf_vars(confvars)
  text = File.read(TYPO3_V4_LOCAL_CONF_PATH)

  confvars.each do |mainKey, mainHash|
    mainHash.each do |key,var|

      confstring = "$TYPO3_CONF_VARS['#{mainKey}']['#{key}'] = '#{var}'; #{TYPO3_MODIFY_SIGNATURE}"

      if text.include?("$TYPO3_CONF_VARS['#{mainKey}']['#{key}']")
        text = text.gsub(/^\$TYPO3_CONF_VARS\['#{mainKey}'\]\['#{key}'\].*/, confstring)
      else
        text = text.gsub(/^\?>/, confstring + "\n?>")
      end
    end
  end

  File.open(TYPO3_V4_LOCAL_CONF_PATH, "w") {|file| file.puts text}
end
set_v4_typo3_extconf_settings(extconfvars) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 209
def self.set_v4_typo3_extconf_settings(extconfvars)
  text = File.read(TYPO3_V4_LOCAL_CONF_PATH)
  extconfvars.each do |key,arr|

    typo3_conf_vars = "$TYPO3_CONF_VARS['EXT']['extConf']['#{key}'] = '#{PHP.serialize(arr).gsub("'", "\\\\'")}'; #{TYPO3_MODIFY_SIGNATURE}"

    if text.include?("$TYPO3_CONF_VARS['EXT']['extConf']['#{key}']")
      text = text.gsub(/^\$TYPO3_CONF_VARS\['EXT'\]\['extConf'\]\['#{key}'\].*/, typo3_conf_vars)
    else
      text = text.gsub(/^\?>/, typo3_conf_vars + "\n?>")
    end

  end
  File.open(TYPO3_V4_LOCAL_CONF_PATH, "w") {|file| file.puts text}

end
set_v6_localconf_extlist(extList) click to toggle source

Based on a list with extKeys it set the new active extensions

# File lib/capistrano/typo3/typo3_helper.rb, line 333
  def self.set_v6_localconf_extlist(extList)

    outfile = File.join('current','dummy','typo3conf','PackageStates.php')
    confhash = self.get_v6_package_states
#       require 'pp'
#       PP.pp confhash
    confhash['packages'].each do |extKey, extAttr|
      if extList.include? extKey
        extAttr['state']='active'
      else
        extAttr['state']='inactive'
      end
      confhash['packages'][extKey] = extAttr
    end

    File.open('tmpjson', 'w') { |file| file.write(confhash.to_json) }

    cmd = "php -r \'define(\"TYPO3_MODE\", \"BE\");echo \"<?php\\n\";echo \"return \";$contents = file_get_contents(\"./tmpjson\");
      $arr_unsorted = array();
      $arr_sorted = array();
      $arr_unsorted[\"packages\"] = array();
      $arr_sorted[\"packages\"] = array();
      $arr = json_decode($contents);
      foreach($arr->packages as $key => $a){
        if($key==\"core\") $arr_sorted[\"packages\"][$key] = $a;
        else $arr_unsorted[\"packages\"][$key] = $a;
      }
      foreach($arr_unsorted[\"packages\"] as $key => $a){
        $arr_sorted[\"packages\"][$key] = $a;
      }
      $arr->packages = $arr_sorted[\"packages\"];
      var_export($arr);
      echo \";\\n?>\";\'"
    newphpconf = `#{cmd}`

    newphpconf.gsub!('))',')')
    newphpconf.gsub!('stdClass::__set_state(','')

    cmd = "rm tmpjson"
    system (cmd)
    cmd = "cp #{outfile} #{outfile}.bak"
    system (cmd)

    File.open(outfile, 'w') { |file| file.write(newphpconf) }
  end
set_v6_typo3_conf_vars(confvars) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 265
def self.set_v6_typo3_conf_vars(confvars)

  outfile = TYPO3_V6_LOCAL_CONF_PATH

  confhash = self.get_v6_localconf_array
  confjson = confhash.deep_merge!(confvars)

  File.open('tmpjson', 'w') { |file| file.write(confjson.to_json) }

  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?>\";\'"
  newphpconf = `#{cmd}`

  newphpconf.gsub!('))',')')
  newphpconf.gsub!('stdClass::__set_state(','')

  cmd = "rm tmpjson"
  system (cmd)
  cmd = "cp #{outfile} #{outfile}.bak"
  system (cmd)

  File.open(outfile, 'w') { |file| file.write(newphpconf) }
end
set_v6_typo3_extconf_settings(extconfvars) click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 235
def self.set_v6_typo3_extconf_settings(extconfvars)
    confVars = {}
    confVars['EXT'] = {}
    confVars['EXT']['extConf'] = {}

    extconfvars.each do |key,arr|
      confVars['EXT']['extConf'][key] = "#{PHP.serialize(arr).gsub("'", "\\\\'")}"
    end
    self.set_v6_typo3_conf_vars confVars
end
truncate_cache_tables() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 164
def self.truncate_cache_tables()
  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)
  self.truncate_tables(cache_tables)
end
truncate_session_tables() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 169
def self.truncate_session_tables()

  session_tables=%w(be_sessions fe_session_data fe_sessions)
  self.truncate_tables(session_tables)
end
truncate_tables(tables) click to toggle source

truncates a list of tables

# File lib/capistrano/typo3/typo3_helper.rb, line 153
def self.truncate_tables(tables)

  all_current_tables = capture DT3MySQL::show_tables.split("\n")

  tables.each do |table|
    if all_current_tables.include?(table)
      execute DT3MySQL::truncate_table(table)
    end
  end
end
typo3_last_version(version=nil) click to toggle source

Get last minor version bases on configuration or argument, e.g 6.2 returns ATOW 6.2.9

# File lib/capistrano/typo3/typo3_helper.rb, line 85
def self.typo3_last_version(version=nil)

  if version.nil?
    version = CONFIG['TYPO3_MAIN_VERSION']
  end

  if version.split('.').count == 3
    typo3_version = version
  else
    versions = self.get_typo3_versions
    typo3_version = Typo3Helper::last_minor_version(versions,version.to_s)
  end

  return typo3_version
end
typo3_localconf_file() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 393
def self.typo3_localconf_file
  if self.typo3_localconf_version == 4
    return TYPO3_V4_LOCAL_CONF_PATH
  elsif self.typo3_localconf_version == 6
    return TYPO3_V6_LOCAL_CONF_PATH
  end
end
typo3_localconf_version() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 385
def self.typo3_localconf_version
  if(CONFIG['TYPO3_MAIN_VERSION'].to_s.split('.')[0].to_i > 4)
    return 6
  else
    return 4
  end
end
typo3_version_list() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 6
def self.typo3_version_list

  source = "https://get.typo3.org/json"
  content = ""
  open(source) do |s|
    content = s.read
  end

  my_hash = JSON.parse(content)
  _version_arr= []

  my_hash.each do |k,v|

    if(v['releases'])

      v['releases'].each do |rel,relprops|
        _version_arr << rel
      end
    end

  end

  return  _version_arr.uniq.sort
end
typo3_version_list_for_table() click to toggle source
# File lib/capistrano/typo3/typo3_helper.rb, line 54
def self.typo3_version_list_for_table
  version_arr = []
  idx = 0
  versions_list_in = []
  versions = Typo3Helper::get_typo3_versions
  versions_list_in << Typo3Helper::last_minor_version(versions,'6.2')
  versions_list_in << Typo3Helper::last_minor_version(versions,'7.0')
  versions_list_in << Typo3Helper::last_minor_version(versions,'7.6')
  versions_list_in << Typo3Helper::last_minor_version(versions,'8.1')

  versions_list_in.each {|version_in|
    idx = idx+1
    version = Hash.new
    version['index'] = idx
    version['main version'] = self.major_version version_in
    version['last minor version'] = version_in

    version_arr << version
  }
  return version_arr
end