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): """ """
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,