예제 #1
0
class PessoaListView(grok.View, BaseListView):
    
    grok.name('list-pessoa')
    grok.context(INavigationRoot)
    grok.require('zope2.View')

    dados = []
    view_sufix = 'pessoa'

    @log
    def update(self):
        sc = getUtility(ISecurityChecker)
        sc.enforce('acessar_list_pessoa')
        self.request.set('disable_border', True)
        self.dados = []
        session = Session()
        items = session.query(db.Pessoa).all()
        for i in items:
            self.dados.append({
               'id': i.id,
               'nome': i.nome,
               'email': i.email,
               })
예제 #2
0
class fixRecord(grok.View):
    """ Fix KeyError problem when plonesite is moved from the original Zeo"""
    grok.context(IPloneSiteRoot)
    grok.name('fix_record')
    grok.require('cmf.ManagePortal')

    def render(self, portal=None):
        from zope.component import getUtility
        if CSRF:
            alsoProvides(self.request, IDisableCSRFProtection)
        output = []
        site = self.context.portal_registry
        registry = getUtility(IRegistry)
        rec = registry.records
        keys = [a for a in rec.keys()]
        for k in keys:
            try:
                rec[k]
            except:
                output.append('{}, '.format(k))
                del site.portal_registry.records._values[k]
                del site.portal_registry.records._fields[k]
        return "S'han purgat les entrades del registre: {}".format(output)
class Board_Members(grok.View):
    grok.context(IFolderish)
    grok.require('zope2.View')
    grok.name('board-members')

    def update(self):
        self.session = self.request.get('session', None)
        if self.session is not None:
            catalog = api.portal.get_tool('reference_catalog')
            self.session = catalog.lookupObject(self.session)

    def get_legislative_board_members(self):
        """Return list of board members of the legislative session specified
        in the variable passed on the request.
        """
        if self.session is not None:
            return self.session.get_legislative_board_members()

    def get_position(self, member):
        """Return position of member of the board.
        """
        if self.session is not None:
            return self.session.get_position(member)
예제 #4
0
class RemoveTileWidget(grok.View):
    # XXX: This should be part of the plone.app.tiles package or similar
    grok.context(ICover)
    grok.require('cmf.ModifyPortalContent')
    grok.name('removetilewidget')

    def __call__(self):
        template = self.template
        if 'form.submitted' not in self.request:
            return template.render(self)

        annotations = IAnnotations(self.context)
        current_tiles = annotations.get('current_tiles', {})
        tile_id = self.request.get('wid', None)

        if tile_id in current_tiles:
            widget_type = current_tiles[tile_id]['type']
            # Let's remove all traces of the value stored in the tile
            widget_uri = '@@{0}/{1}'.format(widget_type, tile_id)
            tile = self.context.restrictedTraverse(widget_uri)

            dataManager = ITileDataManager(tile)
            dataManager.delete()
예제 #5
0
class Index(dexterity.DisplayForm):
    grok.context(IMission)
    grok.require('zope2.View')
    grok.template('mission_view')
    grok.name('view')

    
    def contains_missionreport(self):
        #Checks for existance of Mission Report in current Mission

        context = self.context

        cur_path = '/'.join(context.getPhysicalPath())
        path = {}

        path['query'] = cur_path
        path['depth'] = 1

        contentFilter = {}
        contentFilter['path'] = path
        contentFilter['portal_type'] = 'reddplusid.missionreport.missionreport'

        return bool(context.portal_catalog.queryCatalog(contentFilter))
예제 #6
0
class AllTasks(MyTasks):
    """Lists all tasks assigned to this clients.
    Bases on MyTasks
    """

    grok.name('tabbedview_view-alltasks')
    grok.require('zope2.View')
    grok.context(Interface)

    enabled_actions = [
        'pdf_taskslisting',
        'export_tasks',
    ]

    major_actions = ['pdf_taskslisting']

    def get_base_query(self):
        """Returns the base search query (sqlalchemy)
        """

        query_util = getUtility(ITaskQuery)
        return query_util._get_tasks_for_assigned_client_query(
            get_client_id(), self.sort_on, self.sort_order)
예제 #7
0
class AnexoDownloadView(grok.View):

    grok.name('download-anexo')
    grok.context(INavigationRoot)
    grok.require('zope2.View')

    def update(self):
        sc = getUtility(ISecurityChecker)
        sc.enforce('visualizar_anexos')
        super(AnexoDownloadView, self).update()

    @log
    def render(self):
        session = Session()
        anexo = session.query(db.Anexo).get(self.request.id)
        p = anexo.protocolo
        path_anexo = os.path.join(PATH_ANEXOS, ScopeID(), str(p.ano),
                                  str(p.id), str(anexo.id))
        file_anexo = NamedFile(open(path_anexo, 'r'), filename=anexo.arquivo)
        cd = 'inline; filename="%s"' % anexo.arquivo.encode('utf-8')
        self.request.response.setHeader('Content-Disposition', cd)
        set_headers(file_anexo, self.request.response)
        return stream_data(file_anexo)
예제 #8
0
class PloneIDEToolViewletManager(grok.ViewletManager):
    """The manager for including html into the tools area, i.e. the bottom of the page.

    To implement your own tool...

    from five import grok
    from ploneide.core import PloneIDEToolViewletManager

    class MyTool(grok.Viewlet):
        grok.name('my-tool')
        grok.require('cmf.ManagePortal')
        grok.viewletmanager(PloneIDEToolViewletManager)

        # Viewlets should contain a 'weight' attribute to manage ordering.
        grok.order(200)

        def render(self):
            # tools must provide code to fit into the jstree structure.
            return '<h2>title</h2><div>Body</div>'

    """
    grok.name('ploneide.core.Tool')
    grok.context(IPloneIDE)
예제 #9
0
class PDFPage(silvaviews.View):
    grok.name('index.pdf')

    def pdf(self):
        """Convert the current page as a PDF.
        """
        html_view = getMultiAdapter((self.context, self.request),
                                    name='print.html')
        html_print = html_view().encode('cp1252', 'replace')
        command = subprocess.Popen(
            """htmldoc --charset cp-1252 --header . --fontsize 10 """
            """--bodyfont helvetica --webpage -t pdf --quiet --jpeg - """,
            shell=True,
            stdin=subprocess.PIPE,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE)
        pdf, error = command.communicate(input=html_print)
        return pdf

    def render(self):
        """Converts a HTML-Page to a PDF-Document.
        """
        return self.pdf()
예제 #10
0
class NotificacaoRemoveView(grok.View):

    grok.name('remove-notificacao')
    grok.context(INavigationRoot)
    grok.require('zope2.View')

    def update(self):
        sc = getUtility(ISecurityChecker)
        sc.enforce('acessar_remove_notificacao')
        super(NotificacaoRemoveView, self).update()

    @log
    def render(self):
        session = Session()
        api = getUtility(ISPDOAPI)
        pessoa_id = api.getAuthPessoa().id
        content = session.query(db.Notificacao).get(
            (pessoa_id, self.request.protocolo_id))
        session.delete(content)
        session.flush()
        status = IStatusMessage(self.request)
        status.add(_(u'Registro removido.'), 'info')
        go('list-notificacao')
예제 #11
0
class AreaAddForm(base.AddForm):
    """Formulário de cadastro de uma área do organograma.
    """

    grok.context(INavigationRoot)
    grok.name('add-area')
    grok.require('cmf.ManagePortal')

    schema = IArea
    klass = Area
    label = _(u'Adicionar Área')
    description = _(u'Formulário de cadastro de uma área do organograma.')

    @log
    def createAndAdd(self, data):
        area = Area()
        area.sigla = data['sigla']
        area.nome = data['nome']
        area.chefia_id = data['chefia_id']
        session = Session()
        session.add(area)
        session.flush()
        return area
예제 #12
0
class EditForm(dexterity.EditForm):
    grok.name('edit')
    grok.context(IComment)
    grok.require('esdrt.content.EditComment')

    label = 'Question'
    description = ''

    def updateFields(self):
        super(EditForm, self).updateFields()
        self.fields = field.Fields(IComment).select('text')
        self.groups = [
            g for g in self.groups if g.label == 'label_schema_default'
        ]

    def updateWidgets(self):
        super(EditForm, self).updateWidgets()
        self.widgets['text'].rows = 15

    def updateActions(self):
        super(EditForm, self).updateActions()
        for k in self.actions.keys():
            self.actions[k].addClass('standardButton')
예제 #13
0
class gwPersonalBarViewlet(PersonalBarViewlet, viewletBase):
    grok.name('genweb.personalbar')
    grok.viewletmanager(IPortalTop)
    grok.layer(IVilaixTheme)

    index = ViewPageTemplateFile('viewlets_templates/personal_bar.pt')

    def showRootFolderLink(self):
        return havePermissionAtRoot()

    def canManageSite(self):
        return checkPermission("plone.app.controlpanel.Overview",
                               self.portal())

    def getPortraitMini(self):
        pm = getToolByName(self.portal(), 'portal_membership')
        return pm.getPersonalPortrait().absolute_url()

    def logout_link(self):
        if HAS_CAS:
            return '{}/cas_logout'.format(self.portal_url)
        else:
            return '{}/logout'.format(self.portal_url)
예제 #14
0
class ChangeEventsView(grok.View):
    """
        Execute one action view in all instances
    """
    grok.context(IPloneSiteRoot)
    grok.name('change_events_view')
    grok.require('cmf.ManagePortal')

    def render(self, portal=None):
        if not portal:
            portal = api.portal.get()
        if portal.get('en', False):
            if portal['en'].get('events', False):
                events = portal['en'].get('events')
                events.setLayout('event_listing')
        if portal.get('es', False):
            if portal['es'].get('eventos', False):
                eventos = portal['es'].get('eventos')
                eventos.setLayout('event_listing')
        if portal.get('ca', False):
            if portal['ca'].get('esdeveniments', False):
                esdeveniments = portal['ca'].get('esdeveniments')
                esdeveniments.setLayout('event_listing')
예제 #15
0
class EditCheckerView(grok.View):
    """Short view wich only checks if the user has the required permissions.
    If not it returns with a statusmessages to the referer.
    Used in the documents extended tooltip."""

    grok.context(IBaseDocument)
    grok.name('edit_checker')
    grok.require('zope2.View')

    def render(self):
        mtool = getToolByName(self.context, 'portal_membership')
        if mtool.checkPermission(
            'Modify portal content', self.context):
            return self.response.redirect(
                '%s/edit' % (self.context.absolute_url()))
        else:
            msg = _(
                u'You are not authorized to edit the document ${title}',
                mapping={'title': self.context.Title().decode('utf-8')})

            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return self.request.RESPONSE.redirect(
                get_redirect_url(self.context))
예제 #16
0
class FilingAdvancedSearchForm(AdvancedSearchForm):
    grok.context(Interface)
    grok.name('advanced_search')
    grok.require('zope2.View')
    grok.layer(IFilingNumberActivatedLayer)

    schemas = (IAdvancedSearch, IFilingnumberSearchAddition)

    def move_fields(self):
        move(self, 'searchable_filing_no', before='responsible')

    def field_mapping(self):
        """Append searchable_filing_no to default field mappings"""

        mapping = super(FilingAdvancedSearchForm, self).field_mapping()
        dossier_fields = mapping.get(
            'opengever-dossier-behaviors-dossier-IDossierMarker')

        if 'searchable_filing_no' not in dossier_fields:
            dossier_fields.insert(dossier_fields.index('responsible'),
                                  'searchable_filing_no')

        return mapping
예제 #17
0
class setupDX(grok.View):
    """ Setup View that fixes p.a.ct front-page
    """
    grok.name('setupdxctsite')
    grok.context(Interface)
    grok.require('cmf.ManagePortal')

    def render(self):
        if HAS_DXCT:
            portal = getSite()
            pl = getToolByName(portal, 'portal_languages')
            if getattr(portal, 'front-page', False):
                portal.manage_delObjects('front-page')
                frontpage = createContentInContainer(portal, 'Document', title=u"front-page", checkConstraints=False)
                alsoProvides(frontpage, IHomePage)
                frontpage.exclude_from_nav = True
                frontpage.language = pl.getDefaultLanguage()
                frontpage.reindexObject()
            # Set the default page to the homepage view
            portal.setDefaultPage('homepage')
            return self.request.response.redirect(portal.absolute_url())
        else:
            return 'This site has no p.a.contenttypes installed.'
class LatestReservationsReportView(grok.View, GeneralReportParametersMixin):

    permission = 'seantis.reservation.ViewReservations'

    grok.require(permission)

    grok.context(Interface)
    grok.name('latest_reservations')

    template = grok.PageTemplateFile('../templates/latest_reservations.pt')

    @property
    def title(self):
        return _(u'Reservations in the last 30 days')

    @property
    def results(self):
        return latest_reservations(self.resources, self.reservations or '*')

    def reservation_title(self, reservation):
        human_date_text = utils.translate(self.context, self.request,
                                          human_date(reservation.created))
        return '{} - {}'.format(human_date_text, reservation.title)
class NoClientIdDottedReferenceFormatter(DottedReferenceFormatter):
    grok.name('no_client_id_dotted')

    def complete_number(self, numbers):
        """DottedReferenceFormatter which omits client id.
            """

        reference_number = u''

        if self.repository_number(numbers):
            reference_number = self.repository_number(numbers)

        if self.dossier_number(numbers):
            reference_number = u'%s%s%s' % (reference_number,
                                            self.repository_dossier_seperator,
                                            self.dossier_number(numbers))

        if self.document_number(numbers):
            reference_number = u'%s%s%s' % (reference_number,
                                            self.dossier_document_seperator,
                                            self.document_number(numbers))

        return reference_number.encode('utf-8')
예제 #20
0
class AddForm(dexterity.AddForm):
    grok.name('opengever.task.task')

    def update(self):
        # put default value for relatedItems into request
        paths = self.request.get('paths', [])
        if paths:
            self.request.set('form.widgets.relatedItems', paths)
        # put default value for issuer into request
        portal_state = getMultiAdapter((self.context, self.request),
                                       name=u"plone_portal_state")
        member = portal_state.member()
        if not self.request.get('form.widgets.issuer', None):
            self.request.set('form.widgets.issuer', [member.getId()])
        super(AddForm, self).update()

        # omit the responsible_client field and adjust the field description
        # of the responsible field if there is only one client configured.
        info = getUtility(IContactInformation)
        if len(info.get_clients()) <= 1:
            self.groups[0].widgets['responsible_client'].mode = HIDDEN_MODE
            self.groups[0].widgets['responsible'].field.description = _(
                u"help_responsible_single_client_setup", default=u"")
예제 #21
0
class RevertFileToVersion(grok.View):
    """Reverts the file of a document to a specific version.
    """

    grok.context(IDocumentSchema)
    grok.name('revert-file-to-version')
    grok.require('cmf.ModifyPortalContent')

    def render(self):
        version_id = self.request.get('version_id')

        # revert the file
        manager = getMultiAdapter((self.context, self.request),
                                  ICheckinCheckoutManager)
        manager.revert_to_version(version_id)

        # create a status message
        msg = _(u'Reverted file to version ${version_id}.',
                mapping=dict(version_id=version_id))
        IStatusMessage(self.request).addStatusMessage(msg, type='info')

        # redirect back to file view
        return self.request.RESPONSE.redirect(self.context.absolute_url())
예제 #22
0
class ModifyDescription(grok.View):
    """AJAX action for modify description.
    """
    grok.context(Inashuiren)
    grok.name('modify_description')
    grok.require('zope2.View')

    def render(self):
        datadic = self.request.form
        des = datadic['description']

        id = datadic['subobj_id']
        #         import pdb
        #         pdb.set_trace()
        subobj = getattr(self.context, id, None)
        if subobj != None:
            subobj.description = des
            subobj.reindexObject(idxs=['description'])

        ajaxtext = u"<p class='text-success'>更改已保存</p>"
        callback = {"result": True, 'message': ajaxtext}
        self.request.response.setHeader('Content-Type', 'application/json')
        return json.dumps(callback)
class SearchView(grok.View):
    """Search for a claim with the id specified and redirect to it, if found.
    """
    grok.context(IOmbudsOffice)
    grok.layer(IBrowserLayer)
    grok.name('search-claim')
    grok.require('zope2.View')

    def render(self):
        claim = self.request.form.get('claim', None)
        if not claim:
            msg = _(u'No claim id specified.')
            api.portal.show_message(message=msg, request=self.request, type='error')
        else:
            results = self.context.listFolderContents({'portal_type': 'Claim'})
            results = dict((i.id, i) for i in results)
            if claim in results:
                self.request.response.redirect(results[claim].absolute_url())
                return
            else:
                msg = _(u'Claim id not found.')
                api.portal.show_message(message=msg, request=self.request, type='error')
        self.request.response.redirect(self.context.absolute_url())
예제 #24
0
class CleanDonorOnlyUsers(grok.View):
    grok.context(IPloneSiteRoot)
    grok.name('clean-donor-only-users')

    def render(self):
        pc = getToolByName(self.context, 'portal_catalog')
        res = pc.searchResults(
            object_provides=
            'collective.salesforce.fundraising.personal_campaign_page.IPersonalCampaignPage',
        )
        # Whitelist personal fundraisers
        whitelist = []
        for b in res:
            page = b.getObject()
            person = page.get_fundraiser()
            if person is not None:
                whitelist.append(person.email)

        # Add Administrators
        groups = getToolByName(self.context, 'portal_groups')
        admin = groups.getGroupById('Administrators')
        for member in admin.getGroupMembers():
            whitelist.append(member.getProperty('email'))

        to_delete = []
        res = pc.searchResults(
            portal_type='collective.salesforce.fundraising.person')
        for b in res:
            person = b.getObject()
            if person.email in whitelist:
                continue
            to_delete.append(person.id)

        if to_delete:
            self.context.people.manage_delObjects(to_delete)

        return '\n'.join(to_delete)
예제 #25
0
class ViewComissaoView(MyComissaoView):
	grok.context(Interface)
	grok.require('zope2.View')
	grok.name('visao-comissao')

	def update(self):
		self.request['disable_border'] = True
		self.request['disable_plone.leftcolumn'] = True
		self.request['disable_plone.rightcolumn'] = True


	def comissoes(self):
		request = self.context.REQUEST
		if 'cpf_user' in request.keys():
			cpf_user = self.Convert_utf8(request.get('cpf_user',''))

			comissoes = ComissaoUsuario().get_comissao_by_cpf(cpf_user)
			return comissoes

		return None


	def comissao(self):
		comissoes = self.comissoes()
		if comissoes:
			return comissoes.last() 

		return None


	def prefs_user(self):
		data = self.comissao()
		if data:
			return {'name':data.name,
					'cpf':data.cpf}

		return {}
예제 #26
0
class FaleCategorizar(FaleConoscoAdminRequired, grok.View):
    """ View que salvar as categorias..."""

    grok.name('fale-categorizar')
    grok.require('zope2.View')
    grok.context(ISiteRoot)

    def update(self):
        self.fale_uid = self.request.form['fale_uid']
        categorias = self.request.form['tags']
        self.categorias = categorias.split(',')
        return self.buscar()

    def buscar(self):
        catalog = api.portal.get_tool('portal_catalog')
        # 1. pegar o objeto do fale conosco através do fale_uid
        buscar = catalog.searchResults(portal_type='FaleConosco',
                                       UID=self.fale_uid)
        if buscar:
            # pegar o primeiro elemento da lista
            # chamar o getObject e atribuir em uma variavel

            item = buscar[0].getObject()
            item.setSubject(self.categorias)
            item.reindexObject()

            self.message('Categorização salva com sucesso!')
        else:
            self.message('Não foi encotrado a mensagem com esse UID ')

        return self.request.response.redirect('fale-conosco-admin')

    def message(self, mensagem):

        messages = IStatusMessage(self.request)
        messages.add(mensagem, type='info')
        return
예제 #27
0
class AddConclusions(grok.View):
    grok.context(IQuestion)
    grok.name('add-conclusions')
    grok.require('zope2.View')

    def render(self):
        parent = aq_parent(self.context)
        if api.content.get_state(parent).startswith('phase1-'):
            conclusion = parent.get_conclusion()
            if not conclusion:
                api.content.transition(
                    obj=parent,
                    transition='phase1-draft-conclusions'
                )
                url = '%s/++add++Conclusion' % parent.absolute_url()
            else:
                url = '%s/edit' % conclusion.absolute_url()

        elif api.content.get_state(parent).startswith('phase2-'):
            conclusionsphase2 = parent.get_conclusion_phase2()
            if not conclusionsphase2:
                api.content.transition(
                    obj=parent,
                    transition='phase2-draft-conclusions'
                )

                cp2 = parent.invokeFactory(
                    id=int(time()),
                    type_name='ConclusionsPhase2'
                )
                conclusionsphase2 = parent.get(cp2)

            url = '%s/edit' % conclusionsphase2.absolute_url()
        else:
            raise ActionExecutionError(Invalid(u"Invalid context"))

        return self.request.response.redirect(url)
예제 #28
0
class OrganisationContentSubmittedMailTemplate(MailTemplateBase):
    """ """
    grok.name('mail_content_submitted')
    grok.context(IDexterityContent)
    grok.layer(IOSHAHWCContentLayer)
    grok.require('cmf.ReviewPortalContent')

    def __init__(self, context, request):
        super(MailTemplateBase, self).__init__(context, request)
        portal = getToolByName(context, 'portal_url').getPortalObject()
        self.object_url = context.absolute_url()
        self.folder_url = aq_parent(context).absolute_url()
        self.portal_url = portal.absolute_url()
        self.creator_name = context.key_name
        self.organisation_type = getattr(context, 'organisation_type', '')
        self.content_type = context.Type()
        member = api.user.get_current()
        email = safe_unicode(member.getProperty('email'))
        fullname = safe_unicode(member.getProperty('fullname'))
        warning = context.key_email != email and " (NOT the profile's key user %(name)s <%(email)s>)" % dict(
            typ=self.content_type,
            name=context.key_name,
            email=context.key_email) or ""
        self.creator_email = "%(name)s <%(email)s>%(warning)s" % dict(
            name=fullname, email=email, warning=warning)
        self.from_addr = "%(name)s <%(email)s>" % dict(
            name=portal.getProperty('email_from_name', ''),
            email=portal.getProperty('email_from_address', ''))

    def render(self, parent):
        self.subject = 'Content submitted'
        self.content_type = self.context.Type()
        self.parent_type = parent.Type()
        self.parent_name = parent.Title()
        self.template = grok.PageTemplateFile(
            'templates/mail_content_submitted.pt')
        return self.template.render(self)
예제 #29
0
class View(JsonView):
    grok.context(Sessions)
    grok.require('zope2.View')
    grok.name('index_html')

    def sessions(self):
        return [{
            'id': session.id,
            'title': session.title,
            'created': session.modified.isoformat(),
            'modified': session.modified.isoformat()
        } for session in self.context.account.sessions]

    def do_GET(self):
        return {'sessions': self.sessions()}

    def do_POST(self):
        try:
            survey = self.request.client.restrictedTraverse(
                self.input['survey'].split('/'))
            if not ISurvey.providedBy(survey):
                raise TypeError('Not a survey')
        except (KeyError, TypeError):
            return {'type': 'error', 'message': 'Unknown survey'}

        title = self.input.get('title', survey.title)
        survey_session = create_survey_session(title, survey)
        survey_session = survey_session.__of__(aq_inner(self.context))
        view = SessionView(survey_session, self.request)
        response = view.do_GET()
        survey_session_url = survey_session.absolute_url()
        if survey.ProfileQuestions():
            response['next-step'] = '%s/profile' % survey_session_url
        else:
            survey_session = set_session_profile(survey, survey_session, {})
            response['next-step'] = '%s/identification' % survey_session_url
        return response
예제 #30
0
파일: upload.py 프로젝트: EU-OSHA/Euphorie
class ImportSurvey(form.SchemaForm):
    """ The upload view for a :obj:`euphorie.content.sector`

    View name: @@upload
    """
    grok.context(ISector)
    grok.require("euphorie.content.AddNewRIEContent")
    grok.name("upload")
    form.wrap(True)

    schema = IImportSurvey
    ignoreContext = True
    form_name = _(u"Import OiRA Tool version")

    importer_factory = SurveyImporter

    @button.buttonAndHandler(_(u"Upload"))
    def handleUpload(self, action):
        (data, errors) = self.extractData()
        input = data["file"].data
        importer = self.importer_factory(self.context)
        try:
            survey = importer(input, data["surveygroup_title"],
                              data["survey_title"])
        except lxml.etree.XMLSyntaxError:
            raise WidgetActionExecutionError(
                "file",
                Invalid(
                    _("error_invalid_xml",
                      default=u"Please upload a valid XML file")))

        IStatusMessage(self.request).addStatusMessage(_(
            "upload_success", default=u"Succesfully imported the OiRA Tool"),
                                                      type="success")
        state = getMultiAdapter((survey, self.request),
                                name="plone_context_state")
        self.request.response.redirect(state.view_url())