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, '')
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, '')
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
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]
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
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
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