Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Pootle-2.0.0/local_apps/pootle_app/unit_update.py
diff options
context:
space:
mode:
Diffstat (limited to 'Pootle-2.0.0/local_apps/pootle_app/unit_update.py')
-rw-r--r--Pootle-2.0.0/local_apps/pootle_app/unit_update.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/Pootle-2.0.0/local_apps/pootle_app/unit_update.py b/Pootle-2.0.0/local_apps/pootle_app/unit_update.py
new file mode 100644
index 0000000..4125d02
--- /dev/null
+++ b/Pootle-2.0.0/local_apps/pootle_app/unit_update.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2009 Zuza Software Foundation
+#
+# This file is part of translate.
+#
+# translate is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# translate is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with translate; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+import datetime
+
+from django.utils.translation import ugettext as _
+from django.core.exceptions import PermissionDenied
+
+from pootle_app.models import Suggestion, Submission
+from pootle_app.models.profile import get_profile
+from pootle_app.models.permissions import check_permission
+
+def _suggestion_hash(store, item, trans):
+ # since django's IntegerField is always 32 bit on mysql we cast to
+ # make sure we don't pass larger hashes
+ return int(hash((store.pootle_path, item, unicode(trans))) & 0xfffffff)
+
+def suggest_translation(store, item, trans, request):
+ if not check_permission("suggest", request):
+ raise PermissionDenied(_("You do not have rights to suggest changes here"))
+ translation_project = request.translation_project
+ s = Suggestion(
+ creation_time = datetime.datetime.utcnow(),
+ translation_project = translation_project,
+ suggester = get_profile(request.user),
+ unit = _suggestion_hash(store, item, trans),
+ state = 'pending',
+ )
+ s.save()
+ store.addsuggestion(item, trans, s.suggester.user.username,
+ translation_project.checker)
+ #FIXME: we don't handle identical suggestions
+
+
+def update_translation(store, item, newvalues, request, suggestion=None):
+ """updates a translation with a new value..."""
+
+ if not check_permission("translate", request):
+ raise PermissionDenied(_("You do not have rights to change translations here"))
+
+ translation_project = request.translation_project
+
+ s = Submission(
+ creation_time = datetime.datetime.utcnow(),
+ translation_project = translation_project,
+ submitter = get_profile(request.user),
+ from_suggestion = suggestion,
+ )
+ try:
+ s.save()
+ except:
+ # FIXME: making from_suggestion OneToOne was a mistake since
+ # we can't distinguish between identical suggestions.
+ pass
+
+ store.file.updateunit(item, newvalues, translation_project.checker,
+ user=request.user, language=translation_project.language)
+ translation_project.update_index(translation_project.indexer, store, [item])
+
+
+def update_suggestion(state, store, item, newtrans, request):
+ """Marks the suggestion specified by the parameters with the given status,
+ and returns that suggestion object"""
+ translation_project = request.translation_project
+ suggestion, created = Suggestion.objects.get_or_create(translation_project=translation_project,
+ unit=_suggestion_hash(store, item, newtrans))
+ suggestion.state = state
+ suggestion.reviewer = get_profile(request.user)
+ suggestion.review_time = datetime.datetime.utcnow()
+ suggestion.save()
+ return suggestion
+
+
+def reject_suggestion(store, item, suggitem, newtrans, request):
+ """rejects the suggestion and removes it from the pending file"""
+ if not check_permission("review", request):
+ raise PermissionDenied(_("You do not have rights to review suggestions here"))
+
+ update_suggestion('rejected', store, item, newtrans, request)
+ # Deletes the suggestion from the .pending file
+ store.deletesuggestion(item, suggitem, newtrans,
+ request.translation_project.checker)
+
+def accept_suggestion(store, item, suggitem, newtrans, request):
+ """accepts the suggestion into the main pofile"""
+ if not check_permission("review", request):
+ raise PermissionDenied(_("You do not have rights to review suggestions here"))
+
+ suggestion = update_suggestion('accepted', store, item, newtrans, request)
+
+ new_values = {"target": newtrans, "fuzzy": False}
+ update_translation(store, item, new_values, request, suggestion)
+ store.deletesuggestion(item, suggitem, newtrans,
+ request.translation_project.checker)
+