diff --git a/apps/common/utils.py b/apps/common/utils.py index 3d57a4e3bf..580c4dafbc 100644 --- a/apps/common/utils.py +++ b/apps/common/utils.py @@ -339,7 +339,8 @@ def generate_choices_w_labels(choices, display_object_type=True): def return_diff(old_obj, new_obj, attrib_list=None): diff_dict = {} - attrib_list = old_obj.__dict__.keys() + if not attrib_list: + attrib_list = old_obj.__dict__.keys() for attrib in attrib_list: old_val = getattr(old_obj, attrib) new_val = getattr(new_obj, attrib) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 13dddce7d6..0321550a6e 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -19,7 +19,7 @@ from documents.literals import PERMISSION_DOCUMENT_CREATE, \ PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, \ PERMISSION_DOCUMENT_EDIT from documents.literals import HISTORY_DOCUMENT_CREATED, \ - HISTORY_DOCUMENT_EDITED + HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED # Permission setup set_namespace_title('documents', _(u'documents')) @@ -35,6 +35,7 @@ register_permission(PERMISSION_DOCUMENT_TOOLS) # History setup register_history_type(HISTORY_DOCUMENT_CREATED) register_history_type(HISTORY_DOCUMENT_EDITED) +register_history_type(HISTORY_DOCUMENT_DELETED) document_list = {'text': _(u'documents list'), 'view': 'document_list', 'famfam': 'page', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_list_recent = {'text': _(u'recent documents list'), 'view': 'document_list_recent', 'famfam': 'page', 'permissions': [PERMISSION_DOCUMENT_VIEW]} diff --git a/apps/documents/literals.py b/apps/documents/literals.py index 389ddeeed6..af422e2579 100644 --- a/apps/documents/literals.py +++ b/apps/documents/literals.py @@ -23,13 +23,24 @@ HISTORY_DOCUMENT_CREATED = { 'label': _(u'Document creation'), 'summary': _(u'Document "%(content_object)s" created by %(fullname)s.'), 'details': _(u'Document "%(content_object)s" created on %(datetime)s by %(fullname)s.'), - 'expressions': [{'fullname': 'user.get_full_name() if user.get_full_name() else user.username'}] + 'expressions': {'fullname': 'user.get_full_name() if user.get_full_name() else user.username'} } HISTORY_DOCUMENT_EDITED = { 'namespace': 'documents', 'name': 'document_edited', 'label': _(u'Document edited'), 'summary': _(u'Document "%(content_object)s" edited by %(fullname)s.'), - 'details': _(u'Document "%(content_object)s" edited on %(datetime)s by %(fullname)s.'), - 'expressions': [{'fullname': 'user.get_full_name() if user.get_full_name() else user.username'}] + 'details': _(u'Document "%(content_object)s" was edited on %(datetime)s by %(fullname)s. The following changes took place: %(changes)s.'), + 'expressions': { + 'fullname': 'user.get_full_name() if user.get_full_name() else user.username', + 'changes': 'u\', \'.join([\'"%s": "%s" -> "%s"\' % (key, value[\'old_value\'], value[\'new_value\']) for key, value in diff.items()])' + } +} + +HISTORY_DOCUMENT_DELETED = { + 'namespace': 'documents', 'name': 'document_deleted', + 'label': _(u'Document deleted'), + 'summary': _(u'Document "%(document)s" deleted by %(fullname)s.'), + 'details': _(u'Document "%(document)s" deleted on %(datetime)s by %(fullname)s.'), + 'expressions': {'fullname': 'user.get_full_name() if user.get_full_name() else user.username'} } diff --git a/apps/documents/views.py b/apps/documents/views.py index 05f4d46ed2..e7ccd68e3b 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -60,7 +60,7 @@ from documents.literals import PERMISSION_DOCUMENT_CREATE, \ PERMISSION_DOCUMENT_TRANSFORM, \ PERMISSION_DOCUMENT_EDIT from documents.literals import HISTORY_DOCUMENT_CREATED, \ - HISTORY_DOCUMENT_EDITED + HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED from documents.forms import DocumentTypeSelectForm, \ DocumentForm, DocumentForm_edit, DocumentPropertiesForm, \ @@ -275,7 +275,6 @@ def upload_document_with_type(request, source): def document_view_simple(request, document_id): check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) - #document = get_object_or_404(Document.objects.select_related(), pk=document_id) # Triggers a 404 error on documents uploaded via local upload # TODO: investigate @@ -462,6 +461,7 @@ def document_delete(request, document_id=None, document_id_list=None): messages.warning(request, warning) document.delete() + #create_history(HISTORY_DOCUMENT_DELETED, data={'user': request.user, 'document': document}) messages.success(request, _(u'Document: %s deleted successfully.') % document) except Exception, e: messages.error(request, _(u'Document: %(document)s delete error: %(error)s') % { @@ -515,10 +515,7 @@ def document_edit(request, document_id): document.file_filename = form.cleaned_data['document_type_available_filenames'].filename document.save() - - #print 'diff', return_diff(old_document, document) - - create_history(HISTORY_DOCUMENT_EDITED, document, {'user': request.user}) + create_history(HISTORY_DOCUMENT_EDITED, document, {'user': request.user, 'diff': return_diff(old_document, document, ['file_filename', 'description'])}) RecentDocument.objects.add_document_for_user(request.user, document) messages.success(request, _(u'Document "%s" edited successfully.') % document) diff --git a/apps/history/api.py b/apps/history/api.py index f2e6ab57f6..243aa12f1c 100644 --- a/apps/history/api.py +++ b/apps/history/api.py @@ -53,5 +53,5 @@ def create_history(history_type_dict, source_object=None, data=None): new_dict[key]['type'] = pickle.dumps(type(value)) new_history.dictionary = json.dumps(new_dict) - + print 'new_history', new_history new_history.save() diff --git a/apps/history/models.py b/apps/history/models.py index 9a2cdffc9d..22f5ee0227 100644 --- a/apps/history/models.py +++ b/apps/history/models.py @@ -54,7 +54,7 @@ class History(models.Model): return history_types_dict[self.history_type.namespace][self.history_type.name].get('details', u'') def get_expressions(self): - return history_types_dict[self.history_type.namespace][self.history_type.name].get('expressions', []) + return history_types_dict[self.history_type.namespace][self.history_type.name].get('expressions', {}) def get_processed_summary(self): return _process_history_text(self, self.get_summary()) @@ -95,18 +95,13 @@ def _process_history_text(history, text): new_dict[key] = json.loads(values['value']) key_values.update(new_dict) - expressions_dict = {} - for expression_item in history.get_expressions(): - key, value = expression_item.items()[0] + + for key, value in history.get_expressions().items(): try: - expressions_dict = { - key: eval(value, key_values.copy()) - } + expressions_dict[key] = eval(value, key_values.copy()) except Exception, e: - expressions_dict = { - key: e - } - + expressions_dict[key] = e + key_values.update(expressions_dict) return text % key_values diff --git a/apps/history/views.py b/apps/history/views.py index cb084922da..213105996e 100644 --- a/apps/history/views.py +++ b/apps/history/views.py @@ -81,7 +81,6 @@ def history_view(request, object_id): history = get_object_or_404(History, pk=object_id) - form = HistoryDetailForm(instance=history, extra_fields=[ {'label': _(u'Date'), 'field':lambda x: x.datetime.date()}, {'label': _(u'Time'), 'field':lambda x: unicode(x.datetime.time()).split('.')[0]}, @@ -93,6 +92,6 @@ def history_view(request, object_id): return render_to_response('generic_detail.html', { 'title': _(u'details for: %s') % history.get_processed_summary(), 'form': form, - 'object': history, + 'object': history.content_object, }, context_instance=RequestContext(request))