#!/opt/brepo/ruby33/bin/ruby class EmptyWorker < Kernel::ModuleCoreWorker MODULE_ID = "php_brepo_modules" def info { ID: 4, NAME: MODULE_ID, DESCR: "Module for managing of php modules for php's from brepo repository", REQ: "", CONF: "yes", } end def enable if $LOCAL_PHP == "yes" super else log_return("PHP from brepo repository not enabled") end end def get_list_of_installed_php php_list = [] lst = Dir["/opt/brepo/php*/etc/php.ini"] if lst.length.positive? php_list = lst.select do |item| %r{/opt/brepo/php\d+/etc/php\.ini} =~ item end.map do |item| res = item.match %r{/opt/brepo/php(?\d+)/etc/php\.ini} res[:ver] end end php_list end def get_list_of_installed_php_modules(php_ver) php_modules = {} php_list = get_list_of_installed_php if php_list.include? php_ver lst = Dir["/opt/brepo/php#{php_ver}/etc/mod-installed/*.ini"] php_list_m = lst.map { |item| File.basename(item, ".ini") }.select { |item| item.strip != "" && !(item =~ %r{ioncube_loader_lin_}) } lst_enabled = Dir["/opt/brepo/php#{php_ver}/etc/php.d/*.ini"] php_list_i = {} lst_enabled.each do |item| fname = File.basename(item, ".ini") if fname.strip != "" if File.symlink? item fname_n = File.readlink(item) fname_n = File.basename(fname_n, ".ini") php_list_i[fname_n] = fname unless fname_n.strip == "" end end end php_list_m.each do |item| php_modules[item] = "disabled" php_modules[item] = php_list_i[item] unless php_list_i[item].nil? end end php_modules end def disable_module(php_ver, module_name) php_mods = get_list_of_installed_php_modules(php_ver) return if php_mods[module_name].nil? if File.exist? ("/opt/brepo/php#{php_ver}/etc/php.d/#{php_mods[module_name]}.ini") File.unlink("/opt/brepo/php#{php_ver}/etc/php.d/#{php_mods[module_name]}.ini") end end def enable_module(php_ver, module_name) php_mods = get_list_of_installed_php_modules(php_ver) return if php_mods[module_name].nil? if php_mods[module_name] == "disabled" case module_name when "opcache" File.symlink("/opt/brepo/php#{php_ver}/etc/mod-installed/#{module_name}.ini", "/opt/brepo/php#{php_ver}/etc/php.d/10-#{php_mods[module_name]}.ini") when "mysqli", "pdo_mysql", "xmlreader", "zip" File.symlink("/opt/brepo/php#{php_ver}/etc/mod-installed/#{module_name}.ini", "/opt/brepo/php#{php_ver}/etc/php.d/30-#{php_mods[module_name]}.ini") else File.symlink("/opt/brepo/php#{php_ver}/etc/mod-installed/#{module_name}.ini", "/opt/brepo/php#{php_ver}/etc/php.d/20-#{php_mods[module_name]}.ini") end end end def command(args) return log_return("Not enough arguments. Needed command") if args.length < 1 m_command = args[0].strip case m_command when "php_list" result = get_list_of_installed_php.map { |item| { "PHPVER" => item } } format = (args[1].nil? ? "shell" : args[1].strip) hestia_print_array_of_hashes(result, format, "PHPVER") ACTION_OK when "php_modules" vers = args[1] if vers.nil? log_return("Verssion should be specified. #{args}") else vers = vers.strip modules_list = get_list_of_installed_php_modules(vers) m_keys = modules_list.keys.sort result = [] m_keys.each do |kk| tmp_hash = {} tmp_hash["PHPVER"] = vers tmp_hash["MODNAME"] = kk tmp_hash["STATE"] = modules_list[kk] result << tmp_hash end format = (args[2].nil? ? "shell" : args[2].strip) hestia_print_array_of_hashes(result, format, "PHPVER,MODNAME,STATE") ACTION_OK end when "php_enable" vers = args[1] mod_n = args[2] if vers.nil? || mod_n.nil? log_return("Verssion and module name should be specified. #{args}") else vers = vers.strip mod_n = mod_n.strip enable_module(vers, mod_n) ACTION_OK end when "php_disable" vers = args[1] mod_n = args[2] if vers.nil? || mod_n.nil? log_return("Verssion and module name should be specified. #{args}") else vers = vers.strip mod_n = mod_n.strip disable_module(vers, mod_n) ACTION_OK end when "help" puts "#{$0} php_brepo_modules COMMAND [OPTIONS] [json|csv|plain]" puts "COMMANDS:" puts " php_list - list all local php installed" puts " php_modules [php_ver] - list available php module" puts " php_enable [php_ver] [module_name] - enable php module" puts " php_disable [php_ver] [module_name] - disable php module" puts " help - help" ACTION_OK else log_return("Unknown command. #{args}") end end implements IPluginInterface end module EmptyModule def get_object Proc.new { EmptyWorker.new } end module_function :get_object end class Kernel::PluginConfiguration include EmptyModule @@loaded_plugins[EmptyWorker::MODULE_ID] = EmptyModule.get_object end