from Products.CMFCore.utils import getToolByName from Products.ExternalMethod.ExternalMethod import manage_addExternalMethod from Products.ILPortalCasas.config import * from Products.ILPortalCasas.config_install import * from Products.ILPortalCasas.Extensions.install_taxonomy import * from Products.ILPortalCasas.Previsao import Previsao from Acquisition import aq_base import sys, os def install(self): portal = self setupControlPanel(portal) setupWorkflow(portal) setupTING(portal) setupIndex(portal) addTaxonomy(portal) addOuvidoria(portal) setupPortal(portal) setupSlots(portal) deleteAction(portal) deleteAction2(portal) deleteAction3(portal) deleteAction4(portal) deleteCategoria(portal) setupActions(portal) setupCss(portal) setupCssmanager(portal) setupFactory(portal) setupMembership(portal) setupGroups(portal) setupLanguages(portal) setupScripts(portal) setupMetadata(portal) setupProperties(portal) setupPublicatorUtilidades(portal) setupPublicatorDestaque(portal) setupPublicatorNoticia(portal) setupPublicatorBanner(portal) setupRSS(portal) setupSin(portal) setupSkin(portal) setupTipo(portal) addBackup(portal) addScheduler(portal) installPrevisao(portal) customizeBaseProperties(portal) def setupControlPanel(portal): portal.portal_controlpanel.registerConfiglet(**AJUDA_configlet) def setupWorkflow(portal): portal_workflow = getToolByName(portal, 'portal_workflow') portal_workflow.setDefaultChain('portal_modelo_workflow') portal_workflow.setChainForPortalTypes( ['CalendarX', 'ATAudio', 'Recordings', 'ATPhoto', 'ATVideo', 'ATAudioFolder', 'ATPhotoAlbum'], "plone_workflow") def setupTING(portal): portal_catalog = getToolByName(portal, 'portal_catalog') indexes = portal_catalog.getIndexObjects() try: portal_catalog.manage_delIndex('SearchableText') except: pass encoding = portal.portal_properties.site_properties.default_charset portal_catalog.manage_addIndex('SearchableText', 'TextIndexNG2', extra={'default_encoding' : encoding}) portal_catalog.manage_reindexIndex('SearchableText', portal.REQUEST) def setupIndex(portal): front_page = getattr(portal, 'front-page', None) if front_page is not None: portal._delObject('front-page') portal.manage_changeProperties(default_page='pagina-inicial') def addTaxonomy(portal): createTaxonomy(portal) def addOuvidoria(portal): # Configurando lista de opções omb_tool = getToolByName(portal, 'portal_ombudsman') omb_tool.setVocab_sex( ['1;Feminino','2;Masculino'] ) omb_tool.setVocab_region( ['AC;Acre','AL;Alagoas','AP;Amapá','AM;Amazonas','BA;Bahia','CE;Ceará',\ 'DF;Distrito Federal','ES;Espírito Santo','GO;Goiás','MA;Maranhão',\ 'MT;Mato Grosso','MS;Mato Grosso do Sul','MG;Minas Gerais','PA;Pará',\ 'PB;Paraíba','PR;Paraná','PE;Pernambuco','PI;Piauí','RJ;Rio de Janeiro',\ 'RN;Rio Grande do Norte','RS;Rio Grande do Sul','RO;Rondônia',\ 'RR;Roraima','SC;Santa Catarina','SP;São Paulo','SE;Sergipe','TO;Tocantins'] ) omb_tool.setVocab_age( ['1;Menos que 15','2;Entre 16 e 20','3;Entre 21 e 30','4;Entre 31 e 40',\ '5;Entre 41 e 50','6;Entre 51 e 60','7;Entre 61 e 70','8;Acima de 71'] ) ouvidoria = getattr(portal, 'ouvidoria', None) if ouvidoria is None: portal.invokeFactory('Ombudsman', id='ouvidoria', title='Ouvidoria') def setupPortal(portal): portal.manage_changeProperties(title='Portal das Casas Legislativas', email_from_address='admin-stc@interlegis.gov.br', email_from_name= 'Administrador') def setupSlots(portal): left_slots = ('here/portlet_navigation/macros/portlet', \ 'here/portlet_preferencias/macros/portlet', \ 'here/portlet_gazette/macros/portlet', \ 'here/sin_tool/macros/Interlegis', \ 'here/portlet_recent/macros/portlet',) portal._setPropValue('left_slots', left_slots) right_slots = ('here/portlet_calendar/macros/portlet', \ 'here/popoll_slot2/macros/popollBox', \ 'here/portlet_review/macros/portlet', \ 'here/portlet_utilidades/macros/portlet', \ 'here/portlet_previsao/macros/portlet',) portal._setPropValue('right_slots', right_slots) def deleteAction(portal): portal_actions = getToolByName(portal, 'portal_actions') idx = 0 for action in portal_actions.listActions(): if action.getId() == 'index_html': portal_actions.deleteActions((idx,)) break idx += 1 def deleteAction2(portal): portal_actions = getToolByName(portal, 'portal_actions') idx = 0 for action in portal_actions.listActions(): if action.getId() == 'sitemap': portal_actions.deleteActions((idx,)) break idx += 1 def deleteAction3(portal): portal_actions = getToolByName(portal, 'portal_actions') idx = 0 for action in portal_actions.listActions(): if action.getId() == 'contact': portal_actions.deleteActions((idx,)) break idx += 1 def deleteAction4(portal): portal_actions = getToolByName(portal, 'portal_actions') idx = 0 for action in portal_actions.listActions(): if action.getId() == 'plone_setup': portal_actions.deleteActions((idx,)) break idx += 1 def deleteCategoria(portal): portal_actions = getToolByName(portal, 'portal_actions') idx = 0 for actions in portal_actions.listActions(): if actions.getCategory() == 'site_actions': portal_actions.deleteActions((idx,)) break idx += 1 def setupActions(portal): portal_actions = getToolByName(portal, 'portal_actions') portal_actions.addAction(id='index_html', name='Página Inicial', action='string:$portal_url', condition='', permission='View', category='portal_tabs', visible=1) portal_actions.addAction(id='ouvidoria', name='Ouvidoria', action='string:${portal_url}/ouvidoria', condition='', permission='View', category='portal_tabs', visible=1) portal_actions.addAction(id='saap', name='SAAP', action='string: ${portal_url}/saap', condition='member', permission='View', category='portal_tabs', visible=1) portal_actions.addAction(id='saal', name='SAAL', action='string: ${portal_url}/saal', condition='member', permission='View', category='portal_tabs', visible=0) portal_actions.addAction(id='contact', name='Fale com a Câmara', action='string: ${portal_url}/contact-info', condition='', permission='View', category='portal_tabs', visible=1) portal_actions.addAction(id='sitemap', name='Site Map', action='string: ${portal_url}/sitemap', condition='', permission='View', category='portal_tabs', visible=1) portal_actions.addAction(id='login_form', name='Acessar', action='string: ${portal_url}/login_form', condition='python:here.portal_membership.isAnonymousUser()', permission='View', category='portal_tabs', visible=1) def setupCss(portal): css = getToolByName(portal, 'portal_css') css.manage_addStylesheet(id='portalCasas.css', media='all', enabled=True) def setupCssmanager(portal): cssmanager = getToolByName(portal, 'portal_cssmanager') cssmanager.manage_addToMapping('base_properties','Plone Css') def setupFactory(portal): portal_factory = getToolByName(portal, 'portal_factory') portal_factory.manage_setPortalFactoryTypes(listOfTypeIds=['Conta', 'Document', 'Event', 'File', 'Folder', 'Image', 'Link', 'News Item', 'Ombudsman', 'OmbudsmanClaim', 'OmbudsmanResponse', 'PrestacaoContas', 'DespesaPessoal', 'DisponibilidadeCaixa', 'Limites', 'RestosPagar', 'Previsao', 'Topic', 'Window', 'Newsletter', 'NewsletterBTree', 'NewsletterReference', 'NewsletterTheme', 'NewsletterTopic', 'Ploneboard', 'PloneboardComment', 'PloneboardConversation', 'PloneboardForum', 'Recordings', 'Subscriber', 'Section', 'ATVideo', 'ATPhotoAlbum', 'ATPhoto', 'ATMediaFile', 'ATAudioFolder', 'ATAudio']) def setupMembership(portal): portal_membership = getToolByName(portal, 'portal_membership') portal_membership.setMemberareaCreationFlag() def setupGroups(portal): portal_groups = getToolByName(portal, 'portal_groups') portal_groups.toggleGroupWorkspacesCreation() def setupLanguages(portal): languages = getToolByName(portal, 'portal_languages') defaultLanguage = 'pt-br' supportedLanguages = ['pt-br'] languages.manage_setLanguageSettings(defaultLanguage, supportedLanguages, setCookieN=True, setRequestN=False, setPathN=True, setForcelanguageUrls=True, setAllowContentLanguageFallback=False, setUseCombinedLanguageCodes=True, startNeutral=True, displayFlags=False) def setupScripts(portal): scripts = getattr(portal, 'scripts', None) if scripts is None: portal.manage_addProduct['OFSP'].manage_addFolder('scripts') scripts = getattr(portal, 'scripts', None) scripts.manage_addProduct['ExternalMethod'].manage_addExternalMethod('backupFile','Backup zope.conf e products', PROJECTNAME+'.BackupPortalModelo', 'backupFile') scripts.manage_addProduct['ExternalMethod'].manage_addExternalMethod('packDB','Pack Data.fs', PROJECTNAME+'.BackupPortalModelo', 'packDB') scripts.manage_addProduct['ExternalMethod'].manage_addExternalMethod('moveBackup','Move Data.fs para iretorio backup', PROJECTNAME+'.BackupPortalModelo', 'moveBackup') scripts.manage_addProduct['PythonScripts'].manage_addPythonScript('atualizaPrevisao') scripts['atualizaPrevisao'].ZPythonScript_edit('', 'context.portal_previsao.generatePrevisao()') def installPrevisao(portal): tool_previsao = getToolByName(portal, 'portal_previsao') #gerando a primeira previsao tool_previsao.setUsePrevisao(1); tool_previsao.setURLPrevisao('http://reia.inmet.gov.br/prev_clima_tempo/dbHTMLCapreCid_B.php?cidade=BRASILIA&uf=DFµreg=BRASILIA') tool_previsao.generatePrevisao() def setupMetadata(portal): portal_metadata = getToolByName(portal, 'portal_metadata') portal_metadata.updateElementPolicy( element='Subject', content_type='Event', is_required=0, supply_default=0, default_value='', enforce_vocabulary=0, allowed_vocabulary=('Encontro', 'Convenção', 'Reunião', 'Evento Social', 'Trabalho')) def setupProperties(portal): portal_properties = getToolByName(portal, 'portal_properties') portal_properties.site_properties.allowAnonymousViewAbout = (False) portal_properties.site_properties.default_language = 'pt-br' portal_properties.site_properties.localTimeFormat = '%d/%m/%Y' portal_properties.site_properties.localLongTimeFormat = '%d/%m/%Y %H:%M' portal_properties.site_properties.disable_folder_sections = (True) portal_properties.navtree_properties.includeTop = (False) portal_properties.navtree_properties.idsNotToList = ('Members','portal_ombudsman', 'portal_previsao', 'ouvidoria', 'portal_windowZ', 'news', 'events',) portal_properties.navtree_properties.metaTypesNotToList = ('ATImage', 'ATFile', 'ATEvent', 'ATLink', 'ATNewsItem', 'OmbudsmanClaim', 'OmbudsmanResponse', 'Conta', 'ATPhoto',) def setupPublicatorUtilidades(portal): portal_url = getToolByName(portal, 'portal_url') url = portal_url(relative_to_portal=1) plone_id = portal_url.getPortalObject().getId() items_utilidades = [{'RemoteUrl':'http://www.interlegis.gov.br', 'Description':'Programa Interlegis', 'Title':'Programa Interlegis', 'NewWindow':'on', 'RelativeURL':'/'+plone_id+'/utilidades/link-interlegis', 'RelativeContentURL':'utilidades/link-interlegis', 'Id':'link-interlegis'}, {'RemoteUrl':'http://www.senado.gov.br', 'Description':'Senado Federal', 'Title':'Senado Federal', 'NewWindow':'on', 'RelativeURL':'/'+plone_id+'/utilidades/link-senado', 'RelativeContentURL':'utilidades/link-senado', 'Id':'link-senado'}, {'RemoteUrl':'http://www.camara.gov.br', 'Description':'Câmara dos Deputados', 'Title':'Câmara dos Deputados', 'NewWindow':'on', 'RelativeURL':'/'+plone_id+'/utilidades/link-camara', 'RelativeContentURL':'utilidades/link-camara', 'Id':'link-camara'}] portal_publicator = getToolByName(portal, 'portal_publicator') portal_publicator.addPublicationBox(id='links_utilidades', name='Utilidades', content_type=['Link'], n_items=5, search_states=['published'], items=items_utilidades) def setupPublicatorDestaque(portal): portal_publicator = getToolByName(portal, 'portal_publicator') portal_publicator.addPublicationBox(id='destaque', name='Notícia Destaque', content_type=['News Item'], n_items=1, search_states=['published']) def setupPublicatorNoticia(portal): portal_publicator = getToolByName(portal, 'portal_publicator') portal_publicator.addPublicationBox(id='noticia', name='Últimas Notícias', search_states=['published'], content_type=['News Item'], n_items=5) def setupPublicatorBanner(portal): portal_url = getToolByName(portal, 'portal_url') url = portal_url(relative_to_portal=1) plone_id = portal_url.getPortalObject().getId() items_banners = [{'Description':'Senado Federal', 'Title':'Senado Federal', 'RemoteUrl':'http://www.senado.gov.br', 'RelativeContentURL':'utilidades/link-senado', 'ImageURL':'imagens/banners/banner_senado.jpg', 'NewWindow': 'on', 'RelativeURL':'/'+plone_id+'/utilidades/link-senado', 'Id':'link-senado'}, {'Description':'Programa Interlegis', 'Title':'Programa Interlegis', 'RemoteUrl':'http://www.interlegis.gov.br', 'RelativeContentURL':'utilidades/link-interlegis', 'ImageURL':'imagens/banners/banner_interlegis.jpg', 'RemoteURL':'http://www.camara.gov.br', 'NewWindow': 'on', 'RelativeURL':'/'+plone_id+'/utilidades/link-interlegis', 'Id':'link-interlegis'}, {'Description':'Câmara dos Deputados', 'Title':'Câmara dos Deputados', 'RemoteUrl':'http://www.camara.gov.br', 'RelativeContentURL':'utilidades/link-camara', 'ImageURL':'imagens/banners/banner_camara.jpg', 'NewWindow': 'on', 'RelativeURL':'/'+plone_id+'/utilidades/link-camara', 'Id':'link-camara'}] portal_publicator = getToolByName(portal, 'portal_publicator') portal_publicator.addPublicationBox(id='banners', name='Banners', content_type=['Link'], n_items=5, search_states=['published'], with_image=1, images_folder='imagens/banners', image_states=['published'], items=items_banners) def setupRSS(portal): rss = getToolByName(portal, 'portal_syndication') idx = 0 for action in rss.listActions(): if action.getId() == 'syndication': rss.deleteActions((idx,)) break idx += 1 rss.addAction('syndication', 'Syndication', 'string:${folder_url}/synPropertiesForm', 'python: folder is object and portal.portal_syndication.isSiteSyndicationAllowed()', 'Manage Properties', 'object', 1) rss.editProperties(isAllowed=1) noticias = getattr(portal, 'noticias', None) if noticias.portal_syndication.isSiteSyndicationAllowed(): noticias.portal_syndication.enableSyndication(noticias) def setupSin(portal): sin_tool = getToolByName(portal, 'sin_tool') sin_tool.manage_configSin(submit='Set Config', config=ARQUIVO) def setupSkin(portal): portal_skins = getToolByName(portal, 'portal_skins') path = portal_skins.getSkinPath('Plone Default') path = [elem.strip() for elem in path.split(',') if elem != '.svn'] path = ','.join(path) portal_skins.addSkinSelection('Portal Casas', path) portal_skins.manage_properties(default_skin = 'Portal Casas', request_varname = 'plone_skin', del_skin = 0, chosen = [] ) def setupTipo(portal): portal_types = getToolByName(portal, 'portal_types') portal_types['Plone Site'].global_allow = False addable_types=['Folder', 'Ombudsman', 'Document'] portal_types['Plone Site'].filter_content_types = True portal_types['Plone Site'].allowed_content_types = addable_types def addBackup(portal): DIR = INSTANCE_HOME BACKUP = INSTANCE_HOME+'/backup' if os.path.exists(BACKUP): pass else: os.system('mkdir %s/backup' % DIR) def addScheduler(portal): zope_scheduler = getattr(portal, 'zope_scheduler', None) if zope_scheduler is None: portal.manage_addProduct['ZopeScheduler'].manage_addZopeScheduler() zope_scheduler = getattr(portal, 'zope_scheduler', None) zope_scheduler.manage_addTask('scripts/packDB', ('0',), ('22',), [None], [1,3,5], (None)) zope_scheduler.manage_addTask('scripts/moveBackup', ('00',), ('23',), [None], [1,3,5], (None)) zope_scheduler.manage_addTask('scripts/backupFile', ('20',), ('23',), [None], [1,3,5], (None)) zope_scheduler.manage_addTask('scripts/atualizaPrevisao', ('0',), ('1','7','13','19',), [None], [None], (None)) def customizeBaseProperties(portal): skins_tool = getToolByName(portal, 'portal_skins') skin_folder = getattr(skins_tool, 'ILPortalCasas_public') base_prop = getattr(skin_folder, 'base_properties') custom_folder = getattr(skins_tool, 'custom') if base_prop.getId() not in custom_folder.objectIds(): base_prop.manage_doCustomize('custom') def uninstall(self): portal = self # the ids of the objects to keep locked_ids = ('historia', 'camara', 'agenda', 'processos-legislativos', 'leis', 'legislacao', 'prestacao-contas', \ 'licitacoes', 'editais', 'contabilidade', 'utilidades', 'imagens', 'enquetes', 'newsletters', \ 'foruns', 'noticias', 'eventos', 'saap', 'saal', 'scripts_backup', 'zope_scheduler', 'ouvidoria') po = self.portal_quickinstaller.ILPortalCasas.portalobjects for id in locked_ids: if id in po: po.remove(id) portal._delObject('portal_previsao') rss = getToolByName(portal, 'portal_syndication') idx = 0 for action in rss.listActions(): if action.getId() == 'syndication': rss.deleteActions((idx,)) break idx += 1 noticias = getattr(portal, 'noticias', None) if noticias.portal_syndication.isSiteSyndicationAllowed(): noticias.portal_syndication.disableSyndication(noticias) portal_controlpanel = getToolByName(portal,'portal_controlpanel') portal_controlpanel.unregisterConfiglet('ajuda_portal_casas') portal_controlpanel.unregisterConfiglet(PREVISAO_configlet['id']) portal_types = getToolByName(portal, 'portal_types') portal_types['Plone Site'].global_allow = True portal_types['Plone Site'].filter_content_types = False portal_publicator = getToolByName(portal, 'portal_publicator') portal_publicator.deletePublicationBoxes(['banners', 'links_utilidades', 'destaque', 'noticia']) events = getattr(portal, 'eventos', None) addable_types = ['Event', 'Topic'] if getattr(events.aq_base, 'setConstrainTypesMode', None) is not None: events.setConstrainTypesMode(1) events.setImmediatelyAddableTypes(addable_types) events.setLocallyAllowedTypes(addable_types) news = getattr(portal, 'noticias', None) addable_types = ['News Item', 'Topic'] if getattr(events.aq_base, 'setConstrainTypesMode', None) is not None: news.setConstrainTypesMode(1) news.setImmediatelyAddableTypes(addable_types) news.setLocallyAllowedTypes(addable_types)