def testGetAddresses2(self):
        """Information entered in portal. Note: Portal has just one email 
        address which is used for sender and receiver.
        """
        utool = getToolByName(self.shop, "portal_url")
        portal = utool.getPortalObject()
                
        mail = IMailSchema(portal)
        
        # Just address is entered
        mail.set_email_from_address("*****@*****.**")
        
        sender = self.addresses.getSender()
        self.assertEqual(sender, "Site Administrator <*****@*****.**>")

        # receiver is same as sender
        receivers = self.addresses.getReceivers()
        self.assertEqual(receivers, ("Site Administrator <*****@*****.**>",))
        
        # Address and name is entered
        mail.set_email_from_name("John Doe")
        
        sender = self.addresses.getSender()
        self.assertEqual(sender, "John Doe <*****@*****.**>")

        # receiver is same as sender
        receivers = self.addresses.getReceivers()
        self.assertEqual(receivers, ("John Doe <*****@*****.**>",))
Ejemplo n.º 2
0
def setupVarious(context):
    if context.readDataFile('notes.rrhh_various.txt') is None:
        return
    portal = context.getSite()

    # permetre @. als usernames
    portal.portal_registration.manage_editIDPattern('^[A-Za-z][A-Za-z0-9_\-@.]*$')

    # configurem mail
    mail = IMailSchema(portal)
    mail.smtp_host = u'localhost'
    mail.email_from_name = "Administrador Web RRHH"
    mail.email_from_address = "*****@*****.**"

    portal.setTitle("Recursos Humans UPCnet")

    langtool = getToolByName(portal, 'portal_languages')
    langtool.manage_setLanguageSettings(defaultLanguage='ca',
                                        supportedLanguages=['ca'],
                                        setUseCombinedLanguageCodes=0,
                                        setForcelanguageUrls=0,
                                        setPathN=1,
                                        setCookieN=1,
                                        setAllowContentLanguageFallback=0,
                                        setRequestN=0,
                                        startNeutral=1,
                                        displayFlags=False)
Ejemplo n.º 3
0
def setupVarious(context):
    if context.readDataFile('notes.rrhh_various.txt') is None:
        return
    portal = context.getSite()

    # permetre @. als usernames
    portal.portal_registration.manage_editIDPattern(
        '^[A-Za-z][A-Za-z0-9_\-@.]*$')

    # configurem mail
    mail = IMailSchema(portal)
    mail.smtp_host = u'localhost'
    mail.email_from_name = "Administrador Web RRHH"
    mail.email_from_address = "*****@*****.**"

    portal.setTitle("Recursos Humans UPCnet")

    langtool = getToolByName(portal, 'portal_languages')
    langtool.manage_setLanguageSettings(defaultLanguage='ca',
                                        supportedLanguages=['ca'],
                                        setUseCombinedLanguageCodes=0,
                                        setForcelanguageUrls=0,
                                        setPathN=1,
                                        setCookieN=1,
                                        setAllowContentLanguageFallback=0,
                                        setRequestN=0,
                                        startNeutral=1,
                                        displayFlags=False)
    def unmaintained_testFormat(self):
        expected_mail = u"""Dear Mr admins,

On ... you presented your text 
\tTest PresentationArticleReview No 0s
on recensio.net, but so far no comments have been left by other users. Do you want to modify your presentation? You could review the phrasing of your core statements or extend the number of stated reference authors. Usually these will be contacted by the recensio.net editorial staff, which greatly adds to the visibility of a presentation. If you haven’t done this yet, you may also add cover images and indeces (in the case of presentations of monographs).

If you have any further questions or require more information please feel free to contact the recensio.net editorial team:
Recensio.net <fake>.

Yours sincerely
The recensio.net editorial team"""

        portal = self.layer["portal"]
        feeds = portal["RSS-feeds"]
        request = self.layer["request"]
        directlyProvides(request, IRecensioLayer)

        setRoles(portal, TEST_USER_ID, ["Manager"])
        login(portal, TEST_USER_NAME)
        alsoProvides(request, IDefaultBrowserLayer)

        mail_schema = IMailSchema(portal)
        mail_schema.email_from_address = "fake"
        membership_tool = getToolByName(portal, "portal_membership")
        user = membership_tool.getMemberById("admin")
        user.setProperties({"email": "*****@*****.**"})

        view = getMultiAdapter((feeds, request), name="mail_uncommented_presentations")

        class MockMailHost(object):
            sentMail = ""

            def send(self, messageText, mto, mfrom, subject, charset):
                self.sentMail = messageText

        view.mailhost = MockMailHost()

        presentation = feeds.aq_parent.Members["fake_member"].objectValues()[0]
        criteria = feeds.discussion_three_months_old.crit__created_ATFriendlyDateCriteria
        good_creation_time = DateTime() - criteria.value
        presentation.setCreationDate(good_creation_time)
        getMultiAdapter((presentation, request), name="solr-maintenance").reindex()

        view()
        for lineno, (expected, real) in enumerate(zip(expected_mail.split("\n"), view.mailhost.sentMail.split("\n"))):
            self.assertTrue(
                compare(expected, real),
                (
                    "Error in Line %i:\nExp:\n%s\nGot:\n%s"
                    % (
                        lineno,
                        "\n".join(expected_mail.split("\n")[max(0, lineno - 2) : lineno + 3]),
                        "\n".join(view.mailhost.sentMail.split("\n")[max(0, lineno - 2) : lineno + 3]),
                    )
                ).encode("ascii", "ignore"),
            )
Ejemplo n.º 5
0
 def render(self, portal=None):
     portal = api.portal.get()
     mail = IMailSchema(portal)
     path = portal.absolute_url()
     host = mail.smtp_host
     name = mail.email_from_name
     email = mail.email_from_address
     return (path, host, name, email)
Ejemplo n.º 6
0
def configure_email(site, server, port, username, password, name, sender):
    setSite(site)  # needs to be set for IMailSchema to work
    mail = IMailSchema(site)

    mail.smtp_host = unicode(server)
    mail.smtp_port = int(port)
    mail.smtp_userid = unicode(username)
    mail.smtp_pass = unicode(password)
    mail.email_from_address = unicode(sender)
    mail.email_from_name = unicode(name)
Ejemplo n.º 7
0
    def testGetAddresses2(self):
        """Information entered in portal. Note: Portal has just one email 
        address which is used for sender and receiver.
        """
        utool = getToolByName(self.shop, "portal_url")
        portal = utool.getPortalObject()

        mail = IMailSchema(portal)

        # Just address is entered
        mail.set_email_from_address("*****@*****.**")

        sender = self.addresses.getSender()
        self.assertEqual(sender, "Site Administrator <*****@*****.**>")

        # receiver is same as sender
        receivers = self.addresses.getReceivers()
        self.assertEqual(receivers, ("Site Administrator <*****@*****.**>", ))

        # Address and name is entered
        mail.set_email_from_name("John Doe")

        sender = self.addresses.getSender()
        self.assertEqual(sender, "John Doe <*****@*****.**>")

        # receiver is same as sender
        receivers = self.addresses.getReceivers()
        self.assertEqual(receivers, ("John Doe <*****@*****.**>", ))
Ejemplo n.º 8
0
    def render(self, portal=None):
        from genweb.controlpanel.interface import IGenwebControlPanelSettings
        from plone.app.controlpanel.site import ISiteSchema
        import unicodedata
        import types
        if CSRF:
            alsoProvides(self.request, IDisableCSRFProtection)
        portal = api.portal.get()
        mail = IMailSchema(portal)
        name = mail.email_from_name
        if name is not None:
            name = unicodedata.normalize('NFKD', name).encode('utf-8',
                                                              errors='ignore')
        email = mail.email_from_address
        site = ISiteSchema(portal)
        ga = '\n'.join(site.webstats_js)
        if ga is not '':
            ga = unicodedata.normalize('NFKD', ga).encode('utf-8',
                                                          errors='ignore')
        registry = queryUtility(IRegistry)
        gwcps = registry.forInterface(IGenwebControlPanelSettings)

        html_title_ca = gwcps.html_title_ca
        if html_title_ca is not None and type(
                html_title_ca) != types.BooleanType:
            html_title_ca = unicodedata.normalize(
                'NFKD', gwcps.html_title_ca).encode('utf-8', errors='ignore')
        html_title_es = gwcps.html_title_es
        if html_title_es is not None and type(
                html_title_es) != types.BooleanType:
            html_title_es = unicodedata.normalize(
                'NFKD', gwcps.html_title_es).encode('utf-8', errors='ignore')
        html_title_en = gwcps.html_title_en
        if html_title_en is not None and type(
                html_title_en) != types.BooleanType:
            html_title_en = unicodedata.normalize(
                'NFKD', gwcps.html_title_en).encode('utf-8', errors='ignore')
        signatura_unitat_ca = gwcps.signatura_unitat_ca
        if signatura_unitat_ca is not None and type(
                signatura_unitat_ca) != types.BooleanType:
            signatura_unitat_ca = unicodedata.normalize(
                'NFKD', gwcps.signatura_unitat_ca).encode('utf-8',
                                                          errors='ignore')
        signatura_unitat_es = gwcps.signatura_unitat_es
        if signatura_unitat_es is not None and type(
                signatura_unitat_es) != types.BooleanType:
            signatura_unitat_es = unicodedata.normalize(
                'NFKD', gwcps.signatura_unitat_es).encode('utf-8',
                                                          errors='ignore')
        signatura_unitat_en = gwcps.signatura_unitat_en
        if signatura_unitat_en is not None and type(
                signatura_unitat_en) != types.BooleanType:
            signatura_unitat_en = unicodedata.normalize(
                'NFKD', gwcps.signatura_unitat_en).encode('utf-8',
                                                          errors='ignore')
        right_logo_enabled = gwcps.right_logo_enabled
        if right_logo_enabled is not None and type(
                right_logo_enabled) != types.BooleanType:
            right_logo_enabled = unicodedata.normalize(
                'NFKD', gwcps.right_logo_enabled).encode('utf-8',
                                                         errors='ignore')
        right_logo_alt = gwcps.right_logo_alt
        if right_logo_alt is not None and type(
                right_logo_alt) != types.BooleanType:
            right_logo_alt = unicodedata.normalize(
                'NFKD', gwcps.right_logo_alt).encode('utf-8', errors='ignore')
        meta_author = gwcps.meta_author
        if meta_author is not None and type(meta_author) != types.BooleanType:
            meta_author = unicodedata.normalize(
                'NFKD', gwcps.meta_author).encode('utf-8', errors='ignore')
        contacte_id = gwcps.contacte_id
        if contacte_id is not None and type(contacte_id) != types.BooleanType:
            contacte_id = unicodedata.normalize(
                'NFKD', gwcps.contacte_id).encode('utf-8', errors='ignore')
        contacte_BBDD_or_page = gwcps.contacte_BBDD_or_page
        if contacte_BBDD_or_page is not None and type(
                contacte_BBDD_or_page) != types.BooleanType:
            contacte_BBDD_or_page = unicodedata.normalize(
                'NFKD', gwcps.contacte_BBDD_or_page).encode('utf-8',
                                                            errors='ignore')
        contacte_al_peu = gwcps.contacte_al_peu
        if contacte_al_peu is not None and type(
                contacte_al_peu) != types.BooleanType:
            contacte_al_peu = unicodedata.normalize(
                'NFKD', gwcps.contacte_al_peu).encode('utf-8', errors='ignore')
        directori_upc = gwcps.directori_upc
        if directori_upc is not None and type(
                directori_upc) != types.BooleanType:
            directori_upc = unicodedata.normalize(
                'NFKD', gwcps.directori_upc).encode('utf-8', errors='ignore')
        directori_filtrat = gwcps.directori_filtrat
        if directori_filtrat is not None and type(
                directori_filtrat) != types.BooleanType:
            directori_filtrat = unicodedata.normalize(
                'NFKD', gwcps.directori_filtrat).encode('utf-8',
                                                        errors='ignore')
        contacte_no_upcmaps = gwcps.contacte_no_upcmaps
        if contacte_no_upcmaps is not None and type(
                contacte_no_upcmaps) != types.BooleanType:
            contacte_no_upcmaps = unicodedata.normalize(
                'NFKD', gwcps.contacte_no_upcmaps).encode('utf-8',
                                                          errors='ignore')
        contacte_multi_email = gwcps.contacte_multi_email
        if contacte_multi_email is not None and type(
                contacte_multi_email) != types.BooleanType:
            contacte_multi_email = unicodedata.normalize(
                'NFKD', gwcps.contacte_multi_email).encode('utf-8',
                                                           errors='ignore')
        contact_emails_table = gwcps.contact_emails_table
        especific1 = gwcps.especific1
        if especific1 is not None and type(especific1) != types.BooleanType:
            especific1 = unicodedata.normalize(
                'NFKD', gwcps.especific1).encode('utf-8', errors='ignore')
        especific2 = gwcps.especific2
        if especific2 is not None and type(especific2) != types.BooleanType:
            especific2 = unicodedata.normalize(
                'NFKD', gwcps.especific2).encode('utf-8', errors='ignore')
        treu_imatge_capsalera = gwcps.treu_imatge_capsalera
        if treu_imatge_capsalera is not None and type(
                treu_imatge_capsalera) != types.BooleanType:
            treu_imatge_capsalera = unicodedata.normalize(
                'NFKD', gwcps.treu_imatge_capsalera).encode('utf-8',
                                                            errors='ignore')
        treu_menu_horitzontal = gwcps.treu_menu_horitzontal
        if treu_menu_horitzontal is not None and type(
                treu_menu_horitzontal) != types.BooleanType:
            treu_menu_horitzontal = unicodedata.normalize(
                'NFKD', gwcps.treu_menu_horitzontal).encode('utf-8',
                                                            errors='ignore')
        treu_icones_xarxes_socials = gwcps.treu_icones_xarxes_socials
        if treu_icones_xarxes_socials is not None and type(
                treu_icones_xarxes_socials) != types.BooleanType:
            treu_icones_xarxes_socials = unicodedata.normalize(
                'NFKD',
                gwcps.treu_icones_xarxes_socials).encode('utf-8',
                                                         errors='ignore')
        amaga_identificacio = gwcps.amaga_identificacio
        if amaga_identificacio is not None and type(
                amaga_identificacio) != types.BooleanType:
            amaga_identificacio = unicodedata.normalize(
                'NFKD', gwcps.amaga_identificacio).encode('utf-8',
                                                          errors='ignore')
        idiomes_publicats = gwcps.idiomes_publicats
        languages_link_to_root = gwcps.languages_link_to_root
        if languages_link_to_root is not None and type(
                languages_link_to_root) != types.BooleanType:
            languages_link_to_root = unicodedata.normalize(
                'NFKD', gwcps.languages_link_to_root).encode('utf-8',
                                                             errors='ignore')
        idestudi_master = gwcps.idestudi_master
        if idestudi_master is not None and type(
                idestudi_master) != types.BooleanType:
            idestudi_master = unicodedata.normalize(
                'NFKD', gwcps.idestudi_master).encode('utf-8', errors='ignore')
        create_packet = gwcps.create_packet
        if create_packet is not None and type(
                create_packet) != types.BooleanType:
            create_packet = unicodedata.normalize(
                'NFKD', gwcps.create_packet).encode('utf-8', errors='ignore')
        cl_title_ca = gwcps.cl_title_ca
        if cl_title_ca is not None and type(cl_title_ca) != types.BooleanType:
            cl_title_ca = unicodedata.normalize(
                'NFKD', gwcps.cl_title_ca).encode('utf-8', errors='ignore')
        cl_url_ca = gwcps.cl_url_ca
        cl_img_ca = gwcps.cl_img_ca
        if cl_img_ca is not None and type(cl_img_ca) != types.BooleanType:
            cl_img_ca = unicodedata.normalize('NFKD', gwcps.cl_img_ca).encode(
                'utf-8', errors='ignore')
        cl_open_new_window_ca = gwcps.cl_open_new_window_ca
        if cl_open_new_window_ca is not None and type(
                cl_open_new_window_ca) != types.BooleanType:
            cl_open_new_window_ca = unicodedata.normalize(
                'NFKD', gwcps.cl_open_new_window_ca).encode('utf-8',
                                                            errors='ignore')
        cl_enable_ca = gwcps.cl_enable_ca
        if cl_enable_ca is not None and type(
                cl_enable_ca) != types.BooleanType:
            cl_enable_ca = unicodedata.normalize(
                'NFKD', gwcps.cl_enable_ca).encode('utf-8', errors='ignore')
        cl_title_es = gwcps.cl_title_es
        if cl_title_es is not None and type(cl_title_es) != types.BooleanType:
            cl_title_es = unicodedata.normalize(
                'NFKD', gwcps.cl_title_es).encode('utf-8', errors='ignore')
        cl_url_es = gwcps.cl_url_es
        cl_img_es = gwcps.cl_img_es
        if cl_img_es is not None and type(cl_img_es) != types.BooleanType:
            cl_img_es = unicodedata.normalize('NFKD', gwcps.cl_img_es).encode(
                'utf-8', errors='ignore')
        cl_open_new_window_es = gwcps.cl_open_new_window_es
        if cl_open_new_window_es is not None and type(
                cl_open_new_window_es) != types.BooleanType:
            cl_open_new_window_es = unicodedata.normalize(
                'NFKD', gwcps.cl_open_new_window_es).encode('utf-8',
                                                            errors='ignore')
        cl_enable_es = gwcps.cl_enable_es
        if cl_enable_es is not None and type(
                cl_enable_es) != types.BooleanType:
            cl_enable_es = unicodedata.normalize(
                'NFKD', gwcps.cl_enable_es).encode('utf-8', errors='ignore')
        cl_title_en = gwcps.cl_title_en
        if cl_title_en is not None and type(cl_title_en) != types.BooleanType:
            cl_title_en = unicodedata.normalize(
                'NFKD', gwcps.cl_title_en).encode('utf-8', errors='ignore')
        cl_url_en = gwcps.cl_url_en
        cl_img_en = gwcps.cl_img_en
        if cl_img_en is not None and type(cl_img_en) != types.BooleanType:
            cl_img_en = unicodedata.normalize('NFKD', gwcps.cl_img_en).encode(
                'utf-8', errors='ignore')
        cl_open_new_window_en = gwcps.cl_open_new_window_en
        if cl_open_new_window_en is not None and type(
                cl_open_new_window_en) != types.BooleanType:
            cl_open_new_window_en = unicodedata.normalize(
                'NFKD', gwcps.cl_open_new_window_en).encode('utf-8',
                                                            errors='ignore')
        cl_enable_en = gwcps.cl_enable_en
        if cl_enable_en is not None and type(
                cl_enable_en) != types.BooleanType:
            cl_enable_en = unicodedata.normalize(
                'NFKD', gwcps.cl_enable_en).encode('utf-8', errors='ignore')

        output = """Títol del web amb HTML tags (negretes) [CA]: {}<br/>
                     Títol del web amb HTML tags (negretes) [ES]: {}<br/>
                     Títol del web amb HTML tags (negretes) [EN]: {}<br/>
                     Signatura de la unitat [CA]: {}<br/>
                     Signatura de la unitat [ES]: {}<br/>
                     Signatura de la unitat [EN]: {}<br/>
                     Mostrar logo dret: {}<br/>
                     Text alternatiu del logo dret: {}<br/>
                     Meta author tag content: {}<br/>
                     ID contacte de la unitat: {}<br/>
                     Pàgina de contacte alternativa: {}<br/>
                     Adreça de contacte al peu: {}<br/>
                     Directori UPC a les eines: {}<br/>
                     Filtrat per unitat?: {}<br/>
                     Desactivar UPCmaps: {}<br/>
                     Seleccionar l'adreça d'enviament: {}<br/>
                     Contact emails: {}<br/>
                     Color específic 1: {}<br/>
                     Color específic 2: {}<br/>
                     Treu la imatge de la capçalera: {}<br/>
                     Treu el menú horitzontal: {}<br/>
                     Treu les icones per compartir en xarxes socials: {}<br/>
                     Amaga l'enllaç d'identificació de les eines: {}<br/>
                     Idiomes publicats al web: {}<br/>
                     Redireccionar a l'arrel del lloc al clicar sobre els idiomes del portal: {}<br/>
                     id_estudi: {}<br/>
                     Crear informació general del màster: {}<br/>
                     Link title [CA]: {}<br/>
                     Enllaç per al menú superior: {}<br/>
                     Enllaç per a la icona del menú superior: {}<br/>
                     Obre en una nova finestra: {}<br/>
                     Publica l'enllaç customitzat: {}<br/>
                     Link title [ES]: {}<br/>
                     Enllaç per al menú superior: {}<br/>
                     Enllaç per a la icona del menú superior: {}<br/>
                     Obre en una nova finestra: {}<br/>
                     Publica l'enllaç customitzat: {}<br/>
                     Link title [EN]: {}<br/>
                     Enllaç per al menú superior: {}<br/>
                     Enllaç per a la icona del menú superior: {}<br/>
                     Obre en una nova finestra: {}<br/>
                     Publica l'enllaç customitzat: {}<br/>
                     Nom 'De' del lloc: {}<br/>
                     Adreça 'De' del lloc: {}<br/>
                     Javascript per al suport d'estadístiques web: {}<br/></br>
                     """.format(
            html_title_ca, html_title_es, html_title_en, signatura_unitat_ca,
            signatura_unitat_es, signatura_unitat_en, right_logo_enabled,
            right_logo_alt, meta_author, contacte_id, contacte_BBDD_or_page,
            contacte_al_peu, directori_upc, directori_filtrat,
            contacte_no_upcmaps, contacte_multi_email, contact_emails_table,
            especific1, especific2, treu_imatge_capsalera,
            treu_menu_horitzontal, treu_icones_xarxes_socials,
            amaga_identificacio, idiomes_publicats, languages_link_to_root,
            idestudi_master, create_packet, cl_title_ca, cl_url_ca, cl_img_ca,
            cl_open_new_window_ca, cl_enable_ca, cl_title_es, cl_url_es,
            cl_img_es, cl_open_new_window_es, cl_enable_es, cl_title_en,
            cl_url_en, cl_img_en, cl_open_new_window_en, cl_enable_en, name,
            email, ga)
        return output
    def unmaintained_testFormat(self):
        expected_mail = {'Review Monograph': [u'''From: Recensio.net <fake>
To: Recensio.net <fake>
Bcc: [email protected]
Subject: Benachrichtigung über Kommentareingang

Sehr geehrte/r Tadeusz Kotłowski,

zu Ihrer Schrift
    Tadeusz Kotłowski: Test ReviewMonograph No 0: Dzieje państwa i społeczeństwa 1890–1945, 2008, 978-83-60448-39-7 (rezensiert von Стоичков, Христо)

erschien eine Rezension in der Zeitschrift
Zeitschrift 1, Summer, Issue 2. Diese Rezension wurde auf der Rezensionsplattform recensio.net publiziert.
Jack Commenter hat am ... diese Rezension bzw. Ihre Schrift kommentiert. Sie haben hier die Gelegenheit, den Kommentar zu lesen und ggf. darauf zu reagieren:

http://nohost/plone/sample-reviews/newspapera/summer/issue-2/ReviewMonograph...

Für Rückfragen steht Ihnen die recensio.net-Redaktion gern zur Verfügung: Recensio.net <fake>.

Mit freundlichen Grüßen,
Ihr recensio.net-Team''',
                                            u'''From: Recensio.net <fake>
To: [email protected]
Bcc: [email protected]
Subject: Benachrichtigung über Kommentareingang

Sehr geehrte/r Hugh Commenter,

Sie haben die Schrift bzw. die Internetressource
    Tadeusz Kotłowski: Test ReviewMonograph No 0: Dzieje państwa i społeczeństwa 1890–1945, 2008, 978-83-60448-39-7 (rezensiert von Стоичков, Христо) in Zeitschrift 1, Summer, Issue 2

auf recensio.net kommentiert. Jack Commenter hat am ... einen weiteren Kommentar abgegeben. Sie haben hier die Gelegenheit, diesen zu lesen und ggf. darauf zu reagieren:

http://nohost/plone/sample-reviews/newspapera/summer/issue-2/ReviewMonograph...

Für Rückfragen steht Ihnen die recensio.net-Redaktion gern zur Verfügung: Recensio.net <fake>.

Mit freundlichen Grüßen,
Ihr recensio.net-Team'''],
                         'Presentation Article Review': [u'''From: Recensio.net <fake>
To: [email protected]
Bcc: [email protected]
Subject: Benachrichtigung über Kommentareingang

Sehr geehrte/r Hugh Commenter,

Sie haben die Schrift bzw. die Internetressource
    Tadeusz Kotłowski: Test PresentationArticleReview No 0: Dzieje państwa i społeczeństwa 1890–1945, 2008,  (präsentiert von Стоичков, Христо)

auf recensio.net kommentiert. Jack Commenter hat am ... einen weiteren Kommentar abgegeben. Sie haben hier die Gelegenheit, diesen zu lesen und ggf. darauf zu reagieren:

http://nohost/plone/Members/fake_member/PresentationArticleReview...

Für Rückfragen steht Ihnen die recensio.net-Redaktion gern zur Verfügung: Recensio.net <fake>.

Mit freundlichen Grüßen,
Ihr recensio.net-Team''']}

        portal = self.layer['portal']
        reviews = [portal['sample-reviews']['newspapera']['summer']['issue-2'].objectValues()[0], 
            portal.Members['fake_member'].objectValues()[0]]

        request = self.layer['request']
        directlyProvides(request, IRecensioLayer)

        setRoles(portal, TEST_USER_ID, ['Manager'])
        login(portal, TEST_USER_NAME)
        alsoProvides(request, IDefaultBrowserLayer)

        membership_tool = getToolByName(portal, 'portal_membership')
        membership_tool.addMember('commenter', '12345', [], [], properties={'email': '*****@*****.**', 'preferred_language': 'de'})
        membership_tool.addMember('commenter2', '12345', [], [], properties={'email': '*****@*****.**', 'preferred_language': 'de'})

        for review in reviews:
            conversation = IConversation(aq_inner(review))
            comment = createObject('plone.Comment')
            comment.author_username = '******'
            comment.author_name = 'Jack Commenter'
            comment.author_email = '*****@*****.**'
            comment.text = 'Comment Text!'
            conversation.addComment(comment)
            comment2 = createObject('plone.Comment')
            comment2.author_username = '******'
            comment2.author_name = 'Hugh Commenter'
            comment2.author_email = '*****@*****.**'
            comment2.text = 'Second Comment Text!'
            conversation.addComment(comment2)

            mail_schema = IMailSchema(portal)
            mail_schema.email_from_address = 'fake'

            comment2 = conversation.items()[0][1]
            view = getMultiAdapter((comment2, request), name='notify_author_new_comment')
            class MockMailHost(object):
                sentMail = []
                def send(self, messageText, mto, mfrom, subject, charset):
                    self.sentMail.append(messageText)
            view.mailhost = MockMailHost()
            #view.ts = getToolByName(portal, 'translation_service')

            view()
            self.assertEquals(len(view.mailhost.sentMail), len(expected_mail[review.portal_type]))
            for i in range(len(view.mailhost.sentMail)):
                for lineno, (expected, real) in enumerate(
                                          zip(expected_mail[review.portal_type][i].split('\n'),
                                              view.mailhost.sentMail[i].split('\n'))):
                    self.assertTrue(compare(expected, real), ("Error in Line %i:\nExp:\n%s\nGot:\n%s" % (lineno, '<<<\n'.join(expected_mail[review.portal_type][i].split('\n')[max(0, lineno-2):lineno+3]), '<<<\n'.join(view.mailhost.sentMail[i].split('\n')[max(0, lineno-2):lineno+3]))).encode('ascii', 'ignore'))
Ejemplo n.º 10
0
    def createContent(self):
        """
        """

        # configurem mail
        portal = getToolByName(self,'portal_url').getPortalObject()
        mail = IMailSchema(portal)
        mail.smtp_host = u'localhost'
        mail.email_from_name = "Administrador del Genweb"
        mail.email_from_address = "*****@*****.**"

        if getattr(portal,'front-page',False):
          portal.manage_delObjects('front-page')
        if getattr(portal,'news',False):
          if not self.getObjectStatus(portal.news):
            portal.manage_delObjects('news')
        if getattr(portal,'events',False):
          if not self.getObjectStatus(portal.events):
            portal.manage_delObjects('events')
        if getattr(portal,'Members',False):
          portal['Members'].setExcludeFromNav(True)
          portal['Members'].reindexObject()
          portal['Members'].setLanguage('en')

        # Crear carpetes i coleccions, linkades per language, el primer language de la tupla es el canonical

        news = self.crearObjecte(portal,'news','Folder','News','Site News',constrains=(['News Item'],['Image']))
        noticias = self.crearObjecte(portal,'noticias','Folder','Noticias','Noticias del sitio',constrains=(['News Item'],['Image']))
        noticies = self.crearObjecte(portal,'noticies','Folder','Notícies','Notícies del lloc',constrains=(['News Item'],['Image']))
        self.setLanguageAndLink([(noticies,'ca'),(noticias,'es'),(news,'en')])

        self.addCollection(news,'aggregator','News','Site News','News Item')
        self.addCollection(noticias,'aggregator','Noticias','Noticias del sitio','News Item')
        self.addCollection(noticies,'aggregator','Notícies','Notícies del lloc','News Item')
        self.setLanguageAndLink([(noticies.aggregator,'ca'),(noticias.aggregator,'es'),(news.aggregator,'en')])

        noticies.aggregator.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)
        noticias.aggregator.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)
        news.aggregator.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)

        events = self.crearObjecte(portal,'events','Folder','Events','Site Events',constrains=(['Event','Meeting'],['Image']))
        eventos = self.crearObjecte(portal,'eventos','Folder','Eventos','Eventos del sitio',constrains=(['Event','Meeting'],['Image']))
        esdeveniments = self.crearObjecte(portal,'esdeveniments','Folder','Esdeveniments','Esdeveniments del lloc',constrains=(['Event','Meeting'],['Image']))
        self.setLanguageAndLink([(esdeveniments,'ca'),(eventos,'es'),(events,'en')])

        self.addCollection(events,'aggregator','Events','Site Events',('Event','Meeting'),date_filter=True)
        self.addCollection(eventos,'aggregator','Eventos','Eventos del sitio',('Event','Meeting'),date_filter=True)
        self.addCollection(esdeveniments,'aggregator','Esdeveniments','Esdeveniments del lloc',('Event','Meeting'),date_filter=True)
        self.setLanguageAndLink([(esdeveniments.aggregator,'ca'),(eventos.aggregator,'es'),(events.aggregator,'en')])

        esdeveniments.aggregator.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)
        eventos.aggregator.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)
        events.aggregator.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)

        self.addCollection(events.aggregator,'previous','Past Events','Events which have already happened. ','Event',dateRange=u'-',operation=u'less',setDefault=False,path='grandfather',date_filter=True)
        self.addCollection(eventos.aggregator,'anteriores','Eventos pasados','Eventos del sitio que ya han sucedido','Event',dateRange=u'-',operation=u'less',setDefault=False,path='grandfather',date_filter=True)
        self.addCollection(esdeveniments.aggregator,'anteriors','Esdeveniments passats','Esdeveniments del lloc que ja han passat','Event',dateRange=u'-',operation=u'less',setDefault=False,path='grandfather',date_filter=True)
        self.setLanguageAndLink([(esdeveniments.aggregator.anteriors,'ca'),(eventos.aggregator.anteriores,'es'),(events.aggregator.previous,'en')])

        banners_en = self.crearObjecte(portal,'banners-en','BannerContainer','Banners','English Banners')
        banners_es = self.crearObjecte(portal,'banners-es','BannerContainer','Banners','Banners en Español')
        banners_ca = self.crearObjecte(portal,'banners-ca','BannerContainer','Banners','Banners en Català')
        self.setLanguageAndLink([(banners_ca,'ca'),(banners_es,'es'),(banners_en,'en')])

        logosfooter_en = self.crearObjecte(portal,'logosfooter-en','Logos_Container','Footer Logos','English footer logos')
        logosfooter_es = self.crearObjecte(portal,'logosfooter-es','Logos_Container','Logos pie','Logos en español del pie de página')
        logosfooter_ca = self.crearObjecte(portal,'logosfooter-ca','Logos_Container','Logos peu','Logos en català del peu de pàgina')
        self.setLanguageAndLink([(logosfooter_ca,'ca'),(logosfooter_es,'es'),(logosfooter_en,'en')])

        #crear pagines de benvinguda

        welcome_string="""<h1>Us donem la benvinguda a Genweb UPC v3</h1>
<div id="content-core">
<p> </p>
<p><a href="http://www.upc.edu/comunicacio/www/genweb-upc"><img alt="Genweb UPC" class="image-right" src="logogw.gif" /></a></p>
<p>A partir d'aquest moment, ja podeu introduir continguts al vostre espai <a href="http://www.upc.edu/comunicacio/www/genweb-upc" target="_blank">Genweb</a>. A més, us oferim l'allotjament del vostre espai, <a href="http://www.upc.edu/comunicacio/www/dominis-upc" target="_blank">un domini upc.edu</a>, estadístiques, formació i suport tècnic.</p>
<h2>Abans d'utilitzar Genweb...</h2>
<p>Consulteu el <a href="http://www.upc.edu/comunicacio/www/genweb-upc/formacio/genweb3_manualUsuari.pdf" target="_blank">manual d'usuari</a> i els <a href="http://www.upc.edu/comunicacio/www/genweb-upc/formacio" target="_blank">videotutorials de formació</a>.<br /> Sempre tindreu accés a la formació i al suport tècnic a través de l'enllaç d'<a href="http://www.upc.edu/comunicacio/www/genweb-upc/formacio" target="_blank">ajuda</a> que apareix a les opcions d'usuari.</p>
<h2>Les novetats...</h2>
<p>El Genweb està a la última, més potent i adaptat<br /><br /></p>
<ul>
<li>Una <strong>imatge actualitzada </strong>al nou programari</li>
<li><strong>TinyMCE</strong> és el nou editor del Genweb</li>
<li>Edició més flexible:<strong> crea les teves pròpies </strong><strong>plantilles</strong></li>
<li><strong>Genweb UPC v3 </strong>està desenvolupat amb el gestor de continguts de programari lliure <a href="http://www.plone.org" target="_blank">Plone 4.0</a>, basat en el servidor d'aplicacions Zope.</li>
</ul>
<h2>Participació...</h2>
<p>Si teniu idees, necessitats o suggeriments per millorar el Genweb, ens ho podeu explicar a la nostra <a href="mailto:[email protected]">bústia</a>.</p>
<p> </p>
<p> </p>
</div>"""
        benvingut = self.crearObjecte(portal,'benvingut','Document','Benvingut','')
        bienvenido = self.crearObjecte(portal,'bienvenido','Document','Bienvenido','')
        welcome = self.crearObjecte(portal,'welcome','Document','Welcome','')

        benvingut.setText(welcome_string, mimetype='text/html')
        bienvenido.setText(welcome_string, mimetype='text/html')
        welcome.setText(welcome_string, mimetype='text/html')

        benvingut.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)
        bienvenido.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)
        welcome.manage_permission(permissions.DeleteObjects, roles = ["Manager"], acquire=False)

        self.setLanguageAndLink([(benvingut,'ca'),(bienvenido,'es'),(welcome,'en')])

        # Templates TinyMCE
        templates = self.crearObjecte(portal, 'templates', 'Folder', 'Templates', 'Plantilles per defecte administrades per l\'SCP.', constrains = (['Document'],['']))
        plantilles = self.crearObjecte(portal, 'plantilles', 'Folder', 'Plantilles', 'En aquesta carpeta podeu posar les plantilles per ser usades a l\'editor.',constrains=(['Document'],['']))
        pw = getToolByName(portal, "portal_workflow")
        pw.doActionFor(templates, "restrict")


        for plt in get_plantilles():
            plantilla = self.crearObjecte(templates, normalizeString(plt['titol']), 'Document', plt['titol'], plt['resum'],'')
            plantilla.setText(plt['cos'],mimetype="text/html")

        return True