This enables users to choose a specific Bayes classifier for training from WebUI.
<div class="card bg-light shadow card-body card p-2">
<p>Learn Bayesian classifier:</p>
<form>
- <div class="btn-group">
- <button class="btn btn-success d-flex align-items-center" type="button" data-upload="learnham" disabled><i class="fas fa-thumbs-up me-2"></i>Upload HAM</button>
- <button class="btn btn-danger d-flex align-items-center" type="button" data-upload="learnspam" disabled><i class="fas fa-thumbs-down me-2"></i>Upload SPAM</button>
+ <div class="d-flex flex-wrap flex-lg-column align-items-start align-items-lg-stretch gap-2">
+ <select id="classifier" class="form-select w-auto"></select>
+ <div class="btn-group">
+ <button class="btn btn-success d-flex align-items-center" type="button" data-upload="learnham" disabled><i class="fas fa-thumbs-up me-2"></i>Upload HAM</button>
+ <button class="btn btn-danger d-flex align-items-center" type="button" data-upload="learnspam" disabled><i class="fas fa-thumbs-down me-2"></i>Upload SPAM</button>
+ </div>
</div>
</form>
</div>
complete: function () {
ajaxSetup(localStorage.getItem("ajax_timeout"));
+ if (require.defined("app/upload")) require(["app/upload"], (module) => module.getClassifiers());
+
if (common.read_only) {
$(".ro-disable").attr("disabled", true);
$(".ro-hide").hide();
getFuzzyHashes(data);
} else {
let headers = {};
- if (source === "fuzzyadd") {
+ if (source === "learnham" || source === "learnspam") {
+ const classifier = $("#classifier").val();
+ if (classifier) headers = {classifier: classifier};
+ } else if (source === "fuzzyadd") {
headers = {
flag: $("#fuzzyFlagText").val(),
weight: $("#fuzzyWeightText").val()
common.fileUtils.setupFileHandling("#scanMsgSource", "#formFile", fileSet, enable_disable_scan_btn, multiple_files_cb);
+ ui.getClassifiers = function () {
+ if (!common.read_only) {
+ const sel = $("#classifier").empty().append($("<option>", {value: "", text: "All classifiers"}));
+ common.query("/bayes/classifiers", {
+ success: function (data) {
+ data[0].data.forEach((c) => sel.append($("<option>", {value: c, text: c})));
+ },
+ server: common.getServer()
+ });
+ }
+ };
+ ui.getClassifiers();
+
return ui;
});
rspamd_http_message_add_header(rep, "Access-Control-Allow-Methods",
"POST, GET, OPTIONS");
rspamd_http_message_add_header(rep, "Access-Control-Allow-Headers",
- "Content-Type,Password,Map,Weight,Flag,Hash");
+ "Classifier,Content-Type,Password,Map,Weight,Flag,Hash");
rspamd_http_connection_reset(conn_ent->conn);
rspamd_http_router_insert_headers(conn_ent->rt, rep);
rspamd_http_connection_write_message(conn_ent->conn,