Ejemplo n.º 1
0
def prepareQuiz(user, quiz_list):
    for quiz in quiz_list:
        #quiz["titulo"] = str_limit(remove_html_tags(quiz["titulo"]), 200)
        #quiz["descricao"] = str_limit(remove_html_tags(quiz["descricao"]), 200)
        quiz["descricao"] = quiz["descricao"].replace("\n", "<br/>")

        # permissões para remover e alterar um quiz
        quiz["apagar"] = isAllowedToWriteObject(user, "quiz", quiz["registry_id"], quiz["_id"]) and not model.Quiz.quizIsAnswered(quiz["_id"])
        quiz["alterar"] = isAllowedToWriteObject(user, "quiz", quiz["registry_id"], quiz["_id"])
        
        # tipo do quiz em extenso
        quiz["tipo"] = TIPO_QUIZ[quiz["subtype"]]

        # datas formatadas
        quiz["data_fmt"] = short_datetime(quiz["data_cri"])
        if "data_alt" in quiz and quiz["data_alt"]:
            quiz["data_alt"] = short_datetime(quiz["data_alt"])

        # condição para permitir que o quiz seja respondido
        dentro_do_periodo = verificaIntervaloDMY(quiz["data_inicio"], quiz["data_fim"]) == 0    
        
        ja_respondeu = model.Quiz.getQuizAnswers(quiz["_id"], user)
        
        quiz["nao_pode_responder"] =  (ja_respondeu and ja_respondeu["finalizado"]=="S") or \
                                      not dentro_do_periodo or \
                                      not isAllowedToReadObject(user, "quiz", quiz["registry_id"])
                                            
    return sorted(quiz_list, key=itemgetter("data_cri"), reverse=True)
Ejemplo n.º 2
0
def prepareEvaluations(user, avals):
    aval_data = []
    for aval in avals:
        dentroDoPeriodo = verificaIntervaloDMY(aval["data_inicio"], aval["data_encerramento"]) == 0
        (registry_id, obj_name) = aval["_id"].split("/")
        aval_data.append((aval["_id"], \
                                  aval["descricao"], \
                                  aval["tipo"], \
                                  aval["data_inicio"], \
                                  aval["data_encerramento"], \
                                  aval["jaAvaliou"] or not dentroDoPeriodo or not isAllowedToReadObject(user, "evaluation", registry_id, obj_name)\
                                  ))
    return aval_data
Ejemplo n.º 3
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
Ejemplo n.º 4
0
    def get (self, registry_id):
        user = self.get_current_user()
        folder = self.get_argument("folder","")
        page = int(self.get_argument("page","1"))
        paginas = []
        (registry_type, privacidade) = getType(registry_id)
        # se não estou vendo a pasta raiz...
        if folder:
            folder_id = registry_id+"/"+folder

            self._wiki = model.Wiki().retrieve(folder_id)
            
            if self._wiki and self._wiki.is_folder=="S":
                path = self._wiki.getPagePath()
                pag_count = self._wiki.countFolderPages()
                
                # inclui referência .. para subir na árvore
                paginas.append(self._wiki)
                nomefolder = paginas[0]["nomepag"]
                paginas[0]["nomepag"]      = ".."
                #paginas[0]["owner"]        = self._wiki.owner
                paginas[0]["owner"]        = ""
                paginas[0]["nomepag_id"]   = paginas[0]["parent_folder"]
                paginas[0]["apagar"]       = False
                paginas[0]["alterar"]      = False
                paginas[0]["data_alt"]     = ""
                paginas[0]["data_nofmt"]   = ""
                paginas[0]["alterado_por"] = ""
                paginas[0]["registry_id"]  = registry_id
                paginas[0]["mover"]        = False
                paginas[0]["escrita"] = permission.model.default_permission("W", "wiki", registry_type, privacidade)
                paginas[0]["leitura"] = permission.model.default_permission("R", "wiki", registry_type, privacidade)
            
                if not isAllowedToReadObject(user, "wiki", registry_id, folder):
                    self.write (dict(status=1, msg=u"Você não tem permissão para listar essa pasta."))
                    return
                
            else:
                self.write (dict(status=1, msg=u"Pasta não encontrada."))
                return
        else:
            path = "/"+registry_id+"/"
            pag_count = model.Wiki.countRootFolderPages(registry_id)

        (sel_multipla, pags) = prepareFolderPages(user, model.Wiki.listFolderPages(user, registry_id, folder, page, NUM_MAX_WIKIPAGES), registry_type, privacidade)
        paginas.extend(pags)
        

        self.write (dict(status=0, result=dict(paginas=paginas, path=path, pag_count=pag_count, sel_multipla=sel_multipla)))
Ejemplo n.º 5
0
 def get (self, registry_id):
     user = self.get_current_user()
     page = int(self.get_argument("page","1"))
     quiz_count = model.Quiz.countObjectsByRegistryId(registry_id)
     lista_quiz = prepareQuiz(user, model.Quiz.listObjects(registry_id, page, NUM_MAX_QUIZ))
     
     links = []
     if isAllowedToReadObject(user, "question", registry_id):
         links.append((u"Banco de questões", "/static/imagens/icones/question32.png", "/question/"+registry_id))
     if isAllowedToWriteObject(user, "quiz", registry_id):
         links.append((u"Novo teste de múltipla escolha", "/static/imagens/icones/add_test32.png", "/quiz/new/%s?subtype=Teste"%registry_id))
         links.append ((u"Nova pesquisa de opinião", "/static/imagens/icones/add_survey32.png", "/quiz/new/%s?subtype=Survey"%registry_id))
      
     log.model.log(user, u'acessou a lista de quizes de', objeto=registry_id, tipo="quiz", news=False)
              
     self.render("modules/quiz/quiz-list.html", NOMEPAG="Quiz", REGISTRY_ID=registry_id, \
                                           IS_ADMIN=isUserOrOwner(user, registry_id), \
                                           QUIZ=lista_quiz, QUIZ_COUNT=quiz_count, \
                                           PAGE=page, PAGESIZE=NUM_MAX_QUIZ, \
                                           LINKS=links)
Ejemplo n.º 6
0
    def get (self, registry_id):
        user = self.get_current_user()
        subtype = self.get_argument ("subtype", "")
        if subtype == "":
            raise HTTPError (400)
            return

        questions = self.prepareQuestionList(question.model.Question.listObjectsBySubtype(subtype, registry_id))
        
        msg = ""
        links = []
        if not questions:
            msg = u"Você não pode criar %s pois o banco de questões não possui nenhuma questão deste tipo" % TIPO_QUIZ[subtype]
            if isAllowedToReadObject(user, "question", registry_id):
                links.append((u"Banco de Questões", "/static/imagens/icones/question32.png", "/question/"+registry_id))
 
        self.render("modules/quiz/quiz-form.html",  NOMEPAG=u"Quiz", MSG=msg, \
                                        QUIZ=model.Quiz(), REGISTRY_ID=registry_id, \
                                        QUESTIONS=questions, \
                                        TITLE=u"Criar Quiz ("+TIPO_QUIZ[subtype]+")", \
                                        LINKS=links, SUBTYPE=subtype)     
Ejemplo n.º 7
0
 def listPortfolio(self, user, registry_id, page, page_size):
     # chamadas:
     # /wiki/portfolio/%s -> lista todas as páginas de todas as pastas
     paginas = []
     for row in database.WIKI.view('wiki/portfolio',startkey=[registry_id, {}],endkey=[registry_id], \
                                   descending="true", skip=(page-1)*page_size, limit=page_size):
           (registry_id, data_alt, doc_id) = row.key
           
           if isAllowedToReadObject(user, "wiki", registry_id, doc_id):
               # listagem das pastas e páginas não removidas 
               pagina_data = dict()
               pagina_data.update(row.value)
               pagina_data["registry_id"]  = registry_id
               pagina_data["doc_id"]       = doc_id
               
               pagina_data["data_alt"]     = short_datetime(row.value["data_alt"], include_year=True)
               pagina_data["data_nofmt"]   = row.value["data_alt"]
               
               paginas.append(pagina_data)
                       
     return paginas
Ejemplo n.º 8
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)