source: publico/ILSAPL/branches/2.4/Portal.py @ 5298

Última Alteração nesse arquivo desde 5298 foi 5298, incluída por lucianodefazio, 8 anos atrás

Adiciona importação da pasta ata_sessao no Portal.py

File size: 6.4 KB
Linha 
1from Products.ILSAPL.config import GLOBALS
2from Products.CMFDefault.Portal import CMFSite
3
4from Products.CMFCore.permissions import AccessContentsInformation, ListFolderContents, ManageProperties, View
5from Products.CMFCore.DirectoryView import addDirectoryViews
6from Products.CMFCore.utils import getToolByName
7from Products.CMFDefault import Portal, DublinCore
8import Globals, csv
9
10from Products.ZODBMountPoint.MountedObject import manage_addMounts
11
12from AccessControl import ClassSecurityInfo
13from Acquisition import aq_base
14from ComputedAttribute import ComputedAttribute
15
16class SAPL(CMFSite):
17    """
18    Inicia um novo SAPL baseado em um CMFSite.
19    """
20    security=ClassSecurityInfo()
21    meta_type = portal_type = 'SAPL'
22
23    def processCSVFile(self, file, as_dict=0):
24        reader = csv.reader(file)
25        output_list = []
26        if as_dict:
27            headerList = reader.next()
28            for line in reader:
29                if line:
30                    dd = {}
31                    for i, key in enumerate(headerList):
32                        dd[key]=line[i]
33                    output_list.append(dd)
34        else:
35            for row in reader:
36                output_list.append(row)
37        return output_list
38
39
40Globals.InitializeClass(SAPL)
41
42
43
44class SAPLGenerator(Portal.PortalGenerator):
45
46    klass = SAPL
47
48    # Metodo para adicionar o mount point do sapl_documentos
49    def setupMountPoint(self, p):
50        path_sapl = p.getId()
51        try:
52            p.manage_addProduct['ZODBMountPoint'].manage_addMounts(paths=["/%s/sapl_documentos" % path_sapl],create_mount_points=1)
53        except:
54            p.manage_addProduct['OFSP'].manage_addFolder(id='sapl_documentos')
55
56    # Metodo para a importacao do SAPL
57    def setupConteudo(self, p):       
58        # estrutura do diretorio das materias legislativas
59        for o in ['props_sapl.zexp','ata_sessao.zexp','modelo.zexp','proposicao.zexp','parlamentar.zexp','materia.zexp','norma_juridica.zexp','oradores.zexp']:
60            p.sapl_documentos.manage_importObject(o)
61
62        # importar conteudos na raiz do SAPL
63        for o in ['XSD.zexp','XSLT.zexp']:
64            p.manage_importObject(o)
65
66    # Metodo para configurar a skin do SAPL
67    def setupSAPLSkins(self, p):
68        sk_tool = getToolByName(p, 'portal_skins')
69
70        # pega a definicao da skin layer basica do cmf
71        path=[elem.strip() for elem in sk_tool.getSkinPath('Basic').split(',')]
72
73        # retira as layers padroes do cmf
74        existing_layers=sk_tool.objectIds()
75        cmfdefault_layers=('zpt_topic', 'zpt_content', 'zpt_generic',
76                           'zpt_control', 'topic', 'content', 'generic',
77                           'control', 'Images', 'no_css', 'nouvelle')
78        for layer in cmfdefault_layers:
79            # tenha certeza que ira remover apenas se a layer nao existir
80            # ou se ela eh um Filesystem Directory View
81            # para prevenir a exclusao de custom layers
82            remove = 0
83            l_ob = getattr(sk_tool, layer, None)
84            if not l_ob or getattr(l_ob, 'meta_type', None) == \
85                   'Filesystem Directory View':
86                remove = 1
87            # remove da definicao de layer
88            if layer in path and remove: path.remove(layer)
89            # remove da skin tool
90            if layer in existing_layers and remove:
91                sk_tool.manage_delObjects(ids=[layer])
92
93        # adiciona a layer do ILSAPL
94        sapldir = 'sk_sapl'
95        if sapldir not in path:
96            try:
97                path.insert( path.index( 'custom')+1, sapldir )
98            except ValueError:
99                path.append( sapldir )
100
101        path=','.join(path)
102        sk_tool.addSkinSelection('SAPL', path, make_default=1)
103
104        addDirectoryViews( sk_tool, 'skins', GLOBALS )
105
106        skins_map=sk_tool._getSelections()
107
108        if skins_map.has_key('No CSS'):
109            del skins_map['No CSS']
110        if skins_map.has_key('Nouvelle'):
111            del skins_map['Nouvelle']
112        if skins_map.has_key('Basic'):
113            del skins_map['Basic']
114        sk_tool.selections=skins_map
115
116    # Metodo para inserir as novas roles.
117    def setupRoles(self, p):
118        p.__ac_roles__ = ('Administrador','Autor','Operador Sessao Plenaria','Operador','Operador Parlamentar','Operador Ordem Dia','Operador Norma','Operador Tabela Auxiliar','Operador Mesa Diretora','Operador Comissao','Operador Materia',)
119
120    # Metodo para criar usuario padrao
121    def setupAdicionarUsuarios(self, p):
122        p.acl_users._addUser(name='saploper',password='saploper',confirm='saploper',roles=['Operador'],domains=[])
123        p.acl_users._addUser(name='sapladm',password='sapladm',confirm='sapladm',roles=['Administrador'],domains=[])
124
125       
126    # Metodo para criacao da conexao do banco de dados
127    def setupDatabase(self, p, database):
128        if database == 'MySQL':
129            p.manage_addProduct['ZMySQLDA'].manage_addZMySQLConnection(id='dbcon_interlegis',title='Banco de Dados do SAPL (MySQL)',connection_string='interlegis sapl sapl')
130        else:
131            p.manage_addProduct['ZPsycopgDA'].manage_addZPsycopgConnection(id='dbcon_interlegis',title='Banco de Dados do SAPL (PostgreSQL)',connection_string='dbname=interlegis user=sapl password=sapl host=localhost')
132   
133    # Metodo para adicao da tool
134    def setupTool(self, p):
135        p.manage_addProduct['ILSAPL'].manage_addTool(type="SAPL Tool")
136
137    def setupSAPL(self, p):
138        self.setupMountPoint(p)
139        self.setupConteudo(p)
140        self.setupSAPLSkins(p)
141        self.setupRoles(p)
142        self.setupAdicionarUsuarios(p)
143        self.setupTool(p)
144
145    def create(self, parent, id, create_userfolder):
146        id = str(id)
147        portal = self.klass(id=id)
148        parent._setObject(id, portal)
149        p = parent.this()._getOb(id)
150        self.setup(p, create_userfolder)
151        self.setupSAPL(p)
152        return p
153
154from Products.PageTemplates.PageTemplateFile import PageTemplateFile
155
156manage_addSAPLForm = PageTemplateFile('www/addSAPL', globals())
157manage_addSAPLForm.__name__ = 'addSAPL'
158
159def manage_addSAPL(self, id, title='SAPL-Sistema de Apoio ao Processo Legislativo', description='',
160                   create_userfolder=1, database='MySQL',
161                   RESPONSE=None):
162    """ Adicionar uma instancia do SAPL.
163    """
164    gen = SAPLGenerator()
165    id = id.strip()
166    p = gen.create(self, id, create_userfolder)
167   
168    # cria a conexao com o banco de dados
169    gen.setupDatabase(p, database)
170
171    if RESPONSE is not None:
172        RESPONSE.redirect(p.absolute_url())
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.