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, })
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)
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()
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))
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)
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)
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)
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()
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')
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
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')
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)
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')
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))
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
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')
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"")
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())
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())
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)
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 {}
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
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)
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)
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
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())