diff options
| -rw-r--r-- | archaeological_context_records/migrations/0054_auto_20190910_1324.py | 28 | ||||
| -rw-r--r-- | archaeological_files/migrations/0022_auto_20190910_1324.py | 28 | ||||
| -rw-r--r-- | archaeological_finds/migrations/0074_auto_20190910_1324.py | 63 | ||||
| -rw-r--r-- | archaeological_operations/migrations/0066_auto_20190910_1323.py | 58 | ||||
| -rw-r--r-- | archaeological_warehouse/migrations/0040_auto_20190910_1324.py | 33 | ||||
| -rw-r--r-- | ishtar_common/migrations/0108_auto_20190910_1323.py | 43 | ||||
| -rw-r--r-- | ishtar_common/models.py | 3 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/sheet.html | 10 | ||||
| -rw-r--r-- | ishtar_common/templatetags/link_to_window.py | 7 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 31 | 
10 files changed, 292 insertions, 12 deletions
diff --git a/archaeological_context_records/migrations/0054_auto_20190910_1324.py b/archaeological_context_records/migrations/0054_auto_20190910_1324.py new file mode 100644 index 000000000..4bcec8dfb --- /dev/null +++ b/archaeological_context_records/migrations/0054_auto_20190910_1324.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-10 13:24 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + +    dependencies = [ +        migrations.swappable_dependency(settings.AUTH_USER_MODEL), +        ('archaeological_context_records', '0053_auto_20190910_1248'), +    ] + +    operations = [ +        migrations.AddField( +            model_name='contextrecord', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='historicalcontextrecord', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +    ] diff --git a/archaeological_files/migrations/0022_auto_20190910_1324.py b/archaeological_files/migrations/0022_auto_20190910_1324.py new file mode 100644 index 000000000..f3f2e1a06 --- /dev/null +++ b/archaeological_files/migrations/0022_auto_20190910_1324.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-10 13:24 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + +    dependencies = [ +        migrations.swappable_dependency(settings.AUTH_USER_MODEL), +        ('archaeological_files', '0021_auto_20190910_1248'), +    ] + +    operations = [ +        migrations.AddField( +            model_name='file', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='historicalfile', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +    ] diff --git a/archaeological_finds/migrations/0074_auto_20190910_1324.py b/archaeological_finds/migrations/0074_auto_20190910_1324.py new file mode 100644 index 000000000..1ae637940 --- /dev/null +++ b/archaeological_finds/migrations/0074_auto_20190910_1324.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-10 13:24 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + +    dependencies = [ +        migrations.swappable_dependency(settings.AUTH_USER_MODEL), +        ('archaeological_finds', '0073_auto_20190910_1248'), +    ] + +    operations = [ +        migrations.AddField( +            model_name='basefind', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='find', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='historicalbasefind', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='historicalfind', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='historicaltreatment', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='historicaltreatmentfile', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='property', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='treatment', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='treatmentfile', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +    ] diff --git a/archaeological_operations/migrations/0066_auto_20190910_1323.py b/archaeological_operations/migrations/0066_auto_20190910_1323.py new file mode 100644 index 000000000..488a35986 --- /dev/null +++ b/archaeological_operations/migrations/0066_auto_20190910_1323.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-10 13:23 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + +    dependencies = [ +        migrations.swappable_dependency(settings.AUTH_USER_MODEL), +        ('archaeological_operations', '0065_auto_20190910_1248'), +    ] + +    operations = [ +        migrations.AddField( +            model_name='administrativeact', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='archaeologicalsite', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='historicaladministrativeact', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='historicalarchaeologicalsite', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='historicaloperation', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='operation', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='parcel', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='parcelowner', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +    ] diff --git a/archaeological_warehouse/migrations/0040_auto_20190910_1324.py b/archaeological_warehouse/migrations/0040_auto_20190910_1324.py new file mode 100644 index 000000000..8264ccb1d --- /dev/null +++ b/archaeological_warehouse/migrations/0040_auto_20190910_1324.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-10 13:24 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + +    dependencies = [ +        migrations.swappable_dependency(settings.AUTH_USER_MODEL), +        ('archaeological_warehouse', '0039_auto_20190910_1248'), +    ] + +    operations = [ +        migrations.AddField( +            model_name='collection', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='container', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='warehouse', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +    ] diff --git a/ishtar_common/migrations/0108_auto_20190910_1323.py b/ishtar_common/migrations/0108_auto_20190910_1323.py new file mode 100644 index 000000000..ef7e16ba3 --- /dev/null +++ b/ishtar_common/migrations/0108_auto_20190910_1323.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-09-10 13:23 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + +    dependencies = [ +        migrations.swappable_dependency(settings.AUTH_USER_MODEL), +        ('ishtar_common', '0107_auto_20190910_1248'), +    ] + +    operations = [ +        migrations.AddField( +            model_name='document', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='historicalorganization', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='historicalperson', +            name='lock_user', +            field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL), +        ), +        migrations.AddField( +            model_name='organization', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +        migrations.AddField( +            model_name='person', +            name='lock_user', +            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Locked by'), +        ), +    ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index e83f26640..bc9e68c02 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2097,6 +2097,9 @@ class BaseHistorizedItem(StatisticItem, TemplateItem, FullSearch, Imported,          verbose_name=_("Need update"), default=False)      locked = models.BooleanField(          verbose_name=_("Item locked for edition"), default=False) +    lock_user = models.ForeignKey( +        User, related_name='+', on_delete=models.SET_NULL, +        verbose_name=_("Locked by"), blank=True, null=True)      ALT_NAMES = {          'history_creator': SearchAltName( diff --git a/ishtar_common/templates/ishtar/sheet.html b/ishtar_common/templates/ishtar/sheet.html index 0dda760b8..5676a4419 100644 --- a/ishtar_common/templates/ishtar/sheet.html +++ b/ishtar_common/templates/ishtar/sheet.html @@ -119,6 +119,16 @@          {% endblock %}          {% endif %}          <div class="body"> +            {% if item.locked %} +            <div class="alert alert-warning" role="alert"> +                <i class="fa fa-lock text-danger" aria-hidden="true"></i>  +                {% if item.lock_user %}{% blocktrans with locker=item.lock_user.ishtaruser %} +                This item has been locked by {{locker}}. Edition is disabled. +                {% endblocktrans %}{% else %} +                {% trans "This item has been locked. Edition is disabled." %} +                {% endif %} +            </div> +            {% endif %}          {% block content %}          {% endblock %}          </div> diff --git a/ishtar_common/templatetags/link_to_window.py b/ishtar_common/templatetags/link_to_window.py index 610c5d017..86a1978de 100644 --- a/ishtar_common/templatetags/link_to_window.py +++ b/ishtar_common/templatetags/link_to_window.py @@ -12,11 +12,14 @@ register = Library()  def simple_link_to_window(item):      if not hasattr(item, 'SLUG'):          return "" +    lock = "" +    if getattr(item, "locked", None): +        lock = ' <i class="fa fa-lock text-danger" aria-hidden="true"></i>'      return mark_safe(          u' <a class="display_details" href="#" '          u'onclick="load_window(\'{}\')">' -        u'<i class="fa fa-info-circle" aria-hidden="true"></i></a>'.format( -            reverse("show-" + item.SLUG, args=[item.pk, '']))) +        u'<i class="fa fa-info-circle" aria-hidden="true"></i>{}</a>'.format( +            reverse("show-" + item.SLUG, args=[item.pk, '']), lock))  @register.filter diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 62aff2e81..2c4cc1a55 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -1146,6 +1146,8 @@ def _get_data_from_query(items, query_table_cols, extra_request_keys,          items = items.annotate(point_x=exp_x)          items = items.annotate(point_y=exp_y)          values += ['point_x', 'point_y'] +    if hasattr(items.model, "locked"): +        values.append("locked")      data_list = items.values_list(*values)      return data_list @@ -1838,17 +1840,22 @@ def get_item(model, func_name, default_name, extra_request_keys=None,                  if sign == '-':                      datas = reversed(datas)                  datas = list(datas)[start:end] -        link_template = "<a class='display_details' href='#' " \ -                        "onclick='load_window(\"%s\")'>" \ -                        "<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></a>" -        link_ext_template = '<a href="{}" target="_blank">{}</a>' +        link_template = \ +            "<a class='display_details' href='#' " \ +            "onclick='load_window(\"{}\")'>" \ +            "<i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i><lock></a>" +        link_ext_template = '<a href="{}" target="_blank"></a>' +        lock = ' <i class="fa fa-lock text-danger" aria-hidden="true"></i>' +        has_locks = hasattr(model, "locked")          if data_type.startswith("json"):              rows = []              if data_type == 'json-map': - -                lnk = link_template % reverse('show-' + default_name, -                                              args=[999999, '']) +                lnk = link_template.format( +                    reverse('show-' + default_name, args=[999999, '']), +                )                  lnk = lnk.replace('999999', "<pk>") +                if not has_locks: +                    lnk = lnk.replace('<lock>', "")                  data = json.dumps(_format_geojson(datas, lnk))                  return HttpResponse(data, content_type='application/json')              for data in datas: @@ -1858,8 +1865,12 @@ def get_item(model, func_name, default_name, extra_request_keys=None,                  if not no_link:                      try:                          lnk_template = link_template -                        lnk = lnk_template % reverse('show-' + default_name, -                                                     args=[data[0], '']) +                        lnk = lnk_template.format( +                            reverse('show-' + default_name, args=[data[0], ''])) +                        if has_locks and data[-1]: +                            lnk = lnk.replace('<lock>', lock) +                        else: +                            lnk = lnk.replace('<lock>', "")                      except NoReverseMatch:                          logger.warning(                              '**WARN "show-' + default_name + '" args (' @@ -1867,7 +1878,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,                          lnk = ''                      res["link"] = lnk                  for idx, value in enumerate(data[1:]): -                    if not value: +                    if not value or idx >= len(table_cols):                          continue                      table_col = table_cols[idx]                      if type(table_col) not in (list, tuple):  | 
