This commit is contained in:
Your Name 2023-06-19 00:17:56 -04:00 committed by Henri Dickson
parent 7c5a02bac7
commit 8d0dc822a7
5 changed files with 36 additions and 10 deletions

View file

@ -338,6 +338,11 @@ class Item(SoftDeleteMixin, PolymorphicModel):
def parent_uuid(self):
return self.parent_item.uuid if self.parent_item else None
def log_action(self, changes):
LogEntry.objects.log_create(
self, action=LogEntry.Action.UPDATE, changes=changes
)
def merge_to(self, to_item):
if to_item is None:
raise ValueError("cannot merge to an empty item")
@ -525,7 +530,18 @@ class ExternalResource(models.Model):
unique_together = [["id_type", "id_value"]]
def __str__(self):
return f"{self.pk}:{self.id_type}:{self.id_value if self.id_value else ''} ({self.url})"
return f"{self.pk}:{self.id_type}:{self.id_value or ''} ({self.url})"
def unlink_from_item(self):
LogEntry.objects.log_create(
self.item,
action=LogEntry.Action.UPDATE,
changes={
"__unlink__": [str(self), None],
},
)
self.item = None
self.save()
def get_site(self):
"""place holder only, this will be injected from SiteManager"""

View file

@ -1,4 +1,4 @@
from .common.models import Item, ItemSchema
from .common.models import ExternalResource, Item, ItemSchema
from .book.models import Edition, Work, Series, EditionSchema, EditionInSchema
from .movie.models import Movie, MovieSchema, MovieInSchema
from .tv.models import (
@ -92,7 +92,8 @@ def init_catalog_search_models():
def init_catalog_audit_log():
for cls in Item.__subclasses__():
auditlog.register(
cls, exclude_fields=["metadata", "created_time", "edited_time"]
cls,
exclude_fields=["metadata", "created_time", "edited_time", "last_editor"],
)
auditlog.register(

View file

@ -62,6 +62,12 @@ def fetch(request, url, is_refetch: bool = False, site: AbstractSite | None = No
item = site.get_item()
if item and not is_refetch:
return redirect(item.url)
if item and is_refetch:
item.log_action(
{
"__refetch__": [url, None],
}
)
job_id = enqueue_fetch(url, is_refetch)
return render(
request,

View file

@ -53,7 +53,7 @@
onclick="{% if item %}window.location='{{ item.url }}'{% else %}history.go(-1){% endif %}">
</div>
</form>
{% if request.user.is_superuser %}
{% if request.user.is_staff %}
<div>
<table class="table table-striped table-bordered">
<thead>
@ -66,15 +66,15 @@
<tbody>
{% for log in item.history.all %}
<tr>
<td colspan="3" style="padding-top:1em;">
<td colspan="3">
({{ log.id }}) <b>{{ log.actor }} {{ log.get_action_display }} on {{ log.timestamp }}</b>
</td>
</tr>
{% for key, value in log.changes_dict.items %}
<tr {% cycle 'style="background:#eee;"' '' %}>
<td>{{ key }}</td>
<td style="padding-left: 8px">{{ value.0|default:"None" }}</td>
<td>{{ value.1|default:"None" }}</td>
<td>{{ value.0|default:"-" }}</td>
<td>{{ value.1|default:"-" }}</td>
</tr>
{% empty %}
<p>No data.</p>

View file

@ -280,8 +280,7 @@ def unlink(request):
if not res_id:
raise BadRequest()
resource = get_object_or_404(ExternalResource, id=res_id)
resource.item = None
resource.save()
resource.unlink_from_item()
return HttpResponseRedirect(request.META.get("HTTP_REFERER"))
@ -308,9 +307,13 @@ def remove_unused_seasons(request, item_path, item_uuid):
if request.method != "POST":
raise BadRequest()
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
for s in item.seasons.all():
l = list(item.seasons.all())
for s in l:
if not s.journal_exists():
s.delete()
l = [s.id for s in l]
l2 = [s.id for s in item.seasons.all()]
item.log_action({"__remove_unused_seasons__": [l, l2]})
return redirect(item.url)