Warning: session_start(): open(/var/lib/php/sessions/sess_1jv608f2ut4b6a6o70nj47755k, 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 CalendarEntry {
int year, month, day;
S text;
}
module Calendar > DynSCP {
int year = localYear(), month = localMonth();
transient SimpleCRUD crud;
start {
dbIndexing(CalendarEntry, 'year);
onChange(r {
if (month == 0) dm_q(r { setFields(year := year-1, month := 12) });
if (month == 13) dm_q(r { setFields(year := year+1, month := 1) });
revisualize2();
});
crud = new SimpleCRUD(CalendarEntry);
}
visualize {
ret withMargin(jBottomTabs("Month",
withBottomMargin(northAndCenter(rightAlignedLine(
jlabel("Month:"),
dm_fieldSpinner('month, 0, 13),
jlabel("Year:"),
jspinner_disableDigitGrouping(dm_fieldSpinner('year, 1970, 2030))),
super.visualize())),
"All Entries", withBottomMargin(crud.makePanel()));
}
visualize2 {
setModuleName("Calendar (" + month + "/" + year + ")");
int days = daysInMonth(year, month);
int weekDay = dayOfWeek_nr(calendarFromYMD(year, month, 1))-1;
print("Weekday " + year + "/" + month + "/" + 1 + ": " + weekDay);
new LL rows;
rows.add(map(intRangeList(7), func(int i) -> Component {
jcenteredlabel(shortEnglishWeekdays().get(i)) }));
rows.add(new L);
MultiMap entries = multiMapIndexByField day(conceptsWhere(CalendarEntry, +year, +month));
for (int i = 1; i <= days; i++) {
if (l(last(rows)) > weekDay) rows.add(new L);
while (weekDay > l(last(rows))) last(rows).add(jlabel());
JLabel lbl = jcenteredlabel(str(i));
L dayEntries = entries.get(i);
if (nempty(dayEntries)) {
setOpaqueBackground(Color.GREEN, lbl);
toolTip(lbl, lines_rtrim(collect text(dayEntries)));
}
last(rows).add(lbl);
weekDay = (weekDay+1) % 7;
}
while (l(last(rows)) < 7) last(rows).add(jlabel());
ret hvgrid(rows);
}
// API
void addEntry(S ymd, S text) {
if (uniq_sync_returnIfNew(CalendarEntry,
year := ymd_year(ymd),
month := ymd_month(ymd),
day := ymd_day(ymd),
+text) != null && month == ymd_month(ymd))
revisualize2();
}
}