Exemple #1
0
 def getDataFieldByUser(self, field):
     username = self.context.portal_membership.getAuthenticatedMember().getId()
     username = username.decode('utf-8')
     
     user_instance = FuncDetails(username)
     
     return user_instance.get(field, '')
Exemple #2
0
    def getDataFieldByUser(self, field):
        username = self.context.portal_membership.getAuthenticatedMember(
        ).getId()
        username = username.decode('utf-8')

        user_instance = FuncDetails(username)

        return user_instance.get(field, '')
Exemple #3
0
    def getItens(self,):
        qtd = 20
        if self.context.getQtdMembers():
            qtd = self.context.getQtdMembers()

        dados_users = FuncDetails.get_AllFuncUsernameList(sorted_by=por_admicao, reverse=True)[:qtd]
        return dados_users
    def update(self):
        form = self.request.form
        success_url = self.context.absolute_url() + '/myvindula-compare-user'
        if 'users' in form.keys():
            users = form.get('users','')
            if isinstance(users, str):
                users = [users]
            for user in users:
                username = self.Convert_utf8(user)

#                is_user_vindula = ModelsInstanceFuncdetails().get_InstanceFuncdetails(username)
                is_user_vindula = FuncDetails(username)
                try:
                    if is_user_vindula:
                        is_user_vindula.remove_data_user()
                        self.setStatusMessage("info","Usuário excluído com sucesso.")
                except:
                    self.setStatusMessage("error","Erro ao excluir usuário do Vindula.")

        self.request.response.redirect(success_url)
    def get_follow(self, username, followers=True):
        items = []
        result = []

        if followers:
            items = ModelsFollow.get_followers(self.Convert_utf8(username))
        else:
            items = ModelsFollow.get_followings(self.Convert_utf8(username))
                        
        for item in  items:
            user = None
            if followers:
                user = FuncDetails(item.username)
            else:
                content = self.get_content_by_id(item.content_id)
                if content:
                    if content.type == 'UserObject':
                        user = FuncDetails(content.uid)
                        item = content
            
            if user and not user.is_deleted():
                result.append(item)
        return result
Exemple #6
0
    def busca_usuarios(self):
        form = self.request.form
        result = None

        if 'SearchSubmit' in form.keys():
            form_values, departamento = self.getBusca()
            self.form_dados = form_values
            check_form = [i for i in form_values if i.values() != [u'']]
            
            if departamento or check_form:
                fields = {}
                for di in check_form:
                    for i in di:
                        fields[i] = '%%%s%%' % (di[i])

                if departamento:
                    fields['unidadeprincipal'] = departamento

                result = FuncDetails.get_FuncDetailsByField(fields, if_empty_return_all=False)
                return [self._username_to_infouser(r) for r in result if r]
Exemple #7
0
    def list_files(self, subject, keywords, structures, theme, portal_type, fields=None, list_files=[], path=None):
        p_membership = getToolByName(self.context, 'portal_membership')
        current_user = p_membership.getAuthenticatedMember()
        current_username = current_user.getUserName()
        if 'list_files[]' in self.request.keys() or 'list_files' in self.request.keys():
            values = self.request.get('list_files[]', self.request.get('list_files'))
            if values:
                try:
                    if isinstance(values, str):
                        values = eval(values)
                except (SyntaxError, NameError):
                    values = [values]
                
                if 'Pessoas' in portal_type:
                    #Retorna a lista de usernames para a template trabalhar
                    return values
                else:
                    try:
                        objs = [uuidToObject(uuid) for uuid in values]
                    except (SyntaxError, NameError):
                        objs = [uuidToObject(values)]
                    
                    return self.geraDicForFields(objs, fields)
            else:
                return []
        else:
            #TODO: Solucao temporaria, fazer funcionar o decorator

            #Adciono o usuario logado a chave do redis, pois cada usuario pode ter privilégios diferentes de ver o conteudo
            key = hashlib.md5('%s:%s:%s:%s:%s:%s:%s:%s' %(subject,keywords,structures,theme,portal_type,fields,path,current_username)).hexdigest()
            key = 'Biblioteca:list_files::%s' % key
            cached_data = get_redis_cache(key)
            if 'Pessoas' in portal_type:
                return FuncDetails.get_AllFuncUsernameList(self.Convert_utf8(subject))
            elif not cached_data:
                itens = self.busca_catalog(subject, keywords, structures, theme, portal_type, path, current_user)
                itens_dict = self.geraDicForFields(itens, fields)
                set_redis_cache(key,'Biblioteca:list_files:keys',itens_dict,600)
                return itens_dict
            else:
                return cached_data
Exemple #8
0
    def get_birthdaysToday(self, type_filter, filtro_OU):
        Z_now = DateTime()
        today = DateTime().asdatetime().date()

        if type_filter == '1':
            date_start = date_end = today

        elif type_filter == '7':
            day_of_weekday = Z_now.dow()
#            date_start = (Z_now + 1 - day_of_weekday).asdatetime().date()
            #Pega os aniversariantes da semana a partir de HOJE!
            #Acho que nao faz sentido listar os que ja passaram
            date_start = today
            date_end = (Z_now + 1 - day_of_weekday + 6).asdatetime().date()

        elif type_filter == '30':
            last_dia = calendar.monthrange(today.year,today.month)[1]
            date_start = date(today.year,today.month,1)
            date_end = date(today.year,today.month,last_dia)

        elif type_filter == 'prox':
            date_start = today
            date_end = today + timedelta(days=365)
        
        results = FuncDetails.get_FuncBirthdays(date_start,date_end)

        if filtro_OU:
            if not isinstance(filtro_OU, str):
                filtro_OU = filtro_OU.UID()
                
            results_OU = []
            for user in results:
                unidade_user = user.get('UO','')          
                if filtro_OU == unidade_user:
                    results_OU.append(FuncDetails(user.get('username', '')))
            return results_OU
        
        return results
    def update(self):
        context = self.context
        form = self.request.form
        self.portal = context.portal_url.getPortalObject()
        self.catalog_tool = getToolByName(context, 'portal_catalog')
        self.reference_tool = getToolByName(context, 'reference_catalog')
        self.all_structures = []

        itens_dict = []
        key = ''
        
        query = {}
        references = {}
        unit_locations = []
        structures_selected = []
        self.result = []
        has_searchable_text = False
        
        context_path = form.get('path')
        
        if context_path:
            query['path'] = {'query':context_path }
        else:
            query['path'] = {'query':'/'.join(self.portal.getPhysicalPath()), 'depth': 99}
        
        query['portal_type'] = ['File',]
        start = False
        end = False

        if form.get('portal-type') == 'Pessoas':
            filter = {}

            for item in form.items():
                field, values = item[0], item[1]
                field = field.replace('[', '').replace(']', '')
                
                if values:
                    if isinstance(values, list):
                        values_filter = []
                        for value in values:
                            values_filter.append('%'+value+'%')
                    else:
                        values_filter = '%'+values+'%'
                        
                    if field == 'cargo':
                        filter['cargos'] = values_filter
                    elif field == 'activity':
                        filter['atividades'] = values_filter
                    elif field == 'main-structure':
                        filter['unidadeprincipal'] = values_filter
                    elif field == 'SearchableText':
                        filter['name'] = values_filter

            users = FuncDetails.get_FuncDetailsByField(filter)

            for user in users:
                if not isinstance(user,unicode) and not isinstance(user,str):
                    user = user.username

                user = unicode(user)
                self.result.append(user)

        else:
            for item in form.items():
                field, values = item[0], item[1]
                field = field.replace('[', '').replace(']', '')
                
                if values:
                    if str(values) in key:
                        continue

                    key += '%s:' % values
                    if field == 'document-type':
                        if 'all' in values:
                            values = self.getAllKeyword('tipo')
                            values = values.keys()
                        query['tipo'] = values
                    elif field == 'document-status':
                        if 'all' in values or isinstance(values, list):
                            continue
                        query['getStatus'] = eval(values)
                    elif field == 'date-start':
                        start = datetime.strptime(values, '%d/%m/%Y')
                    elif field == 'date-end':
                        end = datetime.strptime(values, '%d/%m/%Y')
                    elif field == 'SearchableText':
                        query['SearchableText'] = '*%s*' % values
                    elif field == 'document-theme':
                        query['ThemeNews'] = values
                    elif field == 'document-format':
                        query['content_type'] = eval(values)
                    elif field == 'document-subject': 
                        query['Subject'] = values
                    elif field == 'unit-type':
                        if 'all' in values:
                            values = self.getAllKeyword('tipounidade')
                            values = values.keys()
                        query['tipounidade'] = values
                    elif field == 'structure-owner':
                        if not isinstance(values, list): values = [values]
                        if 'all' in values:
                            if self.all_structures:
                                objs = self.all_structures
                            else:
                                self.all_structures = self.getAllStructures()
                                objs = self.all_structures
                        else:
                            objs = [uuidToObject(uuid) for uuid in values if uuid]
                        references['structures'] = objs
                    elif field == 'structure-client':
                        if not isinstance(values, list): values = [values]
                        if 'all' in values:
                            if self.all_structures:
                                objs = self.all_structures
                            else:
                                self.all_structures = self.getAllStructures()
                                objs = self.all_structures
                        else:
                            objs = [uuidToObject(uuid) for uuid in values if uuid]
                        references['structuresClient'] = objs
                    elif field == 'unit-location':
                        if not isinstance(values, list): values = [values]
                        if 'all' in values:
                            unit_locations = self.getAllUnits()
                        else:
                            unit_locations = [uuidToObject(uuid) for uuid in values if uuid]
                    elif field == 'structure-selected':
                        structures_selected.append(uuidToObject(values)) 
#                         query['path']['query'] = '/'.join(uuidToObject(values).getPhysicalPath())
                    elif field == 'portal-type':
                        try:
                            if isinstance(values, str):
                                values = eval(values)
                        except NameError:
                            values = [values]
                        query['portal_type'] = values
            
            key = 'Biblioteca:searchfilter::%s' % key
            cached_data = get_redis_cache(key)
            
            if not cached_data:
                if start or end:
                    if not start:
                        query['effective'] = {'query':end, 'range': 'max'}
                    elif not end:
                        query['effective'] = {'query':start, 'range': 'min'}
                    else:
                        query['effective'] = {'query':(start, end), 'range': 'min:max'}
                
                if not 'File' in query.get('portal_type'):
                    query['review_state'] = ['published', 'internally_published', 'external']
                
                
                files = self.catalog_tool(**query)
                files = [i.UID for i in files]
                if query.get('tipo') or \
                   query.get('classificacao') or \
                   query.get('effective') or \
                   query.get('SearchableText') or \
                   query.get('tipounidade'):
                    self.result = files
                
                aux_list_structures = []
                for reference in references.items():
                    relationship, objs = reference[0], reference[1]
                    for obj in objs:
                        refs = self.reference_tool.getBackReferences(obj, relationship)
                        for ref in refs:
                            ref_obj = ref.getSourceObject()
                            if query.get('SearchableText'):
                                has_searchable_text = True
                                if ref_obj.UID() in self.result and \
                                   ref_obj.portal_type in query.get('portal_type'):
                                    aux_list_structures.append(ref_obj.UID())
                            else:
                                if ref_obj.UID() not in self.result and \
                                   ref_obj.portal_type in query.get('portal_type'):
                                    self.result.append(ref_obj.UID())
                    
                if has_searchable_text and references: 
                    self.result = aux_list_structures
                    return
                
                aux_list_units = []
                for location in unit_locations:
                    refs = self.reference_tool.getBackReferences(location, 'units')
                    for ref in refs:
                        ref_obj = ref.getSourceObject()
                        if query.get('SearchableText'):
                            if ref_obj.UID() in self.result and \
                               ref_obj.portal_type in query.get('portal_type'):
                                aux_list_units.append(ref_obj.UID())
                        else:
                            if ref_obj.UID() not in self.result and \
                               ref_obj.portal_type in query.get('portal_type'):
                                self.result.append(ref_obj.UID())
                                
                if has_searchable_text and unit_locations: 
                    self.result = aux_list_structures
                    return
        
                #verificar a logica disso
                if not self.result and \
                   not unit_locations and \
                   not references:
                     self.result = files
                
                if structures_selected:
                    result_structures = []
                    for structure_selected in structures_selected:
                        for item in self.result:
                            obj = uuidToObject(item)
                            if obj:
                                try:
                                    if structure_selected == obj.getStructures():
                                        result_structures.append(item)
                                except AttributeError:
                                    continue
                    self.result = result_structures

                set_redis_cache(key,'Biblioteca:searchfilter:keys', self.result, 600) #Tempo em segundos
            else:
                self.result = cached_data
                
        return
Exemple #10
0
    def getGestorInfo(self):
        user_obj =  FuncDetails(username=unicode(self.getManager(),'utf-8'))
        text = "%s <br/> %s " %(user_obj.get('name',self.getManager()),
                                user_obj.get('position',''))

        return text
    def results(self, query=None, batch=True, b_size=10, b_start=0):
        results_pessoas = []

        tipo_busca = self.request.form.get('facet.tipo', 'intranet')
        term = self.request.form.get('SearchableText', '')

        if not query:
            query = {}

        if term:
            query = {'SearchableText': quote_bad_chars(term) + '*' }

        if tipo_busca == 'intranet':
            if term:
                results_pessoas = FuncDetails.get_AllFuncDetails(unicode(term, 'utf-8'))[:2]

            plone_utils = getToolByName(self.context, 'plone_utils')
            all_types = plone_utils.getUserFriendlyTypes([])
            
            #Removendo filtro de busca
            #Intranet deve buscar tudo
            #for i in ['Image','File', 'Servico']:
            #    all_types.remove(i)

            query['portal_type'] = all_types

        elif tipo_busca == 'pessoas':
            results = []
            if term:
                results = FuncDetails.get_AllFuncDetails(unicode(term, 'utf-8'), search_all_fields=False)
                if batch:
                    results = Batch(results, b_size, b_start)
            return results,[]

        elif tipo_busca == 'servico':
            query['portal_type'] = ['Servico']

        elif tipo_busca == 'biblioteca':
            query['portal_type'] = ['File','VindulaVideo', 'VindulaStreaming', 'VindulaPhotoAlbum']
        
        
        if tipo_busca == 'structure':
            p_catalog = getToolByName(self.context, 'portal_catalog')
            query['portal_type'] = ['OrganizationalStructure']
            results_catalog = p_catalog(**query)
            
            UIDS=[]
            for item in results_catalog:
                UIDS.append(item.UID)
                
            data_structures = ModelsContent.getAllByContentType('OrganizationalStructure', True)
            for structure in data_structures:
                if structure.uid in UIDS:
                    UIDS.remove(structure.uid)
            
            result = [i for i in results_catalog if i.UID in UIDS]
            result = IContentListing(result)
            result = Batch(result, b_size, b_start)
        else:   
            result = super(SearchView,self).results(query=query,batch=batch,b_size=b_size, b_start=b_start)

        return result, results_pessoas
    def results(self, query=None, batch=True, b_size=10, b_start=0):
        results_pessoas = []
        _q_session = self.request.SESSION.get('_q')
        tipo_busca_session = self.request.SESSION.get('facet.tipo')

        _q = self.request.form.get('q', _q_session)
        tipo_busca = self.request.form.get('facet.tipo', tipo_busca_session)

        if (not _q_session and _q) or (_q_session != _q):
            self.request.SESSION['_q'] = _q

        if (not tipo_busca_session and tipo_busca) or (tipo_busca_session != tipo_busca):
            self.request.SESSION['facet.tipo'] = tipo_busca

        if not query:
            query = {}

        for char in ('?', '-', '+', '*', multispace):
            _q = _q.replace(char, ' ')

        r = _q.split()
        r = " AND ".join(r)
        r = quote_bad_chars(r) + '*'
        searchterms = url_quote_plus(r)
        
        query = {'SearchableText': r }

        if tipo_busca == 'intranet':
            results_pessoas = FuncDetails.get_AllFuncDetails(unicode(_q, 'utf-8'))[:2]
            plone_utils = getToolByName(self.context, 'plone_utils')
            all_types = plone_utils.getUserFriendlyTypes([])
            
            #Removendo filtro de busca. 
            #Intranet deve buscar tudo
            #for i in ['Image','File', 'Servico']:
            #    all_types.remove(i)

            query['portal_type'] = all_types

        elif tipo_busca == 'pessoas':
            results = []
            if _q:
                results = FuncDetails.get_AllFuncDetails(unicode(_q, 'utf-8'), search_all_fields=False)
                if batch:
                    results = Batch(results, b_size, b_start)

            return results,[]

        elif tipo_busca == 'servico':
            query['portal_type'] = ['Servico']

        elif tipo_busca == 'biblioteca':
            query['portal_type'] = ['File','VindulaVideo', 'VindulaStreaming', 'VindulaPhotoAlbum']
            
        if tipo_busca == 'structure':
            p_catalog = getToolByName(self.context, 'portal_catalog')
            query['portal_type'] = ['OrganizationalStructure']
            results_catalog = p_catalog(**query)
            
            UIDS=[]
            for item in results_catalog:
                UIDS.append(item.UID)
                
            data_structures = ModelsContent.getAllByContentType('OrganizationalStructure', True)
            for structure in data_structures:
                if structure.uid in UIDS:
                    UIDS.remove(structure.uid)
            
            result = [i for i in results_catalog if i.UID in UIDS]
            result = IContentListing(result)
            result = Batch(result, b_size, b_start)
        else:   
            result = super(UpdatedSearchView,self).results(query=query,batch=batch,b_size=b_size, b_start=b_start)

#         query.update(query)

        return result, results_pessoas