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)
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)
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)
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)