Ejemplo n.º 1
0
    def setUp(self):
        super(TestReporter, self).setUp()

        create(Builder('ogds_user').id('test_user_0'))
        create(Builder('ogds_user').id('test_user_1'))

        self.request = self.mocker.mock()
        self.brains = []
        for i in range(2):
            brain = self.stub()
            self.expect(brain.Title).result('Objekt %i' % (i))
            self.expect(brain.missing).result(MissingValue)
            self.expect(brain.start).result(
                datetime(2012, 2, 25) + timedelta(i))
            self.expect(brain.responsible).result('test_user_%i' % (i))
            self.expect(brain.review_state).result('dossier-state-active')
            self.brains.append(brain)

        self.replay()

        translation_request = Environment(('de', 'de'))

        self.test_attributes = [
            {'id': 'Title', 'title': _('label_title', default='Title')},
            {'id': 'missing', 'missing': 'Missing', },
            {'id': 'start', 'title': _('label_start', default='Start'),
             'number_format': DATE_NUMBER_FORMAT},
            {'id': 'responsible',
             'title': _('label_responsible', default='Responsible'),
             'transform': readable_author},
            {'id': 'review_state',
             'title': _('label_review_state', default='Review state'),
             'transform': StringTranslater(
                 translation_request, 'plone').translate},
        ]
Ejemplo n.º 2
0
    def __call__(self):
        objs = Clipboard(self.request).get_objs()
        if not objs:
            msg = _(u"msg_empty_clipboard",
                    default=u"Can't paste items; the clipboard is emtpy")
            api.portal.show_message(message=msg,
                                    request=self.request, type='error')
            return self.redirect()

        if not self.is_pasting_objects_allowed(objs):
            msg = _(u"msg_pasting_type_not_allowed",
                    default=u"Can't paste items, it's not allowed to add "
                    "objects of this type.")
            api.portal.show_message(
                message=msg, request=self.request, type='error')
            return self.redirect()

        if not self.is_pasting_on_context_allowed():
            msg = _(u"msg_pasting_not_allowed",
                    default=u"Can't paste items, the context does not allow "
                    "pasting items.")
            api.portal.show_message(
                message=msg, request=self.request, type='error')
            return self.redirect()

        self.activate_request_layer()
        self.copy_objects(objs)
        msg = _(u"msg_successfuly_pasted",
                default=u"Objects from clipboard successfully pasted.")
        api.portal.show_message(message=msg, request=self.request, type='info')
        return self.redirect()
Ejemplo n.º 3
0
    def __call__(self):
        objs = Clipboard(self.request).get_objs()
        if not objs:
            msg = _(u"msg_empty_clipboard",
                    default=u"Can't paste items; the clipboard is emtpy")
            api.portal.show_message(message=msg,
                                    request=self.request,
                                    type='error')
            return self.redirect()

        if not self.is_pasting_objects_allowed(objs):
            msg = _(u"msg_pasting_type_not_allowed",
                    default=u"Can't paste items, it's not allowed to add "
                    "objects of this type.")
            api.portal.show_message(message=msg,
                                    request=self.request,
                                    type='error')
            return self.redirect()

        if not self.is_pasting_on_context_allowed():
            msg = _(u"msg_pasting_not_allowed",
                    default=u"Can't paste items, the context does not allow "
                    "pasting items.")
            api.portal.show_message(message=msg,
                                    request=self.request,
                                    type='error')
            return self.redirect()

        self.activate_request_layer()
        self.copy_objects(objs)
        msg = _(u"msg_successfuly_pasted",
                default=u"Objects from clipboard successfully pasted.")
        api.portal.show_message(message=msg, request=self.request, type='info')
        return self.redirect()
Ejemplo n.º 4
0
    def __call__(self):
        objs = self.extract_selected_objects()

        if not objs:
            msg = _(u'error_no_items',
                    default=u'You have not selected any Items.')
            api.portal.show_message(message=msg,
                                    request=self.request,
                                    type='error')
            return self.redirect()

        if not self.are_copyable(objs):
            msg = _(u'error_not_copyable',
                    default=u"The item you selected cannot be copied.")
            api.portal.show_message(message=msg,
                                    request=self.request,
                                    type='error')
            return self.redirect()
        if any(is_or_contains_any_checked_out_document(obj) for obj in objs):
            msg = _(u'error_checked_out_cannot_be_copied',
                    default=u"Checked out documents cannot be copied.")
            api.portal.show_message(message=msg,
                                    request=self.request,
                                    type='error')
            return self.redirect()

        Clipboard(self.request).set_objs(objs)
        msg = _(u'msg_successfuly_copied',
                default=u"Selected objects successfully copied.")
        api.portal.show_message(message=msg, request=self.request, type='info')
        return self.redirect()
Ejemplo n.º 5
0
class IOpenGeverBase(model.Schema):
    """ IOpengeverBase contains title and description fields
    This is a schema interface, not a marker interface!
    """
    model.fieldset(
        u'common',
        label=_(u'fieldset_common', default=u'Common'),
        fields=[
            u'title',
            u'description',
            ],
        )

    dexteritytextindexer.searchable('title')
    title = schema.TextLine(
        title=_(u'label_title', default=u'Title'),
        required=True
        )

    dexteritytextindexer.searchable('description')
    description = schema.Text(
        title=_(u'label_description', default=u'Description'),
        required=False,
        missing_value=u'',
        default=u'',
        )
Ejemplo n.º 6
0
 def test_excel_reporter_value_rows(self):
     translation_request = Environment(('de', 'ch'))
     base_translater = StringTranslater(translation_request,
                                        'opengever.base').translate
     columns = (
         {
             'id': 'title',
             'title': _('label_title', default='Title')
         },
         {
             'id': 'classification',
             'title': u'fooclass',
             'transform': base_translater
         },
         {
             'id': 'Title',
             'title': u'footitle',
             'callable': True
         },
         {
             'id': 'unicorn',
             'title': _('label_unicorn', default='Pony'),
             'default': u'Rainbows!'
         },
     )
     self.login(self.regular_user)
     reporter = XLSReporter(self.request, columns, (self.document, ))
     workbook = self.get_workbook(reporter())
     expected_row = [
         u'Vertr\xe4gsentwurf', u'Nicht klassifiziert',
         u'Vertr\xe4gsentwurf', u'Rainbows!'
     ]
     self.assertEquals(
         expected_row,
         [cell.value for cell in list(workbook.active.rows)[-1]])
Ejemplo n.º 7
0
 def translations(self):
     return json.dumps({
         'label_overview': translate(
             _(u'label_overview', default=u'Overview'),
             context=self.request),
         'label_no_favorites': translate(
             _(u'label_no_favorites', default=u'No favorites exists.'),
             context=self.request)
     })
Ejemplo n.º 8
0
class ICreator(form.Schema):

    form.omitted('creators')
    creators = schema.Tuple(
        title=_(u'label_creators', u'Creators'),
        description=_(u'help_creators', u''),
        value_type=schema.TextLine(),
        required=False,
        missing_value=(),
    )
Ejemplo n.º 9
0
    def get_items(self):
        return [
            {'class': 'document_created',
             'label': _('label_created', default='Created'),
             'content': self.created(),
             'replace': False},

            {'class': 'last_modified',
             'label': _('label_last_modified', default='Last modified'),
             'content': self.modified(),
             'replace': False},
        ]
Ejemplo n.º 10
0
    def setUp(self):
        super(TestReporter, self).setUp()

        create(Builder('ogds_user').id('test_user_0'))
        create(Builder('ogds_user').id('test_user_1'))

        self.request = self.mocker.mock()
        self.brains = []
        for i in range(2):
            brain = self.stub()
            self.expect(brain.Title).result('Objekt %i' % (i))
            self.expect(brain.missing).result(MissingValue)
            self.expect(
                brain.start).result(datetime(2012, 2, 25) + timedelta(i))
            self.expect(brain.responsible).result('test_user_%i' % (i))
            self.expect(brain.review_state).result('dossier-state-active')
            self.brains.append(brain)

        self.replay()

        translation_request = Environment(('de', 'de'))

        self.test_attributes = [
            {
                'id': 'Title',
                'title': _('label_title', default='Title')
            },
            {
                'id': 'missing',
                'missing': 'Missing',
            },
            {
                'id': 'start',
                'title': _('label_start', default='Start'),
                'number_format': DATE_NUMBER_FORMAT
            },
            {
                'id': 'responsible',
                'title': _('label_responsible', default='Responsible'),
                'transform': readable_author
            },
            {
                'id':
                'review_state',
                'title':
                _('label_review_state', default='Review state'),
                'transform':
                StringTranslater(translation_request, 'plone').translate
            },
        ]
Ejemplo n.º 11
0
class ITranslatedTitle(model.Schema):
    """Behavior schema adding translated title fields to dexterity
    content.
    """

    form.order_before(title_de='*')
    searchable('title_de')
    title_de = TextLine(title=_(u'label_title_de', default=u'Title (German)'),
                        required=True)

    form.order_before(title_fr='*')
    searchable('title_fr')
    title_fr = TextLine(title=_(u'label_title_fr', default=u'Title (French)'),
                        required=True)
Ejemplo n.º 12
0
class ModelAddForm(AutoExtensibleForm, AddForm):
    """Base add-form for stand-alone model objects.
    """

    ignoreContext = True
    schema = None
    model_class = None

    def __init__(self, context, request):
        super(ModelAddForm, self).__init__(context, request)
        self._created_object = None
        disable_edit_bar()

    def create(self, data):
        self.validate(data)
        return self.model_class(**data)

    def validate(self, data):
        """Hook to perform additional input validation."""
        pass

    def add(self, obj):
        session = create_session()
        session.add(obj)
        session.flush()  # required to create an autoincremented id
        self._created_object = obj

    # this renames the button but otherwise preserves super's behavior
    @button.buttonAndHandler(_('Save', default=u'Save'), name='save')
    def handleAdd(self, action):
        # self as first argument is required by the decorator
        super(ModelAddForm, self).handleAdd(self, action)
        if not self._finishedAdd:
            return

        api.portal.show_message(
            _(u'message_record_created', default='Record created'),
            api.portal.get().REQUEST)
        return self.request.RESPONSE.redirect(self.nextURL())

    @button.buttonAndHandler(_(u'label_cancel', default=u'Cancel'),
                             name='cancel')
    def cancel(self, action):
        return self.request.RESPONSE.redirect(self.cancelURL())

    def nextURL(self):
        return self.context.absolute_url()

    def cancelURL(self):
        return self.context.absolute_url()
Ejemplo n.º 13
0
 def test_excel_reporter_value_rows(self):
     translation_request = Environment(('de', 'ch'))
     base_translater = StringTranslater(translation_request, 'opengever.base').translate
     columns = (
         {'id': 'title', 'title': _('label_title', default='Title')},
         {'id': 'classification', 'title': u'fooclass', 'transform': base_translater},
         {'id': 'Title', 'title': u'footitle', 'callable': True},
         {'id': 'unicorn', 'title': _('label_unicorn', default='Pony'), 'default': u'Rainbows!'},
         )
     self.login(self.regular_user)
     reporter = XLSReporter(self.request, columns, (self.document, ))
     workbook = self.get_workbook(reporter())
     expected_row = [u'Vertr\xe4gsentwurf', u'Nicht klassifiziert', u'Vertr\xe4gsentwurf', u'Rainbows!']
     self.assertEquals(expected_row, [cell.value for cell in list(workbook.active.rows)[-1]])
Ejemplo n.º 14
0
    def __call__(self):
        if self.context.cb_isCopyable():
            Clipboard(self.request).set_objs([self.context])
            msg = _(u'msg_successfuly_copied',
                    default=u"Selected objects successfully copied.")
            msg_type = 'info'
        else:
            msg = _(u'error_not_copyable',
                    default=u"The item you selected cannot be copied.")
            msg_type = 'error'

        api.portal.show_message(
            message=msg, request=self.request, type=msg_type)

        return self.request.RESPONSE.redirect(self.context.absolute_url())
Ejemplo n.º 15
0
 def get_items(self):
     return [
         {
             'class': 'document_created',
             'label': _('label_created', default='Created'),
             'content': self.created(),
             'replace': False
         },
         {
             'class': 'last_modified',
             'label': _('label_last_modified', default='Last modified'),
             'content': self.modified(),
             'replace': False
         },
     ]
Ejemplo n.º 16
0
    def translations(self):
        return json.dumps({
            'label_title': translate(_(u'label_title', default=u'Title'),
                                     context=self.request),
            'label_save': translate(_(u'Save', default=u'Save'),
                                    context=self.request),
            'label_cancel': translate(_(u'label_cancel', default=u'Cancel'),
                                      context=self.request),
            'message_title': translate(_(u'message_title_error', default=u'Error'),
                                       context=self.request),
            'message_not_saved': translate(_(u'message_not_saved',
                                             default='Change could not be saved.'),
                                           context=self.request),

        })
Ejemplo n.º 17
0
    def render_token_radiobutton(self, item, value):
        """Render the radio-button input element for an item."""
        if isinstance(item, NullObject):
            # XXX - the checkedness persistency does not work as this is not a real value being passed in
            return (
                u'<input id="{id}" name="{name}" value="{value}" title="{title}" type="radio" "{checked}" />'
                .format(
                    id=u'-'.join((self.id, u'empty-marker')),
                    name=self.name,
                    value=u'--NOVALUE--',
                    checked=u'checked="checked"'
                    if u'--NOVALUE--' in self.value else u'',
                    title=_(u'label_none', default=u'None'),
                ))

        term = self.terms.getTerm(item)

        is_checked = self.is_checked(term)
        item_id = '%s-%s' % (self.id, term.token)

        return u'<input id="{id}" name="{name}" value="{value}"'\
            'title="{title}" type="radio" {checked} />'.format(
                id=item_id,
                name=escape_html(self.name),
                value=term.token,
                checked='checked="checked"' if is_checked else '',
                title=escape_html(self.render_default_title(item, value)),
            )
Ejemplo n.º 18
0
    def get_number_mapping(self):
        items = []
        intid_util = getUtility(IIntIds)

        for prefix, intid in self.get_child_mapping().iteritems():
            obj = intid_util.queryObject(intid)

            if obj:
                title = ITranslatedTitle(obj).translated_title()
                active = (self.get_prefix_mapping()[intid] == prefix)
            else:
                # if a repositoryfolder is already removed the intid
                # utility raises an KeyError. But the number should still
                # be in the list, because it should be available to remove
                # via the reference prefix manager.
                active = False
                title = _('label_already_removed',
                          '-- Already removed object --')

            items.append({'prefix': prefix, 'title': title, 'active': active})

        def key_sorter(obj):
            key = obj['prefix']
            if (key.isdigit()):
                return int(key)
            return key

        return sorted(items, key=key_sorter)
Ejemplo n.º 19
0
    def __call__(self):
        if self.context.cb_isCopyable():
            Clipboard(self.request).set_objs([self.context])
            msg = _(u'msg_successfuly_copied',
                    default=u"Selected objects successfully copied.")
            msg_type = 'info'
        else:
            msg = _(u'error_not_copyable',
                    default=u"The item you selected cannot be copied.")
            msg_type = 'error'

        api.portal.show_message(message=msg,
                                request=self.request,
                                type=msg_type)

        return self.request.RESPONSE.redirect(self.context.absolute_url())
Ejemplo n.º 20
0
    def render_table(self):
        """Render the table that contains the radio-button sequence.

        Always renders a radio-button column as first column.
        If the field defines custom columns render these, if it does not
        render a column with the term's title.

        While rendering the table we pass only the token-values (i.e. the
        objects) to the ITableGenerator. This improves compatibility with
        already existing helpers that expect objects and not vocabulary-terms
        and with the ITableGenerator itself since it can perform attribe
        lookups based on the column name.

        """
        generator = getUtility(ITableGenerator, 'ftw.tablegenerator')
        radio_column = ({
            'transform': self.render_token_radiobutton,
            'sortable': False
        }, )
        default_title_colum = ({
            'column_title':
            _(u'label_title', default=u'Title'),
            'transform':
            self.render_default_title,
        }, )
        return generator.generate([term.value for term in self.terms],
                                  radio_column +
                                  (self.field.columns or default_title_colum))
Ejemplo n.º 21
0
    def render_token_radiobutton(self, item, value):
        """Render the radio-button input element for an item."""
        if isinstance(item, NullObject):
            # XXX - the checkedness persistency does not work as this is not a real value being passed in
            return (
                u'<input id="{id}" name="{name}" value="{value}" title="{title}" type="radio" "{checked}" />'
                .format(
                    id=u'-'.join((self.id, u'empty-marker')),
                    name=self.name,
                    value=u'--NOVALUE--',
                    checked=u'checked="checked"' if u'--NOVALUE--' in self.value else u'',
                    title=_(u'label_none', default=u'None'),
                    )
                )

        term = self.terms.getTerm(item)

        is_checked = self.is_checked(term)
        item_id = '%s-%s' % (self.id, term.token)

        return u'<input id="{id}" name="{name}" value="{value}"'\
            'title="{title}" type="radio" {checked} />'.format(
                id=item_id,
                name=escape_html(self.name),
                value=term.token,
                checked='checked="checked"' if is_checked else '',
                title=escape_html(self.render_default_title(item, value)),
            )
Ejemplo n.º 22
0
    def render_table(self):
        """Render the table that contains the radio-button sequence.

        Always renders a radio-button column as first column.
        If the field defines custom columns render these, if it does not
        render a column with the term's title.

        While rendering the table we pass only the token-values (i.e. the
        objects) to the ITableGenerator. This improves compatibility with
        already existing helpers that expect objects and not vocabulary-terms
        and with the ITableGenerator itself since it can perform attribe
        lookups based on the column name.

        """
        generator = getUtility(ITableGenerator, 'ftw.tablegenerator')
        radio_column = ({
            'transform': self.render_token_radiobutton,
            'sortable': False
        },)
        default_title_colum = ({
            'column_title': _(u'label_title', default=u'Title'),
            'transform': self.render_default_title,
        },)
        return generator.generate(
            [term.value for term in self.terms],
            radio_column + (self.field.columns or default_title_colum))
Ejemplo n.º 23
0
    def validate(self, value):
        super(BaseRepositoryfolderValidator, self).validate(value)

        if not self._is_dossier_addable(value):
            msg = _(u'You cannot add dossiers in the selected repository '
                    u'folder. Either you do not have the privileges or the '
                    u'repository folder contains another repository folder.')
            raise Invalid(msg)
Ejemplo n.º 24
0
 def translations(self):
     return json.dumps({
         'label_title':
         translate(_(u'label_title', default=u'Title'),
                   context=self.request),
         'label_save':
         translate(_(u'Save', default=u'Save'), context=self.request),
         'label_cancel':
         translate(_(u'label_cancel', default=u'Cancel'),
                   context=self.request),
         'message_title':
         translate(_(u'message_title_error', default=u'Error'),
                   context=self.request),
         'message_not_saved':
         translate(_(u'message_not_saved',
                     default='Change could not be saved.'),
                   context=self.request),
     })
Ejemplo n.º 25
0
 def translations(self):
     return json.dumps({
         'label_no_checked_out_docs':
         translate(_(u'label_no_checked_out_docs',
                     default=u'No checked out documents'),
                   context=self.request),
         'label_no_recently_touched_docs':
         translate(_(u'label_no_recently_touched_docs',
                     default=u'No recently touched documents yet'),
                   context=self.request),
         'label_checked_out':
         translate(_(u'label_checked_out', default=u'Checked out'),
                   context=self.request),
         'label_recently_touched':
         translate(_(u'label_recently_touched',
                     default=u'Recently touched'),
                   context=self.request),
     })
Ejemplo n.º 26
0
 def test_label_row_is_translated_attribute_titles(self):
     columns = ({
         'id': 'title',
         'title': _('label_title', default='Title')
     }, )
     self.login(self.regular_user)
     reporter = XLSReporter(self.request, columns, (self.document, ))
     workbook = self.get_workbook(reporter())
     self.assertEquals(
         [u'Title'], [cell.value for cell in list(workbook.active.rows)[0]])
 def translations(self):
     return json.dumps({
         'label_no_checked_out_docs': translate(
             _(u'label_no_checked_out_docs',
               default=u'No checked out documents'),
             context=self.request),
         'label_no_recently_touched_docs': translate(
             _(u'label_no_recently_touched_docs',
               default=u'No recently touched documents yet'),
             context=self.request),
         'label_checked_out': translate(
             _(u'label_checked_out',
               default=u'Checked out'),
             context=self.request),
         'label_recently_touched': translate(
             _(u'label_recently_touched',
               default=u'Recently touched'),
             context=self.request),
     })
Ejemplo n.º 28
0
    def handleAdd(self, action):
        # self as first argument is required by the decorator
        super(ModelAddForm, self).handleAdd(self, action)
        if not self._finishedAdd:
            return

        api.portal.show_message(
            _(u'message_record_created', default='Record created'),
            api.portal.get().REQUEST)
        return self.request.RESPONSE.redirect(self.nextURL())
Ejemplo n.º 29
0
    def handleAdd(self, action):
        # self as first argument is required by the decorator
        super(ModelAddForm, self).handleAdd(self, action)
        if not self._finishedAdd:
            return

        api.portal.show_message(
            _(u'message_record_created', default='Record created'),
            api.portal.get().REQUEST)
        return self.request.RESPONSE.redirect(self.nextURL())
Ejemplo n.º 30
0
    def __call__(self):
        portal_catalog = getToolByName(self.context, 'portal_catalog')
        if 'paths' in self.request.keys():
            paths = self.request.paths
            objlist = []
            cplist = []
            for path in paths:
                # getting Objects with catalog
                obj = portal_catalog(path={
                    'query': path,
                    'depth': 0
                })[0].getObject()
                if not obj.cb_isCopyable():
                    msg = _(u'error_not_copyable',
                            default=u"The item you selected cannot be copied")
                    IStatusMessage(self.request).addStatusMessage(msg,
                                                                  type='error')
                    return self.request.response.redirect(
                        self.context.absolute_url())

                objlist.append(obj)
            for objid in objlist:
                cplist.append(
                    aq_parent(aq_inner(objid)).manage_copyObjects(objid.id))
            cpstring = ':'.join(cplist)
            resp = self.request['RESPONSE']
            resp.setCookie('__cp',
                           cpstring,
                           path='%s' % self.cookie_path(self.request))
            self.request['__cp'] = cpstring
        else:
            msg = _(u'error_no_items',
                    default=u'You have not selected any Items')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')

        orig_template = self.request.form.get('orig_template')
        if orig_template:
            redir_url = orig_template
        else:
            # orig_template might not be in the request - fall back to context
            redir_url = self.context.absolute_url()
        return self.request.RESPONSE.redirect(redir_url)
Ejemplo n.º 31
0
def create_initial_version(obj, event):
    """When a object was copied, create an initial version.
    """
    portal = getSite()
    pr = portal.portal_repository
    history = pr.getHistory(obj)

    if history is not None and not len(history) > 0:
        comment = _(u"label_initial_version_copied", default="Initial version (document copied)")
        # Create an initial version
        pr._recursiveSave(obj, {}, pr._prepareSysMetadata(comment), autoapply=pr.autoapply)
Ejemplo n.º 32
0
class IChanged(model.Schema):
    """ IChanged contains the changed field tracking
    when an object was last changed by a user.
    """

    form.omitted('changed')
    changed = schema.Datetime(
        title=_(u'changed_date',
                default="Date last changed"),
        required=False,
        readonly=True,
    )
Ejemplo n.º 33
0
    def adjust_title_on_language_fields(self):
        """If there is only one language specific title field available,
        we ajdust the label to a `Title`.
        """
        supported_languages = set(TranslatedTitle.SUPPORTED_LANGUAGES)
        supported_active_languages = supported_languages.intersection(
            set(self.get_active_languages()))

        if len(supported_active_languages) == 1:
            fieldname = self.get_title_fieldname(
                list(supported_active_languages)[0])
            self.widgets[fieldname].label = _(u"label_title", default=u"Title")
Ejemplo n.º 34
0
    def adjust_title_on_language_fields(self):
        """If there is only one language specific title field available,
        we ajdust the label to a `Title`.
        """
        supported_languages = set(TranslatedTitle.SUPPORTED_LANGUAGES)
        supported_active_languages = supported_languages.intersection(
            set(self.get_active_languages()))

        if len(supported_active_languages) == 1:
            fieldname = self.get_title_fieldname(
                list(supported_active_languages)[0])
            self.widgets[fieldname].label = _(u"label_title", default=u"Title")
Ejemplo n.º 35
0
    def __call__(self):
        objs = self.extract_selected_objects()

        if not objs:
            msg = _(
                u'error_no_items', default=u'You have not selected any Items.')
            api.portal.show_message(
                message=msg, request=self.request, type='error')
            return self.redirect()

        if not self.are_copyable(objs):
            msg = _(u'error_not_copyable',
                    default=u"The item you selected cannot be copied.")
            api.portal.show_message(
                message=msg, request=self.request, type='error')
            return self.redirect()

        Clipboard(self.request).set_objs(objs)
        msg = _(u'msg_successfuly_copied',
                default=u"Selected objects successfully copied.")
        api.portal.show_message(message=msg, request=self.request, type='info')
        return self.redirect()
Ejemplo n.º 36
0
    def __call__(self):
        portal_catalog = getToolByName(self.context, 'portal_catalog')
        if 'paths' in self.request.keys():
            paths = self.request.paths
            objlist = []
            cplist = []
            for path in paths:
                # getting Objects with catalog
                obj = portal_catalog(
                    path={'query': path, 'depth': 0})[0].getObject()
                if not obj.cb_isCopyable():
                    msg = _(u'error_not_copyable',
                            default=u"The item you selected cannot be copied")
                    IStatusMessage(
                        self.request).addStatusMessage(msg, type='error')
                    return self.request.response.redirect(
                        self.context.absolute_url())

                objlist.append(obj)
            for objid in objlist:
                cplist.append(
                    aq_parent(aq_inner(objid)).manage_copyObjects(objid.id))
            cpstring = ':'.join(cplist)
            resp = self.request['RESPONSE']
            resp.setCookie(
                '__cp', cpstring, path='%s' % self.cookie_path(self.request))
            self.request['__cp'] = cpstring
        else:
            msg = _(
                u'error_no_items', default=u'You have not selected any Items')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')

        orig_template = self.request.form.get('orig_template')
        if orig_template:
            redir_url = orig_template
        else:
            # orig_template might not be in the request - fall back to context
            redir_url = self.context.absolute_url()
        return self.request.RESPONSE.redirect(redir_url)
Ejemplo n.º 37
0
    def render_default_title(self, item, value):
        """Render the default title colum with the term's title."""
        if isinstance(item, NullObject):
            return _(u'label_none', default=u'None')

        term = self.terms.getTerm(item)

        if ITitledTokenizedTerm.providedBy(term):
            label = translate(term.title, context=self.request,
                              default=term.title)
        else:
            label = util.toUnicode(term.value)
        return label
Ejemplo n.º 38
0
 def error(self, message):
     """
     Append a standardized error message with given message.
     """
     message = {
         'messageClass': 'error',
         'messageTitle': translate(_('message_title_error',
                                     default=u"Error"),
                                   context=self.request),
         'message': translate(message, context=self.request),
     }
     self.response['messages'] = self.response.get('messages', []) + [message]
     return self
Ejemplo n.º 39
0
 def info(self, message):
     """
     Append a standardized info message with given message.
     """
     message = {
         'messageClass': 'info',
         'messageTitle': translate(_('message_title_info',
                                     default=u"Information"),
                                   context=self.request),
         'message': translate(message, context=self.request),
     }
     self.response['messages'] = self.response.get('messages', []) + [message]
     return self
Ejemplo n.º 40
0
 def warning(self, message):
     """
     Append a standardized warning message with given message.
     """
     message = {
         'messageClass': 'warning',
         'messageTitle': translate(_('message_title_warning',
                                     default=u"Warning"),
                                   context=self.request),
         'message': translate(message, context=self.request),
     }
     self.response['messages'] = self.response.get('messages', []) + [message]
     return self
Ejemplo n.º 41
0
def create_initial_version(obj, event):
    """When a object was copied, create an initial version.
    """
    portal = getSite()
    pr = portal.portal_repository
    history = pr.getHistory(obj)

    if history is not None and not len(history) > 0:
        comment = _(u'label_initial_version_copied',
                    default="Initial version (document copied)")
        # Create an initial version
        pr._recursiveSave(obj, {}, pr._prepareSysMetadata(comment),
            autoapply=pr.autoapply)
Ejemplo n.º 42
0
    def render_default_title(self, item, value):
        """Render the default title colum with the term's title."""
        if isinstance(item, NullObject):
            return _(u'label_none', default=u'None')

        term = self.terms.getTerm(item)

        if ITitledTokenizedTerm.providedBy(term):
            label = translate(term.title,
                              context=self.request,
                              default=term.title)
        else:
            label = util.toUnicode(term.value)
        return label
Ejemplo n.º 43
0
    def return_excel(self, reporter):
        data = reporter()
        if not data:
            msg = _(u'Could not generate the report.')
            api.portal.show_message(msg, request=self.request, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE
        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        set_attachment_content_disposition(self.request, self.filename)

        return data
Ejemplo n.º 44
0
    def render(self):
        self._init_version_file()
        if not self.version_file:
            msg = _(u'No file in in this version')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE
        response.setHeader('Content-Type', self.version_file.contentType)
        response.setHeader('Content-Length', self.version_file.getSize())
        set_attachment_content_disposition(
            self.request, self.version_file.filename.encode('utf-8'))

        return self.version_file.data
Ejemplo n.º 45
0
class IClassification(model.Schema):

    model.fieldset(
        u'classification',
        label=_(u'fieldset_classification', default=u'Classification'),
        fields=[
            u'classification',
            u'privacy_layer',
            u'public_trial',
            u'public_trial_statement',
        ],
    )

    classification = schema.Choice(
        title=_(u'label_classification', default=u'Classification'),
        description=_(u'help_classification', default=u''),
        source=u'classification_classification_vocabulary',
        required=True,
    )

    privacy_layer = schema.Choice(
        title=_(u'label_privacy_layer', default=u'Privacy layer'),
        description=_(u'help_privacy_layer', default=u''),
        source=u'classification_privacy_layer_vocabulary',
        required=True,
    )

    public_trial = schema.Choice(
        title=_(u'label_public_trial', default=u'Public Trial'),
        description=_(u'help_public_trial', default=u''),
        source=u'classification_public_trial_vocabulary',
        required=True,
        defaultFactory=public_trial_default,
    )

    public_trial_statement = schema.Text(
        title=_(u'label_public_trial_statement',
                default=u'Public trial statement'),
        description=_(u'help_public_trial_statement', default=u''),
        required=False,
        default=u'',
    )
Ejemplo n.º 46
0
class IClassification(form.Schema):

    form.fieldset(
        u'classification',
        label=_(u'fieldset_classification', default=u'Classification'),
        fields=[
            u'classification',
            u'privacy_layer',
            u'public_trial',
            u'public_trial_statement',
        ],
    )

    classification = schema.Choice(
        title=_(u'label_classification', default=u'Classification'),
        description=_(u'help_classification', default=u''),
        source=u'classification_classification_vocabulary',
        required=True,
    )

    #form.widget(privacy_layer=checkbox.SingleCheckBoxFieldWidget)
    privacy_layer = schema.Choice(
        title=_(u'label_privacy_layer', default=u'Privacy layer'),
        description=_(u'help_privacy_layer', default=u''),
        source=u'classification_privacy_layer_vocabulary',
        required=True,
    )

    public_trial = schema.Choice(
        title=_(u'label_public_trial', default=u'Public Trial'),
        description=_(u'help_public_trial', default=u''),
        source=u'classification_public_trial_vocabulary',
        required=True,
    )

    public_trial_statement = schema.Text(
        title=_(u'label_public_trial_statement',
                default=u'Public trial statement'),
        description=_(u'help_public_trial_statement', default=u''),
        required=False,
        default=u'',
    )
Ejemplo n.º 47
0
    def render(self):
        self._init_version_file()
        if not self.version_file:
            msg = _(u'No file in in this version')
            IStatusMessage(self.request).addStatusMessage(
                msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE
        response.setHeader('Content-Type', self.version_file.contentType)
        response.setHeader('Content-Length', self.version_file.getSize())
        set_attachment_content_disposition(
            self.request, self.version_file.filename.encode('utf-8'))

        return self.version_file.data
Ejemplo n.º 48
0
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        self.validate(data)

        self.applyChanges(data)
        self.status = self.successMessage

        api.portal.show_message(
            _(u'message_changes_saved', default='Changes saved'),
            api.portal.get().REQUEST)

        return self.redirect_to_next_url()
    def save_new_prefix(self, action):
        data, errors = self.extractData()

        if len(errors) > 0:
            return

        obj = self.context
        parent = aq_parent(aq_inner(obj))

        new_prefix = unicode(data['prefix'])
        old_prefix = IReferenceNumberPrefix(parent).get_number(obj)

        intids = getUtility(IIntIds)
        intid = intids.getId(aq_base(obj))

        prefix_adapter = IReferenceNumberPrefix(parent)

        # Check if prefix already allocated
        prefix_mapping = prefix_adapter.get_prefix_mapping(obj)
        child_mapping = prefix_adapter.get_child_mapping(obj)

        if new_prefix in prefix_mapping.values() or \
        new_prefix in child_mapping.keys():
            raise Exception("This prefix is already allocated!")

        # Save new prefix in both mappings
        prefix_mapping[intid] = new_prefix
        child_mapping[new_prefix] = intid

        # Drop entry for old prefix from child_mapping
        if old_prefix in child_mapping:
            child_mapping.pop(old_prefix)

        if IRepositoryFolder.providedBy(obj):
            # Also change the prefix on the repo folder behavior
            rnp_behavior = IReferenceNumberPrefixBehavior(obj)
            rnp_behavior.reference_number_prefix = new_prefix

        obj.reindexObject()

        IStatusMessage(self.request).addStatusMessage(
            _(u"Reference Number prefix for '%s' "
                "changed to '%s'" % (obj.id, new_prefix)), 'info')

        return self.request.RESPONSE.redirect(self.context.absolute_url())
Ejemplo n.º 50
0
        def handleDynamicTypeCopiedEvent(ob, event):
            # Make sure owner local role is set after pasting
            # The standard Zope mechanisms take care of executable ownership
            current_user = _getAuthenticatedUser(ob)
            if current_user is None:
                return

            current_user_id = current_user.getId()
            if current_user_id is not None:
                # Customization
                are_all_local_roles_deleted = RoleAssignmentManager(ob)\
                    .update_local_roles_after_copying(current_user_id)
                if not are_all_local_roles_deleted:
                    message = _(
                        'local_roles_copied',
                         default=u"Some local roles were copied with the objects")
                    api.portal.show_message(message=message,
                                            request=getRequest(),
                                            type='info')
Ejemplo n.º 51
0
def public_trial_vocabulary_factory(context):
    return SimpleVocabulary([
        SimpleTerm(msgid, title=_(msgid))
        for msgid in PUBLIC_TRIAL_CHOICES])
Ejemplo n.º 52
0
def title_helper(item, title):
    if isinstance(item, NullObject):
        return _(u'label_null', default=u'Null')
    else:
        return title
 def _handle_form_submitted(self, REQUEST=None):
     self._delete_objs(self.objs_without_backrefs)
     api.portal.show_message(_(u'Items successfully deleted.'),
                             self.request, type="info")
     return self._redirect_to_orig_template()
 def __init__(self, title=None, url=None):
     self.title = _('unauthorized_backreference',
                    default="You are not allowed to see this reference")
Ejemplo n.º 55
0
 def get_unmark_favorite_title(self):
     return _('tooltip_remove_favorite_action',
              default=u'Remove from favorites')