Exemple #1
0
 def editBookmark(self, user, newtitle, newdesc, newtags):
     # preserva tags anteriores
     old_tags = self.tags
 
     self.title = newtitle
     self.description = newdesc
     self.tags = newtags
     self.alterado_por = user
     self.data_alt = str(datetime.now())
     self.save()
 
     # compara as tags anteriores com as modificadas, atualizando a lista de tags no BD
     data_tag = str(datetime.now())
     if self.title:
         nome = self.title
     else:
         url = self.url
         url = remove_special_chars(remove_diacritics(url.replace(" ","_")))
         nome = url
     
     for tag in self.tags:
         if tag not in old_tags:
             addTag(tag, self.registry_id, user, "bookmarks", self.id, nome, data_tag)
     
     for tag in old_tags:
         if tag not in self.tags:
             removeTag(remove_diacritics(tag.lower()), "bookmarks", self.id)
Exemple #2
0
    def post(self, registry_id):
        user = self.get_current_user()
        type = self.get_argument("type","")

        _group = model.Group()
        msg = ""
        _group.titulo = self.get_argument("titulo","")
        if _group.titulo == "":
            msg += u"O nome do grupo não pode ser vazio.<br/>"
        else:
            _group.name_id = remove_special_chars(remove_diacritics(_group.titulo.replace(" ","_")))
            if _group.name_id == "":
                msg += u"Nome do grupo inválido<br/>"

        if msg:
            self.render("modules/activity/newgroup-form.html",  NOMEPAG=u"atividades", \
                        GRUPO=_group, \
                        REGISTRY_ID=registry_id, MSG=msg)
            return       
        
        doc_id = uuid4().hex
        _group.data_cri = str(datetime.now())
        _group.service="activity"
        _group.type="group"
        _group.registry_id = registry_id
        _group.owner = user
        
        _group.save(id=doc_id)
        
        log.model.log(user, u'criou um grupo de atividades em', objeto=registry_id, tipo="activity", link="/activity/%s"%registry_id)
        self.render("modules/activity/newgroup-form.html",  NOMEPAG=u"atividades", \
                    GRUPO=model.Group(), \
                    REGISTRY_ID=registry_id, MSG="O grupo foi criado com sucesso")  
Exemple #3
0
    def post(self):
        user = self.get_current_user()
        
        formdata = _EMPTYREQUESTINVITEFORM()
        erros = 0
        msg = ""
        for key in _REQUESTINVITEFORM:
            if self.get_argument(key, "") != "" :
                formdata[key] = self.get_argument(key)
            else:
                erros += 1

        if erros > 0:
            msg += u"Há %d campos obrigatórios não preenchidos!<br/>" % erros

        if formdata["titulo"]!="":
            formdata["nome"] = remove_special_chars(remove_diacritics(formdata["titulo"].replace(" ","_")))
            if formdata["nome"]=="":
                msg += u"Título do formulário inválido.<br/>"
            
        if msg:
            self.render("modules/invites/create-form-invite.html", REGISTRY_ID=user, \
                        FORMDATA=formdata, \
                        MSG=msg,\
                        NOMEPAG="convites")
        else:
            formdata["owner"] = user
            formdata["data_cri"] = str(datetime.now())
            formdata["data_alt"] = formdata["data_cri"]
            
            id = "%s/%s" % (user, formdata["nome"])
            model.REQUESTINVITEFORM[id] = formdata
            
            showInvitesPage(self, user, "")
Exemple #4
0
    def post(self, registry_id):
        user = self.get_current_user()
        self._blog = model.Blog()
        msg = ""
        
        self._blog.titulo = self.get_argument("titulo","")
        if self._blog.titulo == "":
            msg += u"O título do Post não pode ser vazio.<br/>"
        else:
            self._blog.post_id = remove_special_chars(remove_diacritics(self._blog.titulo.replace(" ","_")))
            if self._blog.post_id == "":
                msg += u"Título do Post inválido<br/>"
                
        self._blog.tags = splitTags(self.get_argument("tags",""))
        
        self._blog.conteudo = self.get_argument("conteudo","")
        if self._blog.conteudo == "":
            msg += u"O conteúdo do Post não pode ser vazio.<br/>"
        
        if msg:
            self.render("modules/blog/blog-form.html", NOMEPAG="blog", REGISTRY_ID=registry_id, BLOGDATA=self._blog, MSG=msg)
            return
                
        else:
            self._blog.data_cri = str(datetime.now())
            self._blog.data_alt = self._blog.data_cri

            # A chave _id do documento no couchdb é nome/pagina
            doc_id = '/'.join([registry_id,self._blog.post_id])

            self._blog.registry_id = registry_id
            self._blog.owner = user
            
            historico_inicial = dict()
            historico_inicial["data_alt"] = self._blog.data_alt
            historico_inicial["alterado_por"] = user
            historico_inicial["conteudo"] = self._blog.conteudo
            
            self._blog.historico.append(historico_inicial)
            
            try:
                self._blog.save(id=doc_id)
            except Exception as detail:
                self.render("modules/blog/blog-form.html", NOMEPAG="blog", REGISTRY_ID=registry_id, BLOGDATA=self._blog, \
                            MSG=u"Já existe um post com este título.")
                return
            
            data_tag = str(datetime.now())
            for tag in self._blog.tags:
                addTag(tag, registry_id, user, "blog", doc_id, self._blog.titulo, data_tag)

            log.model.log(user, u'escreveu no blog', objeto=doc_id, tipo="blog")
            self.redirect("/blog/%s" % doc_id)
Exemple #5
0
    def post(self, registry_id):
        user = self.get_current_user()
        msg = ""
        
        _topic = model.Topic()
        _topic.titulo = self.get_argument("titulo","")
        if _topic.titulo == "":
            msg += u"O título do tópico não pode ser vazio.<br/>"
        else:
            _topic.name_id = remove_special_chars(remove_diacritics(_topic.titulo.replace(" ","_")))
            if _topic.name_id == "":
                msg += u"Título do tópico inválido<br/>"
               
        if model.Topic.exists(registry_id, _topic.name_id):
            msg += u"Já existe um tópico com este nome"
                
        _topic.tags = splitTags(self.get_argument("tags",""))
        
        _topic.conteudo = self.get_argument("conteudo","")
        if _topic.conteudo == "":
            msg += u"O conteúdo do tópico não pode ser vazio.<br/>"
        
        if msg:
            self.render("modules/forum/forum-form.html", NOMEPAG="forum", REGISTRY_ID=registry_id, TOPICO=_topic, MSG=msg)
            return
                
        else:
            _topic.receber_email = self.get_argument("receber_email", "N")
            _topic.data_cri = str(datetime.now())
            _topic.data_alt = _topic.data_cri
            _topic.service = "forum"
            _topic.type = "topic"

            doc_id = uuid4().hex

            _topic.registry_id = registry_id
            _topic.owner = user
            _topic.alterado_por = user
             
            try:
                _topic.save(id=doc_id)
            except Exception as detail:
                self.render("modules/forum/forum-form.html", NOMEPAG="forum", REGISTRY_ID=registry_id, TOPICO=_topic, \
                            MSG=u"Já existe um tópico neste forum com este título.")
                return
            
            data_tag = str(datetime.now())
            for tag in _topic.tags:
                addTag(tag, registry_id, user, "forum", registry_id+"/"+_topic.name_id, _topic.titulo, data_tag)

            log.model.log(user, u'criou um tópico no forum', objeto=registry_id, tipo="forum")
            self.redirect("/forum/%s" % registry_id)
Exemple #6
0
 def saveBookmark(self, id=None):
     self.save(id=id)
 
     # atualiza tabela de tags
     # vai para o tags.model
     data_tag = str(datetime.now())
     for tag in self.tags:
         if self.title:
             nome = self.title  
         else:
             url = self.url
             url = remove_special_chars(remove_diacritics(url.replace(" ","_")))
             nome = url
         addTag(tag, self.registry_id, self.owner, "bookmarks", self.id, nome, data_tag)
Exemple #7
0
    def post(self, registry_id):
        user = self.get_current_user()

        _atividade = model.Activity()
        msg = ""
        _atividade.titulo = self.get_argument("titulo","")
        if _atividade.titulo == "":
            msg += u"O nome da atividade não pode ser vazio.<br/>"
        else:
            _atividade.name_id = remove_special_chars(remove_diacritics(_atividade.titulo.replace(" ","_")))
            if _atividade.name_id == "":
                msg += u"Título da atividade inválido<br/>"

        _atividade.group_id = self.get_argument("id","") 
        if _atividade.group_id == "":
            msg += u"O grupo da atividade não foi informado.<br/>"
            
        if msg:
            self.render("modules/activity/activity-form.html",  NOMEPAG=u"atividades", \
                        ATIVIDADE=_atividade, \
                        GROUP=_atividade.group_id, \
                        REGISTRY_ID=registry_id, MSG=msg)  
            return       
        
        #verifica se o registry é usuário ou comunidade  
        if registry_id == user: 
            _atividade.subtype="user"
        else:
            _atividade.subtype="comunity"
        
        doc_id = uuid4().hex
        #_atividade.observacao = self.get_argument("observacao",'')
        _atividade.data_cri = str(datetime.now())
        _atividade.data_start = short_datetime(_atividade.data_cri, include_separator=" ")
        _atividade.data_end = ""
        _atividade.encarregados.append(user)
        _atividade.prioritario = self.get_argument("prioritario",'N')
        _atividade.status = u"pendente"
        _atividade.service="activity"
        _atividade.type="activity"
        _atividade.registry_id = registry_id
        _atividade.owner = user
        
        log.model.log(user, u'criou uma atividade em', objeto=registry_id, tipo="activity",link="/activity/%s"%registry_id)
        _atividade.save(id=doc_id)
        
        self.render("modules/activity/activity-form.html",  NOMEPAG=u"atividades", \
                    ATIVIDADE=model.Activity(), \
                    GROUP=_atividade.group_id, \
                    REGISTRY_ID=registry_id, MSG="A atividade foi criada com sucesso")  
Exemple #8
0
    def post(self, registry_id):
        user = self.get_current_user()
        _va = model.Videoaula()
        msg = ""
        
        _va.titulo = self.get_argument("name","")
        if _va.titulo == "":
            msg += u"Nome da videoaula não preenchido.<br/>"
                
        _va.arqvideo = self.get_argument("arqvideo","")
        if _va.arqvideo == "":
            msg += u"Arquivo de vídeo não preenchido.<br/>"

        _va.tags = splitTags(self.get_argument("tags",""))

        _va.service = "videoaula"
        _va.type = "videoaula"
        _va.registry_id = registry_id
        _va.name_id = remove_special_chars(remove_diacritics(_va.titulo.replace(" ","_")))

        if model.Videoaula.exists(_va.registry_id, _va.name_id):
            msg += u"Já existe uma videoaula com este nome"

        if msg:
            self.render("modules/videoaula/videoaula-form.html",  NOMEPAG="videoaulas", VIDEODATA=_va, \
                        FOLDERS = files.model.Files.listFolders(user, registry_id, "files/all_data"), \
                        REGISTRY_ID=registry_id, MSG=msg)  
            return
                
        else:
            doc_id = uuid4().hex
            _va.owner = user
            #_va.alterado_por = user

            _va.data_cri = str(datetime.now())
            _va.data_alt = _va.data_cri
            _va.save(id=doc_id)
            
            # Adiciona tags da videoaula ao banco de tags.
            data_tag = str(datetime.now())
            for tag in _va.tags:
                addTag(tag, registry_id, user, "videoaula", registry_id+"/"+_va.name_id, str_limit(remove_html_tags(_va.titulo), 50), data_tag)
            
            log.model.log(user, u'criou videoaula em', objeto=registry_id, tipo="videoaula",link="/videoaula/%s/%s"%(registry_id,_va.name_id))
            self.redirect("/videoaula/edit/%s/%s" % (registry_id,_va.name_id))
Exemple #9
0
    def post(self, registry_id):
        user = self.get_current_user()
        if not isUserOrMember(user, registry_id):
            self.render("home.html", MSG=u"Você não tem permissão para criar termos neste glossário.", \
                        NOMEPAG=NOME_PAG_CLOSSARIO, REGISTRY_ID=registry_id)
            return
        MSG = ""
        glossary_term = self.get_argument("term","")
        if not glossary_term:
            MSG += u"Termo não pode ser vazio."
        glossary_definition = self.get_argument("definition","")
        if not glossary_definition:
                MSG += u"%sA definição do termo não pode estar vazia." % ("" if not MSG else "<br/>")
        if not MSG:
            glossary_item_id = remove_special_chars(remove_diacritics(glossary_term.replace(" ","_")))
            if model.Glossary.searchItemByRegistryIdAndItemId(user, registry_id, glossary_item_id, False):
                MSG += u"Termo já definido neste glossário."

        if MSG:
            self.render("modules/glossary/new_glossary_item-form.html", \
                        NOMEPAG=NOME_PAG_CLOSSARIO, DEFINITION=glossary_definition, REGISTRY_ID=registry_id, MSG=MSG)
            return
        else:
            self._glossary = model.Glossary()
            self._glossary.id = '/'.join([registry_id,glossary_item_id])
            self._glossary.registry_id = registry_id
            self._glossary.owner = user
            self._glossary.item_id = glossary_item_id
            self._glossary.term = self.get_argument("term","")
            self._glossary.definition = glossary_definition
            self._glossary.tags = splitTags(self.get_argument("tags",""))
            self._glossary.data_cri = self._glossary.data_alt = str(datetime.now())
            self._glossary.alterado_por = user
            self._glossary.saveGlossaryItem(glossary_item_id)
            log.model.log(user, u'criou um termo no glossário de', objeto=registry_id, tipo="glossary")

        self.redirect("/glossary/%s" % registry_id)
Exemple #10
0
    def post(self, registry_id):
        user = self.get_current_user()
        
        if self.request.files:
            
            # este split é para resolver o problema do IE, que manda o caminho completo.
            filename = self.request.files["arquivo"][0]["filename"].split("\\")[-1]
            #filename = remove_diacritics(filename)
            #filename = filename.replace(" ", "_")
            filename = remove_special_chars(remove_diacritics(filename.replace(" ","_")))
            
            if filename=="":
                self.write (dict(status=1, msg=u"Nome do arquivo inválido."))
                return

            if filename[0]=="_":
                self.write (dict(status=1, msg=u"Nome do arquivo não pode iniciar com sublinhado (_)."))
                return

            if "." not in filename or filename.split(".")[-1].lower() not in ["gif", "jpg", "jpeg", "png"]:
                self.write (dict(status=1, msg=u"Utilize somente arquivos com extensão: gif, jpg, jpeg ou png."))
                return
                                
           
            if registry_id in core.database.REGISTRY:
                if not isUserOrMember(user, registry_id):
                     self.write (dict(status=1, MSG=u"Você não tem permissão para carregar arquivos aqui."))
                     return

                # A chave _id do documento no couchdb é nome/arquivo
                file_id = '/'.join([registry_id,filename])

                self._file = model.Studio().retrieve(file_id)
                if self._file:
                    self.write (dict(status=1, MSG=u"Já existe um arquivo com este mesmo nome (%s). Remova-o antes de subir com uma nova versão." % file_id))
                    return
                else: 
                    self._file = model.Studio(file_id=file_id)

                
                if self.get_argument("type","")=="":
                    self.write (dict(status=1, MSG=u"Escolha a fase onde a imagem deve ser armazenada."))
                    return
                 
                self._file.type = int(self.get_argument("type",""))
                self._file.description = self.get_argument("description","")
                self._file.url = self.get_argument("url","")
                self._file.tags = splitTags(self.get_argument("tags",""))
                self._file.owner = self._file.alterado_por = user
                self._file.registry_id = registry_id
                self._file.data_upload = self._file.data_alt = str(datetime.now())
                self._file.filename = filename
                if not self._file.saveFile(file_id, self.request.files):
                    self.write (dict(status=1, MSG=u"Erro na leitura do arquivo de imagem. (%s)" %file_id))
                    return
                
                log.model.log(user, u'criou o arquivo', objeto=file_id, tipo="file")

                self.write (dict(status=0, redirect="/studio/%s" % (registry_id)))

            else:
               self.write (dict(status=1, msg=u"Usuário ou comunidade inexistentes."))
                
        else:
            self.write (dict(status=1, msg=u"Erro: Arquivo inexistente!"))
Exemple #11
0
    def post(self, registry_id, tipo):
        user = self.get_current_user()
        
        msg = ""
        if isOwner(user, registry_id):
            self._aval = model.Evaluation()
            self._aval.nome = self.get_argument("nome","")
            if not self._aval.nome:
                msg += u"Nome da avaliação não informado.<br/>"
            else:
                self._aval.nome = remove_special_chars(remove_diacritics(self._aval.nome.replace(" ","_")))
                if self._aval.nome == "":
                    msg += u"Nome da avaliação inválido.<br/>"
            
            self._aval.descricao = self.get_argument("descricao", "")
            
            if tipo=="member":
                self._aval.tipo = "participantes"
                self._comu = core.model.Community().retrieve(registry_id)
                avaliados = self._comu.participantes
                grupos = self._comu.groups
                groupnames = {}
                for grupo in grupos:  
                    groupnames[grupo] = grupo  
                
            else:       # tipo =="wiki"
                self._aval.tipo = u"páginas"
                avaliados = [row.key[1].split("/")[1] for row in wiki.database.WIKI.view('wiki/partial_data',startkey=[registry_id],endkey=[registry_id, {}]) if row.value["is_folder"]!="S" and not row.value["removido"]]
                (grupos, groupnames) = wiki.model.Wiki.listWikiFolderItens(registry_id)



                
            # qdo colocamos as views passou a dar erro de encoding
            # avaliados = [x.encode("UTF-8") for x in avaliados]
            for item in avaliados:
                if self.get_argument(item,"") == "S":
                    self._aval.avaliados.append(item)
                    
            if not self._aval.avaliados:
                msg += u"Selecione pelo menos um item para ser avaliado.<br/>"
                
            pontuacao = self.get_argument("pontuacao","").strip()
            if pontuacao:
                self._aval.pontuacao = pontuacao.split(",")
            else:
                msg += u"O campo 'Pontuação' não foi preenchido.<br/>"
            self._aval.owner = user
            self._aval.data_cri = str(datetime.now())
            
            self._aval.data_inicio = self.get_argument("data_start","")
            if not self._aval.data_inicio:
                msg += u"O campo 'Data/hora de início' não foi preenchido.<br/>"
            
            self._aval.data_encerramento = self.get_argument("data_end","")
            if not self._aval.data_encerramento:
                msg += u"O campo 'Data/hora de encerramento' não foi preenchido.<br/>"

            if msg:
                self.render("modules/evaluation/newevaluation-form.html", MSG=msg, EVALUATIONDATA=self._aval, \
                                    AVALIADOS=avaliados, REGISTRY_ID=registry_id, \
                                    GROUPS=grupos, \
                                    GROUPNAMES=groupnames, \
                                    NOMEPAG=u"Avaliações")                
            else:
                aval_id = "%s/%s" % (registry_id, self._aval.nome)
                try:
                    self._aval.save(id=aval_id)
                except Exception as detail:
                    self.render("modules/evaluation/newevaluation-form.html", MSG=u"Já existe uma avaliação com este nome", EVALUATIONDATA=self._aval, \
                                    AVALIADOS=avaliados, REGISTRY_ID=registry_id, \
                                    GROUPS=grupos, \
                                    GROUPNAMES=groupnames, \
                                    NOMEPAG=u"Avaliações")
                    return
                    
                log.model.log(user, u'criou a avaliação', objeto=aval_id, tipo="evaluation")
                self.redirect("/evaluation/%s" % registry_id)
                
        else:
            self.render("home.html", MSG=u"Você não pode criar avaliação nesta comunidade.", REGISTRY_ID=ifExists(registry_id, user), \
                            NOMEPAG="comunidades")
Exemple #12
0
 def post(self, registry_id): 
     user = self.get_current_user()
     subtype = self.get_argument ("subtype","")
     if subtype == "":
         raise HTTPError (400)
         return
     
     _quiz = model.Quiz()
     _quiz.titulo = self.get_argument("titulo","")
     _quiz.questions = self.get_arguments("questions")
     _quiz.descricao = self.get_argument("descricao","")
     _quiz.data_inicio = self.get_argument("data_start","")        
     _quiz.data_fim = self.get_argument("data_end","") 
     _quiz.exibicao = self.get_argument("exibicao", "")       
     
     msg = ""
     if _quiz.titulo == "":
         msg += u"Título do quiz não preenchido.<br/>"
     
     else:
         quiz_id = remove_special_chars(remove_diacritics(_quiz.titulo.replace(" ","_")))
         if quiz_id == "":
              msg += u"Título do quiz inválido<br/>"
              
     if not _quiz.descricao:
         msg += u"Descrição do quiz não preenchida.<br/>"       
     
     if not _quiz.questions:
         msg += u"Selecione pelo menos uma questão para fazer parte do quiz.<br/>"    
     
     if not _quiz.data_inicio:
         msg += u"O quiz deve possuir uma data de início.<br/>"        
         
     if not _quiz.data_fim:
         msg += u"O quiz deve possuir uma data de encerramento.<br/>"
     
     if not msg and not maiorData(_quiz.data_fim, _quiz.data_inicio, short=True):
         msg += u"A Data/hora de encerramento não pode ser anterior à Data/hora de início.<br/>"
     
     if msg:
         self.render("modules/quiz/quiz-form.html", NOMEPAG=u"Quiz", QUIZ=_quiz, REGISTRY_ID=registry_id, \
                                              MSG=msg, \
                                              QUESTIONS=self.prepareQuestionList(question.model.Question.listObjectsBySubtype(subtype, registry_id)), \
                                              TITLE=u"Criar Quiz ("+TIPO_QUIZ[subtype]+")", \
                                              LINKS=[], SUBTYPE=subtype )  
         return
                    
     else:
         _quiz.data_cri = str(datetime.now())
         _quiz.data_alt = _quiz.data_cri
         _quiz.service = "quiz"
         _quiz.type = "quiz"
         _quiz.subtype = subtype
         doc_id = uuid4().hex
         _quiz.registry_id = registry_id
         _quiz.owner = user
         try:
             _quiz.save(id=doc_id)
         except Exception as detail:
             self.render("modules/quiz/quiz-form.html",  NOMEPAG=u"Questionário", QUIZDATA=_quiz, REGISTRY_ID=registry_id, \
                                              QUESTIONS=self.prepareQuestionList(question.model.Question.listObjectsBySubtype(subtype, registry_id)), \
                                              SUBTYPE=subtype,\
                                              TITLE=u"Criar Quiz ("+TIPO_QUIZ[subtype]+")", \
                                              LINKS=[], \
                                              MSG=u"Já existe um quiz com este título.")
             return
             
         log.model.log(user, u'criou quiz em', objeto=registry_id, tipo="quiz",link="/quiz/%s"%quiz_id)
         self.redirect("/quiz/%s" % registry_id)
Exemple #13
0
    def post(self, registry_id):
        msg = ""
        user = self.get_current_user()
        folder = self.get_argument("parent_folder","")
        if folder:
            folder_id = registry_id+"/"+folder
            self._pai = model.Wiki().retrieve(folder_id)
            parent_name = self._pai.nomepag
        else:
            parent_name = registry_id+"/"
            
        nomepag = self.get_argument("nomepag","")
        if nomepag=="":
            msg += u"* Nome da página não preenchido<br/>"

        nomepag_id = remove_special_chars(remove_diacritics(nomepag.replace(" ","_")))
        if nomepag_id=="":
            msg += u"* Nome da página inválido<br/>"

        doc_id = '/'.join([registry_id,nomepag_id])
        if model.Wiki.nomepagExists(registry_id, nomepag) or model.Wiki().retrieve(doc_id):
            msg += u"* Já existe uma página ou pasta com este nome<br/>"
        
        self._wiki = model.Wiki()
        conteudo = self.get_argument("conteudo","")
        if conteudo=="": msg += u"* Conteúdo não preenchido<br/>"
        
        historico = dict(
                         conteudo=conteudo,
                         data_alt=str(datetime.now()),
                         alterado_por = user
        )
        self._wiki.historico.append(historico)
        
        self._wiki.tags = splitTags(self.get_argument("tags",""))
        
        self._wiki.parent_folder = self.get_argument("parent_folder","")
        if self._wiki.parent_folder!="":
            parent_id = '/'.join([registry_id,self._wiki.parent_folder])
            test_parent_folder = model.Wiki().retrieve(parent_id)
            if not test_parent_folder:
                msg += u"* Impossível criar página dentro de uma pasta inexistente (%s)<br/>" % parent_id
            elif not isAllowedToWriteObject(user, "wiki", registry_id, self._wiki.parent_folder):
                msg += u"* Você não tem permissão para criar páginas nesta pasta."

        if msg:
            self.write (dict(status=1, msg=msg))
            
        else:
            self._wiki.nomepag = nomepag
            self._wiki.nomepag_id = nomepag_id
            self._wiki.user = user
            self._wiki.owner = user
            self._wiki.registry_id = registry_id
            self._wiki.data_cri = self._wiki.historico[-1]["data_alt"]

            
            self._wiki.saveWiki(id=doc_id)

            # inclui a página recem criada na lista de filhos do parent_folder
            if self._wiki.parent_folder:
                parent = model.Wiki().retrieve(registry_id+"/"+self._wiki.parent_folder)
                parent.addItemToParent(user, self._wiki.nomepag_id)

            log.model.log(user, u'criou a página', objeto=doc_id, tipo="wiki")
            self.redirect("/wiki/%s" % doc_id)