From 7ad7263d97c00fe977641efad24b39d44d8d32d0 Mon Sep 17 00:00:00 2001
From: anonymous <anonymous>
Date: Wed, 16 Jan 2019 09:53:35 +0100
Subject: [PATCH] first draft with issued

---
 ckanext/odsh/helpers.py                       |  19 ++++++++-
 .../odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo  | Bin 5186 -> 5291 bytes
 .../odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po  |   4 ++
 ckanext/odsh/plugin.py                        |  40 +++++++++++++++---
 .../odsh/templates/package/snippets/info.html |   4 +-
 .../snippets/package_basic_fields.html        |  27 +++++++++---
 6 files changed, 80 insertions(+), 14 deletions(-)

diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py
index 8ca47d1d..e3006a11 100644
--- a/ckanext/odsh/helpers.py
+++ b/ckanext/odsh/helpers.py
@@ -107,4 +107,21 @@ def odsh_upload_known_formats():
     return value
 
 def odsh_encodeurl(url):
-    return urllib.quote(url, safe='')
\ No newline at end of file
+    return urllib.quote(url, safe='')
+
+def odsh_extract_error(key, errors):
+    if not errors or not ('extras' in errors):
+        return None
+    ext = errors['extras']
+    for item in ext:
+        if 'key' in item:
+            for error in item['key']:
+                if error.startswith(key):
+                    return error.replace(key+':','')
+
+def odsh_extract_value_from_extras(extras, key):
+    if not extras:
+        return None
+    for item in extras:
+        if 'key' in item and item['key'].lower() == key:
+            return item['value']
\ No newline at end of file
diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo
index c95ab37b7b246ec07bc35948f19a82d5b63f66ac..91550d475d3d3b14a514f413e8d44e2f15df3c80 100644
GIT binary patch
delta 1467
zcmX@4v0AhKo)F7a1_lO(Fa`z&83qQ1GfW^J0@tuIFbFX)Fx0X#FmN+4Fic=&U{GaX
zV3@-SQGbY)fq|8Qf#E(Y0|Pq)1H)6Oy0@$h4EziX3_n>J7?c?p7&zG&7`PZ17<Abf
z7z7y@7%bQr7!(*7>KVM)7#JiO7#Oml60J~$)7c;vE@FdNu#OGlkS%Ns3~USx49D3R
z7&sXi7|yXVFi0>kFx-HOe`JF=<OkFokgGrr<YtHH6J%##;A3E5kYERSq@IC6ot=R}
zg@J*=mz{w@gn@yfh@F8!mVtqxot=S!mw|y{DLcf0o1q%dLe<@2hdA&fI|G9>0|Ucf
zb_ND*1_lO64v5cPIT#qE7#J8rIT#pN7#J7|I2ags7#J8zIUo*b;$UFVt!H3hn8?Av
zAj-hNu%83s)2kc|3>*v$47WKTE`9>l@ER)qi-UndoPmLXnG<4>G$+IYZBB^622gQ(
zPDlv(b3)9E<b*^)5>#C-Cj&!0$YnL0kRWS>D(r;Plc3_WIUx>N%n9-FDozFlW(Ed^
zZJdy}+y!;O8BPWUVFm_<i<}S-J>`Tr^fxCst{H^6KtayHV8R9AM{zOKGsrP8FjPYY
zW^qA+dN&s&uCGGr7hDjZ{N`d{0Hse>ZUzQD1_lNWZUzP~1_lOmZUzPm1_p*EZU%-4
zj0_CBxgk;K!wX3pQM?Qch71f0#k>#)EaipBpXRNH#K}!w2>px~;_}bDkTk)`$G{-Q
zz`&r#2N8GWV_;BYU|@*mV_=X6S;z-5Xc1I?10N&`j`2Z4^eP_%g8%~q!(Bc|2)^Tk
zM8Q`+hzA+!`5^+r{163lP+FBAk`{EJd?S8H;<V(4Br-pK25`t#@k6rVOn!)iw(&!v
z=o&vH5kKOGI2_~(P?`}FfP|!;00V;-0|P_7g#ZJCA_D_MvH&FLTLl;xG#MBe<_kc4
zc2WQmr`H7_2E7(wU@&4}U|<x4SZE>$acGDj#Na4Fh(}VO{A@u;;w%+}gj|&%#3Ks@
z!68)7uuTw>i1rCWg6aZP<3lL@S`gxpuTXW&LXgBKDg;T@l0p!Rm7uf^lr|HB<PHZR
zh`9km5QioTLF`Kx0y(svfuRzrph1X%K?9T>g%}ug85kIL2{AC3GcYi`5P~Ec1z|{#
zx(P!<AVnCGMy3lxLS~OJ#G*^Wkhpy;3~}H$VTgnO3o|fSg0ig$1A{XI1B0yy1A`_g
z`!#OPWS!5#pIKa7nwk=ymtPW}l30>D*_KOsvmn<Rj>#Up{9Fpz`9(#k*(IsPo978F
GVFUoe4vGB$

delta 1431
zcmZ3jc}S!Fo)F7a1_lO(PzDAD83qQ1BTOJ30_U(YFbFX)Fyyi_FmN+4Ff_0-FsL#x
zF!ZoO)Nf*CU|?lnU^vgpz`)MHz;G3+?k+0>13v=;!%J2M24w~YhM%kq3|tHh46<wt
z41x>{3>s_<3<?Yk^$b>Q3=EPC3=GjwiBdL*!ge-@g_GDI7R+OVIAjSM0|Ofa1H*PU
z1_n+B28MlX3=9$s3=Air;t$y%4tW7J=L1y#Z>T&YI|BnB0|NsGJIEvT3=HDz3=Ap^
z3=FpH3=AR+3=B!^3=Fai3=HM$3=F&s3=C7*Ar4#&)wma`?hHG`fe+ak7^E2(7~Zlo
zFlaL{FmQ4}d~V9Yz#zrIz~IWkz`(-5z>vVfz`(=6z>vxTaX=9V1A}fo0|P@N2LppB
z0|Uc)4v0^WaxgG(FfcHj=79M03RJ^wsQ4=m1_p5k28Pd2i?}%<7D#hK3|8QTI6$8h
z5<>Qz5c51aAt4(CRTs<2z)%lzSq>*8$O@qfE1`4~RJ@xL;*iOl5FgLtWME)sU|?9r
z35m;9PzUVcWMB|xU|=}N3GvWXPKZNabAp1Jfq|I|9On$0Tnr3y3=9ljTnzP~M8J^A
z1qtFVE@&J>>Frz)ADrT1U;w4dD_jf=dJGH<*SQ!Nycif5*ti)OEEpIV0=XF&CNMHE
zba6wXOqv&xCNy~&7z`O07@T+^4k+P;$j{=1M8yi;dI)1HFT}-%cp+)w1}_7H7y|>t
zU#PeU9|MCL0|SE=9|MCt$U;7dL4|w}ef4~hpr6VI3CSgV3=9Gc3=C`dAR)Jx4-)i8
z_#hrU59L1sX#}O_w@`&&_#kQEH<ZuF4@s09{E);Y%MS@UPku=D%ixDNsFfcQHB0#+
ziFYGE#9`<8AyM#@9}<#(`573r7#JAX1sE6<85kJqjRYV;A0oiOpvl0%kS74~*$e?l
zTrLxU7_>`(fx(D@f#HGx#6o64h(nbHAqHy-LVRir<y#3t5~YhEB;-5=As#6ZgoIG5
zAUN&RGxQ2Vf@(fg;|3_bOAz9aBM^lQmjoe+?uj5IHNSwW`v|3fLupnaNb2Vof|x5W
z1aYW=5ZFQnGa-mWJ;3ty3=IB43=A5e{3*o1pv%C(&?y8-EZc=3L3vjQ;`84^khGyE
z3<;57VTc8p!jL$v5{5XeR~X{ZX~GN)mJAFGvxFHKoEaDxt_VXySOQeYI3_2j78ffd
YZ*FCs%rd!wi*vIR*BXw^YQn9I0OJgSCjbBd

diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
index 10c6577f..cdb4740e 100644
--- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
+++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po
@@ -198,6 +198,10 @@ msgstr "Bitte geben Sie einen Titel ein"
 msgid "odsh_issued_error_label"
 msgstr "Bitte wählen Sie ein Veröffentlichungsdatum"
 
+
+msgid "odsh_issued_not_date_error_label"
+msgstr "Bitte wählen Sie ein korrektes Veröffentlichungsdatum"
+
 msgid "Tag string: Fehlender Wert"
 msgstr "Bitte wählen Sie geeignete Schlagwörter"
 
diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py
index 1751de46..b2b925d0 100644
--- a/ckanext/odsh/plugin.py
+++ b/ckanext/odsh/plugin.py
@@ -87,8 +87,6 @@ def known_spatial_uri(key, data, errors, context):
     spatial = str()
     cr = csv.reader(mapping_file, delimiter="\t")
     for row in cr:
-        print(data[key])
-        print(row[0])
         if row[0] == data[key]:
             not_found = False
             spatial_text = row[1]
@@ -109,6 +107,30 @@ def known_spatial_uri(key, data, errors, context):
     data[('extras', new_index+1, 'key')] = 'spatial'
     data[('extras', new_index+1, 'value')] = spatial
 
+def _extract_value(key,data,field):
+    key = None
+    for k in data.keys():
+        if data[k] == field:
+            key = k
+            break
+    if key is None:
+        return None
+
+    return data[(key[0],key[1],'value')]
+
+
+def odsh_validate_issued(key, data, errors, context):
+    value = _extract_value(key,data,'issued')
+
+    if not value:
+        raise toolkit.Invalid('issued:odsh_issued_error_label')
+    
+    try:
+        datetime.datetime.strptime(value, '%Y-%m-%d')
+    except ValueError:
+        raise toolkit.Invalid('issued:odsh_issued_not_date_error_label')
+
+
 
 def odsh_tag_name_validator(value, context):
     tagname_match = re.compile('[\w \-.\:\(\)]*$', re.UNICODE)
@@ -180,7 +202,9 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
                 'odsh_get_spatial_text': odsh_helpers.odsh_get_spatial_text,
                 'odsh_render_datetime': odsh_helpers.odsh_render_datetime,
                 'odsh_upload_known_formats': odsh_helpers.odsh_upload_known_formats,
-                'odsh_encodeurl': odsh_helpers.odsh_encodeurl
+                'odsh_encodeurl': odsh_helpers.odsh_encodeurl,
+                'odsh_extract_error': odsh_helpers.odsh_extract_error,
+                'odsh_extract_value_from_extras': odsh_helpers.odsh_extract_value_from_extras
                 }
 
     def before_map(self, map):
@@ -251,7 +275,7 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
         return ['title', 'notes']
 
     def _extraFields(self):
-        return ['issued', 'temporal_start', 'temporal_end', 'spatial_uri', 'licenseAttributionByText']
+        return ['temporal_start', 'temporal_end', 'spatial_uri', 'licenseAttributionByText']
 
     def _update_schema(self, schema):
         for field in self._extraFields():
@@ -284,6 +308,11 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
             'format': [toolkit.get_converter('not_empty')]
         })
 
+        schema['extras'].update({
+            'key': [toolkit.get_converter('odsh_validate_issued')]
+        })
+
+
     def create_package_schema(self):
         schema = super(OdshPlugin, self).create_package_schema()
         self._update_schema(schema)
@@ -315,6 +344,7 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
     def get_validators(self):
         return {'odsh_convert_groups_string': odsh_convert_groups_string,
                 'known_spatial_uri': known_spatial_uri,
+                'odsh_validate_issued': odsh_validate_issued,
                 'odsh_tag_name_validator': odsh_tag_name_validator}
 
     def extend_search_convert_local_to_utc_timestamp(self, str_timestamp):
@@ -378,8 +408,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
         fq = '{fq} ({start_query} OR {end_query} {enclosing_query})'.format(
             fq=fq, start_query=start_query, end_query=end_query, enclosing_query=enclosing_query)
 
-        print(fq)
-
         # return modified facet queries
         search_params['fq'] = fq
 
diff --git a/ckanext/odsh/templates/package/snippets/info.html b/ckanext/odsh/templates/package/snippets/info.html
index 3e67621a..fdd13eb3 100644
--- a/ckanext/odsh/templates/package/snippets/info.html
+++ b/ckanext/odsh/templates/package/snippets/info.html
@@ -60,8 +60,8 @@ Example:
 
             {% block last_change %}
             <div class="last-change-detail info-detail">
-                {%set issued=h.odsh_render_datetime(pkg.issued) if pkg.issued else
-                h.odsh_render_datetime(pkg.metadata_created)%}
+                {% set value = h.odsh_extract_value_from_extras(pkg.extras,'issued')%}
+                {% set issued = h.odsh_render_datetime(value) if value else h.odsh_render_datetime(pkg.metadata_created)%} 
                 <div>{{ _('issued') }}:</div>
                 {{issued}}
             </div>
diff --git a/ckanext/odsh/templates/package/snippets/package_basic_fields.html b/ckanext/odsh/templates/package/snippets/package_basic_fields.html
index e0b85049..d4903e9d 100644
--- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html
+++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html
@@ -95,11 +95,28 @@ is_required=true,placeholder=_('Enter title')) }}
     </div>
 
     <!-- field issued -->
-    {% set issued_value=data.issued if data.issued else h.odsh_now() %}
-    {% set error_string = _('odsh_issued_error_label') if errors.issued %}
-    {% set issued_label='Veröffentlichungsdatum'%}
-    {{ form.input('issued', id='field-issued', label=issued_label, value=issued_value,
-    error=error_string, classes=['control-full'], type='date', is_required=true) }}
+
+    {% set field='issued' %}
+    {% set value = h.odsh_extract_value_from_extras(data.extras,field)%}
+    {% set value_extras = value if value else h.odsh_now() %}
+    {% set index = 4 %}
+
+    <div class="control-group control-full">
+            <label class="control-label" for="field-{{field}}">Veröffentlichungsdatum: <span title="Dieses Feld ist erforderlich" class="control-required">*</span> </label>
+            <div class="controls">
+            <div class="row-fluid">
+                <div class="span6">
+                    <input id="field-{{field}}-key" type="hidden" name="extras__{{index}}__key" value="{{field}}"  />
+                    <input id="field-{{field}}-value" type="text" name="extras__{{index}}__value" value="{{value_extras}}"  />
+                </div>
+                <div class="span6 inline-error">
+                {% if h.odsh_extract_error(field, errors) %} 
+                {{_(h.odsh_extract_error(field, errors))}}
+                {% endif %}
+                </div>
+            </div>
+            </div>
+        </div>
 
 
     <!-- field tags -->
-- 
GitLab