Beispiel #1
0
 def __call__(self, value=None):
     msg = self.toggle(value)
     messages = IStatusMessage(self.request)
     messages.addStatusMessage(msg, type="info")
     redirect = self.request.get_header("referer") \
         or '/'.join([self.context.absolute_url(), 'view'])
     self.request.response.redirect(redirect)
def plonegroup_contact_transition(contact, event):
    """
        React when a IPloneGroupContact transition is done
    """
    if event.transition and event.transition.id == 'deactivate':
        # check if the transition is selected
        registry = getUtility(IRegistry)
        pp = api.portal.get_tool('portal_properties')
        errors = []
        if contact.UID() in registry[ORGANIZATIONS_REGISTRY]:
            errors.append(_('This contact is selected in configuration'))
        elif pp.site_properties.enable_link_integrity_checks:
            search_value_in_objects(contact, contact.UID(), p_types=[], type_fields={})
            storage = ILinkIntegrityInfo(contact.REQUEST)
            breaches = storage.getIntegrityBreaches()
            if contact in breaches:
                errors.append(_("This contact is used in following content: ${items}",
                                mapping={'items': ', '.join(['<a href="%s" target="_blank">%s</a>'
                                                             % (i.absolute_url(), i.Title())
                                                             for i in breaches[contact]])}))
        if errors:
            smi = IStatusMessage(contact.REQUEST)
            smi.addStatusMessage(_('You cannot deactivate this item !'), type='error')
            smi.addStatusMessage(errors[0], type='error')
            view_url = getMultiAdapter((contact, contact.REQUEST), name=u'plone_context_state').view_url()
            # contact.REQUEST['RESPONSE'].redirect(view_url)
            raise Redirect(view_url)
    def _on_save(self, data):
        """
        Deleting the gray-scale converted resources
        from the filesystem cache
        """
        messages = IStatusMessage(self.request)
        if data.get("delete_cached_resources"):
            site = getSite()
            try:
                path = str("/++%s++%s" % (TYPE, THEME))
                location = site.restrictedTraverse(path).directory
            except AttributeError, e:
                log.info("Unable to remove files for: %s due to error: %s" % (path, e))
                message = _(u"Couldn't remove files from %s" % path)
                messages.addStatusMessage(message, type="error")
                return

            try:
                log.info("Removing cached gray-scale files from: %s" % location)
                for filename in os.listdir(location):
                    file_path = os.path.join(location, filename)
                    if os.path.isfile(file_path):
                        os.unlink(file_path)
                    else:
                        shutil.rmtree(file_path)
            except OSError, e:
                log.info("Unable to remove files from: %s, error: %s" % (location, e))
                message = _(u"Couldn't remove files from %s" % location)
                messages.addStatusMessage(message, type="error")
    def handle_migrate(self, action):
        data, errors = self.extractData()

        if errors:
            return

        changed_base_classes = data.get('changed_base_classes', [])
        if not changed_base_classes:
            return

        migrate_to_folderish = data.get('changed_base_classes', False)
        catalog = getToolByName(self.context, "portal_catalog")
        migrated = []
        not_migrated = []
        for brain in catalog():
            obj = brain.getObject()
            old_class_name = dxmigration.get_old_class_name_string(obj)
            if old_class_name in changed_base_classes:
                if dxmigration.migrate_base_class_to_new_class(
                        obj, migrate_to_folderish=migrate_to_folderish):
                    migrated.append(obj)
                else:
                    not_migrated.append(obj)

        messages = IStatusMessage(self.request)
        info_message_template = 'There are {0} objects migrated.'
        warn_message_template = 'There are not {0} objects migrated.'
        if migrated:
            msg = info_message_template.format(len(migrated))
            messages.addStatusMessage(msg, type='info')
        if not_migrated:
            msg = warn_message_template.format(len(not_migrated))
            messages.addStatusMessage(msg, type='warn')
        self.request.response.redirect(self.request['ACTUAL_URL'])
    def handleAdd(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        self.checkISBN(data)

        # newEPublication = data.get('epublication_uid') and api.content.get(UID=data['epublication_uid']) \
        #     or self.addEPublication(data)
        newEPublication = self.addEPublication(data)
        newOriginalFile = self.addOriginalFile(newEPublication, data)
        
        # poslat zadost na vygenerovani ohlasovaciho listku - je na to
        # amqp sluzba
        
        if not data.get('epublication_uid'):
            authors = [data[key] for key in ['author1','author2','author3'] if data[key]]
            for author in authors:
                createContentInContainer(newEPublication, 'edeposit.content.author', fullname=author, title=author)

        messages = IStatusMessage(self.request)
        messages.addStatusMessage(u"ePublikace byla ohlášena.", type="info")

        fti = getUtility(IDexterityFTI, name=newOriginalFile.portal_type)
        #returnURL = "/".join([container.absolute_url(), newEPublication.id, newOriginalFile.id, fti.immediate_view])
        self.request.response.redirect(newOriginalFile.absolute_url())
Beispiel #6
0
 def send_unsubscribe_email(self, subscriber):
     newsletter = self.context
     catalog = getToolByName(self.context, "portal_catalog")
     query = {}
     query["portal_type"] = "ENLSubscriber"
     query["email"] = subscriber
     results = catalog.unrestrictedSearchResults(query)
     messages = IStatusMessage(self.request)
     if results:
         subscriber_brain = results[0]
         unsubscribe_url = self.newsletter_url +\
             '/unsubscribe?subscriber=' + subscriber_brain.UID
         msg_text = """%s: %s""" % (
             newsletter.getUnsubscribe_string(), unsubscribe_url)
         api.portal.send_email(
             recipient=subscriber,
             sender=self.context.email_from_address,
             subject=_(u"confirm newsletter unsubscription"),
             body=msg_text,
         )
         messages.addStatusMessage(
             _("We send you an email, please confirm this unsubscription."),
             "info")
     else:
         # todo: write an extra error msg if a plone user wants to
         # unsubscribe himself
         messages.addStatusMessage(
             _("Your email address could not be found in subscribers."),
             "error")
Beispiel #7
0
    def sendMail(
        self,
        msg,
        mail_from,
        mail_to,
        subject,
        ):

        if mail_to:
            bcc_to = []
            if NOTIFICATION_LOG_ADDR:
                msg = u'''From: %s
To: %s
Bcc: %s
Subject: %s

''' \
                    % (mail_from, mail_to, NOTIFICATION_LOG_ADDR,
                       subject) + msg
                bcc_to = bcc_to + [NOTIFICATION_LOG_ADDR]
            if not isinstance(mail_to, list):
                mail_to = [mail_to]
            self.mailhost.send(messageText=msg, mto=mail_to + bcc_to,
                               mfrom=mail_from, subject=subject,
                               charset='utf-8')
        else:
            (mail_to, pref_lang) = self.findRecipient()
            messages = IStatusMessage(self.request)
            messages.addStatusMessage(self.ts.translate(_('mail_no_recipients'
                    ), target_language=pref_lang), type='warning')
Beispiel #8
0
    def __call__(self):
        context = aq_inner(self.context)
        request = self.request
        response_id = self.validate_response_id()
        file = None
        if response_id != -1:
            response = self.folder[response_id]
            file = response.attachment
            if file is None:
                status = IStatusMessage(request)
                msg = _(u"Response id ${response_id} has no attachment.",
                        mapping=dict(response_id=response_id))
                msg = translate(msg, 'Poi', context=context)
                status.addStatusMessage(msg, type='error')
        if file is None:
            request.response.redirect(context.absolute_url())

        # From now on file exists.
        # Code mostly taken from Archetypes/Field.py:FileField.download
        filename = getattr(file, 'filename', file.getId())
        if filename is not None:
            if FILE_NORMALIZER:
                filename = IUserPreferredFileNameNormalizer(request).normalize(
                    safe_unicode(filename, context.getCharset()))
            else:
                filename = safe_unicode(filename, context.getCharset())
            header_value = contentDispositionHeader(
                disposition='attachment',
                filename=filename)
            request.response.setHeader("Content-disposition", header_value)
        return file.index_html(request, request.response)
class NewsletterConfig(BrowserView):
    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.messages = IStatusMessage(self.request)
        self.mailinglist_manager = utils.get_mailinglist_manager()
        self.mailinglists = self.mailinglist_manager.mailinglists
        self.protocols = self.mailinglist_manager.protocols

    def __call__(self):
        submitted = self.request.get('form.submitted')

        if submitted == 'add':
            # add new mailinglist
            name = self.request.get('name', None)
            email = self.request.get('email', None)
            protocol = self.request.get('protocol', None)

            if name and email and protocol:
                self.mailinglist_manager.add(name, email, protocol)
            else:
                msgid = _(u"config_add_mailinglist_failed",
                    default="Could not add new mailing list. Please fill out\
                    all fields.")
                translated = self.context.translate(msgid)
                self.messages.addStatusMessage(translated, type="error")

        if submitted == 'remove':
            lists = self.request.get('remove', [])
            for list_id in lists:
                self.mailinglist_manager.remove(list_id)

        return self.index()
    def __call__(self, request):
        value = request.form.get(self.field_name, request.get(self.field_name, None))

        if value is not None:
            messages = IStatusMessage(request)
            catalog = getToolByName(self.context, "portal_catalog")
            plone_utils = getToolByName(self.context, 'plone_utils', None)

            parent = aq_parent(aq_inner(self.context))

            # Get the object metatype that we are going to create
            object_type = self.context.Type()

            # Actual folder where the object is going to be created, ignoring the portal_factory check
            object_folder = str('/'.join(parent.getPhysicalPath()))
            object_folder = object_folder.replace('/portal_factory/'+object_type,'')

            results = self.context.portal_catalog.searchResults(portal_type=object_type,
                                                                path={'query':object_folder,'level':0,'depth':1},
                                                                Title=value)

            for result in results:
                if self.context.UID() == result.getObject().UID():
                    return None

            if results:
                messages.addStatusMessage(_(u'There is an object in this folder with the same type and title'), type="error")
                return { self.field_name: '' }

        # Returning None means no error
        return None
    def __call__(self):
        """
        """
        request = aq_inner(self.request)
        form = request.form

        if not 'form.button.Delete' in form:
            return super(PatchedManageAssignments, self).__call__()

        context = aq_inner(self.context)
        assignable = IRuleAssignmentManager(context)
        storage = getUtility(IRuleStorage)
        status = IStatusMessage(self.request)
        rule_ids = form.get('rule_ids', ())
        path = '/'.join(context.getPhysicalPath())

        for r in rule_ids:
            del assignable[r]
            assignments = get_assignments(storage[r])
            if path in assignments:
                msg = 'Try to remove from %r' % (
                    assignments
                )
                logger.info(msg)
                try:
                    assignments.remove(path, None)
                except:
                    assignments.remove(path)
        status.addStatusMessage(_(u"Assignments deleted."), type='info')
        return self.template()
Beispiel #12
0
    def handle_buscar(self, action, data):
        db = getUtility(IDatabase, name=DB_NAME)
        mapper_class = db.mappers['posto'].class_
        query = db.session.query(mapper_class)
        ativo = data.get('ativo')
        query = query.filter(mapper_class.ativo == ativo)
	#only add these items in a query if value is True
	for item in ['ferramentas','eletroportateis','eletronicos','bebedouros']:
	    value = data.get(item, False)
	    if value:
		query = query.filter(getattr(mapper_class, item) == value)
        modificado = data.get('modificado')
	criacao = data.get('criacao')
        if modificado is not None:
            query = query.filter(mapper_class.modificado >= modificado)
	if criacao is not None:
            query = query.filter(mapper_class.criacao >= criacao)
        for field in ['cod','cidade','bairro','uf']:
            if data.get(field) is not None:
                value = data.get(field)
                query = query.filter("%s ~* '%s'" % (field, value))

        count = query.count()
        self.results = query.all()
        if not self.results:
            msg = "Nenhum registro foi encontrado."
        else:
            msg = "%d registro(s)." % count
        status = IStatusMessage(self.request)
        status.addStatusMessage(msg, u'info')
Beispiel #13
0
 def __call__(self):
     self.update()
     message = _('Feed items updated')
     messages = IStatusMessage(self.request, alternate=None)
     if messages is not None:
         messages.addStatusMessage(message, 'info')
     self.request.response.redirect(self.context.absolute_url())
    def __call__(self):
        context = aq_inner(self.context)
        request = aq_inner(self.request)
        form = request.form
        status = IStatusMessage(self.request)

        operation = request.get('operation', None)

        if operation == 'move_up':
            assignable = IRuleAssignmentManager(context)
            rule_id = request.get('rule_id')
            keys = list(assignable.keys())
            idx = keys.index(rule_id)
            del keys[idx]
            keys.insert(idx - 1, rule_id)
            assignable.updateOrder(keys)
        elif operation == 'move_down':
            assignable = IRuleAssignmentManager(context)
            rule_id = request.get('rule_id')
            keys = list(assignable.keys())
            idx = keys.index(rule_id)
            del keys[idx]
            keys.insert(idx + 1, rule_id)
            assignable.updateOrder(keys)
        elif 'form.button.AddAssignment' in form:
            rule_id = form.get('rule_id')
            api.assign_rule(self.context, rule_id)
        elif 'form.button.Delete' in form:
            rule_ids = form.get('rule_ids', ())
            for r in rule_ids:
                api.unassign_rule(self.context, r)

            status.addStatusMessage(_(u'Assignments deleted.'), type='info')
        elif 'form.button.Enable' in form:
            rule_ids = form.get('rule_ids', ())
            for r in rule_ids:
                api.edit_rule_assignment(context, r, enabled=True)

            status.addStatusMessage(_(u'Assignments enabled.'), type='info')
        elif 'form.button.Disable' in form:
            rule_ids = form.get('rule_ids', ())
            for r in rule_ids:
                api.edit_rule_assignment(context, r, enabled=False)

            status.addStatusMessage(_(u'Assignments disabled.'), type='info')
        elif 'form.button.Bubble' in form:
            rule_ids = form.get('rule_ids', ())
            for r in rule_ids:
                api.edit_rule_assignment(
                    context, r, bubbles=True, enabled=True)

            status.addStatusMessage(_(u'Changes saved.'), type='info')
        elif 'form.button.NoBubble' in form:
            rule_ids = form.get('rule_ids', ())
            for r in rule_ids:
                api.edit_rule_assignment(context, r, bubbles=False)

            status.addStatusMessage(_(u'Changes saved.'), type='info')

        return self.template()
Beispiel #15
0
    def render(self, *a, **kw):
        errors = []
        results = ''
        status = IStatusMessage(self.request)
        data = self.request['_data']
        
        # In the future we might implement other ways to render file
        # information, either for other types of backends or even file
        # formats (which file renderer should take over, but...), so
        # this serves as a placeholder of sort.
        view = 'fileinfo'
        fileview = zope.component.getMultiAdapter(
            (self.context, self.request), name=view)
        try:
            # XXX current way to disable main_template
            results = fileview.call_template()
        except:
            errors.append('failed to render file information')

        if errors:
            # probably should only show this info message to users who
            # can deal with this.
            status.addStatusMessage(' '.join(errors), 'info')

        if results:
            return results
Beispiel #16
0
    def block_portlets(self, action):
        status = IStatusMessage(self.request)
        context = Acquisition.aq_inner(self.context)
        data, error = self.extractData()
        portlet_manager = data.get('portlet_manager', None)
        blockstatus = data.get('blockstatus', False)

        manager = data.get('portlet_manager', None)
        path = "/".join(context.getPhysicalPath())

        if manager is not None:
            managernames = [manager]
        else:
            managernames = utils.get_portlet_manager_names()

        status.addStatusMessage(u'Set portlet block status on %s' % ', '.join(
            managernames), type='info')
        managers = dict()
        for managername in managernames:
            managers[managername] = assignment_mapping_from_key(
                                            context,
                                            managername,
                                            CONTEXT_CATEGORY,
                                            path,
                                            )

        info, warnings, errors = utils.exec_for_all_langs(
                                                    context,
                                                    utils.block_portlets,
                                                    managers=managers,
                                                    blockstatus=blockstatus,
                                                    )

        self.handle_status(status, info, warnings, errors)
Beispiel #17
0
    def render(self):
        this_attendee = self.context
        trainings_uid = self.request.form.get('trainings_uid', [])
        if isinstance(trainings_uid, str):
            trainings_uid = [trainings_uid, ]
        seat_table = SeatTable(this_attendee)

        # confirmed trainings are always part of the selection
        all_trainings = list(this_attendee.confirmed_trainings())
        for uid in trainings_uid:
            if uid not in all_trainings:
                # was this training already ours
                # OR are there still available seats?
                if uid in this_attendee.trainings or seat_table.available_seats(uid):
                    all_trainings.append(uid)
                else:
                    training = uuidToObject(uid)
                    messages = IStatusMessage(self.request)
                    warning = _(u'This training is already fully booked') + ': ' + training.title
                    messages.addStatusMessage(warning, type="warning")
        # reserve a seat for each training
        seat_table.refresh_attendee_trainings(this_attendee, all_trainings)
        # store the list of trainings of this attendee
        this_attendee.trainings = all_trainings
        this_attendee.reindexObject(idxs=['trainings', ])
        # set the time of this operation for use in liberation of blocked seats
        this_attendee.last_time_trainings_were_set = datetime.now()
        if self.request.get('finish_button'):
            # back to the registration
            return self.request.response.redirect(this_attendee.getParentNode().absolute_url())
        else:
            return self.request.response.redirect(this_attendee.absolute_url())
    def createAndAdd(self, data):
        # use aq_inner, or else the obj will be wrapped in this view,
        # will screw up acquired security settings (esp. local roles)
        context = aq_inner(self.context)
        plone_utils = getToolByName(context, 'plone_utils')
        list_id = plone_utils.normalizeString(data['title'])

        context.invokeFactory(self.portal_type, list_id)
        list_ob = context._getOb(list_id)

        old_list_type = list_ob.list_type.list_marker
        new_list_type = data.get('list_type').list_marker

        form.applyChanges(list_ob, self.form_fields, data)

        # ensure correct role is set for users
        self._assign_local_roles_to_managers(list_ob)
        
        # XXX this ObjectCreatedEvent event would normally come before
        # the ObjectAddedEvent
        notify(zope.app.event.objectevent.ObjectCreatedEvent(list_ob))
        notify(ListTypeChanged(list_ob, old_list_type, new_list_type))
        self._finished_add = True

        status = IStatusMessage(self.request)
        status.addStatusMessage(_('Mailing list added.'), type=u'info')

        self._next_url = list_ob.absolute_url()

        return list_ob
 def __call__(self, *args, **kwargs):
     ctx = self.context
     url = None
     if not self.permitted():
         types_to_list = utils.typesToList(ctx)
         plt = getToolByName(self.context, "portal_languages")
         pref_lang = plt.getPreferredLanguage()
         ctx = self.find_endpoint(ctx, pref_lang, types_to_list)
     url = ctx.absolute_url()
     if ctx.defaultView() == "traverse_view":
         if not self.permitted(context=ctx):
             # Not allowed to list folder contents. Show fallback.
             url = "%s/%s" % (url, NON_TRAVERSE_FALLBACK_VIEW)
         else:
             # List folder contents permitted. Show folder_contents.
             url = "%s/folder_contents" % url
             messages = IStatusMessage(self.request)
             messages.addStatusMessage(
                 _(
                     "traverse_view-statusmessage",
                     u"""This is a traverse view. Users who are not allowed to
                       see the folder listing are redirected to the first
                       subitem in this directory.""",
                 ),
                 type="info",
             )
     raise Redirect(url)
Beispiel #20
0
    def handleBuild(self, action):
        """\
        Build the thing
        """

        # validate all groups.
        errors = extractError(self)
        if errors:
            self.status = _(u"Unable to build exposure due to input error; "
                "please review the form and make the appropriate changes, "
                "update each subsection using the provided button, and try "
                "again.")
            return

        wh = zope.component.getAdapter(self.context, IExposureWizard)

        try:
            moldExposure(self.context, self.request, wh.structure)
        except ProcessingError, e:
            # XXX almost certainly a bad idea but this fixes
            # tracker item 3610.
            import transaction
            transaction.doom()
            self._doomed = True
            status = IStatusMessage(self.request)
            status.addStatusMessage(_(str(e)), 'error')
            # maybe the subscriber to this can do the rollback?
            raise ActionExecutionError(e)
Beispiel #21
0
    def handleApply(self, action):
        """ Form button hander. """
        
        # data is dict form field name -> cleaned value look-up
        # errors is a list of z3c error objects which have attribute message
        # extractData() also sets self.errors by default
        
        data, errors = self.extractData()
               
        if len(errors) == 0:
        
            self.postData(data)
                
            ok_message = _(u"Thank you for your comments. Our customer services will come back to you in few days")
        
            # Check whether this form was submitted from another page
            returnURL = data.get("returnURL", "")

            if returnURL != "" and returnURL is not None:
                
                # Go to page where we were sent and
                # pass the confirmation message as status message (in session)
                # as we are not in the control of the destination page
                from Products.statusmessages.interfaces import IStatusMessage
                messages = IStatusMessage(self.request)
                messages.addStatusMessage(ok_message, type="info")
                self.request.response.redirect(returnURL)
            else:
                # Act standalone
                self.status = ok_message
        else:
            # errors on the form
            self.status = _(u"Please correct the errors below") 
def addStatus(request, message):
    """Message is a tuple containing translated text (message[0]) and a
    dictionary of which we compose keyword arguments (message[1]), like
    message type. Messages are defined in config.py.
    """
    messages = IStatusMessage(request)
    messages.addStatusMessage(message[0], **message[1])
 def update(self):
     if not self.context.temporal_coverage_start:
         messages = IStatusMessage(self.request)
         messages.addStatusMessage(u"This metadata is not complete. Use the \
                                   Edit tab to complete the information.",
                                   type="warning")
     super(View, self).update()
Beispiel #24
0
    def __init__(self, context, request):
        self.context = context
        self.request = request
        
        portal_catalog = getToolByName(self.context, 'portal_catalog')
        p_state = getMultiAdapter((context, request), name=u'plone_portal_state')
        portal_url = p_state.portal_url()
        path = p_state.navigation_root_path()
        
        domain = urlparse(portal_url).hostname.split('.')[-1]
        
        domainsdict = {'de':'de','at':'at','ch':'ch'}
        target_id = domainsdict.get(domain, 'default')

        target_brains = portal_catalog(id=target_id, path=dict(query=path), depth=0)

        if len(target_brains) == 1:
            request.response.redirect(target_brains[0].getURL())
            
        else:
            messages = IStatusMessage(self.request)
            messages.addStatusMessage(u"Diese Darstellung leitet je nach aufgerufener Domain auf ein \
                    Element (am sinnvollsten wohl ein Ordner) mit den id's 'de', 'at' oder 'ch' weiter. \
                    Als Fallback auf einen content mit der id 'default'. Wenn es auch das nicht gibt eben \
                    auf die folder_contents", type="info")
            request.response.redirect(portal_url+"/folder_contents")
Beispiel #25
0
    def update(self):
        form = LoadFromSimilarForBookForm(self.context, self.request)
        view = LoadFromSimilarForBookSubView(self.context, self.request)
        view = view.__of__(self.context)
        view.form_instance = form
        self.loadsimilarform = view
        form.parent_form = self
        hiddenFields = ['related_aleph_record',
                        'summary_aleph_record',
                        'isClosed',
                        'thumbnail',
                        'shouldBeFullyCatalogized',
                        'isWellFormedForLTP',
                        'voucher']
        
        for field in hiddenFields:
            if field in self.fields:
                del self.fields[field]

        super(AddAtOnceForm,self).update()
        sdm = self.context.session_data_manager
        session = sdm.getSessionData(create=True)
        proper_record = session.get('proper_record',None)
        # proper_record = getAlephRecord()
        if proper_record:
            messages = IStatusMessage(self.request)
            messages.addStatusMessage(u"Formulář je předvyplněn vybraným záznamem z Alephu.", type="info")
            self.loadValuesFromAlephRecord(proper_record)
            session.set('proper_record',None)
 def PurgeAction(self):
     """
     Purging actual object's cache by sending prepared request.
     The example request: 
     PURGE 5bf8c564b5da741f9bc9a14ca2509b94 HTTP/1.1
     Host: localhost:6081
     """
     mtool = getToolByName(self, 'portal_membership')
     host, port = self.getVarnishAddress()
     if not mtool.checkPermission("Modify portal content", self.context):
         raise Unauthorized
     
     purging_uids = [getUidOrId(self.context)]
     context_state = getMultiAdapter((self.context, self.request), name='plone_context_state')
     if context_state.is_default_page():
         purging_uids.append(getUidOrId(context_state.parent()))
     
     #TODO: Handle exceptions of connection problem
     for uid in purging_uids:
         connection = httplib.HTTPConnection(host, port)
         connection.putrequest('PURGE', uid)
         connection.putheader('Host', host + ':' + port)
         connection.endheaders()
         connection.send('')
         response = connection.getresponse()
     
     messages = IStatusMessage(self.request)
     messages.addStatusMessage(_("Cache of the page has been purged"), type="info")
     return self.request.RESPONSE.redirect(self.context.absolute_url())
Beispiel #27
0
 def update_final(self, data, *args, **kwargs):
     """
     A final state/step of the form has been reached, and
     a 'next' button has been submitted.
     """
     status = IStatusMessage(self.request)
     factory = MeasureFactory(self.context)
     measure = factory(data)
     url = measure.absolute_url()
     if self.context.source_type == MULTI_FORM_TYPE:
         status.addStatusMessage(
             'Created new measure, please configure criteria by '
             'clicking on filters listed below.',
             type='info',
             )
         config = data.get('IMeasureWizardMRCriteria')
         _types = [
             config.get(k) for k in ('numerator_type', 'denominator_type')
             ]
         if 'multi_summarize' in _types:
             url += '/@@edit#autotoc-item-autotoc-2'
         else:
             url += '/@@measure_criteria'
     if self.context.source_type == SIMPLE_FORM_TYPE:
         status.addStatusMessage(
             'Created new measure.',
             type='info',
             )
     self.formbody = ''
     self.request.response.redirect(url)
 def setProperties(self):
     context = aq_inner(self.context)
     new = self.request.form.get('new_definition', None)
     columns = self.request.form.get('new_definition_columns', [])
     error = 0
     if new and new['name']:
         try:
             self._definitions.addDefinition(new['name'], new['style'], self._formatColumns(columns))
         except:
             transaction.abort()
             error = _(u'Unable to parse the columns field of the definition to be added')
     modify = self.request.form.get('definitions', [])[:]
     for definition in modify:
         if definition.has_key('delete'):
             self._definitions.removeDefinition(definition['id'])
         if definition.has_key('delete'):
             continue
         try:
             columns = self.request.form.get('definition_columns_%s' % definition['origname'], [])
             self._definitions.addDefinition(definition['name'], definition['style'], self._formatColumns(columns), definition['id'])
         except:
             transaction.abort()
             error = _(u'Unable to parse the columns field of one of the definitions to be modified')
     statusmessage = IStatusMessage(self.request)
     if error:
         statusmessage.addStatusMessage(error, 'error')
     else:
         statusmessage.addStatusMessage(_p(u'Changes saved.'), 'info')
    def __call__(self):
        # Add a status message, showing whether the login has
        # succeeded or not.
        status = IStatusMessage(self.request)
        pps = getMultiAdapter((self.context, self.request),
                              name='plone_portal_state')
        anonymous = pps.anonymous()
        if anonymous and not self.show_group_options():
            success = False
            msg = PMF(u"Login failed")
            msg = translate(msg, 'plone', context=self.request)
            status.addStatusMessage(msg, type='error')
        elif anonymous:
            success = False
        else:
            success = True
            msg = PMF(u"heading_you_are_now_logged_in",
                      default=u"You are now logged in")
            msg = translate(msg, 'plone', context=self.request)
            status.addStatusMessage(msg, type='info')

        if anonymous and self.request.cookies.get('aselectattributes'):
            success = False
            logger.debug("We have an A-Select cookie but are still anonymous.")
        if (not success) or self.request.get('noredirect'):
            # Show the template.  Manually adding '?noredirect=1' to
            # the url may be handy for debugging: this way you stay on
            # this url, which means you can inspect the cookies.
            return self._template()

        logger.debug('Redirecting to Plone Site root.')
        # We are only defined on the Plone Site root, so we can just
        # redirect to the context.
        self.request.RESPONSE.redirect(self.context.absolute_url())
Beispiel #30
0
    def update(self):
        context = aq_inner(self.context)
        self.helper = MultiLinguageContentListingHelper(context, self.request)

        if not self.helper.getSettings():
            messages = IStatusMessage(self.request)
            messages.addStatusMessage(u"Silvuple not configured in Site Setup", type="error")
Beispiel #31
0
    def __call__(self):
        """
        Install products by running the default import steps
        XXX: is this running all profiles?
        """
        setupTool = getToolByName(self.context, 'portal_setup')
        profiles = self.request.get('install_products')
        msg_type = 'info'
        if profiles:
            messages = IStatusMessage(self.request)
            for profile in profiles:
                # TODO: find out where this is and don't run already
                # activated profiles
                setupTool.runAllImportStepsFromProfile(profile)
                msg = _(u'Installed ${product}!', mapping={'product': profile})
                messages.addStatusMessage(msg, type=msg_type)

        purl = getToolByName(self.context, 'portal_url')()
        self.request.response.redirect(purl + '/prefs_install_products_form')
Beispiel #32
0
    def __call__(self):
        products = self.request.get('prefs_reinstallProducts', None)
        if products:
            messages = IStatusMessage(self.request)
            for product_id in products:
                result = self.upgrade_product(product_id)
                if not result:
                    messages.addStatusMessage(
                        _(u'Error upgrading ${product}.',
                          mapping={'product': product_id}), type="error")
                    # Abort changes for all upgrades.
                    transaction.abort()
                    break
            else:
                messages.addStatusMessage(
                    _(u'Upgraded products.'), type="info")

        purl = getToolByName(self.context, 'portal_url')()
        self.request.response.redirect(purl + '/prefs_install_products_form')
    def handleBack(self, action):
        messages = IStatusMessage(self.request)

        if self.validate_back:
            # if true, only allow navigating back if the current
            # step validates
            data, errors = self.currentStep.extractData()
            if errors:
                self.status = self.formErrorsMessage
                messages.addStatusMessage(self.status, type="error")
                return
            self.currentStep.applyChanges(data)

        self.updateCurrentStep(self.currentIndex - 1)

        # Back can change the conditions for the finish button,
        # so we need to reconstruct the button actions, since we
        # do not redirect.
        self.updateActions()
Beispiel #34
0
    def manage_renameObjects(self, ids=[], new_ids=[]):
        """Rename reflected files or directories
        
        The objects specified in 'ids' get renamed to 'new_ids'. This emulates 
        the CopyContainer interface enough to support renaming in Plone only.
        When file renaming fails, errors are communicated through the return
        of the successful ids and the IStatusMessage utility
        
        """
        if len(ids) != len(new_ids):
            raise BadRequest('Please rename each listed object.')
        if not ids:
            raise ValueError('No items specified')

        # To avoid inconsistencies, first test file availability
        for old, new in zip(ids, new_ids):
            if not self.has_key(old):
                raise KeyError(old)
            if not self.acceptableFilename(new) or self.has_key(new):
                raise CopyError, 'Invalid Id'
            notify(ObjectWillBeMovedEvent(self[old], self, old, self, new))

        problem_ids = []
        path = self.getFilesystemPath()
        for id in ids:
            try:
                os.rename(os.path.join(path, old), os.path.join(path, new))
                notify(ObjectMovedEvent(self[new], self, old, self, new))
            except OSError:
                problem_ids.append(old)

        if problem_ids:
            sm = IStatusMessage(getattr(self, 'REQUEST', None), None)
            if sm is not None:
                sm.addStatusMessage(
                    'Failed to rename some files: %s' % problem_ids, 'stop')

        if set(ids) - set(problem_ids):
            indexview = self.unrestrictedTraverse('@@index')
            indexview.index()
            notifyContainerModified(self)

        return list(set(ids) - set(problem_ids))
Beispiel #35
0
    def update(self):
        super(View, self).update()
        messages = IStatusMessage(self.request)
        context = aq_inner(self.context)
        self.context = context
        self.state = getMultiAdapter((context, self.request),
                                      name=u'plone_context_state')
        self.wf_state = self.state.workflow_state()
        self.utility = context.utility

        # Handle vote
        form = self.request.form
        self.errors = []
        self.messages = []

        INVALID_OPTION = _(u'Invalid option')
        if 'poll.submit' in form:
            options = form.get('options', '')
            if isinstance(options, list):
                self.errors.append(INVALID_OPTION)
            elif isinstance(options, str):
                if not options.isdigit():
                    self.errors.append(INVALID_OPTION)
                else:
                    options = int(options)
            if not self.errors:
                # Let's vote
                try:
                    self.context.setVote(options, self.request)
                    self.messages.append(_(u'Thanks for your vote'))
                    # We do this to avoid redirecting anonymous user as
                    # we just sent them the cookie
                    self._has_voted = True
                except Unauthorized:
                    self.errors.append(_(u'You are not authorized to vote'))
        # Update status messages
        for error in self.errors:
            messages.addStatusMessage(error, type="warn")
        for msg in self.messages:
            messages.addStatusMessage(msg, type="info")

        if 'voting.from' in form:
            url = form['voting.from']
Beispiel #36
0
    def __call__(self):
        self.update()
        subscription = self.request.get('digest-subscription')
        statusmessage = IStatusMessage(self.request)
        self.utility.switch_subscription(self.subscriber, self.context, subscription)
        msg_type = 'info'
        if subscription is None:
            message = _("Please select daily or weekly digest.")
            msg_type = 'error'
        elif subscription == 'daily-digest':
            message = _("You subscribed to daily digest email about activity on this folder")
        elif subscription == 'weekly-digest':
            message = _("You subscribed to weekly digest email about activity on this folder")
        elif subscription == 'cancel-subscription':
            message = _("You cancelled your subscription to digest email about activity on this folder")
        else:
            raise ValueError

        statusmessage.addStatusMessage(message, msg_type)
        return self.context.absolute_url()
 def __call__(self):
     qi = getToolByName(self.context, 'portal_quickinstaller')
     products = self.request.get('uninstall_products')
     msg_type = 'info'
     if products:
         messages = IStatusMessage(self.request)
         # 1 at a time for better error messages
         for product in products:
             try:
                 qi.uninstallProducts(products=[
                     product,
                 ])
                 msg = _(u'Uninstalled ${product}.',
                         mapping={'product': product})
             except Exception, e:
                 logging.error("Could not uninstall %s: %s" % (product, e))
                 msg_type = 'error'
                 msg = _(u'Error uninstalling ${product}.',
                         mapping={'product': product})
             messages.addStatusMessage(msg, type=msg_type)
Beispiel #38
0
 def __call__(self, manager=None):
     self.manager = manager
     self.action = '%s/@@components' % self.context.absolute_url()
     if manager is not None:
         self.action += '?manager=%s' % manager
     if self.request.get('form.submitted', False) or self.request.get(
             'form.view', False):
         statusmessage = IStatusMessage(self.request)
         if self._save():
             statusmessage.addStatusMessage(
                 _(u'Components saved successfully'), u'info')
         else:
             statusmessage.addStatusMessage(_(u'Saving components failed'),
                                            u'error')
         if self.request.get('ajax_load', 0):
             return '1'
     if self.request.get('form.view', False):
         return self.context.absolute_url(
         ) or self.request.RESPONSE.redirect(self.context.absolute_url())
     return self.template()
Beispiel #39
0
    def __call__(self):
        product_id = self.request.get('install_product')
        if product_id:
            messages = IStatusMessage(self.request)
            msg_type = 'info'
            result = self.install_product(product_id)
            if result:
                msg = _(u'Installed ${product}!',
                        mapping={'product': product_id})
            else:
                # Only reason should be that between loading the page and
                # clicking to install a product, another user has already
                # installed this product.
                msg_type = 'error'
                msg = _(u'Failed to install ${product}.',
                        mapping={'product': product_id})
            messages.addStatusMessage(msg, type=msg_type)

        purl = getToolByName(self.context, 'portal_url')()
        self.request.response.redirect(purl + '/prefs_install_products_form')
Beispiel #40
0
    def __call__(self):
        """Perform the update and redirect if necessary, or render the page
        """
        target = self.assignation_target()
        if self.request.form.get('send', None):
            usernames = self.request.get('counterparts', None)
            if not usernames:
                status = IStatusMessage(self.request)
                msg = _(
                    u'You need to select at least one expert for discussion')
                status.addStatusMessage(msg, "error")
                return self.index()

            self.revoke_all_roles()

            for username in usernames:
                api.user.grant_roles(username=username,
                                     roles=['MSExpert'],
                                     obj=target)

            if api.content.get_state(self.context) in [
                    u'phase1-pending', u'phase1-pending-answer-drafting'
            ]:
                wf_action = 'phase1-assign-answerer'
            elif api.content.get_state(self.context) in [
                    u'phase2-pending', u'phase2-pending-answer-drafting'
            ]:
                wf_action = 'phase2-assign-answerer'
            else:
                status = IStatusMessage(self.request)
                msg = _(u'There was an error. Try again please')
                status.addStatusMessage(msg, "error")
                url = self.context.absolute_url()
                return self.request.response.redirect(url)

            return self.context.content_status_modify(
                workflow_action=wf_action, )

        else:
            self.revoke_all_roles()
            return self.index()
    def __call__(self):

        if self.request.form.get('submitted'):
            language = self.request.form['language']
            catalog = getToolByName(self.context, 'portal_catalog')
            context = catalog.unrestrictedSearchResults(
                UID=self.request.form['came_from'])
            if context:
                context = context[0].getObject()
            if language and context:
                manager = ITranslationManager(context)
                try:
                    manager.remove_translation(language)
                except Exception as e:
                    messages = IStatusMessage(self.request)
                    messages.addStatusMessage(e, type='error')

                return self.request.response.redirect(context.absolute_url() +
                                                      '/modify_translations')

        return self.tpl()
Beispiel #42
0
    def __call__(self):
        self.contenttype = self.request.get('customize.type', False)
        cancelled = self.request.form.get('form.button.cancel', False)

        if cancelled or self.contenttype not in ('organization', 'person'):
            return self.redirect()

        self.columns = getAdapter(self.context,
                                  interface=ICustomizableColumns,
                                  name=self.contenttype)

        submitted = self.request.form.get('customize.submitted', False)

        if submitted:
            self.columns.set_columns(self.request.form.get('selected', []))
            statusmessage = IStatusMessage(self.request)
            statusmessage.addStatusMessage(_(u'View successfully customized'),
                                           'info')
            return self.redirect()

        return self.pt()
Beispiel #43
0
 def __call__(self):
     product_id = self.request.get('uninstall_product')
     if product_id:
         messages = IStatusMessage(self.request)
         try:
             result = self.uninstall_product(product_id)
         except Exception, e:
             logger.error("Could not uninstall %s: %s", product_id, e)
             msg_type = 'error'
             msg = _(u'Error uninstalling ${product}.',
                     mapping={'product': product_id})
         else:
             if result:
                 msg_type = 'info'
                 msg = _(u'Uninstalled ${product}.',
                         mapping={'product': product_id})
             else:
                 msg_type = 'error'
                 msg = _(u'Could not uninstall ${product}.',
                         mapping={'product': product_id})
         messages.addStatusMessage(msg, type=msg_type)
Beispiel #44
0
    def update(self):
        #        super(PollView, self).update()
        messages = IStatusMessage(self.request)
        context = aq_inner(self.context)
        self.context = context
        self.state = getMultiAdapter((context, self.request),
                                     name=u'plone_context_state')
        self.wf_state = self.state.workflow_state()
        self.utility = context.utility
        # Handle vote
        form = self.request.form
        self.errors = []
        self.messages = []

        if 'poll.submit' in form:
            self._handleSubmit(form)
        # Update status messages
        for error in self.errors:
            messages.addStatusMessage(error, type="warn")
        for msg in self.messages:
            messages.addStatusMessage(msg, type="info")
    def __call__(self):
        status = IStatusMessage(self.request)
        self._setCanonicalLanguage(self.context)

        newlang = self.request["newlanguage"]

        lt = getToolByName(self.context, "portal_languages")
        lt.setLanguageCookie(newlang)

        if self.context.hasTranslation(newlang):
            status.addStatusMessage(_(u"message_translation_exists",
                                      default=u"Translation already exists"),
                                    type="info")
        else:
            self.context.addTranslation(newlang)
            status.addStatusMessage(_(u"message_translation_created",
                                      default=u"Translation created."),
                                    type="info")
        trans = self.context.getTranslation(newlang)

        return self.request.response.redirect(self.nextUrl(trans))
Beispiel #46
0
    def __call__(self):
        portal_type = self.request.get('portal_type', [
            'File',
        ])
        status = IStatusMessage(self.request)
        cnt = 0
        lang = self.context.Language()
        for subobj in self.context.objectValues():
            if not portal_type or subobj.portal_type in portal_type:
                if subobj.Language() != lang:
                    subobj.setLanguage(lang)
                    cnt += 1

        if cnt > 0:
            msg = 'Align content languages handled a total of %d items of ' \
                'type %s.' % (cnt, ', '.join(portal_type))
        else:
            msg = 'Align content languages: nothing needed to be done for '\
                'items of type %s.' % ', '.join(portal_type)
        status.addStatusMessage(msg, type='info')
        self.request.RESPONSE.redirect(self.context.absolute_url())
    def handle_install(self, action):
        """ install p.a.c
        """
        url = self.context.absolute_url()
        qi = getToolByName(self.context, 'portal_quickinstaller')
        fail = qi.installProduct(
            'plone.app.contenttypes',
            profile='plone.app.contenttypes:default',
            blacklistedSteps=['typeinfo'],
        )
        if fail:
            messages = IStatusMessage(self.request)
            messages.addStatusMessage(fail, type='error')
            self.request.response.redirect(url)

        # For types without any instances we want to instantly
        # replace the AT-FTI's with DX-FTI's.
        self.installTypesWithoutItems()

        url = url + '/@@atct_migrator'
        self.request.response.redirect(url)
Beispiel #48
0
    def validate_response_id(self):
        """Validate the response id from the request.

        Return -1 if for example the response id does not exist.
        Return the response id otherwise.

        Side effect: an informative status message is set.
        """
        status = IStatusMessage(self.request)
        response_id = self.request.form.get('response_id', None)
        if response_id is None:
            msg = _(u"No response selected.")
            msg = translate(msg, 'Poi', context=self.request)
            status.addStatusMessage(msg, type='error')
            return -1
        else:
            try:
                response_id = int(response_id)
            except ValueError:
                msg = _(u"Response id ${response_id} is no integer.",
                        mapping=dict(response_id=response_id))
                msg = translate(msg, 'Poi', context=self.request)
                status.addStatusMessage(msg, type='error')
                return -1
            if response_id >= len(self.folder):
                msg = _(u"Response id ${response_id} does not exist.",
                        mapping=dict(response_id=response_id))
                msg = translate(msg, 'Poi', context=self.request)
                status.addStatusMessage(msg, type='error')
                return -1
            else:
                return response_id
        # fallback
        return -1
    def __call__(self):
        storage = getUtility(IRedirectionStorage)
        portal = getUtility(ISiteRoot)
        request = self.request
        form = request.form
        status = IStatusMessage(self.request)

        if 'form.button.Remove' in form:
            redirects = form.get('redirects', ())
            for redirect in redirects:
                storage.remove(redirect)
            if len(redirects) == 0:
                status.addStatusMessage(_("No aliases selected for removal."),
                                        type='info')
            elif len(redirects) > 1:
                status.addStatusMessage(_("Aliases removed."), type='info')
            else:
                status.addStatusMessage(_("Alias removed."), type='info')
        elif 'form.button.Save' in form:
            dst = IAliasesSchema(self.context)
            dst.managed_types = self.request.form['form.widgets.managed_types']
        elif 'form.button.Upload' in form:
            self.upload(form['file'], portal, storage, status)

        self.form = RedirectsControlPanelForm(self.context, self.request)
        self.form.update()
        return self.template()
Beispiel #50
0
    def handleLogin(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        membership_tool = getToolByName(self.context, 'portal_membership')
        status_msg = IStatusMessage(self.request)
        if membership_tool.isAnonymousUser():
            self.request.response.expireCookie('__ac', path='/')
            if self.use_email_as_login():
                status_msg.addStatusMessage(
                    _(u'Login failed. Both email address and password are '
                      u'case sensitive, check that caps lock is not enabled.'),
                    'error',
                )
            else:
                status_msg.addStatusMessage(
                    _(u'Login failed. Both login name and password are case '
                      u'sensitive, check that caps lock is not enabled.'),
                    'error',
                )
            return

        is_initial_login = self._post_login()
        status_msg.addStatusMessage(
            _(
                u'you_are_now_logged_in',
                default=u'Welcome! You are now logged in.',
            ), 'info')

        came_from = data.get('came_from', None)
        self.redirect_after_login(came_from, is_initial_login)
Beispiel #51
0
    def confirm_subscriber(self):
        hashkey = self.request.get('hkey')
        enl_registration_tool = queryUtility(IENLRegistrationTool,
                                             'enl_registration_tool')
        regdataobj = enl_registration_tool.get(hashkey)
        messages = IStatusMessage(self.request)
        if regdataobj:
            easynewsletter = self.portal.unrestrictedTraverse(
                regdataobj.path_to_easynewsletter)
            valid_email, error_code = easynewsletter.addSubscriber(
                regdataobj.subscriber, regdataobj.firstname,
                regdataobj.lastname, regdataobj.name_prefix,
                regdataobj.nl_language, regdataobj.organization,
                regdataobj.salutation)
            if valid_email:

                # now delete the regobj
                del enl_registration_tool[hashkey]
                messages.addStatusMessage(
                    _("Your subscription was successfully confirmed."), "info")
            else:
                messages.addStatusMessage(MESSAGE_CODE[error_code], "error")
            self._msg_redirect(easynewsletter)
        else:
            messages.addStatusMessage(_("Please enter a valid email address."),
                                      "error")
        return self.request.response.redirect(self.context.absolute_url())
Beispiel #52
0
    def __call__(self):
        context = aq_inner(self.context)
        status = IStatusMessage(self.request)

        if not self.can_delete_response:
            msg = _(u"You are not allowed to delete responses.")
            msg = translate(msg, 'Poi', context=self.request)
            status.addStatusMessage(msg, type='error')
        else:
            response_id = self.request.form.get('response_id', None)
            if response_id is None:
                msg = _(u"No response selected for removal.")
                msg = translate(msg, 'Poi', context=self.request)
                status.addStatusMessage(msg, type='error')
            else:
                try:
                    response_id = int(response_id)
                except ValueError:
                    msg = _(
                        u"Response id ${response_id} is no integer so it "
                        "cannot be removed.",
                        mapping=dict(response_id=response_id))
                    msg = translate(msg, 'Poi', context=context)
                    status.addStatusMessage(msg, type='error')
                    self.request.response.redirect(context.absolute_url())
                    return
                if response_id >= len(self.folder.list()):
                    msg = _(
                        u"Response id ${response_id} does not exist so it "
                        "cannot be removed.",
                        mapping=dict(response_id=response_id))
                    msg = translate(msg, 'Poi', context=context)
                    status.addStatusMessage(msg, type='error')
                else:
                    response = self.folder.list()[response_id]
                    self.folder.delete(response.response_id)
                    msg = _(u"Removed response id ${response_id}.",
                            mapping=dict(response_id=response_id))
                    status.addStatusMessage(msg, type='info')
        self.request.response.redirect(context.absolute_url())
Beispiel #53
0
 def __call__(self):
     form = self.request.form
     context = aq_inner(self.context)
     status = IStatusMessage(self.request)
     if not self.can_edit_response:
         msg = _(u"You are not allowed to edit responses.")
         msg = translate(msg, 'Poi', context=self.request)
         status.addStatusMessage(msg, type='error')
     else:
         response_id = form.get('response_id', None)
         if response_id is None:
             msg = _(u"No response selected for saving.")
             msg = translate(msg, 'Poi', context=self.request)
             status.addStatusMessage(msg, type='error')
         else:
             response = self.folder[response_id]
             response_text = form.get('response', u'')
             response.text = response_text
             # Remove cached rendered response.
             response.rendered_text = None
             msg = _(u"Changes saved to response id ${response_id}.",
                     mapping=dict(response_id=response_id))
             msg = translate(msg, 'Poi', context=self.request)
             status.addStatusMessage(msg, type='info')
             # Fire event.  We put the context in the descriptions
             # so event handlers can use this fully acquisition
             # wrapped object to do their thing.  Feels like
             # cheating, but it gets the job done.  Arguably we
             # could turn the two arguments around and signal that
             # the issue has changed, with the response in the
             # event descriptions.
             modified(response, context)
     self.request.response.redirect(context.absolute_url())
Beispiel #54
0
    def action_send(self, action, data):

        status = IStatusMessage(self.request)
        new_path_key = data['path_key']

        if self.context.hasProperty('path_key'):
            old_path_key = self.context.get('path_key', None)
            if old_path_key and not new_path_key:
                self.context.manage_delProperties(['path_key'])
                noLongerProvides(self.context, IPathkey)
                status.addStatusMessage(_("Succesfully deleted the pathkey."))
            elif new_path_key:
                self.context.manage_changeProperties(
                    {'path_key': new_path_key})
                status.addStatusMessage(
                    _("Modification of the pathkey succeeded."))
        else:
            if new_path_key:
                self.context.manage_addProperty('path_key', new_path_key,
                                                'string')
                alsoProvides(self.context, IPathkey)
                status.addStatusMessage(_("Added a new pathkey."))

        self.context.reindexObject(idxs=['object_provides'])
        self.response.redirect(self.context.absolute_url())

        return ''
class FormParserView(BrowserView):
    """Parse the submitted "was this useful"-form.
    """
    def _createVote(self, useful, comment=None):
        now = DateTime()
        useful_int = int(useful)
        vote = {
            KEY_USEFUL: useful_int,
            KEY_COMMENT: comment,
            KEY_DATE: now,
            KEY_IP: self.request.getClientAddr(),
        }
        return vote

    def _addVote(self, vote):
        manager = IUsefulnessManager(self.context)
        votes = manager.getVotes()
        votes.append(vote)
        manager.setVotes(votes)
        event = UsefulnessEvent(self.context)
        zope.event.notify(event)
        self.messages.addStatusMessage(
            _(u'message_thank_you', default=u'Thank you for voting!'))

    def __call__(self):
        self.messages = IStatusMessage(self.request)
        form = self.request.form
        authenticator = getMultiAdapter((self.context, self.request),
                                        name=u"authenticator")

        if not form or FORM_FIELD_USEFUL not in form:
            self.messages.addStatusMessage('No form submitted.')
        elif not authenticator.verify():
            raise Unauthorized
        else:
            vote = self._createVote(form[FORM_FIELD_USEFUL],
                                    comment=form.get(FORM_FIELD_COMMENT, None))
            self._addVote(vote)
        self.request.RESPONSE.redirect(self.context.absolute_url())
Beispiel #56
0
    def update(self):
        super(View, self).update()
        messages = IStatusMessage(self.request)
        context = aq_inner(self.context)
        self.context = context
        self.state = getMultiAdapter(
            (context, self.request), name=u'plone_context_state')
        self.wf_state = self.state.workflow_state()
        self.utility = context.utility
        # Handle vote
        form = self.request.form
        self.errors = []
        self.messages = []

        #if the poll is open and anonymous should vote but the parent folder
        #is private.. inform the user.

        # When the poll's container is the site's root, we do not need to
        # check the permissions.
        container = aq_parent(aq_inner(self.context))

        if 'open' == self.wf_state and not ISiteRoot.providedBy(container):
            roles = [
                r['name'] for r in
                self.context.rolesOfPermission('collective.polls: Vote')
                if r['selected']]

            if 'Anonymous' not in roles and self.context.allow_anonymous:
                messages.addStatusMessage(_(
                    u"Anonymous user won't be able to vote, you forgot to "
                    u"publish the parent folder, you must sent back the poll "
                    u"to private state, publish the parent folder and open "
                    u"the poll again"), type="info")

        INVALID_OPTION = _(u'Invalid option')
        if 'poll.submit' in form:
            options = form.get('options', '')
            if isinstance(options, list):
                self.errors.append(INVALID_OPTION)
            elif isinstance(options, str):
                if not options.isdigit():
                    self.errors.append(INVALID_OPTION)
                else:
                    options = int(options)
            if not self.errors:
                # Let's vote
                try:
                    self.context.setVote(options, self.request)
                    self.messages.append(_(u'Thanks for your vote'))
                    # We do this to avoid redirecting anonymous user as
                    # we just sent them the cookie
                    self._has_voted = True
                except Unauthorized:
                    self.errors.append(_(u'You are not authorized to vote'))
        # Update status messages
        for error in self.errors:
            messages.addStatusMessage(error, type="warn")
        for msg in self.messages:
            messages.addStatusMessage(msg, type="info")
Beispiel #57
0
    def __call__(self):

        target = self.assignation_target()
        if self.request.form.get('send', None):
            usernames = self.request.get('counterparts', None)
            if not usernames:
                status = IStatusMessage(self.request)
                msg = _(
                    u'You need to select at least one expert for discussion')
                status.addStatusMessage(msg, "error")
                return self.index()

            self.revoke_all_roles()
            for username in usernames:
                api.user.grant_roles(username=username,
                                     roles=['MSExpert'],
                                     obj=target)

            return self.request.response.redirect(target.absolute_url())

        else:
            return self.index()
Beispiel #58
0
    def __call__(self):
        """Perform the update and redirect if necessary, or render the page
        """
        target = self.assignation_target()
        if self.request.form.get('send', None):
            usernames = self.request.form.get('counterparts', None)
            if not usernames:
                status = IStatusMessage(self.request)
                msg = _(
                    u'You need to select at least one reviewer for conclusions'
                )
                status.addStatusMessage(msg, "error")
                return self.index()

            self.revoke_all_roles()

            for username in usernames:
                api.user.grant_roles(
                    username=username,
                    obj=target,
                    roles=['CounterPart'],
                )

            if api.content.get_state(self.context).startswith('phase1-'):
                wf_action = 'phase1-request-comments'
            elif api.content.get_state(self.context).startswith('phase2-'):
                wf_action = 'phase2-request-comments'
            else:
                status = IStatusMessage(self.request)
                msg = _(u'There was an error. Try again please')
                status.addStatusMessage(msg, "error")
                url = self.context.absolute_url()
                return self.request.response.redirect(url)

            return self.context.content_status_modify(
                workflow_action=wf_action, )

        else:
            return self.index()
class ReflectionView(BrowserView):

    template = ViewPageTemplateFile('templates/view.pt')

    label = u'Using SQLAlchemy reflection'

    def __init__(self, context, request):
        super(ReflectionView, self).__init__(context, request)

    def __call__(self):
        self.status = IStatusMessage(self.request)
        if self.request.form.has_key('submitted'):
            CheckAuthenticator(self.request)
            if self.request.form.has_key('add_row'):
                self.status.addStatusMessage(u"Added row.", type='info')
                self.add_row()

        return self.template()

    def rows(self):
        session = Session()

        # we use sqlalchemy reflection to build the model for us,
        # for an existing database where we do not have a model
        # (or do not want to create a model).
        table = get_table(session, 'test_data')
        query = table.select()
        # How to select with a where clause:
        # query = table.select(whereclause=((table.c.my_first_field == myvalue)))
        query_result = session.execute(query)

        output = []
        for r in query_result:
            output.append('%s - %s - %s - %s' %
                          (r.row_id, r.my_first_field, r.my_second_field,
                           r.my_third_field))

        return output

    def add_row(self):
        session = Session()
        table = get_table(session, 'test_data')
        data = {
            'my_first_field': 43,
            'my_second_field': 'qwertyæøå',
            'my_third_field': 'qwertyusdfgh fghrt fgthy'
        }
        myinsert = table.insert(values=data)
        result = session.execute(myinsert)
        # When we do not use the ORM, but use raw sql like in this example,
        # we have to mark the session as changed manually:
        mark_changed(session)

        if result.rowcount > 0:
            self.status.addStatusMessage(u"Added row.", type='info')
        else:
            self.status.addStatusMessage(
                u"Row not added, some error happened.", type='error')
Beispiel #60
0
 def upgrade_product(self, product):
     '''
     Also upgrade profiles
     '''
     # XXX remove customization in future versions!!!
     if not Products.CMFPlone.__version__.startswith('5.0'):
         raise Exception('Incompatible upgrade mechanisms')
     if super(ManageProductsView, self).upgrade_product(product):
         messages = IStatusMessage(self.request)
         try:
             profile_id = '{}:default'.format(product)
             steps_to_run = self.ps.listUpgrades(profile_id)
             if steps_to_run:
                 self.ps.upgradeProfile(profile_id)
             return True
         except Exception as ex:
             logging.error("Could not upgrade %s: %s" % (product, ex))
             messages.addStatusMessage(_(u'Error upgrading ${product}.',
                                         mapping={'product': product}),
                                       type="error")
             return False
     else:
         return False