Пример #1
0
            if not PrefixAdapter(self.context).is_valid_number(value):
                raise schema.interfaces.ConstraintNotSatisfied()
        else:
            parent = aq_parent(aq_inner(self.context))
            if not PrefixAdapter(parent).is_valid_number(value, self.context):
                raise schema.interfaces.ConstraintNotSatisfied()


validator.WidgetValidatorDiscriminators(
    ReferenceNumberPrefixValidator,
    field=IReferenceNumberPrefix['reference_number_prefix'],
)

ReferenceNumberPrefixErrorMessage = error.ErrorViewMessage(
    _('error_sibling_reference_number_existing',
      default=u'A Sibling with the same reference number is existing.'),
    error=schema.interfaces.ConstraintNotSatisfied,
    field=IReferenceNumberPrefix['reference_number_prefix'],
)


class IReferenceNumberPrefixMarker(Interface):
    """
    Marker Interface for the ReferenceNumber-Prefix Behavior
    """


def saveReferenceNumberPrefix(obj, event):
    """When an object providing IReferenceNumberPrefixMarker (repository
    folders) gets added or has been modified, make sure it has
    a unique reference number prefix.
Пример #2
0
class NovaBoaPratica(ProcessFiles, form.SchemaForm):
    label = u"Inscrição de Boas Práticas"

    grok.context(Interface)
    grok.require('zope2.View')
    grok.name('nova-boa-pratica')

    ignoreContext = True
    # enableCSRFProtection = True

    schema = IBoaPraticaForm

    # fields = field.Fields(IBoaPraticaForm)
    # fields['sitesrelacionados'].widgetFactory = DataGridFieldFactory
    # # fields['Subject'].widgetFactory = KeywordFieldWidget <- ignorar
    # fields['esfera'].widgetFactory = RadioFieldWidget

    def update(self):
        #Cria toda a hieraquia das Boas Praticas
        self.createBoaPraticaStructure()
        self.request.set('disable_border', True)
        return super(NovaBoaPratica, self).update()

    @button.buttonAndHandler(u"Voltar")
    def handleCancel(self, action):
        """User cancelled. Redirect back to the front page.
        """

    @button.buttonAndHandler(u'Enviar')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        # if action.form.widgets.errors:
        #     self.status = self.formErrorsMessage
        #     return
        if data['anexo'].contentType == 'application/msword' or data[
                'anexo'].contentType == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
            messages = IStatusMessage(self.request)
            messages.add(u"Não é permitido efetuar o upload de arquivos Word.",
                         type=u"error")
            return self.request.response.redirect(self.request.getURL())

        context = self.context

        # tool para criacao do conteudo
        # pt = getToolByName(context, 'portal_types')

        folder_observatorio = getattr(context, 'observatorio', None)
        folder_boas_praticas = getattr(folder_observatorio, 'boas-praticas',
                                       None)

        title = data['title']
        esfera = data['esfera']
        uf = data['uf']
        orgparticipantes = data['orgparticipantes']
        description = data['description']
        # Subject = data['Subject']
        sitesrelacionados = data['sitesrelacionados']
        # categoria = data['categoria']

        id = self.generateIdForContext(folder_boas_praticas,
                                       idnormalizer.normalize(title))
        boapratica = self.createObjectInContext(id, folder_boas_praticas,
                                                'BoaPratica')
        boapratica.setTitle(title)
        boapratica.setEsfera(esfera)
        boapratica.setUf(uf)
        boapratica.setOrgparticipantes(orgparticipantes)
        boapratica.setDescription(description)
        # boapratica.setCategoria(categoria)

        # if Subject:
        #     boapratica.setSubject(Subject)

        sitesrelacionados = [
            site for site in sitesrelacionados
            if isinstance(site, dict) and site.get('url', None)
        ]
        sitesrelacionados = fix_sitesrelacionados_dict(sitesrelacionados)
        boapratica.setSitesrelacionados(sitesrelacionados)

        anexo_obj = data.get('anexo', None)

        if anexo_obj:
            file = data["anexo"]
            # folder_attach = getattr(folder_boas_praticas, 'anexo-de-praticas')
            anexo_obj = self.processFiles(file, boapratica)

        if anexo_obj:
            boapratica.setAnexos((anexo_obj))

        boapratica.reindexObject()

        pw = getToolByName(context, "portal_workflow")
        try:
            pw.doActionFor(boapratica, "submit")
            pw.doActionFor(anexo_obj, "submit")
        except WorkflowException:
            #Não foi possivel enviar para revisão
            pass

        # if self.session.get("termo_aceito", False):
        #     del self.session['termo_aceito']
        # import pdb; pdb.set_trace()

        portal_site = api.portal.get()
        site_name = portal_site.getProperty('title_2')
        self.send_email_admin(boapratica.absolute_url(), site_name)

        messages = IStatusMessage(self.request)
        messages.add(u"Obrigado, sua boa prática foi enviada para aprovação.",
                     type=u"info")

        self.request.response.redirect(boapratica.absolute_url())

    def send_email_admin(self, link, title):
        """enviar um email para o admin"""

        message = """Há uma nova prática para análise de aprovação. \n
        clique no link para visualizar a boa prática \n
        %s """ % (link)

        address = self.get_adm_observatorio()
        subject = 'Existe nova prática pendente de avaliação no Observatório do %s ' % (
            title)

        return simple_send_mail(message, address, subject)

    def get_adm_observatorio(self):
        # Pega o usuário administrador do fale conosco.
        registry = getUtility(IRegistry)
        adm_observatorio = registry.records[
            'mpdg.govbr.observatorio.controlpanel.IObservatorio_email.adm_observatorio'].value
        return adm_observatorio

    # traz o texto do termo de uso
    ### Obs :  O metodo foi comentado , descomentei pois não tinha acesso no boa pratica.
    def getTermo(self):
        portal = api.portal.get()
        sobre = getattr(portal, 'sobre')
        observatorio = getattr(sobre, 'observatorio')
        termo = getattr(observatorio, 'termo-de-uso', None)

        return termo

    def createBoaPraticaStructure(self):
        """
        Cria toda a arquitetura das boas praticas:

        Pasta - Observatorio
          Página - Termo de Uso
          Pasta - Praticas
            Pasta - Anexos das Boas Praticas
        """

        portal_membership = getToolByName(self.context, "portal_membership")
        user_admin = portal_membership.getMemberById('admin')

        # stash the existing security manager so we can restore it
        old_security_manager = getSecurityManager()

        # create a new context, as the owner of the folder
        newSecurityManager(self.request, user_admin)

        folder_observatorio = getattr(self.context, 'observatorio', False)
        if not folder_observatorio:
            folder_observatorio = self.createObjectInContext(
                'observatorio', self.context, 'Folder')
            folder_observatorio.setTitle('Observatório')
            try:
                self.context.portal_workflow.doActionFor(
                    folder_observatorio, 'publish')
            except WorkflowException:
                pass

        if folder_observatorio:
            folder_boas_praticas = getattr(folder_observatorio,
                                           'boas-praticas', False)
            document_termo_uso = getattr(folder_observatorio, 'termo-de-uso',
                                         False)

            if not folder_boas_praticas:
                folder_boas_praticas = self.createObjectInContext(
                    'boas-praticas', folder_observatorio, 'Folder')
                folder_boas_praticas.setTitle('Boas Práticas')
                try:
                    folder_observatorio.portal_workflow.doActionFor(
                        folder_boas_praticas, 'publish')
                except WorkflowException:
                    pass

            if not document_termo_uso:
                document_termo_uso = self.createObjectInContext(
                    'termo-de-uso', folder_observatorio, 'Document')
                document_termo_uso.setTitle('Termo de Uso')
                try:
                    folder_observatorio.portal_workflow.doActionFor(
                        document_termo_uso, 'publish')
                except WorkflowException:
                    pass

        # Legado. Removido na história 30718, sprint 5 (Out/16)
        # if folder_boas_praticas:
        #     folder_attach = getattr(folder_boas_praticas, 'anexo-de-praticas', False)

        #     if not folder_attach:
        #         folder_attach = self.createObjectInContext('anexo-de-praticas', folder_boas_praticas, 'Folder')
        #         folder_attach.setTitle('Anexo de Práticas')
        #         folder_attach.reindexObject()
        #         try:
        #             folder_boas_praticas.portal_workflow.doActionFor(folder_attach, 'publish')
        #         except WorkflowException:
        #             pass

        # restore the original context
        setSecurityManager(old_security_manager)

    def createObjectInContext(self, id, context, portal_type):
        """
            Cria uma pasta com o id passa em um contexto definido

            @param id: Id do conteúdo a ser criado
            @param context: Contexto onde será criado o conteúdo
            @param portal_type: Tipo de conteúdo que será criado

            @return: Objeto plone criado
        """
        portal = getUtility(ISiteRoot)
        ptypes = getToolByName(portal, 'portal_types')

        new_content = ptypes.getTypeInfo(portal_type)
        new_content = new_content._constructInstance(context, id)
        new_content.reindexObject()

        return new_content

    # TODO: manual translation of error messages...
    RequiredMissingErrorMessage = error.ErrorViewMessage(
        u'Esse campo é obrigatório', error=RequiredMissing)
    provideAdapter(RequiredMissingErrorMessage, name='message')

    @form.error_message(field=IBoaPraticaForm['anexo'], error=RequiredMissing)
    def anexoRequiredErrorMessage(value):
        return u'Campo Anexo é obrigatório. Favor inserir pelo menos um arquivo.'