app/soc/views/helper/access.py
changeset 1107 a878188e225c
parent 1085 0afbdd0905ef
child 1115 0a723ff3d27c
--- a/app/soc/views/helper/access.py	Sat Jan 31 12:59:52 2009 +0000
+++ b/app/soc/views/helper/access.py	Sat Jan 31 13:48:48 2009 +0000
@@ -45,8 +45,9 @@
 from soc.logic.models.request import logic as request_logic
 from soc.logic.models.role import logic as role_logic
 from soc.logic.models.site import logic as site_logic
+from soc.logic.models.program import logic as program_logic
 from soc.logic.models.user import logic as user_logic
-from soc.logic.models.program import logic as program_logic
+from soc.logic.models.timeline import logic as timeline_logic
 from soc.views import helper
 from soc.views import out_of_band
 from soc.views.helper import redirects
@@ -600,10 +601,10 @@
     key_fields = program_logic.getKeyFieldsFromDict(django_args)
     program = program_logic.getFromFields(**key_fields)
 
-    if not program:
+    if not program or program.status == 'invalid':
       self.deny(django_args)
 
-    new_args = { 'scope_path': program.scope_path }
+    new_args = {'scope_path': program.scope_path }
     self.checkIsHost(new_args)
 
   @allowDeveloper
@@ -890,9 +891,9 @@
     # is public or not, probably involving analysing it's scope or such.
     self.allow(django_args)
 
-  @allowIfCheckPasses('checkIsHost')
-  def checkIsProgramActive(self, django_args):
-    """Checks whether a program is active
+  @allowIfCheckPasses('checkIsHostForProgram')
+  def checkIsProgramVisible(self, django_args):
+    """Checks whether a program is visible.
     """
 
     if 'entity' in django_args:
@@ -904,7 +905,7 @@
     if not program:
       self.deny(django_args)
 
-    if program.is_enabled:
+    if program.status == 'visible':
       return
 
     context = django_args.get('context', {})
@@ -915,3 +916,23 @@
 
     raise out_of_band.AccessViolation(DEF_DEV_LOGOUT_LOGIN_MSG_FMT,
                                       context=context)
+
+
+  def checkCanEditTimeline(self, django_args):
+    """Allows developers and hosts for this program's timeline to edit it.
+    """
+    time_line_keyname = django_args['scope_path']
+    timeline_entity = timeline_logic.getFromKeyName(time_line_keyname)
+
+    if not timeline_entity:
+      # timeline does not exists so deny
+      self.deny(django_args)
+
+    splitkeyname = time_line_keyname.rsplit('/')
+
+    fields = {'scope_path' : splitkeyname[0],
+        'workflow' : splitkeyname[1],
+        'link_id' : splitkeyname[2],
+        }
+
+    return self.checkIsHostForProgram(fields)