+
+
+
+/* ------------------------------------------------------------------------------------------------
+ * defs and enums
+ * ------------------------------------------------------------------------------------------------
+ */
+
+#define GBAS GWEN_Buffer_AppendString
+#define GBAA GWEN_Buffer_AppendArgs
+
+#define I18N(msg) msg
+
+
+
+/* ------------------------------------------------------------------------------------------------
+ * forward declarations
+ * ------------------------------------------------------------------------------------------------
+ */
+
+static int _fieldToForm(const AQCGI_OBJECT *o, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf);
+static int _writeBool(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf);
+static int _writeInt(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf);
+static int _writeString(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf);
+static int _writeDate(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf);
+static int _writeChoice(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf);
+static int _writeText(const AQCGI_OBJECT *o, GWEN_BUFFER *dbuf);
+
+static int _fieldFromPostRq(AQCGI_OBJECT *o, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_DB_NODE *dbPost);
+static int _readBool(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_DB_NODE *dbPost);
+static int _readInt(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_DB_NODE *dbPost);
+static int _readString(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_DB_NODE *dbPost);
+static int _readDate(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_DB_NODE *dbPost);
+static int _readChoice(GWEN_DB_NODE *db, const char *n, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_DB_NODE *dbPost);
+static int _readText(AQCGI_OBJECT *o, GWEN_DB_NODE *dbPost);
+
+
+
+
+/* ------------------------------------------------------------------------------------------------
+ * implementation
+ * ------------------------------------------------------------------------------------------------
+ */
+
+int AQCGI_ObjectHtml_toForm(const AQCGI_OBJECT *o, const AQCGI_OBJECT_DEF *odef, GWEN_BUFFER *dbuf)
+{
+ const AQCGI_FIELD_DEF_LIST *fdefList;
+ uint32_t flags;
+
+ flags=AQCGI_ObjectDef_GetFlags(odef);
+ fdefList=AQCGI_ObjectDef_GetFieldDefList(odef);
+ if (fdefList && AQCGI_FieldDef_List_GetCount(fdefList)) {
+ const AQCGI_FIELD_DEF *fdef;
+
+ GBAS(dbuf,"\n");
+ fdef=AQCGI_FieldDef_List_First(fdefList);
+ while(fdef) {
+ int rv;
+
+ rv=_fieldToForm(o, odef, fdef, dbuf);
+ if (rv<0) {
+ DBG_INFO(AQCGI_LOGDOMAIN, "here (%d)", rv);
+ return rv;
+ }
+
+ fdef=AQCGI_FieldDef_List_Next(fdef);
+ }
+
+
+ GBAS(dbuf,"
\n");
+ }
+ if (flags & AQCGI_OBJECT_FLAGS_HASTEXT)
+ _writeText(o, dbuf);
+
+ return 0;
+}
+
+
+
+int AQCGI_ObjectHtml_fromPostRq(AQCGI_OBJECT *o, const AQCGI_OBJECT_DEF *odef, GWEN_DB_NODE *dbPost)
+{
+ const AQCGI_FIELD_DEF_LIST *fdefList;
+ uint32_t flags;
+
+ flags=AQCGI_ObjectDef_GetFlags(odef);
+ fdefList=AQCGI_ObjectDef_GetFieldDefList(odef);
+ if (fdefList && AQCGI_FieldDef_List_GetCount(fdefList)) {
+ const AQCGI_FIELD_DEF *fdef;
+
+ fdef=AQCGI_FieldDef_List_First(fdefList);
+ while(fdef) {
+ int rv;
+
+ rv=_fieldFromPostRq(o, odef, fdef, dbPost);
+ if (rv<0) {
+ DBG_INFO(AQCGI_LOGDOMAIN, "here (%d)", rv);
+ return rv;
+ }
+
+ fdef=AQCGI_FieldDef_List_Next(fdef);
+ }
+ }
+ if (flags & AQCGI_OBJECT_FLAGS_HASTEXT)
+ _readText(o, dbPost);
+
+ return 0;
+}
+
+
+
+
+
+
+
+
+int _fieldToForm(const AQCGI_OBJECT *o, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf)
+{
+ GWEN_DB_NODE *db;
+
+ db=AQCGI_Object_GetVars(o);
+ if (db) {
+ int t;
+ int rv=GWEN_ERROR_GENERIC;
+ const char *sName;
+ const char *sLabel;
+
+ /* write label */
+ sName=AQCGI_FieldDef_GetName(fdef);
+ sLabel=AQCGI_FieldDef_GetLabel(fdef);
+ GBAA(dbuf, " | ", sName?sName:"", sLabel?sLabel:"");
+
+ /* write field */
+ t=AQCGI_FieldDef_GetDataType(fdef);
+ switch(t) {
+ case AQCGI_ObjectFieldType_Unknown: rv=GWEN_ERROR_BAD_DATA; break;
+ case AQCGI_ObjectFieldType_Bool: rv=_writeBool(db, sName, odef, fdef, dbuf); break;
+ case AQCGI_ObjectFieldType_Int: rv=_writeInt(db, sName, odef, fdef, dbuf); break;
+ case AQCGI_ObjectFieldType_String: rv=_writeString(db, sName, odef, fdef, dbuf); break;
+ case AQCGI_ObjectFieldType_Date: rv=_writeDate(db, sName, odef, fdef, dbuf); break;
+ case AQCGI_ObjectFieldType_Choice: rv=_writeChoice(db, sName, odef, fdef, dbuf); break;
+
+ }
+ GBAS(dbuf, " |
\n");
+
+ return rv;
+ }
+ else {
+ DBG_ERROR(AQCGI_LOGDOMAIN, "No vars");
+ return GWEN_ERROR_NO_DATA;
+ }
+}
+
+
+
+int _writeBool(GWEN_DB_NODE *db, const char *sName, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf)
+{
+ int v;
+
+ v=GWEN_DB_GetIntValue(db, sName, 0, 0);
+ GBAA(dbuf, "", sName, v?"checked":"");
+ return 0;
+}
+
+
+
+int _writeInt(GWEN_DB_NODE *db, const char *sName, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf)
+{
+ int v;
+ uint32_t flags;
+
+ flags=AQCGI_FieldDef_GetFlags(fdef);
+ v=GWEN_DB_GetIntValue(db, sName, 0, 0);
+ GBAA(dbuf, "");
+ return 0;
+}
+
+
+
+int _writeString(GWEN_DB_NODE *db, const char *sName, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf)
+{
+ const char *v;
+ uint32_t flags;
+
+ flags=AQCGI_FieldDef_GetFlags(fdef);
+ v=GWEN_DB_GetCharValue(db, sName, 0, NULL);
+ GBAA(dbuf, "");
+ return 0;
+}
+
+
+
+int _writeDate(GWEN_DB_NODE *db, const char *sName, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf)
+{
+ int64_t v;
+ GWEN_TIMESTAMP *ts;
+ GWEN_DATE *dt;
+
+ v=(int64_t) GWEN_DB_GetIntValue(db, sName, 0, 0);
+ ts=GWEN_Timestamp_fromInt64(v);
+ dt=ts?GWEN_Date_fromLocalTime(GWEN_Timestamp_toTimeT(ts)):GWEN_Date_CurrentDate();
+ GWEN_Timestamp_free(ts);
+ GBAA(dbuf, "");
+ GWEN_Date_free(dt);
+ return 0;
+}
+
+
+
+int _writeChoice(GWEN_DB_NODE *db, const char *sName, const AQCGI_OBJECT_DEF *odef, const AQCGI_FIELD_DEF *fdef, GWEN_BUFFER *dbuf)
+{
+ int v;
+ const char *sChoices;
+
+ v=GWEN_DB_GetIntValue(db, sName, 0, 0);
+ sChoices=AQCGI_FieldDef_GetChoices(fdef);
+ if (sChoices && *sChoices) {
+ GWEN_STRINGLIST *sl;
+
+ sl=GWEN_StringList_fromString2(sChoices, ";", 0, GWEN_TEXT_FLAGS_DEL_QUOTES | GWEN_TEXT_FLAGS_CHECK_BACKSLASH);
+ if (sl) {
+ GWEN_STRINGLISTENTRY *se;
+ int i=0;
+
+ GBAA(dbuf, " |