Beispiel #1
0
 def getPropertiesForUser(self, user, request=None):
     """Get property values for a user or group.
     Returns a dictionary of values or a PropertySheet.
     """
     view_name = createViewName('getPropertiesForUser', user)
     cached_info = self.ZCacheable_get(view_name=view_name)
     if cached_info is not None:
         return MutablePropertySheet(self.id, **cached_info)
     data = None
     session = Session()
     if user.isGroup():
         groups = session.query(domain.Group).filter(
             domain.Group.group_principal_id == user.getUserName()).all()
         if len(groups) == 1:
             group = groups[0]
             data = {
                 'title': group.short_name or u"",
                 'description': group.description or u"",
             }
     else:
         users = session.query(domain.User).filter(
             domain.User.login == user.getUserName()).all()
         if len(users) == 1:
             b_user = users[0]
             data = {
                 'fullname':
                 u"%s %s" % (b_user.first_name, b_user.last_name),
                 'email': b_user.email or u"",
                 'description': b_user.description or u"",
                 'notification': b_user.recieve_notification or False,
             }
     if data:
         self.ZCacheable_set(data, view_name=view_name)
         sheet = MutablePropertySheet(self.id, **data)
         return sheet
Beispiel #2
0
    def getPropertiesForUser(self, user, request=None):
        """Get property values for a user or group.
        Returns a dictionary of values or a PropertySheet.
        """
        view_name = createViewName('getPropertiesForUser', user)
        cached_info = self.ZCacheable_get(view_name=view_name)
        if cached_info is not None:
            return MutablePropertySheet(self.id, **cached_info)
        data = None
        if user.isGroup():
            http_obj = httplib2.Http()
            query = '/++rest++brs/groups?'
            params = urllib.urlencode({'user_name': user.getUserName()})
            resp, content = http_obj.request(connection_url() + query + params,
                                             "GET")
            data = simplejson.loads(content)

        else:
            http_obj = httplib2.Http()
            query = '/++rest++brs/users?'
            params = urllib.urlencode({'user_name': user.getUserName()})
            resp, content = http_obj.request(connection_url() + query + params,
                                             "GET")
            data = simplejson.loads(content)

        if data:
            self.ZCacheable_set(data, view_name=view_name)
            sheet = MutablePropertySheet(self.id, **data)
            return sheet
Beispiel #3
0
    def getPropertiesForUser(self, user, request=None):
        """Get properties for this group.

        """
        properties = {}
        catalog = api.portal.get_tool('portal_catalog')
        query = {'object_provides': WORKSPACE_INTERFACE, 'getId': user.getId()}
        brains = catalog.unrestrictedSearchResults(query)
        # Pick the first result. Ignore potential catalog problems
        if len(brains):
            portal_path = api.portal.get().getPhysicalPath()
            brain = brains[0]
            ws_obj = brain._unrestrictedGetObject()
            properties['title'] = safe_unicode(brain.Title)
            properties['description'] = safe_unicode(brain.Description)
            path = '/' + '/'.join(ws_obj.getPhysicalPath()[len(portal_path):])
            properties['workspace_path'] = path
            properties['state'] = api.content.get_state(ws_obj)
            properties['uid'] = ws_obj.UID()
            properties['type'] = 'workspace'
            properties['portal_type'] = ws_obj.portal_type
            # We need to explicitly cast the type to a string type, since
            # the property sheet pukes on zope.i18nmessageid.message.Message
            typ = safe_unicode(ws_obj.Type()).encode('utf-8')
            properties['workspace_type'] = typ
        return MutablePropertySheet(self.context.getId(), **properties)
Beispiel #4
0
    def getPropertiesForUser(self, user, request=None):
        """Get property values for a user or group.
        Returns a dictionary of values or a PropertySheet.
        """

        #print "--- getPropertiesForUser ---"
        try:
            username = user.getUserName()
        except:
            username = user
        #print "username : %s" % username
        if request and request.SESSION.get("sheetJalon%s" % username):
            #print "session"
            return request.SESSION.get("sheetJalon%s" % username)
        #print "pas de session"

        data = {}

        portal = self.portal_url.getPortalObject()
        portal_jalon_bdd = portal.portal_jalon_bdd
        individu = portal_jalon_bdd.getIndividuLITE(username)
        #print "APPEL BDD"

        if individu is not None:
            #print "creation session"
            data["fullname"] = "%s %s" % (individu["LIB_PR1_IND"],
                                          individu["LIB_NOM_PAT_IND"])
            data["email"] = individu["EMAIL_ETU"]
            data["role"] = individu["TYPE_IND"]

            sheet = MutablePropertySheet(username, **data)
            if request:
                request.SESSION.set("sheetJalon%s" % username, sheet)
            return sheet
        return None
Beispiel #5
0
 def getPropertiesForUser(self, user, request=None):
     '''Get properties for this group.
     '''
     properties = {
         'id': self.canonical,
         'title': self.title.encode('utf8'),
         'description': (self.description or u'').encode('utf8'),
         'email': (self.mail or u'').encode('utf8'),
         'canonical': self.canonical.encode('utf8'),
         'object_id': self.id,
     }
     return MutablePropertySheet(**properties)
    def testUpdateZapsCache(self):
        self.plugin.getPropertiesForUser(self.user)
        info = {
            'fullname': u'Jane Doe',
        }
        sheet = MutablePropertySheet("memberdata", **info)
        self.plugin.setPropertiesForUser(self.user, sheet)

        view_name = createViewName('getPropertiesForUser', self.username)
        user = self.plugin.ZCacheable_get(view_name=view_name,
                                          keywords=dict(auth=False),
                                          default=_marker)
        self.failUnless(user is _marker)
Beispiel #7
0
 def getPropertiesForUser(self, user, request=None):
     illegal_ids = ['id']
     properties = {}
     schemata = self.context.Schemata()
     for ups in self.context.getUserPropertySchemata():
         schema = schemata.get(ups, None)
         if schema is not None:
             for field in schema.fields():
                 if field.getName() not in illegal_ids:
                     value = field.get(self.context)
                     properties[field.getName()] = \
                         value is not None and value or ''
     return MutablePropertySheet(self.context.getId(),
                                 **properties)
 def testEnumerateNoAscii(self):
     info = {
         'fullname': u'J\xfcrgen Schmoe',
     }
     sheet = MutablePropertySheet("memberdata", **info)
     self.plugin.setPropertiesForUser(self.user, sheet)
     props = self.plugin.getPropertiesForUser(self.user)
     self.assertEqual(props.getProperty('fullname'), u'J\xfcrgen Schmoe')
     ret = self.plugin.enumerateUsers(fullname='Schmoe')
     self.assertEqual(len(ret), 1)
     ret = self.plugin.enumerateUsers(fullname=u'J\xfcrgen')
     self.assertEqual(len(ret), 1)
     ret = self.plugin.enumerateUsers(fullname='Not There')
     self.assertEqual(len(ret), 0)
Beispiel #9
0
    def getPropertiesForUser(self, user, request=None):
        """Get property values for a user or group.
        Returns a dictionary of values or a PropertySheet.
        """

        view_name = createViewName('getPropertiesForUser', user.getUserName())
        cached_info = self.ZCacheable_get(view_name=view_name)
        if cached_info is not None:
            return MutablePropertySheet(self.id, **cached_info)
        data = None
        session = Session()
        if user.isGroup():
            data = {'name': user.getId()}
        else:
            user = session.query(
                model.User).filter_by(name=user.getUserName()).first()
            if user is not None:
                d = user.__dict__.copy()

                # remove system attributes
                d.pop('password')
                d.pop('name')
                d.pop('groups', None)

                # convert dates
                for name, value in d.items():
                    if isinstance(value, datetime.datetime):
                        d[name] = DateTime(str(value))

                data = dict((name, value) for (name, value) in d.items()
                            if not name.startswith('_') and value is not None)
        if data:
            self.ZCacheable_set(data, view_name=view_name)
            data.pop('id', None)
            sheet = MutablePropertySheet(self.id, **data)
            return sheet
 def testSetPropertiesForUser(self):
     props = self.source_properties.getPropertiesForUser(self.user)
     self.assertEqual(props.getProperty('fullname'), u'')
     self.assertEqual(props.getProperty('email'), u'')
     # The plugin should (at least in plone 4) return what it is given -
     # this is the behaviour of the PlonePAS property plugin. If it is
     # unicode, it will later be converted to utf-8. (In
     # PlonePAS/plugins/ufactory.py(220)getProperty())
     info = {
         'fullname': u'J\xfcrgen Schmoe',
         'email': '*****@*****.**'
     }
     sheet = MutablePropertySheet("memberdata", **info)
     self.source_properties.setPropertiesForUser(self.user, sheet)
     props = self.source_properties.getPropertiesForUser(self.user)
     for name, value in info.items():
         self.assertTrue(name in props.propertyIds())
         self.assertEqual(props.getProperty(name), value)
Beispiel #11
0
 def getPropertiesForUser(self, user, request=None):
     """Retorna as propriedades de uma pessoa.
     """
     api = getUtility(ISPDOAPI)
     pessoa = api.getPessoaByEmail(user.getId())
     if pessoa is None:
         return {}
     keys = Pessoa.__mapper__.columns.keys()
     remove_keys = ['id', 'nome', 'senha', 'version', 'version_date']
     keys = [k for k in keys if k not in remove_keys]
     data = {
         'fullname': pessoa.nome,
     }
     for k in keys:
         value = getattr(pessoa, k)
         if isinstance(value, unicode):
             data[k] = value.encode('utf-8')
         elif value is not None:
             data[k] = value
     return MutablePropertySheet(self.id, **data)
Beispiel #12
0
    def getPropertiesForUser(self, user, request=None):
        """Get properties for this user.

        Find the fields of the user schema that make sense as a user
        property in @@personal-information.

        Note: this method gets called a crazy amount of times...

        Also, it looks like we can ignore the user argument and just
        check self.context.
        """
        properties = dict(fullname=self.fullname, )
        for prop_name, field_name in self.property_map.items():
            value = getattr(self.context, field_name, None)
            if value is None:
                # Would give an error like this:
                # ValueError: Property home_page: unknown type
                value = u''
            properties[prop_name] = value
        return MutablePropertySheet(self.context.getId(), **properties)
Beispiel #13
0
    def getPropertiesForUser(self, user, request=None):
        """
        Retrieve all the IMembraneUserProperties property providers
        and delegate to them.
        """
        properties = {}

        prop_providers = self._getPropertyProviders(user)
        for mem_props in prop_providers:
            psheet = mem_props.getPropertiesForUser(user, request)
            if psheet:
                if IPropertySheet.providedBy(psheet):
                    items = psheet.propertyItems()
                else:
                    items = psheet.items()
                for prop, value in items:
                    properties[prop] = value
        if 'id' in properties:
            # When instantiating sheet(id, **props) is used - two ids is bad
            del properties['id']
        return MutablePropertySheet(self.id, **properties)
Beispiel #14
0
 def getPropertiesForUser(self, user, request=None):
     """
     Find the fields that have true value for 'user_property' and
     return the values, using user_property value as the property
     name if it is a string.
     """
     properties = {}
     schema = self.context.Schema()
     for field in schema.filterFields(self._isPropertyField):
         # use the accessor if available:
         accessor = field.getAccessor(self.context)
         if accessor is not None:
             value = accessor()
         else:
             value = field.get(self.context)
         user_prop = field.user_property
         prop_name = (isinstance(user_prop, str) and user_prop) or \
             field.getName()
         if value is None:
             value = ''
         properties[prop_name] = value
     return MutablePropertySheet(self.context.getId(),
                                 **properties)
Beispiel #15
0
    def getPropertiesForUser(self, user, request=None):
        """Get property values for a user or group.
        Returns a dictionary of values or a PropertySheet.

        This implementation will always return a MutablePropertySheet.

        NOTE: Must always return something, or else the property sheet
        won't get created and this will screw up portal_memberdata.
        """
        isGroup = getattr(user, 'isGroup', lambda: None)()

        data = self._storage.get(user.getId())
        defaults = self._getDefaultValues(isGroup)

        # provide default values where missing
        if not data:
            data = {}
        for key, val in list(defaults.items()):
            if key not in data:
                data[key] = val

        return MutablePropertySheet(self.id,
                                    schema=self._getSchema(isGroup), **data)
    def getPropertiesForUser(self, user, request=None):
        """ user -> {}

        o User will implement IPropertiedUser.

        o Plugin should return a dictionary or an object providing
          IPropertiesPlugin.

        o Plugin may scribble on the user, if needed (but must still
          return a mapping, even if empty).

        o May assign properties based on values in the REQUEST object, if
          present
        """

        if isinstance(user, basestring):
            user_id = user
        else:
            user_id = user.getId()

        properties = {'fullname': '',
                      'email': ''}

        return MutablePropertySheet(self.id, **properties)
Beispiel #17
0
    def getPropertiesForUser(self, user, request=None):
        """Get property values for a user or group.
        Returns a dictionary of values or a PropertySheet.
        """

        #print "--- getPropertiesForUser ---"
        #print request.SESSION

        #print request.SESSION
        if request and "__cas_assertion" in str(request.SESSION): return None

        try:
            username = user.getUserName()
        except:
            username = user
        if request and request.SESSION.get("sheetSygefor%s" % username):
            print "session"
            return request.SESSION.get("sheetSygefor%s" % username)
        print "pas de session"

        #view_name = createViewName('getPropertiesForUser', username)
        #cached_info = self.ZCacheable_get(view_name=view_name)
        #if cached_info is not None:
        #    return MutablePropertySheet(self.id, **cached_info)
        #print "Pas en cache"
        data = None
        session = self.Session()

        login = username
        #if login.startswith("0syg0"): login = login[5:]
        #user = session.query(models.User).join(models.UserInfos, models.User.idTiers==models.UserInfos.idTiers).filter(models.User.loginStagiaire==user.getUserName()).options(contains_eager(models.User)).first()
        userSyg = session.query(
            models.User).filter(models.User.loginStagiaire == login).first()
        #user = session.query(models.User.idTiers, models.UserInfos.idTiers).filter(rdb.and_(models.User.idTiers==models.UserInfos.idTiers, models.User.loginStagiaire==user.getUserName())).first()

        if userSyg is not None:
            d = userSyg.__dict__.copy()
            #print d

            # remove system attributes
            d.pop('loginStagiaire')
            d.pop('passwordStagiaire')

            # convert dates
            for name, value in d.items():
                if isinstance(value, datetime.datetime):
                    d[name] = DateTime(str(value))

            data = dict((name, value) for (name, value) in d.items()
                        if not name.startswith('_') and value is not None)

            user_infos = session.query(models.UserInfos).filter(
                models.UserInfos.idTiers == int(data["idTiers"])).first()
            if user_infos:
                dico = user_infos.__dict__.copy()
                data["fullname"] = "%s %s" % (dico["nomTiers"],
                                              dico["prenomTiers"])
                data["email"] = dico["mailTiers"]
            #data["fullname"] = "%s %s" % (data["lastname"], data["firstname"])
            #print data
        session.close()
        #self.ZCacheable_set(data, view_name=view_name)
        if data:
            #self.ZCacheable_set(data, view_name=view_name)
            idSyg = data.pop('id', None)
            sheet = MutablePropertySheet(idSyg, **data)
            if request: request.SESSION.set("sheetSygefor%s" % username, sheet)
            return sheet
 def testPropertyLoadedFromSQL(self):
     value = 'snakes in a train'
     self.source_properties.setPropertiesForUser(
         self.user, MutablePropertySheet("memberdata", fullname=value))
     props = self.source_properties.getPropertiesForUser(self.user)
     self.assertEqual(props.getProperty("fullname"), value)