RNAheatmap.cgi修改设置-生成网页直接带物种名

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use DBI;

my $cgi = CGI->new;
print $cgi->header(-type => 'text/html', -charset => 'UTF-8');

# 获取参数
my $pid  = $cgi->param('pid') || '';
my $type = $cgi->param('type') || '';

# 数据库连接
my $dbh = DBI->connect("dbi:mysql:ArtocarpusGD", "AGD", "AGDsecret", { RaiseError => 1, AutoCommit => 1 }) 
    or die "Can't connect to database: $DBI::errstr";

# 查询 RNAsra 表,扩展查询以获取多个描述和实验
my $sth = $dbh->prepare("SELECT 
    Description, RNAtype, Experiment,
    Description1, Description2, Description3, Description4, Description5,
    Experiment1, Experiment2, Experiment3, Experiment4, Experiment5 
    FROM RNAsra WHERE pid = ? AND type = ?")
    or die "Can't prepare statement: $DBI::errstr";

$sth->execute($pid, $type)
    or die "Can't execute statement: $DBI::errstr";

# 获取查询结果
my (
    $description, $latinname, $experiment,
    $description1, $description2, $description3, $description4, $description5,
    $experiment1, $experiment2, $experiment3, $experiment4, $experiment5
) = $sth->fetchrow_array();

unless ($description && $latinname) {
    die "No records found for pid=$pid and type=$type in RNAsra table.";
}

# 关闭数据库连接
$sth->finish;
$dbh->disconnect;

# HTML output
print <<HTML;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Keywords" content="shrimp">
<meta name="Description" content="genomic database">
<script type="text/javascript" src="../../Artocarpus/javascript/expGene.js"></script>
<link href="../../Artocarpus/css/dropdown.css" rel="stylesheet" type="text/css">
<link href="../../Artocarpus/css/buttonstyle.css" rel="stylesheet" type="text/css">
<link href="../../Artocarpus/css/style.css" rel="stylesheet" type="text/css">
<link href="../../Artocarpus/css/theme.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="../../Artocarpus/javascript/logoLink.js"></script>
<script type="text/javascript" src="../../Artocarpus/javascript/menu-loader.js"></script>
<title>ArtocarpusGD - a portal of Artocarpus multi-omics data</title>
<script language="JavaScript">
  function displaySubMenu(li) {
     var subMenu = li.getElementsByTagName("ul")[0];
     subMenu.style.display = "block";
  }
  function hideSubMenu(li) {
     var subMenu = li.getElementsByTagName("ul")[0];
     subMenu.style.display = "none";
  }
  
  // 注入调试功能扩展函数 - 不会影响原始函数的使用
  document.addEventListener('DOMContentLoaded', function() {
    // 保存原始函数引用
    var originalInputText = window.inputText;
    var originalCheckboxOnclick = window.checkboxOnclick;
    
    // 重写inputText函数以添加日志
    window.inputText = function() {
      // 调用原始函数
      originalInputText.apply(this, arguments);
      // 添加日志
      console.log("Species选择改变为: " + SelectValue);
    };
    
    // 重写checkboxOnclick函数以添加日志
    window.checkboxOnclick = function(checkbox) {
      console.log("Checkbox点击,当前状态:", checkbox.checked);
      console.log("当前SelectValue:", SelectValue);
      // 调用原始函数
      originalCheckboxOnclick.apply(this, arguments);
    };
  });
  
  // 根据选择的SRA更新表单提交动作
  function updateFormAction() {
    var rnaSelect = document.getElementById('rna');
    var form = document.getElementById('RNAForm');
    
    if (!rnaSelect || !form) return;
    
    var selectedOption = rnaSelect.options[rnaSelect.selectedIndex];
    console.log("选择的选项:", selectedOption.text);

    // 从data属性中读取值
    var projectid = selectedOption.getAttribute('data-projectid');
    var experiment = selectedOption.getAttribute('data-experiment');
    var description = selectedOption.getAttribute('data-description');
    
    // 更新隐藏字段
    if (projectid && experiment && description) {
      document.getElementById('hidden_projectid').value = projectid;
      document.getElementById('hidden_experiment').value = experiment;
      document.getElementById('hidden_description').value = description;
      
      console.log("已更新 projectid 为:", projectid);
      console.log("已更新 experiment 为:", experiment);
      console.log("已更新 description 为:", description);
    }
  }
  
  // 表单提交前验证
  function validateForm() {
    // 确保隐藏字段已更新
    updateFormAction();
    
    var rnaSelect = document.getElementById('rna');
    
    if (!rnaSelect || rnaSelect.value === 'selectspecies') {
      alert("请选择一个SRA数据集");
      return false; // 阻止表单提交
    }
    
    // 检查是否有基因ID输入
    var geneIDField = document.RNAForm.GeneID;
    if (!geneIDField.value.trim()) {
      alert("请输入基因ID或使用Show example IDs选择示例ID");
      return false;
    }
    
    console.log("表单验证通过,准备提交");
    console.log("最终提交的projectid:", document.getElementById('hidden_projectid').value);
    console.log("最终提交的experiment:", document.getElementById('hidden_experiment').value);
    console.log("最终提交的description:", document.getElementById('hidden_description').value);
    
    return true; // 允许表单提交
  }
  
  // 页面加载完成后设置事件
  document.addEventListener('DOMContentLoaded', function() {
     // ★★★★★★ 新增:文章发表马年后修改使得直接加载生成含有选定物种的页面,并且可以click生成示例基因ID,初始化 SelectValue 为当前默认选中的物种值 ★★★★★★
    inputText();
    
    // 设置下拉菜单的change事件
    var rnaSelect = document.getElementById('rna');
    if (rnaSelect) {
      // 初始化下拉菜单的值
      updateFormAction();
    }
    
    // 设置表单提交事件
    var form = document.getElementById('RNAForm');
    if (form) {
      form.addEventListener('submit', function(event) {
        if (!validateForm()) {
          event.preventDefault(); // 如果验证失败,阻止提交
        }
      });
    }
  });
</script>
</head>