Warning: session_start(): open(/var/lib/php/sessions/sess_sa5l5l5bsntsvsqoikvr1741j8, 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
sclass NewWoody {
transient Map rulesByName;
transient new L badRules;
Map ruleData = ciMap();
S lastOutput;
BBRule activeRule;
sclass RuleData {
int answerIndex;
}
RuleData ruleData(BBRule rule) {
ret getOrCreate(ruleData, rule.listName, RuleData);
}
*() {
rulesByName = indexFieldAsCIMap('listName, bb_allRules());
}
*(NewWoody w) {
copyFields(w, this, 'rulesByName, 'badRules);
}
void processInput(S input) {
temp tempSetTL(ctxContext_var(), nu(CtxContext, +input));
new L matching;
for (BBRule r : valuesList(rulesByName))
if (ruleExpressionMatches(r))
matching.add(r);
lastOutput = null;
activeRule = first(matching);
if (activeRule != null)
if (cic(activeRule.answerMode, 'random))
lastOutput = random(activeRule.answers);
else {
RuleData rd = ruleData(activeRule);
lastOutput = get(activeRule.answers,
rd.answerIndex = (rd.answerIndex+1) % l(activeRule.answers));
}
}
bool ruleExpressionMatches(BBRule r) {
if (empty(r.expression)) false;
try {
ret ctxEvalCondition(r.expression);
} catch print e {
badRules.add(r);
rulesByName.remove(r.listName);
false;
}
}
L listsMatchingInput(S input) {
temp tempSetTL(ctxContext_var(), nu(CtxContext, +input));
ret [BBRule r : valuesList(rulesByName) | ruleExpressionMatches(r)];
}
}