Warning: session_start(): open(/var/lib/php/sessions/sess_44egv9bd3ptjlq8klvh2lve8pt, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
concept Rule > ConceptWithGlobalID {
S input, output, variables /* comma-separated */, comment;
sS _fieldOrder = "globalID input output variables comment";
Set vars() { ret asCISet(tok_splitAtComma(variables)); }
}
concept PossibleExample > ConceptWithGlobalID {
Rule rule;
S input, output;
SS mapping;
Bool good;
sS _fieldOrder = "globalID rule good input output mapping";
}
concept Input > ConceptWithGlobalID {
S input;
}
p {
db();
indexConceptFields(PossibleExample, 'rule);
indexConceptFieldsCI(Input, 'input, Rule, 'input, PossibleExample, 'input);
indexConceptFieldsOrdered(Rule, 'globalID);
}
static HCRUD rulesCRUD() {
ret new HCRUD(rawLink("admin"), new HCRUD_Concepts(Rule) {
void massageItemMapForList(Rule r, MapSO map) {
map.put("Possible Examples" := countConcepts(PossibleExample, rule := r));
}
Cl listConcepts() {
ret conceptsSortedByFieldCI(Rule, 'input);
}
}.fieldHelp(variables := "comma-separated")
) {
S renderValue(S field, O value) {
S html = super.renderValue(field, value);
if (eq(field, 'globalID))
ret ahref(rawLink(str(value)), html);
if (eq(field, 'input))
ret b(html);
ret html;
}
};
}
static HCRUD inputsCRUD() {
ret new HCRUD(new HCRUD_Concepts(Input.class) {
void massageItemMapForList(Input i, MapSO map) {
map.put("Possible Examples" := l(conceptsWhereCI PossibleExample(input := i.input)));
map.put("Cmds", HTML(ahref(
appendQueryToURL("admin", cmd := "processInput", inputID := i.id),
"process")));
}
});
}
static HCRUD possibleExamplesCRUD(S uri) {
ret new HCRUD(new HCRUD_Concepts(PossibleExample.class) {
void massageItemMapForList(PossibleExample e, MapSO map) {
if (e.rule != null)
map.put(rule := HTML(ahref(rawLink(e.rule.globalIDStr()), e.rule.globalID())));
map.put(Cmds := HTML(
ahref(appendQueryToURL(rawLink(uri), cmd := "markGood", exampleID := e.id), "good") + " " +
ahref(appendQueryToURL(rawLink(uri), cmd := "markBad", exampleID := e.id), "bad")));
}
});
}
set flag NoNanoHTTPD. html {
bool authed = webAuthed(params);
if (empty(uri = dropSlashPrefix(uri)))
ret htitle_h1("Rules")
+ (webAuthed(params) ? p(ahref(rawLink("admin"), "Admin")) : "")
+ ul_noEncode(map(list(Rule), r -> ahref(rawLink(r.globalIDStr()), htmlEncode2(r.input + " => " + r.output))));
// serve rule
if (possibleGlobalID(uri)) {
Rule r = conceptWhere(Rule, globalID := GlobalID(uri));
if (r == null) ret subBot_serve404("Rule not found");
S html = htitle_h1("Rule " + r.globalID)
+ htmlTable2(mapToTwoElementMaps("Field", "Value", litorderedmap("Input" := r.input, "Output" := r.output, "Variables" := r.variables, "Comment" := r.comment)));
HCRUD peCRUD = possibleExamplesCRUD(uri);
((HCRUD_Concepts) peCRUD.data).addFilter(rule := r);
html += h3("Possible Examples")
+ peCRUD.renderTable(false);
//Cl examples = conceptsWhere PossibleExample(rule := r);
//ret possibleExamplesCRUD().render(false, )
ret html;
}
new Matches m;
if (swic_slash(uri, "admin", m))
{
S _uri = uri;
HMultiCRUD multi = new(rawLink("admin"), Rule, Input, PossibleExample) {
HCRUD makeCRUD(S className) {
if (eq(className, "Rule")) ret rulesCRUD();
if (eq(className, "Input")) ret inputsCRUD();
if (eq(className, "PossibleExample")) ret possibleExamplesCRUD(_uri);
null;
}
LS naviComponents() {
LS l = super.naviComponents();
if (mutationRights)
l.add(ahref(appendQueryToURL(baseLink, cmd := "processInputs"), "process inputs"));
ret l;
}
} .mainTitle("Rules + Inputs")
.mutationRights(authed);
multi.downloadRights = authed;
S cmd = params.get('cmd);
if (nempty(cmd)) {
try object checkWebAuthed(params);
if (eqOneOf(cmd, "markGood", "markBad")) {
PossibleExample e = getConcept(PossibleExample, parseLong(params.get('exampleID)));
cset(e, good := eq(cmd, "markGood"));
}
if (eq(cmd, "processInput")) {
Input i = getConcept(Input, toLong(params.get('inputID)));
ret serveText(hijackPrint_tee_pcall(() -> processInput(i.input)));
}
if (eq(cmd, "processInputs")) {
time {
for (Input i)
processInput(i.input);
}
ret multi.refreshWithMsgs("Processed " + nInputs(countConcepts(Input)) + " in " + lastTiming() + " ms");
}
}
ret multi.renderPage(m.rest(), params);
}
ret subBot_serve404();
}
static void processInput(S input) {
for (Rule r) {
new Set found;
print("Combining input " + quote(input) + " with rule " + quote(r.input));
for (SS mapping : arbitraryVarsFlexMatchIC_iterator(r.vars(), r.input, input)) {
print(" Have mapping: " + mapping);
PossibleExample e = uniq PossibleExample(rule := r, +input, +mapping);
found.add(e);
S output = replaceVars_optRound2(r.output, mapping);
output = applyTransformers(output);
cset(found, +output);
}
deleteConcepts(listMinusSet(conceptsWhere(PossibleExample, rule := r, +input), found));
}
}
static IF1> transformers() {
ret mapGet_if1(litmap(nominativ := (IF1) (lambda1 german_toNominativ)));
}
sS applyTransformers(S s) {
pcall {
ret tok_applyCurlyTransformers(transformers(), s);
}
ret s;
}
static MultiSetMap wordClassExamples() {
MultiSetMap mm = ciMultiCISetMap();
for (PossibleExample e : conceptsWhere PossibleExample(good := true))
for (S key, value : unnull(e.mapping))
mm.put(key, value);
ret mm;
}