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()
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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")
Exemplo n.º 4
0
    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')
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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()
Exemplo n.º 7
0
    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()
Exemplo n.º 9
0
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')
Exemplo n.º 11
0
    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")