You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/09/18 17:13:33 UTC

[3/5] git commit: [#6100] ticket:431 Added MovedTicket and MovedArtifact, updated ticket move

[#6100] ticket:431 Added MovedTicket and MovedArtifact, updated ticket move


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/7e40ba99
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/7e40ba99
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/7e40ba99

Branch: refs/heads/master
Commit: 7e40ba99184c6dc10fe091a02e92b77f28bf8fb8
Parents: c9531d5
Author: Anton Kasyanov <mi...@gmail.com>
Authored: Tue Sep 10 20:44:46 2013 +0300
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Wed Sep 18 14:40:14 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/__init__.py             |  2 +-
 Allura/allura/model/artifact.py             | 11 +++++++++++
 ForgeTracker/forgetracker/model/__init__.py |  2 +-
 ForgeTracker/forgetracker/model/ticket.py   | 17 ++++++++++++++---
 ForgeTracker/forgetracker/tracker_main.py   | 12 ++++++------
 5 files changed, 33 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/7e40ba99/Allura/allura/model/__init__.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/__init__.py b/Allura/allura/model/__init__.py
index e5db5ae..27055c8 100644
--- a/Allura/allura/model/__init__.py
+++ b/Allura/allura/model/__init__.py
@@ -22,7 +22,7 @@
 from .neighborhood import Neighborhood, NeighborhoodFile
 from .project import Project, ProjectCategory, TroveCategory, ProjectFile, AppConfig
 from .index import ArtifactReference, Shortlink
-from .artifact import Artifact, Message, VersionedArtifact, Snapshot, Feed, AwardFile, Award, AwardGrant, VotableArtifact
+from .artifact import Artifact, MovedArtifact, Message, VersionedArtifact, Snapshot, Feed, AwardFile, Award, AwardGrant, VotableArtifact
 from .discuss import Discussion, Thread, PostHistory, Post, DiscussionAttachment
 from .attachments import BaseAttachment
 from .auth import AuthGlobals, User, ProjectRole, OpenId, EmailAddress, ApiToken, ApiTicket, OldProjectRole

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/7e40ba99/Allura/allura/model/artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index 8cfd6ab..2804a17 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -879,3 +879,14 @@ class VotableArtifact(MappedClass):
             'votes_up': self.votes_up,
             'votes_down': self.votes_down,
         }
+
+
+class MovedArtifact(Artifact):
+    class __mongometa__:
+        session = artifact_orm_session
+        name='moved_artifact'
+
+    _id = FieldProperty(S.ObjectId)
+    app_config_id = ForeignIdProperty('AppConfig', if_missing=lambda:c.app.config._id)
+    app_config = RelationProperty('AppConfig')
+    moved_to_url = FieldProperty(str, required=True, allow_none=False)

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/7e40ba99/ForgeTracker/forgetracker/model/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/__init__.py b/ForgeTracker/forgetracker/model/__init__.py
index e346903..2585be9 100644
--- a/ForgeTracker/forgetracker/model/__init__.py
+++ b/ForgeTracker/forgetracker/model/__init__.py
@@ -15,4 +15,4 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-from ticket import Globals, Bin, Ticket, TicketAttachment
+from ticket import Globals, Bin, Ticket, TicketAttachment, MovedTicket

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/7e40ba99/ForgeTracker/forgetracker/model/ticket.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index 7bb4609..03ee03f 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -36,7 +36,7 @@ from ming.orm import FieldProperty, ForeignIdProperty, RelationProperty
 from ming.orm.declarative import MappedClass
 from ming.orm.ormsession import ThreadLocalORMSession
 
-from allura.model import (Artifact, VersionedArtifact, Snapshot,
+from allura.model import (Artifact, MovedArtifact, VersionedArtifact, Snapshot,
                           project_orm_session, BaseAttachment, VotableArtifact, AppConfig, Mailbox, User)
 from allura.model import User, Feed, Thread, Notification, ProjectRole
 from allura.model import ACE, ALL_PERMISSIONS, DENY_ALL
@@ -858,6 +858,7 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
         app = app_config.project.app_instance(app_config)
         prior_url = self.url()
         prior_app = self.app
+        prior_ticket_num = self.ticket_num
         attachments = self.attachments
         attach_metadata = BaseAttachment.metadata_for(self)
         prior_cfs = [
@@ -897,8 +898,8 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
             if old_val is None:
                 custom_fields[fn] = None if ft == 'user' else ''
             custom_fields[fn] = old_val
-        custom_fields['moved_from_app'] = prior_app.config._id
-        custom_fields['moved_from_id'] = self.ticket_num
+        # custom_fields['moved_from_app'] = prior_app.config._id
+        # custom_fields['moved_from_id'] = self.ticket_num
         self.custom_fields = custom_fields
 
         # move ticket. ensure unique ticket_num
@@ -939,6 +940,12 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
         ticket = Ticket.query.find(dict(
             app_config_id=app_config._id, ticket_num=self.ticket_num)).first()
 
+        # creating MovedTicket to be able to redirect from this url
+        moved_ticket = MovedTicket(
+            app_config_id=prior_app.config._id, ticket_num=prior_ticket_num,
+            moved_to_url=ticket.url(),
+        )
+
         message = 'Ticket moved from %s' % prior_url
         if messages:
             message += '\n\nCan\'t be converted:\n\n'
@@ -1081,4 +1088,8 @@ class TicketAttachment(BaseAttachment):
         polymorphic_identity='TicketAttachment'
     attachment_type=FieldProperty(str, if_missing='TicketAttachment')
 
+
+class MovedTicket(MovedArtifact):
+    ticket_num = FieldProperty(int, required=True, allow_none=False)
+
 Mapper.compile_all()

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/7e40ba99/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 387bd2f..968d16e 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1181,15 +1181,15 @@ class TicketController(BaseController, FeedController):
                     utils.permanent_redirect(self.ticket.url())
                 else:
                     # trying to check if ticket was moved from here
-                    self.ticket = TM.Ticket.query.find({
-                        'custom_fields.moved_from_app': c.app.config._id,
-                        'custom_fields.moved_from_id': self.ticket_num,
+                    moved_ticket = TM.MovedTicket.query.find({
+                        'app_config_id': c.app.config._id,
+                        'ticket_num': self.ticket_num,
                     }).first()
-                    if self.ticket is not None:
+                    if moved_ticket:
                         flash('Ticket #{} was moved to this app'.format(
-                            self.ticket.ticket_num
+                            moved_ticket.ticket_num
                         ))
-                        utils.permanent_redirect(self.ticket.url())
+                        utils.permanent_redirect(moved_ticket.moved_to_url)
             self.attachment = AttachmentsController(self.ticket)
             # self.comments = CommentController(self.ticket)