diff --git a/genweb/organs/browser/configure.zcml b/genweb/organs/browser/configure.zcml index aa6b5fee..4794c144 100644 --- a/genweb/organs/browser/configure.zcml +++ b/genweb/organs/browser/configure.zcml @@ -125,4 +125,13 @@ permission="zope2.View" /> + + + diff --git a/genweb/organs/browser/stylesheets/genweb_organs.css b/genweb/organs/browser/stylesheets/genweb_organs.css index 72624382..1eca8457 100644 --- a/genweb/organs/browser/stylesheets/genweb_organs.css +++ b/genweb/organs/browser/stylesheets/genweb_organs.css @@ -1641,9 +1641,13 @@ span.estatpunt { text-align: center !important; } -.realitzada, .label-realitzada, -.open_organ, .label-open_organ, -.Obert, .label-Obert +.realitzada, +.label-realitzada, +.open_organ, +.label-open_organ, +.Públic, +.Obert, +.label-Obert { background-color: #456211 !important; padding: 1px 4px 2px !important; diff --git a/genweb/organs/browser/tools.py b/genweb/organs/browser/tools.py index d1433855..0cdddb9b 100644 --- a/genweb/organs/browser/tools.py +++ b/genweb/organs/browser/tools.py @@ -24,12 +24,13 @@ def getLoremIpsum(number, length, type_code): - """ Returns Lorem Ipsum text + """ Returns lorem ipsum text """ return requests.get('http://loripsum.net/api/{0}/{1}/{2}'.format(number, type_code, length), verify=False, timeout=10).content def getRandomImage(w, h): + """ Returns dummy image """ data = requests.get('http://dummyimage.com/{0}x{1}/aeaeae/ffffff'.format(w, h), verify=False, timeout=10).content return NamedBlobImage(data=data, filename=u'image.jpg', @@ -37,6 +38,7 @@ def getRandomImage(w, h): def create_organ_content(og_unit, og_type, og_string, og_title, og_id): + """ Creates all structure based on organ type """ open_og = api.content.create( type='genweb.organs.organgovern', title=og_title, @@ -96,20 +98,54 @@ def create_organ_content(og_unit, og_type, og_string, og_title, og_id): getLoremIpsum(2, 'long', 'html'), 'text/html', 'text/html').output punt.estatsLlista = u'Esborrany' - # For working tests code + # For working test code. If not added, Plone works, but test dont. constraints = ISelectableConstrainTypes(punt) constraints.setConstrainTypesMode(1) constraints.setLocallyAllowedTypes(('genweb.organs.subpunt', 'genweb.organs.acord', 'genweb.organs.file', 'genweb.organs.document')) - subpunt = api.content.create(type='genweb.organs.subpunt', id='subpunt', title='SubPunt Exemple', container=punt) + document_public = api.content.create( + type='genweb.organs.document', + id='docpublic', + title='Document contingut public', + container=punt) + document_public.description = u"Lorem Ipsum description" + document_public.defaultContent = RichTextValue( + getLoremIpsum(2, 'long', 'html'), + 'text/html', 'text/html').output + document_restringit = api.content.create( + type='genweb.organs.document', + id='docrestringit', + title='Document contingut restringit', + container=punt) + document_restringit.description = u"Lorem Ipsum description" + document_restringit.alternateContent = RichTextValue( + getLoremIpsum(2, 'long', 'html'), + 'text/html', 'text/html').output + document_both = api.content.create( + type='genweb.organs.document', + id='docboth', + title='Document contingut public i restringit', + container=punt) + document_both.description = u"Lorem Ipsum description" + document_both.defaultContent = RichTextValue( + getLoremIpsum(2, 'long', 'html'), + 'text/html', 'text/html').output + document_both.alternateContent = RichTextValue( + getLoremIpsum(2, 'long', 'html'), + 'text/html', 'text/html').output + # For working tests code + # constraints = ISelectableConstrainTypes(punt) + # constraints.setConstrainTypesMode(1) + # constraints.setLocallyAllowedTypes(('genweb.organs.subpunt', 'genweb.organs.acord', 'genweb.organs.file', 'genweb.organs.document')) + subpunt = api.content.create( + type='genweb.organs.subpunt', + id='subpunt', + title='SubPunt Exemple', + container=punt) subpunt.proposalPoint = 1.1 subpunt.defaultContent = RichTextValue( getLoremIpsum(2, 'long', 'html'), 'text/html', 'text/html').output subpunt.estatsLlista = u'Esborrany' - # constraints = ISelectableConstrainTypes(subpunt) - # constraints.setConstrainTypesMode(1) - # constraints.setLocallyAllowedTypes(('genweb.organs.document', 'genweb.organs.file')) - subacord = api.content.create( type='genweb.organs.acord', id='acord', @@ -121,10 +157,6 @@ def create_organ_content(og_unit, og_type, og_string, og_title, og_id): getLoremIpsum(2, 'long', 'html'), 'text/html', 'text/html').output subacord.estatsLlista = u'Esborrany' - # constraints = ISelectableConstrainTypes(subacord) - # constraints.setConstrainTypesMode(1) - # constraints.setLocallyAllowedTypes(('genweb.organs.document', 'genweb.organs.file')) - acord = api.content.create( type='genweb.organs.acord', id='acord', @@ -136,12 +168,15 @@ def create_organ_content(og_unit, og_type, og_string, og_title, og_id): getLoremIpsum(2, 'long', 'html'), 'text/html', 'text/html').output acord.estatsLlista = u'Esborrany' - acord.estatsLlista = u'Esborrany' - # constraints = ISelectableConstrainTypes(acord) - # constraints.setConstrainTypesMode(1) - # constraints.setLocallyAllowedTypes(('genweb.organs.document', 'genweb.organs.file')) - # # Creating files - # transaction.commit() + api.content.copy(source=document_public, target=acord, safe_id=True) + api.content.copy(source=document_restringit, target=acord, safe_id=True) + api.content.copy(source=document_both, target=acord, safe_id=True) + api.content.copy(source=document_public, target=subpunt, safe_id=True) + api.content.copy(source=document_restringit, target=subpunt, safe_id=True) + api.content.copy(source=document_both, target=subpunt, safe_id=True) + api.content.copy(source=document_public, target=subacord, safe_id=True) + api.content.copy(source=document_restringit, target=subacord, safe_id=True) + api.content.copy(source=document_both, target=subacord, safe_id=True) pdf_file = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'tests')) + '/testfile.pdf' public_file = NamedBlobFile( data=open(pdf_file, 'r').read(), @@ -153,20 +188,50 @@ def create_organ_content(og_unit, og_type, og_string, og_title, og_id): contentType='application/pdf', filename=u'pdf-restringit.pdf' ) + acta = api.content.create( + type='genweb.organs.acta', + id='acta', + title='Acta Exemple', + container=session_open) + acta.llocConvocatoria = u'Barcelona' + acta.enllacVideo = u'http://www.upc.edu' + acta.ordenDelDia = RichTextValue( + getLoremIpsum(2, 'long', 'html'), + 'text/html', 'text/html').output + acta.membresConvocats = acta.ordenDelDia + acta.membresConvidats = acta.ordenDelDia + acta.llistaExcusats = acta.ordenDelDia + acta.llistaNoAssistens = acta.ordenDelDia + acta.file = public_file + acta.horaInici = session_open.start + acta.horaFi = session_open.end + acc.horaFi = tz.localize(datetime(2018, 11, 20, 10, 0)) + audio = api.content.create( + type='genweb.organs.audio', + id='audio', + title='Audio Exemple', + container=acta) + audio.description = u'audio mp3 description' + mp3_file = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'tests')) + '/testaudio.mp3' + audio_file = NamedBlobFile( + data=open(mp3_file, 'r').read(), + contentType='audio/mpeg', + filename=u'acta-audio.mp3' + ) + audio.file = audio_file + filepunt_1 = api.content.create( type='genweb.organs.file', id='public', title='Fitxer NOMÉS Públic', container=punt) filepunt_1.visiblefile = public_file - filepunt_2 = api.content.create( type='genweb.organs.file', id='restringit', title='Fitxer NOMÉS Restringit', container=punt) filepunt_2.hiddenfile = restricted_file - filepunt_3 = api.content.create( type='genweb.organs.file', id='public-restringit', @@ -174,80 +239,15 @@ def create_organ_content(og_unit, og_type, og_string, og_title, og_id): container=punt) filepunt_3.visiblefile = public_file filepunt_3.hiddenfile = restricted_file - - filepunt_4 = api.content.create( - type='genweb.organs.file', - id='public', - title='Fitxer NOMÉS Públic', - container=subpunt) - filepunt_4.visiblefile = public_file - - filepunt_5 = api.content.create( - type='genweb.organs.file', - id='restringit', - title='Fitxer NOMÉS Restringit', - container=subpunt) - filepunt_5.hiddenfile = restricted_file - - filepunt_6 = api.content.create( - type='genweb.organs.file', - id='public-restringit', - title='Fitxer Públic i Restringit', - container=subpunt) - filepunt_6.visiblefile = public_file - filepunt_6.hiddenfile = restricted_file - - constraints = ISelectableConstrainTypes(acord) - constraints.setConstrainTypesMode(1) - constraints.setLocallyAllowedTypes(('genweb.organs.document', 'genweb.organs.file')) - - filepunt_7 = api.content.create( - type='genweb.organs.file', - id='public', - title='Fitxer NOMÉS Públic', - container=acord) - filepunt_7.visiblefile = public_file - - filepunt_8 = api.content.create( - type='genweb.organs.file', - id='restringit', - title='Fitxer NOMÉS Restringit', - container=acord) - filepunt_8.hiddenfile = restricted_file - - filepunt_9 = api.content.create( - type='genweb.organs.file', - id='public-restringit', - title='Fitxer Públic i Restringit', - container=acord) - filepunt_9.visiblefile = public_file - filepunt_9.hiddenfile = restricted_file - - constraints = ISelectableConstrainTypes(subacord) - constraints.setConstrainTypesMode(1) - constraints.setLocallyAllowedTypes(('genweb.organs.document', 'genweb.organs.file')) - - filepunt_10 = api.content.create( - type='genweb.organs.file', - id='public', - title='Fitxer NOMÉS Públic', - container=subacord) - filepunt_10.visiblefile = public_file - - filepunt_11 = api.content.create( - type='genweb.organs.file', - id='restringit', - title='Fitxer NOMÉS Restringit', - container=subacord) - filepunt_11.hiddenfile = restricted_file - - filepunt_12 = api.content.create( - type='genweb.organs.file', - id='public-restringit', - title='Fitxer Públic i Restringit', - container=subacord) - filepunt_12.visiblefile = public_file - filepunt_12.hiddenfile = restricted_file + api.content.copy(source=filepunt_1, target=subpunt, safe_id=True) + api.content.copy(source=filepunt_2, target=subpunt, safe_id=True) + api.content.copy(source=filepunt_3, target=subpunt, safe_id=True) + api.content.copy(source=filepunt_1, target=acord, safe_id=True) + api.content.copy(source=filepunt_2, target=acord, safe_id=True) + api.content.copy(source=filepunt_3, target=acord, safe_id=True) + api.content.copy(source=filepunt_1, target=subacord, safe_id=True) + api.content.copy(source=filepunt_2, target=subacord, safe_id=True) + api.content.copy(source=filepunt_3, target=subacord, safe_id=True) sessio_convocada = api.content.copy(source=session_open, target=open_og, id='convocada') sessio_convocada.title = 'Sessió Convocada' @@ -606,15 +606,15 @@ def render(self): return json.dumps(results, indent=2, sort_keys=True) -class createdTestContent(grok.View): - # Este código crea contenido de prueba para hacer TEST de acceso +class createTestContent(grok.View): + # Este código crea contenido de prueba para hacer TEST de acceso y checking de permisos grok.context(Interface) grok.name('create_test_content') grok.require('cmf.ManagePortal') grok.layer(IGenwebOrgansLayer) def render(self): - print "Creating test content folders..." + print "## Executed create_test_content view to create testingfolder content..." messages = IStatusMessage(self.request) portal = api.portal.get() try: @@ -629,11 +629,11 @@ def render(self): container=portal['ca']) create_organ_content(og_unit, 'open_organ', 'OG.OPEN', 'Organ TEST Obert', 'obert') - create_organ_content(og_unit, 'restricted_to_affected_organ', 'OG.AFFECTED', 'Organ TEST restringit a AFECTATS', 'afectats') - create_organ_content(og_unit, 'restricted_to_members_organ', 'OG.MEMBERS', 'Organ TEST restringit a MEMBRES', 'membres') + # create_organ_content(og_unit, 'restricted_to_affected_organ', 'OG.AFFECTED', 'Organ TEST restringit a AFECTATS', 'afectats') + # create_organ_content(og_unit, 'restricted_to_members_organ', 'OG.MEMBERS', 'Organ TEST restringit a MEMBRES', 'membres') - messages.add('Created test folder with TEST content to check permissions.', type='warning') - # self.request.response.redirect(self.context.absolute_url()) + messages.add('Created testingfolder with TEST content to check permissions.', type='warning') + self.request.response.redirect(self.context.absolute_url()) class testFilesAccess(grok.View): diff --git a/genweb/organs/browser/viewlets_templates/header.pt b/genweb/organs/browser/viewlets_templates/header.pt index 6a4a9183..738ed027 100644 --- a/genweb/organs/browser/viewlets_templates/header.pt +++ b/genweb/organs/browser/viewlets_templates/header.pt @@ -53,6 +53,12 @@ Identifica't +
  • + +   + Logout + +
  • @@ -90,6 +96,12 @@ Identifica't +
  • + +   + Logout + +
  •  Cercador
  • diff --git a/genweb/organs/browser/views.py b/genweb/organs/browser/views.py index 4b1caa2c..1d3aab71 100644 --- a/genweb/organs/browser/views.py +++ b/genweb/organs/browser/views.py @@ -15,6 +15,7 @@ from operator import itemgetter import datetime import DateTime +import json # Disable CSRF try: @@ -602,7 +603,7 @@ def canView(self): if utils.isManager(self): return True estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.organType + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): @@ -729,3 +730,87 @@ def getTitle(self): return self.context.Title() else: return self.request.response.redirect(api.portal.get().absolute_url()) + + +class findFileProperties(BrowserView): + + def __call__(self): + # Return type properties + # + acta = api.content.find(portal_type='genweb.organs.acta') + audio = api.content.find(portal_type='genweb.organs.audio') + document = api.content.find(portal_type='genweb.organs.document') + file = api.content.find(portal_type='genweb.organs.file') + organgovern = api.content.find(portal_type='genweb.organs.organgovern') + acord = api.content.find(portal_type='genweb.organs.acord') + punt = api.content.find(portal_type='genweb.organs.punt') + sessio = api.content.find(portal_type='genweb.organs.sessio') + subpunt = api.content.find(portal_type='genweb.organs.subpunt') + + actas = [] + audios = [] + documents = [] + files = [] + organs = [] + acords = [] + punts = [] + sessions = [] + subpunts = [] + + for item in acta: + actas.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + for item in audio: + audios.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + for item in document: + documents.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + for item in file: + files.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + for item in organgovern: + organs.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + for item in acord: + acords.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + for item in punt: + punts.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + for item in sessio: + sessions.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + for item in subpunt: + subpunts.append(dict( + organType=item.organType, + path=item.getPath(), + id=item.id)) + results = dict( + actas=actas, + audios=audios, + documents=documents, + files=files, + organs=organs, + acords=acords, + punts=punts, + sessions=sessions, + subpunts=subpunts + ) + return json.dumps(results) diff --git a/genweb/organs/browser/webservice.py b/genweb/organs/browser/webservice.py index 69c07a08..a4608c5e 100644 --- a/genweb/organs/browser/webservice.py +++ b/genweb/organs/browser/webservice.py @@ -86,7 +86,7 @@ def allAcords(self): roles = api.user.get_roles(obj=element.aq_parent.aq_parent, username=username) else: roles = [] - organ_tipus = element.aq_parent.aq_parent.organType + organ_tipus = element.organType estatSessio = api.content.get_state(obj=element.aq_parent) if organ_tipus == 'open_organ': if estatSessio == 'planificada' and ('OG1-Secretari' in roles or 'OG2-Editor' in roles): @@ -135,7 +135,7 @@ def allAcords(self): roles = api.user.get_roles(obj=element.aq_parent.aq_parent.aq_parent, username=username) else: roles = [] - organ_tipus = element.aq_parent.aq_parent.aq_parent.organType + organ_tipus = element.organType estatSessio = api.content.get_state(obj=element.aq_parent.aq_parent) if organ_tipus == 'open_organ': if estatSessio == 'planificada' and ('OG1-Secretari' in roles or 'OG2-Editor' in roles): diff --git a/genweb/organs/content/acord.py b/genweb/organs/content/acord.py index 61900eef..4aea1817 100644 --- a/genweb/organs/content/acord.py +++ b/genweb/organs/content/acord.py @@ -170,7 +170,7 @@ def canView(self): return True estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.organType # TODO: WHY??? Funciona amb 1 i 2 level up + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): diff --git a/genweb/organs/content/audio.py b/genweb/organs/content/audio.py index 1f0ad4b3..bd4b9ddb 100644 --- a/genweb/organs/content/audio.py +++ b/genweb/organs/content/audio.py @@ -16,6 +16,7 @@ from plone import api from plone.namedfile.utils import get_contenttype from zope.schema import ValidationError +from genweb.organs import utils grok.templatedir("templates") @@ -78,15 +79,22 @@ class View(grok.View): grok.template('audio_view') def canView(self): - """ Return true if user is Editor/Secretari/Manager """ - try: - username = api.user.get_current().id - roles = api.user.get_roles(username=username, obj=self.context) - if 'OG2-Editor' in roles or 'OG1-Secretari' in roles or 'Manager' in roles: - return True - else: - raise Unauthorized - except: + # Permissions to view audio + if utils.isManager(self): + return True + estatSessio = utils.session_wf_state(self) + + if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): + return True + elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return True + elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return True + elif estatSessio == 'tancada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return True + elif estatSessio == 'en_correccio' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return True + else: raise Unauthorized def is_opusfile(self): diff --git a/genweb/organs/content/document.py b/genweb/organs/content/document.py index b83961e7..6474fff9 100644 --- a/genweb/organs/content/document.py +++ b/genweb/organs/content/document.py @@ -83,7 +83,7 @@ def viewDocumentPublic(self): """ if utils.isManager(self): return True - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if self.context.defaultContent and self.context.alternateContent: if organ_tipus == 'open_organ': if utils.isMembre(self): @@ -137,7 +137,7 @@ def viewDocumentReserved(self): """ if utils.isManager(self): return True - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if self.context.defaultContent and self.context.alternateContent: if organ_tipus == 'open_organ': if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): @@ -182,7 +182,7 @@ def canView(self): if utils.isManager(self): return True estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): return True diff --git a/genweb/organs/content/file.py b/genweb/organs/content/file.py index 7379e54e..fc098c1e 100644 --- a/genweb/organs/content/file.py +++ b/genweb/organs/content/file.py @@ -146,7 +146,7 @@ def viewPublic(self): """ if utils.isManager(self): return True - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if self.context.visiblefile and self.context.hiddenfile: if organ_tipus == 'open_organ': if utils.isMembre(self): @@ -210,7 +210,7 @@ def viewReserved(self): """ if utils.isManager(self): return True - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if self.context.visiblefile and self.context.hiddenfile: if organ_tipus == 'open_organ': if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): @@ -258,7 +258,7 @@ def canView(self): if utils.isManager(self): return True estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): return True diff --git a/genweb/organs/content/punt.py b/genweb/organs/content/punt.py index d8e9589f..61e810b8 100644 --- a/genweb/organs/content/punt.py +++ b/genweb/organs/content/punt.py @@ -165,7 +165,7 @@ def canView(self): return True estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): diff --git a/genweb/organs/content/sessio.py b/genweb/organs/content/sessio.py index 78b1bdc3..15fb17ec 100644 --- a/genweb/organs/content/sessio.py +++ b/genweb/organs/content/sessio.py @@ -661,7 +661,7 @@ def canView(self): if utils.isManager(self): return True estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): diff --git a/genweb/organs/content/subpunt.py b/genweb/organs/content/subpunt.py index dfefbeef..97617e0d 100644 --- a/genweb/organs/content/subpunt.py +++ b/genweb/organs/content/subpunt.py @@ -147,7 +147,7 @@ def canView(self): if utils.isManager(self): return True estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.aq_parent.organType # 2 levels up + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): diff --git a/genweb/organs/locales/ca/LC_MESSAGES/genweb.organs.po b/genweb/organs/locales/ca/LC_MESSAGES/genweb.organs.po index ada8614c..00764a00 100644 --- a/genweb/organs/locales/ca/LC_MESSAGES/genweb.organs.po +++ b/genweb/organs/locales/ca/LC_MESSAGES/genweb.organs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2018-10-15 12:58+0000\n" +"POT-Creation-Date: 2018-11-05 11:09+0000\n" "PO-Revision-Date: 2017-04-20 14:05+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -116,11 +116,11 @@ msgstr "Contingut restringit" msgid "Altres" msgstr "Altres" -#: ./genweb/organs/browser/views/allsessions.pt:61 +#: ./genweb/organs/browser/views/allsessions.pt:27 msgid "Amaga sessions anteriors" msgstr "Amaga sessions anteriors" -#: ./genweb/organs/utils.py:113 +#: ./genweb/organs/utils.py:119 msgid "Anonymous user" msgstr "Usuari anònim" @@ -177,7 +177,7 @@ msgstr "Cancel·la" msgid "Cerca" msgstr "Cerca" -#: ./genweb/organs/browser/viewlets_templates/header.pt:57 +#: ./genweb/organs/browser/viewlets_templates/header.pt:63 msgid "Cercador" msgstr "Cercador" @@ -189,31 +189,31 @@ msgstr "Cercar..." msgid "Changed Title" msgstr "S'ha canviat el títol" -#: ./genweb/organs/browser/views.py:503 +#: ./genweb/organs/browser/views.py:504 msgid "Changed acord color state" msgstr "S'ha canviat l'estat de l'acord" -#: ./genweb/organs/browser/views.py:533 +#: ./genweb/organs/browser/views.py:534 msgid "Changed acord intern state color" msgstr "S'ha canviat l'estat de l'acord" -#: ./genweb/organs/browser/views.py:499 +#: ./genweb/organs/browser/views.py:500 msgid "Changed punt color state" msgstr "S'ha canviat l'estat del punt informatiu" -#: ./genweb/organs/browser/views.py:185 +#: ./genweb/organs/browser/views.py:186 msgid "Changed punt number with drag&drop" msgstr "S'ha canviat el número de punt informatiu al moure l'element" -#: ./genweb/organs/browser/views.py:497 +#: ./genweb/organs/browser/views.py:498 msgid "Changed recursive color state of acord inside punt" msgstr "S'ha canviat l'estat de l'acord" -#: ./genweb/organs/browser/views.py:495 +#: ./genweb/organs/browser/views.py:496 msgid "Changed recursive color state of subpunt inside punt" msgstr "S'ha canviat l'estat del punt informatiu" -#: ./genweb/organs/browser/views.py:531 +#: ./genweb/organs/browser/views.py:532 msgid "Changed subpunt intern state color" msgstr "S'ha canviat l'estat del punt informatiu" @@ -283,11 +283,11 @@ msgstr "Data" msgid "Data i hora" msgstr "Data" -#: ./genweb/organs/browser/views/allsessions.pt:32 +#: ./genweb/organs/browser/views/allsessions.pt:42 msgid "Data i hora fi" msgstr "Data i hora de finalització" -#: ./genweb/organs/browser/views/allsessions.pt:29 +#: ./genweb/organs/browser/views/allsessions.pt:39 msgid "Data i hora inici" msgstr "Data i hora d'inici" @@ -311,7 +311,7 @@ msgstr "Punt el·liminat" msgid "Deleted subpunt" msgstr "Punt el·liminat" -#: ./genweb/organs/browser/views.py:116 +#: ./genweb/organs/browser/views.py:117 msgid "Deleted via javascript" msgstr "Esborrat via javascript" @@ -472,7 +472,7 @@ msgstr "Informa del resultat de la sessió" msgid "Invalid PDF file" msgstr "El fitxer seleccionat no sembla un fitxer PDF." -#: ./genweb/organs/content/audio.py:26 +#: ./genweb/organs/content/audio.py:27 msgid "Invalid audio file" msgstr "El fitxer seleccionat no sembla en format d'àudio." @@ -512,6 +512,10 @@ msgstr "Imatge que es farà servir com a logotip i que s'utilitzarà en la impre msgid "Logo organs folder description" msgstr "Imatge que es farà servir com a imatge de capçalera en aquesta unitat i al moment d'imprimir les actes dels òrgans. Les dimensions han de ser 978x78 píxels." +#: ./genweb/organs/browser/viewlets_templates/header.pt:58 +msgid "Logout" +msgstr "Desconnecta" + #: ./genweb/organs/content/organgovern.py:112 msgid "Mail address help" msgstr "Adreça o adreces a les quals arribaran els missatges quan hi hagi una notificació de l'òrgan. Es poden posar diverses adreces de correu. Han d'anar SEPARADES PER COMES." @@ -588,11 +592,11 @@ msgstr "S'ha modificat un punt informatiu" msgid "Modified subpunt" msgstr "S'ha modificat un punt informatiu" -#: ./genweb/organs/browser/views/allsessions.pt:59 +#: ./genweb/organs/browser/views/allsessions.pt:25 msgid "Mostra sessions anteriors" msgstr "Mostra sessions anteriors" -#: ./genweb/organs/browser/views.py:231 +#: ./genweb/organs/browser/views.py:232 msgid "Moved subpunt by drag&drop" msgstr "S'ha canviat el número de punt informatiu al moure'l" @@ -647,7 +651,7 @@ msgstr "Membre" msgid "OG4-Afectat" msgstr "Afectat" -#: ./genweb/organs/content/audio.py:56 +#: ./genweb/organs/content/audio.py:57 msgid "Only audio files are permitted." msgstr "Només estan permessos els fitxers de tipus àudio." @@ -694,7 +698,7 @@ msgstr "Tipus d'òrgan" msgid "Organ Title" msgstr "Nom de l'òrgan" -#: ./genweb/organs/browser/views/allsessions.pt:26 +#: ./genweb/organs/browser/views/allsessions.pt:36 #: ./genweb/organs/content/templates/impersonate_as.pt:59 #: ./genweb/organs/content/templates/sessio_view.pt:201 msgid "Organ de govern" @@ -712,7 +716,7 @@ msgstr "Llista de noms dels membres convidats a les sessions d'aquest òrgan de msgid "Organ type" msgstr "Tipus d'òrgan de govern" -#: ./genweb/organs/portlets/portlet_calendar.py:34 +#: ./genweb/organs/portlets/portlet_calendar.py:31 msgid "Organs Calendar" msgstr "Calendari Òrgans" @@ -741,7 +745,7 @@ msgstr "Òrgans vinculats amb mi" msgid "Plantilles" msgstr "Plantilles" -#: ./genweb/organs/content/audio.py:55 +#: ./genweb/organs/content/audio.py:56 msgid "Please upload a media file" msgstr "Seleccioni un fitxer de tipus àudio" @@ -825,11 +829,11 @@ msgstr "Destinataris" msgid "Relacio Assistents" msgstr "Relació d'assistents" -#: ./genweb/organs/browser/views.py:432 +#: ./genweb/organs/browser/views.py:433 msgid "Reload points manually" msgstr "Numera punts" -#: ./genweb/organs/browser/views.py:378 +#: ./genweb/organs/browser/views.py:379 msgid "Reload proposalPoints manually" msgstr "Numera acords" @@ -983,7 +987,7 @@ msgstr "Acord" msgid "Tab acta" msgstr "Acta" -#: ./genweb/organs/content/audio.py:33 +#: ./genweb/organs/content/audio.py:34 msgid "Tab audio" msgstr "Àudio" @@ -1066,7 +1070,7 @@ msgstr "[Acord " msgid "[Acord sense numeracio]" msgstr "[Acord sense numeració]" -#: ./genweb/organs/browser/views.py:288 +#: ./genweb/organs/browser/views.py:289 #: ./genweb/organs/content/acta.py:204 msgid "[Acord sense numerar]" msgstr "[Acord sense numeració]" @@ -1077,11 +1081,11 @@ msgstr "[Acord sense numeració]" msgid "acord" msgstr "Acord" -#: ./genweb/organs/search.py:323 +#: ./genweb/organs/search.py:306 msgid "alphabetically" msgstr "alfabèticament" -#: ./genweb/organs/search.py:320 +#: ./genweb/organs/search.py:303 msgid "date (newest first)" msgstr "data (més recent primer)" @@ -1136,7 +1140,7 @@ msgstr "Restringit a afectats" msgid "restricted_to_members_organ" msgstr "Restringit a membres" -#: ./genweb/organs/browser/views.py:561 +#: ./genweb/organs/browser/views.py:562 #: ./genweb/organs/content/impersonate_as.py:143 #: ./genweb/organs/content/punt.py:148 msgid "sense numeracio" @@ -1157,10 +1161,10 @@ msgstr "Darrer any" msgid "title_search_title" msgstr "Cerca al lloc web" -#: ./genweb/organs/portlets/portlet_calendar.pt:96 +#: ./genweb/organs/portlets/portlet_calendar.pt:78 msgid "to" msgstr "a" -#: ./genweb/organs/portlets/portlet_calendar.pt:85 +#: ./genweb/organs/portlets/portlet_calendar.pt:63 msgid "veure totes les sessions" msgstr "veure totes les sessions" diff --git a/genweb/organs/locales/en/LC_MESSAGES/genweb.organs.po b/genweb/organs/locales/en/LC_MESSAGES/genweb.organs.po index f581a76a..c41de394 100644 --- a/genweb/organs/locales/en/LC_MESSAGES/genweb.organs.po +++ b/genweb/organs/locales/en/LC_MESSAGES/genweb.organs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2018-10-15 12:58+0000\n" +"POT-Creation-Date: 2018-11-05 11:09+0000\n" "PO-Revision-Date: 2017-04-20 14:09+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -116,11 +116,11 @@ msgstr "Private content" msgid "Altres" msgstr "Others" -#: ./genweb/organs/browser/views/allsessions.pt:61 +#: ./genweb/organs/browser/views/allsessions.pt:27 msgid "Amaga sessions anteriors" msgstr "Hide previous sessions" -#: ./genweb/organs/utils.py:113 +#: ./genweb/organs/utils.py:119 msgid "Anonymous user" msgstr "Anonymous user" @@ -177,7 +177,7 @@ msgstr "Cancel" msgid "Cerca" msgstr "Search" -#: ./genweb/organs/browser/viewlets_templates/header.pt:57 +#: ./genweb/organs/browser/viewlets_templates/header.pt:63 msgid "Cercador" msgstr "Search" @@ -189,31 +189,31 @@ msgstr "Search..." msgid "Changed Title" msgstr "Changed Title" -#: ./genweb/organs/browser/views.py:503 +#: ./genweb/organs/browser/views.py:504 msgid "Changed acord color state" msgstr "Changed agreement state" -#: ./genweb/organs/browser/views.py:533 +#: ./genweb/organs/browser/views.py:534 msgid "Changed acord intern state color" msgstr "Changed agreement state" -#: ./genweb/organs/browser/views.py:499 +#: ./genweb/organs/browser/views.py:500 msgid "Changed punt color state" msgstr "Changed point state" -#: ./genweb/organs/browser/views.py:185 +#: ./genweb/organs/browser/views.py:186 msgid "Changed punt number with drag&drop" msgstr "Changed point number with drag&drop option" -#: ./genweb/organs/browser/views.py:497 +#: ./genweb/organs/browser/views.py:498 msgid "Changed recursive color state of acord inside punt" msgstr "Changed agreement state" -#: ./genweb/organs/browser/views.py:495 +#: ./genweb/organs/browser/views.py:496 msgid "Changed recursive color state of subpunt inside punt" msgstr "Changed point state" -#: ./genweb/organs/browser/views.py:531 +#: ./genweb/organs/browser/views.py:532 msgid "Changed subpunt intern state color" msgstr "Changed point state" @@ -283,11 +283,11 @@ msgstr "Date" msgid "Data i hora" msgstr "Date and Time" -#: ./genweb/organs/browser/views/allsessions.pt:32 +#: ./genweb/organs/browser/views/allsessions.pt:42 msgid "Data i hora fi" msgstr "End Date and Time" -#: ./genweb/organs/browser/views/allsessions.pt:29 +#: ./genweb/organs/browser/views/allsessions.pt:39 msgid "Data i hora inici" msgstr "Start Date and Time" @@ -311,7 +311,7 @@ msgstr "Delete point" msgid "Deleted subpunt" msgstr "Deleted point" -#: ./genweb/organs/browser/views.py:116 +#: ./genweb/organs/browser/views.py:117 msgid "Deleted via javascript" msgstr "Deleted via javascript" @@ -472,7 +472,7 @@ msgstr "Inform" msgid "Invalid PDF file" msgstr "Invalid PDF file" -#: ./genweb/organs/content/audio.py:26 +#: ./genweb/organs/content/audio.py:27 msgid "Invalid audio file" msgstr "Invalid audio file" @@ -512,6 +512,10 @@ msgstr "Logo that can be used to print in Documents and Meeting reports." msgid "Logo organs folder description" msgstr "Logo used in the header and when printing the Meeting Reports. Used size is 978x78 pixels" +#: ./genweb/organs/browser/viewlets_templates/header.pt:58 +msgid "Logout" +msgstr "Log out" + #: ./genweb/organs/content/organgovern.py:112 msgid "Mail address help" msgstr "Address or addresses to which messages arrive when a notification of the body is done. Multiple address are valid if they are separated by comma value." @@ -588,11 +592,11 @@ msgstr "Modified point" msgid "Modified subpunt" msgstr "Modified point" -#: ./genweb/organs/browser/views/allsessions.pt:59 +#: ./genweb/organs/browser/views/allsessions.pt:25 msgid "Mostra sessions anteriors" msgstr "Show previous sessions" -#: ./genweb/organs/browser/views.py:231 +#: ./genweb/organs/browser/views.py:232 msgid "Moved subpunt by drag&drop" msgstr "Moved point by drag&drop" @@ -647,7 +651,7 @@ msgstr "OG3-Member" msgid "OG4-Afectat" msgstr "OG4-Affected" -#: ./genweb/organs/content/audio.py:56 +#: ./genweb/organs/content/audio.py:57 msgid "Only audio files are permitted." msgstr "This file does not seem to be an audio file" @@ -694,7 +698,7 @@ msgstr "Organ of government type" msgid "Organ Title" msgstr "Organ of government title" -#: ./genweb/organs/browser/views/allsessions.pt:26 +#: ./genweb/organs/browser/views/allsessions.pt:36 #: ./genweb/organs/content/templates/impersonate_as.pt:59 #: ./genweb/organs/content/templates/sessio_view.pt:201 msgid "Organ de govern" @@ -712,7 +716,7 @@ msgstr "List of names of people who are invited to the meetings of this body sys msgid "Organ type" msgstr "Organ of government type" -#: ./genweb/organs/portlets/portlet_calendar.py:34 +#: ./genweb/organs/portlets/portlet_calendar.py:31 msgid "Organs Calendar" msgstr "Organs Calendar" @@ -741,7 +745,7 @@ msgstr "My related organs" msgid "Plantilles" msgstr "Templates" -#: ./genweb/organs/content/audio.py:55 +#: ./genweb/organs/content/audio.py:56 msgid "Please upload a media file" msgstr "Please upload a media file" @@ -825,11 +829,11 @@ msgstr "Recipients" msgid "Relacio Assistents" msgstr "List of assistants" -#: ./genweb/organs/browser/views.py:432 +#: ./genweb/organs/browser/views.py:433 msgid "Reload points manually" msgstr "Number points" -#: ./genweb/organs/browser/views.py:378 +#: ./genweb/organs/browser/views.py:379 msgid "Reload proposalPoints manually" msgstr "Number points" @@ -983,7 +987,7 @@ msgstr "Agreement" msgid "Tab acta" msgstr "Meeting report" -#: ./genweb/organs/content/audio.py:33 +#: ./genweb/organs/content/audio.py:34 msgid "Tab audio" msgstr "Audio" @@ -1066,7 +1070,7 @@ msgstr "[Agreement " msgid "[Acord sense numeracio]" msgstr "[Agreement without number]" -#: ./genweb/organs/browser/views.py:288 +#: ./genweb/organs/browser/views.py:289 #: ./genweb/organs/content/acta.py:204 msgid "[Acord sense numerar]" msgstr "[Agreement without number]" @@ -1077,11 +1081,11 @@ msgstr "[Agreement without number]" msgid "acord" msgstr "Agreement" -#: ./genweb/organs/search.py:323 +#: ./genweb/organs/search.py:306 msgid "alphabetically" msgstr "alphabetically" -#: ./genweb/organs/search.py:320 +#: ./genweb/organs/search.py:303 msgid "date (newest first)" msgstr "date (newest first)" @@ -1136,7 +1140,7 @@ msgstr "Restrcited to affected" msgid "restricted_to_members_organ" msgstr "Restricted to members" -#: ./genweb/organs/browser/views.py:561 +#: ./genweb/organs/browser/views.py:562 #: ./genweb/organs/content/impersonate_as.py:143 #: ./genweb/organs/content/punt.py:148 msgid "sense numeracio" @@ -1157,10 +1161,10 @@ msgstr "Last year" msgid "title_search_title" msgstr "Search on the Site" -#: ./genweb/organs/portlets/portlet_calendar.pt:96 +#: ./genweb/organs/portlets/portlet_calendar.pt:78 msgid "to" msgstr "to" -#: ./genweb/organs/portlets/portlet_calendar.pt:85 +#: ./genweb/organs/portlets/portlet_calendar.pt:63 msgid "veure totes les sessions" msgstr "show all sessions" diff --git a/genweb/organs/locales/es/LC_MESSAGES/genweb.organs.po b/genweb/organs/locales/es/LC_MESSAGES/genweb.organs.po index e1e4269f..ff133911 100644 --- a/genweb/organs/locales/es/LC_MESSAGES/genweb.organs.po +++ b/genweb/organs/locales/es/LC_MESSAGES/genweb.organs.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2018-10-15 12:58+0000\n" +"POT-Creation-Date: 2018-11-05 11:09+0000\n" "PO-Revision-Date: 2017-04-20 14:05+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -116,11 +116,11 @@ msgstr "Contenido restringido" msgid "Altres" msgstr "Otros" -#: ./genweb/organs/browser/views/allsessions.pt:61 +#: ./genweb/organs/browser/views/allsessions.pt:27 msgid "Amaga sessions anteriors" msgstr "Oculta sesiones anteriores" -#: ./genweb/organs/utils.py:113 +#: ./genweb/organs/utils.py:119 msgid "Anonymous user" msgstr "Usuario anónimo" @@ -177,7 +177,7 @@ msgstr "Cancela" msgid "Cerca" msgstr "Busca" -#: ./genweb/organs/browser/viewlets_templates/header.pt:57 +#: ./genweb/organs/browser/viewlets_templates/header.pt:63 msgid "Cercador" msgstr "Buscador" @@ -189,31 +189,31 @@ msgstr "Buscar..." msgid "Changed Title" msgstr "Se ha cambiado el título" -#: ./genweb/organs/browser/views.py:503 +#: ./genweb/organs/browser/views.py:504 msgid "Changed acord color state" msgstr "Se ha cambiado el estado del acuerdo" -#: ./genweb/organs/browser/views.py:533 +#: ./genweb/organs/browser/views.py:534 msgid "Changed acord intern state color" msgstr "Se ha cambiado el estado del acuerdo" -#: ./genweb/organs/browser/views.py:499 +#: ./genweb/organs/browser/views.py:500 msgid "Changed punt color state" msgstr "Se ha cambiado el estado del punto" -#: ./genweb/organs/browser/views.py:185 +#: ./genweb/organs/browser/views.py:186 msgid "Changed punt number with drag&drop" msgstr "Se ha cambiado el número de punto informativo al mover el elemento" -#: ./genweb/organs/browser/views.py:497 +#: ./genweb/organs/browser/views.py:498 msgid "Changed recursive color state of acord inside punt" msgstr "Se ha cambiado el estado del acuerdo" -#: ./genweb/organs/browser/views.py:495 +#: ./genweb/organs/browser/views.py:496 msgid "Changed recursive color state of subpunt inside punt" msgstr "Se ha cambiado el estado del punto informativo" -#: ./genweb/organs/browser/views.py:531 +#: ./genweb/organs/browser/views.py:532 msgid "Changed subpunt intern state color" msgstr "Se ha cambiado el estado del punto informativo" @@ -283,11 +283,11 @@ msgstr "Fecha" msgid "Data i hora" msgstr "Fecha y hora" -#: ./genweb/organs/browser/views/allsessions.pt:32 +#: ./genweb/organs/browser/views/allsessions.pt:42 msgid "Data i hora fi" msgstr "Fecha y hora de finalización" -#: ./genweb/organs/browser/views/allsessions.pt:29 +#: ./genweb/organs/browser/views/allsessions.pt:39 msgid "Data i hora inici" msgstr "Fecha y hora de inicio" @@ -311,7 +311,7 @@ msgstr "Se ha borrado un punto" msgid "Deleted subpunt" msgstr "Se ha borrado un punto" -#: ./genweb/organs/browser/views.py:116 +#: ./genweb/organs/browser/views.py:117 msgid "Deleted via javascript" msgstr "Borrado elemento via javascript" @@ -472,7 +472,7 @@ msgstr "Informa del resultado de la sesión" msgid "Invalid PDF file" msgstr "El fichero seleccionado no parece un fichero PDF." -#: ./genweb/organs/content/audio.py:26 +#: ./genweb/organs/content/audio.py:27 msgid "Invalid audio file" msgstr "El fichero seleccionado no parece en formato de audio." @@ -512,6 +512,10 @@ msgstr "Imagen que se utilizará como logotipo y que se utilizará en la impresi msgid "Logo organs folder description" msgstr "Imagen que se utilizará como imagen de cabecera en esta unidad y en el momento de imprimir las actas de los órganos. Las dimensiones han de ser 978x78 píxeles." +#: ./genweb/organs/browser/viewlets_templates/header.pt:58 +msgid "Logout" +msgstr "Desconecta" + #: ./genweb/organs/content/organgovern.py:112 msgid "Mail address help" msgstr "Dirección o direcciones de correo a las cuales llegaran los mensajes cuando haya una notificación en el órgano. Se pueden poner diversas direcciones SEPARADAS POR COMAS." @@ -588,11 +592,11 @@ msgstr "Se ha modificado un punto" msgid "Modified subpunt" msgstr "Se ha modificaco un punto" -#: ./genweb/organs/browser/views/allsessions.pt:59 +#: ./genweb/organs/browser/views/allsessions.pt:25 msgid "Mostra sessions anteriors" msgstr "Muestra sesiones anteriores" -#: ./genweb/organs/browser/views.py:231 +#: ./genweb/organs/browser/views.py:232 msgid "Moved subpunt by drag&drop" msgstr "Se ha movido el número de punto interno al moverlo" @@ -647,7 +651,7 @@ msgstr "Miembro" msgid "OG4-Afectat" msgstr "Afectado" -#: ./genweb/organs/content/audio.py:56 +#: ./genweb/organs/content/audio.py:57 msgid "Only audio files are permitted." msgstr "Sólo están permitidos los ficheros de tipo audio." @@ -694,7 +698,7 @@ msgstr "Tipo de órgano" msgid "Organ Title" msgstr "Nombre del órgano" -#: ./genweb/organs/browser/views/allsessions.pt:26 +#: ./genweb/organs/browser/views/allsessions.pt:36 #: ./genweb/organs/content/templates/impersonate_as.pt:59 #: ./genweb/organs/content/templates/sessio_view.pt:201 msgid "Organ de govern" @@ -712,7 +716,7 @@ msgstr "Lista de nombres de las personas que se invitan a este órgano de forma msgid "Organ type" msgstr "Tipo de órgano de gobierno" -#: ./genweb/organs/portlets/portlet_calendar.py:34 +#: ./genweb/organs/portlets/portlet_calendar.py:31 msgid "Organs Calendar" msgstr "Organs Calendar" @@ -741,7 +745,7 @@ msgstr "Órganos vinculados conmigo" msgid "Plantilles" msgstr "Plantillas" -#: ./genweb/organs/content/audio.py:55 +#: ./genweb/organs/content/audio.py:56 msgid "Please upload a media file" msgstr "Seleccione un fichero de áudio" @@ -825,11 +829,11 @@ msgstr "Destinatarios" msgid "Relacio Assistents" msgstr "Relación de asistentes" -#: ./genweb/organs/browser/views.py:432 +#: ./genweb/organs/browser/views.py:433 msgid "Reload points manually" msgstr "Numera puntos" -#: ./genweb/organs/browser/views.py:378 +#: ./genweb/organs/browser/views.py:379 msgid "Reload proposalPoints manually" msgstr "Numera acuerdos" @@ -983,7 +987,7 @@ msgstr "Acuerdo" msgid "Tab acta" msgstr "Acta" -#: ./genweb/organs/content/audio.py:33 +#: ./genweb/organs/content/audio.py:34 msgid "Tab audio" msgstr "Audio" @@ -1066,7 +1070,7 @@ msgstr "[Acuerdo " msgid "[Acord sense numeracio]" msgstr "[Acuerdo sin numeración]" -#: ./genweb/organs/browser/views.py:288 +#: ./genweb/organs/browser/views.py:289 #: ./genweb/organs/content/acta.py:204 msgid "[Acord sense numerar]" msgstr "[Acuerdo sin numerar]" @@ -1077,11 +1081,11 @@ msgstr "[Acuerdo sin numerar]" msgid "acord" msgstr "Acuerdo" -#: ./genweb/organs/search.py:323 +#: ./genweb/organs/search.py:306 msgid "alphabetically" msgstr "alfabéticamente" -#: ./genweb/organs/search.py:320 +#: ./genweb/organs/search.py:303 msgid "date (newest first)" msgstr "fecha (més reciente primero)" @@ -1136,7 +1140,7 @@ msgstr "Restringido a afectados" msgid "restricted_to_members_organ" msgstr "Restringido a miembros" -#: ./genweb/organs/browser/views.py:561 +#: ./genweb/organs/browser/views.py:562 #: ./genweb/organs/content/impersonate_as.py:143 #: ./genweb/organs/content/punt.py:148 msgid "sense numeracio" @@ -1157,10 +1161,10 @@ msgstr "Último año" msgid "title_search_title" msgstr "Buscar en el Sitio web" -#: ./genweb/organs/portlets/portlet_calendar.pt:96 +#: ./genweb/organs/portlets/portlet_calendar.pt:78 msgid "to" msgstr "a" -#: ./genweb/organs/portlets/portlet_calendar.pt:85 +#: ./genweb/organs/portlets/portlet_calendar.pt:63 msgid "veure totes les sessions" msgstr "mostrar todas las sesiones" diff --git a/genweb/organs/locales/genweb.organs.pot b/genweb/organs/locales/genweb.organs.pot index af295009..f27e3053 100644 --- a/genweb/organs/locales/genweb.organs.pot +++ b/genweb/organs/locales/genweb.organs.pot @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2018-10-15 12:58+0000\n" +"POT-Creation-Date: 2018-11-05 11:09+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -117,11 +117,11 @@ msgstr "" msgid "Altres" msgstr "" -#: ./genweb/organs/browser/views/allsessions.pt:61 +#: ./genweb/organs/browser/views/allsessions.pt:27 msgid "Amaga sessions anteriors" msgstr "" -#: ./genweb/organs/utils.py:113 +#: ./genweb/organs/utils.py:119 msgid "Anonymous user" msgstr "" @@ -178,7 +178,7 @@ msgstr "" msgid "Cerca" msgstr "" -#: ./genweb/organs/browser/viewlets_templates/header.pt:57 +#: ./genweb/organs/browser/viewlets_templates/header.pt:63 msgid "Cercador" msgstr "" @@ -190,31 +190,31 @@ msgstr "" msgid "Changed Title" msgstr "" -#: ./genweb/organs/browser/views.py:503 +#: ./genweb/organs/browser/views.py:504 msgid "Changed acord color state" msgstr "" -#: ./genweb/organs/browser/views.py:533 +#: ./genweb/organs/browser/views.py:534 msgid "Changed acord intern state color" msgstr "" -#: ./genweb/organs/browser/views.py:499 +#: ./genweb/organs/browser/views.py:500 msgid "Changed punt color state" msgstr "" -#: ./genweb/organs/browser/views.py:185 +#: ./genweb/organs/browser/views.py:186 msgid "Changed punt number with drag&drop" msgstr "" -#: ./genweb/organs/browser/views.py:497 +#: ./genweb/organs/browser/views.py:498 msgid "Changed recursive color state of acord inside punt" msgstr "" -#: ./genweb/organs/browser/views.py:495 +#: ./genweb/organs/browser/views.py:496 msgid "Changed recursive color state of subpunt inside punt" msgstr "" -#: ./genweb/organs/browser/views.py:531 +#: ./genweb/organs/browser/views.py:532 msgid "Changed subpunt intern state color" msgstr "" @@ -284,11 +284,11 @@ msgstr "" msgid "Data i hora" msgstr "" -#: ./genweb/organs/browser/views/allsessions.pt:32 +#: ./genweb/organs/browser/views/allsessions.pt:42 msgid "Data i hora fi" msgstr "" -#: ./genweb/organs/browser/views/allsessions.pt:29 +#: ./genweb/organs/browser/views/allsessions.pt:39 msgid "Data i hora inici" msgstr "" @@ -312,7 +312,7 @@ msgstr "" msgid "Deleted subpunt" msgstr "" -#: ./genweb/organs/browser/views.py:116 +#: ./genweb/organs/browser/views.py:117 msgid "Deleted via javascript" msgstr "" @@ -473,7 +473,7 @@ msgstr "" msgid "Invalid PDF file" msgstr "" -#: ./genweb/organs/content/audio.py:26 +#: ./genweb/organs/content/audio.py:27 msgid "Invalid audio file" msgstr "" @@ -513,6 +513,10 @@ msgstr "" msgid "Logo organs folder description" msgstr "" +#: ./genweb/organs/browser/viewlets_templates/header.pt:58 +msgid "Logout" +msgstr "" + #: ./genweb/organs/content/organgovern.py:112 msgid "Mail address help" msgstr "" @@ -589,11 +593,11 @@ msgstr "" msgid "Modified subpunt" msgstr "" -#: ./genweb/organs/browser/views/allsessions.pt:59 +#: ./genweb/organs/browser/views/allsessions.pt:25 msgid "Mostra sessions anteriors" msgstr "" -#: ./genweb/organs/browser/views.py:231 +#: ./genweb/organs/browser/views.py:232 msgid "Moved subpunt by drag&drop" msgstr "" @@ -648,7 +652,7 @@ msgstr "" msgid "OG4-Afectat" msgstr "" -#: ./genweb/organs/content/audio.py:56 +#: ./genweb/organs/content/audio.py:57 msgid "Only audio files are permitted." msgstr "" @@ -695,7 +699,7 @@ msgstr "" msgid "Organ Title" msgstr "" -#: ./genweb/organs/browser/views/allsessions.pt:26 +#: ./genweb/organs/browser/views/allsessions.pt:36 #: ./genweb/organs/content/templates/impersonate_as.pt:59 #: ./genweb/organs/content/templates/sessio_view.pt:201 msgid "Organ de govern" @@ -713,7 +717,7 @@ msgstr "" msgid "Organ type" msgstr "" -#: ./genweb/organs/portlets/portlet_calendar.py:34 +#: ./genweb/organs/portlets/portlet_calendar.py:31 msgid "Organs Calendar" msgstr "" @@ -742,7 +746,7 @@ msgstr "" msgid "Plantilles" msgstr "" -#: ./genweb/organs/content/audio.py:55 +#: ./genweb/organs/content/audio.py:56 msgid "Please upload a media file" msgstr "" @@ -826,11 +830,11 @@ msgstr "" msgid "Relacio Assistents" msgstr "" -#: ./genweb/organs/browser/views.py:432 +#: ./genweb/organs/browser/views.py:433 msgid "Reload points manually" msgstr "" -#: ./genweb/organs/browser/views.py:378 +#: ./genweb/organs/browser/views.py:379 msgid "Reload proposalPoints manually" msgstr "" @@ -984,7 +988,7 @@ msgstr "" msgid "Tab acta" msgstr "" -#: ./genweb/organs/content/audio.py:33 +#: ./genweb/organs/content/audio.py:34 msgid "Tab audio" msgstr "" @@ -1067,7 +1071,7 @@ msgstr "" msgid "[Acord sense numeracio]" msgstr "" -#: ./genweb/organs/browser/views.py:288 +#: ./genweb/organs/browser/views.py:289 #: ./genweb/organs/content/acta.py:204 msgid "[Acord sense numerar]" msgstr "" @@ -1078,11 +1082,11 @@ msgstr "" msgid "acord" msgstr "" -#: ./genweb/organs/search.py:323 +#: ./genweb/organs/search.py:306 msgid "alphabetically" msgstr "" -#: ./genweb/organs/search.py:320 +#: ./genweb/organs/search.py:303 msgid "date (newest first)" msgstr "" @@ -1137,7 +1141,7 @@ msgstr "" msgid "restricted_to_members_organ" msgstr "" -#: ./genweb/organs/browser/views.py:561 +#: ./genweb/organs/browser/views.py:562 #: ./genweb/organs/content/impersonate_as.py:143 #: ./genweb/organs/content/punt.py:148 msgid "sense numeracio" @@ -1158,10 +1162,10 @@ msgstr "" msgid "title_search_title" msgstr "" -#: ./genweb/organs/portlets/portlet_calendar.pt:96 +#: ./genweb/organs/portlets/portlet_calendar.pt:78 msgid "to" msgstr "" -#: ./genweb/organs/portlets/portlet_calendar.pt:85 +#: ./genweb/organs/portlets/portlet_calendar.pt:63 msgid "veure totes les sessions" msgstr "" diff --git a/genweb/organs/namedfilebrowser.py b/genweb/organs/namedfilebrowser.py index b668b966..d1527440 100644 --- a/genweb/organs/namedfilebrowser.py +++ b/genweb/organs/namedfilebrowser.py @@ -81,10 +81,8 @@ def getFileOrgans(self): prods = qi.listInstalledProducts() installed = False - for prod in prods: - if prod['id'] == 'genweb.organs': - installed = True - + if 'genweb.organs' in [prod['id'] for prod in prods]: + installed = True if not installed: # Standard functionallity. return file @@ -103,17 +101,22 @@ def getFileOrgans(self): if self.context.aq_parent.aq_parent.portal_type == 'genweb.organs.sessio': # primer nivell estatSessio = api.content.get_state(obj=self.context.aq_parent.aq_parent) + elif self.context.portal_type == 'genweb.organs.acta': + estatSessio = api.content.get_state(obj=self.context.aq_parent) else: # segon nivell estatSessio = api.content.get_state(obj=self.context.aq_parent.aq_parent.aq_parent) - organ_tipus = self.context.organType - if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): return file elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -121,7 +124,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -135,7 +143,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'tancada': - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -149,7 +162,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'en_correccio': - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -171,7 +189,12 @@ def getFileOrgans(self): elif estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): return file elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -179,7 +202,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -187,7 +215,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'tancada': - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -195,7 +228,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'en_correccio': - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -211,7 +249,12 @@ def getFileOrgans(self): elif estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): return file elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -219,7 +262,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -233,7 +281,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'tancada': - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized @@ -247,7 +300,12 @@ def getFileOrgans(self): return file return file elif estatSessio == 'en_correccio': - if self.context.visiblefile and self.context.hiddenfile: + if (self.context.portal_type == 'genweb.organs.acta') or (self.context.portal_type == 'genweb.organs.audio'): + if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): + return file + else: + raise Unauthorized + elif self.context.visiblefile and self.context.hiddenfile: if utils.isMembre(self): if self.fieldname == 'visiblefile': raise Unauthorized diff --git a/genweb/organs/overrides.zcml b/genweb/organs/overrides.zcml index 7d98bb15..bf3335cb 100644 --- a/genweb/organs/overrides.zcml +++ b/genweb/organs/overrides.zcml @@ -63,4 +63,6 @@ /> + + diff --git a/genweb/organs/permissions.py b/genweb/organs/permissions.py index 4bbb9915..27cd38c3 100644 --- a/genweb/organs/permissions.py +++ b/genweb/organs/permissions.py @@ -1,65 +1,13 @@ # -*- coding: utf-8 -*- from genweb.organs import utils -from plone import api # Código copiado del canView de cada tipo. -# HAY QUE TOCAR LOS DOS SI SE ACTUALIZA -# Solo hay que cambiar el def canView(self) por def canViewXXX(self, item) -# y añadir denro el : self.context = item -# Después cambiar el raise Unauthorized por return False - - -def canViewFile(self, item): - # Permissions to view FILE - self.context = item - if utils.isManager(self): - return True - estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.organType # 1 level up - if organ_tipus == 'open_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'tancada': - return True - elif estatSessio == 'en_correccio': - return True - else: - return False - - elif organ_tipus == 'restricted_to_members_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'tancada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'en_correccio' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - else: - return False - - elif organ_tipus == 'restricted_to_affected_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'tancada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'en_correccio' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - else: - return False - - else: - return False +# WARNING! HAY QUE TOCAR LOS DOS SI SE ACTUALIZA +# Sólo hay que cambiar: def canView(self) por def canViewXXX(self, item) +# y añadir: self.context = item +# Después cambiar el return Unauthorized por return False +# SÓLO SE HAN DEJADO EL DE ACORD/PUNT/SUBPUNT PORQUE ES LO QUE MUESTRA EL SEARCH +# SI HAY QUE RETORNAR ALGO MÁS, HAY QUE AÑADIRLO TAMBIÉN def canViewAcord(self, item): @@ -68,118 +16,7 @@ def canViewAcord(self, item): if utils.isManager(self): return True estatSessio = utils.session_wf_state(self) - - organ_tipus = self.context.organType # TODO: WHY??? Funciona amb 1 i 2 level up - - if organ_tipus == 'open_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'tancada': - return True - elif estatSessio == 'en_correccio': - return True - else: - return False - - if organ_tipus == 'restricted_to_members_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'tancada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'en_correccio' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - else: - return False - - if organ_tipus == 'restricted_to_affected_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'tancada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'en_correccio' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - else: - return False - - -def canViewActa(self, item): - # Permissions to view acta - self.context = item - if utils.isManager(self): - return True - estatSessio = utils.session_wf_state(self) - - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'tancada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'en_correccio' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - else: - return False - - -def canViewAudio(self, item): - """ Return true if user is Editor/Secretari/Manager """ - try: - username = api.user.get_current().id - roles = api.user.get_roles(username=username, obj=self.context) - if 'OG2-Editor' in roles or 'OG1-Secretari' in roles or 'Manager' in roles: - return True - else: - return False - except: - return False - - -def canViewOrgangovern(self, item): - # Permissions to view ORGANS DE GOVERN - self.context = item - if utils.isManager(self): - return True - organType = self.context.organType - # If Obert - if organType == 'open_organ': - return True - # if restricted_to_members_organ - elif organType == 'restricted_to_members_organ': - if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - else: - return False - # if restricted_to_affected_organ - elif organType == 'restricted_to_affected_organ': - if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - else: - return False - else: - return False - - -def canViewSessio(self, item): - # Permissions to view SESSIONS - self.context = item - if utils.isManager(self): - return True - estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): @@ -230,8 +67,7 @@ def canViewPunt(self, item): if utils.isManager(self): return True estatSessio = utils.session_wf_state(self) - - organ_tipus = self.context.aq_parent.organType # 1 level up + organ_tipus = self.context.organType if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): @@ -277,72 +113,13 @@ def canViewPunt(self, item): def canViewSubpunt(self, item): - # Permissions to view PUNTS + # Permissions to view SUBPUNTS self.context = item if utils.isManager(self): return True estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.aq_parent.organType # 2 levels up - - if organ_tipus == 'open_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'tancada': - return True - elif estatSessio == 'en_correccio': - return True - else: - return False - - if organ_tipus == 'restricted_to_members_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'tancada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'en_correccio' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - else: - return False - - if organ_tipus == 'restricted_to_affected_organ': - if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): - return True - elif estatSessio == 'convocada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): - return True - elif estatSessio == 'realitzada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'tancada' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - elif estatSessio == 'en_correccio' and (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): - return True - else: - return False - - -def canViewOrgansfolder(self, item): - # Permissions per veure l'estat dels organs a la taula principal - self.context = item - if utils.isManager(self) or utils.isSecretari(self) or utils.isEditor(self): - return True - else: - return False + organ_tipus = self.context.organType - -def canViewDocument(self, item): - # Permissions to view DOCUMENT - self.context = item - if utils.isManager(self): - return True - estatSessio = utils.session_wf_state(self) - organ_tipus = self.context.aq_parent.organType # 1 level up if organ_tipus == 'open_organ': if estatSessio == 'planificada' and (utils.isSecretari(self) or utils.isEditor(self)): return True diff --git a/genweb/organs/portlets/portlet_calendar.pt b/genweb/organs/portlets/portlet_calendar.pt index 0c5914c8..e4bfed26 100644 --- a/genweb/organs/portlets/portlet_calendar.pt +++ b/genweb/organs/portlets/portlet_calendar.pt @@ -25,7 +25,7 @@
    - @@ -35,14 +35,13 @@ - + - - - - - - - + 31 + + +
    - 31 -
    - 31 -
    @@ -84,50 +63,29 @@  veure totes les sessions - @@ -136,9 +94,6 @@ diff --git a/genweb/organs/portlets/portlet_calendar.py b/genweb/organs/portlets/portlet_calendar.py index cd971e29..343c7621 100644 --- a/genweb/organs/portlets/portlet_calendar.py +++ b/genweb/organs/portlets/portlet_calendar.py @@ -13,11 +13,8 @@ from zope.i18nmessageid import MessageFactory from zope.interface import implements from datetime import datetime -from plone.app.event.base import localized_now from plone.event.interfaces import IEvent -from datetime import timedelta from plone import api - import calendar @@ -37,11 +34,6 @@ class Assignment(base.Assignment): class Renderer(base.Renderer): render = ViewPageTemplateFile('portlet_calendar.pt') - def isAnon(self): - if not api.user.is_anonymous(): - return False - return True - def update(self): context = aq_inner(self.context) @@ -114,14 +106,16 @@ def get_next_month(self, year, month): return (year, month) def get_public_organs_fields(self): - visibleItems = api.content.find(portal_type='genweb.organs.organgovern', visiblefields=True) + visibleItems = api.content.find( + portal_type='genweb.organs.organgovern', + visiblefields=True) items_path = [] for obj in visibleItems: items_path.append(obj.getPath()) return items_path def getclasstag_event(self, day): - # Returns class color to render in the calendar + # Returns class color to render inside the calendar classtag = '' if day['events']: if len(day['events']) > 1: @@ -140,65 +134,22 @@ def getDateEvents(self): dateEvent = datetime.strptime(date, formatDate) return dateEvent - def getNextThreeEvents(self): - portal_catalog = getToolByName(self.context, 'portal_catalog') - items = portal_catalog.unrestrictedSearchResults( - portal_type='genweb.organs.sessio', - path=self.get_public_organs_fields()) - events = [] - for event in items: - events.append(event._unrestrictedGetObject()) - - events = self.filterNextEvents(events) - events = self.filterOccurrenceEvents(events) - - list_events = [] - # hay que ordenar los events por fechas... - events.sort(key=lambda x: x.start, reverse=False) - - for event in events: - list_events.append(self.getEventCalendarDict(event)) - - return list_events - - def getNextThreeEventsValidated(self): - portal_catalog = getToolByName(self.context, 'portal_catalog') - items = portal_catalog.unrestrictedSearchResults( - portal_type='genweb.organs.sessio') - events = [] - username = api.user.get_current().id - - for item in items: - organ = item._unrestrictedGetObject() - roles = api.user.get_roles(username=username, obj=organ) - if 'OG1-Secretari' in roles or 'OG2-Editor' in roles or 'OG3-Membre' in roles or 'OG4-Afectat' in roles or 'Manager' in roles or organ.aq_parent.visiblefields: - events.append(organ) - - events = self.filterNextEvents(events) - events = self.filterOccurrenceEvents(events) - - list_events = [] - # hay que ordenar los events por fechas... - events.sort(key=lambda x: x.start, reverse=False) - - for event in events: - list_events.append(self.getEventCalendarDict(event)) - - return list_events - def getEventCalendarDict(self, event): start = event.start.strftime('%d/%m') - searchStart = event.start.strftime('%m/%s') + starthour = event.start.strftime('%H:%M') end = event.end.strftime('%d/%m') + endhour = event.end.strftime('%H:%M') end = None if end == start else end - return dict(Title=event.title, - getURL=event.absolute_url(), + return dict(title=event.title, + url=event.absolute_url(), + organ_title=event.aq_parent.title, + organ_url=event.aq_parent.absolute_url(), start=start, - searchStart=searchStart, + starthour=starthour, end=end, - color=event.aq_parent.eventsColor, - community_name=event.aq_parent.title, - community_url=event.aq_parent.absolute_url()) + endhour=endhour, + color=event.aq_parent.eventsColor + ) def filterOccurrenceEvents(self, events): filter_events = [] @@ -215,60 +166,21 @@ def filterOccurrenceEvents(self, events): return filter_events - def filterNextEvents(self, events): - filter_events = [] - for event in events: - if event.end > localized_now(): - filter_events.append(event) - - return filter_events - def getDayEventsGroup(self): - # Si no esta validat, mostra els propers 3 esdeveniments - group_events = [] - if 'day' not in self.request.form and 'month' in self.request.form: - list_events = self.getNextThreeEvents() - elif 'day' not in self.request.form and 'month' not in self.request.form: - list_events = self.getNextThreeEvents() - else: - list_events = self.getDayEvents(self.getDateEvents()) - if list_events: - sorted(list_events, key=lambda x: x['searchStart']) - for event in list_events[:3]: - group_events.append(dict(Title=event['Title'], - getURL=event['getURL'], - color=event['color'], - start=event['start'], - end=event['end'], - community_url=event['community_url'], - community_name=event['community_name'],)) - return group_events - else: - return None - - def getDayEventsGroupValidated(self): - # Si esta validat mostra els propers 3 esdeveniments - group_events = [] - if 'day' not in self.request.form and 'month' in self.request.form: - list_events = self.getNextThreeEventsValidated() - elif 'day' not in self.request.form and 'month' not in self.request.form: - list_events = self.getNextThreeEventsValidated() - else: - list_events = self.getDayEventsValidated(self.getDateEvents()) - - if list_events: - sorted(list_events, key=lambda x: x['searchStart']) - for event in list_events[:3]: - group_events.append(dict(Title=event['Title'], - getURL=event['getURL'], - color=event['color'], - start=event['start'], - end=event['end'], - community_url=event['community_url'], - community_name=event['community_name'],)) - return group_events - else: - return None + results = [] + list_events = self.getDayEvents(self.getDateEvents()) + for event in list_events: + results.append(dict( + title=event['title'], + url=event['url'], + organ_title=event['organ_title'], + organ_url=event['organ_url'], + start=event['start'], + starthour=event['starthour'], + end=event['end'], + endhour=event['endhour'], + color=event['color'])) + return results def getDayEvents(self, date): events = self.getCalendarDict() @@ -279,55 +191,33 @@ def getDayEvents(self, date): list_events.append(self.getEventCalendarDict(event)) return list_events - def getDayEventsValidated(self, date): - events = self.getCalendarDictValidated() - list_events = [] - if date.strftime('%Y-%m-%d') in events: - events = self.filterOccurrenceEvents(events[date.strftime('%Y-%m-%d')]) - for event in events: - list_events.append(self.getEventCalendarDict(event)) - return list_events - def getCalendarDict(self): - # context = aq_inner(self.context) - year, month = self.year_month_display() - monthdates = [dat for dat in self.cal.itermonthdates(year, month)] - - start = monthdates[0] - end = monthdates[-1] - - date_range_query = {'query': (start - timedelta(days=30), end), 'range': 'min:max'} - portal_catalog = getToolByName(self.context, 'portal_catalog') - items = portal_catalog.unrestrictedSearchResults( - portal_type='genweb.organs.sessio', - start=date_range_query, - path=self.get_public_organs_fields()) - events = [] - for event in items: - events.append(event._unrestrictedGetObject()) - - return construct_calendar(events, start=start, end=end) - - def getCalendarDictValidated(self): - # context = aq_inner(self.context) year, month = self.year_month_display() monthdates = [dat for dat in self.cal.itermonthdates(year, month)] - start = monthdates[0] end = monthdates[-1] - date_range_query = {'query': (start - timedelta(days=30), end), 'range': 'min:max'} + date_range_query = {'query': (start, end), 'range': 'min:max'} portal_catalog = getToolByName(self.context, 'portal_catalog') - items = portal_catalog.unrestrictedSearchResults( - portal_type='genweb.organs.sessio', - start=date_range_query) - events = [] - username = api.user.get_current().id - for event in items: - organ = event._unrestrictedGetObject() - roles = api.user.get_roles(username=username, obj=organ) - if 'OG1-Secretari' in roles or 'OG2-Editor' in roles or 'OG3-Membre' in roles or 'OG4-Afectat' in roles or 'Manager' in roles or organ.aq_parent.visiblefields: - events.append(organ) + if api.user.is_anonymous(): + items = portal_catalog.unrestrictedSearchResults( + portal_type='genweb.organs.sessio', + start=date_range_query, + path=self.get_public_organs_fields()) + events = [] + for event in items: + events.append(event._unrestrictedGetObject()) + else: + items = portal_catalog.unrestrictedSearchResults( + portal_type='genweb.organs.sessio', + start=date_range_query) + events = [] + username = api.user.get_current().id + for event in items: + session = event._unrestrictedGetObject() + roles = api.user.get_roles(username=username, obj=session) + if 'OG1-Secretari' in roles or 'OG2-Editor' in roles or 'OG3-Membre' in roles or 'OG4-Afectat' in roles or 'Manager' in roles or session.aq_parent.visiblefields: + events.append(session) return construct_calendar(events, start=start, end=end) @@ -344,70 +234,24 @@ def cal_data(self): date_range_query = {'query': (start, end), 'range': 'min:max'} portal_catalog = getToolByName(self.context, 'portal_catalog') - items = portal_catalog.unrestrictedSearchResults( - portal_type='genweb.organs.sessio', - start=date_range_query, - path=self.get_public_organs_fields()) events = [] - for event in items: - events.append(event._unrestrictedGetObject()) - - cal_dict = construct_calendar(events, start=start, end=end) - - # [[day1week1, day2week1, ... day7week1], [day1week2, ...]] - caldata = [[]] - for dat in monthdates: - if len(caldata[-1]) == 7: - caldata.append([]) - date_events = None - isodat = dat.isoformat() - if isodat in cal_dict: - date_events = cal_dict[isodat] - - color = '' - if date_events: - for occ in date_events: - color = occ.aq_parent.eventsColor - - caldata[-1].append( - {'date': dat, - 'day': dat.day, - 'month': dat.month, - 'year': dat.year, - 'prev_month': dat.month < month, - 'next_month': dat.month > month, - 'color': color, - 'today': - dat.year == today.year and - dat.month == today.month and - dat.day == today.day, - 'events': date_events}) - return caldata - - @property - def cal_data_validated(self): - """Calendar iterator over weeks and days of the month to display. - If user is validated, only shows own events - """ - context = aq_inner(self.context) - today = localized_today(context) - year, month = self.year_month_display() - monthdates = [dat for dat in self.cal.itermonthdates(year, month)] - start = monthdates[0] - end = monthdates[-1] - - date_range_query = {'query': (start, end), 'range': 'min:max'} - portal_catalog = getToolByName(self.context, 'portal_catalog') - items = portal_catalog.unrestrictedSearchResults( - portal_type='genweb.organs.sessio', - start=date_range_query) - events = [] - username = api.user.get_current().id - for event in items: - organ = event._unrestrictedGetObject() - roles = api.user.get_roles(username=username, obj=organ) - if 'OG1-Secretari' in roles or 'OG2-Editor' in roles or 'OG3-Membre' in roles or 'OG4-Afectat' in roles or 'Manager' in roles or organ.aq_parent.visiblefields: - events.append(organ) + if api.user.is_anonymous(): + items = portal_catalog.unrestrictedSearchResults( + portal_type='genweb.organs.sessio', + start=date_range_query, + path=self.get_public_organs_fields()) + for event in items: + events.append(event._unrestrictedGetObject()) + else: + items = portal_catalog.unrestrictedSearchResults( + portal_type='genweb.organs.sessio', + start=date_range_query) + username = api.user.get_current().id + for event in items: + session = event._unrestrictedGetObject() + roles = api.user.get_roles(username=username, obj=session) + if 'OG1-Secretari' in roles or 'OG2-Editor' in roles or 'OG3-Membre' in roles or 'OG4-Afectat' in roles or 'Manager' in roles or session.aq_parent.visiblefields: + events.append(session) cal_dict = construct_calendar(events, start=start, end=end) diff --git a/genweb/organs/profiles/default/rolemap.xml b/genweb/organs/profiles/default/rolemap.xml index a3fc8b21..4fff9084 100644 --- a/genweb/organs/profiles/default/rolemap.xml +++ b/genweb/organs/profiles/default/rolemap.xml @@ -215,6 +215,7 @@ + diff --git a/genweb/organs/rss_custom.py b/genweb/organs/rss_custom.py index 3bd1502b..82df3b1b 100644 --- a/genweb/organs/rss_custom.py +++ b/genweb/organs/rss_custom.py @@ -26,6 +26,7 @@ from Products.ATContentTypes.interfaces.file import IFileContent from plone.uuid.interfaces import IUUID from zope.cachedescriptors.property import Lazy as lazy_property +from operator import itemgetter # this might be a little silly but it's possible to not use # Products.CMFPlone with dexterity content types @@ -163,24 +164,20 @@ def _brains(self): ]: add = False tipus = item.portal_type - if tipus == 'genweb.organs.organgovern': - organ_tipus = item.getObject().organType + organ_tipus = item.organType + if tipus == 'genweb.organs.organsfolder': + add = True + elif tipus == 'genweb.organs.sessio' or tipus == 'genweb.organs.organgovern': if organ_tipus == 'open_organ': add = True elif organ_tipus == 'restricted_to_members_organ': if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self)): add = True - else: - add = False elif organ_tipus == 'restricted_to_affected_organ': if (utils.isSecretari(self) or utils.isEditor(self) or utils.isMembre(self) or utils.isAfectat(self)): add = True - else: - add = False else: add = False - if tipus == 'genweb.organs.organsfolder': - add = True else: # Els elements tipics de Plone/Genweb es mostren al RSS add = True @@ -188,7 +185,7 @@ def _brains(self): if add: filtered_items.append(item) - return filtered_items + return sorted(filtered_items, key=itemgetter('start'), reverse=True) def _items(self): """ diff --git a/genweb/organs/tests/test_actes_view_permission_in_organs_oberts.py b/genweb/organs/tests/test_actes_view_permission_in_organs_oberts.py new file mode 100644 index 00000000..19d5d4dd --- /dev/null +++ b/genweb/organs/tests/test_actes_view_permission_in_organs_oberts.py @@ -0,0 +1,531 @@ +# WARNING!!!! + +# Las vistas llevan () al final para el AssertTrue +# self.assertTrue(root_path.obert.xxtancadaxx.restrictedTraverse('@@view')()) + +# Para check de Unauthorized/NotFound no lleva el () +# self.assertRaises(Unauthorized, root_path.obert.xxplanificadaxx.publishTraverse('@@view')) +# + +import unittest +from genweb.organs.testing import GENWEB_ORGANS_FUNCTIONAL_TESTING +from zope.component import getMultiAdapter +from plone.app.testing import TEST_USER_ID, TEST_USER_NAME +from plone.app.testing import login, logout +from plone.app.testing import setRoles +from AccessControl import Unauthorized +from genweb.organs.browser import tools +from plone import api +from plone.testing.z2 import Browser +from genweb.organs.namedfilebrowser import DisplayFile, Download +from zope.publisher.browser import TestRequest + + +class FunctionalTestCase(unittest.TestCase): + """Base class for integration tests.""" + + layer = GENWEB_ORGANS_FUNCTIONAL_TESTING + + def setUp(self): + self.app = self.layer['app'] + self.portal = self.layer['portal'] + self.request = self.layer['request'] + self.browser = Browser(self.app) + + # Create default GW directories + setupview = getMultiAdapter((self.portal, self.request), name='setup-view') + setupview.apply_default_language_settings() + setupview.setup_multilingual() + setupview.createContent('n4') + + # Enable the possibility to add Organs folder + from Products.CMFPlone.interfaces.constrains import ISelectableConstrainTypes + behavior = ISelectableConstrainTypes(self.portal['ca']) + behavior.setConstrainTypesMode(1) + behavior.setLocallyAllowedTypes(['genweb.organs.organsfolder']) + behavior.setImmediatelyAddableTypes(['genweb.organs.organsfolder']) + + # Create Base folder to create base test folders + try: + api.content.delete(obj=self.portal['ca']['testingfolder'], check_linkintegrity=False) + except: + pass + # Create default Organs Test Folder + og_unit = api.content.create( + type='genweb.organs.organsfolder', + id='testingfolder', + title='Organ Tests', + container=self.portal['ca']) + + # Create Open Organ structure + tools.create_organ_content( + og_unit, + 'open_organ', + 'OG.OPEN', + 'Organ TEST Obert', + 'obert') + + logout() + + def test_organ_obert_view_actes_as_secretari(self): + """Test as OG1-Secretari Actes i Audios + """ + logout() + setRoles(self.portal, TEST_USER_ID, ['OG1-Secretari']) + login(self.portal, TEST_USER_NAME) + root_path = self.portal.ca.testingfolder.obert + request = TestRequest() + # START check sessio PLANIFICADA + self.assertTrue(root_path.planificada.restrictedTraverse('@@view')()) + print "\n ORGAN OBERT - [Secretari] - View SESSIO PLANIFICADA - True" + self.assertTrue(root_path.planificada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.planificada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.planificada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.planificada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN PLANIFICADA + # + # START check sessio CONVOCADA + self.assertTrue(root_path.convocada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Secretari] - View SESSIO CONVOCADA - True" + self.assertTrue(root_path.convocada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.convocada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.convocada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.convocada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN CONVOCADA + # + # START check sessio REALITZADA + self.assertTrue(root_path.realitzada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Secretari] - View SESSIO REALITZADA - True" + self.assertTrue(root_path.realitzada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.realitzada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.realitzada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.realitzada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN REALITZADA + # + # START check sessio TANCADA + self.assertTrue(root_path.tancada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Secretari] - View SESSIO TANCADA - True" + self.assertTrue(root_path.tancada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.tancada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.tancada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.tancada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN TANCADA + # + # START check sessio EN CORRECCIO + self.assertTrue(root_path.correccio.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Secretari] - View SESSIO EN CORRECCIO - True" + self.assertTrue(root_path.correccio.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.correccio.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.correccio.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.correccio.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # # FIN EN CORRECCIO + + def test_organ_obert_view_actes_as_editor(self): + """Test as OG2-Editor Actes i Audios + """ + logout() + setRoles(self.portal, TEST_USER_ID, ['OG2-Editor']) + login(self.portal, TEST_USER_NAME) + root_path = self.portal.ca.testingfolder.obert + request = TestRequest() + # START check sessio PLANIFICADA + self.assertTrue(root_path.planificada.restrictedTraverse('@@view')()) + print "\n ORGAN OBERT - [Editor] - View SESSIO PLANIFICADA - True" + self.assertTrue(root_path.planificada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.planificada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.planificada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.planificada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN PLANIFICADA + # + # START check sessio CONVOCADA + self.assertTrue(root_path.convocada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Editor] - View SESSIO CONVOCADA - True" + self.assertTrue(root_path.convocada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.convocada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.convocada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.convocada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN CONVOCADA + # + # START check sessio REALITZADA + self.assertTrue(root_path.realitzada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Editor] - View SESSIO REALITZADA - True" + self.assertTrue(root_path.realitzada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.realitzada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.realitzada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.realitzada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN REALITZADA + # + # START check sessio TANCADA + self.assertTrue(root_path.tancada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Editor] - View SESSIO TANCADA - True" + self.assertTrue(root_path.tancada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.tancada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.tancada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.tancada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN TANCADA + # + # START check sessio EN CORRECCIO + self.assertTrue(root_path.correccio.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Editor] - View SESSIO EN CORRECCIO - True" + self.assertTrue(root_path.correccio.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.correccio.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.correccio.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.correccio.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # # FIN EN CORRECCIO + + def test_organ_obert_view_actes_as_membre(self): + """Test as OG3-Membre Actes i Audios + """ + logout() + setRoles(self.portal, TEST_USER_ID, ['OG3-Membre']) + login(self.portal, TEST_USER_NAME) + root_path = self.portal.ca.testingfolder.obert + request = TestRequest() + # START check sessio PLANIFICADA + self.assertRaises(Unauthorized, root_path.planificada.restrictedTraverse('@@view')) + print "\n ORGAN OBERT - [Membre] - View SESSIO PLANIFICADA - Unauthorized" + self.assertRaises(Unauthorized, root_path.planificada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.planificada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.planificada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.planificada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN PLANIFICADA + # + # START check sessio CONVOCADA + self.assertTrue(root_path.convocada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Membre] - View SESSIO CONVOCADA - True" + self.assertTrue(root_path.convocada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.convocada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.convocada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.convocada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN CONVOCADA + # + # START check sessio REALITZADA + self.assertTrue(root_path.realitzada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Membre] - View SESSIO REALITZADA - True" + self.assertTrue(root_path.realitzada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.realitzada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.realitzada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.realitzada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN REALITZADA + # + # START check sessio TANCADA + self.assertTrue(root_path.tancada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Membre] - View SESSIO TANCADA - True" + self.assertTrue(root_path.tancada.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.tancada.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.tancada.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.tancada.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # FIN TANCADA + # + # START check sessio EN CORRECCIO + self.assertTrue(root_path.correccio.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Membre] - View SESSIO EN CORRECCIO - True" + self.assertTrue(root_path.correccio.acta.restrictedTraverse('@@view')()) + print " View ACTA - True" + self.assertTrue(DisplayFile(root_path.correccio.acta, request).publishTraverse(request, 'file')()) + print " View ACTA attached PDF - True" + self.assertTrue(Download(root_path.correccio.acta, request).publishTraverse(request, 'file')()) + print " Download ACTA attached PDF - True" + self.assertTrue(root_path.correccio.acta.audio.restrictedTraverse('@@view')()) + print " View AUDIO - True" + self.assertTrue(DisplayFile(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')()) + print " View AUDIO attached MP3 - True" + self.assertTrue(Download(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')()) + print " Download AUDIO attached MP3 - True" + # # FIN EN CORRECCIO + + def test_organ_obert_view_actes_as_afectat(self): + """Test as OG4-Afectat Actes i Audios + """ + logout() + setRoles(self.portal, TEST_USER_ID, ['OG4-Afectat']) + login(self.portal, TEST_USER_NAME) + root_path = self.portal.ca.testingfolder.obert + request = TestRequest() + # START check sessio PLANIFICADA + self.assertRaises(Unauthorized, root_path.planificada.restrictedTraverse('@@view')) + print "\n ORGAN OBERT - [Afectat] - View SESSIO PLANIFICADA - Unauthorized" + self.assertRaises(Unauthorized, root_path.planificada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.planificada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.planificada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.planificada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN PLANIFICADA + # + # START check sessio CONVOCADA + self.assertRaises(Unauthorized, root_path.convocada.restrictedTraverse('@@view')) + print " ORGAN OBERT - [Afectat] - View SESSIO CONVOCADA - Unauthorized" + self.assertRaises(Unauthorized, root_path.convocada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.convocada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.convocada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.convocada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN CONVOCADA + # + # START check sessio REALITZADA + self.assertTrue(root_path.realitzada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Afectat] - View SESSIO REALITZADA" + self.assertRaises(Unauthorized, root_path.realitzada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.realitzada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.realitzada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.realitzada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN REALITZADA + # + # START check sessio TANCADA + self.assertTrue(root_path.tancada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Afectat] - View SESSIO TANCADA - True" + self.assertRaises(Unauthorized, root_path.tancada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.tancada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.tancada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.tancada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN TANCADA + # + # START check sessio EN CORRECCIO + self.assertTrue(root_path.correccio.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Afectat] - View SESSIO EN CORRECCIO - True" + self.assertRaises(Unauthorized, root_path.correccio.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.correccio.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.correccio.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.correccio.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # # FIN EN CORRECCIO + + def test_organ_obert_view_actes_as_anonim(self): + """Test as ANONIM Actes i Audios + """ + logout() + root_path = self.portal.ca.testingfolder.obert + request = TestRequest() + # START check sessio PLANIFICADA + self.assertRaises(Unauthorized, root_path.planificada.restrictedTraverse('@@view')) + print "\n ORGAN OBERT - [Anonim] - View SESSIO PLANIFICADA - Unauthorized" + self.assertRaises(Unauthorized, root_path.planificada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.planificada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.planificada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.planificada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.planificada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN PLANIFICADA + # + # START check sessio CONVOCADA + self.assertRaises(Unauthorized, root_path.convocada.restrictedTraverse('@@view')) + print " ORGAN OBERT - [Anonim] - View SESSIO CONVOCADA - Unauthorized" + self.assertRaises(Unauthorized, root_path.convocada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.convocada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.convocada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.convocada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.convocada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN CONVOCADA + # + # START check sessio REALITZADA + self.assertRaises(Unauthorized, root_path.realitzada.restrictedTraverse('@@view')) + print " ORGAN OBERT - [Anonim] - View SESSIO REALITZADA - Unauthorized" + self.assertRaises(Unauthorized, root_path.realitzada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.realitzada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.realitzada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.realitzada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.realitzada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN REALITZADA + # + # START check sessio TANCADA + self.assertTrue(root_path.tancada.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Anonim] - View SESSIO TANCADA - True" + self.assertRaises(Unauthorized, root_path.tancada.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.tancada.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.tancada.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.tancada.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.tancada.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # FIN TANCADA + # + # START check sessio EN CORRECCIO + self.assertTrue(root_path.correccio.restrictedTraverse('@@view')()) + print " ORGAN OBERT - [Anonim] - View SESSIO EN CORRECCIO - True" + self.assertRaises(Unauthorized, root_path.correccio.acta.restrictedTraverse('@@view')) + print " View ACTA - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.correccio.acta, request).publishTraverse(request, 'file')) + print " View ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.correccio.acta, request).publishTraverse(request, 'file')) + print " Download ACTA attached PDF - Unauthorized" + self.assertRaises(Unauthorized, root_path.correccio.acta.audio.restrictedTraverse('@@view')) + print " View AUDIO - Unauthorized" + self.assertRaises(Unauthorized, DisplayFile(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')) + print " View AUDIO attached MP3 - Unauthorized" + self.assertRaises(Unauthorized, Download(root_path.correccio.acta.audio, request).publishTraverse(request, 'file')) + print " Download AUDIO attached MP3 - Unauthorized" + # # FIN EN CORRECCIO diff --git a/genweb/organs/tests/test_create_sessions.py b/genweb/organs/tests/test_create_sessions.py new file mode 100644 index 00000000..907698b0 --- /dev/null +++ b/genweb/organs/tests/test_create_sessions.py @@ -0,0 +1,226 @@ +# WARNING!!!! + +# Las vistas llevan () al final para el AssertTrue +# self.assertTrue(root_path.obert.xxtancadaxx.restrictedTraverse('@@view')()) + +# Para check de Unauthorized/NotFound no lleva el () +# self.assertRaises(Unauthorized, root_path.obert.xxplanificadaxx.publishTraverse('@@view')) +# + +import unittest +from genweb.organs.testing import GENWEB_ORGANS_FUNCTIONAL_TESTING +from zope.component import getMultiAdapter +from plone.app.testing import TEST_USER_ID, TEST_USER_NAME +from plone.app.testing import login, logout +from plone.app.testing import setRoles +from AccessControl import Unauthorized +from genweb.organs.browser import tools +from plone import api +from plone.testing.z2 import Browser +from plone.api.env import adopt_roles + + +class FunctionalTestCase(unittest.TestCase): + """Base class for integration tests.""" + + layer = GENWEB_ORGANS_FUNCTIONAL_TESTING + + def setUp(self): + self.app = self.layer['app'] + self.portal = self.layer['portal'] + self.request = self.layer['request'] + self.browser = Browser(self.app) + + # Create default GW directories + setupview = getMultiAdapter((self.portal, self.request), name='setup-view') + setupview.apply_default_language_settings() + setupview.setup_multilingual() + setupview.createContent('n4') + + # Enable the possibility to add Organs folder + from Products.CMFPlone.interfaces.constrains import ISelectableConstrainTypes + behavior = ISelectableConstrainTypes(self.portal['ca']) + behavior.setConstrainTypesMode(1) + behavior.setLocallyAllowedTypes(['genweb.organs.organsfolder']) + behavior.setImmediatelyAddableTypes(['genweb.organs.organsfolder']) + + # Create Base folder to create base test folders + try: + api.content.delete(obj=self.portal['ca']['testingfolder'], check_linkintegrity=False) + except: + pass + # Create default Organs Test Folder + og_unit = api.content.create( + type='genweb.organs.organsfolder', + id='testingfolder', + title='Organ Tests', + container=self.portal['ca']) + + tools.create_organ_content( + og_unit, + 'open_organ', + 'OG.OPEN', + 'Organ TEST Obert', + 'obert') + tools.create_organ_content( + og_unit, + 'restricted_to_affected_organ', + 'OG.AFFECTED', + 'Organ TEST restringit a AFECTATS', + 'afectats') + tools.create_organ_content( + og_unit, + 'restricted_to_members_organ', + 'OG.MEMBERS', + 'Organ TEST restringit a MEMBRES', + 'membres') + + logout() + + def test_create_sessions_in_all_organs(self): + """ Test users who can create sessions + """ + # Tree kind or organs + root_obert = self.portal.ca.testingfolder.obert + root_membres = self.portal.ca.testingfolder.membres + root_afectats = self.portal.ca.testingfolder.afectats + # Check roles + logout() + setRoles(self.portal, TEST_USER_ID, ['OG1-Secretari']) + login(self.portal, TEST_USER_NAME) + self.assertTrue(api.content.create( + type='genweb.organs.sessio', + id='session1', + title='Session1', + container=root_obert)) + print "\n ORGAN OBERT [Secretari] - Add Session - True" + logout() + setRoles(self.portal, TEST_USER_ID, ['OG2-Editor']) + login(self.portal, TEST_USER_NAME) + self.assertTrue(api.content.create( + type='genweb.organs.sessio', + id='session2', + title='Session2', + container=root_obert)) + print " ORGAN OBERT [Editor] - Add Session - True" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('OG3-Membre'): + api.content.create( + type='genweb.organs.sessio', + id='session3', + title='Session3', + container=root_obert) + print " ORGAN OBERT [Membre] - Add Session - Unauthorized" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('OG4-Afectat'): + api.content.create( + type='genweb.organs.sessio', + id='session4', + title='Session4', + container=root_obert) + print " ORGAN OBERT [Afectat] - Add Session - Unauthorized" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('Anonim'): + api.content.create( + type='genweb.organs.sessio', + id='session5', + title='Session5', + container=root_obert) + print " ORGAN OBERT [Anonim] - Add Session - Unauthorized" + + # Check organs membre + logout() + setRoles(self.portal, TEST_USER_ID, ['OG1-Secretari']) + login(self.portal, TEST_USER_NAME) + self.assertTrue(api.content.create( + type='genweb.organs.sessio', + id='session1', + title='Session1', + container=root_membres)) + print "\n ORGAN RESTRINGIT MEMBRES [Secretari] - Add Session - True" + logout() + setRoles(self.portal, TEST_USER_ID, ['OG2-Editor']) + login(self.portal, TEST_USER_NAME) + self.assertTrue(api.content.create( + type='genweb.organs.sessio', + id='session2', + title='Session2', + container=root_membres)) + print " ORGAN RESTRINGIT MEMBRES [Editor] - Add Session - True" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('OG3-Membre'): + api.content.create( + type='genweb.organs.sessio', + id='session3', + title='Session3', + container=root_membres) + print " ORGAN RESTRINGIT MEMBRES [Membre] - Add Session - Unauthorized" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('OG4-Afectat'): + api.content.create( + type='genweb.organs.sessio', + id='session4', + title='Session4', + container=root_membres) + print " ORGAN RESTRINGIT MEMBRES [Afectat] - Add Session - Unauthorized" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('Anonim'): + api.content.create( + type='genweb.organs.sessio', + id='session5', + title='Session5', + container=root_membres) + print " ORGAN RESTRINGIT MEMBRES [Anonim] - Add Session - Unauthorized" + + # Check organs afectat + logout() + setRoles(self.portal, TEST_USER_ID, ['OG1-Secretari']) + login(self.portal, TEST_USER_NAME) + self.assertTrue(api.content.create( + type='genweb.organs.sessio', + id='session1', + title='Session1', + container=root_afectats)) + print "\n ORGAN RESTRINGIT AFECTATS [Secretari] - Add Session - True" + logout() + setRoles(self.portal, TEST_USER_ID, ['OG2-Editor']) + login(self.portal, TEST_USER_NAME) + self.assertTrue(api.content.create( + type='genweb.organs.sessio', + id='session2', + title='Session2', + container=root_afectats)) + print " ORGAN RESTRINGIT AFECTATS [Editor] - Add Session - True" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('OG3-Membre'): + api.content.create( + type='genweb.organs.sessio', + id='session3', + title='Session3', + container=root_afectats) + print " ORGAN RESTRINGIT AFECTATS [Membre] - Add Session - Unauthorized" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('OG4-Afectat'): + api.content.create( + type='genweb.organs.sessio', + id='session4', + title='Session4', + container=root_afectats) + print " ORGAN RESTRINGIT AFECTATS [Afectat] - Add Session - Unauthorized" + logout() + with self.assertRaises(Unauthorized): + with adopt_roles('Anonim'): + api.content.create( + type='genweb.organs.sessio', + id='session5', + title='Session5', + container=root_afectats) + print " ORGAN RESTRINGIT AFECTATS [Anonim] - Add Session - Unauthorized" diff --git a/genweb/organs/tests/test_file_permission_in_organs_restricted_to_membres.py b/genweb/organs/tests/test_file_permission_in_organs_restricted_to_membres.py index 1485f995..3132cc30 100644 --- a/genweb/organs/tests/test_file_permission_in_organs_restricted_to_membres.py +++ b/genweb/organs/tests/test_file_permission_in_organs_restricted_to_membres.py @@ -21,8 +21,6 @@ from zope.publisher.browser import TestRequest from zope.publisher.interfaces import NotFound -# TODO MEMBRE and check others! - class FunctionalTestCase(unittest.TestCase): """Base class for integration tests.""" diff --git a/genweb/organs/tests/testaudio.mp3 b/genweb/organs/tests/testaudio.mp3 new file mode 100644 index 00000000..cc72291e Binary files /dev/null and b/genweb/organs/tests/testaudio.mp3 differ