Warning: session_start(): open(/var/lib/php/sessions/sess_hr4jnun8q87mh174gp4t5uj8s7, 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
// returns true if change
sbool _csetField(Concept c, S field, O value) ctex {
Field f = setOpt_findField(c.getClass(), field);
//print("cset: " + c.id + " " + field + " " + struct(value) + " " + f);
if (value instanceof RC) value = c._concepts.getConcept((RC) value);
value = deref(value);
if (value instanceof S && l((S) value) >= concepts_internStringsLongerThan) value = intern((S) value);
if (f == null) {
// dynamic field (undeclared)
assertIdentifier(field);
O oldVal = mapGet(c.fieldValues, field);
if (value cast Concept) {
if (oldVal instanceof Concept.Ref)
// change existing reference
ret ((Concept.Ref) oldVal).set(value);
else {
// overwrite non-reference value if any,
// create new reference
dynamicObject_setRawFieldValue(c, field, c.new Ref(value));
c.change(); true;
}
} else {
// value is not a concept
// if it was a reference, cleanly delete it
if (oldVal cast Concept.Ref) oldVal.unindexAndDrop();
if (eq(oldVal, value)) false;
if (isConceptList(value)) {
// TODO: clean-up etc
dynamicObject_setRawFieldValue(c, field, c.new RefL(value/L));
c.change(); true;
}
if (value == null) {
// delete field
dynamicObject_dropRawField(c, field);
} else {
// update or create field
if (!isPersistable(f))
fail("Can't persist: " + c + "." + field + " = "+ value);
dynamicObject_setRawFieldValue(c, field, value);
}
c.change(); true;
}
} else if (isSubtypeOf(f.getType(), Concept.Ref.class)) {
// Concept.Ref magic
((Concept.Ref) f.get(c)).set((Concept) derefRef(value));
c.change(); true;
} else if (isSubtypeOf(f.getType(), Concept.RefL.class)) {
// Concept.RefL magic
((Concept.RefL) f.get(c)).replaceWithList(lmap derefRef((L) value));
c.change(); true;
} else {
O old = f.get(c);
if (neq(value, old)) {
bool isTransient = isTransient(f);
if (!isTransient && !isPersistable(f))
fail("Can't persist: " + c + "." + field + " = "+ value);
f.set(c, value);
if (!isTransient) c.change();
true;
}
}
false;
}