Example #1
0
    def get(self, registry_id, filename):
        user = self.get_current_user()
        filename = unquote(filename)
        file_data = dict()
        file_id = '/'.join([registry_id,filename])
        self._file = model.Studio().retrieve(file_id)
        
        if self._file != None:
            file_data = self._file.getFileInfo(user, filename)

            file_data["apagar"] = isAllowedToDeleteObject(user, file_data["owner"], file_id)
            file_data["alterar"] = isAllowedToEditObject(user, file_data["owner"], file_id)
            file_data["data_upload"] = short_datetime(file_data["data_upload"])
            file_data["data_alt"] = short_datetime(file_data["data_alt"])
            file_data["comentar"] = isAllowedToComment(user, file_id, file_data["owner"])
            for comentario in file_data["comentarios"]:
                comentario["comment"] = comentario["comment"].replace("\r\n", "<br/>")
                comentario["apagar"] = isAllowedToDeleteComment(user, registry_id, comentario["owner"])
                comentario["data_fmt"] = short_datetime(comentario["data_cri"])
            
            links = []
            links.append(("Ver", "/static/imagens/icones/view32.png", "/studio/"+file_id+"?disp=inline&size=G"))
            links.append(("Baixar", "/static/imagens/icones/down32.png", "/studio/"+file_id+"?disp=attachment&size=G"))
            if isAllowedToEditObject(user, file_data["owner"], file_id):
                links.append(("Alterar este arquivo", "/static/imagens/icones/edit32.png", "/studio/edit/"+file_id))
            if isAllowedToDeleteObject(user, file_data["owner"], file_id):
                links.append(("Remover este arquivo", "/static/imagens/icones/delete32.png", "/studio/delete/"+file_id,
                              "return confirm('Deseja realmente remover este Arquivo?');"))
            self.render("modules/studio/file-info.html", NOMEPAG=u'Estúdio', \
                        REGISTRY_ID=registry_id, \
                        LINKS=links, \
                        FILE=file_data, MSG="")
        else:
            self.render("home.html", MSG=u"Arquivo não encontrado.", \
                        NOMEPAG=u'Estúdio', REGISTRY_ID=registry_id)
Example #2
0
    def searchGlossaryByItemId(self, user, item_id, page, page_size):
        glossary = []
        for row in database.GLOSSARY.view('glossary/by_item_id', startkey=[item_id], endkey=[item_id, {}], skip=(page-1)*page_size , limit=page_size):
            (item_id, registry_id) = row.key
            glossary_data = dict()
            glossary_data["id"] = glossary_id = registry_id+"/"+item_id
            glossary_data["registry_id"] = registry_id
            glossary_data["owner"] = row.value["owner"]
            glossary_data["item_id"] = item_id
            glossary_data["term"] = row.value["term"]
            glossary_data["definition"] = row.value["definition"]
            glossary_data["tags"] = row.value["tags"]
            
            glossary_data["alterar"] = isAllowedToWriteObject(user, "glossary", registry_id)
            glossary_data["apagar"] = glossary_data["alterar"] and isAllowedToDeleteObject(user, row.value["owner"], glossary_id)
            
            glossary_data["data_nofmt"] = row.value["data_alt"]
            glossary_data["data_alt"] = short_datetime(row.value["data_alt"])
            glossary_data["alterado_por"] = row.value["alterado_por"]

            #term_count = _itemIdCount(glossary_data["item_id"])
            glossary_data["term_count"] = ""
            #if term_count > 1: glossary_data["term_count"] = u"%d usuários definiram este termo" % term_count
            
            glossary.append(glossary_data)
            
        glossary = sorted(glossary, key=itemgetter("data_nofmt"), reverse = True)
        return glossary
Example #3
0
    def searchBookmarksByUrl(self, user, page, page_size, url):
        bookmarks = []
        # Obtem uma página de resultados no BD
        # descending=true para listar os mais recentes primeiro
        # como a árvore é percorrida em sentido inverso, endkey é o documento inicial e startkey é o final.           
        for row in database.BOOKMARKS.view('bookmarks/by_url' ,startkey=[url, {}, {}], endkey=[url], descending="true", skip=(page-1)*page_size , limit=page_size):
            (url, data_alt, bookmark_id) = row.key
            bookmark_data = dict()
            bookmark_data["registry_id"] = row.value["registry_id"]
            bookmark_data["owner"] = row.value["owner"]
            bookmark_data["description"] = row.value["description"]
            bookmark_data["title"] = row.value["title"]
            bookmark_data["url"] = row.value["url"]
            bookmark_data["tags"] = row.value["tags"]
            bookmark_data["id"] = bookmark_id
            
            bookmark_data["alterar"] = isAllowedToWriteObject(user, "bookmarks", row.value["registry_id"])
            bookmark_data["apagar"] = bookmark_data["alterar"] and isAllowedToDeleteObject(user, row.value["owner"], row.value["registry_id"]+"/"+bookmark_id)

           
            bookmark_data["data_nofmt"] = row.value["data_alt"]
            bookmark_data["data_alt"] = short_datetime(row.value["data_alt"])
            bookmark_data["alterado_por"] = row.value["alterado_por"]
            bookmark_data["num_comments"] = _strListSize (len(row.value["comentarios"]), u"comentário")
            #bookmark_data["url_count"] = _strListSize (_urlCount(bookmark_data["url"]), u"referência", genero='F')
            #url_count = _urlCount(bookmark_data["url"])
            bookmark_data["url_count"] = ""
            #if url_count > 1: bookmark_data["url_count"] = u"%d usuários marcaram esta página" % url_count

            bookmarks.append(bookmark_data)
            
        bookmarks = sorted(bookmarks, key=itemgetter("data_nofmt"), reverse = True)
        return bookmarks
Example #4
0
def prepareTopicos(user, topicos):
    prepared_topics = []
    for t in topicos:
        tmp = dict()
        tmp["titulo"] = str_limit(remove_html_tags(t["titulo"]), 120)
        tmp["owner"] = t["owner"]
        tmp["name_id"] = t["name_id"]
        
        # somente o dono do tópico ou o dono/admins da comunidade podem apagar um tópico
        tmp["apagar"] = isAllowedToDeleteObject(user, t["owner"], t["registry_id"]+"/"+t["_id"])
        
        # somente o dono do objeto pode alterar
        tmp["alterar"] = (user == t["owner"])

        # map/reduce para contar o número de replies do tópico
        tmp["num_replies"] = model.Topic.countObjectsByGroup(t["_id"])

        # datas formatadas
        tmp["data_cri"] = t["data_cri"]
        tmp["data_cri_fmt"] = short_datetime(t["data_cri"])
        
        tmp["ultimo_reply"] = t["ultimo_reply"]
        tmp["ultimo_reply_fmt"] = short_datetime(tmp["ultimo_reply"]) if tmp["ultimo_reply"] else "-"
        
        prepared_topics.append(tmp)
      
    return prepared_topics
Example #5
0
    def get (self, registry_id):    
        # Apagar resposta equivale a limpar sem remover
        user = self.get_current_user()        
        id = self.get_argument("id","")
        
        _reply = model.Reply().retrieve(id)
        
        if not _reply or registry_id != _reply.registry_id:
            # chamada inválida (id não existe ou reply não corresponde a um forum do registry_id)
            raise HTTPError(404)
            return


        
        if isAllowedToDeleteObject(user, _reply.owner, registry_id+"/"+id):      
            _reply.titulo = "***** Mensagem Removida *****"
            _reply.conteudo = ""
            _reply.data_alt = str(datetime.now())
            _reply.alterado_por = user            
            _reply.save()
                        
            log.model.log(user, u'removeu uma resposta de um tópico do forum', objeto=_reply.registry_id, tipo="forum")
            
            # busca o tópico para recuperar o name_id e poder redirecionar para a página do tópico
            _topic = model.Topic().retrieve(_reply.group_id)
            if _topic:
                self.redirect("/forum/%s/%s" % (_reply.registry_id, _topic.name_id))
            else:
                self.redirect("/forum/%s" % _reply.registry_id)
                
        else:
            raise HTTPError(403)
Example #6
0
def prepareReplies(user, replies):
    prepared_list = []
    i = 0
    for obj in replies:
        tmp = dict()
        tmp.update(obj)
        
        # somente o dono da resposta ou o dono/admins da comunidade podem apagar
        tmp["apagar"] = isAllowedToDeleteObject(user, obj["owner"], obj["registry_id"]+"/"+obj["_id"])
        
        # somente o dono do objeto pode alterar
        tmp["alterar"] = (user == obj["owner"])

        # datas formatadas
        tmp["data_cri_fmt"] = short_datetime(obj["data_cri"])
        tmp["data_alt_fmt"] = short_datetime(obj["data_alt"])
        
        if i==0:
            prepared_list.append(tmp)       # retorna primeiro o tópico
        else:
            prepared_list.insert(1, tmp)     # e depois a lista de replies em ordem cronológica inversa
            
        i = i + 1
      
    return prepared_list
Example #7
0
    def get(self, registry_id, name_id):
        user = self.get_current_user()
        
        _va = model.Videoaula.retrieve_by_name_id(registry_id, name_id)
        if _va:
            va_owner = _va.owner
            if not isAllowedToDeleteObject(user, va_owner, registry_id+"/"+name_id):
                raise HTTPError(403)
                return

            va_name = str_limit(remove_html_tags(_va.titulo), 200) 
            _va.delete()
            
            # notifica o dono da videoaula excluída
            email_msg = "Videoaula removida: "+va_name+"\n"+\
                        Notify.assinatura(user, registry_id, str(datetime.now()))+"\n\n"
            Notify.email_notify(va_owner, user, u"removeu uma videoaula criada por você", \
                           message=email_msg, \
                           link="videoaula/"+registry_id)
                            
            log.model.log(user, u'removeu uma videoaula de', objeto=registry_id, tipo="videoaula")
            
            self.redirect("/videoaula/%s" % registry_id)
       
        else:
            raise HTTPError(404)
Example #8
0
    def get(self, registry_id):
        user = self.get_current_user()
        
        bookmark_id = self.get_argument("id","")
        self._bookmark = model.Bookmarks().retrieve(bookmark_id)
        
        if self._bookmark != None:
            bookmark_owner = self._bookmark.owner
            if not isAllowedToDeleteObject(user, bookmark_owner, registry_id+"/"+bookmark_id):
                raise HTTPError(403)
                return

            url = self._bookmark.url
            self._bookmark.deleteBookmark()
            
            # notifica o dono do arquivo excluído
            email_msg = "Favorito removido: "+url+"\n"+\
                        Notify.assinatura(user, registry_id, str(datetime.now()))+"\n\n"
            Notify.email_notify(bookmark_owner, user, u"removeu um favorito criado por você", \
                           message=email_msg, \
                           link="bookmarks/"+registry_id)
                            
            log.model.log(user, u'removeu um link de favoritos de', objeto=registry_id, tipo="bookmarks")
            
            self.redirect("/bookmarks/%s" % registry_id)
            return
        else:
            raise HTTPError(404)
Example #9
0
    def get(self, registry_id):
        user = self.get_current_user()
        
        glossary_item_id = self.get_argument("item_id","")
        glossary_id = registry_id+"/"+glossary_item_id
        self._glossary = model.Glossary().retrieve(glossary_id)
        
        if self._glossary != None:
            glossary_owner = self._glossary.owner
            if not isAllowedToDeleteObject(user, glossary_owner, glossary_id):
                self.render("home.html", MSG=u"Você não tem permissão para remover este termo deste glossário.", \
                            NOMEPAG=NOME_PAG_CLOSSARIO, REGISTRY_ID=registry_id)
                return

            term = self._glossary.term
            self._glossary.deleteGlossaryItem()
            
            # notifica o dono do arquivo excluído
            email_msg = u"Item de glossário removido: "+term+"\n"+\
                        Notify.assinatura(user, registry_id, str(datetime.now()))+"\n\n"
            Notify.email_notify(glossary_owner, user, u"removeu um termo de glossário criado por você", \
                           message=email_msg, \
                           link="glossary/"+registry_id)
                            
            log.model.log(user, u'removeu um termo do glossário de', objeto=registry_id, tipo="glossary")
            
            self.redirect("/glossary/%s" % registry_id)

        else:
            raise HTTPError(404)
Example #10
0
def prepareActivities(user, activities):
    for a in activities:
        a["value"]["titulo"] = str_limit(remove_html_tags(a["value"]["titulo"]), 120)
        
        # somente o dono do tópico ou o dono/admins da comunidade podem apagar um tópico
        a["value"]["apagar"] = isAllowedToDeleteObject(user, a["value"]["owner"], a["value"]["registry_id"]+"/"+a["value"]["_id"])
        
        # somente o dono do objeto pode alterar
        a["value"]["alterar"] = isAllowedToWriteObject(user, "activity", a["value"]["registry_id"])

    return activities
Example #11
0
    def get(self, registry_id, pagina):
        user = self.get_current_user()
        versao = self.get_argument("versao","-1")

        doc_id = '/'.join([registry_id, pagina])
        self._wiki = model.Wiki().retrieve(doc_id, include_removed=True)
        if self._wiki and self._wiki.is_folder!="S": 
            wiki_data = prepareWikiPage(user, self._wiki.getWikiPage(user, versao=int(versao)))

            links = []
            if user:
                links.append(("Ver perfil de "+registry_id, "/static/imagens/icones/profile32.png", "/profile/"+registry_id))
                
                if isFriend(user, registry_id):
                    #links.append(("Enviar recado", "/static/imagens/icones/scrap32.png", "/scrap/"+registry_id))
                    if isOnline(registry_id):
                        links.append((u"Iniciar Chat com "+registry_id, "/static/imagens/icones/talk32.png", "/chat/"+registry_id))
                    else:
                        links.append((registry_id+u" não está online. Deixe uma mensagem.", "/static/imagens/icones/nottalk32.png", "/chat/"+registry_id))
                elif isAUser(registry_id) and user != registry_id:
                    self._reg = core.model.Member().retrieve(registry_id)

                    if user in self._reg.amigos_pendentes:
                        links.append((u"Já convidado. Aguardando resposta.", "/static/imagens/icones/invited_friend32.png", ""))
                    elif user in self._reg.amigos_convidados:
                        links.append(("Aceite convite de "+registry_id, "/static/imagens/icones/add_friend32.png", "/invites"))
                    else:
                        links.append(("Adicionar amigo", "/static/imagens/icones/add_friend32.png", "/newfriend?friend="+registry_id))
                                    
                self._reg_user = core.model.Registry().retrieve(user)
                if self._reg_user and "bookmarks"  in self._reg_user.getServices:                              
                    links.append(bookmarks.model.Bookmarks.createBookmarkLink(user, "http://"+PLATAFORMA_URL+self.request.path))
                if isUserOrOwner(user, registry_id):
                    links.append((u"Ver histórico de versões", "/static/imagens/icones/versions32.png", "/wiki/history/"+doc_id))
                if isAllowedToWriteObject(user, "wiki", registry_id, pagina):
                    links.append((u"Alterar esta página", "/static/imagens/icones/edit32.png", "/wiki/edit/"+doc_id))
                if isAllowedToDeleteObject(user, wiki_data["owner"],doc_id, wiki="S"):
                    links.append((u"Alterar permissões desta página", "/static/imagens/icones/permissions32.png", "/permission/wiki/"+doc_id))
                    links.append((u"Apagar esta página", "/static/imagens/icones/delete32.png", "/wiki/delete/"+doc_id,\
                                  "return confirm('Deseja realmente apagar esta página?');"))

            indice_links = []
            if wiki_data["alterar"]:
                indice_links.append((u"Editar índice", "/static/imagens/icones/edit16.png", "/wiki/edit/"+registry_id+"/indice"))
            
            self.write (dict(status=0, result=dict(path=self._wiki.getPagePath(), pagina=pagina,  
                                               wikidata=wiki_data )))
            
        else:
            self.write (dict(status=1, msg=u"Página não encontrada."))
Example #12
0
def prepareWikiPage(user, pagina):
    # acrescenta permissões para o usuário user e datas formatadas
    pagina["apagar"]       = isAllowedToDeleteObject(user, pagina["owner"], pagina["pag"], wiki="S")
    pagina["alterar"]      = isAllowedToWriteObject(user, "wiki", pagina["registry_id"], nomeobj=pagina["nomepag_id"])
    pagina["ler"]          = isAllowedToReadObject(user, "wiki", pagina["registry_id"], nomeobj=pagina["nomepag_id"])
    pagina["data_cri_fmt"] = short_datetime(pagina["data_cri"])
    pagina["data_alt_fmt"] = short_datetime(pagina["data_alt"])
    pagina["comentar"]     = isAllowedToComment(user, pagina["pag"], pagina["owner"])
    
    for comentario in pagina["comentarios"]:
        comentario["comment"] = comentario["comment"].replace("\r\n", "<br/>")
        comentario["apagar"]   = isAllowedToDeleteComment(user, pagina["registry_id"], comentario["owner"])
        comentario["data_fmt"] = short_datetime(comentario["data_cri"])
    return pagina
Example #13
0
def prepareBlogPosts(user, posts, include_removed=False):
    for post in posts:
        # permissões para remover e alterar um post
        post["alterar"] = isAllowedToWriteObject(user, "blog", post["registry_id"])
        post["apagar"] = post["alterar"] and isAllowedToDeleteObject(user, post["owner"], post["_id"])
        
        # datas formatadas
        post["data_fmt"] = short_datetime(post["data_cri"])
        if "data_alt" in post and post["data_alt"]:
            post["data_alt"] = short_datetime(post["data_alt"])
        
        post["num_comments"] =  model.Blog().retrieve(post["_id"], include_removed).getNumComments()

    return sorted(posts, key=itemgetter("data_cri"), reverse=True)
Example #14
0
def prepareVideoaulas(user, videoaulas):
    for va in videoaulas:
        va["titulo"] = str_limit(remove_html_tags(va["titulo"]), 200)
        
        # permissões para remover e alterar uma videoaula
        va["alterar"] = isAllowedToWriteObject(user, "videoaula", va["registry_id"], va["name_id"])
        va["apagar"] = isAllowedToDeleteObject(user, va["owner"], va["registry_id"]+"/"+va["name_id"])
        
        # datas formatadas
        va["data_fmt"] = short_datetime(va["data_cri"])
        if "data_alt" in va and va["data_alt"]:
            va["data_alt"] = short_datetime(va["data_alt"])
        
    #return sorted(videoaulas, key=itemgetter("data_cri"), reverse=True)
    return videoaulas
Example #15
0
    def get (self, registry_id, name_id):
        user = self.get_current_user()
           
        # remove somente o tópico e todas as suas tags.
        # todas as respostas ficam no activdb e poderão ser removidas posteriormente pelo dbclean.     
        _topic = model.Topic().retrieve_by_name_id(registry_id, name_id)
        
        if isAllowedToDeleteObject(user, _topic.owner, registry_id+"/"+name_id):
            _topic.deleteTopic()
                
            log.model.log(user, u'removeu um tópico do forum', objeto=registry_id, tipo="forum")
            self.redirect("/forum/" + registry_id)

        else:
            raise HTTPError(403)
Example #16
0
    def listBookmarks(self, user, registry_id, page, page_size, tag=None):
        bookmarks = []
        if tag:
            view_name = 'bookmarks/by_registry_id_and_tag'
            start_key = [registry_id, tag]
            end_key = [registry_id, tag, {}, {}]
        else:
            view_name = 'bookmarks/by_registry_id'
            start_key = [registry_id]
            end_key = [registry_id, {}, {}]

        # Obtem uma página de resultados no BD
        # descending=true para listar os mais recentes primeiro
        # como a árvore é percorrida em sentido inverso, endkey é o documento inicial e startkey é o final.     
        for row in database.BOOKMARKS.view(view_name, startkey=end_key,endkey=start_key, descending="true", skip=(page-1)*page_size , limit=page_size):
            if tag:
                (registry_id, tag_found, data_alt, bookmark_id) = row.key
            else:
                (registry_id, data_alt, bookmark_id) = row.key

            bookmark_data = dict()
            bookmark_data["registry_id"] = registry_id
            bookmark_data["owner"] = row.value["owner"]
            bookmark_data["description"] = row.value["description"]
            bookmark_data["title"] = row.value["title"]
            bookmark_data["url"] = row.value["url"]
            bookmark_data["tags"] = row.value["tags"]
            bookmark_data["id"] = bookmark_id
            
            # _file = Files().retrieve(file_id)
            bookmark_data["alterar"] = isAllowedToWriteObject(user, "bookmarks", registry_id)
            bookmark_data["apagar"] = bookmark_data["alterar"] and isAllowedToDeleteObject(user, row.value["owner"], registry_id+"/"+bookmark_id)
            
            
            bookmark_data["data_nofmt"] = row.value["data_alt"]
            bookmark_data["data_alt"] = short_datetime(row.value["data_alt"])
            bookmark_data["alterado_por"] = row.value["alterado_por"]
            bookmark_data["num_comments"] = _strListSize (len(row.value["comentarios"]), u"comentário")
            #bookmark_data["url_count"] = _strListSize (url_count, u"referência", genero='F')
            url_count = _urlCount(bookmark_data["url"])
            bookmark_data["url_count"] = ""
            if url_count > 1: bookmark_data["url_count"] = u"%d usuários marcaram esta página" % url_count
            
            bookmarks.append(bookmark_data)
        return bookmarks
Example #17
0
 def listGlossary(self, user, registry_id, page, page_size, tag=None):
     glossary = []
     if tag:
         view_name = 'glossary/by_registry_id_and_tag'
         start_key = [registry_id, tag]
         end_key = [registry_id, tag, {}]
     else:
         view_name = 'glossary/by_registry_id'
         start_key = [registry_id]
         end_key = [registry_id, {}]
         
     # Obtem uma página de resultados no BD
     for row in database.GLOSSARY.view(view_name, startkey=start_key, endkey=end_key, skip=(page-1)*page_size , limit=page_size):
         if tag:
             (registry_id, tag_found, glossary_item_id) = row.key
         else:
             (registry_id, glossary_item_id) = row.key
             
         glossary_data = dict()
         glossary_data["id"] = glossary_id = registry_id+"/"+glossary_item_id
         glossary_data["registry_id"] = registry_id
         glossary_data["owner"] = row.value["owner"]
         glossary_data["item_id"] = glossary_item_id
         glossary_term = glossary_data["term"] = row.value["term"]
         glossary_data["key_to_compare"] = remove_diacritics(" ".join(glossary_term.lower().split()))
         glossary_data["definition"] = row.value["definition"]
         glossary_data["tags"] = row.value["tags"]
         
         # _file = Files().retrieve(file_id)
         glossary_data["alterar"] = isAllowedToWriteObject(user, "glossary", registry_id)
         glossary_data["apagar"] = glossary_data["alterar"] and isAllowedToDeleteObject(user, row.value["owner"], glossary_id)
         
         glossary_data["data_nofmt"] = row.value["data_alt"]
         glossary_data["data_alt"] = short_datetime(row.value["data_alt"])
         glossary_data["alterado_por"] = row.value["alterado_por"]
         #glossary_data["term_count"] = _strListSize (term_count, u"referência", genero='F')
         term_count = _itemIdCount(glossary_data["item_id"])
         glossary_data["term_count"] = ""
         if term_count > 1: glossary_data["term_count"] = u"%d usuários definiram este termo" % term_count
         
         glossary.append(glossary_data)
         
     glossary = sorted(glossary, key=itemgetter("key_to_compare"), reverse = False)
     return glossary
Example #18
0
    def get (self, registry_id, name_id):
        user = self.get_current_user()
        _va = model.Videoaula().retrieve_by_name_id(registry_id, name_id)
        if _va:
            ext = _va.arqvideo.split(".")[-1]

            links = []
            if isUserOrOwner(user, registry_id) or user == objectOwnerFromService("videoaula", registry_id, name_id):
                links.append((u"Alterar permissões desta videoaula", "/static/imagens/icones/permissions32.png", "/permission/videoaula/"+registry_id+"/"+name_id, "", "", True))     
            if isAllowedToDeleteObject(user, _va.owner, registry_id+"/"+name_id):
                links.append(("Remover esta videoaula", "/static/imagens/icones/delete32.png", "/videoaula/delete/"+registry_id+"/"+name_id,
                              "return confirm('Deseja realmente remover esta videoaula?');"))            
            self.render("modules/videoaula/videoaula-edit.html", NOMEPAG="videoaulas", VIDEODATA=_va, \
                        FOLDERS = files.model.Files.listFolders(user, registry_id, "files/all_data"), \
                        SORTEDKEYS=sortedKeys, MIME_TYPE=mime_types[ext],            
                        LINKS=links, \
                        REGISTRY_ID=registry_id, MSG="")
        else:
            raise HTTPError(404)
Example #19
0
def prepareFolderPages(user, paginas, registry_type, privacidade):
    # chamadas:
    # only_removed = False
    # /wiki/%s -> lista pastas e páginas não removidas do registry_id
    # only_removed = True
    # /wiki/deleted/%s -> lista todas as páginas removidas
    
    sel_multipla = False
    for pagina in paginas:
        pagina["data_nofmt"] = pagina["data_alt"]
        pagina["data_alt"]   = short_datetime(pagina["data_nofmt"], include_year=True)

        pagina["apagar"]     = isAllowedToDeleteObject(user, pagina["owner"], pagina["doc_id"], wiki="S")
        pagina["alterar"]    = isAllowedToWriteObject(user, "wiki", pagina["registry_id"], nomeobj=pagina["nomepag_id"])
        pagina["ler"]        = isAllowedToReadObject(user, "wiki", pagina["registry_id"], nomeobj=pagina["nomepag_id"])

        parent_id = pagina["registry_id"]+"/"+pagina["parent_folder"]
        parent = model.Wiki().retrieve(parent_id)
        # Vc só pode mover um item para uma pasta se:
        #    vc pode apagar o item e o dono da pasta permite que vc crie items nela.
        pagina["mover"] = pagina["apagar"]
        if parent:
            pagina["mover"] = pagina["mover"] and isAllowedToWriteObject(user, "wiki", pagina["registry_id"], pagina["parent_folder"])
          
        # se houver pelo menos um checkbox, ativa seleção múltipla
        if  pagina["alterar"] and pagina["mover"] and pagina["nomepag_id"] not in ["home", "indice"]:
            sel_multipla = True

        # obtem permissões da página
        _perm = permission.model.Permission().retrieve("wiki/"+pagina["doc_id"])
        if _perm:
            pagina["escrita"] = _perm.escrita
            pagina["leitura"] = _perm.leitura
        else:
            pagina["escrita"] = permission.model.default_permission("W", "wiki", registry_type, privacidade)
            pagina["leitura"] = permission.model.default_permission("R", "wiki", registry_type, privacidade)   
   
                                                      
    #paginas = sorted(paginas, key=itemgetter("data_nofmt"), reverse = True)
    return (sel_multipla, paginas)
Example #20
0
   def get(self, registry_id, id):
       user = self.get_current_user() 
       _object = model.Activity().retrieve(id)
       
       if _object :
           _object_owner = _object.owner
 
           if not isAllowedToDeleteObject(user, _object_owner, registry_id+"/"+id):
               raise HTTPError(403)
              
           elif _object.type == "activity" :
               _object.delete()
               log.model.log(user, u'removeu uma atividade de', objeto=registry_id, tipo="activity", link="/activity/%s"%registry_id)
               self.redirect("/activity/%s" % registry_id)
               return
           elif _object.type == "group" and not model.Group().countObjectsByGroup(id):
               _object.delete()
               log.model.log(user, u'removeu um grupo de atividades de', objeto=registry_id, tipo="activity", link="/activity/%s"%registry_id)
               self.redirect("/activity/%s" % registry_id)
           
       else:
           raise HTTPError(404)
Example #21
0
    def get(self, registry_id, pagina):
        user = self.get_current_user()
        if pagina in ["home", "indice"]:
           self.write (dict(status=1, msg=u"Esta página não pode ser removida."))
        else:
            doc_id = '/'.join([registry_id, pagina])
            self._wiki = model.Wiki().retrieve(doc_id)
            if self._wiki:
                # salva variáveis para poder ter acesso a elas depois de remover do banco
                nomepag = self._wiki.nomepag
                owner = self._wiki.owner
                is_folder = self._wiki.is_folder
                
                legenda = "pasta" if self._wiki.is_folder=="S" else u"página"
                if isAllowedToDeleteObject(user, self._wiki.owner, doc_id, wiki="S"):
                    if self._wiki.is_folder=="S" and self._wiki.folder_items!=[]:
                        self.write (dict(status=1, msg=u"Você não pode apagar uma pasta que não esteja vazia."))
                        return
                    parent_folder = self._wiki.parent_folder 
                    self._wiki.deleteWiki(user)
                    
                    # notifica o dono da página excluída
                    email_msg = legenda + u" removida: "+doc_id+"\n"+\
                                Notify.assinatura(user, registry_id, str(datetime.now()))+"\n\n"
                    Notify.email_notify(owner, user, u"removeu uma %s criada por você"%legenda, \
                                   message=email_msg, \
                                   link="wiki/"+registry_id)

                    if is_folder=="S":
                        log.model.log(user, u'removeu a pasta', objeto=registry_id+"/"+nomepag, tipo="none")
                    else:
                        log.model.log(user, u'removeu a página', objeto=doc_id, tipo="none")
                        
                    self.redirect("/wiki/%s?folder=%s" % (registry_id, parent_folder) )
                else:
                   self.write (dict(status=1, msg=u"Você não tem permissão para remover esta %s."%legenda))
            else:
                self.write (dict(status=1, msg=u"Pasta/página não encontrada."))
Example #22
0
    def post(self, registry_id):
        user = self.get_current_user()
        items = self.request.arguments["items"] # items é uma lista
        folder = self.get_argument("folder", "")
        
        for item in items:
        
            if item in ["home", "indice"]:
                continue
            doc_id = '/'.join([registry_id, item])
            self._wiki = model.Wiki().retrieve(doc_id)
            if self._wiki:
                # salva variáveis para poder ter acesso a elas depois de remover do banco
                nomepag = self._wiki.nomepag
                owner = self._wiki.owner
                is_folder = self._wiki.is_folder
                
                legenda = "pasta" if self._wiki.is_folder=="S" else u"página"
                if isAllowedToDeleteObject(user, self._wiki.owner, doc_id, wiki="S"):
                    if self._wiki.is_folder=="S" and self._wiki.folder_items!=[]:
                        # Você não pode apagar uma pasta que não esteja vazia.
                        continue
                    parent_folder = self._wiki.parent_folder 
                    self._wiki.deleteWiki(user)
                    
                    # notifica o dono da página excluída
                    email_msg = legenda + u" removida: "+doc_id+"\n"+\
                                Notify.assinatura(user, registry_id, str(datetime.now()))+"\n\n"
                    Notify.email_notify(owner, user, u"removeu uma %s criada por você"%legenda, \
                                   message=email_msg, \
                                   link="wiki/"+registry_id)

                    #log.model.log(user, u'removeu a '+legenda, objeto=doc_id, tipo="none")
                    if is_folder=="S":
                        log.model.log(user, u'removeu a pasta', objeto=registry_id+"/"+nomepag, tipo="none")
                    else:
                        log.model.log(user, u'removeu a página', objeto=doc_id, tipo="none")
        self.redirect("/wiki/%s?folder=%s" % (registry_id, folder) )
Example #23
0
    def get(self, registry_id, filename):
        user = self.get_current_user()
        
        file_id = '/'.join([registry_id,unquote(filename)])
        self._file = model.Studio().retrieve(file_id)
        
        if self._file != None:
            if registry_id in core.database.REGISTRY:
                file_owner = self._file.owner
                if not isAllowedToDeleteObject(user, file_owner, file_id):
                    self.render("home.html", MSG=u"Você não tem permissão para remover este arquivo.", \
                                NOMEPAG=u'Estúdio', REGISTRY_ID=registry_id)
                    return

                (error, detail) = self._file.deleteFile()
                if error:
                    self.render("home.html", MSG=u"Erro: %s" % detail, \
                                NOMEPAG=u'Estúdio', REGISTRY_ID=registry_id)
                    return

                # notifica o dono do arquivo excluído
                email_msg = "Arquivo removido: "+file_id+"\n"+\
                            Notify.assinatura(user, registry_id, str(datetime.now()))+"\n\n"
                Notify.email_notify(file_owner, user, u"removeu uma imagem na studio de games", \
                               message=email_msg, \
                               link="studio/"+registry_id)
                                
                log.model.log(user, u'removeu a imagem no studio de games', objeto=file_id, tipo="none")
                
                self.redirect("/studio/%s" % registry_id)
                return
            else:
               msg = u"Usuário ou comunidade inexistentes."
               self.render("home.html", MSG=msg, \
                           NOMEPAG=u'Estúdio', REGISTRY_ID=user)         
        else:
            self.render("home.html", MSG=u"Arquivo não encontrado.", \
                        NOMEPAG=u'Estúdio', REGISTRY_ID=registry_id)
Example #24
0
    def searchItemByRegistryIdAndItemId(self, user, registry_id, item_id, pode_modificar=False):
        glossary = []

        view_name = 'glossary/by_registry_id_and_item_id'
        start_key = [registry_id, item_id]
        end_key   = [registry_id, item_id, {}]
        
        for row in database.GLOSSARY.view(view_name,startkey=start_key,endkey=end_key):
            (registry_id, glossary_item_id) = row.key                
            glossary_data = dict()
            glossary_data["id"] = glossary_id = registry_id+"/"+glossary_item_id
            glossary_data["registry_id"] = registry_id
            glossary_data["owner"] = row.value["owner"]
            glossary_data["item_id"] = glossary_item_id
            glossary_data["term"] = row.value["term"]
            glossary_data["definition"] = row.value["definition"]
            glossary_data["tags"] = row.value["tags"]
            
            # _file = Files().retrieve(file_id)
            if pode_modificar:
                glossary_data["alterar"] = isAllowedToWriteObject(user, "glossary", registry_id)
                glossary_data["apagar"] = glossary_data["alterar"] and isAllowedToDeleteObject(user, row.value["owner"], glossary_id)
                
            else:
                glossary_data["apagar"] = glossary_data["alterar"] = False
                
            glossary_data["data_nofmt"] = row.value["data_alt"]
            glossary_data["data_alt"] = short_datetime(row.value["data_alt"])
            glossary_data["alterado_por"] = row.value["alterado_por"]
            #glossary_data["term_count"] = _strListSize (term_count, u"referência", genero='F')
            term_count = _itemIdCount(glossary_data["item_id"])
            glossary_data["term_count"] = ""
            if term_count > 1: glossary_data["term_count"] = u"%d usuários definiram este termo" % term_count
            
            glossary.append(glossary_data)
            
        return glossary
Example #25
0
    def get (self, registry_id, post_id):
        user = self.get_current_user()
        doc_id = "/".join([registry_id, post_id])
        versao = self.get_argument("versao","-1")
        
        self._blog = model.Blog().retrieve(doc_id, include_removed=True)
                
        if self._blog:
            post_data = prepareBlogPost(user, self._blog.getBlogPost(user, versao=int(versao)))
            
            links = []
            links.append(("Blog de "+registry_id, "/static/imagens/icones/back32.png", "/blog/"+registry_id))
            
            if user:
                reg = core.model.Registry().retrieve(user)
                if reg and "bookmarks"  in reg.getServices:                              
                    links.append(bookmarks.model.Bookmarks.createBookmarkLink(user, "http://"+PLATAFORMA_URL+self.request.path))            
                if isAllowedToWriteObject(user, "blog", registry_id):
                    links.append(("Alterar este post", "/static/imagens/icones/edit32.png", "/blog/edit/"+doc_id))
                if isUserOrOwner(user, registry_id):
                    links.append(("Ver histórico de versões", "/static/imagens/icones/versions32.png", "/blog/history/"+doc_id))
                    
                if isAllowedToDeleteObject(user, post_data["owner"], doc_id) and versao == "-1":
                    links.append(("Remover este post", "/static/imagens/icones/delete32.png", "/blog/delete/"+doc_id,
                                  "return confirm('Deseja realmente remover este Post?');"))

            log.model.log(user, u'acessou o post', objeto=post_id, tipo="blog", news=False)

            self.render("modules/blog/post.html", NOMEPAG="blog", POST_DATE=full_week_date(post_data["data_cri_nofmt"]), \
                        REGISTRY_ID=registry_id, \
                        ARCHIVE=model.Blog.get_blog_archive(registry_id), \
                        SORTEDKEYS=sortedKeys, MESES=_meses, \
                        POST=post_data, \
                        LINKS=links)
        else:
            raise HTTPError(404)
Example #26
0
 def listStudioFiles(self, user, registry_id, type):
     def _strListSize(values_list, str):
         plural = lambda x: 's' if x!=1 else ''
         if values_list:
             return u"%d %s%s" % (len(values_list), str, plural(len(values_list)))
         else:
             return u"nenhum %s" % str
             
     files = []
     i = 0
     for row in database.STUDIO.view('studio/all_data',startkey=[registry_id],endkey=[registry_id, {}]):
         if row.value["type"] == type:
             (registry_id, file_id) = row.key
             file_data = dict()
             file_data["registry_id"] = registry_id
             file_data["owner"] = row.value["owner"]
             file_data["acesso_publico"] = row.value["acesso_publico"]
             file_data["description"] = row.value["description"]
             file_data["url"] = row.value["url"]
             #file_data["tags"] = row.value["tags"]
             file_data["file_id"] = file_id
             
             # _file = Studio().retrieve(file_id)
             file_data["apagar"] = isAllowedToDeleteObject(user, row.value["owner"], file_id)
             file_data["alterar"] = isAllowedToEditObject(user, row.value["owner"], file_id)
             file_data["data_nofmt"] = row.value["data_alt"]
             file_data["data_alt"] = short_datetime(row.value["data_alt"])
             file_data["alterado_por"] = row.value["alterado_por"]
             file_data["num_comments"] = _strListSize (row.value["comentarios"], u"comentário")
             file_data["i"] = i
             i = i + 1
             
             files.append(file_data)
         
     files = sorted(files, key=itemgetter("data_nofmt"), reverse = True)
     return files
Example #27
0
    def get(self, registry_id, id):
        user = self.get_current_user()
        
        _quiz = model.Quiz().retrieve(id)
                
        if _quiz != None:
            quiz_owner = _quiz.owner
            
            if not isAllowedToDeleteObject(user, quiz_owner, registry_id+"/"+id):
                raise HTTPError(403) 

            if _quiz.deleteQuiz():
                                
                log.model.log(user, u'removeu um quiz de', objeto=registry_id, tipo="quiz")
                
                self.redirect("/quiz/%s" % registry_id)
                return
            
            else:
                self.render("home.html", MSG=u"Este quiz não pode ser apagado pois ele já foi respondido.", \
                            NOMEPAG=u'Quiz', REGISTRY_ID=registry_id)
     
        else:
            self.redirect("/quiz/%s" % registry_id)
Example #28
0
 def get(self, registry_id, post_id):
     user = self.get_current_user()
     doc_id = '/'.join([registry_id,post_id])
     self._blog = model.Blog().retrieve(doc_id)
     if self._blog:
         if isAllowedToDeleteObject(user, self._blog.owner, doc_id):
             try:
                 tags = self._blog.tags
                 self._blog.deletePost(user)
                 #for tag in tags:
                 #    removeTag(remove_diacritics(tag.lower()), "blog", doc_id)
                                             
             except Exception as detail:
                 self.render("home.html", MSG=u"Erro: %s" % detail, REGISTRY_ID=registry_id, NOMEPAG="blog")
                 return
                                                 
             log.model.log(user, u'removeu o post', objeto=doc_id, tipo="none")     
             self.redirect("/blog/%s" %registry_id)
             
         else:
             raise HTTPError(403)
             
     else:
         raise HTTPError(404)