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;
}
p { dbIndexingCI(Page, 'url); }
html {
S url = domain() + dropTrailingSlash(uri);
Pair pageAndNew = uniqCI2_sync(Page, +url);
Page page = pageAndNew.a;
if (eqicOneOf(url, "agi.blue", "www.agi.blue"))
ret hhtml(hhead_title("agi.blue Overview")
+ hbody(h1("agi.blue Overview")
+ ul(map(func(S _url) -> S {
ahref("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 (!hasWhereIC(entries, +key, +value, +ip)) {
print("SAVING");
entries.add(cnew Entry(+page, +key, +value, +ip, count := l(entries) + 1));
}
}
ret entries;
});
sortByFieldInPlace created(entries);
for i over entries:
if (entries.get(i).count == 0)
cset(entries.get(i), count := i+1);
// input reset
S key2 = key, value2 = value;
if (nempty(key) && nempty(value)) key2 = value2 = "";
bool form = eq(params.get('form), "1");
ret hhtml(
hhead_title(url)
+ hbody_fullcenter(
p(small(ahref("http://www.agi.blue", "agi.blue")))
+ h1(htmlEncode2(url))
+ p(pageAndNew.b ? "NEW!" : "seen before.")
+ hpostform(
h3("Add an entry")
+ "Key: " + hinputfield(key := key2) + " Value: " + hinputfield(value := value2) + "
" + hsubmit("Add")
)
+ h3("Entries")
+ ul(map(entries, func(Entry e) -> S {
"[" + e.count + "] " +
htmlencode2(e.key) + ": " + b(
isURL(e.value)
? ahref(e.value, htmlEncode2(e.value))
: htmlencode2(e.value)
) }))
));
}