def handle(self, *args, **options): if len(args) == 3: page_id, language, file_name = args reader = csv.DictReader(file_name) dict_list = list(reader) else: page_id, language = args reader = csv.DictReader(sys.stdin) dict_list = list(reader) a = [a for a in Page.objects.filter(id=page_id)] for b in a: print('Clearing Placeholders') for c in b.get_placeholders(): c.clear(language) print('Copying Plugins') api.copy_plugins_to_language(b, 'en', language) for c in b.get_placeholders(): for d in c.get_plugins(language): instance, t = d.get_plugin_instance() typename = type(t).__name__ position = instance.get_position_in_placeholder() translation = [a for a in dict_list if int(a['position']) == position and a['type'] == typename] if translation: translation = translation[0] translation['translated_id'] = instance.id if typename == "TextPlugin": instance.body = translation['translated'] elif typename == "CMSTitlePlugin": instance.title = translation['translated'] elif typename == "CMSLinkButtonPlugin": instance.name = translation['translated'] print('Translated', typename) instance.save()
def publish_in_all_languages(self, page): from cms.api import copy_plugins_to_language from cms.utils.i18n import get_public_languages languages = get_public_languages() for language in languages[1:]: copy_plugins_to_language(page, languages[0], language) for language in languages: page.publish(language)
def handle(self, *args, **kwargs): verbose = 'verbose' in args only_empty = 'force-copy' not in args site = [arg.split("=")[1] for arg in args if arg.startswith("site")] if site: site = site.pop() else: site = settings.SITE_ID #test both langs try: assert len(args) >= 2 from_lang = args[0] to_lang = args[1] assert from_lang != to_lang except AssertionError: raise CommandError( "Error: bad arguments -- Usage: manage.py cms copy-lang <lang_from> <lang_to>" ) try: assert from_lang in get_language_list(site) assert to_lang in get_language_list(site) except AssertionError: raise CommandError( "Both languages have to be present in settings.LANGUAGES and settings.CMS_LANGUAGES" ) for page in Page.objects.on_site(site).drafts(): # copy title if from_lang in page.get_languages(): try: title = page.get_title_obj(to_lang, fallback=False) except Title.DoesNotExist: title = page.get_title_obj(from_lang) if verbose: self.stdout.write( 'copying title %s from language %s\n' % (title.title, from_lang)) title.id = None title.language = to_lang title.save() # copy plugins using API if verbose: self.stdout.write( 'copying plugins for %s from %s\n' % (page.get_page_title(from_lang), from_lang)) copy_plugins_to_language(page, from_lang, to_lang, only_empty) else: if verbose: self.stdout.write( 'Skipping page %s, language %s not defined\n' % (page, from_lang)) self.stdout.write(u"all done")
def handle(self, *args, **options): verbose = options.get('verbosity') > 1 only_empty = options.get('only_empty') copy_content = options.get('copy_content') from_lang = options.get('from_lang') to_lang = options.get('to_lang') try: site = int(options.get('site', None)) except Exception: site = settings.SITE_ID try: assert from_lang in get_language_list(site) assert to_lang in get_language_list(site) except AssertionError: raise CommandError('Both languages have to be present in settings.LANGUAGES and settings.CMS_LANGUAGES') for page in Page.objects.on_site(site).drafts(): # copy title if from_lang in page.get_languages(): title = page.get_title_obj(to_lang, fallback=False) if isinstance(title, EmptyTitle): title = page.get_title_obj(from_lang) if verbose: self.stdout.write('copying title %s from language %s\n' % (title.title, from_lang)) title.id = None title.publisher_public_id = None title.publisher_state = 0 title.language = to_lang title.save() if copy_content: # copy plugins using API if verbose: self.stdout.write('copying plugins for %s from %s\n' % (page.get_page_title(from_lang), from_lang)) copy_plugins_to_language(page, from_lang, to_lang, only_empty) else: if verbose: self.stdout.write('Skipping page %s, language %s not defined\n' % (page.get_page_title(page.get_languages()[0]), from_lang)) if copy_content: for static_placeholder in StaticPlaceholder.objects.all(): plugin_list = [] for plugin in static_placeholder.draft.get_plugins(): if plugin.language == from_lang: plugin_list.append(plugin) if plugin_list: if verbose: self.stdout.write( 'copying plugins from static_placeholder "%s" in "%s" to "%s"\n' % ( static_placeholder.name, from_lang, to_lang) ) copy_plugins_to(plugin_list, static_placeholder.draft, to_lang) self.stdout.write('all done')
def publish_in_all_languages(cls, page): from cms.api import copy_plugins_to_language, create_title from cms.utils.i18n import get_public_languages languages = get_public_languages() for language in languages[1:]: create_title(language, page.get_title(), page, menu_title=None) copy_plugins_to_language(page, languages[0], language) for language in languages: page.publish(language)
def handle(self, *args, **options): if len(args) == 3: page_id, language, file_name = args with open(file_name, 'r') as f: html = StringIO(f.read().decode('utf-8').encode('ascii', 'xmlcharrefreplace')) else: page_id, language = args html = StringIO(sys.stdin.read().decode('utf-8').encode('ascii', 'xmlcharrefreplace')) parser = etree.HTMLParser() tree = etree.parse(html, parser) selector = CSSSelector('div[data-id]') content = selector(tree.getroot()) dict_list = [ ] for div in content: plugin_dict = {} plugin_dict['id'] = div.attrib['data-id'] plugin_dict['type'] = div.attrib['data-type'] plugin_dict['parent'] = div.attrib['data-parent'] plugin_dict['position'] = div.attrib['data-position'] plugin_dict['translated'] = (div.text or '') + ''.join([ etree.tostring(a, pretty_print=True, method="html") for a in div ]) dict_list.append(plugin_dict) a = [a for a in Page.objects.filter(id=page_id)] for b in a: print('Clearing Placeholders') for c in b.get_placeholders(): c.clear(language) print('Copying Plugins') api.copy_plugins_to_language(b, 'en', language) for c in b.get_placeholders(): for d in c.get_plugins(language): instance, t = d.get_plugin_instance() typename = type(t).__name__ position = instance.get_position_in_placeholder() translation = [a for a in dict_list if int(a['position']) == position and a['type'] == typename] if translation: translation = translation[0] translation['translated_id'] = instance.id if typename == "TextPlugin": instance.body = translation['translated'] elif typename == "CMSTitlePlugin": instance.title = translation['translated'] elif typename == "CMSLinkButtonPlugin": instance.name = translation['translated'] print('Translated', typename) instance.save()
def handle(self, *args, **kwargs): verbose = 'verbose' in args only_empty = 'force-copy' not in args site = [arg.split("=")[1] for arg in args if arg.startswith("site")] if site: site = site.pop() else: site = settings.SITE_ID #test both langs try: assert len(args) >= 2 from_lang = args[0] to_lang = args[1] assert from_lang != to_lang except AssertionError: raise CommandError("Error: bad arguments -- Usage: manage.py cms copy-lang <lang_from> <lang_to>") try: assert from_lang in get_language_list(site) assert to_lang in get_language_list(site) except AssertionError: raise CommandError("Both languages have to be present in settings.LANGUAGES and settings.CMS_LANGUAGES") for page in Page.objects.on_site(site).drafts(): # copy title if from_lang in page.get_languages(): try: title = page.get_title_obj(to_lang, fallback=False) except Title.DoesNotExist: title = page.get_title_obj(from_lang) if verbose: self.stdout.write('copying title %s from language %s\n' % (title.title, from_lang)) title.id = None title.language = to_lang title.save() # copy plugins using API if verbose: self.stdout.write('copying plugins for %s from %s\n' % (page.get_page_title(from_lang), from_lang)) copy_plugins_to_language(page, from_lang, to_lang, only_empty) else: if verbose: self.stdout.write('Skipping page %s, language %s not defined\n' % (page, from_lang)) self.stdout.write(u"all done")
def handle(self, *args, **options): if len(args) == 3: page_id, language, file_name = args reader = csv.DictReader(file_name) dict_list = list(reader) else: page_id, language = args reader = csv.DictReader(sys.stdin) dict_list = list(reader) a = [a for a in Page.objects.filter(id=page_id)] for b in a: print('Clearing Placeholders') for c in b.get_placeholders(): c.clear(language) print('Copying Plugins') api.copy_plugins_to_language(b, 'en', language) for c in b.get_placeholders(): for d in c.get_plugins(language): instance, t = d.get_plugin_instance() typename = type(t).__name__ position = instance.get_position_in_placeholder() translation = [ a for a in dict_list if int(a['position']) == position and a['type'] == typename ] if translation: translation = translation[0] translation['translated_id'] = instance.id if typename == "TextPlugin": instance.body = translation['translated'] elif typename == "CMSTitlePlugin": instance.title = translation['translated'] elif typename == "CMSLinkButtonPlugin": instance.name = translation['translated'] print('Translated', typename) instance.save()
def copy_pages(from_lang, to_lang, pages): site = settings.SITE_ID #test both langs if from_lang == to_lang: raise Exception("from_lang must be different from to_lang!") try: assert from_lang in get_language_list(site) assert to_lang in get_language_list(site) except AssertionError: raise Exception("Could not languages from site") for page in pages.all(): # copy title if from_lang in page.get_languages(): try: title = page.get_title_obj(to_lang, fallback=False) except Title.DoesNotExist: title = page.get_title_obj(from_lang) title.id = None title.publisher_public_id = None title.publisher_state = 0 title.language = to_lang title.save() # copy plugins using API copy_plugins_to_language(page, from_lang, to_lang) for static_placeholder in StaticPlaceholder.objects.all(): plugin_list = [] for plugin in static_placeholder.draft.get_plugins(): if plugin.language == from_lang: plugin_list.append(plugin) if plugin_list: copy_plugins_to(plugin_list, static_placeholder.draft, to_lang)
def handle(self, *args, **options): verbose = options.get('verbosity') > 1 only_empty = options.get('only_empty') copy_content = options.get('copy_content') from_lang = options.get('from_lang') to_lang = options.get('to_lang') try: site = int(options.get('site', None)) except Exception: site = settings.SITE_ID try: assert from_lang in get_language_list(site) assert to_lang in get_language_list(site) except AssertionError: raise CommandError( 'Both languages have to be present in settings.LANGUAGES and settings.CMS_LANGUAGES' ) for page in Page.objects.on_site(site).drafts(): # copy title if from_lang in page.get_languages(): title = page.get_title_obj(to_lang, fallback=False) if isinstance(title, EmptyTitle): title = page.get_title_obj(from_lang) if verbose: self.stdout.write( 'copying title %s from language %s\n' % (title.title, from_lang)) title.id = None title.publisher_public_id = None title.publisher_state = 0 title.language = to_lang title.save() if copy_content: # copy plugins using API if verbose: self.stdout.write( 'copying plugins for %s from %s\n' % (page.get_page_title(from_lang), from_lang)) copy_plugins_to_language(page, from_lang, to_lang, only_empty) else: if verbose: self.stdout.write( 'Skipping page %s, language %s not defined\n' % (page.get_page_title( page.get_languages()[0]), from_lang)) if copy_content: for static_placeholder in StaticPlaceholder.objects.all(): plugin_list = [] for plugin in static_placeholder.draft.get_plugins(): if plugin.language == from_lang: plugin_list.append(plugin) if plugin_list: if verbose: self.stdout.write( 'copying plugins from static_placeholder "%s" in "%s" to "%s"\n' % (static_placeholder.name, from_lang, to_lang)) copy_plugins_to(plugin_list, static_placeholder.draft, to_lang) self.stdout.write('all done')
def handle(self, *args, **kwargs): verbose = 'verbose' in args only_empty = 'force-copy' not in args site = [arg.split("=")[1] for arg in args if arg.startswith("site")] if site: site = site.pop() else: site = settings.SITE_ID #test both langs try: assert len(args) >= 2 from_lang = args[0] to_lang = args[1] assert from_lang != to_lang except AssertionError: raise CommandError("Error: bad arguments -- Usage: manage.py cms copy-lang <lang_from> <lang_to>") try: assert from_lang in get_language_list(site) assert to_lang in get_language_list(site) except AssertionError: raise CommandError("Both languages have to be present in settings.LANGUAGES and settings.CMS_LANGUAGES") for page in Page.objects.on_site(site).drafts(): # copy title if from_lang in page.get_languages(): title = page.get_title_obj(to_lang, fallback=False) if isinstance(title, EmptyTitle): title = page.get_title_obj(from_lang) if verbose: self.stdout.write('copying title %s from language %s\n' % (title.title, from_lang)) title.id = None title.publisher_public_id = None title.publisher_state = 0 title.language = to_lang title.save() # copy plugins using API if verbose: self.stdout.write('copying plugins for %s from %s\n' % (page.get_page_title(from_lang), from_lang)) copy_plugins_to_language(page, from_lang, to_lang, only_empty) else: if verbose: self.stdout.write('Skipping page %s, language %s not defined\n' % (page, from_lang)) for static_placeholder in StaticPlaceholder.objects.all(): plugin_list = [] for plugin in static_placeholder.draft.get_plugins(): if plugin.language == from_lang: plugin_list.append(plugin) if plugin_list: if verbose: self.stdout.write("copying plugins from static_placeholder '%s' in '%s' to '%s'\n" % (static_placeholder.name, from_lang, to_lang)) copy_plugins_to(plugin_list, static_placeholder.draft, to_lang) self.stdout.write(u"all done")