5959)
6060from  django .contrib .postgres .fields  import  ArrayField 
6161from  api .share .utils  import  update_share 
62- from  api .providers .workflows  import  Workflows 
6362
6463logger  =  logging .getLogger (__name__ )
6564
@@ -1679,27 +1678,13 @@ def run_submit(self, user):
16791678            user: The user triggering this transition. 
16801679        """ 
16811680        ret  =  super ().run_submit (user = user )
1682-         provider  =  self .provider 
1683-         reviews_workflow  =  provider .reviews_workflow 
1684-         # Only post moderation is relevant for Preprint, and hybrid moderation is included for integrity purpose. 
1685-         need_guid_update  =  any (
1686-             [
1687-                 reviews_workflow  ==  Workflows .POST_MODERATION .value ,
1688-                 reviews_workflow  ==  Workflows .HYBRID_MODERATION .value  and 
1689-                 any ([
1690-                     provider .get_group ('moderator' ) in  user .groups .all (),
1691-                     provider .get_group ('admin' ) in  user .groups .all ()
1692-                 ])
1693-             ]
1694-         )
1695-         # Only update the base guid obj to refer to the new version 1) if the provider is post-moderation, or 2) if the 
1696-         # provider is hybrid-moderation and if the user who submits the preprint is a moderator or admin. 
1697-         if  need_guid_update :
1698-             base_guid_obj  =  self .versioned_guids .first ().guid 
1699-             base_guid_obj .referent  =  self 
1700-             base_guid_obj .object_id  =  self .pk 
1701-             base_guid_obj .content_type  =  ContentType .objects .get_for_model (self )
1702-             base_guid_obj .save ()
1681+ 
1682+         base_guid_obj  =  self .versioned_guids .first ().guid 
1683+         base_guid_obj .referent  =  self 
1684+         base_guid_obj .object_id  =  self .pk 
1685+         base_guid_obj .content_type  =  ContentType .objects .get_for_model (self )
1686+         base_guid_obj .save ()
1687+ 
17031688        return  ret 
17041689
17051690    def  run_accept (self , user , comment , ** kwargs ):
@@ -1711,14 +1696,6 @@ def run_accept(self, user, comment, **kwargs):
17111696            comment: Text describing why. 
17121697        """ 
17131698        ret  =  super ().run_accept (user = user , comment = comment , ** kwargs )
1714-         reviews_workflow  =  self .provider .reviews_workflow 
1715-         if  reviews_workflow  ==  Workflows .PRE_MODERATION .value  or  reviews_workflow  ==  Workflows .HYBRID_MODERATION .value :
1716-             base_guid_obj  =  self .versioned_guids .first ().guid 
1717-             base_guid_obj .referent  =  self 
1718-             base_guid_obj .object_id  =  self .pk 
1719-             base_guid_obj .content_type  =  ContentType .objects .get_for_model (self )
1720-             base_guid_obj .save ()
1721- 
17221699        versioned_guid  =  self .versioned_guids .first ()
17231700        if  versioned_guid .is_rejected :
17241701            versioned_guid .is_rejected  =  False 
@@ -1734,9 +1711,38 @@ def run_reject(self, user, comment):
17341711            comment: Text describing why. 
17351712        """ 
17361713        ret  =  super ().run_reject (user = user , comment = comment )
1737-         versioned_guid  =  self .versioned_guids .first ()
1738-         versioned_guid .is_rejected  =  True 
1739-         versioned_guid .save ()
1714+         current_version_guid  =  self .versioned_guids .first ()
1715+         current_version_guid .is_rejected  =  True 
1716+         current_version_guid .save ()
1717+ 
1718+         self .rollback_main_guid ()
1719+ 
1720+         return  ret 
1721+ 
1722+     def  rollback_main_guid (self ):
1723+         """Reset main guid to resolve to last versioned guid which is not withdrawn/rejected if there is one. 
1724+         """ 
1725+         guid  =  None 
1726+         for  version  in  self .versioned_guids .all ()[1 :]:  # skip first guid as it refers to current version 
1727+             guid  =  version .guid 
1728+             if  guid .referent .machine_state  not  in ReviewStates .REJECTED , ReviewStates .WITHDRAWN ):
1729+                 break 
1730+         if  guid :
1731+             guid .referent  =  self 
1732+             guid .object_id  =  self .pk 
1733+             guid .content_type  =  ContentType .objects .get_for_model (self )
1734+             guid .save ()
1735+ 
1736+     def  run_withdraw (self , user , comment ):
1737+         """Override `ReviewableMixin`/`MachineableMixin`. 
1738+         Run the 'withdraw' state transition and create a corresponding Action. 
1739+ 
1740+         Params: 
1741+             user: The user triggering this transition. 
1742+             comment: Text describing why. 
1743+         """ 
1744+         ret  =  super ().run_withdraw (user = user , comment = comment )
1745+         self .rollback_main_guid ()
17401746        return  ret 
17411747
17421748@receiver (post_save , sender = Preprint ) 
0 commit comments