app/soc/views/models/program.py
changeset 1107 a878188e225c
parent 1097 1f7015b33a0c
child 1115 0a723ff3d27c
equal deleted inserted replaced
1106:e14b0995cf29 1107:a878188e225c
    56     rights = access.Checker(params)
    56     rights = access.Checker(params)
    57     rights['any_access'] = ['allow']
    57     rights['any_access'] = ['allow']
    58     rights['show'] = ['allow']
    58     rights['show'] = ['allow']
    59     rights['create'] = ['checkIsHost']
    59     rights['create'] = ['checkIsHost']
    60     rights['edit'] = ['checkIsHostForProgram']
    60     rights['edit'] = ['checkIsHostForProgram']
    61     rights['delete'] = ['checkIsHostForProgram']
    61     rights['delete'] = ['checkIsDeveloper']
    62 
    62 
    63     new_params = {}
    63     new_params = {}
    64     new_params['logic'] = soc.logic.models.program.logic
    64     new_params['logic'] = soc.logic.models.program.logic
    65     new_params['rights'] = rights
    65     new_params['rights'] = rights
    66 
    66 
    68     new_params['scope_redirect'] = redirects.getCreateRedirect
    68     new_params['scope_redirect'] = redirects.getCreateRedirect
    69 
    69 
    70     new_params['name'] = "Program"
    70     new_params['name'] = "Program"
    71     new_params['sidebar_grouping'] = 'Programs'
    71     new_params['sidebar_grouping'] = 'Programs'
    72 
    72 
    73     new_params['edit_template'] = 'soc/program/edit.html'
       
    74 
       
    75     new_params['extra_dynaexclude'] = ['timeline']
    73     new_params['extra_dynaexclude'] = ['timeline']
    76 
    74 
       
    75     # TODO add clean field to check for uniqueness in link_id and scope_path
    77     new_params['create_extra_dynafields'] = {
    76     new_params['create_extra_dynafields'] = {
    78         'description': forms.fields.CharField(widget=helper.widgets.TinyMCE(
    77         'description': forms.fields.CharField(widget=helper.widgets.TinyMCE(
    79             attrs={'rows':10, 'cols':40})),
    78             attrs={'rows':10, 'cols':40})),
    80 
    79 
    81         'scope_path': forms.CharField(widget=forms.HiddenInput, required=True),
    80         'scope_path': forms.CharField(widget=forms.HiddenInput, required=True),
   135     """
   134     """
   136 
   135 
   137     logic = params['logic']
   136     logic = params['logic']
   138     rights = params['rights']
   137     rights = params['rights']
   139 
   138 
   140     entities = logic.getForLimitAndOffset(1000)
   139     # only get all invisible and visible programs
       
   140     fields = {'status':['invisible', 'visible']}
       
   141     entities = logic.getForFields(fields)
   141 
   142 
   142     doc_params = document_view.view.getParams()
   143     #TODO(ljvderijk) Add timeline dependent entries
       
   144 
   143     menus = []
   145     menus = []
   144 
   146 
   145     rights.setCurrentUser(id, user)
   147     rights.setCurrentUser(id, user)
   146     filter_args = {}
   148     filter_args = {}
   147 
   149 
   148     for entity in entities:
   150     for entity in entities:
   149       filter_args['entity'] = entity
   151       items = []
   150       try:
       
   151         rights.doCheck('checkIsProgramActive', filter_args, [])
       
   152       except out_of_band.Error:
       
   153         continue
       
   154 
   152 
   155       items = document_view.view.getMenusForScope(entity, params)
   153       if entity.status == 'visible':
       
   154         # show the documents for this program, even for not logged in users
       
   155         items += document_view.view.getMenusForScope(entity, params)
   156 
   156 
   157       try:
   157       try:
   158         rights.doCachedCheck('checkIsHost', {}, [])
   158         # check if the current user is a host for this program
   159         items += [(redirects.getEditRedirect(entity, params),'Edit','any_access')]
   159         rights.doCachedCheck('checkIsHostForProgram', 
       
   160             {'scope_path' : entity.scope_path,
       
   161             'link_id' : entity.link_id,
       
   162             'workflow' : entity.workflow}, [])
       
   163 
       
   164         if entity.status == 'invisible':
       
   165           # still add the document links so hosts can see how it looks like
       
   166           items += document_view.view.getMenusForScope(entity, params)
       
   167 
       
   168         # add link to edit Program Profile
       
   169         items += [(redirects.getEditRedirect(entity, params),
       
   170             'Edit Program Profile','any_access')]
       
   171         # add link to edit Program Timeline
       
   172         items += [(redirects.getEditRedirect(entity, {'url_name': 'timeline'}),
       
   173             "Edit Program Timeline", 'any_access')]
       
   174         # add link to create a new Program Document
   160         items += [(redirects.getCreateDocumentRedirect(entity, 'program'),
   175         items += [(redirects.getCreateDocumentRedirect(entity, 'program'),
   161           "Create new document", 'any_access')]
   176           "Create new document", 'any_access')]
       
   177 
   162       except out_of_band.Error:
   178       except out_of_band.Error:
   163         pass
   179         pass
   164 
   180 
   165       menu = {}
   181       menu = {}
   166       menu['heading'] = entity.short_name
   182       menu['heading'] = entity.short_name