Exemple #1
0
class IMigrator(Interface):
    """ remote source interface """

    config = Choice(
            title=_(u"Select configuration"),
            description=_(u"Registered configurations to choose from."),
            vocabulary=u"collective-migrator-configurations",
            )


class Migrator(form.Form):

    label = _(u"Synchronize and migrate")
    fields = field.Fields(IMigrator)

    ignoreContext = True

    @button.buttonAndHandler(u'Select')
    def handleSelect(self, action):
        data, errors = self.extractData()
        if errors:
            return False
        self.request.RESPONSE.redirect('%s/@@mr.migrator-run?form.widgets.%s' %
                (self.context.absolute_url(), urllib.urlencode(data)))


MigratorConfigurationsFactory = MigratorConfigurations()
MigratorRunView = wrap_form(MigratorRun)
MigratorView = wrap_form(Migrator)

    ignoreContext = True  # don't use context to get widget data
    label = _(u"Add Highlights Group")

    def __init__(self, *args, **kwargs):
        super(uwAddGroupForm, self).__init__(*args, **kwargs)
        self.hlite = getHliteTool()

    @button.buttonAndHandler(_(u'Add'))
    def handleAdd(self, action):
        data, errors = self.extractData()
        if errors:
            return
        self.hlite.addGroup(data)
        self.context.plone_utils.addPortalMessage(_('Group successfully added.'))
        self.request.RESPONSE.redirect(self.context.absolute_url())
AddGroupForm = wrap_form(uwAddGroupForm, back_link=back_to_highlightsmanager)


# TODO: when changing content type whitelist, if highlighted content exists
# either remove them or disallow the change
class uwEditGroupForm(form.EditForm):
    fields = field.Fields(ifaces.IHighlightsGroup).omit('name')
    label = _(u"Edit Highlights Group")

    def updateWidgets(self):
        form.EditForm.updateWidgets(self)
        for dummy in self.context.getContentItems():
            self.widgets['schema'].mode = DISPLAY_MODE
            break
EditGroupForm = wrap_form(uwEditGroupForm, back_link=back_to_highlightsmanager)
Exemple #3
0
class Form(form.Form):
    fields = field.Fields(ICSVImport)
    ignoreContext = True # don't use context to get widget data
    label = u"Import Places from CSV"
    
    @button.buttonAndHandler(u'Apply')
    def handleApply(self, action):
        upload_file = self.widgets['file'].value
        importer = CSVImporter(self.context, self.request)
        importer(upload_file)

        response = self.request.response
        response.redirect(self.context.absolute_url())

CSVImportForm = wrap_form(Form)


class CSVImporter(object):
    
    """CSV importing view
    """
    
    def __init__(self, context, request):
        self.context = context
        self.request = request
    
    def __call__(self, csvfile):
        portal = getToolByName(self.context, 'portal_url').getPortalObject()
        ptool = getToolByName(self.context, 'plone_utils')
        wtool = getToolByName(self.context, 'portal_workflow')
        container = self.context.restrictedTraverse('@@plone').getCurrentFolder()

        if name in container.objectIds():
            raise AlreadyExists(name)

        # create document
        name = container.invokeFactory(id=name, type_name='Document')
        document = container[name]

        # set initial content
        update_content(document, article)

        # annotate article metadata
        metadata = get_article_metadata(document)
        metadata.id = article.ArticleID
        metadata.url = article.ArticleUrl
        metadata.municipality = municipality

        # Enable TOC if setting is enabled
        document.setTableContents(enable_toc)

        # set review state directly (no transition is available for this)
        wftool = getToolByName(self.context, 'portal_workflow')
        status = wftool.getStatusOf('synchronizable_document_workflow', document)
        status['review_state'] = 'synchronized'
        document.reindexObject()

        return name

SynchronizeView = wrap_form(SynchronizeForm)
Exemple #5
0
        return utils.get_queue().finished


class StatsForm(crud.CrudForm):
    """View list of queues and last modification dates for all
    available channels.
    """
    addform_factory = crud.NullForm
    editform_factory = EditForm
    view_schema = IQueueStatistics

    def get_items(self):
        return [(channel.name, ChannelStatistics(channel))
                for channel in channel_lookup()]

    def remove(self, (id, item)):
        for name, stats in self.get_items():
            if name == id:
                stats.channel.queue.clear()
                self.status = _(u"All sent and failed messages deleted")
                return
        else:
            raise KeyError(id)


StatsView = layout.wrap_form(StatsForm,
                             index=ViewPageTemplateFile('controlpanel.pt'),
                             label=_(u"label_statistics_administration",
                                     default=u"Statistics"),
                             back_link=controlpanel.back_to_controlpanel)
Exemple #6
0
                     'sender_id'         : sender_id,
                     'url'               : referer,
                     'subject'           : subject,
                     'message'           : message,
                     'encoding'          : encoding,
        }

        host = context.MailHost # plone_utils.getMailHost() (is private)
        try:
            message = context.author_feedback_template(context, **variables)
            result = host.secureSend(message, send_to_address, envelope_from, subject=subject, subtype='plain', charset=encoding, debug=False, From=send_from_address)
        except ConflictError:
            raise
        except: # TODO Too many things could possibly go wrong. So we catch all.
            exception = plone_utils.exceptionString()
            message = _(u'Unable to send mail: ${exception}',
                          mapping={u'exception' : exception})
            plone_utils.addPortalMessage(message, 'error')
            return False
        """

        plone_utils.addPortalMessage(u'[FAKE] %s' % _(u'Mail sent.'))


# wrap the form with plone.app.z3cform's Form wrapper
ContactInfoView = wrap_form(ContactInfoForm)

# Register Norobots validator for the correponding field in the IContactInfo interface
validator.WidgetValidatorDiscriminators(NorobotsValidator,
                                        field=IContactInfo['norobots'])
        try:
            oid, to_url = factory(data['title'], ptname)
        except KeyError:
            raise interfaces.WidgetActionExecutionError('title', 
                Invalid('Id already exists'))

        response = self.request.response
        response.setStatus(201)
        response.setHeader(
            'Location',
            '%s/base_edit' % to_url
            )
        response.redirect('%s/base_edit' % to_url)


AddNamedForm = wrap_form(Form)


class NamedFactory(object):
    
    """Feature/Place adding view
    """
    
    def __init__(self, context, request):
        self.context = context
        self.request = request
    
    def __call__(self, title, portal_type):
        portal = getToolByName(self.context, 'portal_url').getPortalObject()
        ptool = getToolByName(self.context, 'plone_utils')
        wtool = getToolByName(self.context, 'portal_workflow')
Exemple #8
0
        else:
            return True

    def __call__(self):
        if self.newsml_enabled(raise404=True):
            settings = IFeedSettings(self.context, None)
            if settings and self.__name__ not in settings.feed_types:
                raise NotFound
            self.request.response.setHeader('Content-Type',
                                            'application/vnd.iptc.g2.newsitem+xml')
            return self.index()


class SettingsForm(form.EditForm):
    label = _(u'heading_syndication_properties',
              default=u'Syndication Properties')
    description = _(
        u'description_syndication_properties',
        default=u'Syndication enables you to syndicate this folder so it can'
                u'be synchronized from other web sites.')
    fields = field.Fields(IFeedSettings)

    @button.buttonAndHandler(_(u'Save'), name='save')
    def handleSave(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        self.applyChanges(data)
SettingsFormView = wrap_form(SettingsForm)
Exemple #9
0
        
        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") 
    

CommentFormView = layout.wrap_form(CommentAddForm)
Exemple #10
0
        email_charset = portal.getProperty('email_charset')
        from_address = portal.getProperty('email_from_address')
        
#        tr_annotate = ITokenRolesAnnotate(context)
#        end_date = context.toLocalizedTime(tr_annotate.token_dict[token_id]['token_end'])
        util = getToolByName(self.context, 'translation_service')
        end_date = util.ulocalized_time(time.time(), long_format = None, time_only = None, context = self.context, domain='plonelocales')


#        message = message.replace('${text}s', text)
        message = text.replace('${date}s', str(end_date))
        message = message.replace('${url}s', url)

        try:
            for email_recipient in email_list:
                mailhost.secureSend(message, email_recipient, from_address,
                                    subject=subject,
                                    charset=email_charset, debug=False,
                                   )
        except (MailHostError, SMTPException):
            return _('token_role_send_ko_mail', default=u'Mail error')
        except Exception:
            return _('token_role_send_ko', default=u'An error has occurred')
        else:
            return _('token_role_send_ok', default=u'Token sent')

# wrap the form with plone.app.z3cform's Form wrapper
TokenSendFormView = layout.wrap_form(TokenSendForm)


Exemple #11
0
from z3c.form import field
from z3c.form import form
from plone.app.z3cform.layout import wrap_form
from collective.easyslider.interfaces import ISliderSettings
from collective.easyslider import easyslider_message_factory as _


class EasySliderSettingsForm(form.EditForm):
    """
    The page that holds all the slider settings
    """

    fields = field.Fields(ISliderSettings)


EasySliderSettingsView = wrap_form(EasySliderSettingsForm)


class EasySliderControlPanelForm(EasySliderSettingsForm):
    label = _(u"EasySlider Default Settings")
    description = _(u'Default settings to use for all Easy Sliders on site.')


EasySliderControlPanelView = wrap_form(EasySliderControlPanelForm)
        lock.lockContext(self.context)
        alsoProvides(self.context, IStructuralContent)
        self.context.reindexObject(idxs=["object_provides"])
        plone_utils = getToolByName(self.context, "plone_utils")
        plone_utils.addPortalMessage(
            _(u"The content was locked as 'Structual content'"))
        self.request.response.redirect(self.context.absolute_url())

    @button.buttonAndHandler(_(u"Cancel"))
    def handleCancel(self, action):
        plone_utils = getToolByName(self.context, "plone_utils")
        plone_utils.addPortalMessage(_("Accion cancelled"))
        self.request.response.redirect(self.context.absolute_url())


LockView = wrap_form(LockForm)


class UnlockForm(form.Form):
    label = _(u"Unlock this structural content object")
    description = _(
        u"To unlock this 'Structural content' object click on 'Save'. "
        "Remember that this could generate inconsistencies in the portal. "
        "If you are unsure about this action click on 'Cancel'.")

    @button.buttonAndHandler(_(u"Save"))
    def handleApply(self, action):
        plone_utils = getToolByName(self.context, "plone_utils")

        if not IStructuralContent.providedBy(self.context):
            plone_utils.addPortalMessage(_("This object is not locked"),
        return False

    @button.buttonAndHandler(_('Delete'), name='delete')
    def handleDelete(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        changes = self.applyDelete()
        if changes:
            self.status = self.successMessage
        else:
            self.status = self.noChangesMessage

    def applyDelete(self):
        extra = self.getExtra()

        if extra:
            extra.captions = u''
            extra.transcription = u''
            extra.download_url = ''
            extra.captions_format = ''
            self.request.response.redirect(self.context.absolute_url())
            return True

        return False


VideoExtraDataEditFormView = wrap_form(VideoExtraDataEditForm)
Exemple #14
0
    ignoreContext = True # don't use context to get widget data
    label = u"Import XML files"
    
    @button.buttonAndHandler(u'Apply')
    def handleApply(self, action):
        importer = XMLImporter(self.context, self.request)
        msg = importer(self.widgets['directory'].value, self.widgets['metadataId'].value or None)
        response = self.request.response
        response.setStatus(201)
        response.setHeader(
            'Location',
            '%s' % self.context.absolute_url()
            )
        response.redirect(self.context.absolute_url())

XMLImportForm = wrap_form(Form)


class XMLImporter(object):
    
    """XML importing view
    """
    
    def __init__(self, context, request):
        self.context = context
        self.request = request
    
    def __call__(self, directory, metadataId=None):
        request = self.request
        sourcedir = directory
        portal = getToolByName(self.context, 'portal_url').getPortalObject()
Exemple #15
0
        # Make sure our chosen id is unique, iterate until we get one that is.
        chooser = INameChooser(container)
        id = chooser._findUniqueName(id, None)

        # create the object
        type_name = data['type_name']
        container.invokeFactory(type_name, id=id, title=title)
        if type_name in [u'Folder']:
            self.request.response.redirect("%s/@@cmsui-structure" %
                                           container[id].absolute_url())
        else:
            self.request.response.redirect("%s/edit" %
                                           container[id].absolute_url())


AddNewContentView = wrap_form(AddNewContentForm)


class IFileUploadForm(interface.Interface):
    file = NamedFile(title=u"File")


class FileUploadForm(form.Form):
    implements(IWrappedForm)

    fields = field.Fields(IFileUploadForm)
    ignoreContext = True  # don't use context to get widget data
    label = _(u"Add content")

    @button.buttonAndHandler(_(u'Upload content'))
    def handleApply(self, action):
Exemple #16
0
        
        # Context may not be a container, get one.
        context_state = getMultiAdapter((self.context, self.request), name="plone_context_state")
        container = context_state.folder()
        
        # Make sure our chosen id is unique, iterate until we get one that is.
        chooser = INameChooser(container)
        id = chooser._findUniqueName(id, None)

        # create the object
        container.invokeFactory(data['content_type'], id=id, title=title)
        # redirect to immediate_view
        self.request.response.redirect("%s/edit" % container[id].absolute_url())
        # open edit overlay    

AddNewContentView = wrap_form(AddNewContentForm)


class AddMenu(BrowserView):
    """Add menu overlay
    """
    
    def __call__(self):
        # Disable theming
        self.request.response.setHeader('X-Theme-Disabled', 'True')
        
        factoriesMenu = getUtility(IBrowserMenu, name='plone_contentmenu_factory', context=self.context)
        self.addable_types = factoriesMenu.getMenuItems(self.context, self.request)

        breadcrumbs_view = getMultiAdapter((self.context, self.request),
                                           name='breadcrumbs_view')
        """
        registry = getUtility(IRegistry)
        ids = registry['collective.cropimage.ids']
        ids = [i for i in ids if i['id'] != id]
        registry['collective.cropimage.ids'] = ids

    def before_update(self, item, data):
        registry = getUtility(IRegistry)
        ids = registry['collective.cropimage.ids']
        ids = [i for i in ids if i['id'] != data['id']]
        ids.append(data)
        registry['collective.cropimage.ids'] = ids


CropImageIDControlPanelView = wrap_form(
    CropImageIDControlPanelForm,
    index=ViewPageTemplateFile('templates/controlpanel.pt'))


class CropImageView(BrowserView):

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

    def __call__(self):
        context = aq_inner(self.context)
        form = self.request.form
        if form.get('form.button.Save', None) is not None:
            name = 'collective.cropimage.{0}'.format(form.get('field'))
            anno = IAnnotations(context)
            if anno.get(name) is None:
                anno[name] = PersistentDict()
        fieldsid = [field.field.__name__ for field in fields.values()]
        main = plonegroup.GroupFactory(_pmf(u"label_schema_default", default=u"Default"), fields.select(*[a for a in fieldsid if a not in self.contentFields+self.navigationFields]))
        content = plonegroup.GroupFactory(_pmf(u"Content", default=u"Content"), fields.select(*[a for a in fieldsid if a in self.contentFields]))
        navigation = plonegroup.GroupFactory(_pmf(u"Navigation"), fields.select(*[a for a in fieldsid if a in self.navigationFields]))
        self.groups = [main, content, navigation]
        super(FlowViewSettingsForm, self).update()
        
    def set_status_message(self, settings, has_changes):
        msg = has_changes and self.successMessage or self.noChangesMessage
        msg = zope.i18n.translate(msg)
        self.status = msg

    @button.buttonAndHandler(_('Apply'), name='apply')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        changes = self.applyChanges(data)
        settings = FlowViewSettings(self.context)

        has_changes = False
        if changes:
#            settings = FlowViewSettings(self.context)
#            settings.last_cooked_time_in_seconds = 0
            has_changes = True

        self.set_status_message(settings, has_changes)

FlowViewSettingsView = wrap_form(FlowViewSettingsForm)
        required=False,
    )
    datetime = Datetime(
        title=u'DateTime widget',
        required=False,
    )


class TestForm(Form):
    """ """

    ignoreContext = True
    fields = Fields(ITestForm)
    fields['date'].widgetFactory[INPUT_MODE] = DatePickerFieldWidget
    fields['datetime'].widgetFactory[INPUT_MODE] = DateTimePickerFieldWidget

    def updateWidgets(self):
        Form.updateWidgets(self)
        now = datetime.datetime.now()
        #        self.fields['date'].field.default = now
        self.fields['datetime'].field.default = now

    @buttonAndHandler(u'Submit')
    def submit(self, action):
        data, errors = self.extractData()
        if errors: return False
        return True


TestView = wrap_form(TestForm)
from z3c.form import button
import zope.i18n
from zope.i18nmessageid import MessageFactory
from plone.app.z3cform.layout import wrap_form
from collective.plonetruegallery.browser.views.settings import \
    GallerySettingsForm

_ = MessageFactory('collective.plonetruegallery')


class PloneTruegalleryControlPanelForm(GallerySettingsForm):
    label = _(u"PloneTruegallery Default Settings")
    description = _(u'Default settings to use for all galleries on site.')

    @button.buttonAndHandler(_('Apply'), name='apply')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        changes = self.applyChanges(data)
        msg = changes and self.successMessage or self.noChangesMessage
        self.status = zope.i18n.translate(msg)


PloneTruegalleryControlPanelView = wrap_form(PloneTruegalleryControlPanelForm)
        if name == 'slides':
            # somehow this default value gets manually set. This prevents this
            # form happening on the slides...
            return self._metadata.get(name, [])
        return super(PageSliderSettings, self).__getattr__(name)


class ViewSliderSettings(SliderSettings):
    interfaces = [ISliderSettings, IViewSliderSettings]


class INothing(Interface):
    pass


class MainSettingsGroup(plonegroup.Group):
    fields = field.Fields(ISliderSettings)
    label = _(u'Main')


class EasySliderSettingsForm(group.GroupForm, form.EditForm):
    """
    The page that holds all the slider settings
    """

    fields = field.Fields(INothing)
    groups = [MainSettingsGroup]


EasySliderSettingsView = wrap_form(EasySliderSettingsForm)
Exemple #22
0
    description = _(u'description_media_global_settings_form',
                    default=u"Configure the parameters for media.")

    @button.buttonAndHandler(pmf('Save'), name='apply')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        self.applyChanges(data)

        self.status = pmf('Changes saved.')


GlobalSettingsFormView = wrap_form(GlobalSettingsForm)


class ConvertVideo(BrowserView):
    def __call__(self):
        # Mark the video as not converted
        self.context.video_converted = False
        video_edited(self.context, None)
        self.request.response.redirect(self.context.absolute_url())


class Utils(MediaView):
    def valid_type(self):
        return IMediaEnabled.providedBy(self.context)

    @memoize
        self.widgets['year_month'].show_jquery_picker = False # Disable Javascript picker

        #
        # Example how to set datetime widget to look like american date format
        # 
        self.widgets['american_date'].components = ["months", "days", "years"]
        self.widgets['american_date'].component_separators={"months":"/", "days" : "/"}
        self.widgets['american_date'].show_jquery_picker = False # Disable Javascript picker

    @buttonAndHandler(u'Submit')
    def submit(self, action):
        data, errors = self.extractData()

        # Give some submit feedback -
        # note that IStatusMessage uses session and 
        # does not work through anonymizer proxy
        messages = IStatusMessage(self.request)
        
        # Check console to see what our cleaned data contains
        print str(data)

        messages.addStatusMessage("Got converted object values:" + str(data), type="info")

        if errors: return False
        return True

TestView = wrap_form(TestForm)

# Spice our life with some movies in this point
# http://www.youtube.com/watch?v=MuOvqeABHvQ
Exemple #24
0
        catalog_entries = self._unique_keyword_values
        languages = self._portal_languages
        charset = self.default_charset()

        for item in catalog_entries:
            if item.decode(charset) not in storage_entries:
                self.add(dict(keyword=item, keywords=[]))
            for lang in languages:
                lang_item = "%s|%s" % (item, lang)
                if lang_item.decode(charset) not in storage_entries:
                    self.add(dict(keyword=lang_item, keywords=[]))

    def update(self):
        """ This methos performs an initialization based on what is currently
            indexed on the portal_catalog
        """
        self.update_storage()
        super(KeywordAliasForm, self).update()

    def link(self, item, field):
        """Return a URL for this item's field or None.
        """
        content = self.getContent()
        portal_url = getMultiAdapter((content, self.request),
                                     name=u'plone_portal_state').portal_url()
        keyword = self._keyword_split(item.keyword)[0]
        return "%s/search?Subject=%s" % (portal_url, keyword)


KeywordAliasView = layout.wrap_form(KeywordAliasForm, ControlPanelFormWrapper)
Exemple #25
0
        
        # Get category
        category = self.category

        # Get other search criteria from the form data
        zip, city, state = "", "", ""
        qs = ""

        if data['search_zip']:
            zip = data['search_zip']
            qs = "category=%s&search_zip=%s" % (category, zip)
            
        elif data['search_city']:
            city = data['search_city']
            qs = "category=%s&search_city=%s" % (category, city)
            
        elif data['search_state']:
            state = data['search_state']
            qs = "category=%s&search_state=%s" % (category, state)

        #qs = "category=%s&search_zip=%s&search_city=%s&search_state=%s" % (category, zip, city, state)          
        self.request.RESPONSE.redirect(self.context.absolute_url() + '/partnersearch' + '?' + qs)


PartnerSearchFormView = wrap_form(PartnerSearchForm)



    
    
        keyword_settings = self._keyword_settings
        keyword_storage = keyword_settings.keyword_storage
        storage_entries = keyword_storage.keys()
        catalog_entries = self._unique_keyword_values
        languages = self._portal_languages

        for item in catalog_entries:
            if item not in storage_entries:
                self.add(dict(keyword=item, keywords=[]))
            for lang in languages:
                lang_item = "%s|%s" % (item, lang)
                if lang_item not in storage_entries:
                    self.add(dict(keyword=lang_item, keywords=[]))

    def update(self):
        """ This methos performs an initialization based on what is currently
            indexed on the portal_catalog
        """
        self.update_storage()
        super(KeywordAliasForm, self).update()

    def link(self, item, field):
        """Return a URL for this item's field or None.
        """
        content = self.getContent()
        portal_url = getMultiAdapter((content, self.request), name=u'plone_portal_state').portal_url()
        keyword = self._keyword_split(item.keyword)[0]
        return "%s/search?Subject=%s" % (portal_url, keyword)

KeywordAliasView = layout.wrap_form(KeywordAliasForm, ControlPanelFormWrapper)
Exemple #27
0
    """Remote source interface.
    """

    config = Choice(
        title=_(u"Select configuration"),
        description=_(u"Registered configurations to choose from."),
        vocabulary=u"collective-migrator-configurations",
    )


class Migrator(form.Form):

    label = _(u"Synchronize and migrate")
    fields = field.Fields(IMigrator)

    ignoreContext = True

    @button.buttonAndHandler(_(u'Select'))
    def handleSelect(self, action):
        data, errors = self.extractData()
        if errors:
            return False
        self.request.RESPONSE.redirect(
            '%s/@@mr.migrator-run?form.widgets.%s' %
            (self.context.absolute_url(), urllib.urlencode(data)))


MigratorConfigurationsFactory = MigratorConfigurations()
MigratorRunView = wrap_form(MigratorRun)
MigratorView = wrap_form(Migrator)
        if selected:
            self.status = _(u"Successfully removed categories.")
            self.highlights_manager.deleteGroups([id for id, gr_o in selected])

class GroupOverviewForm(crud.CrudForm):
    """View list of groups and allow for deletion and addition."""
    
    addform_factory = crud.NullForm
    editform_factory = EditForm
    view_schema = IGroupOverview

    def __init__(self, *args, **kwargs):
        super(GroupOverviewForm, self).__init__(*args, **kwargs)
        self.highlights_manager = getToolByName(self.context, 'highlights_manager')
        
    def get_items(self):
        return [(group_id, GroupOverview(group))
                for group_id, group in self.highlights_manager.getAllGroups()]

    def remove(self, (id, item)):
        self.highlights_manager.deleteGroups([id])
    
    def link(self, item, field):
        if field == 'title':
            return '%s/edit' % item.group.absolute_url()

GroupsOverview = layout.wrap_form(
    GroupOverviewForm,
    index=ViewPageTemplateFile('templates/controlpanel.pt'),
    label = _(u"Highlights Manager: Groups Overview"),
    back_link=back_to_controlpanel)
    def createAndAdd(self, data):
        context = self.getContent()
        applyChanges(self, context, data)
        self.status = self.successMessage
        return context

    def nextURL(self):
        IStatusMessage(self.request).addStatusMessage(self.status, type='info')
        return "%s/%s" % (self.getContent().absolute_url(), '@@token_manage')

    def update(self):
        self.buttons.values()[0].title = _(u'add_token', default=u"Add token")
        super(TokenAddForm, self).update()

# wrap the form with plone.app.z3cform's Form wrapper
TokenAddFormView = layout.wrap_form(TokenAddForm)


class TokenEditForm(form.EditForm):
    """ Token Edit Form """

    # Defining the fields
    fields = field.Fields(
        TextLine(
            __name__='token_display',
            title=ITokenInfoSchema['token_id'].title,
            description=ITokenInfoSchema['token_id'].description)
    ) + field.Fields(ITokenInfoSchema)
    fields['token_id'].mode = HIDDEN_MODE
    fields['token_display'].mode = DISPLAY_MODE
    fields['token_roles'].widgetFactory[INPUT_MODE] = CheckBoxFieldWidget
from collective.qextendedmenu import mf as _
from z3c.form import form, field
from plone.app.z3cform.layout import wrap_form
from collective.qextendedmenu.interfaces import IExtendedMenuSettings


class ExtendedMenuSettings(form.EditForm):
    """
    The page that holds all the gallery settings
    """

    fields = field.Fields(IExtendedMenuSettings)

    label = _(u'heading_menu_settings_form', default=u'Menu Settings')
    # description = _(u'description_gallery_settings_form',
    #     default=u'Configure the parameters for this gallery.')

    # successMessage = _(u'successMessage_gallery_settings_form',
    #     default=u'Gallery Settings Saved.')
    # noChangesMessage = _(u'noChangesMessage_gallery_settings_form',
    #     default=u'There are no changes in the Gallery settings.')


ExtendedMenuSettingsView = wrap_form(ExtendedMenuSettings)
        projects[bc] = obj
    return projects

def projectsVocab(context):
    projects = projectsDict(context)
    items = sorted(projects.items())
    return vocabulary.SimpleVocabulary.fromItems(items)

def find_iterations():
    site = getSite()
    return site.portal_catalog(portal_type='iteration')

def find_projects():
    site = getSite()
    return site.portal_catalog(portal_type='project')

def startDate():
    # start on first day of current month
    now = datetime.datetime.now()
    first_day = datetime.datetime(now.year, now.month, 1)
    return first_day

def stopDate():
    # stop in one month
    now = datetime.datetime.now()
    last_day = calendar.monthrange(now.year, now.month)[1]
    return datetime.datetime(now.year, now.month, last_day)

directlyProvides(projectsVocab, IVocabularyFactory)
CreateIteration = wrap_form(CreateIterationForm)
        base_url = self.context.absolute_url()
        adding_view = queryMultiAdapter((self.context, self.request), name='+')
        t = getattr(portal.portal_types, type_id, None)
        if t:
            # XXX: Added to support CMF 2.2 style add view actions
            context_state = getMultiAdapter((self.context, self.request),
                                            name='plone_context_state')
            addActionsById = dict([(a['id'], a['url'],) 
                                    for a in context_state.actions().get('folder/add', []) 
                                    if a['available'] and a['allowed']])

            # XXX: Added to support CMF 2.2 style add view actions
            if addActionsById.get(type_id, ''): # we have a non-empty URL
                url = addActionsById[type_id]
            elif adding_view and queryMultiAdapter((adding_view,
                                                    self.request),
                                                    name=t.factory):
                url = '%s/+/%s' % (base_url, t.factory)
            else:
                url = '%s/createObject?type_name=%s' % (base_url,
                                                        quote_plus(type_id))
        self.request.response.redirect(url)

class ControlPanelFormWrapper(FormWrapper, FolderContentsView):
    """ Wrapper for controlpanel layout
    """
    
    index = ViewPageTemplateFile('controlpanel_layout.pt')
    
ControlPanelView = wrap_form(ControlPanelForm, __wrapper_class=ControlPanelFormWrapper)
            url = "%s/private_token_listing?token=%s" % (context.absolute_url(), token_id)

        email_charset = portal.getProperty('email_charset')
        from_address = portal.getProperty('email_from_address')

#        tr_annotate = ITokenRolesAnnotate(context)
#        end_date = context.toLocalizedTime(tr_annotate.token_dict[token_id]['token_end'])
        util = getToolByName(self.context, 'translation_service')
        end_date = util.ulocalized_time(time.time(), long_format = None, time_only = None, context = self.context, domain='plonelocales')


#        message = message.replace('${text}s', text)
        message = text.replace('${date}s', str(end_date))
        message = message.replace('${url}s', url)

        try:
            for email_recipient in email_list:
                mailhost.secureSend(message, email_recipient, from_address,
                                    subject=subject,
                                    charset=email_charset, debug=False,
                                   )
        except (MailHostError, SMTPException):
            return _('token_role_send_ko_mail', default=u'Mail error')
        except Exception:
            return _('token_role_send_ko', default=u'An error has occurred')
        else:
            return _('token_role_send_ok', default=u'Token sent')

# wrap the form with plone.app.z3cform's Form wrapper
TokenSendFormView = layout.wrap_form(TokenSendForm)
Exemple #34
0
    def finished_jobs(self):
        return utils.get_queue().finished

class StatsForm(crud.CrudForm):
    """View list of queues and last modification dates for all
    available channels.
    """
    addform_factory = crud.NullForm
    editform_factory = EditForm
    view_schema = IQueueStatistics

    def get_items(self):
        return [(channel.name, ChannelStatistics(channel))
                for channel in channel_lookup()]

    def remove(self, (id, item)):
        for name, stats in self.get_items():
            if name == id:
                stats.channel.queue.clear()
                self.status = _(u"All sent and failed messages deleted")
                return
        else:
            raise KeyError(id)

StatsView = layout.wrap_form(
    StatsForm,
    index=ViewPageTemplateFile('controlpanel.pt'),
    label = _(u"label_statistics_administration",
              default=u"Statistics"),
    back_link = controlpanel.back_to_controlpanel)
        reset_passw = data.get('reset_password', '')
        passw_behavior = IPasswordProtected(self.context)

        if passw and passw != '':
            passw_behavior.assign_password(passw)
            self.status = _(u"Password assigned.")

        if reset_passw:
            passw_behavior.remove_password()
            self.status = _(u"This content is not going to be password protected.")

    @button.buttonAndHandler(_('Cancel'), name='cancel')
    def cancel(self, action):
        self.status = _(u"Cancelled.")

AssignPasswordFormView = wrap_form(AssignPasswordForm)


class ATAssignPasswordForm(form.Form):

    fields = field.Fields(IATPasswordProtected)

    ignoreContext = False

    @button.buttonAndHandler(_('Save'), name='save')
    def save(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = _(u"Please correct errors")
            return
        passw = data.get('passw_hash', '')
            return
        ajax = 'ajax' in self.request.form
            
        manager = IImageTagsManager(self.context)
        id, tag, new_tag = manager.save_tag(data)

        if not errors:
            #  Special treatment for ajax/non-ajax save
            if not ajax:
                if new_tag:
                    message = _(u"Tag '${title}' added.", mapping={u'title': tag['title']})
                else:
                    message = _(u"Tag '${title}' updated.", mapping={u'title': tag['title']})
                self.request.response.redirect('%s/@@imagetags-manage' % self.context.absolute_url())
                IStatusMessage(self.request).addStatusMessage(message, type='info')
            else:
                # Return XML response
                self.request.response.redirect('%s/@@imagetags-newtag?id=%s' % (self.context.absolute_url(), id))
               

class AddTagFormWrapper(FormWrapper):
    index = ViewPageTemplateFile('templates/form.pt')
    ajax = False
   
    def getId(self):
        return self.__name__.replace('.', '-')

        
AddTag = wrap_form(AddTagForm, __wrapper_class=AddTagFormWrapper)

Exemple #37
0
    ignoreContext = True # don't use context to get widget data
    label = u"Import CAP directory XML file"
    
    @button.buttonAndHandler(u'Apply')
    def handleApply(self, action):
        importer = CAPImporter(self.context, self.request)
        msg = importer(self.widgets['path'].value)
        response = self.request.response
        response.setStatus(201)
        response.setHeader(
            'Location',
            '%s' % self.context.absolute_url()
            )
        response.redirect(self.context.absolute_url())

CAPImportForm = wrap_form(Form)


class CAPImporter(object):
    
    """XML importing view
    """
    
    def __init__(self, context, request):
        self.context = context
        self.request = request
    
    def __call__(self, path):
        request = self.request
        portal = getToolByName(self.context, 'portal_url').getPortalObject()
        places = portal['places']
Exemple #38
0
class Form(form.Form):
    fields = field.Fields(IRoadImport)
    ignoreContext = True # don't use context to get widget data
    label = u"Import Places from Road JSON"
    
    @button.buttonAndHandler(u'Apply')
    def handleApply(self, action):
        upload_file = self.widgets['file'].value
        importer = RoadImporter(self.context, self.request)
        importer(upload_file.read())

        response = self.request.response
        response.redirect(self.context.absolute_url())

RoadImportForm = wrap_form(Form)


class RoadImporter(object):
    
    """Road JSON importing view
    """
    
    def __init__(self, context, request):
        self.context = context
        self.request = request
    
    def __call__(self, json):
        portal = getToolByName(self.context, 'portal_url').getPortalObject()
        ptool = getToolByName(self.context, 'plone_utils')
        wtool = getToolByName(self.context, 'portal_workflow')
Exemple #39
0
    @button.buttonAndHandler(u'Cancel', name='cancel')
    def handleCancel(self, action):
        self.request.response.redirect(self.context.absolute_url())

    @button.buttonAndHandler(u'Save', name='save')
    def handleSave(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        self.applyChanges(data)
        self.request.response.redirect(self.context.absolute_url())


SettingsFormView = wrap_form(SettingsForm)


class FolderFeed(adapters.FolderFeed):
    def _brains(self):
        catalog = api.portal.get_tool('portal_catalog')
        sort_order = 'ascending'
        if self.settings.sort_reverse or self.settings.sort_reverse is None:
            sort_order = 'reverse'
        return catalog(path={
            'query': '/'.join(self.context.getPhysicalPath()),
            'depth': 1
        },
                       sort_order=sort_order,
                       sort_on=self.settings.sort_on or 'effective',
                       sort_limit=self.settings.limit or 15)
Exemple #40
0
class SQLAlchemyConnectionsForm(crud.CrudForm):
    label = _(u'label_saconnectform', u'Manage SQLAlchemy connection strings')
    update_schema = IConnectionLine

    def __init__(self, context, request):
        crud.CrudForm.__init__(self, context, request)
        self.storage = ISQLAlchemyConnectionStrings(getUtility(ISiteRoot))

    def get_items(self):
        names = self.storage.keys()
        names.sort()
        return [(name, ConnectionLine(name, self.storage[name], self))
                for name in names]

    def add(self, data):
        name = data['connname'].strip()
        if str(name) in self.storage:
            msg = _(u'error_name_already_registered',
                    u'The connection name is already registered')
            msg = translate(msg, self.request)
            raise schema.ValidationError(msg)

        self.storage[name] = data['connstring'].strip()
        return ConnectionLine(name, data['connstring'].strip(), self)

    def remove(self, (id, item)):
        del self.storage[item.connname]


SQLAlchemyConnectionsView = wrap_form(SQLAlchemyConnectionsForm)
Exemple #41
0
        display_type = getDisplayType(settings.display_type)
        msg = has_changes and self.successMessage or self.noChangesMessage
        msg = zope.i18n.translate(msg)

        if display_type.userWarning is not None:
            self.status = "%s %s" % (
                msg, zope.i18n.translate(display_type.userWarning))
        else:
            self.status = msg

    @button.buttonAndHandler(_('Apply'), name='apply')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        changes = self.applyChanges(data)
        settings = GallerySettings(self.context)

        has_changes = False
        if changes:
            settings = GallerySettings(self.context)
            settings.last_cooked_time_in_seconds = 0
            has_changes = True

        self.set_status_message(settings, has_changes)
        return self.request.response.redirect(self.context.absolute_url())


GallerySettingsView = wrap_form(GallerySettingsForm)
    form.widget(getText=WysiwygFieldWidget)
    getText = schema.Text(title=_(u"Text"), required=False)


class DocumentOverrideStorage(base.OverrideStorage):
    """ Store document content type specific override settings
    """
    zope.interface.implements(IFormSchema)

    Title = FieldProperty(IFormSchema["Title"])
    Description = FieldProperty(IFormSchema["Description"])
    getText = FieldProperty(IFormSchema["getText"])


def document_override_storage_factory(context):
    """ Adapter which creates the persistent object storing document specific overrides.

    """
    return base.getOverrideStorage(context, DocumentOverrideStorage)

class DocumentOverriderForm(base.OverrideForm):
    """ Edit mobile overrides for the document
    """

    grok.context(IATDocument)

    schema = IFormSchema

DocumentOverriderFormView = wrap_form(DocumentOverriderForm)
            group.fields = field.Fields(group.fields, *toadd)

    def update(self):
        super(NoticeBoardSettingsForm, self).update()

    def set_status_message(self, settings, has_changes):
        msg = has_changes and self.successMessage \
            or self.noChangesMessage
        msg = zope.i18n.translate(msg)

        self.status = msg

    @button.buttonAndHandler(_('Apply'), name='apply')
    def handleApply(self, action):
        (data, errors) = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return
        changes = self.applyChanges(data)
        settings = NoticeboardSettings(self.context)

        has_changes = False
        if changes:
            settings = NoticeboardSettings(self.context)
            has_changes = True

        self.set_status_message(settings, has_changes)
        return self.request.response.redirect(self.context.absolute_url())

NoticeboardSettingsView = wrap_form(NoticeBoardSettingsForm)
from z3c.form import field
from z3c.form import form
from z3c.form.browser.checkbox import CheckBoxFieldWidget


logger = getLogger('collective.documentviewer')


class GlobalSettingsForm(form.EditForm):
    fields = field.Fields(IGlobalDocumentViewerSettings)
    fields['auto_layout_file_types'].widgetFactory = CheckBoxFieldWidget

    label = _(u'heading_documentviewer_global_settings_form',
              default=u"Global Document Viewer Settings")
    description = _(u'description_documentviewer_global_settings_form',
                    default=u"Configure the parameters for this Viewer.")

    @button.buttonAndHandler(_('Save'), name='apply')
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        self.applyChanges(data)

        self.status = PloneMessageFactory('Changes saved.')


GlobalSettingsFormView = wrap_form(GlobalSettingsForm)
        :type id: object
        """
        registry = getUtility(IRegistry)
        ids = registry['collective.cropimage.ids']
        ids = [i for i in ids if i['id'] != id]
        registry['collective.cropimage.ids'] = ids

    def before_update(self, item, data):
        registry = getUtility(IRegistry)
        ids = registry['collective.cropimage.ids']
        ids = [i for i in ids if i['id'] != data['id']]
        ids.append(data)
        registry['collective.cropimage.ids'] = ids

CropImageIDControlPanelView = wrap_form(
    CropImageIDControlPanelForm,
    index=ViewPageTemplateFile('templates/controlpanel.pt')
)


class CropImageView(BrowserView):

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

    def __call__(self):
        context = aq_inner(self.context)
        form = self.request.form
        if form.get('form.button.Save', None) is not None:
            name = 'collective.cropimage.{0}'.format(
                form.get('field')
            )
            anno = IAnnotations(context)
Exemple #46
0
class ShopConfigurationForm(RegistryEditForm, group.GroupForm):
    """Configuration form for the ftw.shop configlet
    """
    schema = IShopConfiguration
    fields = field.Fields(IShopConfiguration).omit(
        'shop_email', 'mail_bcc', 'mail_subject', 'always_notify_shop_owner',
        'payment_processor_step_group', 'enabled_payment_processors',
        'contact_info_step_group', 'shipping_address_step_group',
        'order_review_step_group', 'phone_number', 'vat_enabled', 'vat_number',
        'vat_rates')
    groups = (MailGroup, CheckoutGroup, VATGroup)
    label = _(u'label_shop_configuration', default=u"Shop configuration")

    def updateFields(self):
        super(ShopConfigurationForm, self).updateFields()

    def updateWidgets(self):
        super(ShopConfigurationForm, self).updateWidgets()


# BBB: For Plone3 compatibility, we need to override the template
# on the form wrapper, not the form itself, and use zope2's
# ViewPageTemplateFile, not zope3's
# See http://plone.org/products/dexterity/documentation/error/rendering-a-form-fails-with-attributeerror-str-object-has-no-attribute-other

ShopConfigurationView = wrap_form(ShopConfigurationForm,
                                  ControlPanelFormWrapper)
ShopConfigurationView.template = ViewPageTemplateFile(
    'templates/controlpanel.pt')
        # render template and send email
        variables = {'send_from_address' : send_from_address,
                     'sender_id'         : sender_id,
                     'url'               : referer,
                     'subject'           : subject,
                     'message'           : message,
                     'encoding'          : encoding,
        }

        host = context.MailHost # plone_utils.getMailHost() (is private)
        try:
            message = context.author_feedback_template(context, **variables)
            result = host.secureSend(message, send_to_address, envelope_from, subject=subject, subtype='plain', charset=encoding, debug=False, From=send_from_address)
        except ConflictError:
            raise
        except: # TODO Too many things could possibly go wrong. So we catch all.
            exception = plone_utils.exceptionString()
            message = _(u'Unable to send mail: ${exception}',
                          mapping={u'exception' : exception})
            plone_utils.addPortalMessage(message, 'error')
            return False
        """

        plone_utils.addPortalMessage(u'[FAKE] %s' % _(u'Mail sent.'))

# wrap the form with plone.app.z3cform's Form wrapper
ContactInfoView = wrap_form(ContactInfoForm)

# Register Norobots validator for the correponding field in the IContactInfo interface
validator.WidgetValidatorDiscriminators(NorobotsValidator, field=IContactInfo['norobots'])
Exemple #48
0
        context = self.getContent()
        applyChanges(self, context, data)
        self.status = self.successMessage
        return context

    def nextURL(self):
        api.portal.show_message(self.status, request=self.request)
        return "%s/%s" % (self.getContent().absolute_url(), '@@token_manage')

    def update(self):
        self.buttons.values()[0].title = _(u'add_token', default=u"Add token")
        super(TokenAddForm, self).update()


# wrap the form with plone.app.z3cform's Form wrapper
TokenAddFormView = layout.wrap_form(TokenAddForm)


class TokenEditForm(form.EditForm):
    """ Token Edit Form """

    # Defining the fields
    fields = field.Fields(
        TextLine(__name__='token_display',
                 title=ITokenInfoSchema['token_id'].title,
                 description=ITokenInfoSchema['token_id'].description)
    ) + field.Fields(ITokenInfoSchema)
    fields['token_id'].mode = HIDDEN_MODE
    fields['token_display'].mode = DISPLAY_MODE
    fields['token_roles'].widgetFactory[INPUT_MODE] = CheckBoxFieldWidget
        if not errors:
            #  Special treatment for ajax/non-ajax save
            if not ajax:
                if new_tag:
                    message = _(u"Tag '${title}' added.",
                                mapping={u'title': tag['title']})
                else:
                    message = _(u"Tag '${title}' updated.",
                                mapping={u'title': tag['title']})
                self.request.response.redirect('%s/@@imagetags-manage' %
                                               self.context.absolute_url())
                IStatusMessage(self.request).addStatusMessage(message,
                                                              type='info')
            else:
                # Return XML response
                self.request.response.redirect(
                    '%s/@@imagetags-newtag?id=%s' %
                    (self.context.absolute_url(), id))


class AddTagFormWrapper(FormWrapper):
    index = ViewPageTemplateFile('templates/form.pt')
    ajax = False

    def getId(self):
        return self.__name__.replace('.', '-')


AddTag = wrap_form(AddTagForm, __wrapper_class=AddTagFormWrapper)