Example #1
0
    def change_language_menu(self):
        if self.toolbar.edit_mode and self.page:
            language_menu = self.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER)
            if not language_menu:
                return None

            languages = get_language_dict(self.current_site.pk)

            remove = [(code, languages.get(code, code))
                      for code in self.page.get_languages()
                      if code in languages]
            add = [l for l in languages.items() if l not in remove]
            copy = [(code, name) for code, name in languages.items()
                    if code != self.current_lang and (code, name) in remove]

            if add or remove or copy:
                language_menu.add_break(ADD_PAGE_LANGUAGE_BREAK)

            if add:
                add_plugins_menu = language_menu.get_or_create_menu(
                    '{0}-add'.format(LANGUAGE_MENU_IDENTIFIER),
                    _('Add Translation'))
                page_change_url = admin_reverse('cms_page_change',
                                                args=(self.page.pk, ))
                for code, name in add:
                    url = add_url_parameters(page_change_url, language=code)
                    add_plugins_menu.add_modal_item(name, url=url)

            if remove:
                remove_plugins_menu = language_menu.get_or_create_menu(
                    '{0}-del'.format(LANGUAGE_MENU_IDENTIFIER),
                    _('Delete Translation'))
                translation_delete_url = admin_reverse(
                    'cms_page_delete_translation', args=(self.page.pk, ))
                disabled = len(remove) == 1
                for code, name in remove:
                    url = add_url_parameters(translation_delete_url,
                                             language=code)
                    remove_plugins_menu.add_modal_item(name,
                                                       url=url,
                                                       disabled=disabled)

            if copy:
                copy_plugins_menu = language_menu.get_or_create_menu(
                    '{0}-copy'.format(LANGUAGE_MENU_IDENTIFIER),
                    _('Copy all plugins'))
                title = _('from %s')
                question = _('Are you sure you want copy all plugins from %s?')
                page_copy_url = admin_reverse('cms_page_copy_language',
                                              args=(self.page.pk, ))
                for code, name in copy:
                    copy_plugins_menu.add_ajax_item(
                        title % name,
                        action=page_copy_url,
                        data={
                            'source_language': code,
                            'target_language': self.current_lang
                        },
                        question=question % name,
                        on_success=self.toolbar.REFRESH_PAGE)
def change_language_menu(self):
    if self.toolbar.edit_mode_active and self.page:
        can_change = page_permissions.user_can_change_page(
            user=self.request.user,
            page=self.page,
            site=self.current_site,
        )
    else:
        can_change = False

    if can_change:
        language_menu = self.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER)
        if not language_menu:
            return None

        languages = get_language_dict(self.current_site.pk)

        remove = [(code, languages.get(code, code))
                  for code in self.page.get_languages() if code in languages]
        add = [l for l in languages.items() if l not in remove]

        if add:
            language_menu.add_break(ADD_PAGE_LANGUAGE_BREAK)

            add_plugins_menu = language_menu.get_or_create_menu(
                '{0}-add'.format(LANGUAGE_MENU_IDENTIFIER),
                _('Add Translation'))

            page_add_url = admin_reverse('cms_pagecontent_add')

            for code, name in add:
                url = add_url_parameters(page_add_url,
                                         cms_page=self.page.pk,
                                         language=code)
                add_plugins_menu.add_modal_item(name, url=url)
Example #3
0
    def change_language_menu(self):
        if self.toolbar.edit_mode_active and self.page:
            can_change = page_permissions.user_can_change_page(
                user=self.request.user, page=self.page, site=self.current_site)
        else:
            can_change = False

        if can_change:
            language_menu = self.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER)
            if not language_menu:
                return None

            languages = get_language_dict(self.current_site.pk)
            remove = [(code, languages.get(code, code))
                      for code in self.page.get_languages()
                      if code in languages]
            add = [code for code in languages.items() if code not in remove]
            copy = [(code, name) for code, name in languages.items()
                    if code != self.current_lang and (code, name) in remove]

            if add:
                language_menu.add_break(ADD_PAGE_LANGUAGE_BREAK)

                add_plugins_menu = language_menu.get_or_create_menu(
                    "{0}-add".format(LANGUAGE_MENU_IDENTIFIER),
                    _("Add Translation"))

                page_add_url = admin_reverse("cms_pagecontent_add")

                for code, name in add:
                    url = add_url_parameters(page_add_url,
                                             cms_page=self.page.pk,
                                             language=code)
                    add_plugins_menu.add_modal_item(name, url=url)

            if copy:
                copy_plugins_menu = language_menu.get_or_create_menu(
                    '{0}-copy'.format(LANGUAGE_MENU_IDENTIFIER),
                    _('Copy all plugins'))
                title = _('from %s')
                question = _(
                    'Are you sure you want to copy all plugins from %s?')

                for code, name in copy:
                    # Get the Draft or Published PageContent.
                    page_content = self.get_page_content(language=code)
                    page_copy_url = admin_reverse(
                        'cms_pagecontent_copy_language',
                        args=(page_content.pk, ))
                    copy_plugins_menu.add_ajax_item(
                        title % name,
                        action=page_copy_url,
                        data={
                            'source_language': code,
                            'target_language': self.current_lang
                        },
                        question=question % name,
                        on_success=self.toolbar.REFRESH_PAGE)
Example #4
0
    def change_language_menu(self):
        if self.toolbar.edit_mode and self.page:
            language_menu = self.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER)
            if not language_menu:
                return None

            languages = get_language_dict(self.current_site.pk)

            remove = [(code, languages.get(code, code)) for code in self.page.get_languages() if code in languages]
            add = [l for l in languages.items() if l not in remove]
            copy = [(code, name) for code, name in languages.items() if code != self.current_lang and (code, name) in remove]

            if add or remove or copy:
                language_menu.add_break(ADD_PAGE_LANGUAGE_BREAK)

            if add:
                add_plugins_menu = language_menu.get_or_create_menu('{0}-add'.format(LANGUAGE_MENU_IDENTIFIER), _('Add Translation'))
                page_change_url = admin_reverse('cms_page_change', args=(self.page.pk,))
                for code, name in add:
                    url = add_url_parameters(page_change_url, language=code)
                    add_plugins_menu.add_modal_item(name, url=url)

            if remove:
                remove_plugins_menu = language_menu.get_or_create_menu('{0}-del'.format(LANGUAGE_MENU_IDENTIFIER), _('Delete Translation'))
                translation_delete_url = admin_reverse('cms_page_delete_translation', args=(self.page.pk,))
                disabled = len(remove) == 1
                for code, name in remove:
                    url = add_url_parameters(translation_delete_url, language=code)
                    remove_plugins_menu.add_modal_item(name, url=url, disabled=disabled)

            if copy:
                copy_plugins_menu = language_menu.get_or_create_menu('{0}-copy'.format(LANGUAGE_MENU_IDENTIFIER), _('Copy all plugins'))
                title = _('from %s')
                question = _('Are you sure you want to copy all plugins from %s?')
                page_copy_url = admin_reverse('cms_page_copy_language', args=(self.page.pk,))
                for code, name in copy:
                    copy_plugins_menu.add_ajax_item(
                        title % name, action=page_copy_url,
                        data={'source_language': code, 'target_language': self.current_lang},
                        question=question % name, on_success=self.toolbar.REFRESH_PAGE
                    )
    def populate(self):
        self.page = get_page_draft(self.request.current_page)
        config = self.__get_services_config()
        if not config:
            # Do nothing if there is no services app_config to work with
            return

        user = getattr(self.request, 'user', None)
        try:
            view_name = self.request.resolver_match.view_name
        except AttributeError:
            view_name = None

        if user and view_name:
            language = get_language_from_request(self.request, check_path=True)

            # get existing admin menu
            admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER)

            # add new Services item
            admin_menu.add_sideframe_item(_('Services'),
                                          url='/admin/js_services/service/',
                                          position=0)

            # If we're on an Service detail page, then get the service
            if view_name == '{0}:service-detail'.format(config.namespace):
                obj = get_object_from_request(Service, self.request)
            else:
                obj = None

            menu = self.toolbar.get_or_create_menu('services-app',
                                                   config.get_app_title())

            change_config_perm = user.has_perm(
                'js_services.change_servicesconfig')
            add_config_perm = user.has_perm('js_services.add_servicesconfig')
            config_perms = [change_config_perm, add_config_perm]

            change_service_perm = user.has_perm('js_services.change_service')
            delete_service_perm = user.has_perm('js_services.delete_service')
            add_service_perm = user.has_perm('js_services.add_service')
            service_perms = [
                change_service_perm,
                add_service_perm,
                delete_service_perm,
            ]

            if change_config_perm:
                url_args = {}
                if language:
                    url_args = {
                        'language': language,
                    }
                url = get_admin_url('js_services_servicesconfig_change', [
                    config.pk,
                ], **url_args)
                menu.add_modal_item(_('Configure addon'), url=url)

            if any(config_perms) and any(service_perms):
                menu.add_break()

            if change_service_perm:
                url_args = {}
                if config:
                    url_args = {'sections__id__exact': config.pk}
                url = get_admin_url('js_services_service_changelist',
                                    **url_args)
                menu.add_sideframe_item(_('Service list'), url=url)

            if add_service_perm:
                url_args = {
                    'sections': config.pk,
                    'owner': user.pk,
                }
                if language:
                    url_args.update({
                        'language': language,
                    })
                url = get_admin_url('js_services_service_add', **url_args)
                menu.add_modal_item(_('Add new service'), url=url)

            if change_service_perm and obj:
                url_args = {}
                if language:
                    url_args = {
                        'language': language,
                    }
                url = get_admin_url('js_services_service_change', [
                    obj.pk,
                ], **url_args)
                menu.add_modal_item(_('Edit this service'),
                                    url=url,
                                    active=True)

            if delete_service_perm and obj:
                redirect_url = self.get_on_delete_redirect_url(
                    obj, language=language)
                url = get_admin_url('js_services_service_delete', [
                    obj.pk,
                ])
                menu.add_modal_item(_('Delete this service'),
                                    url=url,
                                    on_close=redirect_url)

        if settings.USE_I18N:  # and not self._language_menu:
            if obj:
                self._language_menu = self.toolbar.get_or_create_menu(
                    LANGUAGE_MENU_IDENTIFIER, _('Language'), position=-1)
                self._language_menu.items = []
                languages = get_language_dict(self.current_site.pk)
                page_languages = self.page.get_languages()
                remove = []

                for code, name in get_language_tuple():
                    if code in obj.get_available_languages():
                        remove.append((code, name))
                        try:
                            url = obj.get_absolute_url(code)
                        except NoReverseMatch:
                            url = None
                        if url and code in page_languages:
                            self._language_menu.add_link_item(
                                name,
                                url=url,
                                active=self.current_lang == code)

                if self.toolbar.edit_mode_active:
                    add = [l for l in languages.items() if l not in remove]
                    copy = [
                        (code, name) for code, name in languages.items()
                        if code != self.current_lang and (code, name) in remove
                    ]

                    if (add or len(remove) > 1
                            or copy) and change_service_perm:
                        self._language_menu.add_break(ADD_OBJ_LANGUAGE_BREAK)

                        if add:
                            add_plugins_menu = self._language_menu.get_or_create_menu(
                                '{0}-add-trans'.format(
                                    LANGUAGE_MENU_IDENTIFIER),
                                _('Add Translation'))
                            for code, name in add:
                                url_args = {}
                                url = '%s?language=%s' % (get_admin_url(
                                    'js_services_service_change', [obj.pk], **
                                    url_args), code)
                                add_plugins_menu.add_modal_item(name, url=url)

                        if len(remove) > 1:
                            remove_plugins_menu = self._language_menu.get_or_create_menu(
                                '{0}-del-trans'.format(
                                    LANGUAGE_MENU_IDENTIFIER),
                                _('Delete Translation'))
                            for code, name in remove:
                                url = get_admin_url(
                                    'js_services_service_delete_translation',
                                    [obj.pk, code])
                                remove_plugins_menu.add_modal_item(name,
                                                                   url=url)

                        if copy:
                            copy_plugins_menu = self._language_menu.get_or_create_menu(
                                '{0}-copy-trans'.format(
                                    LANGUAGE_MENU_IDENTIFIER),
                                _('Copy all plugins'))
                            title = _('from %s')
                            question = _(
                                'Are you sure you want to copy all plugins from %s?'
                            )
                            url = get_admin_url(
                                'js_services_service_copy_language', [obj.pk])
                            for code, name in copy:
                                copy_plugins_menu.add_ajax_item(
                                    title % name,
                                    action=url,
                                    data={
                                        'source_language': code,
                                        'target_language': self.current_lang
                                    },
                                    question=question % name,
                                    on_success=self.toolbar.REFRESH_PAGE)
    def change_language_menu(self):
        if self.toolbar.edit_mode_active and isinstance(
                self.toolbar.obj, AliasContent):
            can_change = self.request.user.has_perm(
                get_model_permission_codename(Alias, 'change'), )
        else:
            can_change = False

        if can_change:
            alias_content = self.toolbar.obj
            language_menu = self.toolbar.get_menu(LANGUAGE_MENU_IDENTIFIER)
            if not language_menu:
                return None

            languages = get_language_dict(self.current_site.pk)
            current_placeholder = alias_content.placeholder

            remove = [(code, languages.get(code, code))
                      for code in alias_content.alias.get_languages()
                      if code in languages]
            add = [code for code in languages.items() if code not in remove]
            copy = [(code, name) for code, name in languages.items()
                    if code != self.current_lang and (
                        code, name) in remove and current_placeholder]

            if add or remove or copy:
                language_menu.add_break(ALIAS_LANGUAGE_BREAK)

            if add:
                add_plugins_menu = language_menu.get_or_create_menu(
                    '{0}-add'.format(LANGUAGE_MENU_IDENTIFIER),
                    _('Add Translation'),
                )
                add_url = admin_reverse('djangocms_alias_aliascontent_add')

                for code, name in add:
                    url = add_url_parameters(add_url,
                                             language=code,
                                             alias=alias_content.alias_id)
                    add_plugins_menu.add_modal_item(name, url=url)

            if remove:
                remove_plugins_menu = language_menu.get_or_create_menu(
                    '{0}-del'.format(LANGUAGE_MENU_IDENTIFIER),
                    _('Delete Translation'),
                )
                disabled = len(remove) == 1
                for code, name in remove:
                    alias_content = alias_content.alias.get_content(
                        language=code,
                        show_draft_content=True,
                    )
                    translation_delete_url = admin_reverse(
                        'djangocms_alias_aliascontent_delete',
                        args=(alias_content.pk, ),
                    )
                    url = add_url_parameters(translation_delete_url,
                                             language=code)
                    remove_plugins_menu.add_modal_item(name,
                                                       url=url,
                                                       disabled=disabled)

            if copy:
                copy_plugins_menu = language_menu.get_or_create_menu(
                    '{0}-copy'.format(LANGUAGE_MENU_IDENTIFIER),
                    _('Copy all plugins'))
                title = _('from %s')
                question = _(
                    'Are you sure you want to copy all plugins from %s?')

                try:
                    copy_url = admin_reverse('cms_placeholder_copy_plugins')
                except NoReverseMatch:
                    copy_url = admin_reverse(
                        'djangocms_alias_alias_copy_plugins')

                for code, name in copy:
                    source_placeholder = alias_content.alias.get_placeholder(
                        language=code,
                        show_draft_content=True,
                    )
                    copy_plugins_menu.add_ajax_item(
                        title % name,
                        action=copy_url,
                        data={
                            'source_language': code,
                            'source_placeholder_id': source_placeholder.pk,
                            'target_language': self.current_lang,
                            'target_placeholder_id': current_placeholder.pk,
                        },
                        question=question % name,
                        on_success=self.toolbar.REFRESH_PAGE)
Example #7
0
    def populate(self):
        self.page = get_page_draft(self.request.current_page)
        user = getattr(self.request, 'user', None)
        try:
            view_name = self.request.resolver_match.view_name
        except AttributeError:
            view_name = None

        if user and view_name:
            obj = None
            language = get_language_from_request(self.request, check_path=True)
            group = person = None
            if view_name == '%s:group-detail' % DEFAULT_APP_NAMESPACE:
                if ALDRYN_PEOPLE_HIDE_GROUPS == 0:
                    group = get_obj_from_request(Group, self.request)
            elif view_name in [
                    '%s:person-detail' % DEFAULT_APP_NAMESPACE,
                    '%s:download_vcard' % DEFAULT_APP_NAMESPACE
            ]:
                obj = get_obj_from_request(Person, self.request)
                if obj and obj.groups:
                    group = obj.primary_group
            elif view_name == '%s:group-list' % DEFAULT_APP_NAMESPACE:
                pass
            else:
                # We don't appear to be on any aldryn_people views so this
                # menu shouldn't even be here.
                return

            menu = self.toolbar.get_or_create_menu('people-app', "People")

            change_group_perm = user.has_perm('aldryn_people.change_group')
            add_group_perm = user.has_perm('aldryn_people.add_group')
            group_perms = [change_group_perm, add_group_perm]

            change_person_perm = user.has_perm('aldryn_people.change_person')
            add_person_perm = user.has_perm('aldryn_people.add_person')
            person_perms = [change_person_perm, add_person_perm]

            if ALDRYN_PEOPLE_HIDE_GROUPS == 0:
                if change_group_perm:
                    url = admin_reverse('aldryn_people_group_changelist')
                    menu.add_sideframe_item(_('Group list'), url=url)

                if add_group_perm:
                    url_args = {}
                    if language:
                        url_args.update({"language": language})
                    url = get_admin_url('aldryn_people_group_add', **url_args)
                    menu.add_modal_item(_('Add new group'), url=url)

                if change_group_perm and group:
                    url = get_admin_url('aldryn_people_group_change', [
                        group.pk,
                    ])
                    menu.add_modal_item(_('Edit group'), url=url, active=True)

                if any(group_perms) and any(person_perms):
                    menu.add_break()

            if change_person_perm:
                url = admin_reverse('aldryn_people_person_changelist')
                menu.add_sideframe_item(_('Person list'), url=url)

            if add_person_perm:
                url_args = {}
                if group:
                    url_args['groups'] = group.pk
                if language:
                    url_args['language'] = language
                url = get_admin_url('aldryn_people_person_add', **url_args)
                menu.add_modal_item(_('Add new person'), url=url)

            if change_person_perm and obj:
                url = admin_reverse('aldryn_people_person_change',
                                    args=(obj.pk, ))
                menu.add_modal_item(_('Edit person'), url=url, active=True)

            if settings.USE_I18N:  # and not self._language_menu:
                if obj:
                    self._language_menu = self.toolbar.get_or_create_menu(
                        LANGUAGE_MENU_IDENTIFIER, _('Language'), position=-1)
                    self._language_menu.items = []
                    languages = get_language_dict(self.current_site.pk)
                    page_languages = self.page.get_languages()
                    remove = []

                    for code, name in get_language_tuple():
                        if code in obj.get_available_languages():
                            remove.append((code, name))
                            try:
                                url = obj.get_absolute_url(code)
                            except NoReverseMatch:
                                url = None
                            if url and code in page_languages:
                                self._language_menu.add_link_item(
                                    name,
                                    url=url,
                                    active=self.current_lang == code)

                    if self.toolbar.edit_mode_active:
                        add = [l for l in languages.items() if l not in remove]
                        copy = [
                            (code, name) for code, name in languages.items()
                            if code != self.current_lang and (code,
                                                              name) in remove
                        ]

                        if (add or len(remove) > 1
                                or copy) and change_person_perm:
                            self._language_menu.add_break(
                                ADD_OBJ_LANGUAGE_BREAK)

                            if add:
                                add_plugins_menu = self._language_menu.get_or_create_menu(
                                    '{0}-add-trans'.format(
                                        LANGUAGE_MENU_IDENTIFIER),
                                    _('Add Translation'))
                                for code, name in add:
                                    url_args = {}
                                    url = '%s?language=%s' % (get_admin_url(
                                        'aldryn_people_person_change',
                                        [obj.pk], **url_args), code)
                                    add_plugins_menu.add_modal_item(name,
                                                                    url=url)

                            if len(remove) > 1:
                                remove_plugins_menu = self._language_menu.get_or_create_menu(
                                    '{0}-del-trans'.format(
                                        LANGUAGE_MENU_IDENTIFIER),
                                    _('Delete Translation'))
                                for code, name in remove:
                                    url = get_admin_url(
                                        'aldryn_people_person_delete_translation',
                                        [obj.pk, code])
                                    remove_plugins_menu.add_modal_item(name,
                                                                       url=url)

                            if copy:
                                copy_plugins_menu = self._language_menu.get_or_create_menu(
                                    '{0}-copy-trans'.format(
                                        LANGUAGE_MENU_IDENTIFIER),
                                    _('Copy all plugins'))
                                title = _('from %s')
                                question = _(
                                    'Are you sure you want to copy all plugins from %s?'
                                )
                                url = get_admin_url(
                                    'aldryn_people_person_copy_language',
                                    [obj.pk])
                                for code, name in copy:
                                    copy_plugins_menu.add_ajax_item(
                                        title % name,
                                        action=url,
                                        data={
                                            'source_language': code,
                                            'target_language':
                                            self.current_lang
                                        },
                                        question=question % name,
                                        on_success=self.toolbar.REFRESH_PAGE)