ckan / ckanext-scheming

Easy, shareable custom CKAN schemas
Other
87 stars 163 forks source link

allow override of Visibility field business logic from organisation field #423

Open avowkind opened 2 months ago

avowkind commented 2 months ago

The ckanext/scheming/templates/scheming/form_snippets/organisation.html snippet closely couples the visibility field to the organisation field. Forcing them to be adjacent, visibility always showing and unable to set a default value for visibility.

A dataset schema containing this:

  - field_name: "owner_org"
    label: "Organization"
    preset: "dataset_organization"

results in two fields Organisation and Visibility where each time the organisation is changed the visibility is reset to private or to the previously saved value.

{% block package_metadata_fields_visibility %}
    <div class="control-group form-group control-medium">
      <label for="field-private" class="control-label">{{ _('Visibility') }}</label>
      <div class="controls">
        <select id="field-private" name="private" class="form-control form-select">
          {% for option in [('True', _('Private')), ('False', _('Public'))] %}
          <option value="{{ option[0] }}" {% if option[0] == data.private|trim %}selected="selected"{% endif %}>{{ option[1] }}</option>
          {% endfor %}
        </select>
      </div>
    </div>
  {% endblock %}

I suggest that either:

  1. The visibility field can be optionally dropped out of the dataset_organization preset and visibility added independently as a field which then allows setting of the default value.
  2. or a parameter default: True is available and used if the data.private is not set
  3. or perhaps a check is made for the organisation record having a default_visibility field and the default is set to that option