From 0d4cbd66fc64c2ff38dc50ef4498f281e0e37e17 Mon Sep 17 00:00:00 2001 From: Frank Harris Date: Sat, 17 Jan 2026 09:37:36 -0600 Subject: [PATCH] updated --- modules/steam_workshop/lang/en_US.php | 11 + modules/steam_workshop/module.php | 5 + modules/steam_workshop/navigation.xml | 2 +- modules/steam_workshop/workshop_admin.php | 260 +--------------------- 4 files changed, 26 insertions(+), 252 deletions(-) diff --git a/modules/steam_workshop/lang/en_US.php b/modules/steam_workshop/lang/en_US.php index db506d1e..9c82e08c 100644 --- a/modules/steam_workshop/lang/en_US.php +++ b/modules/steam_workshop/lang/en_US.php @@ -17,6 +17,15 @@ return [ 'label_mod_import' => 'Workshop IDs list (one "id,@ModName" per line)', 'hint_mod_import' => 'Paste from Modlist.txt or import from a collection. IDs are sanitized automatically.', 'adapter_locked_note' => 'This adapter is enforced for the current game type by your administrator.', + 'admin_heading_game_mapping' => 'Adapter mapping by game type', + 'admin_subheading_game_mapping' => 'Pick which adapter becomes the default whenever a server of that game opens the Workshop UI.', + 'admin_col_game_key' => 'Game key', + 'admin_col_adapter' => 'Adapter', + 'admin_no_game_keys' => 'No server configuration XML files were detected.', + 'admin_heading_adapters' => 'Available adapters', + 'admin_col_key' => 'Key', + 'admin_col_mods_dir' => 'Mods directory', + 'admin_col_notes' => 'Notes', 'status_enabled' => 'Enabled', 'status_disabled' => 'Disabled', 'status_hot_reload' => 'Hot reload ready', @@ -43,4 +52,6 @@ return [ 'summary_last_saved' => 'Last saved', 'summary_hot_reload' => 'Hot reload', 'raw_definition_label' => 'Raw Workshop list', + 'message_mappings_saved' => 'Adapter mappings saved.', + 'error_admin_only' => 'Administrator access required.', ]; diff --git a/modules/steam_workshop/module.php b/modules/steam_workshop/module.php index 2b79a365..96597ba7 100644 --- a/modules/steam_workshop/module.php +++ b/modules/steam_workshop/module.php @@ -30,6 +30,11 @@ $module_menus = array( array( 'subpage' => 'main', 'name' => 'Steam Workshop', + 'group' => 'user' + ), + array( + 'subpage' => 'workshop_admin', + 'name' => 'Steam Workshop', 'group' => 'admin' ) ); diff --git a/modules/steam_workshop/navigation.xml b/modules/steam_workshop/navigation.xml index b5017232..a82623fb 100644 --- a/modules/steam_workshop/navigation.xml +++ b/modules/steam_workshop/navigation.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/modules/steam_workshop/workshop_admin.php b/modules/steam_workshop/workshop_admin.php index 7e808168..846122de 100644 --- a/modules/steam_workshop/workshop_admin.php +++ b/modules/steam_workshop/workshop_admin.php @@ -1,255 +1,13 @@ Steam Workshop'; - define('CONFIGS', "modules/steam_workshop/game_configs/"); - - if(isset($_REQUEST['home_cfg_id-mod_cfg_id-os'])) - list($home_cfg_id, $mod_cfg_id, $os) = explode('-', $_REQUEST['home_cfg_id-mod_cfg_id-os']); - - if(isset($home_cfg_id) and isset($mod_cfg_id)) - { - $gameCfg = $db->getGameCfg($home_cfg_id); - $cfgMods = $db->getCfgMods($home_cfg_id); - - foreach($cfgMods as $cfgMod) - { - if($cfgMod['mod_cfg_id'] == $mod_cfg_id) - $modkey = $cfgMod['mod_key']; - } - - $server_xml = read_server_config(SERVER_CONFIG_LOCATION."/".$gameCfg['home_cfg_file']); - - $mod_xml = xml_get_mod($server_xml, $modkey); - - if (!$mod_xml) - { - print_failure(get_lang_f('mod_key_not_found_from_xml',$modkey)); - return; - } - $xml_file = CONFIGS.$mod_xml->installer_name."_".$os.".xml"; - - if(isset($_POST['save_config'])) - { - $xml = new SimpleXMLElement(''); - $xml->addChild('workshop_id', $_POST['workshop_id']); - $xml->addChild('download_method', $_POST['download_method']); - $xml->addChild('anonymous_login', $_POST['anonymous_login']); - $xml->addChild('mods_path', $_POST['mods_path']); - $mods = $xml->addChild('mods'); - if(file_exists($xml_file)) - { - $file_xml = simplexml_load_file($xml_file); - foreach($file_xml->mods->mod as $xml_mod) - { - $mod = $mods->addChild('mod'); - $mod->addAttribute('id', $xml_mod['id']); - $mod->addChild('name', $xml_mod->name); - $mod->addChild('description', $xml_mod->description); - $mod->addChild('image_url', $xml_mod->image_url); - $mod->addChild('download_url', $xml_mod->download_url); - $mod->addChild('filename', $xml_mod->filename); - $mod->addChild('file_size', $xml_mod->file_size); - } - } - - $config = $xml->addChild('config'); - $config->addChild('regex', $_POST['regex']); - $config->addChild('mods_backreference_index', $_POST['mods_backreference_index']); - $config->addChild('variable', $_POST['variable']); - $config->addChild('place_after', $_POST['place_after']); - $config->addChild('mod_string', $_POST['mod_string']); - $config->addChild('string_separator', $_POST['string_separator']); - $config->addChild('filepath', $_POST['filepath']); - $xml->addChild('post_install', str_replace('&','&',$_POST['post_install'])); - $xml->addChild('uninstall', str_replace('&','&',$_POST['uninstall'])); - - $dom = dom_import_simplexml($xml)->ownerDocument; - $dom->formatOutput = true; - file_put_contents($xml_file, $dom->saveXML()); - } - - if(isset($_POST['remove_mods'])) - { - $xml = new SimpleXMLElement(''); - $xml->addChild('workshop_id', $_POST['workshop_id']); - $xml->addChild('download_method', $_POST['download_method']); - $xml->addChild('anonymous_login', $_POST['anonymous_login']); - $xml->addChild('mods_path', $_POST['mods_path']); - $mods = $xml->addChild('mods'); - if(file_exists($xml_file)) - { - $file_xml = simplexml_load_file($xml_file); - foreach($file_xml->mods->mod as $xml_mod) - { - if(in_array($xml_mod['id'],$_POST['workshop_mod_id'])) - continue; - $mod = $mods->addChild('mod'); - $mod->addAttribute('id', $xml_mod['id']); - $mod->addChild('name', $xml_mod->name); - $mod->addChild('description', $xml_mod->description); - $mod->addChild('image_url', $xml_mod->image_url); - $mod->addChild('download_url', $xml_mod->download_url); - $mod->addChild('filename', $xml_mod->filename); - $mod->addChild('file_size', $xml_mod->file_size); - } - } - $config = $xml->addChild('config'); - $config->addChild('regex', $_POST['regex']); - $config->addChild('mods_backreference_index', $_POST['mods_backreference_index']); - $config->addChild('variable', $_POST['variable']); - $config->addChild('place_after', $_POST['place_after']); - $config->addChild('mod_string', $_POST['mod_string']); - $config->addChild('string_separator', $_POST['string_separator']); - $config->addChild('filepath', $_POST['filepath']); - $xml->addChild('post_install', $_POST['post_install']); - $xml->addChild('uninstall', $_POST['uninstall']); - - $dom = dom_import_simplexml($xml)->ownerDocument; - $dom->formatOutput = true; - file_put_contents($xml_file, $dom->saveXML()); - } - - if(file_exists($xml_file)) - { - $xml = simplexml_load_file($xml_file); - - $workshop_id = $xml->workshop_id; - $download_method = $xml->download_method; - $anonymous_login = $xml->anonymous_login; - $mods_path = $xml->mods_path; - $regex = $xml->config->regex; - $mods_backreference_index = $xml->config->mods_backreference_index; - $variable = $xml->config->variable; - $place_after = $xml->config->place_after; - $mod_string = $xml->config->mod_string; - $string_separator = $xml->config->string_separator; - $filepath = $xml->config->filepath; - $post_install = $xml->post_install; - $uninstall = $xml->uninstall; - } - - - } - - $game_cfgs = $db->getGameCfgs(); - $games[0] = get_lang('select_game'); - foreach($game_cfgs as $game_cfg) - { - $server_xml = read_server_config(SERVER_CONFIG_LOCATION."/".$game_cfg['home_cfg_file']); - if(isset($server_xml->installer) and $server_xml->installer == "steamcmd") - { - $cfgMods = $db->getCfgMods($game_cfg['home_cfg_id']); - foreach($cfgMods as $cfgMod) - { - $mod_xml = xml_get_mod($server_xml, $cfgMod['mod_key']); - if(isset($mod_xml->installer_name) and !in_array((string)$mod_xml->installer_name, get_blacklist())) - { - preg_match('/(linux|win)(32|64)?/i', $game_cfg['game_key'], $matches); - - if(strtolower($matches[1]) == 'linux') - $os = "Linux"; - elseif(strtolower($matches[1]) == 'win') - $os = "Windows"; - if(isset($matches[2]) and strtolower($matches[2]) == '64') - $arch = "64"; - else - $arch = "32"; - - $modname = strtolower($cfgMod['mod_name']) == "none"? "":" [MOD:" . $cfgMod['mod_name']."]"; - - $games[$game_cfg['home_cfg_id'].'-'.$cfgMod['mod_cfg_id'].'-'.$os] = $game_cfg['game_name'] . " (" . $os . " " . $arch . "bits)$modname"; - } - } - } - } - - $download_methods = array("steamcmd", "steamapi"); - - $ft = new FormTable(); - $ft->start_form("?m=steam_workshop&p=workshop_admin", "post", "autocomplete=\"off\""); - $ft->start_table(); - $ft->add_custom_field('game', create_drop_box_from_array_onchange($games, "home_cfg_id-mod_cfg_id-os", @$_REQUEST['home_cfg_id-mod_cfg_id-os'])); - if(isset($home_cfg_id) and isset($mod_cfg_id)) - { - $ft->add_field('string','workshop_id',@$workshop_id); - $ft->add_custom_field('download_method',create_drop_box_from_array($download_methods, "download_method", @$download_method)); - $ft->add_field('on_off','anonymous_login',@$anonymous_login); - $ft->add_field('string','mods_path',@$mods_path); - $ft->add_field('string','regex',@$regex); - $ft->add_field('string','mods_backreference_index',@$mods_backreference_index); - $ft->add_field('string','variable',@$variable); - $ft->add_field('string','place_after',@$place_after); - $ft->add_field('string','mod_string',@$mod_string); - $ft->add_field('string','string_separator',@$string_separator); - $ft->add_field('string','filepath',@$filepath); - $ft->add_field('text','post_install',@$post_install); - $ft->add_field('text','uninstall',@$uninstall); - - - $ft->end_table(); - $ft->add_button("submit","save_config",get_lang('save_config')); - $ft->end_form(); - } - else - { - $ft->end_table(); - $ft->end_form(); - } - - if(isset($xml) and count($xml->mods->mod) > 0) - { - $ft = new FormTable(); - $ft->start_form("?m=steam_workshop&p=workshop_admin&home_cfg_id-mod_cfg_id-os=".$_REQUEST['home_cfg_id-mod_cfg_id-os'], "post", "autocomplete=\"off\""); - $ft->start_table(); - echo ""; - $ft->add_field_hidden('workshop_id',$workshop_id); - $ft->add_field_hidden('download_method',$download_method); - $ft->add_field_hidden('anonymous_login',$anonymous_login); - $ft->add_field_hidden('mods_path',$mods_path); - $ft->add_field_hidden('regex',$regex); - $ft->add_field_hidden('mods_backreference_index',$mods_backreference_index); - $ft->add_field_hidden('variable',$variable); - $ft->add_field_hidden('place_after',$place_after); - $ft->add_field_hidden('mod_string',$mod_string); - $ft->add_field_hidden('string_separator',$string_separator); - $ft->add_field_hidden('filepath',$filepath); - $ft->add_field_hidden('post_install',$post_install); - $ft->add_field_hidden('uninstall',$uninstall); - echo "". - '
'; - foreach($xml->mods->mod as $mod) - echo "
"; - echo '
'; - $ft->end_table(); - $ft->add_button("submit","remove_mods",get_lang('remove_mods')); - $ft->end_form(); - } + global $db; + echo '

' . get_lang('steam_workshop') . '

'; + $controller = new AdminWorkshopController($db); + $controller->handle(); } ?> \ No newline at end of file