Beispiel #1
0
 def root_view(self):
     contents = []
     for obj in self.context.values():
         if IOrganisation.providedBy(obj) and security.context_has_permission(obj, security.VIEW, self.userid):
             contents.append(obj)
     contents = sorted(contents, key = lambda x: x.title.lower())
     self.response['listing'] = self.listing_sniplet(contents)
     return self.response
 def questions_view(self):
     """ This view is for any IQuestions context, both the global one and the local one + the Organisation objects 'variants' view.
     """
     schema = createSchema('QuestionSearchSchema').bind(context = self.context, request = self.request)
     form = Form(schema, buttons = (), formid = 'tag_select', action = 'javascript:')
     self.response['form_resources'] = form.get_widget_resources()
     self.response['tag_form'] = form.render()
     #Get questions, sorted - behaves differently for variants!
     if IOrganisation.providedBy(self.context):
         questions = self.root['questions'].values()
     else:
         questions = self.context.values()
     self.response['questions'] = sorted(questions, key = lambda q: q.get_field_value('title').lower())
     self.response['is_org'] = IOrganisation.providedBy(self.context)
     self.response['show_edit_variants'] = self.response['is_org'] and \
         security.context_has_permission(self.context, security.MANAGE_SURVEY, self.userid)
     self.response['show_edit'] = IQuestions.providedBy(self.context) and \
         security.context_has_permission(self.context, security.EDIT, self.userid) or False
     return self.response
 def check_safe_delete(self, request):
     root = find_root(self)
     results = []
     #This code is ugly and could probably be done in a better way.
     for org in [x for x in root.values() if IOrganisation.providedBy(x)]:
         for surv in [x for x in org['surveys'].values() if ISurvey.providedBy(x)]:
             for surv_sect in [x for x in surv.values() if ISurveySection.providedBy(x)]:
                 if self.__name__ in surv_sect.question_ids:
                     results.append(surv_sect)
     if not results:
         return True
     #FIXME: Only flash messages can handle html right now
     out = u"<br/><br/>"
     rurl = request.resource_url
     out += ",<br/>".join([u'<a href="%s">%s</a>' % (rurl(x), x.title) for x in results])
     request.session.flash(_(u"Can't delete this since it's used in the following survey sections: ${out}",
                             mapping = {'out': out}))
     return False
def fix_nonpersistent_variants(*args):
    """ Organisations stored language variants in a regular dict that isn't persistent
        This fixes that.
    """
    worker = ScriptWorker('fix_nonpersistent_variants')
    
    orgs = [x for x in worker.root.values() if IOrganisation.providedBy(x)]
    for org in orgs:
        for (q_uid, value) in org.variants.items():
            if not isinstance(org.variants[q_uid], dict):
                continue
            org.variants[q_uid] = OOBTree(value)
            print "Fixing variant in %s" % org

    transaction.commit()
    print "Done"
    
    worker.shutdown()
    
def _valid_organisaitons(root, userid):
    results = []
    for obj in root.values():
        if IOrganisation.providedBy(obj) and context_has_permission(obj, EDIT, userid):
            results.append(obj)
    return sorted(results, key = lambda x: x.title.lower())