Warning: session_start(): open(/var/lib/php/sessions/sess_ou0a86ejch0uh8t9e9v2hud89o, 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 Page { S url; }
concept Entry { new Ref page; int count; S key, value; S ip; }
static int lines;
sbool allowMultipleCasesInValues = true;
p {
dbIndexingCI(Page, 'url);
for (Page p) if (!isAGIDomain(p.url)) p.delete();
lines = countLines(mySource());
}
set flag NoNanoHTTPD. html {
S q = params.get('q);
S domain = or2(params.get('domain), domain());
if (nempty(q)) {
domain = makeAGIDomain(q);
if (l(domain) > maximumDomainPartLength()) // escape with "domain="
ret hrefresh("http://agi.blue/" + hquery(+domain, key := "read as", value := q));
ret hrefresh("http://" + domain + (eq(q, domain) ? "" : "/" + hquery(key := "read as", value := q)));
//uri = "/"; replaceMapWithParams(params, key := "read as", value := q);
}
S url = domain + dropTrailingSlash(uri);
Page page, bool newPage = unpair uniqCI2_sync(Page, +url);
S top = p(hsnippetimg(#1101682, width := 565/5, height := 800/5, title := "Robot by Peerro @ DeviantArt"))
+ p(small(b(ahref("http://www.agi.blue", "agi.blue"))
+ " | " + targetBlank(progLink(), "source code") + " of this web site (" + nLines(lines) + ")"));
if (eqicOneOf(url, "agi.blue", "www.agi.blue"))
ret hhtml(hhead_title("agi.blue Overview")
+ hbody_fullcenter(top
+ hform("Give input." + "
" + htextinput('q) + " " + hsubmit("Ask"))
+ h1("agi.blue Overview")
+ p(nlToBr(nemptyLines(map(func(S _url) -> S {
ahref(fixAGILink("http://" + _url), htmlEncode2(_url))
}, collect url(list(Page))))))
));
S key = trim(params.get('key)), value = trim(params.get('value));
L entries = withDBLock(func -> L {
L entries = findBackRefs(page, Entry);
print("Entries: " + l(entries));
if (nempty(key) && nempty(value)) {
S ip = subBot_clientIP();
if (!any(e -> eqic(e.key, key) && eq_icIf(!allowMultipleCasesInValues, e.value, value) && eq(e.ip, ip), entries)) {
print("SAVING");
entries.add(cnew Entry(+page, +key, +value, +ip, count := l(entries) + 1));
}
}
ret entries;
});
sortByFieldInPlace created(entries);
numberEntriesInConceptField count(entries);
S get = params.get('get);
if (nempty(get))
ret serveText(jsonEncode(collect value(llNotNulls(firstWhereIC(entries, key := get)))));
// input reset
S key2 = key, value2 = value;
if (nempty(key) && nempty(value)) key2 = value2 = "";
bool withHidden = eq(params.get('withHidden), "1");
new Set hide;
if (!withHidden) for (Entry e : entries) if (eqic(e.key, 'hide) && isSquareBracketedInt(e.value)) addAll(hide, e.count, parseInt(unSquareBracket(e.value)));
new MultiMap mmMeta;
for (Entry e : entries) if (isSquareBracketedInt(e.key)) mmMeta.put(parseInt(unSquareBracket(e.key)), e.value);
new MultiMap mm;
for (Entry e : entries) mm.put(e.key, e.value);
S name = or2(/* ouch */ last(mm.get("read as")), /* end ouch */ unpackAGIDomain(page.url), page.url);
ret hhtml(hhead_title(url) + hbody_fullcenter(
top + h1(ahref_unstyled("http://" + url, htmlEncode2(name)) + (newPage ? " [huh????]" : ""))
+ p(nlToBr(nemptyLines(map(entries, func(Entry e) -> S {
!withHidden && (hide.contains(e.count) || eqic(e.key, "read as") && eqic(e.value, name)) ? "" : "[" + e.count + "] " +
htmlencode2(e.key) + ": " + b(
isURL(e.value)
|| cic(mmMeta.get(e.count), "is a URL")
|| isAGIDomain(e.value)
? ahref(fixAGILink(absoluteURL(e.value)), htmlencode2(e.value))
: htmlencode2(e.value)
) }))))
+ hpostform(h3("Add an entry")
+ "Key: " + hinputfield(key := key2) + " Value: " + hinputfield(value := value2) + "
" + hsubmit("Add")
)
));
}