def notifyCommentAdded(obj ,event):
    """Notify owner of added comment"""
    log = logging.getLogger('plumi.content.subscribers')
    urltool = getToolByName(obj, 'portal_url')
    portal = urltool.getPortalObject()
    video = aq_parent(aq_parent(obj))
    videoUrl = video.absolute_url()

    creator= video.Creator()
    membr_tool = getToolByName(obj,'portal_membership')
    member=membr_tool.getMemberById(creator)
    mTo = member.getProperty('email',None)
    log.info('notifyCommentAdded')
    if mTo:
        try:
            mFrom = portal.getProperty('email_from_address')
            mSubj = _('Comment added on: ') + video.Title().decode('utf-8')
            mMsg = 'To: %s\n' % mTo
            mMsg += 'From: %s\n' % mFrom
            mMsg += 'Content-Type: text/plain; charset=utf-8\n\n'
            mMsg = _('Hi ') + member.getProperty('fullname', creator)
            mMsg += '\n\n' + _('A comment has been added on ') + videoUrl + '\n\n'
            async = getUtility(IAsyncService)
            job = async.queueJobWithDelay(None, temp_time, sendMail, obj, mMsg, mSubj)
            log.info('notifyCommentAdded , im %s . sending email to %s from %s ' % (obj, mTo, mFrom) )
        except:
            log.error('Didnt actually send email to contribution owner! Something amiss with SecureMailHost.')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            if len(errors) == 1:
                if errors[0].field.getName() == "Email":
                    self.status = _(u'Invalid E-mail address')
                elif errors[0].field.getName() == "Website":
                    self.status = _(u'Invalid Website URI')
            else:
                self.status = self.formErrorsMessage
            return

        if not self.uploaded_file():
            self.status = _(u"No file was uploaded")
            return

        # Calculate unique id from title
        uid = str(DateTime().millis())

        if data['Tags']:
            subject = data['Tags'].replace(' ', '').split(',')
        else:
            subject = ''
        
        try:
            if data['Website']:
                if not data['Website'].startswith('http://'):
                    data['Website'] = 'http://' + data['Website']
        except:
            pass

        self.create_object(self.context, data, uid, subject)

        # get the newly created object
        obj = self.context[uid]

        # set the video file field and remove temp uploaded file
        path = self.uploaded_file()['path']
        f = open(path)
        obj.setFile(f)
        f.close()
        shutil.rmtree('/'.join(path.split('/')[:-1]), ignore_errors=True)

        # Rename with friendly id
        normalizer = getUtility(IIDNormalizer)
        new_id = self._findUniqueId(normalizer.normalize(data['Title']))
        transaction.savepoint(1)
        obj.setId(new_id)
        obj.setTitle(data['Title'])

        # Reindex and send init event
        obj.reindexObject()
        notify(ObjectInitializedEvent(obj))

        # Redirect back to the front page with a status message
        registry = getUtility(IRegistry)
        message = registry['plumi.content.browser.interfaces.IPlumiSettings.AfterVideoText']
        IStatusMessage(self.request).addStatusMessage(message,"info")
        contextURL = obj.absolute_url()
        self.request.response.redirect(contextURL)
def notify_reviewers(obj):
    """Tell the reviewers when an item was submited.

       This method sends an email to the site admin (mail control panel setting)
       when a new object has been submitted
    """
    settings = get_settings()
    if settings.notifyReviewers:
        obj_title = obj.Title()
        obj_url= obj.absolute_url()
        creator = obj.Creator()
        membr_tool = getToolByName(getSite(),'portal_membership')
        member=membr_tool.getMemberById(creator)
        creator_info = {'fullname':member.getProperty('fullname', 'Fullname missing'),
                        'email':member.getProperty('email', None)}
        #search for reviewers
        reviewers = membr_tool.searchForMembers(roles=['Reviewer'])
        for reviewer in reviewers:
            memberId = reviewer.id
            try:
                mTo = reviewer.getProperty('email', None)
                urltool = getToolByName(getSite(), 'portal_url')
                portal = urltool.getPortalObject()
                mFrom = portal.getProperty('email_from_address')
                mSubj = '%s -- submitted for your review' % obj_title
                mMsg = 'To: %s\n' % mTo
                mMsg += 'From: %s\n' % mFrom
                mMsg += 'Content-Type: text/plain; charset=utf-8\n\n'
                mMsg += _('Item has been submitted for your review').encode('utf-8','ignore') + '\n'
                mMsg += _('Please review the submitted content. ').encode('utf-8','ignore') + '\n\n'
                mMsg += 'Title: %s\n\n' % obj_title
                mMsg += '%s/view \n\n' % obj_url
                mMsg += 'The contributor was %s\n\n' % creator_info['fullname']
                mMsg += 'Email: %s\n\n' % creator_info['email']
                logger.info('notifyReviewersVideoSubmitted , im %s . sending email to %s from %s ' % (getSite(), mTo, mFrom) )
                async = getUtility(IAsyncService)
                job = async.queueJobWithDelay(None, temp_time, sendMail, obj, mMsg, mSubj)
            except Exception, e:
                logger.error('Didnt actually send email to reviewer! Something amiss with SecureMailHost. %s' % e)
def notify_moderator(obj, event):
    """Tell the moderator when a comment needs attention.

       This method sends an email to the site admin (mail control panel setting)
       when a new comment has been added
    """
    # Check if moderator notification is enabled
    registry = queryUtility(IRegistry)
    settings = registry.forInterface(IDiscussionSettings)
    if not settings.moderator_notification_enabled:
        return

    # Get informations that are necessary to send an email
    mail_host = getToolByName(obj, 'MailHost')
    portal_url = getToolByName(obj, 'portal_url')
    portal = portal_url.getPortalObject()
    sender = portal.getProperty('email_from_address')
    mto = portal.getProperty('email_from_address')

    # Check if a sender address is available
    if not sender:
        return

    conversation = aq_parent(obj)
    content_object = aq_parent(conversation)

    # Compose email
    #comment = conversation.getComments().next()
    subject = translate(_(u"A comment has been posted."), context=obj.REQUEST)
    message = translate(Message(MAIL_NOTIFICATION_MESSAGE,
                mapping={'title': obj.title,
                         'link': content_object.absolute_url()}),
                context=obj.REQUEST,
                )

    # Send email
    if PLONE_4:
        mail_host.send(message, mto, sender, subject, charset='utf-8')
    else:
        mail_host.secureSend(message,
                             mto,
                             sender,
                             subject=subject,
                             charset='utf-8')
from plumi.content.utils import get_settings
from plumi.content import  _

logger = logging.getLogger('plumi.content.subscribers')

try:
    # Plone 4:
    from Products.CMFCore.CMFCatalogAware import CatalogAware
    PLONE_4 = True
except: # pragma: no cover
    # Plone 3:
    from OFS.Traversable import Traversable as CatalogAware
    PLONE_4 = False

MAIL_NOTIFICATION_MESSAGE = _(u"mail_notification_message",
    default=u"A comment with the title '${title}' "
             "has been posted here: ${link}")

@adapter(IPlumiVideo, ITranscodedEvent)
def notifyTranscodeSucceededPlumiVideo(obj, event):
    if event.profile == 'jpeg':
        imgfield = obj.getField('thumbnailImage') # check if there is already a thumbnail image
        if not imgfield or imgfield.getSize(obj) == (0, 0): # if not use the image returned by the transcoder
            try:
                tt = getUtility(ITranscodeTool)
                entry = tt[obj.UID()]['video_file'][event.profile]
                url = '%s/%s' % (entry['address'], entry['path'])
                portal = getSiteManager()
                async = getUtility(IAsyncService)
                temp_time = datetime.datetime.now(pytz.UTC) + datetime.timedelta(seconds=2)
                default = obj.portal_url() + '/defaultthumb.jpeg'
from zope.interface import implements
from zope import schema
from zope.formlib import form

from plone.portlets.interfaces import IPortletDataProvider
from plone.app.portlets.portlets import base

from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from Products.CMFCore.utils import getToolByName

from plumi.content import _
from plumi.content.interfaces import IPlumiVideo


DEFAULT_TITLE = _(u"Video categories")


class ICurrentVideoCategories(IPortletDataProvider):

    portletTitle = schema.TextLine(
        title=_(u"Portlet title"),
        description=_(u"If none provided defaults to 'Video categories'"),
        required=False,
        default=u''
    )


class Assignment(base.Assignment):

    """
    """
Esempio n. 7
0
from plone.app.blob.field import BlobField, BlobMarshaller
# plumi.content imports
from plumi.content import plumiMessageFactory as _
from plumi.content.interfaces import IPlumiVideo
from plumi.content.config import PROJECTNAME
from plumi.content.metadataextractor import extract
from zope.app.component.hooks import getSite

PlumiVideoSchema = schemata.ATContentTypeSchema.copy() + atapi.Schema((
    # -*- Your Archetypes field definitions here ... -*-

    atapi.StringField(
        'Producer',
        storage=atapi.AnnotationStorage(),
        widget=atapi.StringWidget(
            label=_(u"Producer"),

        ),
        languageIndependent=True,
        schemata='default',        
    ),

    atapi.StringField(
        'Director',
        storage=atapi.AnnotationStorage(),
        widget=atapi.StringWidget(
            label=_(u"Director"),
        ),
        languageIndependent=True,
        schemata='default',        
    ),
from zope.interface import implements
from zope import schema
from zope.formlib import form
from zope.component import getMultiAdapter

from plone.portlets.interfaces import IPortletDataProvider
from plone.app.portlets.portlets import base

from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from Products.CMFCore.utils import getToolByName

from plumi.content import _
from plumi.content.interfaces import IPlumiVideo


DEFAULT_TITLE = _(u"Video from same categories")


class IVideoFromSameCategories(IPortletDataProvider):

    portletTitle = schema.TextLine(
        title=_(u"Portlet title"),
        description=_(u"If none provided defaults to 'Video from same categories'"),
        required=False,
        default=u''
    )

    count = schema.Int(
        title=_(u"Maximum number of shown items."),
        description=_(u"If greater than zero this number will limit the "
                      "items shown."),
 def updateWidgets(self):
     super(VideoAddForm, self).updateWidgets()
     self.default_fieldset_label = _('Basic info')
     self.widgets["License"].template = ViewPageTemplateFile("forms_templates/ccwidget.pt")
#third party products
from Products.ATVocabularyManager.namedvocabulary import NamedVocabulary

from plumi.content import plumiMessageFactory as _
from plumi.content.interfaces import IPlumiCallOut
from plumi.content.config import PROJECTNAME

PlumiCallOutSchema = schemata.ATContentTypeSchema.copy() + atapi.Schema((

    # -*- Your Archetypes field definitions here ... -*-

    atapi.StringField(
        'websiteURL',
        storage=atapi.AnnotationStorage(),
        widget=atapi.StringWidget(
            label=_(u"Website Address"),
            description=_(u"Website for more info about the callout"),
        ),
        languageIndependent=True,
    ),

    atapi.StringField(
        'location',
        schemata='default',
        storage=atapi.AnnotationStorage(),
        widget=atapi.StringWidget(
            label=_(u"Location"),
            description=_(u"Typically a callout has an associated location in a common format (i.e. City, State)"),
            visible = {'view': 'visible', 'edit': 'visible' },
        ),
        languageIndependent=True,