diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py index 308c92feb2c708222bdae0859e8a414f688016b2..10b5675b210f72e2d7d216e915059a371b82c696 100644 --- a/ckanext/odsh/helpers.py +++ b/ckanext/odsh/helpers.py @@ -7,17 +7,19 @@ log = logging.getLogger(__name__) def odsh_openness_score_dataset_html(dataset): score = 0 + #dataset = json.loads(dataset) resources = dataset.get('resources') - if resources: - for resource in resources: - r_qa = resource.get('qa') - if r_qa: - try: - qa = ast.literal_eval(r_qa) - resource_score = qa.get('openness_score') - if resource_score > score: - score = resource_score - except AttributeError, e: - log.error('Error while calculating openness score %s: %s\nException: %s', - e.__class__.__name__, unicode(e), traceback.format_exc()) + if resources is None: + return 0 + for resource in resources: + r_qa = resource.get('qa') + if r_qa: + try: + qa = ast.literal_eval(r_qa) + resource_score = qa.get('openness_score') + if resource_score > score: + score = resource_score + except AttributeError, e: + log.error('Error while calculating openness score %s: %s\nException: %s', + e.__class__.__name__, unicode(e), traceback.format_exc()) return score diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo index b5f7363d12c70bcf124ea3f4569043af2c10a2d0..fb7b6ae90841fbd9e7aeae0e2ed52158ace34b1e 100644 Binary files a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo and b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo differ diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po index f98d907757e76f64c5bc662e33343e7d7067c928..fdd98232bdae48c6f1040c2ffcae4991c8de2aaa 100644 --- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po +++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po @@ -110,7 +110,7 @@ msgid "Beginn des Zeitraumes: Fehlender Wert" msgstr "Bitte wählen Sie einen Beginn des Zeitraumes aus" msgid "Ende des Zeitraumes: Fehlender Wert" -msgstr "Bitte wählen Sie ein Ende des Zeitraumes aus" +msgstr "Bitte wählen Sie einen Zeitraum aus" msgid "Name: Fehlender Wert" msgstr "Bitte geben Sie eine Url ein" @@ -121,7 +121,7 @@ msgstr "Bitte geben Sie einen Ort ein" msgid "Tags" msgstr "Schlagwörter" -msgid "Notes: Fehlender Wert" +msgid "Beschreibung: Fehlender Wert" msgstr "Bitte geben Sie eine Beschreibung ein" msgid "Namensnennung: Fehlender Wert" @@ -130,12 +130,24 @@ msgstr "Bitte geben Sie einen Namen ein" msgid "Titel: Fehlender Wert" msgstr "Bitte geben Sie einen Titel ein" -msgid "Publish date: Fehlender Wert" -msgstr "Bitte wählen Sie ein Veröffetlichungsdatum" +msgid "odsh_publish_date_error_label" +msgstr "Bitte wählen Sie ein Veröffentlichungsdatum" + +msgid "odsh_spatial_extension_error_label" +msgstr "Bitte geben sie einen räumlichen Bezug an" msgid "Tag string: Fehlender Wert" msgstr "Bitte wählen Sie geeignete Schlagwörter" +msgid "odsh_resource_upload_error_label" +msgstr "Bitte laden Sie Ihren Datensatz hoch" + +msgid "odsh_resource_name_error_label" +msgstr "Bitte geben sie einen Namen für den Datensatz ein" + +msgid "odsh_resource_description_error_label" +msgstr "Bitte beschreiben Sie Ihren Datensatz" + msgid "Followers" msgstr "Abonennten" diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index aad1ae8c672d986108ae2687cfb0a64be58f54fb..1f50abaf545228acd30262906bf856f0fba683c3 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -122,7 +122,9 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm # # toolkit.get_converter('not_empty'), # toolkit.get_converter('odsh_convert_groups_string')] }) schema['resources'].update({ - 'url' : [ toolkit.get_converter('not_empty') ] + 'url' : [ toolkit.get_converter('not_empty') ], + 'description' : [ toolkit.get_converter('not_empty') ], + 'name' : [ toolkit.get_converter('not_empty') ] }) def create_package_schema(self): diff --git a/ckanext/odsh/public/odsh.css b/ckanext/odsh/public/odsh.css index 12ea178d960780d2538869daa37563ca147f8298..392473fdeb203ee965faa6fd22bab98abc6e1e52 100644 --- a/ckanext/odsh/public/odsh.css +++ b/ckanext/odsh/public/odsh.css @@ -361,7 +361,7 @@ label:after { border-radius: 0; } -.control-group.error .control-label, .control-group.error .help-block, .control-group.error .help-inline { +.control-label, .control-group.error .control-label, .control-group.error .help-block, .control-group.error .help-inline { color: black; } @@ -606,4 +606,18 @@ label:after { } .create-dataset-form{ - width: 50%;} \ No newline at end of file + width: 50%; +} + +.primary.span12 { + width: 100%; +} + +.inline-error { + color: #d4004b; + margin-top: 5px; +} + +.controls select { + width: 100%; +} diff --git a/ckanext/odsh/templates/macros/form.html b/ckanext/odsh/templates/macros/form.html index 4cb10b2faaeef221bbee495d2bc16a0d37137be1..2a847d9de6302115edfec0fe2e80cda288c31348 100644 --- a/ckanext/odsh/templates/macros/form.html +++ b/ckanext/odsh/templates/macros/form.html @@ -24,9 +24,28 @@ is_required=false) %} {%- set _type = 'text' if type=='date' and not value else type -%} {%- set onFocus = 'onfocus=(this.type=\'date\')' if type=='date' and not value else '' -%} +{% call input_block(id or name, label, error, classes, extra_html=extra_html, is_required=is_required) %} +<div class="row-fluid"> + <div class="span6"> + <input id="{{ id or name }}" type="{{ _type }}" name="{{ name }}" value="{{ value | empty_and_escape }}" placeholder="{{ placeholder }}" + {{ onFocus }} {{ attributes(attrs) }} /> + </div> + <div class="span6 inline-error"> + {{error}} + </div> +</div> +{% endcall %} +{% endmacro %} + +{% macro input_raw(name, id='', label='', value='', placeholder='', type='text', error="", classes=[], attrs={}, +is_required=false) %} +{%- set extra_html = caller() if caller -%} +{%- set _type = 'text' if type=='date' and not value else type -%} +{%- set onFocus = 'onfocus=(this.type=\'date\')' if type=='date' and not value else '' -%} + {% call input_block(id or name, label, error, classes, extra_html=extra_html, is_required=is_required) %} <input id="{{ id or name }}" type="{{ _type }}" name="{{ name }}" value="{{ value | empty_and_escape }}" placeholder="{{ placeholder }}" - {{ onFocus }} {{ attributes(attrs) }} /> + {{ onFocus }} {{ attributes(attrs) }} /> {% endcall %} {% endmacro %} @@ -137,8 +156,15 @@ options - A list/tuple of fields to be used as <options>. {%- set extra_html = caller() if caller -%} {% call input_block(id or name, label or name, error, classes, control_classes=["editor"], extra_html=extra_html, is_required=is_required) %} - <textarea id="{{ id or name }}" name="{{ name }}" cols="20" rows="5" placeholder="{{ placeholder }}" - {{ attributes(attrs) }}>{{ value | empty_and_escape }}</textarea> + <div class="row-fluid"> + <div class="span6"> + <textarea id="{{ id or name }}" name="{{ name }}" cols="20" rows="5" placeholder="{{ placeholder }}" + {{ attributes(attrs) }}>{{ value | empty_and_escape }}</textarea> + </div> + <div class="span6 inline-error"> + {{error}} + </div> + </div> {% endcall %} {% endmacro %} @@ -454,11 +480,11 @@ options - A list/tuple of fields to be used as <options>. {% endif %} {{ input(field_url, label=url_label, id='field-image-url', placeholder=placeholder, - value=data.get(field_url), error=errors.get(field_url), classes=['control-full']) }} + value=data.get(field_url), error='', classes=['control-full']) }} {% if is_upload_enabled %} {{ input(field_upload, label=upload_label, id='field-image-upload', type='file', placeholder='', value='', - error='', classes=['control-full'], is_required=true) }} + error=errors, classes=['control-full'], is_required=true) }} {% if is_upload %} {{ checkbox(field_clear, label=_('Clear Upload'), id='field-clear-upload', value='true', error='', classes=['control-full']) }} @@ -467,4 +493,4 @@ options - A list/tuple of fields to be used as <options>. {% if is_upload_enabled %}</div>{% endif %} - {% endmacro %} \ No newline at end of file + {% endmacro %} diff --git a/ckanext/odsh/templates/package/base_form_page.html b/ckanext/odsh/templates/package/base_form_page.html index 3e321e79e2ae969b3024d1d50a6d428f59b842ce..b5ac492bdd32b75b23fe783aa23dd1675949ac51 100644 --- a/ckanext/odsh/templates/package/base_form_page.html +++ b/ckanext/odsh/templates/package/base_form_page.html @@ -1,3 +1,36 @@ {% ckan_extends %} -{% block secondary%} -{% endblock %} \ No newline at end of file + + {% block main_content %} + + {% block flash %} + {{ super() }} + {% endblock %} + + {% block toolbar %} + {{ super() }} + {% endblock %} + + <div class="row wrapper{% block wrapper_class %}{% endblock %}{% if self.secondary()|trim == '' %} no-nav{% endif %}"> + {# + The pre_primary block can be used to add content to before the + rendering of the main content columns of the page. + #} + {% block pre_primary %} + {% endblock %} + + {% block secondary %} + {% endblock %} + + {% block primary %} + <div class="primary span12"> + {% block primary_content %} + {{ super() }} + {% endblock %} + </div> + {% endblock %} + + </div> + {% endblock %} + + + diff --git a/ckanext/odsh/templates/package/new_resource.html b/ckanext/odsh/templates/package/new_resource.html index 18919d586f085f32a48b35873b08e341f96ad9bc..31afa2531218451879774e580cfe6b6d992b0205 100644 --- a/ckanext/odsh/templates/package/new_resource.html +++ b/ckanext/odsh/templates/package/new_resource.html @@ -16,10 +16,10 @@ include_metadata=false, pkg_name=pkg_name, stage=stage, allow_upload=g.ofs_impl and logged_in, dataset_type=dataset_type %}{% endblock %} -{% block secondary_content %} +{% block secondary %} {% endblock %} {% block scripts %} {{ super() }} {% resource 'vendor/fileupload' %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ckanext/odsh/templates/package/snippets/package_basic_fields.html b/ckanext/odsh/templates/package/snippets/package_basic_fields.html index c372f3c520deb83f22ac0beeff13515573b2fab4..591dd3790a13b5edef30369931aa46aed57c794a 100644 --- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html +++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html @@ -4,8 +4,9 @@ <!-- field title --> {% block package_basic_fields_title %} +{% set error_string = _(_('Title') + ': '+errors.title[0]) if errors.title %} {{ form.input('title', id='field-title', label=_('Title'), value=data.title, -error=errors.title, classes=['control-full', 'control-large'], attrs={'data-module': 'slug-preview-target'}, +error=error_string, classes=['control-full'], attrs={'data-module': 'slug-preview-target'}, is_required=true,placeholder=_('Enter title')) }} {% endblock %} @@ -23,23 +24,25 @@ is_required=true,placeholder=_('Enter title')) }} <!-- field notes --> {% block package_basic_fields_description %} + {% set error_string = _(_('Description') + ': '+errors.notes[0]) if errors.notes %} {{ form.markdown('notes', id='field-notes', label=_('Description'), value=data.notes, - error=errors.notes, is_required=true, placeholder=_('Enter description')) }} + error=error_string, is_required=true, placeholder=_('Enter description')) }} {% endblock %} <!-- field license --> + <label class="control-label" for="field-license"> {{ _("License") }}: <span title="{{ _("This field is required") }}" class="control-required">*</span> </label> - <div class='row'> - <div class='span4'> + <div class='row-fluid'> + <div class='span3'> {% block package_basic_fields_license %} <div class="control-group"> {% set error = errors.license_id %} <div class="controls"> - <select id="field-license" name="license_id" class="span4"> + <select id="field-license" name="license_id"> {% set existing_license_id = data.get('license_id') %} {% for license_id, license_desc in h.license_options(existing_license_id) %} <option value="{{ license_id }}" {% if existing_license_id==license_id %}selected="selected" {% @@ -50,49 +53,55 @@ is_required=true,placeholder=_('Enter title')) }} </div> </div> </div> - <div class='span1'></div> - <div class='span4'> + <div class='span3'> <!-- field Namensnennung --> - {{ form.input('access_constraints', id='field-licence-name', value=data.access_constraints, + {{ form.input_raw('access_constraints', id='field-licence-name', value=data.access_constraints, error=errors.access_constraints, - classes=['control-full span4'],type='text',is_required=true,attrs={'disabled':true, + classes=['control-full'],type='text',is_required=true,attrs={'disabled':true, 'data-module':"odsh_form", 'data-module-licensetoggle':'true' }, placeholder=_('enter name')) }} </div> + <div class="span6 inline-error"> + {{error}} + </div> </div> {% endblock %} <!-- timerange --> - <div class='row'> - <label for="start-end" class="control-label">{{ _('timerange') }}: - <span title="{{ _("This field is required") }}" class="control-required">*</span> - </label> - <div id='start-end' class='span4'> + {% set error_string = _(_('Temporal end') + ': '+errors.temporal_end[0]) if errors.temporal_end %} + <label for="start-end" class="control-label">{{ _('timerange') }}: + <span title="{{ _("This field is required") }}" class="control-required">*</span> + </label> + <div class='row-fluid'> + <div id='start-end' class='span3'> <!-- field temporal_start --> {% set temporal_start_label=_('odsh_temporal_start_label') %} - {{ form.input('temporal_start', id='field-temporal-start', value=data.temporal_start, + {{ form.input_raw('temporal_start', id='field-temporal-start', value=data.temporal_start, error=errors.temporal_start, classes=['control-full'],type='date',is_required=true,placeholder=_('from')) }} </div> - <div class='span1'></div> - <div class='span4'> + <div class='span3'> <!-- field temporal_end --> {% set temporal_end_label='Ende des Zeitraumes' %} - {{ form.input('temporal_end', id='field-temporal-end', value=data.temporal_end, + {{ form.input_raw('temporal_end', id='field-temporal-end', value=data.temporal_end, error=errors.temporal_end, classes=['control-full'],type='date',is_required=true, placeholder=_('to')) }} </div> + <div class="span6 inline-error"> + {{error_string}} + </div> </div> <!-- field publish date --> {% set publish_date_value=h.odsh_now() %} + {% set error_string = _('odsh_publish_date_error_label') if errors.publish_date %} <!-- if form_style != 'edit' && !%} --> <!-- value=data.get('extras').publish_date, --> {% set publish_date_label='Veröffentlichungsdatum'%} {{ form.input('publish_date', id='field-publish-date', label=publish_date_label, value=publish_date_value, - error=errors.publish_date, classes=['control-full'],type='date',is_required=true) }} + error=error_string, classes=['control-full'],type='date',is_required=true) }} <!-- field tags --> @@ -110,22 +119,28 @@ is_required=true,placeholder=_('Enter title')) }} {% endblock %} <!-- field spatial_extension --> + {% set error_string = _('odsh_spatial_extension_error_label') if errors.spatial_extension %} {{ form.input('spatial_extension', id='field-spatial-extension', label=_('Spatial extension'), value=data.spatial_extension, - error=errors.spatial_extension, classes=['control-full'],type='text',is_required=true, + error=error_string, classes=['control-full'],type='text',is_required=true, placeholder=_('Enter spatial extension')) }} + <!-- field private --> <div class="control-group"> <label for="field-private" class="control-label">{{ _('Visibility') }}: <span title="{{ _("This field is required") }}" class="control-required">*</span> </label> <div class="controls"> - <select id="field-private" name="private"> + <div class="row-fluid"> + <div class="span6"> + <select id="field-private" name="private"> {% for option in [('True', _('Private')), ('False', _('Public'))] %} <option value="{{ option[0] }}" {% if option[0]==data.private|trim %}selected="selected" {% endif %}>{{ - option[1] }}</option> + option[1] }}</option> {% endfor %} - </select> + </select> + </div> + </div> </div> </div> @@ -134,12 +149,16 @@ is_required=true,placeholder=_('Enter title')) }} <div class="control-group"> <label for="field-state" class="control-label">{{ _('State') }}</label> <div class="controls"> - <select id="field-state" name="state"> - <option value="active" {% if data.get('state', 'none' )=='active' %} selected="selected" {% endif %}>{{ - _('Active') }}</option> - <option value="deleted" {% if data.get('state', 'none' )=='deleted' %} selected="selected" {% endif %}>{{ - _('Deleted') }}</option> - </select> + <div class="row-fluid"> + <div class="span6"> + <select id="field-state" name="state"> + <option value="active" {% if data.get('state', 'none' )=='active' %} selected="selected" {% endif %}>{{ + _('Active') }}</option> + <option value="deleted" {% if data.get('state', 'none' )=='deleted' %} selected="selected" {% endif %}>{{ + _('Deleted') }}</option> + </select> + </div> + </div> </div> </div> - {% endif %} \ No newline at end of file + {% endif %} diff --git a/ckanext/odsh/templates/package/snippets/package_form.html b/ckanext/odsh/templates/package/snippets/package_form.html index c5e56718b42eaac426a34de12ec07b525ca9c77d..4d18903ea2f3dfe75f88e1c7cbf50abbeb7b5524 100644 --- a/ckanext/odsh/templates/package/snippets/package_form.html +++ b/ckanext/odsh/templates/package/snippets/package_form.html @@ -11,7 +11,7 @@ then itself be extended to add/remove blocks of functionality. #} <input type="hidden" name="_ckan_phase" value="dataset_new_1" /> {# pkg_name used in 3 stage edit #} <input type="hidden" name="pkg_name" value="{{ data.id }}" /> - {% block errors %}{{ form.errors(error_summary) }}{% endblock %} + {# {% block errors %}{{ form.errors(error_summary) }}{% endblock %} #} {% block basic_fields %} {% snippet 'package/snippets/package_basic_fields.html', data=data, errors=errors, licenses=c.licenses, @@ -32,10 +32,13 @@ then itself be extended to add/remove blocks of functionality. #} {% endif %} {% endblock %} {% block save_button %} - <button class="btn btn-primary" type="submit" name="save">{% block save_button_text %}{{ _('Next: Add Data') - }}{% - endblock %}</button> + <div class="row-fluid"> + <div class="span6"> + <button class="btn btn-primary" type="submit" name="save">{% block save_button_text %}{{ _('Next: Add Data') + }}{% endblock %}</button> + </div> + </div> {% endblock %} </div> {% endblock %} -</form> \ No newline at end of file +</form> diff --git a/ckanext/odsh/templates/package/snippets/resource_form.html b/ckanext/odsh/templates/package/snippets/resource_form.html index 8d753890e88d621644a56aef856b7dc931c75bb4..610c2b42e0a1d64d82beac46b111757b02521e32 100644 --- a/ckanext/odsh/templates/package/snippets/resource_form.html +++ b/ckanext/odsh/templates/package/snippets/resource_form.html @@ -16,27 +16,31 @@ {% endif %} {% endblock %} - {% block errors %}{{ form.errors(error_summary) }}{% endblock %} + {# {% block errors %}{{ form.errors(error_summary) }}{% endblock %} #} <input name="id" value="{{ data.id }}" type="hidden" /> {% block basic_fields %} + {% block basic_fields_url %} {% set is_upload = (data.url_type == 'upload') %} - {{ form.image_upload(data, errors, field_url='url', field_upload='upload', field_clear='clear_upload', + {% set error_string = _('odsh_resource_upload_error_label') if error_summary %} + {{ form.image_upload(data, error_string, field_url='url', field_upload='upload', field_clear='clear_upload', is_upload_enabled=h.uploads_enabled(), is_url=data.url and not is_upload, is_upload=is_upload, upload_label=_('Data-Upload'), url_label=_('URL'), placeholder=_('http://example.com/external-data.csv'), field_name='name') }} {% endblock %} {% block basic_fields_name %} + {% set error_string = _('odsh_resource_name_error_label') if errors.name %} {{ form.input('name', id='field-name', label=_('Name'), placeholder=_('Enter name of the dataset'), - value=data.name, error=errors.name, classes=['control-full'], is_required=true) }} + value=data.name, error=error_string, classes=['control-full'], is_required=true) }} {% endblock %} {% block basic_fields_description %} + {% set error_string = _('odsh_resource_description_error_label') if errors.description %} {{ form.markdown('description', id='field-description', label=_('Description'), - placeholder=_('Enter description of the dataset'), value=data.description, error=errors.description, + placeholder=_('Enter description of the dataset'), value=data.description, error=error_string, is_required=true) }} {% endblock %} @@ -93,4 +97,4 @@ {% endblock %} {% endif %} </div> -</form> \ No newline at end of file +</form>