There were a couple of problems, on both the front and back ends, that
prevented text types from being set and handled correctly for custom
fields.
The primary issue was that the <filename>_text_type
metadata was not
being stored into the extra_data
dictionary on the review request.
Investigation revealed that this item was being set correctly on the
review request draft, but was not being propagated upon publishing. The
root cause of this lies in ReviewRequestDraft.copy_fields_to_request
where changed fields are identified and their value's are copied
from draft to request. Nominally, fields only contain values and this
copying process is fine, but fields derived from BaseTextAreaField
have both a value and an associated text type metadata element. This
issue is resolved by adding a new propagate_data
method to the
BaseReviewRequestField
base class, which is now called in
copy_fields_to_request
. This method assumes the responsibility for
copying value's from draft to review request. In BaseTextAreaField
the
method is extended to also copy text type metadata.
Additionally there were a couple of problems on the front end which
prevented the Enable Markdown checkbox from always being set correctly
for custom fields. The getDraftField
method in ReviewRequestEditor
has logic for handing the useExtraData
case and was always getting
options.fieldID
from extraData
, while ignoring the fieldName
parameter passed into the function. This had the effect of always
returning the value associated with a custom field, regardless of what
data element the caller may have actually been asking for. Specifically,
this prevented the retrieval of the rich text attribute associated with
the field. Additionally in ReviewRequestEditorView.render
the name of
the rich text attribute was being incorrectly set to
<fieldname>_rich_text
rather than <fieldname>RichText
. This was
problematic because the later naming syntax is assumed in other places
for accessing the rich text attribute. Finally, in
ReviewRequestEditorView.registerField
the naming convention of the
text type field for the special case field name of 'text' was
incorrectly using text_text_type
rather than text_type
. All of these
problems have been resolved.