示例#1
0
def registerEntityConfig(typ, klass, gen_fs=False, protect=False, edit_fs=None, create_fs=None, list_fs=None, filter_fs=None, sort_default=None, label=None):
    """
    Erlaubt das programmatische Definieren oder Ueberschreiben von Entity Konfigurationen.
    D.h. statt eines EntityConfig Objekts wird eine interne Registry genutzt, 
    um alle Aspekte der Darstellung persistent abzulegen.
    Wenn 'protect' = True, dann werden die Eintraege durch einen erneuten Aufruf nicht ueberschrieben -
        es sei denn, der erneute Aufruf spezifiziert wieder 'protect' = True.
    Wenn andere Parameter None sind und gen_fs == False, dann bleiben etwaige vorherige Eintraege erhalten. So kann man gezielt auch
    Teile ueberschreiben.  Ist gen_fs == True, werden generisch Defaults fuer fehlende Parameter erzeugt.
    """
    # print "**************** registerEntityConfig", typ, gen_fs, protect
    if not label:
        label = typ.capitalize()
        
    econfig = {}
    if _ecreg.has_key(typ): 
        econfig = _ecreg[typ]
        if econfig['protect'] and not protect: # Eintrag ist geschuetzt und wird nicht ueberschrieben
            # print "PROTECTED"
            return
    econfig['label'] = label
    econfig['klass'] = klass
    econfig['protect'] = protect
    
    if gen_fs:
        try:
            fields = getAllEntityFields(klass) 
            
            if not edit_fs:
                edit_fs = _makeFS(klass, fields)
            if not create_fs:
                create_fs = _makeFS(klass, fields)
            if not list_fs:
                list_fs = _makeGrid(typ, klass, fields)
            if not filter_fs:
                filter_fs = _makeFS(klass, fields)
            if not sort_default:
                sort_default = fields[0]
        except "Exception, e": # Bei ungewoehnlichen (binaeren) Feldern
            log_exc(e)
    
    if edit_fs:
        econfig['edit_def'] = edit_fs
    if create_fs:
        econfig['create_def'] = create_fs
    if list_fs:
        econfig['list_def'] = list_fs
    if filter_fs:
        econfig['filter_def'] = filter_fs
    if sort_default:
        econfig['sort_default'] = sort_default
        
    #print "Registering...", typ, econfig
    _ecreg[typ] = econfig
示例#2
0
def deleteMemberFolders(self, member_ids):
    """
    """
    for mid in member_ids:
        try:
            members = self.content.Members
            members.manage_delObjects([mid.replace("-","--")])
        except Exception, e:
            log_exc(e)
            try:
                self.portal_membership.getMembersFolder().manage_delObjects([mid.replace("-","--")])
            except Exception, e:
                log_exc(e)
示例#3
0
 def _indexObject(obj):
     if (base_hasattr(obj, 'getObject') and
         safe_callable(obj.getObject)):
         # Wake up any brains
         obj = obj.getObject()
     if (base_hasattr(obj, 'indexObject') and
         safe_callable(obj.indexObject)):
         try:
             obj.indexObject()
         except TypeError:
             # Catalogs have 'indexObject' as well, but they
             # take different args, and will fail
             pass
         except:
             # Log indexing exceptions but continue
             log_exc('Could not reindex %s'%(
                 '/'.join(obj.getPhysicalPath())))
示例#4
0
def getGroupsForCurrentUser(self, user=None):
    """
    """
    g = self.content.Groups
#    gpath = "/".join(g.getPhysicalPath())
    gordner = g.getFolderContents()
    
    #print groups
    gtool = getToolByName(self, "portal_groups")
    res = []
    for g in gordner:
        try:
            grp = gtool.getGroupById(g.id)
            etypes = grp.getProperty('allowedDocTypes', []) 
            if etypes:
                title = grp.getProperty('title','')
                res.append({'id': g.id, 'title' : title, 'etypes' : etypes})
        except Exception, e:
            log_exc(e)
示例#5
0
def back_references(source_object, attribute_name):
    """ Return back references from source object on specified attribute_name """
    try:
        catalog = getUtility(ICatalog)
        intids = getUtility(IIntIds)
        result = []
        # print 'back_reference ',  intids.getId(aq_inner(source_object))
        for rel in catalog.findRelations(
                                dict(to_id=intids.getId(aq_inner(source_object)),
                                     from_attribute=attribute_name)
                                ):
            # print rel
            obj = intids.queryObject(rel.from_id)
            # print 'treffer ',  obj
            if obj is not None and checkPermission('zope2.View', obj):
                result.append(obj)
        return result
    except Exception, e:
        log_exc(e)
        return []
示例#6
0
def getActiveAllowedPersonalBehaviorsForDocument(doc, request):
    """
    Determine which behaviors are
    - configured for the object, which are also
    - allowed within the docpool and also
    - allowed for the user and
    - not currently filtered out.
    @param self:
    @return:
    """
    try:
        dp_app_state = getMultiAdapter((doc, request), name=u'dp_app_state')
        if doc.isPersonal(): # no personal filtering in the content area
            permitted_apps = dp_app_state.appsEffectiveForObject(request, filtered=False)
        else: # but in all other areas
            permitted_apps = dp_app_state.appsEffectiveForObject(request, filtered=True)
        permitted_apps.sort()
        # print "getActiveAllowed ", permitted_apps
        return permitted_apps
    except Exception, e:
        log_exc(e)
        return []
示例#7
0
 def _conflict_safe_update(self, slices, action):
     """Perform an action on groups of objects, with transaction
     commits along the way"""
     updated = []
     trans_failed = []
     commit = transaction.commit
     sync = self.context._p_jar.sync
     obj_path = self._obj_path
     for n,s in enumerate(slices):
         # skip cache purging
         resolved = list(s)
         if not resolved:
             #log('Batch %s was empty'%n)
             continue
         [action(r) for r in resolved]
         try:
             commit()
             log('Full transaction committed on batch %s (%s) '%(n,
                                                              len(resolved)))
             sync()
         except ConflictError:
             transaction.abort()
             log('Conflict on batch %s, retrying ...'% n,
                 severity=logging.WARN)
             # try once more
             [action(r) for r in resolved]
             try:
                 commit()
                 log('Full transaction committed after retry on batch %s'% n,
                     severity=logging.WARN)
                 sync()
             except ConflictError:
                 transaction.abort()
                 log_exc('Conflict after two tries on batch %s, continuing'%n)
                 trans_failed.extend(obj_path(o) for o in resolved)
                 continue
         updated.extend(obj_path(o) for o in resolved)
     return updated, trans_failed