diff --git a/.checkignore b/.checkignore new file mode 100644 index 0000000..8005a6e --- /dev/null +++ b/.checkignore @@ -0,0 +1,4 @@ +tests/* +docs/* +djangocms_blog/south_migrations/* +djangocms_blog/migrations/* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..eb0dc25 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,5 @@ +# This file is generated by GitLab CI +ci: + script: + - COMMAND="coverage run" tox -epep8,isort,py35-django19-cms32,py34-django18-cms31,py27-django16-cms30 + - if [[ $? -eq 0 ]]; then coverage report; fi diff --git a/.travis.yml b/.travis.yml index 44158b3..25b70f6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,7 @@ env: matrix: - TOXENV='pep8' - TOXENV='isort' + - DJANGO='django19' CMS='cms32' - DJANGO='django18' CMS='cms32' - DJANGO='django18' CMS='cms31' - DJANGO='django17' CMS='cms32' @@ -27,7 +28,6 @@ env: # command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors install: - - pip install -U tox>=1.8 coveralls - "if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then export PYVER=py26; fi" - "if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then export PYVER=py27; fi" - "if [[ $TRAVIS_PYTHON_VERSION == '3.3' ]]; then export PYVER=py33; fi" @@ -39,7 +39,7 @@ install: script: COMMAND='coverage run' tox -e$TOXENV before_install: - - pip install codecov + - pip install -U tox>=1.8 coveralls codecov wheel pip after_success: - codecov - coveralls @@ -72,6 +72,10 @@ matrix: env: DJANGO='django18' CMS='cms31' - python: 2.6 env: DJANGO='django18' CMS='cms32' + - python: 2.6 + env: DJANGO='django19' CMS='cms32' + - python: 3.3 + env: DJANGO='django19' CMS='cms32' - python: 3.5 env: DJANGO='django16' CMS='cms30' - python: 3.5 @@ -85,26 +89,10 @@ matrix: - python: 3.5 env: DJANGO='django17' CMS='cms32' - allow_failures: - - python: 2.6 - env: DJANGO='django16' CMS='cms32' - - python: 2.7 - env: DJANGO='django16' CMS='cms32' - - python: 2.7 - env: DJANGO='django17' CMS='cms32' - - python: 2.7 - env: DJANGO='django18' CMS='cms32' - - python: 3.3 - env: DJANGO='django16' CMS='cms32' - - python: 3.3 - env: DJANGO='django17' CMS='cms32' - - python: 3.3 - env: DJANGO='django18' CMS='cms32' - - python: 3.4 - env: DJANGO='django16' CMS='cms32' - - python: 3.4 - env: DJANGO='django17' CMS='cms32' - - python: 3.4 - env: DJANGO='django18' CMS='cms32' - - python: 3.5 - env: DJANGO='django18' CMS='cms32' + +cache: + directories: + - $HOME/.pip-accel + - $HOME/.cache/pip + + diff --git a/AUTHORS.rst b/AUTHORS.rst index 1496f47..9133313 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -25,3 +25,4 @@ Contributors * Stefan Wehrmeyer * Sylvain Fankhauser * Tadas Dailyda +* Olivier Tabone diff --git a/HISTORY.rst b/HISTORY.rst index 4203381..61780a4 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -3,11 +3,27 @@ History ------- -0.6.3 (XXXX-XX-XX) +0.7.0 (unreleased) ++++++++++++++++++ +* Make categories non required +* Fix tests with parler>=1.6 +* Use all_languages_column to admin +* Add publish button +* Fix issues in migrations. Thanks @skirsdeda +* Fix selecting current menu item according to menu layout +* Fix some issues with haystack indexes +* Add support for moved ThumbnailOption +* Fix Django 1.9 issues +* Fix copy relations method in plugins + +0.6.3 (2015-12-22) +++++++++++++++++++ + +* Add BLOG_ADMIN_POST_FIELDSET_FILTER to filter admin fieldsets * Ensure correct creation of full URL for canonical urls * Move constants to settings +* Fix error when no config is found 0.6.2 (2015-11-16) ++++++++++++++++++ diff --git a/README.rst b/README.rst index 72e5f69..76cfb03 100644 --- a/README.rst +++ b/README.rst @@ -30,7 +30,7 @@ djangocms-blog :target: https://codeclimate.com/github/nephila/djangocms-blog :alt: Code Climate -A djangoCMS 3 blog application. +django CMS blog application - Support for multilingual posts, placeholders, social network meta tags and configurable apphooks. Supported Django versions: @@ -47,6 +47,11 @@ Supported django CMS versions: A datamigration is in place to migrate the data, but check that works ok for your project before upgrading, as this might delete some relevant data. + Some plugins have a broken tag management prior to 0.6, in case + you have issues with tags, upgrade to latest version to have it fixed. + +.. warning:: When upgrading to version 0.6, check that every post as an attached + category, or select a menu without categories. .. warning:: Starting from version 0.5, this package does not declare dependency on South anymore; please install it separately if using this @@ -88,6 +93,7 @@ Add ``djangocms_blog`` and its dependencies to INSTALLED_APPS:: ... 'filer', 'easy_thumbnails', + 'aldryn_apphooks_config', 'cmsplugin_filer_image', 'parler', 'taggit', @@ -98,7 +104,7 @@ Add ``djangocms_blog`` and its dependencies to INSTALLED_APPS:: ... ] -If you installed the **admin-enhancer** variant, add ``admin_enhancer`` to ``INSTALLED_APPS:: +If you installed the **admin-enhancer** variant, add ``admin_enhancer`` to ``INSTALLED_APPS``:: INSTALLED_APPS = [ ... @@ -170,6 +176,9 @@ suited for your deployment. {'code': 'it',}, {'code': 'fr',}, ), + 'default': { + 'fallbacks': ['en', 'it', 'fr'], + } } * Add the following to your ``urls.py``:: @@ -181,12 +190,17 @@ suited for your deployment. `Auto setup `_: * Create a new django CMS page - * Go to Advanced settings and select Blog from the Application selector and - create an application configuration; + * Go to **Advanced settings** and select Blog from the **Application** selector and + create an **Application configuration**; * Eventually customise the Application instance name; * Publish the page * Restart the project instance to properly load blog urls. +.. warning:: After adding the apphook to the page you **cannot** change the **Instance Namspace** + field for the defined **AppHokConfig**; if you want to change it, create a new one + with the correct namespace, go in the CMS page **Advanced settings** and switch to the + new **Application configuration** + * Add and edit blog by creating them in the admin or using the toolbar, and the use the `django CMS frontend editor `_ to edit the blog content: @@ -226,11 +240,14 @@ Menu ``djangocms_blog`` provides support for django CMS menu framework. -By default all the categories and posts are added to the menu, in a hierarcical structure. +By default all the categories and posts are added to the menu, in a hierarchical structure. Is it possibile to configure per Apphook, whether the menu includes post and categories (the default), only categorie, only posts or no item. +If "post and categories" or "only categories" are set, all the posts not associated with a +category are not added to the menu. + Templates +++++++++ @@ -363,6 +380,16 @@ Global Settings used; (default: ``True``) * BLOG_DEFAULT_PUBLISHED: If posts are marked as published by default; (default: ``False``) +* BLOG_ADMIN_POST_FIELDSET_FILTER: Callable function to change(add or filter) + fields to fieldsets for admin post edit form; (default: ``False``). Function simple example:: + + + def fieldset_filter_function(fsets, request, obj=None): + if request.user.groups.filter(name='Editor').exists(): + fsets[1][1]['fields'][0].append('author') # adding 'author' field if user is Editor + return fsets + + * BLOG_AVAILABLE_PERMALINK_STYLES: Choices of permalinks styles; * BLOG_PERMALINK_URLS: URLConf corresponding to BLOG_AVAILABLE_PERMALINK_STYLES; diff --git a/cms_helper.py b/cms_helper.py index 0a95a18..f2f14eb 100755 --- a/cms_helper.py +++ b/cms_helper.py @@ -4,7 +4,8 @@ from __future__ import absolute_import, print_function, unicode_literals from tempfile import mkdtemp -gettext = lambda s: s + +def gettext(s): return s HELPER_SETTINGS = dict( ROOT_URLCONF='tests.test_utils.urls', @@ -68,7 +69,7 @@ HELPER_SETTINGS = dict( {'code': 'en'}, ), 'default': { - 'fallback': 'en', + 'fallbacks': ['en'], 'hide_untranslated': False, } }, @@ -91,7 +92,7 @@ HELPER_SETTINGS = dict( ), FILE_UPLOAD_TEMP_DIR=mkdtemp(), SITE_ID=1, - HAYSTACK_CONNECTIONS = { + HAYSTACK_CONNECTIONS={ "default": {} } ) diff --git a/djangocms_blog/__init__.py b/djangocms_blog/__init__.py index dee86ff..fe8a85e 100644 --- a/djangocms_blog/__init__.py +++ b/djangocms_blog/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- __author__ = 'Iacopo Spalletti' __email__ = 'i.spalletti@nephila.it' -__version__ = '0.6.2.post1' +__version__ = '0.7.0.b1' default_app_config = 'djangocms_blog.apps.BlogAppConfig' diff --git a/djangocms_blog/admin.py b/djangocms_blog/admin.py index f90ea87..412f6f1 100755 --- a/djangocms_blog/admin.py +++ b/djangocms_blog/admin.py @@ -7,9 +7,12 @@ from aldryn_apphooks_config.admin import BaseAppHookConfig, ModelAppHookConfig from cms.admin.placeholderadmin import FrontendEditableAdminMixin, PlaceholderAdminMixin from django import forms from django.conf import settings +from django.conf.urls import url from django.contrib import admin -from django.contrib.auth import get_user_model -from django.utils.translation import ugettext_lazy as _ +from django.core.urlresolvers import reverse +from django.http import HttpResponseRedirect +from django.utils.six import callable +from django.utils.translation import get_language_from_request, ugettext_lazy as _ from parler.admin import TranslatableAdmin from .cms_appconfig import BlogConfig @@ -25,6 +28,7 @@ except ImportError: class BlogCategoryAdmin(EnhancedModelAdminMixin, ModelAppHookConfig, TranslatableAdmin): + def get_prepopulated_fields(self, request, obj=None): app_config_default = self._app_config_select(request, obj) if app_config_default is None and request.method == 'GET': @@ -41,7 +45,8 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin, ModelAppHookConfig, TranslatableAdmin): form = PostAdminForm list_display = [ - 'title', 'author', 'date_published', 'app_config', 'languages', 'date_published_end' + 'title', 'author', 'date_published', 'app_config', 'all_languages_column', + 'date_published_end' ] list_filter = ('app_config',) date_hierarchy = 'date_published' @@ -71,8 +76,35 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin, 'default_published': 'publish' } - def languages(self, obj): - return ','.join(obj.get_available_languages()) + def get_urls(self): + """ + Customize the modeladmin urls + """ + urls = [ + url(r'^publish/([0-9]+)/$', self.admin_site.admin_view(self.publish_post), + name='djangocms_blog_publish_article'), + ] + urls.extend(super(PostAdmin, self).get_urls()) + return urls + + def publish_post(self, request, pk): + """ + Admin view to publish a single post + :param request: request + :param pk: primary key of the post to publish + :return: Redirect to the post itself (if found) or fallback urls + """ + language = get_language_from_request(request, check_path=True) + try: + post = Post.objects.get(pk=int(pk)) + post.publish = True + post.save() + return HttpResponseRedirect(post.get_absolute_url(language)) + except Exception: + try: + return HttpResponseRedirect(request.META['HTTP_REFERER']) + except KeyError: + return HttpResponseRedirect(reverse('djangocms_blog:posts-latest')) def formfield_for_dbfield(self, db_field, **kwargs): field = super(PostAdmin, self).formfield_for_dbfield(db_field, **kwargs) @@ -85,6 +117,12 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin, return field def get_fieldsets(self, request, obj=None): + """ + Customize the fieldsets according to the app settings + :param request: request + :param obj: post + :return: fieldsets configuration + """ app_config_default = self._app_config_select(request, obj) if app_config_default is None and request.method == 'GET': return super(PostAdmin, self).get_fieldsets(request, obj) @@ -108,18 +146,16 @@ class PostAdmin(PlaceholderAdminMixin, FrontendEditableAdminMixin, fsets[1][1]['fields'][0].append('sites') if request.user.is_superuser: fsets[1][1]['fields'][0].append('author') + filter_function = get_setting('ADMIN_POST_FIELDSET_FILTER') + if callable(filter_function): + fsets = filter_function(fsets, request, obj=obj) return fsets def get_prepopulated_fields(self, request, obj=None): return {'slug': ('title',)} def save_model(self, request, obj, form, change): - if not obj.author_id and obj.app_config.set_author: - if get_setting('AUTHOR_DEFAULT') is True: - user = request.user - else: - user = get_user_model().objects.get(username=get_setting('AUTHOR_DEFAULT')) - obj.author = user + obj._set_default_author(request.user) super(PostAdmin, self).save_model(request, obj, form, change) class Media: @@ -132,6 +168,12 @@ class BlogConfigAdmin(BaseAppHookConfig, TranslatableAdmin): @property def declared_fieldsets(self): + return self.get_fieldsets(None) + + def get_fieldsets(self, request, obj=None): + """ + Fieldsets configuration + """ return [ (None, { 'fields': ('type', 'namespace', 'app_title', 'object_name') diff --git a/djangocms_blog/cms_appconfig.py b/djangocms_blog/cms_appconfig.py index 996a8bd..3260d71 100644 --- a/djangocms_blog/cms_appconfig.py +++ b/djangocms_blog/cms_appconfig.py @@ -23,6 +23,10 @@ class BlogConfig(TranslatableModel, AppHookConfig): ), ) + class Meta: + verbose_name = _('blog config') + verbose_name_plural = _('blog configs') + def get_app_title(self): return getattr(self, 'app_title', _('untitled')) diff --git a/djangocms_blog/cms_toolbar.py b/djangocms_blog/cms_toolbar.py index b5d5d85..7dfd2cc 100644 --- a/djangocms_blog/cms_toolbar.py +++ b/djangocms_blog/cms_toolbar.py @@ -3,6 +3,7 @@ from __future__ import absolute_import, print_function, unicode_literals from cms.toolbar_base import CMSToolbar from cms.toolbar_pool import toolbar_pool +from cms.utils.urlutils import admin_reverse from django.core.urlresolvers import reverse from django.utils.translation import override, ugettext_lazy as _ @@ -33,6 +34,22 @@ class BlogToolbar(CMSToolbar): 'admin:djangocms_blog_post_change', args=(current_post.pk,)), active=True) + def add_publish_button(self): + """ + Adds the publish button to the toolbar if the current post is unpublished + """ + current_post = getattr(self.request, get_setting('CURRENT_POST_IDENTIFIER'), None) + if (self.toolbar.edit_mode and current_post and + not current_post.publish and + self.request.user.has_perm('djangocms_blog.change_post') + ): # pragma: no cover # NOQA + classes = ['cms-btn-action', 'blog-publish'] + title = _('Publish {0} now').format(current_post.app_config.object_name) + + url = admin_reverse('djangocms_blog_publish_article', args=(current_post.pk,)) + + self.toolbar.add_button(title, url=url, extra_classes=classes, side=self.toolbar.RIGHT) + def post_template_populate(self): current_post = getattr(self.request, get_setting('CURRENT_POST_IDENTIFIER'), None) if current_post and self.request.user.has_perm('djangocms_blog.change_post'): # pragma: no cover # NOQA @@ -52,3 +69,4 @@ class BlogToolbar(CMSToolbar): menu.remove_item(pagetags) except ImportError: pass + self.add_publish_button() diff --git a/djangocms_blog/cms_wizards.py b/djangocms_blog/cms_wizards.py index d308278..1b09965 100644 --- a/djangocms_blog/cms_wizards.py +++ b/djangocms_blog/cms_wizards.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals +from cms.utils.permissions import get_current_user + try: from cms.wizards.wizard_base import Wizard from cms.wizards.wizard_pool import wizard_pool @@ -35,6 +37,10 @@ try: class Media: js = ('admin/js/jquery.js', 'admin/js/jquery.init.js',) + def save(self, commit=True): + self.instance._set_default_author(get_current_user()) + return super(PostWizardForm, self).save(commit) + class PostWizard(Wizard): pass diff --git a/djangocms_blog/locale/ar/LC_MESSAGES/django.mo b/djangocms_blog/locale/ar/LC_MESSAGES/django.mo index ff9da4c..5fe4051 100644 Binary files a/djangocms_blog/locale/ar/LC_MESSAGES/django.mo and b/djangocms_blog/locale/ar/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/ar/LC_MESSAGES/django.po b/djangocms_blog/locale/ar/LC_MESSAGES/django.po index d20ca59..0f88469 100644 --- a/djangocms_blog/locale/ar/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/ar/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" -"PO-Revision-Date: 2015-10-31 12:23+0000\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:15+0000\n" "Last-Translator: yakky \n" "Language-Team: Arabic (http://www.transifex.com/nephila/djangocms-blog/language/ar/)\n" "MIME-Version: 1.0\n" @@ -26,8 +26,7 @@ msgstr "" msgid "django CMS Blog" msgstr "" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "المدونة" @@ -40,155 +39,144 @@ msgid "object name" msgstr "" #: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "" + +#: cms_appconfig.py:31 msgid "untitled" msgstr "" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" msgstr "" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" msgstr "" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" msgstr "" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" msgstr "" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 msgid "Facebook author" msgstr "" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "آخر مواضيع المدونة" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "ناشر مواضيع المدونة" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "علامات" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "الأقسام" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "الأرشيف" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "قائمة المواضيع" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "إضافة موضوع" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" msgstr "" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "التعديل على موضوع" @@ -223,7 +211,7 @@ msgstr "" msgid "modified at" msgstr "" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" msgstr "" @@ -333,52 +321,52 @@ msgstr "" msgid "blog articles" msgstr "" -#: models.py:293 -msgid "generic blog plugin" -msgstr "" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 msgid "articles" msgstr "" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "" -#: models.py:300 +#: models.py:297 msgid "filter by tag" msgstr "" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "" -#: models.py:304 +#: models.py:301 msgid "filter by category" msgstr "" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "" -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" msgstr "" -#: models.py:326 +#: models.py:324 msgid "authors" msgstr "" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "" -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" msgstr "" +#: models.py:362 +msgid "generic blog plugin" +msgstr "" + #: settings.py:16 msgid "Full date" msgstr "" @@ -439,6 +427,27 @@ msgstr "" msgid "never" msgstr "" +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "آخر مواضيع المدونة" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "ناشر مواضيع المدونة" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "علامات" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "الأقسام" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "الأرشيف" + #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" msgstr "" diff --git a/djangocms_blog/locale/de/LC_MESSAGES/django.mo b/djangocms_blog/locale/de/LC_MESSAGES/django.mo index c1e7519..b19d3ac 100644 Binary files a/djangocms_blog/locale/de/LC_MESSAGES/django.mo and b/djangocms_blog/locale/de/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/de/LC_MESSAGES/django.po b/djangocms_blog/locale/de/LC_MESSAGES/django.po index 33fc995..a2439fe 100644 --- a/djangocms_blog/locale/de/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/de/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" -"PO-Revision-Date: 2015-10-31 12:23+0000\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:15+0000\n" "Last-Translator: yakky \n" "Language-Team: German (http://www.transifex.com/nephila/djangocms-blog/language/de/)\n" "MIME-Version: 1.0\n" @@ -26,8 +26,7 @@ msgstr "" msgid "django CMS Blog" msgstr "" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "Blog" @@ -40,155 +39,144 @@ msgid "object name" msgstr "" #: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "" + +#: cms_appconfig.py:31 msgid "untitled" msgstr "" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" msgstr "" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" msgstr "" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" msgstr "" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" msgstr "" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 msgid "Facebook author" msgstr "" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "Letzte Blog-Einträge" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "Autoren Blog-Artikel" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "Tags" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "Kategorien" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "Archiv" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "Post Liste" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "Post hinzufügen" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" msgstr "" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "Post bearbeiten" @@ -223,7 +211,7 @@ msgstr "erstellt am" msgid "modified at" msgstr "bearbeitet am" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" msgstr "" @@ -333,52 +321,52 @@ msgstr "Blog-Artikel" msgid "blog articles" msgstr "Blog-Artikel" -#: models.py:293 -msgid "generic blog plugin" -msgstr "" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 msgid "articles" msgstr "" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "Anzahl der anzuzeigenden letzten Artikel" -#: models.py:300 +#: models.py:297 msgid "filter by tag" msgstr "" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "Nur die Blog-Einträge mit dem ausgewählten Tag anzeigen" -#: models.py:304 +#: models.py:301 msgid "filter by category" msgstr "" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "Nur die Blog-Einträge der ausgewählten Kategorie anzeigen" -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" msgstr "" -#: models.py:326 +#: models.py:324 msgid "authors" msgstr "" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "Die Anzahl der anzuzeigenden Autoren-Artikel" -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" msgstr "" +#: models.py:362 +msgid "generic blog plugin" +msgstr "" + #: settings.py:16 msgid "Full date" msgstr "" @@ -439,6 +427,27 @@ msgstr "" msgid "never" msgstr "" +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "Letzte Blog-Einträge" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "Autoren Blog-Artikel" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "Tags" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "Kategorien" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "Archiv" + #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" msgstr "weiterlesen" diff --git a/djangocms_blog/locale/en/LC_MESSAGES/django.mo b/djangocms_blog/locale/en/LC_MESSAGES/django.mo index 088464b..032c5f2 100644 Binary files a/djangocms_blog/locale/en/LC_MESSAGES/django.mo and b/djangocms_blog/locale/en/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/en/LC_MESSAGES/django.po b/djangocms_blog/locale/en/LC_MESSAGES/django.po index 4d513a4..148842f 100644 --- a/djangocms_blog/locale/en/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/en/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" "PO-Revision-Date: 2014-03-05 18:09+0100\n" "Last-Translator: Iacopo Spalletti\n" "Language-Team: Italian \n" @@ -25,8 +25,7 @@ msgstr "" msgid "django CMS Blog" msgstr "" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "Blog" @@ -40,157 +39,148 @@ msgstr "" #: cms_appconfig.py:27 #, fuzzy +#| msgid "blog categories" +msgid "blog config" +msgstr "blog categories" + +#: cms_appconfig.py:28 +#, fuzzy +#| msgid "blog categories" +msgid "blog configs" +msgstr "blog categories" + +#: cms_appconfig.py:31 +#, fuzzy msgid "untitled" msgstr "Title" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 #, fuzzy msgid "Set author" msgstr "Author" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" msgstr "" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" msgstr "" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" msgstr "" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" msgstr "" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 #, fuzzy msgid "Facebook author" msgstr "Author" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "Latest Blog Articles" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "Author Blog Articles" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "Tags" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "Categories" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "Archive" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "Post list" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "Add post" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" msgstr "" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "" @@ -226,7 +216,7 @@ msgstr "created at" msgid "modified at" msgstr "modified at" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" msgstr "" @@ -349,55 +339,55 @@ msgstr "blog article" msgid "blog articles" msgstr "blog articles" -#: models.py:293 -msgid "generic blog plugin" -msgstr "" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 #, fuzzy msgid "articles" msgstr "0 articles" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "The number of latests articles to be displayed." -#: models.py:300 +#: models.py:297 msgid "filter by tag" msgstr "" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "Show only the blog articles tagged with chosen tags." -#: models.py:304 +#: models.py:301 #, fuzzy msgid "filter by category" msgstr "blog category" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "Show only the blog articles tagged with chosen categories." -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" msgstr "" -#: models.py:326 +#: models.py:324 #, fuzzy msgid "authors" msgstr "Authors" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "The number of author articles to be displayed." -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" msgstr "" +#: models.py:362 +msgid "generic blog plugin" +msgstr "" + #: settings.py:16 msgid "Full date" msgstr "" @@ -462,6 +452,27 @@ msgstr "" msgid "never" msgstr "" +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "Latest Blog Articles" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "Author Blog Articles" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "Tags" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "Categories" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "Archive" + #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" msgstr "read more" diff --git a/djangocms_blog/locale/es/LC_MESSAGES/django.mo b/djangocms_blog/locale/es/LC_MESSAGES/django.mo index 96ec7ec..dc35261 100644 Binary files a/djangocms_blog/locale/es/LC_MESSAGES/django.mo and b/djangocms_blog/locale/es/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/es/LC_MESSAGES/django.po b/djangocms_blog/locale/es/LC_MESSAGES/django.po index d66697a..b31449b 100644 --- a/djangocms_blog/locale/es/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/es/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" -"PO-Revision-Date: 2015-10-31 12:23+0000\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:15+0000\n" "Last-Translator: yakky \n" "Language-Team: Spanish (http://www.transifex.com/nephila/djangocms-blog/language/es/)\n" "MIME-Version: 1.0\n" @@ -26,8 +26,7 @@ msgstr "" msgid "django CMS Blog" msgstr "" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "Blog" @@ -40,155 +39,144 @@ msgid "object name" msgstr "" #: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "" + +#: cms_appconfig.py:31 msgid "untitled" msgstr "" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" msgstr "" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" msgstr "" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" msgstr "" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" msgstr "" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 msgid "Facebook author" msgstr "" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "Últimos artículos del blog" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "Artículos del blog por author" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "Etiquetas" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "Categorías" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "Archivo" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "Lista de entradas" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "Añadir entradas" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" msgstr "" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "Editar entrada" @@ -223,7 +211,7 @@ msgstr "Creado en" msgid "modified at" msgstr "Actualizado en" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" msgstr "" @@ -333,52 +321,52 @@ msgstr "artículo del blog" msgid "blog articles" msgstr "artículos del blog" -#: models.py:293 -msgid "generic blog plugin" -msgstr "" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 msgid "articles" msgstr "" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "El número de últimos artículos a mostrar." -#: models.py:300 +#: models.py:297 msgid "filter by tag" msgstr "" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "Mostrar solo los artículos del blog etiquetados con las etiquetas elegidas." -#: models.py:304 +#: models.py:301 msgid "filter by category" msgstr "" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "Mostrar solo los artículos del blog etiquetados con las categorías elegidas." -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" msgstr "" -#: models.py:326 +#: models.py:324 msgid "authors" msgstr "" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "El número de autores de artículo a mostrar." -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" msgstr "" +#: models.py:362 +msgid "generic blog plugin" +msgstr "" + #: settings.py:16 msgid "Full date" msgstr "" @@ -439,6 +427,27 @@ msgstr "" msgid "never" msgstr "" +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "Últimos artículos del blog" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "Artículos del blog por author" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "Etiquetas" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "Categorías" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "Archivo" + #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" msgstr "leer más" diff --git a/djangocms_blog/locale/fr/LC_MESSAGES/django.mo b/djangocms_blog/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 0000000..8581c14 Binary files /dev/null and b/djangocms_blog/locale/fr/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/fr/LC_MESSAGES/django.po b/djangocms_blog/locale/fr/LC_MESSAGES/django.po new file mode 100644 index 0000000..d9e925d --- /dev/null +++ b/djangocms_blog/locale/fr/LC_MESSAGES/django.po @@ -0,0 +1,541 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Iacopo Spalletti, 2014. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2016-01-20 19:12+0100\n" +"Last-Translator: Olivier Tabone \n" +"Language-Team: FR <>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.7\n" + +#: admin.py:169 admin.py:177 admin.py:185 +msgid "You can provide plain strings, Post model attribute or method names" +msgstr "" +"Vous pouvez préciser des chaines de caractères, des attributs ou des " +"methodes du modèle Post" + +#: apps.py:15 +msgid "django CMS Blog" +msgstr "django CMS Blog" + +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 +msgid "Blog" +msgstr "Blog" + +#: cms_appconfig.py:20 +msgid "application title" +msgstr "TItre de l’application" + +#: cms_appconfig.py:22 +msgid "object name" +msgstr "Nom de l’objet" + +#: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "Catégorie du blog" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "Catégories du blog" + +#: cms_appconfig.py:31 +msgid "untitled" +msgstr "Titre" + +#: cms_appconfig.py:36 +msgid "Post published by default" +msgstr "Post publié par défaut" + +#: cms_appconfig.py:40 +msgid "Permalink structure" +msgstr "Structure permalien" + +#: cms_appconfig.py:45 +msgid "Use placeholder and plugins for article body" +msgstr "Utiliser une balise et des plugins pour le corps de l’article" + +#: cms_appconfig.py:49 +msgid "Use abstract field" +msgstr "Utiliser un champ abstrait" + +#: cms_appconfig.py:53 +msgid "Set author" +msgstr "Auteur" + +#: cms_appconfig.py:53 +msgid "Set author by default" +msgstr "Spécifier l’auteur par défaut" + +#: cms_appconfig.py:57 +msgid "Paginate size" +msgstr "Nombre d’article par page" + +#: cms_appconfig.py:58 +msgid "When paginating list views, how many articles per page?" +msgstr "" +"Lors de la pagination des listes, combien souhaitez vous afficher d’articles " +"par page ?" + +#: cms_appconfig.py:61 +msgid "Template prefix" +msgstr "Prefixe dans le template" + +#: cms_appconfig.py:62 +msgid "Alternative directory to load the blog templates from" +msgstr "Répertoire alternatif à partir du quel charger les templates du blog" + +#: cms_appconfig.py:65 +msgid "Menu structure" +msgstr "Structure du menu" + +#: cms_appconfig.py:67 +msgid "Structure of the django CMS menu" +msgstr "Structure du menu django CMS" + +#: cms_appconfig.py:70 +msgid "Sitemap changefreq" +msgstr "changefreq de la Sitemap" + +#: cms_appconfig.py:73 +msgid "Changefreq attribute for sitemap items" +msgstr "Attribut ‘Changfreq ‘ pour chaque entrée de la sitemap." + +#: cms_appconfig.py:76 +msgid "Sitemap priority" +msgstr "Priorité de la sitemap" + +#: cms_appconfig.py:78 +msgid "Priority attribute for sitemap items" +msgstr "Priorité de chaque entrée de la sitemap" + +#: cms_appconfig.py:81 +msgid "Object type" +msgstr "Type de l’objet" + +#: cms_appconfig.py:85 +msgid "Facebook type" +msgstr "Facebook type" + +#: cms_appconfig.py:89 +msgid "Facebook application ID" +msgstr "Facebook application ID" + +#: cms_appconfig.py:93 +msgid "Facebook profile ID" +msgstr "Facebook profile ID" + +#: cms_appconfig.py:97 +msgid "Facebook page URL" +msgstr "Facebook page URL" + +#: cms_appconfig.py:101 +msgid "Facebook author URL" +msgstr "Facebook author URL" + +#: cms_appconfig.py:105 +msgid "Facebook author" +msgstr "Auteur" + +#: cms_appconfig.py:109 +msgid "Twitter type" +msgstr "Twitter type" + +#: cms_appconfig.py:113 +msgid "Twitter site handle" +msgstr "Twitter site handle" + +#: cms_appconfig.py:117 +msgid "Twitter author handle" +msgstr "Twitter author handle" + +#: cms_appconfig.py:121 +msgid "Google+ type" +msgstr "Google+ type" + +#: cms_appconfig.py:125 +msgid "Google+ author name" +msgstr "Google+ author name" + +#: cms_toolbar.py:22 +msgid "Post list" +msgstr "Post list" + +#: cms_toolbar.py:24 +msgid "Add post" +msgstr "Add post" + +#: cms_toolbar.py:28 +msgid "Edit configuration" +msgstr "Modifier la configuration" + +#: cms_toolbar.py:32 +msgid "Edit Post" +msgstr "Modifier Post" + +#: cms_wizards.py:47 +#, python-brace-format +msgid "New {0}" +msgstr "Nouveau {0}" + +#: cms_wizards.py:51 +#, python-brace-format +msgid "Create a new {0} in {1}" +msgstr "Ajouter un nouveau {0} dans {1}" + +#: feeds.py:24 +#, python-format +msgid "Blog articles on %(site_name)s" +msgstr "Articles de blog sur le site %(site_name)s" + +#: menu.py:16 +msgid "Blog menu" +msgstr "Catégorie du blog" + +#: models.py:34 +msgid "parent" +msgstr "père" + +#: models.py:35 +msgid "created at" +msgstr "crée le" + +#: models.py:36 +msgid "modified at" +msgstr "modifié le" + +#: models.py:38 models.py:123 models.py:275 +msgid "app. config" +msgstr "app. config" + +#: models.py:42 +msgid "name" +msgstr "nom" + +#: models.py:43 models.py:128 +msgid "slug" +msgstr "slug" + +#: models.py:50 +msgid "blog category" +msgstr "catégorie du blog" + +#: models.py:51 +msgid "blog categories" +msgstr "catégories du blog" + +#: models.py:91 +msgid "author" +msgstr "auteur" + +#: models.py:94 +msgid "created" +msgstr "crée le" + +#: models.py:95 +msgid "last modified" +msgstr "modifié le" + +#: models.py:96 +msgid "published since" +msgstr "publié depuis" + +#: models.py:98 +msgid "published until" +msgstr "publié jusqu’à" + +#: models.py:100 +msgid "publish" +msgstr "publier" + +#: models.py:101 +msgid "category" +msgstr "catégorie" + +#: models.py:103 +msgid "main image" +msgstr "Image principale" + +#: models.py:107 +msgid "main image thumbnail" +msgstr "Miniature image principale" + +#: models.py:112 +msgid "main image full" +msgstr "Image principale taille réelle" + +#: models.py:116 +msgid "enable comments on post" +msgstr "Activer les commentaires sur l’article" + +#: models.py:118 +msgid "Site(s)" +msgstr "Site(s)" + +#: models.py:119 +msgid "" +"Select sites in which to show the post. If none is set it will be visible in " +"all the configured sites." +msgstr "" +"Selectionnez les sites dans lesquels afficher l’article. Si aucun site n’est " +"selectionné, l’article sera visible dans tous les sites." + +#: models.py:127 +msgid "title" +msgstr "Titre" + +#: models.py:129 +msgid "abstract" +msgstr "abstract" + +#: models.py:130 +msgid "post meta description" +msgstr "Description ‘meta’ de l’article" + +#: models.py:132 +msgid "post meta keywords" +msgstr "Mots clés ‘meta’ de l’article" + +#: models.py:134 +msgid "post meta title" +msgstr "Titre ‘meta’ de l’article" + +#: models.py:135 +msgid "used in title tag and social sharing" +msgstr "Visible dans le titre et dans le partage sur les réseaux sociaux" + +#: models.py:138 +msgid "text" +msgstr "texte" + +#: models.py:175 +msgid "blog article" +msgstr "article du blog" + +#: models.py:176 +msgid "blog articles" +msgstr "articles du blog" + +#: models.py:294 models.py:328 +#, fuzzy +msgid "articles" +msgstr "0 articles" + +#: models.py:295 +msgid "The number of latests articles to be displayed." +msgstr "Nombre d’articles récents à afficher." + +#: models.py:297 +msgid "filter by tag" +msgstr "filtrer par tag" + +#: models.py:298 +msgid "Show only the blog articles tagged with chosen tags." +msgstr "Afficher seulement les articles qui ont les tags séléctionnés." + +#: models.py:301 +msgid "filter by category" +msgstr "filtrer par catégorie" + +#: models.py:302 +msgid "Show only the blog articles tagged with chosen categories." +msgstr "Afficher seulement les articles des catégories séléctionnées" + +#: models.py:306 +#, python-format +msgid "%s latest articles by tag" +msgstr "%s derniers articles par tag" + +#: models.py:324 +msgid "authors" +msgstr "Auteurs" + +#: models.py:329 +msgid "The number of author articles to be displayed." +msgstr "Le nombre d’articles de l’auteur à afficher" + +#: models.py:333 +#, python-format +msgid "%s latest articles by author" +msgstr "%s derniers articles par auteur" + +#: models.py:362 +msgid "generic blog plugin" +msgstr "plugin générique pour le blog" + +#: settings.py:16 +msgid "Full date" +msgstr "Date complète" + +#: settings.py:17 +msgid "Year / Month" +msgstr "Année / Mois" + +#: settings.py:18 templates/djangocms_blog/post_list.html:14 +msgid "Category" +msgstr "Catégorie" + +#: settings.py:19 +#, fuzzy +msgid "Just slug" +msgstr "slug" + +#: settings.py:28 +msgid "Categories and posts" +msgstr "Catégories" + +#: settings.py:29 +msgid "Categories only" +msgstr "Catégories" + +#: settings.py:30 +msgid "Posts only" +msgstr "Articles" + +#: settings.py:31 +msgid "None" +msgstr "Aucun" + +#: settings.py:34 +msgid "always" +msgstr "toujours" + +#: settings.py:35 +msgid "hourly" +msgstr "toutes les heures" + +#: settings.py:36 +msgid "daily" +msgstr "quotidien" + +#: settings.py:37 +msgid "weekly" +msgstr "hebdomadaire" + +#: settings.py:38 +msgid "monthly" +msgstr "mensuel" + +#: settings.py:39 +msgid "yearly" +msgstr "annuel" + +#: settings.py:40 +msgid "never" +msgstr "jamais" + +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "Articles récents du blog" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "Articles de l’auteur" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "Tags" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "Catégories" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "Archive" + +#: templates/djangocms_blog/includes/blog_item.html:24 +msgid "read more" +msgstr "lire la suite" + +#: templates/djangocms_blog/includes/blog_meta.html:6 +msgid "by" +msgstr "par" + +#: templates/djangocms_blog/plugins/archive.html:17 +#: templates/djangocms_blog/plugins/authors.html:10 +#: templates/djangocms_blog/plugins/categories.html:10 +#: templates/djangocms_blog/plugins/tags.html:10 +#, python-format +msgid "1 article" +msgid_plural "%(articles)s articles" +msgstr[0] "1 article" +msgstr[1] "%(articles)s articles" + +#: templates/djangocms_blog/plugins/archive.html:18 +#: templates/djangocms_blog/plugins/authors.html:11 +#: templates/djangocms_blog/plugins/categories.html:11 +#: templates/djangocms_blog/plugins/tags.html:11 +msgid "0 articles" +msgstr "0 articles" + +#: templates/djangocms_blog/plugins/archive.html:26 +#: templates/djangocms_blog/plugins/authors.html:15 +#: templates/djangocms_blog/plugins/latest_entries.html:7 +#: templates/djangocms_blog/plugins/tags.html:15 +#: templates/djangocms_blog/post_list.html:21 +msgid "No article found." +msgstr "Aucun article trouvé" + +#: templates/djangocms_blog/plugins/authors.html:3 +msgid "Authors" +msgstr "Auteurs" + +#: templates/djangocms_blog/plugins/categories.html:15 +msgid "No categories found." +msgstr "Aucune catégorie trouvé" + +#: templates/djangocms_blog/post_list.html:11 +msgid "Articles by" +msgstr "Articles écrits par" + +#: templates/djangocms_blog/post_list.html:13 +msgid "Tag" +msgstr "Tag" + +#: templates/djangocms_blog/post_list.html:24 +msgid "Back" +msgstr "Retour" + +#: templates/djangocms_blog/post_list.html:29 +msgid "previous" +msgstr "précédent" + +#: templates/djangocms_blog/post_list.html:32 +msgid "Page" +msgstr "Page" + +#: templates/djangocms_blog/post_list.html:32 +msgid "of" +msgstr "sur" + +#: templates/djangocms_blog/post_list.html:35 +msgid "next" +msgstr "suivant" + +#, fuzzy +#~ msgid "Article" +#~ msgstr "Articles" + +#~ msgid "Text" +#~ msgstr "Text" + +#~ msgid "blog post" +#~ msgstr "blog post" + +#~ msgid "Entries by" +#~ msgstr "Entries by" + +#~ msgid "No entry found." +#~ msgstr "No entry found." diff --git a/djangocms_blog/locale/it/LC_MESSAGES/django.mo b/djangocms_blog/locale/it/LC_MESSAGES/django.mo index bc88be3..2217f62 100644 Binary files a/djangocms_blog/locale/it/LC_MESSAGES/django.mo and b/djangocms_blog/locale/it/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/it/LC_MESSAGES/django.po b/djangocms_blog/locale/it/LC_MESSAGES/django.po index 391538d..24e2c25 100644 --- a/djangocms_blog/locale/it/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/it/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" -"PO-Revision-Date: 2015-10-31 12:24+0000\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:19+0000\n" "Last-Translator: yakky \n" "Language-Team: Italian (http://www.transifex.com/nephila/djangocms-blog/language/it/)\n" "MIME-Version: 1.0\n" @@ -27,8 +27,7 @@ msgstr "Puoi inserire stringhe, attributi o metodi del model Post" msgid "django CMS Blog" msgstr "django CMS Blog" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "Blog" @@ -41,155 +40,144 @@ msgid "object name" msgstr "Nome oggetto" #: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "Configurazione del blog" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "Configurazioni del blog" + +#: cms_appconfig.py:31 msgid "untitled" msgstr "Senza titolo" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "Articoli pubblicati di default" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "Struttura permalink" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "Usa placeholder e plugin per il contenuto" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "Usa campo abstract" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author" msgstr "Imposta autore" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "Imposta autore di default" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "Dimensione paginazione" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "Se la lista è paginata, quanti articoli visualizzati per pagina?" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "Prefisso template" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "Directory alternativa da cui caricare i template" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "Struttura del menu" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "Struttura del menu django CMS" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" msgstr "Frequenza aggiornamento Sitemap" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" msgstr "Attributo Changefreq per gli oggetti della sitemap" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" msgstr "Priorità sitemap" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" msgstr "Attributo priorità per gli oggetti nella sitemap" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "Tipo oggetto" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "Tipo oggetto Facebook" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "ID Applicazione Facebook" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "ID Profilo Facebook" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "URL Pagina Facebook" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "URL Autore Facebook" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 msgid "Facebook author" msgstr "Autore Facebook" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "Tipo oggetto Twitter" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "Nome Twitter del sito" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "Nome Twitter autore" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "Tipo oggetto Google+" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "Nome Google+ autore" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "Ultimi articoli" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "Articoli per autore" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "Tag" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "Categorie" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "Archivio" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "Lista degli articoli" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "Aggiungi articolo" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" msgstr "Modifica configurazione" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "Modifica articolo" @@ -224,7 +212,7 @@ msgstr "creato il" msgid "modified at" msgstr "modificato il" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" msgstr "config. app." @@ -334,52 +322,52 @@ msgstr "articolo del blog" msgid "blog articles" msgstr "articoli del blog" -#: models.py:293 -msgid "generic blog plugin" -msgstr "plugin blog" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 msgid "articles" msgstr "articoli" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "Il numero di articoli da mostrare." -#: models.py:300 +#: models.py:297 msgid "filter by tag" msgstr "filtra per tag" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "Mostra solo gli articoli marcati con i tag selezionati." -#: models.py:304 +#: models.py:301 msgid "filter by category" msgstr "filtra per categoria" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "Mostra solo gli articoli marcati con i categorie selezionati." -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" msgstr "ultimi %s articoli per tag" -#: models.py:326 +#: models.py:324 msgid "authors" msgstr "autori" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "Numero di elementi per autore da mostrare." -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" msgstr "ultimi %s articoli per autore" +#: models.py:362 +msgid "generic blog plugin" +msgstr "plugin blog" + #: settings.py:16 msgid "Full date" msgstr "Data completa" @@ -440,6 +428,27 @@ msgstr "ogni anno" msgid "never" msgstr "mai" +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "Ultimi articoli" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "Articoli per autore" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "Tag" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "Categorie" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "Archivio" + #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" msgstr "leggi" diff --git a/djangocms_blog/locale/lt/LC_MESSAGES/django.mo b/djangocms_blog/locale/lt/LC_MESSAGES/django.mo index 96f67b3..4a7b164 100644 Binary files a/djangocms_blog/locale/lt/LC_MESSAGES/django.mo and b/djangocms_blog/locale/lt/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/lt/LC_MESSAGES/django.po b/djangocms_blog/locale/lt/LC_MESSAGES/django.po index 15300de..c6658df 100644 --- a/djangocms_blog/locale/lt/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/lt/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" -"PO-Revision-Date: 2015-10-31 12:23+0000\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:15+0000\n" "Last-Translator: yakky \n" "Language-Team: Lithuanian (http://www.transifex.com/nephila/djangocms-blog/language/lt/)\n" "MIME-Version: 1.0\n" @@ -26,8 +26,7 @@ msgstr "Galite pateikti paprasto teksto eilutes, įrašo modelio atributą arba msgid "django CMS Blog" msgstr "django CMS Tinklaraštis" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "Tinklaraštis" @@ -37,170 +36,159 @@ msgstr "aplikacijos pavadinimas" #: cms_appconfig.py:22 msgid "object name" -msgstr "" +msgstr "objekto pavadinimas" #: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "" + +#: cms_appconfig.py:31 msgid "untitled" msgstr "be pavadinimo" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "Pagal numatymą įrašas publikuojamas" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "Nuolatinės nuorodos struktūra" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "Straipsnio tekstui naudokite rezervuotą vietą ir įskiepiuis" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "Naudoti santraukos lauką" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author" msgstr "Nustatyti autorių" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "Pagal numatymą nustatyti autorių" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "Puslapiavimo dydis" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "Kai puslapiuojamas sąrašas, kiek straipsnių atvaizduoti puslapyje?" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "Šablono priešdėlis" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "Alternatyvus katalogas iš kurio būtų užkraunami šablonai" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "Meniu struktūra" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "Django CMS meniu struktūra" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" -msgstr "" +msgstr "Tinklalapio medžio keitimo dažnumas" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" -msgstr "" +msgstr "Keitimo dažnumo atributas tinklalapio medžio objektams" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" -msgstr "" +msgstr "Tinklalapio medžio prioritetas" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" -msgstr "" +msgstr "Prioriteto atributas tinklalapio medžio objektams" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "Objekto tipas" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "Facebook tipas" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "Facebook aplikacijos ID" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "Facebook profilio ID" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "Facebook puslapio URL" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "Facebook autoriaus URL" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 msgid "Facebook author" msgstr "Facebook autorius" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "Twitter tipas" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "Twitter tinklalapio vardas" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "Twitter autoriaus vardas" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "Google+ tipas" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "Goggle+ autoriaus vardas" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "Naujausi tinklaraščio straipsniai" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "Tinklaraščio straipsnių autorius" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "Žymenos" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "Kategorijos" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "Archyvas" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "Straipsnių sąrašas" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "Pridėti straipsnį" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" msgstr "Redaguoti nustatymus" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "Redaguoti straipsnį" #: cms_wizards.py:47 #, python-brace-format msgid "New {0}" -msgstr "" +msgstr "Naujas {0}" #: cms_wizards.py:51 #, python-brace-format msgid "Create a new {0} in {1}" -msgstr "" +msgstr "Kurti naują {0} viduje {1}" #: feeds.py:24 #, python-format @@ -223,7 +211,7 @@ msgstr "sukurta" msgid "modified at" msgstr "redaguota" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" msgstr "aplikacijos nustatymai" @@ -333,52 +321,52 @@ msgstr "tinklaraščio straipsnis" msgid "blog articles" msgstr "tinklaraščio straipsniai" -#: models.py:293 -msgid "generic blog plugin" -msgstr "bendras tinklaraščio įskiepis" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 msgid "articles" msgstr "straipsniai" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "Atvaizduojamas naujausių straipsnių kiekis." -#: models.py:300 +#: models.py:297 msgid "filter by tag" msgstr "filtruoti pagal žymeną" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "Atvaizduoti straipsnius su pasirinktomis žymenomis." -#: models.py:304 +#: models.py:301 msgid "filter by category" msgstr "filtruoti pagal kategoriją" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "Atvaizduoti straipsnius su pasirinktomis kategorijomis." -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" msgstr "%s paskutiniai straipsniai pagal žymeną" -#: models.py:326 +#: models.py:324 msgid "authors" msgstr "autoriai" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "Atvaizduojamas autoriaus straipsnių kiekis." -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" msgstr "%s paskutiniai straipsniai pagal autorių" +#: models.py:362 +msgid "generic blog plugin" +msgstr "bendras tinklaraščio įskiepis" + #: settings.py:16 msgid "Full date" msgstr "Pilna data" @@ -413,31 +401,52 @@ msgstr "Niekas" #: settings.py:34 msgid "always" -msgstr "" +msgstr "visada" #: settings.py:35 msgid "hourly" -msgstr "" +msgstr "kas valandą" #: settings.py:36 msgid "daily" -msgstr "" +msgstr "kas dieną" #: settings.py:37 msgid "weekly" -msgstr "" +msgstr "kas savaitę" #: settings.py:38 msgid "monthly" -msgstr "" +msgstr "kas mėnesį" #: settings.py:39 msgid "yearly" -msgstr "" +msgstr "kas metus" #: settings.py:40 msgid "never" -msgstr "" +msgstr "niekada" + +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "Naujausi tinklaraščio straipsniai" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "Tinklaraščio straipsnių autorius" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "Žymenos" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "Kategorijos" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "Archyvas" #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" diff --git a/djangocms_blog/locale/pt_BR/LC_MESSAGES/django.mo b/djangocms_blog/locale/pt_BR/LC_MESSAGES/django.mo index 06f4956..f2864ba 100644 Binary files a/djangocms_blog/locale/pt_BR/LC_MESSAGES/django.mo and b/djangocms_blog/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/pt_BR/LC_MESSAGES/django.po b/djangocms_blog/locale/pt_BR/LC_MESSAGES/django.po index 7048e60..bc6e694 100644 --- a/djangocms_blog/locale/pt_BR/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/pt_BR/LC_MESSAGES/django.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" -"PO-Revision-Date: 2015-10-31 12:23+0000\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:15+0000\n" "Last-Translator: yakky \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/nephila/djangocms-blog/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -25,8 +25,7 @@ msgstr "" msgid "django CMS Blog" msgstr "" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "" @@ -39,155 +38,144 @@ msgid "object name" msgstr "" #: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "" + +#: cms_appconfig.py:31 msgid "untitled" msgstr "" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" msgstr "" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" msgstr "" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" msgstr "" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" msgstr "" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 msgid "Facebook author" msgstr "" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" msgstr "" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "" @@ -222,7 +210,7 @@ msgstr "" msgid "modified at" msgstr "" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" msgstr "" @@ -332,52 +320,52 @@ msgstr "" msgid "blog articles" msgstr "" -#: models.py:293 -msgid "generic blog plugin" -msgstr "" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 msgid "articles" msgstr "" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "" -#: models.py:300 +#: models.py:297 msgid "filter by tag" msgstr "" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "" -#: models.py:304 +#: models.py:301 msgid "filter by category" msgstr "" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "" -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" msgstr "" -#: models.py:326 +#: models.py:324 msgid "authors" msgstr "" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "" -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" msgstr "" +#: models.py:362 +msgid "generic blog plugin" +msgstr "" + #: settings.py:16 msgid "Full date" msgstr "" @@ -438,6 +426,27 @@ msgstr "" msgid "never" msgstr "" +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "" + #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" msgstr "" diff --git a/djangocms_blog/locale/ru/LC_MESSAGES/django.mo b/djangocms_blog/locale/ru/LC_MESSAGES/django.mo index cdee03e..2efd23d 100644 Binary files a/djangocms_blog/locale/ru/LC_MESSAGES/django.mo and b/djangocms_blog/locale/ru/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/ru/LC_MESSAGES/django.po b/djangocms_blog/locale/ru/LC_MESSAGES/django.po index 3877851..14591f9 100644 --- a/djangocms_blog/locale/ru/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/ru/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # # Translators: # Iacopo Spalletti, 2014 -# Rüstem Mirzaoğlu, 2015 +# Rustam Mirzaev , 2015 +# Rustam Mirzaev , 2015 msgid "" msgstr "" "Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" -"PO-Revision-Date: 2015-10-31 12:23+0000\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:15+0000\n" "Last-Translator: yakky \n" "Language-Team: Russian (http://www.transifex.com/nephila/djangocms-blog/language/ru/)\n" "MIME-Version: 1.0\n" @@ -21,187 +22,175 @@ msgstr "" #: admin.py:169 admin.py:177 admin.py:185 msgid "You can provide plain strings, Post model attribute or method names" -msgstr "" +msgstr "Вы можете использовать простую строку, атрибут модели статьи или имена методов" #: apps.py:15 msgid "django CMS Blog" -msgstr "" +msgstr "django CMS Блог" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "Блог" #: cms_appconfig.py:20 msgid "application title" -msgstr "" +msgstr "название приложения" #: cms_appconfig.py:22 msgid "object name" -msgstr "" +msgstr "название объекта" #: cms_appconfig.py:27 -msgid "untitled" +#| msgid "blog categories" +msgid "blog config" msgstr "" -#: cms_appconfig.py:32 -msgid "Post published by default" +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" msgstr "" +#: cms_appconfig.py:31 +msgid "untitled" +msgstr "безымянный" + #: cms_appconfig.py:36 -msgid "Permalink structure" -msgstr "" +msgid "Post published by default" +msgstr "Статья опубликованная по умолчанию" -#: cms_appconfig.py:41 -msgid "Use placeholder and plugins for article body" -msgstr "" +#: cms_appconfig.py:40 +msgid "Permalink structure" +msgstr "Строение постоянной ссылки" #: cms_appconfig.py:45 +msgid "Use placeholder and plugins for article body" +msgstr "Используйте местозаполнитель и плагины для тела статьи" + +#: cms_appconfig.py:49 msgid "Use abstract field" -msgstr "" - -#: cms_appconfig.py:49 -msgid "Set author" -msgstr "" - -#: cms_appconfig.py:49 -msgid "Set author by default" -msgstr "" +msgstr "Используйте поле краткого описания" #: cms_appconfig.py:53 -msgid "Paginate size" -msgstr "" +msgid "Set author" +msgstr "Указать автора" -#: cms_appconfig.py:54 -msgid "When paginating list views, how many articles per page?" -msgstr "" +#: cms_appconfig.py:53 +msgid "Set author by default" +msgstr "Указать автора по умолчанию" #: cms_appconfig.py:57 -msgid "Template prefix" -msgstr "" +msgid "Paginate size" +msgstr "Разбить на части" #: cms_appconfig.py:58 -msgid "Alternative directory to load the blog templates from" -msgstr "" +msgid "When paginating list views, how many articles per page?" +msgstr "Сколько статей на страницу вы бы хотели использовать при разбиении её на части." #: cms_appconfig.py:61 +msgid "Template prefix" +msgstr "Префикс шаблона" + +#: cms_appconfig.py:62 +msgid "Alternative directory to load the blog templates from" +msgstr "Альтернативная директория загрузки шаблонов блога" + +#: cms_appconfig.py:65 msgid "Menu structure" -msgstr "" +msgstr "Структура меню" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" -msgstr "" +msgstr "Структура меню django CMS " -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" -msgstr "" +msgstr "Частота обновления карты сайта" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" -msgstr "" +msgstr "Атрибут частоты изменения объектов карты сайта" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" -msgstr "" +msgstr "Приоритет" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" -msgstr "" - -#: cms_appconfig.py:77 -msgid "Object type" -msgstr "" +msgstr "Приоритет атребута для объектов карты сайта" #: cms_appconfig.py:81 -msgid "Facebook type" -msgstr "" +msgid "Object type" +msgstr "Тип объекта" #: cms_appconfig.py:85 -msgid "Facebook application ID" -msgstr "" +msgid "Facebook type" +msgstr "тип в Facebook" #: cms_appconfig.py:89 -msgid "Facebook profile ID" -msgstr "" +msgid "Facebook application ID" +msgstr "ID приложения на Facebook" #: cms_appconfig.py:93 -msgid "Facebook page URL" -msgstr "" +msgid "Facebook profile ID" +msgstr "ID профиля на Facebook" #: cms_appconfig.py:97 -msgid "Facebook author URL" -msgstr "" +msgid "Facebook page URL" +msgstr "URL страницы на Facebook" #: cms_appconfig.py:101 -msgid "Facebook author" -msgstr "" +msgid "Facebook author URL" +msgstr "URL автора на Facebook " #: cms_appconfig.py:105 -msgid "Twitter type" -msgstr "" +msgid "Facebook author" +msgstr "автор на Facebook " #: cms_appconfig.py:109 -msgid "Twitter site handle" -msgstr "" +msgid "Twitter type" +msgstr "тип на Twitter" #: cms_appconfig.py:113 -msgid "Twitter author handle" -msgstr "" +msgid "Twitter site handle" +msgstr "дескриптор сайта на Twitter" #: cms_appconfig.py:117 -msgid "Google+ type" -msgstr "" +msgid "Twitter author handle" +msgstr "дескриптор автора на Twitter" #: cms_appconfig.py:121 +msgid "Google+ type" +msgstr "тип на Google+" + +#: cms_appconfig.py:125 msgid "Google+ author name" -msgstr "" +msgstr "имя автора на Google+" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "Последние статьи блога" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "Автор статей блога" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "Метки" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "Категории" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "Архив" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "Список статей" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "Добавить статью" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" -msgstr "" +msgstr "Редактировать настройки" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "Редактировать статью" #: cms_wizards.py:47 #, python-brace-format msgid "New {0}" -msgstr "" +msgstr "Новых {0}" #: cms_wizards.py:51 #, python-brace-format msgid "Create a new {0} in {1}" -msgstr "" +msgstr "Создать новых {0} из {1}" #: feeds.py:24 #, python-format @@ -210,7 +199,7 @@ msgstr "Статьи блога с сайта: %(site_name)s" #: menu.py:16 msgid "Blog menu" -msgstr "" +msgstr "Меню блога" #: models.py:34 msgid "parent" @@ -224,9 +213,9 @@ msgstr "время создания" msgid "modified at" msgstr "время изменения" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" -msgstr "" +msgstr "настройки приложения" #: models.py:42 msgid "name" @@ -246,27 +235,27 @@ msgstr "категории блога" #: models.py:91 msgid "author" -msgstr "" +msgstr "автор" #: models.py:94 msgid "created" -msgstr "" +msgstr "создан(о)" #: models.py:95 msgid "last modified" -msgstr "" +msgstr "последние изменения" #: models.py:96 msgid "published since" -msgstr "" +msgstr "опубликовано" #: models.py:98 msgid "published until" -msgstr "" +msgstr "опубликовано до" #: models.py:100 msgid "publish" -msgstr "" +msgstr "опубликовать" #: models.py:101 msgid "category" @@ -274,19 +263,19 @@ msgstr "категория" #: models.py:103 msgid "main image" -msgstr "" +msgstr "главная страница" #: models.py:107 msgid "main image thumbnail" -msgstr "" +msgstr "уменьшенная копия главного изображения" #: models.py:112 msgid "main image full" -msgstr "" +msgstr "Полноразмерное изображение" #: models.py:116 msgid "enable comments on post" -msgstr "" +msgstr "Разрешить комментарии к статье" #: models.py:118 msgid "Site(s)" @@ -300,23 +289,23 @@ msgstr "Выберите сайты на которых будет опубли #: models.py:127 msgid "title" -msgstr "" +msgstr "Заголовок" #: models.py:129 msgid "abstract" -msgstr "" +msgstr "Краткое описание" #: models.py:130 msgid "post meta description" -msgstr "" +msgstr "мета-описание статьи" #: models.py:132 msgid "post meta keywords" -msgstr "" +msgstr "ключевые слова к статье" #: models.py:134 msgid "post meta title" -msgstr "" +msgstr "мета-заголовок к статье" #: models.py:135 msgid "used in title tag and social sharing" @@ -324,7 +313,7 @@ msgstr "используется в метках и обмене в социал #: models.py:138 msgid "text" -msgstr "" +msgstr "текст" #: models.py:175 msgid "blog article" @@ -334,59 +323,59 @@ msgstr "статья блога" msgid "blog articles" msgstr "статьи блога" -#: models.py:293 -msgid "generic blog plugin" -msgstr "" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 msgid "articles" -msgstr "" +msgstr "статьи" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "Количество последних статей, которые будут показаны." -#: models.py:300 +#: models.py:297 msgid "filter by tag" -msgstr "" +msgstr "фильтровать по тегам" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "Показывать статьи только с выбранными метками." -#: models.py:304 +#: models.py:301 msgid "filter by category" -msgstr "" +msgstr "фильтровать по категориям" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "Показывать статьи только из выбранных категорий." -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" -msgstr "" +msgstr "%s последних статей по тегам" -#: models.py:326 +#: models.py:324 msgid "authors" -msgstr "" +msgstr "авторы" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "Количество статей автора, которые будут показаны." -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" -msgstr "" +msgstr "%s последних статей по авторам" + +#: models.py:362 +msgid "generic blog plugin" +msgstr "генерируемый плагин блога" #: settings.py:16 msgid "Full date" -msgstr "" +msgstr "Полная дата" #: settings.py:17 msgid "Year / Month" -msgstr "" +msgstr "Год / Месяц" #: settings.py:18 templates/djangocms_blog/post_list.html:14 msgid "Category" @@ -394,51 +383,72 @@ msgstr "Категория" #: settings.py:19 msgid "Just slug" -msgstr "" +msgstr "ЧПУ" #: settings.py:28 msgid "Categories and posts" -msgstr "" +msgstr "Категории и статьи" #: settings.py:29 msgid "Categories only" -msgstr "" +msgstr "Только категории" #: settings.py:30 msgid "Posts only" -msgstr "" +msgstr "Только статьи" #: settings.py:31 msgid "None" -msgstr "" +msgstr "Ничего" #: settings.py:34 msgid "always" -msgstr "" +msgstr "всегда" #: settings.py:35 msgid "hourly" -msgstr "" +msgstr "ежечасно" #: settings.py:36 msgid "daily" -msgstr "" +msgstr "ежедневно" #: settings.py:37 msgid "weekly" -msgstr "" +msgstr "еженедельно" #: settings.py:38 msgid "monthly" -msgstr "" +msgstr "ежемесячно" #: settings.py:39 msgid "yearly" -msgstr "" +msgstr "ежегодно" #: settings.py:40 msgid "never" -msgstr "" +msgstr "никогда" + +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "Последние статьи блога" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "Автор статей блога" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "Метки" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "Категории" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "Архив" #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" @@ -481,7 +491,7 @@ msgstr "Авторы" #: templates/djangocms_blog/plugins/categories.html:15 msgid "No categories found." -msgstr "" +msgstr "Не найдено ни одной категории." #: templates/djangocms_blog/post_list.html:11 msgid "Articles by" diff --git a/djangocms_blog/locale/sl/LC_MESSAGES/django.mo b/djangocms_blog/locale/sl/LC_MESSAGES/django.mo index 562edb2..ea67213 100644 Binary files a/djangocms_blog/locale/sl/LC_MESSAGES/django.mo and b/djangocms_blog/locale/sl/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/sl/LC_MESSAGES/django.po b/djangocms_blog/locale/sl/LC_MESSAGES/django.po index 1b0db7f..2b6851c 100644 --- a/djangocms_blog/locale/sl/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/sl/LC_MESSAGES/django.po @@ -1,23 +1,22 @@ -# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy +# +# Translators: +# Iacopo Spalletti, 2014 msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-15 13:53+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:15+0000\n" +"Last-Translator: yakky \n" +"Language-Team: Slovenian (http://www.transifex.com/nephila/djangocms-blog/language/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" -"%100==4 ? 2 : 3);\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"X-Generator: Lokalize 1.5\n" #: admin.py:169 admin.py:177 admin.py:185 msgid "You can provide plain strings, Post model attribute or method names" @@ -40,118 +39,128 @@ msgid "object name" msgstr "ime objekta" #: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "" + +#: cms_appconfig.py:31 msgid "untitled" msgstr "nepoimenovano" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "Objava naj bo samodejno objavljena" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "Struktura povezav" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "Za objavo naj bodo uporabljeni vtičniki in označbe mest" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "Uporaba abstraktnih polj" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author" msgstr "Nastavi avtorja" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "Avtor naj bo nastavljen samodejno" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "Število objav na stran" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "Koliko objav naj bo na eni strani?" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "Predpona predlog" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "Alternativni direktorij za nalaganje predlog bloga" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "Struktura menija" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "Struktura django CMS menija" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" msgstr "" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" msgstr "" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" msgstr "Sitemap prioriteta" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" msgstr "Prioriteta atributov za elemente sitemapa" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "Tip objekta" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 msgid "Facebook author" msgstr "Facebook avtor" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "" @@ -272,8 +281,8 @@ msgstr "Stran(i)" #: models.py:119 msgid "" -"Select sites in which to show the post. If none is set it will be visible in " -"all the configured sites." +"Select sites in which to show the post. If none is set it will be visible in" +" all the configured sites." msgstr "Izberi strani na katerih naj bo objava prikazana. Če ni izbrano nič, bo objava prikazana na vseh nastavljenih straneh." #: models.py:127 @@ -366,7 +375,7 @@ msgstr "Datum (poln)" msgid "Year / Month" msgstr "Leto / Mesec" -#: settings.py:18 templates/djangocms_blog/post_list.html.py:14 +#: settings.py:18 templates/djangocms_blog/post_list.html:14 msgid "Category" msgstr "Kategorija" @@ -426,15 +435,15 @@ msgstr "Najnovejše blog objave" msgid "Author Blog Articles" msgstr "Avtorjeve blog objave" -#: settings.py:117 templates/djangocms_blog/plugins/tags.html.py:3 +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 msgid "Tags" msgstr "Oznake" -#: settings.py:119 templates/djangocms_blog/plugins/categories.html.py:3 +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 msgid "Categories" msgstr "Kategorije" -#: settings.py:121 templates/djangocms_blog/plugins/archive.html.py:3 +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 #: templates/djangocms_blog/post_list.html:12 msgid "Archive" msgstr "Arhiv" @@ -454,8 +463,10 @@ msgstr "" #, python-format msgid "1 article" msgid_plural "%(articles)s articles" -msgstr[0] "1 objava" +msgstr[0] "%(articles)s objava" msgstr[1] "%(articles)s objave" +msgstr[2] "%(articles)s objave" +msgstr[3] "%(articles)s objave" #: templates/djangocms_blog/plugins/archive.html:18 #: templates/djangocms_blog/plugins/authors.html:11 @@ -507,3 +518,18 @@ msgstr "od" #: templates/djangocms_blog/post_list.html:35 msgid "next" msgstr "naslednji" + +#~ msgid "Article" +#~ msgstr "Articles" + +#~ msgid "Text" +#~ msgstr "Text" + +#~ msgid "blog post" +#~ msgstr "blog post" + +#~ msgid "Entries by" +#~ msgstr "Entries by" + +#~ msgid "No entry found." +#~ msgstr "No entry found." diff --git a/djangocms_blog/locale/tr/LC_MESSAGES/django.mo b/djangocms_blog/locale/tr/LC_MESSAGES/django.mo index 9860fb9..8a0db53 100644 Binary files a/djangocms_blog/locale/tr/LC_MESSAGES/django.mo and b/djangocms_blog/locale/tr/LC_MESSAGES/django.mo differ diff --git a/djangocms_blog/locale/tr/LC_MESSAGES/django.po b/djangocms_blog/locale/tr/LC_MESSAGES/django.po index 0e40035..5ca587e 100644 --- a/djangocms_blog/locale/tr/LC_MESSAGES/django.po +++ b/djangocms_blog/locale/tr/LC_MESSAGES/django.po @@ -2,13 +2,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Rüstem Mirzaoğlu, 2015 +# Rustam Mirzaev , 2015 msgid "" msgstr "" "Project-Id-Version: djangocms-blog\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-31 13:23+0100\n" -"PO-Revision-Date: 2015-10-31 12:23+0000\n" +"POT-Creation-Date: 2015-12-20 17:14+0100\n" +"PO-Revision-Date: 2015-12-20 16:15+0000\n" "Last-Translator: yakky \n" "Language-Team: Turkish (http://www.transifex.com/nephila/djangocms-blog/language/tr/)\n" "MIME-Version: 1.0\n" @@ -26,8 +26,7 @@ msgstr "" msgid "django CMS Blog" msgstr "" -#: cms_app.py:15 cms_plugins.py:64 cms_plugins.py:77 cms_plugins.py:93 -#: cms_plugins.py:108 cms_toolbar.py:18 +#: cms_app.py:15 cms_toolbar.py:19 settings.py:111 msgid "Blog" msgstr "Blog" @@ -40,155 +39,144 @@ msgid "object name" msgstr "" #: cms_appconfig.py:27 +#| msgid "blog categories" +msgid "blog config" +msgstr "" + +#: cms_appconfig.py:28 +#| msgid "blog categories" +msgid "blog configs" +msgstr "" + +#: cms_appconfig.py:31 msgid "untitled" msgstr "" -#: cms_appconfig.py:32 +#: cms_appconfig.py:36 msgid "Post published by default" msgstr "" -#: cms_appconfig.py:36 +#: cms_appconfig.py:40 msgid "Permalink structure" msgstr "" -#: cms_appconfig.py:41 +#: cms_appconfig.py:45 msgid "Use placeholder and plugins for article body" msgstr "" -#: cms_appconfig.py:45 +#: cms_appconfig.py:49 msgid "Use abstract field" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author" msgstr "" -#: cms_appconfig.py:49 +#: cms_appconfig.py:53 msgid "Set author by default" msgstr "" -#: cms_appconfig.py:53 +#: cms_appconfig.py:57 msgid "Paginate size" msgstr "" -#: cms_appconfig.py:54 +#: cms_appconfig.py:58 msgid "When paginating list views, how many articles per page?" msgstr "" -#: cms_appconfig.py:57 +#: cms_appconfig.py:61 msgid "Template prefix" msgstr "" -#: cms_appconfig.py:58 +#: cms_appconfig.py:62 msgid "Alternative directory to load the blog templates from" msgstr "" -#: cms_appconfig.py:61 +#: cms_appconfig.py:65 msgid "Menu structure" msgstr "" -#: cms_appconfig.py:63 +#: cms_appconfig.py:67 msgid "Structure of the django CMS menu" msgstr "" -#: cms_appconfig.py:66 +#: cms_appconfig.py:70 msgid "Sitemap changefreq" msgstr "" -#: cms_appconfig.py:69 +#: cms_appconfig.py:73 msgid "Changefreq attribute for sitemap items" msgstr "" -#: cms_appconfig.py:72 +#: cms_appconfig.py:76 msgid "Sitemap priority" msgstr "" -#: cms_appconfig.py:74 +#: cms_appconfig.py:78 msgid "Priority attribute for sitemap items" msgstr "" -#: cms_appconfig.py:77 +#: cms_appconfig.py:81 msgid "Object type" msgstr "" -#: cms_appconfig.py:81 +#: cms_appconfig.py:85 msgid "Facebook type" msgstr "" -#: cms_appconfig.py:85 +#: cms_appconfig.py:89 msgid "Facebook application ID" msgstr "" -#: cms_appconfig.py:89 +#: cms_appconfig.py:93 msgid "Facebook profile ID" msgstr "" -#: cms_appconfig.py:93 +#: cms_appconfig.py:97 msgid "Facebook page URL" msgstr "" -#: cms_appconfig.py:97 +#: cms_appconfig.py:101 msgid "Facebook author URL" msgstr "" -#: cms_appconfig.py:101 +#: cms_appconfig.py:105 msgid "Facebook author" msgstr "" -#: cms_appconfig.py:105 +#: cms_appconfig.py:109 msgid "Twitter type" msgstr "" -#: cms_appconfig.py:109 +#: cms_appconfig.py:113 msgid "Twitter site handle" msgstr "" -#: cms_appconfig.py:113 +#: cms_appconfig.py:117 msgid "Twitter author handle" msgstr "" -#: cms_appconfig.py:117 +#: cms_appconfig.py:121 msgid "Google+ type" msgstr "" -#: cms_appconfig.py:121 +#: cms_appconfig.py:125 msgid "Google+ author name" msgstr "" -#: cms_plugins.py:30 cms_plugins.py:49 -msgid "Latest Blog Articles" -msgstr "Blog'un son makaleleri" - -#: cms_plugins.py:65 -msgid "Author Blog Articles" -msgstr "Blog'un makale yazarı" - -#: cms_plugins.py:78 templates/djangocms_blog/plugins/tags.html:3 -msgid "Tags" -msgstr "Etiketler" - -#: cms_plugins.py:94 templates/djangocms_blog/plugins/categories.html:3 -msgid "Categories" -msgstr "Kategoriler" - -#: cms_plugins.py:109 templates/djangocms_blog/plugins/archive.html:3 -#: templates/djangocms_blog/post_list.html:12 -msgid "Archive" -msgstr "Arşiv" - -#: cms_toolbar.py:21 +#: cms_toolbar.py:22 msgid "Post list" msgstr "Makale listesi" -#: cms_toolbar.py:23 +#: cms_toolbar.py:24 msgid "Add post" msgstr "Makale ekle" -#: cms_toolbar.py:27 +#: cms_toolbar.py:28 msgid "Edit configuration" msgstr "" -#: cms_toolbar.py:31 +#: cms_toolbar.py:32 msgid "Edit Post" msgstr "Makaleyi düzenle" @@ -223,7 +211,7 @@ msgstr "oluşturma tarihi" msgid "modified at" msgstr "düzenleme tarihi" -#: models.py:38 models.py:123 models.py:276 +#: models.py:38 models.py:123 models.py:275 msgid "app. config" msgstr "" @@ -333,52 +321,52 @@ msgstr "blog makalesi" msgid "blog articles" msgstr "blog makaleleri" -#: models.py:293 -msgid "generic blog plugin" -msgstr "" - -#: models.py:297 models.py:330 +#: models.py:294 models.py:328 msgid "articles" msgstr "" -#: models.py:298 +#: models.py:295 msgid "The number of latests articles to be displayed." msgstr "Ğörütülenecek olan makale sayısı" -#: models.py:300 +#: models.py:297 msgid "filter by tag" msgstr "" -#: models.py:301 +#: models.py:298 msgid "Show only the blog articles tagged with chosen tags." msgstr "Sadece seçili etiketlerle işaretlenmiş makaleleri göster." -#: models.py:304 +#: models.py:301 msgid "filter by category" msgstr "" -#: models.py:305 +#: models.py:302 msgid "Show only the blog articles tagged with chosen categories." msgstr "Sadece seçili kategorilerde bulunan makaleleri ğöster" -#: models.py:309 +#: models.py:306 #, python-format msgid "%s latest articles by tag" msgstr "" -#: models.py:326 +#: models.py:324 msgid "authors" msgstr "" -#: models.py:331 +#: models.py:329 msgid "The number of author articles to be displayed." msgstr "İlgili yazarın gösterilecek olan makale sayısı." -#: models.py:335 +#: models.py:333 #, python-format msgid "%s latest articles by author" msgstr "" +#: models.py:362 +msgid "generic blog plugin" +msgstr "" + #: settings.py:16 msgid "Full date" msgstr "" @@ -439,6 +427,27 @@ msgstr "" msgid "never" msgstr "" +#: settings.py:113 +msgid "Latest Blog Articles" +msgstr "Blog'un son makaleleri" + +#: settings.py:115 +msgid "Author Blog Articles" +msgstr "Blog'un makale yazarı" + +#: settings.py:117 templates/djangocms_blog/plugins/tags.html:3 +msgid "Tags" +msgstr "Etiketler" + +#: settings.py:119 templates/djangocms_blog/plugins/categories.html:3 +msgid "Categories" +msgstr "Kategoriler" + +#: settings.py:121 templates/djangocms_blog/plugins/archive.html:3 +#: templates/djangocms_blog/post_list.html:12 +msgid "Archive" +msgstr "Arşiv" + #: templates/djangocms_blog/includes/blog_item.html:24 msgid "read more" msgstr "devamını oku" diff --git a/djangocms_blog/managers.py b/djangocms_blog/managers.py index 644fbc6..ecd1900 100644 --- a/djangocms_blog/managers.py +++ b/djangocms_blog/managers.py @@ -99,8 +99,8 @@ class GenericDateQuerySet(AppHookConfigTranslatableQueryset): queryset = self.on_site() if self.end_date_field: qfilter = ( - models.Q(**{'%s__gte' % self.end_date_field: now()}) - | models.Q(**{'%s__isnull' % self.end_date_field: True}) + models.Q(**{'%s__gte' % self.end_date_field: now()}) | + models.Q(**{'%s__isnull' % self.end_date_field: True}) ) queryset = queryset.filter(qfilter) return queryset.filter(**{self.publish_field: True}) @@ -109,8 +109,8 @@ class GenericDateQuerySet(AppHookConfigTranslatableQueryset): queryset = self.on_site() if self.end_date_field: qfilter = ( - models.Q(**{'%s__lte' % self.end_date_field: now()}) - | models.Q(**{'%s__isnull' % self.end_date_field: False}) + models.Q(**{'%s__lte' % self.end_date_field: now()}) | + models.Q(**{'%s__isnull' % self.end_date_field: False}) ) queryset = queryset.filter(qfilter) return queryset.filter(**{self.publish_field: True}) diff --git a/djangocms_blog/menu.py b/djangocms_blog/menu.py index 6b4e883..6be7aad 100644 --- a/djangocms_blog/menu.py +++ b/djangocms_blog/menu.py @@ -1,21 +1,34 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals +from cms.apphook_pool import apphook_pool from cms.menu_bases import CMSAttachMenu +from django.core.urlresolvers import resolve from django.db.models.signals import post_delete, post_save from django.utils.translation import get_language_from_request, ugettext_lazy as _ -from menus.base import NavigationNode +from menus.base import Modifier, NavigationNode from menus.menu_pool import menu_pool from .cms_appconfig import BlogConfig from .models import BlogCategory, Post -from .settings import MENU_TYPE_CATEGORIES, MENU_TYPE_COMPLETE, MENU_TYPE_POSTS +from .settings import MENU_TYPE_CATEGORIES, MENU_TYPE_COMPLETE, MENU_TYPE_POSTS, get_setting class BlogCategoryMenu(CMSAttachMenu): + """ + Main menu class + + Handles all types of blog menu + """ name = _('Blog menu') def get_nodes(self, request): + """ + Generates the nodelist + + :param request: + :return: list of nodes + """ nodes = [] language = get_language_from_request(request, check_path=True) @@ -25,9 +38,9 @@ class BlogCategoryMenu(CMSAttachMenu): config = False if hasattr(self, 'instance') and self.instance: config = BlogConfig.objects.get(namespace=self.instance.application_namespace) - if config.menu_structure in (MENU_TYPE_COMPLETE, MENU_TYPE_CATEGORIES): + if config and config.menu_structure in (MENU_TYPE_COMPLETE, MENU_TYPE_CATEGORIES): categories_menu = True - if config.menu_structure in (MENU_TYPE_COMPLETE, MENU_TYPE_POSTS): + if config and config.menu_structure in (MENU_TYPE_COMPLETE, MENU_TYPE_POSTS): posts_menu = True if categories_menu: @@ -40,9 +53,12 @@ class BlogCategoryMenu(CMSAttachMenu): node = NavigationNode( category.name, category.get_absolute_url(), - '%s-%s' % (category.__class__.__name__, category.pk), - ('%s-%s' % (category.__class__.__name__, category.parent.id) if category.parent - else None) + '{0}-{1}'.format(category.__class__.__name__, category.pk), + ( + '{0}-{1}'.format( + category.__class__.__name__, category.parent.id + ) if category.parent else None + ) ) nodes.append(node) @@ -52,27 +68,77 @@ class BlogCategoryMenu(CMSAttachMenu): posts = posts.namespace(self.instance.application_namespace) posts = posts.active_translations(language).distinct() for post in posts: + post_id = None + parent = None if categories_menu: category = post.categories.first() - parent = '%s-%s' % (category.__class__.__name__, category.pk) - post_id = '%s-%s' % (post.__class__.__name__, post.pk), + if category: + parent = '{0}-{1}'.format(category.__class__.__name__, category.pk) + post_id = '{0}-{1}'.format(post.__class__.__name__, post.pk), else: - parent = None - post_id = '%s-%s' % (post.__class__.__name__, post.pk), - node = NavigationNode( - post.get_title(), - post.get_absolute_url(language), - post_id, - parent - ) - nodes.append(node) + post_id = '{0}-{1}'.format(post.__class__.__name__, post.pk), + if post_id: + node = NavigationNode( + post.get_title(), + post.get_absolute_url(language), + post_id, + parent + ) + nodes.append(node) return nodes menu_pool.register_menu(BlogCategoryMenu) +class BlogNavModifier(Modifier): + """ + This navigation modifier makes sure that when + a particular blog post is viewed, + a corresponding category is selected in menu + """ + def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb): + """ + Actual modifier function + :param request: request + :param nodes: complete list of nodes + :param namespace: Menu namespace + :param root_id: eventual root_id + :param post_cut: flag for modifier stage + :param breadcrumb: flag for modifier stage + :return: nodeslist + """ + app = None + config = None + if getattr(request, 'current_page', None) and request.current_page.application_urls: + app = apphook_pool.get_apphook(request.current_page.application_urls) + + if app and app.app_config: + namespace = resolve(request.path).namespace + config = app.get_config(namespace) + if config and config.menu_structure != MENU_TYPE_CATEGORIES: + return nodes + if post_cut: + return nodes + current_post = getattr(request, get_setting('CURRENT_POST_IDENTIFIER'), None) + category = None + if current_post and current_post.__class__ == Post: + category = current_post.categories.first() + if not category: + return nodes + + for node in nodes: + if '{0}-{1}'.format(category.__class__.__name__, category.pk) == node.id: + node.selected = True + return nodes + +menu_pool.register_modifier(BlogNavModifier) + + def clear_menu_cache(**kwargs): + """ + Empty menu cache when saving categories + """ menu_pool.clear(all=True) post_save.connect(clear_menu_cache, sender=BlogCategory) diff --git a/djangocms_blog/migrations/0001_initial.py b/djangocms_blog/migrations/0001_initial.py index 3e993ba..24e53a0 100644 --- a/djangocms_blog/migrations/0001_initial.py +++ b/djangocms_blog/migrations/0001_initial.py @@ -8,13 +8,18 @@ import filer.fields.image import meta_mixin.models import taggit_autosuggest.managers from django.conf import settings -from django.db import models, migrations +from django.db import migrations, models +from djangocms_blog.models import thumbnail_model +from filer.settings import FILER_IMAGE_MODEL + +ACTUAL_FILER_IMAGE_MODEL = FILER_IMAGE_MODEL or 'filer.Image' class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), + migrations.swappable_dependency(ACTUAL_FILER_IMAGE_MODEL), ('cms', '__latest__'), ('taggit', '__latest__'), ('filer', '__latest__'), @@ -90,9 +95,9 @@ class Migration(migrations.Migration): ('author', models.ForeignKey(related_name='djangocms_blog_post_author', verbose_name='Author', blank=True, to=settings.AUTH_USER_MODEL, null=True)), ('categories', models.ManyToManyField(related_name='blog_posts', verbose_name='category', to='djangocms_blog.BlogCategory')), ('content', cms.models.fields.PlaceholderField(slotname='post_content', editable=False, to='cms.Placeholder', null=True)), - ('main_image', filer.fields.image.FilerImageField(related_name='djangocms_blog_post_image', verbose_name='Main image', blank=True, to='filer.Image', null=True)), - ('main_image_full', models.ForeignKey(related_name='djangocms_blog_post_full', verbose_name='Main image full', blank=True, to='cmsplugin_filer_image.ThumbnailOption', null=True)), - ('main_image_thumbnail', models.ForeignKey(related_name='djangocms_blog_post_thumbnail', verbose_name='Main image thumbnail', blank=True, to='cmsplugin_filer_image.ThumbnailOption', null=True)), + ('main_image', filer.fields.image.FilerImageField(related_name='djangocms_blog_post_image', verbose_name='Main image', blank=True, to=ACTUAL_FILER_IMAGE_MODEL, null=True)), + ('main_image_full', models.ForeignKey(related_name='djangocms_blog_post_full', verbose_name='Main image full', blank=True, to=thumbnail_model, null=True)), + ('main_image_thumbnail', models.ForeignKey(related_name='djangocms_blog_post_thumbnail', verbose_name='Main image thumbnail', blank=True, to=thumbnail_model, null=True)), ('tags', taggit_autosuggest.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')), ], options={ diff --git a/djangocms_blog/migrations/0004_auto_20150108_1435.py b/djangocms_blog/migrations/0004_auto_20150108_1435.py index 8bfa4b4..b316abd 100644 --- a/djangocms_blog/migrations/0004_auto_20150108_1435.py +++ b/djangocms_blog/migrations/0004_auto_20150108_1435.py @@ -1,14 +1,19 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations -import filer.fields.image import django.db.models.deletion +import filer.fields.image +from django.db import migrations, models +from djangocms_blog.models import thumbnail_model +from filer.settings import FILER_IMAGE_MODEL + +ACTUAL_FILER_IMAGE_MODEL = FILER_IMAGE_MODEL or 'filer.Image' class Migration(migrations.Migration): dependencies = [ + migrations.swappable_dependency(ACTUAL_FILER_IMAGE_MODEL), ('djangocms_blog', '0003_auto_20141201_2252'), ] @@ -16,19 +21,19 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='post', name='main_image', - field=filer.fields.image.FilerImageField(related_name='djangocms_blog_post_image', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image', blank=True, to='filer.Image', null=True), + field=filer.fields.image.FilerImageField(related_name='djangocms_blog_post_image', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image', blank=True, to=ACTUAL_FILER_IMAGE_MODEL, null=True), preserve_default=True, ), migrations.AlterField( model_name='post', name='main_image_full', - field=models.ForeignKey(related_name='djangocms_blog_post_full', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image full', blank=True, to='cmsplugin_filer_image.ThumbnailOption', null=True), + field=models.ForeignKey(related_name='djangocms_blog_post_full', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image full', blank=True, to=thumbnail_model, null=True), preserve_default=True, ), migrations.AlterField( model_name='post', name='main_image_thumbnail', - field=models.ForeignKey(related_name='djangocms_blog_post_thumbnail', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image thumbnail', blank=True, to='cmsplugin_filer_image.ThumbnailOption', null=True), + field=models.ForeignKey(related_name='djangocms_blog_post_thumbnail', on_delete=django.db.models.deletion.SET_NULL, verbose_name='Main image thumbnail', blank=True, to=thumbnail_model, null=True), preserve_default=True, ), ] diff --git a/djangocms_blog/migrations/0007_auto_20150719_0933.py b/djangocms_blog/migrations/0007_auto_20150719_0933.py index 7b62d62..f5fa900 100644 --- a/djangocms_blog/migrations/0007_auto_20150719_0933.py +++ b/djangocms_blog/migrations/0007_auto_20150719_0933.py @@ -1,18 +1,23 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations -import filer.fields.image -import django.utils.timezone -from django.conf import settings -import djangocms_text_ckeditor.fields import django.db.models.deletion +import django.utils.timezone +import djangocms_text_ckeditor.fields +import filer.fields.image +from django.conf import settings +from django.db import migrations, models +from djangocms_blog.models import thumbnail_model +from filer.settings import FILER_IMAGE_MODEL + +ACTUAL_FILER_IMAGE_MODEL = FILER_IMAGE_MODEL or 'filer.Image' class Migration(migrations.Migration): dependencies = [ ('djangocms_blog', '0006_auto_20150214_1907'), + migrations.swappable_dependency(ACTUAL_FILER_IMAGE_MODEL), ] operations = [ @@ -99,19 +104,19 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='post', name='main_image', - field=filer.fields.image.FilerImageField(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image', to='filer.Image', related_name='djangocms_blog_post_image', null=True), + field=filer.fields.image.FilerImageField(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image', to=ACTUAL_FILER_IMAGE_MODEL, related_name='djangocms_blog_post_image', null=True), preserve_default=True, ), migrations.AlterField( model_name='post', name='main_image_full', - field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image full', to='cmsplugin_filer_image.ThumbnailOption', related_name='djangocms_blog_post_full', null=True), + field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image full', to=thumbnail_model, related_name='djangocms_blog_post_full', null=True), preserve_default=True, ), migrations.AlterField( model_name='post', name='main_image_thumbnail', - field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image thumbnail', to='cmsplugin_filer_image.ThumbnailOption', related_name='djangocms_blog_post_thumbnail', null=True), + field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image thumbnail', to=thumbnail_model, related_name='djangocms_blog_post_thumbnail', null=True), preserve_default=True, ), migrations.AlterField( diff --git a/djangocms_blog/migrations/0010_auto_20150923_1151.py b/djangocms_blog/migrations/0010_auto_20150923_1151.py index 1b541d3..fa01b5f 100644 --- a/djangocms_blog/migrations/0010_auto_20150923_1151.py +++ b/djangocms_blog/migrations/0010_auto_20150923_1151.py @@ -4,37 +4,9 @@ from __future__ import unicode_literals import aldryn_apphooks_config.fields import app_data.fields import djangocms_text_ckeditor.fields -from cms.models import Page -from cms.utils.i18n import get_language_list from django.db import models, migrations -def forwards(apps, schema_editor): - BlogConfig = apps.get_model('djangocms_blog', 'BlogConfig') - BlogConfigTranslation = apps.get_model('djangocms_blog', 'BlogConfigTranslation') - Post = apps.get_model('djangocms_blog', 'Post') - BlogCategory = apps.get_model('djangocms_blog', 'BlogCategory') - GenericBlogPlugin = apps.get_model('djangocms_blog', 'GenericBlogPlugin') - LatestPostsPlugin = apps.get_model('djangocms_blog', 'LatestPostsPlugin') - AuthorEntriesPlugin = apps.get_model('djangocms_blog', 'AuthorEntriesPlugin') - config = None - for page in Page.objects.drafts().filter(application_urls='BlogApp'): - config = BlogConfig.objects.create(namespace=page.application_namespace) - for lang in get_language_list(): - title = page.get_title(lang) - translation = BlogConfigTranslation.objects.create(language_code=lang, master_id=config.pk, app_title=title) - if config: - for model in (Post, BlogCategory, GenericBlogPlugin, LatestPostsPlugin, AuthorEntriesPlugin): - for item in model.objects.all(): - item.app_config = config - item.save() - - -def backwards(apps, schema_editor): - # No need for backward data migration - pass - - class Migration(migrations.Migration): dependencies = [ @@ -120,5 +92,4 @@ class Migration(migrations.Migration): name='sites', field=models.ManyToManyField(to='sites.Site', help_text='Select sites in which to show the post. If none is set it will be visible in all the configured sites.', blank=True, verbose_name='Site(s)'), ), - migrations.RunPython(forwards, backwards) ] diff --git a/djangocms_blog/migrations/0012_auto_20151220_1734.py b/djangocms_blog/migrations/0012_auto_20151220_1734.py new file mode 100644 index 0000000..1d469fd --- /dev/null +++ b/djangocms_blog/migrations/0012_auto_20151220_1734.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('djangocms_blog', '0011_auto_20151024_1809'), + ] + + operations = [ + migrations.AlterModelOptions( + name='blogconfig', + options={'verbose_name': 'blog config', 'verbose_name_plural': 'blog configs'}, + ), + ] diff --git a/djangocms_blog/migrations/0013_auto_20160201_2235.py b/djangocms_blog/migrations/0013_auto_20160201_2235.py new file mode 100644 index 0000000..ffdafe1 --- /dev/null +++ b/djangocms_blog/migrations/0013_auto_20160201_2235.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-02-01 21:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('djangocms_blog', '0012_auto_20151220_1734'), + ] + + operations = [ + migrations.AlterField( + model_name='post', + name='categories', + field=models.ManyToManyField(blank=True, related_name='blog_posts', to='djangocms_blog.BlogCategory', verbose_name='category'), + ), + ] diff --git a/djangocms_blog/migrations/0014_auto_20160215_1331.py b/djangocms_blog/migrations/0014_auto_20160215_1331.py new file mode 100644 index 0000000..fc0a231 --- /dev/null +++ b/djangocms_blog/migrations/0014_auto_20160215_1331.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from cms.models import Page +from cms.utils.i18n import get_language_list +from django.db import migrations, models + + +def forwards(apps, schema_editor): + BlogConfig = apps.get_model('djangocms_blog', 'BlogConfig') + BlogConfigTranslation = apps.get_model('djangocms_blog', 'BlogConfigTranslation') + Post = apps.get_model('djangocms_blog', 'Post') + BlogCategory = apps.get_model('djangocms_blog', 'BlogCategory') + GenericBlogPlugin = apps.get_model('djangocms_blog', 'GenericBlogPlugin') + LatestPostsPlugin = apps.get_model('djangocms_blog', 'LatestPostsPlugin') + AuthorEntriesPlugin = apps.get_model('djangocms_blog', 'AuthorEntriesPlugin') + config = None + for page in Page.objects.drafts().filter(application_urls='BlogApp'): + config, created = BlogConfig.objects.get_or_create(namespace=page.application_namespace) + if not BlogConfigTranslation.objects.exists(): + for lang in get_language_list(): + title = page.get_title(lang) + translation = BlogConfigTranslation.objects.create(language_code=lang, master_id=config.pk, app_title=title) + if config: + for model in (Post, BlogCategory, GenericBlogPlugin, LatestPostsPlugin, AuthorEntriesPlugin): + for item in model.objects.filter(app_config__isnull=True): + item.app_config = config + item.save() + + +def backwards(apps, schema_editor): + # No need for backward data migration + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('djangocms_blog', '0013_auto_20160201_2235'), + ] + + operations = [ + migrations.RunPython(forwards, backwards), + ] diff --git a/djangocms_blog/models.py b/djangocms_blog/models.py index 3e74137..564c570 100644 --- a/djangocms_blog/models.py +++ b/djangocms_blog/models.py @@ -5,6 +5,7 @@ from aldryn_apphooks_config.fields import AppHookConfigField from aldryn_apphooks_config.managers.parler import AppHookConfigTranslatableManager from cms.models import CMSPlugin, PlaceholderField from django.conf import settings as dj_settings +from django.contrib.auth import get_user_model from django.core.urlresolvers import reverse from django.db import models from django.utils import timezone @@ -25,6 +26,13 @@ from .settings import get_setting BLOG_CURRENT_POST_IDENTIFIER = get_setting('CURRENT_POST_IDENTIFIER') BLOG_CURRENT_NAMESPACE = get_setting('CURRENT_NAMESPACE') +try: + from filer.models import ThumbnailOption # NOQA + thumbnail_model = 'filer.ThumbnailOption' +except ImportError: + from cmsplugin_filer_image.models import ThumbnailOption # NOQA + thumbnail_model = 'cmsplugin_filer_image.ThumbnailOption' + @python_2_unicode_compatible class BlogCategory(TranslatableModel): @@ -99,16 +107,16 @@ class Post(ModelMeta, TranslatableModel): blank=True) publish = models.BooleanField(_('publish'), default=False) categories = models.ManyToManyField('djangocms_blog.BlogCategory', verbose_name=_('category'), - related_name='blog_posts',) + related_name='blog_posts', blank=True) main_image = FilerImageField(verbose_name=_('main image'), blank=True, null=True, on_delete=models.SET_NULL, related_name='djangocms_blog_post_image') - main_image_thumbnail = models.ForeignKey('cmsplugin_filer_image.ThumbnailOption', + main_image_thumbnail = models.ForeignKey(thumbnail_model, verbose_name=_('main image thumbnail'), related_name='djangocms_blog_post_thumbnail', on_delete=models.SET_NULL, blank=True, null=True) - main_image_full = models.ForeignKey('cmsplugin_filer_image.ThumbnailOption', + main_image_full = models.ForeignKey(thumbnail_model, verbose_name=_('main image full'), related_name='djangocms_blog_post_full', on_delete=models.SET_NULL, @@ -231,7 +239,7 @@ class Post(ModelMeta, TranslatableModel): return title.strip() def get_keywords(self): - return self.safe_translation_getter('meta_keywords').strip().split(',') + return self.safe_translation_getter('meta_keywords', default='').strip().split(',') def get_locale(self): return self.get_current_language() @@ -254,6 +262,14 @@ class Post(ModelMeta, TranslatableModel): def get_author(self): return self.author + def _set_default_author(self, current_user): + if not self.author_id and self.app_config.set_author: + if get_setting('AUTHOR_DEFAULT') is True: + user = current_user + else: + user = get_user_model().objects.get(username=get_setting('AUTHOR_DEFAULT')) + self.author = user + def thumbnail_options(self): if self.main_image_thumbnail_id: return self.main_image_thumbnail.as_dict @@ -308,6 +324,8 @@ class LatestPostsPlugin(BasePostPlugin): def copy_relations(self, oldinstance): for tag in oldinstance.tags.all(): self.tags.add(tag) + for category in oldinstance.categories.all(): + self.categories.add(category) def get_posts(self, request): posts = self.post_queryset(request) diff --git a/djangocms_blog/search_indexes.py b/djangocms_blog/search_indexes.py index 01baee9..2e9c8d0 100644 --- a/djangocms_blog/search_indexes.py +++ b/djangocms_blog/search_indexes.py @@ -15,20 +15,17 @@ class PostIndex(get_index_base()): author = indexes.CharField(indexed=True, model_attr='get_author') keywords = indexes.CharField(null=True) - tags = indexes.CharField(null=True) + tags = indexes.CharField(null=True, model_attr='get_tags') post_text = indexes.CharField(null=True) - def get_keywords(self, post): - return ','.join(post.get_keywords()) - def get_title(self, post): - return post.safe_translation_getter('title') + return post.get_title() def get_description(self, post): return post.get_description() def prepare_pub_date(self, post): - return post.date_published.strftime("%Y-%m-%d %H:%M:%S") + return post.date_published def index_queryset(self, using=None): self._get_backend(using) @@ -47,32 +44,36 @@ class PostIndex(get_index_base()): return Post def get_search_data(self, post, language, request): - optional_attributes = [] - abstract = post.safe_translation_getter('abstract') - text_bits = [post.get_title()] - text_bits.append(strip_tags(abstract)) - text_bits.append(post.get_description()) - text_bits.append(' '.join(post.get_keywords())) + description = post.get_description() + abstract = strip_tags(post.safe_translation_getter('abstract', default='')) + keywords = post.get_keywords() + + text_bits = [] + if abstract: + text_bits.append(abstract) + if description: + text_bits.append(description) + if keywords: + text_bits.append(' '.join(keywords)) + self.prepared_data['keywords'] = ','.join(keywords) for category in post.categories.all(): text_bits.append( force_text(category.safe_translation_getter('name'))) for tag in post.tags.all(): text_bits.append(force_text(tag.name)) - if post.content: + + if get_setting('USE_PLACEHOLDER'): plugins = post.content.cmsplugin_set.filter(language=language) + content_bits = [] for base_plugin in plugins: content = get_plugin_index_data(base_plugin, request) - text_bits.append(' '.join(content)) - for attribute in optional_attributes: - value = force_text(getattr(post, attribute)) - if value and value not in text_bits: - text_bits.append(value) - return ' '.join(text_bits) + content_bits.append(' '.join(content)) + post_text = ' '.join(content_bits) + else: + post_text = post.safe_translation_getter('post_text') + if post_text: + post_text = strip_tags(post_text) + self.prepared_data['post_text'] = post_text + text_bits.append(post_text) - def prepare_fields(self, post, language, request): - super(PostIndex, self).prepare_fields(post, language, request) - data = [self.prepared_data['text']] - self.prepared_data['keywords'] = ' '.join(post.get_keywords()) - self.prepared_data['tags'] = ' '.join(post.get_tags()) - self.prepared_data['post_text'] = ' '.join(post.safe_translation_getter('post_text')) - self.prepared_data['text'] = ' '.join(data) + return ' '.join(text_bits) diff --git a/djangocms_blog/settings.py b/djangocms_blog/settings.py index 7538a1c..3fb98c5 100644 --- a/djangocms_blog/settings.py +++ b/djangocms_blog/settings.py @@ -80,6 +80,8 @@ def get_setting(name): 'BLOG_MULTISITE': getattr(settings, 'BLOG_MULTISITE', True), 'BLOG_AUTHOR_DEFAULT': getattr(settings, 'BLOG_AUTHOR_DEFAULT', True), 'BLOG_DEFAULT_PUBLISHED': getattr(settings, 'BLOG_DEFAULT_PUBLISHED', False), + 'BLOG_ADMIN_POST_FIELDSET_FILTER': getattr( + settings, 'BLOG_ADMIN_POST_FIELDSET_FILTER', False), 'BLOG_AVAILABLE_PERMALINK_STYLES': getattr( settings, 'BLOG_AVAILABLE_PERMALINK_STYLES', PERMALINKS ), diff --git a/djangocms_blog/south_migrations/0001_initial.py b/djangocms_blog/south_migrations/0001_initial.py index b3087dc..e61d8f8 100644 --- a/djangocms_blog/south_migrations/0001_initial.py +++ b/djangocms_blog/south_migrations/0001_initial.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from django.contrib.auth import get_user_model from django.utils import timezone +from djangocms_blog.models import thumbnail_model from south.db import db from south.v2 import SchemaMigration from django.db import models @@ -66,8 +67,8 @@ class Migration(SchemaMigration): ('date_published_end', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), ('publish', self.gf('django.db.models.fields.BooleanField')(default=False)), ('main_image', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['filer.Image'], null=True, blank=True)), - ('main_image_thumbnail', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='blog_post_thumbnail', null=True, to=orm['cmsplugin_filer_image.ThumbnailOption'])), - ('main_image_full', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='blog_post_full', null=True, to=orm['cmsplugin_filer_image.ThumbnailOption'])), + ('main_image_thumbnail', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='blog_post_thumbnail', null=True, to=orm[thumbnail_model])), + ('main_image_full', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='blog_post_full', null=True, to=orm[thumbnail_model])), ('content', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['cms.Placeholder'], null=True)), )) db.send_create_signal(u'djangocms_blog', ['Post']) @@ -218,7 +219,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -273,8 +274,8 @@ class Migration(SchemaMigration): 'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, u'djangocms_blog.posttranslation': { diff --git a/djangocms_blog/south_migrations/0002_auto__del_blogcategorytranslation__del_unique_blogcategorytranslation_.py b/djangocms_blog/south_migrations/0002_auto__del_blogcategorytranslation__del_unique_blogcategorytranslation_.py index 0f6a554..f2a3583 100644 --- a/djangocms_blog/south_migrations/0002_auto__del_blogcategorytranslation__del_unique_blogcategorytranslation_.py +++ b/djangocms_blog/south_migrations/0002_auto__del_blogcategorytranslation__del_unique_blogcategorytranslation_.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from django.conf import settings as dj_settings +from djangocms_blog.models import thumbnail_model from south.db import db from south.v2 import SchemaMigration @@ -12,7 +13,7 @@ class Migration(SchemaMigration): def backwards(self, orm): raise RuntimeError("Cannot reverse this migration. 'Post.author' and its values cannot be restored.") - + # The following code is provided here to aid in writing a correct migration # Changing field 'Post.author' db.alter_column(u'djangocms_blog_post', 'author_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm[dj_settings.AUTH_USER_MODEL])) @@ -68,7 +69,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -123,8 +124,8 @@ class Migration(SchemaMigration): 'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, u'djangocms_blog.post_translation': { diff --git a/djangocms_blog/south_migrations/0003_rename_plugins.py b/djangocms_blog/south_migrations/0003_rename_plugins.py index 2c62b0d..27adfcd 100644 --- a/djangocms_blog/south_migrations/0003_rename_plugins.py +++ b/djangocms_blog/south_migrations/0003_rename_plugins.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from django.conf import settings as dj_settings +from djangocms_blog.models import thumbnail_model from south.db import db from south.v2 import SchemaMigration @@ -67,7 +68,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -122,8 +123,8 @@ class Migration(SchemaMigration): 'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, u'djangocms_blog.posttranslation': { diff --git a/djangocms_blog/south_migrations/0004_auto__add_field_posttranslation_meta_description.py b/djangocms_blog/south_migrations/0004_auto__add_field_posttranslation_meta_description.py index 81518b1..678676d 100644 --- a/djangocms_blog/south_migrations/0004_auto__add_field_posttranslation_meta_description.py +++ b/djangocms_blog/south_migrations/0004_auto__add_field_posttranslation_meta_description.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from django.conf import settings as dj_settings +from djangocms_blog.models import thumbnail_model from south.db import db from south.v2 import SchemaMigration @@ -69,7 +70,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -124,8 +125,8 @@ class Migration(SchemaMigration): 'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, u'djangocms_blog.posttranslation': { @@ -197,4 +198,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0005_auto__add_field_posttranslation_meta_keywords.py b/djangocms_blog/south_migrations/0005_auto__add_field_posttranslation_meta_keywords.py index 5af45bf..e0162a4 100644 --- a/djangocms_blog/south_migrations/0005_auto__add_field_posttranslation_meta_keywords.py +++ b/djangocms_blog/south_migrations/0005_auto__add_field_posttranslation_meta_keywords.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from django.conf import settings as dj_settings +from djangocms_blog.models import thumbnail_model from south.db import db from south.v2 import SchemaMigration @@ -69,7 +70,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -124,8 +125,8 @@ class Migration(SchemaMigration): 'date_published_end': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['filer.Image']", 'null': 'True', 'blank': 'True'}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, u'djangocms_blog.posttranslation': { @@ -198,4 +199,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0006_auto__add_field_post_enable_comments.py b/djangocms_blog/south_migrations/0006_auto__add_field_post_enable_comments.py index 228f717..f32a066 100644 --- a/djangocms_blog/south_migrations/0006_auto__add_field_post_enable_comments.py +++ b/djangocms_blog/south_migrations/0006_auto__add_field_post_enable_comments.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from django.conf import settings as dj_settings +from djangocms_blog.models import thumbnail_model from south.db import db from south.v2 import SchemaMigration @@ -69,7 +70,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -125,8 +126,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, u'djangocms_blog.posttranslation': { @@ -193,4 +194,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0007_auto__add_field_posttranslation_post_text.py b/djangocms_blog/south_migrations/0007_auto__add_field_posttranslation_post_text.py index f1da468..13c9238 100644 --- a/djangocms_blog/south_migrations/0007_auto__add_field_posttranslation_post_text.py +++ b/djangocms_blog/south_migrations/0007_auto__add_field_posttranslation_post_text.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from django.conf import settings as dj_settings +from djangocms_blog.models import thumbnail_model from south.db import db from south.v2 import SchemaMigration @@ -69,7 +70,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -125,8 +126,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, u'djangocms_blog.posttranslation': { @@ -194,4 +195,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0008_auto__add_field_posttranslation_meta_title.py b/djangocms_blog/south_migrations/0008_auto__add_field_posttranslation_meta_title.py index e05f7c8..fa79231 100644 --- a/djangocms_blog/south_migrations/0008_auto__add_field_posttranslation_meta_title.py +++ b/djangocms_blog/south_migrations/0008_auto__add_field_posttranslation_meta_title.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration @@ -70,7 +71,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -126,8 +127,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, u'djangocms_blog.posttranslation': { @@ -196,4 +197,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0009_auto.py b/djangocms_blog/south_migrations/0009_auto.py index 73e6fa1..234f63f 100644 --- a/djangocms_blog/south_migrations/0009_auto.py +++ b/djangocms_blog/south_migrations/0009_auto.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration @@ -74,7 +75,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "('width', 'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -130,8 +131,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}) }, @@ -206,4 +207,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0010_auto__chg_field_post_main_image_full__chg_field_post_main_image__chg_f.py b/djangocms_blog/south_migrations/0010_auto__chg_field_post_main_image_full__chg_field_post_main_image__chg_f.py index d3e8266..1def8b8 100644 --- a/djangocms_blog/south_migrations/0010_auto__chg_field_post_main_image_full__chg_field_post_main_image__chg_f.py +++ b/djangocms_blog/south_migrations/0010_auto__chg_field_post_main_image_full__chg_field_post_main_image__chg_f.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration @@ -10,24 +11,24 @@ class Migration(SchemaMigration): def forwards(self, orm): # Changing field 'Post.main_image_full' - db.alter_column(u'djangocms_blog_post', 'main_image_full_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['cmsplugin_filer_image.ThumbnailOption'])) + db.alter_column(u'djangocms_blog_post', 'main_image_full_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm[thumbnail_model])) # Changing field 'Post.main_image' db.alter_column(u'djangocms_blog_post', 'main_image_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['filer.Image'])) # Changing field 'Post.main_image_thumbnail' - db.alter_column(u'djangocms_blog_post', 'main_image_thumbnail_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['cmsplugin_filer_image.ThumbnailOption'])) + db.alter_column(u'djangocms_blog_post', 'main_image_thumbnail_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm[thumbnail_model])) def backwards(self, orm): # Changing field 'Post.main_image_full' - db.alter_column(u'djangocms_blog_post', 'main_image_full_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['cmsplugin_filer_image.ThumbnailOption'])) + db.alter_column(u'djangocms_blog_post', 'main_image_full_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm[thumbnail_model])) # Changing field 'Post.main_image' db.alter_column(u'djangocms_blog_post', 'main_image_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['filer.Image'])) # Changing field 'Post.main_image_thumbnail' - db.alter_column(u'djangocms_blog_post', 'main_image_thumbnail_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['cmsplugin_filer_image.ThumbnailOption'])) + db.alter_column(u'djangocms_blog_post', 'main_image_thumbnail_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm[thumbnail_model])) models = { u'auth.group': { @@ -80,7 +81,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -136,8 +137,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}) }, @@ -212,4 +213,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0011_chg_field_post_translation_abstract.py b/djangocms_blog/south_migrations/0011_chg_field_post_translation_abstract.py index d71f869..c828bbd 100644 --- a/djangocms_blog/south_migrations/0011_chg_field_post_translation_abstract.py +++ b/djangocms_blog/south_migrations/0011_chg_field_post_translation_abstract.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from south.db import db from south.v2 import SchemaMigration @@ -61,7 +62,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255'}) }, - 'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'object_name': 'ThumbnailOption', 'ordering': "('width', 'height')"}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -117,8 +118,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['filer.Image']", 'null': 'True', 'related_name': "'djangocms_blog_post_image'"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['cmsplugin_filer_image.ThumbnailOption']", 'null': 'True', 'related_name': "'djangocms_blog_post_full'"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm['cmsplugin_filer_image.ThumbnailOption']", 'null': 'True', 'related_name': "'djangocms_blog_post_thumbnail'"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm[thumbnail_model]", 'null': 'True', 'related_name': "'djangocms_blog_post_full'"}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'blank': 'True', 'to': "orm[thumbnail_model]", 'null': 'True', 'related_name': "'djangocms_blog_post_thumbnail'"}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'to': "orm['sites.Site']", 'null': 'True', 'symmetrical': 'False'}) }, diff --git a/djangocms_blog/south_migrations/0012_move_tags.py b/djangocms_blog/south_migrations/0012_move_tags.py index bcf9def..b63a9d4 100644 --- a/djangocms_blog/south_migrations/0012_move_tags.py +++ b/djangocms_blog/south_migrations/0012_move_tags.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from django.contrib.contenttypes.models import ContentType from south.utils import datetime_utils as datetime from south.db import db @@ -90,7 +91,7 @@ class Migration(DataMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -146,8 +147,8 @@ class Migration(DataMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}) }, diff --git a/djangocms_blog/south_migrations/0013_auto.py b/djangocms_blog/south_migrations/0013_auto.py index c1c4d16..865679b 100644 --- a/djangocms_blog/south_migrations/0013_auto.py +++ b/djangocms_blog/south_migrations/0013_auto.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration @@ -73,7 +74,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -128,8 +129,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['sites.Site']", 'null': 'True', 'blank': 'True'}) }, @@ -198,4 +199,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0014_auto__add_genericblogplugin__add_blogconfig__add_blogconfigtranslation.py b/djangocms_blog/south_migrations/0014_auto__add_genericblogplugin__add_blogconfig__add_blogconfigtranslation.py index ecd1300..9ce9ec3 100644 --- a/djangocms_blog/south_migrations/0014_auto__add_genericblogplugin__add_blogconfig__add_blogconfigtranslation.py +++ b/djangocms_blog/south_migrations/0014_auto__add_genericblogplugin__add_blogconfig__add_blogconfigtranslation.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration @@ -133,7 +134,7 @@ class Migration(SchemaMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -211,8 +212,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}) }, @@ -282,4 +283,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0015_create_appconfig.py b/djangocms_blog/south_migrations/0015_create_appconfig.py index 7f8e270..e38bed9 100644 --- a/djangocms_blog/south_migrations/0015_create_appconfig.py +++ b/djangocms_blog/south_migrations/0015_create_appconfig.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from south.utils import datetime_utils as datetime from south.db import db from south.v2 import DataMigration @@ -84,7 +85,7 @@ class Migration(DataMigration): u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}) }, - u'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'ordering': "(u'width', u'height')", 'object_name': 'ThumbnailOption'}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -162,8 +163,8 @@ class Migration(DataMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_image'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': "orm['filer.Image']"}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['cmsplugin_filer_image.ThumbnailOption']"}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_full'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "u'djangocms_blog_post_thumbnail'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['%s']" % thumbnail_model}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['sites.Site']", 'symmetrical': 'False', 'blank': 'True'}) }, @@ -233,4 +234,4 @@ class Migration(DataMigration): } } - complete_apps = ['djangocms_blog'] \ No newline at end of file + complete_apps = ['djangocms_blog'] diff --git a/djangocms_blog/south_migrations/0016_auto__add_field_blogconfigtranslation_object_name.py b/djangocms_blog/south_migrations/0016_auto__add_field_blogconfigtranslation_object_name.py index 22c47d9..4eed613 100644 --- a/djangocms_blog/south_migrations/0016_auto__add_field_blogconfigtranslation_object_name.py +++ b/djangocms_blog/south_migrations/0016_auto__add_field_blogconfigtranslation_object_name.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from djangocms_blog.models import thumbnail_model from south.utils import datetime_utils as datetime from south.db import db from south.v2 import SchemaMigration @@ -70,7 +71,7 @@ class Migration(SchemaMigration): 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'slot': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}) }, - 'cmsplugin_filer_image.thumbnailoption': { + thumbnail_model: { 'Meta': {'object_name': 'ThumbnailOption', 'ordering': "('width', 'height')"}, 'crop': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'height': ('django.db.models.fields.IntegerField', [], {}), @@ -149,8 +150,8 @@ class Migration(SchemaMigration): 'enable_comments': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'main_image': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['filer.Image']", 'related_name': "'djangocms_blog_post_image'", 'blank': 'True'}), - 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['cmsplugin_filer_image.ThumbnailOption']", 'related_name': "'djangocms_blog_post_full'", 'blank': 'True'}), - 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm['cmsplugin_filer_image.ThumbnailOption']", 'related_name': "'djangocms_blog_post_thumbnail'", 'blank': 'True'}), + 'main_image_full': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm[thumbnail_model]", 'related_name': "'djangocms_blog_post_full'", 'blank': 'True'}), + 'main_image_thumbnail': ('django.db.models.fields.related.ForeignKey', [], {'on_delete': 'models.SET_NULL', 'null': 'True', 'to': "orm[thumbnail_model]", 'related_name': "'djangocms_blog_post_thumbnail'", 'blank': 'True'}), 'publish': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'sites': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['sites.Site']", 'blank': 'True'}) }, diff --git a/djangocms_blog/templates/djangocms_blog/base.html b/djangocms_blog/templates/djangocms_blog/base.html index 94dff07..cf88d78 100644 --- a/djangocms_blog/templates/djangocms_blog/base.html +++ b/djangocms_blog/templates/djangocms_blog/base.html @@ -7,7 +7,7 @@ {% endblock meta %} {% block content %} -
+
{% block content_blog %}{% endblock %}
{% endblock content %} diff --git a/requirements-test.txt b/requirements-test.txt index 94e66fe..a9c6ae7 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -9,3 +9,4 @@ https://github.com/nephila/djangocms-helper/archive/develop.zip tox>=2.0 wheel pysolr +django-parler>=1.6 diff --git a/setup.py b/setup.py index 00e19ca..ee00b55 100755 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ setup( ], include_package_data=True, install_requires=[ - 'django-parler>=1.2', + 'django-parler>=1.5', 'django-cms>3.0.11', 'django-taggit>=0.12.2', 'django-filer', @@ -51,7 +51,7 @@ setup( }, classifiers=[ - 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Production/Stable', 'Framework :: Django', 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', diff --git a/tests/base.py b/tests/base.py index 6442506..cb6e3f3 100644 --- a/tests/base.py +++ b/tests/base.py @@ -6,6 +6,7 @@ from copy import deepcopy from cmsplugin_filer_image.models import ThumbnailOption from django.contrib.auth import get_user_model from django.contrib.sites.models import Site +from django.core.cache import cache from djangocms_helper.base_test import BaseTestCase from haystack import connections from haystack.constants import DEFAULT_ALIAS @@ -18,7 +19,7 @@ User = get_user_model() def _get_cat_pk(lang, name): - return lambda: BlogCategory.objects.translated(lang, name=name).get().pk + return lambda: BlogCategory.objects.language(lang).translated(lang, name=name).get().pk class BaseTest(BaseTestCase): @@ -65,7 +66,8 @@ class BaseTest(BaseTestCase): 'description': 'Descrizione del terzo post', 'keywords': 'keyword5, keyword6', 'text': 'Testo del terzo post'}, }, - {'en': {'title': 'Different appconfig', 'abstract': '

Different appconfig first line

', + {'en': {'title': 'Different appconfig', + 'abstract': '

Different appconfig first line

', 'description': 'Different appconfig description', 'keywords': 'keyword5, keyword6', 'text': 'Different appconfig text', 'app_config': 'sample_app2', 'publish': True}, 'it': {'title': 'Altro appconfig', 'abstract': '

prima riga del Altro appconfig

', @@ -84,17 +86,19 @@ class BaseTest(BaseTestCase): {'en': {'name': 'Almost', 'app_config': 'sample_app'}, 'it': {'name': 'Mezzo'}, }, - {'en': {'name': 'Loud', 'parent_id': _get_cat_pk('en', 'Almost'), 'app_config': 'sample_app'}, - 'it': {'name': 'Forte', 'parent_id': _get_cat_pk('it', 'Mezzo')}, - }, - {'en': {'name': 'Silent', 'parent_id': _get_cat_pk('en', 'Almost'), 'app_config': 'sample_app'}, - }, {'en': {'name': 'Drums', 'app_config': 'sample_app2'}, 'it': {'name': 'Tamburi'}, }, {'en': {'name': 'Guitars', 'app_config': 'sample_app2'}, 'it': {'name': 'Chitarre'}, }, + {'en': {'name': 'Loud', 'parent_id': _get_cat_pk('en', 'Almost'), + 'app_config': 'sample_app'}, + 'it': {'name': 'Forte', 'parent_id': _get_cat_pk('it', 'Mezzo')}, + }, + {'en': {'name': 'Silent', 'parent_id': _get_cat_pk('en', 'Almost'), + 'app_config': 'sample_app'}, + }, ) @classmethod @@ -120,11 +124,13 @@ class BaseTest(BaseTestCase): 'sample_app': cls.app_config_1, 'sample_app2': cls.app_config_2, } - cls.category_1 = BlogCategory.objects.create(name='category 1', app_config=cls.app_config_1) + cls.category_1 = BlogCategory.objects.create(name='category 1', + app_config=cls.app_config_1) cls.category_1.set_current_language('it', initialize=True) cls.category_1.name = 'categoria 1' cls.category_1.save() cls.site_2 = Site.objects.create(domain='http://example2.com', name='example 2') + cache.clear() @classmethod def tearDownClass(cls): @@ -168,7 +174,6 @@ class BaseTest(BaseTestCase): meta_description=data['description'], meta_keywords=data['keywords'] ) - post = self.reload_model(post) post.categories.add(self.category_1) if sites: for site in sites: @@ -177,6 +182,7 @@ class BaseTest(BaseTestCase): def get_posts(self, sites=None): posts = [] + cache.clear() for post in self._post_data: post1 = self._get_post(post['en'], sites=sites) post1 = self._get_post(post['it'], post=post1, lang='it') diff --git a/tests/test_menu.py b/tests/test_menu.py index 36380ac..8247368 100644 --- a/tests/test_menu.py +++ b/tests/test_menu.py @@ -3,7 +3,7 @@ from __future__ import absolute_import, print_function, unicode_literals from aldryn_apphooks_config.utils import get_app_instance from django.core.cache import cache -from django.utils.translation import activate +from django.utils.translation import activate, override from menus.menu_pool import menu_pool from parler.utils.context import smart_override, switch_language @@ -21,6 +21,7 @@ class MenuTest(BaseTest): def setUp(self): super(MenuTest, self).setUp() self.cats = [self.category_1] + cache.clear() for i, lang_data in enumerate(self._categories_data): cat = self._get_category(lang_data['en']) if 'it' in lang_data: @@ -28,26 +29,39 @@ class MenuTest(BaseTest): self.cats.append(cat) activate('en') + menu_pool.clear(all=True) menu_pool.discover_menus() # All cms menu modifiers should be removed from menu_pool.modifiers # so that they do not interfere with our menu nodes menu_pool.modifiers = [m for m in menu_pool.modifiers if m.__module__.startswith('djangocms_blog')] + cache.clear() def test_menu_nodes(self): """ Tests if all categories are present in the menu """ - self.get_posts() - self.get_pages() + posts = self.get_posts() + pages = self.get_pages() + self.reload_urlconf() for lang in ('en', 'it'): - request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang) with smart_override(lang): - nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu') + request = self.get_page_request(pages[1], self.user, pages[1].get_absolute_url(lang)) + nodes = menu_pool.get_nodes(request) nodes_url = set([node.url for node in nodes]) cats_url = set([cat.get_absolute_url() for cat in self.cats if cat.has_translation(lang)]) self.assertTrue(cats_url.issubset(nodes_url)) + cache.clear() + posts[0].categories.clear() + for lang in ('en', 'it'): + with smart_override(lang): + request = self.get_page_request(pages[1], self.user, pages[1].get_absolute_url(lang)) + nodes = menu_pool.get_nodes(request) + nodes_url = set([node.url for node in nodes]) + self.assertFalse(posts[0].get_absolute_url(lang) in nodes_url) + self.assertTrue(posts[1].get_absolute_url(lang) in nodes_url) + def test_menu_options(self): """ Tests menu structure based on menu_structure configuration @@ -72,7 +86,7 @@ class MenuTest(BaseTest): for lang in languages: request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang) with smart_override(lang): - nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu') + nodes = menu_pool.get_nodes(request) nodes_url = set([node.url for node in nodes]) self.assertFalse(cats_url[lang].issubset(nodes_url)) self.assertFalse(posts_url[lang].issubset(nodes_url)) @@ -84,7 +98,7 @@ class MenuTest(BaseTest): for lang in languages: request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang) with smart_override(lang): - nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu') + nodes = menu_pool.get_nodes(request) nodes_url = set([node.url for node in nodes]) self.assertFalse(cats_url[lang].issubset(nodes_url)) self.assertTrue(posts_url[lang].issubset(nodes_url)) @@ -96,7 +110,7 @@ class MenuTest(BaseTest): for lang in languages: request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang) with smart_override(lang): - nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu') + nodes = menu_pool.get_nodes(request) nodes_url = set([node.url for node in nodes]) self.assertTrue(cats_url[lang].issubset(nodes_url)) self.assertFalse(posts_url[lang].issubset(nodes_url)) @@ -108,7 +122,7 @@ class MenuTest(BaseTest): for lang in languages: request = self.get_page_request(None, self.user, r'/%s/page-two/' % lang) with smart_override(lang): - nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu') + nodes = menu_pool.get_nodes(request) nodes_url = set([node.url for node in nodes]) self.assertTrue(cats_url[lang].issubset(nodes_url)) self.assertTrue(posts_url[lang].issubset(nodes_url)) @@ -126,22 +140,55 @@ class MenuTest(BaseTest): (PostDetailView, 'slug', posts[0], posts[0].categories.first()), (CategoryEntriesView, 'category', self.cats[2], self.cats[2]) ) + self.app_config_1.app_data.config.menu_structure = MENU_TYPE_COMPLETE + self.app_config_1.save() for view_cls, kwarg, obj, cat in tests: - request = self.get_page_request(pages[1], self.user, path=obj.get_absolute_url()) with smart_override('en'): with switch_language(obj, 'en'): + request = self.get_page_request( + pages[1], self.user, path=obj.get_absolute_url() + ) + cache.clear() + menu_pool.clear(all=True) view_obj = view_cls() view_obj.request = request view_obj.namespace, view_obj.config = get_app_instance(request) view_obj.app_config = self.app_config_1 view_obj.kwargs = {kwarg: obj.slug} view_obj.get(request) + view_obj.get_context_data() # check if selected menu node points to cat - nodes = menu_pool.get_nodes(request, namespace='BlogCategoryMenu') - found = False + nodes = menu_pool.get_nodes(request) + found = [] for node in nodes: if node.selected: - self.assertEqual(node.url, obj.get_absolute_url()) - found = True - break - self.assertTrue(found) + found.append(node.get_absolute_url()) + self.assertTrue(obj.get_absolute_url() in found) + + self.app_config_1.app_data.config.menu_structure = MENU_TYPE_CATEGORIES + self.app_config_1.save() + for view_cls, kwarg, obj, cat in tests: + with smart_override('en'): + with switch_language(obj, 'en'): + request = self.get_page_request( + pages[1], self.user, path=obj.get_absolute_url() + ) + cache.clear() + menu_pool.clear(all=True) + view_obj = view_cls() + view_obj.request = request + view_obj.namespace, view_obj.config = get_app_instance(request) + view_obj.app_config = self.app_config_1 + view_obj.kwargs = {kwarg: obj.slug} + view_obj.get(request) + view_obj.get_context_data() + # check if selected menu node points to cat + nodes = menu_pool.get_nodes(request) + found = [] + for node in nodes: + if node.selected: + found.append(node.get_absolute_url()) + self.assertTrue(cat.get_absolute_url() in found) + + self.app_config_1.app_data.config.menu_structure = MENU_TYPE_COMPLETE + self.app_config_1.save() diff --git a/tests/test_models.py b/tests/test_models.py index 77cd4f8..5b28745 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -34,6 +34,8 @@ class AdminTest(BaseTest): admin.autodiscover() def test_admin_post_views(self): + self.get_pages() + post_admin = admin.site._registry[Post] request = self.get_page_request('/', self.user, r'/en/blog/', edit=False) @@ -50,6 +52,28 @@ class AdminTest(BaseTest): self.assertContains(response, '') self.assertContains(response, '' % self.app_config_1.pk) + # Test for publish view + post.publish = False + post.save() + response = post_admin.publish_post(request, str(post.pk)) + # Redirects to current post + self.assertEqual(response.status_code, 302) + self.assertEqual(response['Location'], post.get_absolute_url()) + post = self.reload_model(post) + # post is publshed + self.assertTrue(post.publish) + + # Non-existing post is redirected to posts list + response = post_admin.publish_post(request, str('1000000')) + self.assertEqual(response.status_code, 302) + self.assertEqual(response['Location'], reverse('djangocms_blog:posts-latest')) + + # unless a referer is set + request.META['HTTP_REFERER'] = '/' + response = post_admin.publish_post(request, str('1000000')) + self.assertEqual(response.status_code, 302) + self.assertEqual(response['Location'], '/') + def test_admin_blogconfig_views(self): post_admin = admin.site._registry[BlogConfig] request = self.get_page_request('/', self.user, r'/en/blog/', edit=False) @@ -67,7 +91,7 @@ class AdminTest(BaseTest): for fieldname in BlogConfigForm.base_fields: self.assertContains(response, 'id="id_config-%s"' % fieldname) self.assertContains(response, '') - self.assertContains(response, '') + self.assertContains(response, 'sample_app') def test_admin_category_views(self): post_admin = admin.site._registry[BlogCategory] @@ -191,6 +215,22 @@ class AdminTest(BaseTest): self.assertEqual(Post.objects.count(), 3) self.assertEqual(Post.objects.get(translations__slug='third-post').author.username, 'staff') + def test_admin_fieldsets_filter(self): + post_admin = admin.site._registry[Post] + request = self.get_page_request('/', self.user_normal, r'/en/blog/?app_config=%s' % self.app_config_1.pk) + + fsets = post_admin.get_fieldsets(request) + self.assertFalse('author' in fsets[1][1]['fields'][0]) + + def filter_function(fs, request, obj=None): + if request.user == self.user_normal: + fs[1][1]['fields'][0].append('author') + return fs + + with self.settings(BLOG_ADMIN_POST_FIELDSET_FILTER=filter_function): + fsets = post_admin.get_fieldsets(request) + self.assertTrue('author' in fsets[1][1]['fields'][0]) + def test_admin_post_text(self): pages = self.get_pages() post = self._get_post(self._post_data[0]['en']) @@ -252,7 +292,7 @@ class ModelsTest(BaseTest): url_en = reverse( '%s:post-detail' % self.app_config_1.namespace, kwargs=kwargs, - current_app=self.app_config_1 + current_app=self.app_config_1.namespace ) self.assertEqual(url_en, post.get_absolute_url()) @@ -265,7 +305,7 @@ class ModelsTest(BaseTest): url_it = reverse( '%s:post-detail' % self.app_config_1.namespace, kwargs=kwargs, - current_app=self.app_config_1 + current_app=self.app_config_1.namespace ) self.assertEqual(url_it, post.get_absolute_url()) self.assertNotEqual(url_it, url_en) diff --git a/tests/test_plugins.py b/tests/test_plugins.py index cb209f2..8a241d9 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -59,6 +59,24 @@ class PluginTest(BaseTest): self.assertTrue(rendered.find('
-1) self.assertTrue(rendered.find(posts[1].get_absolute_url()) > -1) + # Checking copy relations + ph = pages[0].placeholders.get(slot='content') + original = ph.get_plugins('en') + pages[0].publish('en') + published = pages[0].get_public_object() + ph = published.placeholders.get(slot='content') + new = ph.get_plugins('en') + self.assertNotEqual(original, new) + + casted_tags, __ = new[0].get_plugin_instance() + casted_categories, __ = new[1].get_plugin_instance() + + self.assertEqual(casted_tags.tags.count(), 1) + self.assertEqual(casted_tags.categories.count(), 0) + + self.assertEqual(casted_categories.tags.count(), 0) + self.assertEqual(casted_categories.categories.count(), 1) + def test_plugin_authors(self): pages = self.get_pages() posts = self.get_posts() @@ -73,6 +91,36 @@ class PluginTest(BaseTest): rendered = plugin.render_plugin(context, ph) self.assertTrue(rendered.find('No article found') > -1) + plugin.authors.add(self.user) + context = self.get_plugin_context(pages[0], 'en', plugin, edit=True) + rendered = plugin.render_plugin(context, ph) + self.assertTrue(rendered.find('/en/blog/author/admin/') > -1) + self.assertTrue(rendered.find('2 articles') > -1) + + plugin.authors.add(self.user_staff) + context = self.get_plugin_context(pages[0], 'en', plugin, edit=True) + rendered = plugin.render_plugin(context, ph) + self.assertTrue(rendered.find('/en/blog/author/staff/') > -1) + self.assertTrue(rendered.find('0 articles') > -1) + + plugin.authors.add(self.user_normal) + context = self.get_plugin_context(pages[0], 'en', plugin, edit=True) + rendered = plugin.render_plugin(context, ph) + self.assertTrue(rendered.find('/en/blog/author/normal/') > -1) + self.assertTrue(rendered.find('0 articles') > -1) + + # Checking copy relations + ph = pages[0].placeholders.get(slot='content') + original = ph.get_plugins('en') + pages[0].publish('en') + published = pages[0].get_public_object() + ph = published.placeholders.get(slot='content') + new = ph.get_plugins('en') + self.assertNotEqual(original, new) + + casted_authors, __ = new[0].get_plugin_instance() + self.assertEqual(casted_authors.authors.count(), 3) + def test_plugin_tags(self): pages = self.get_pages() posts = self.get_posts() diff --git a/tests/test_search.py b/tests/test_search.py index cf30013..26f69d4 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -11,7 +11,7 @@ from .base import BaseTest class BlogIndexingTests(BaseTest): - sample_text = ('First post First post first line This is the description keyword1 ' + sample_text = ('First post first line This is the description keyword1 ' 'keyword2 category 1 a tag test body') def setUp(self): @@ -28,29 +28,12 @@ class BlogIndexingTests(BaseTest): index.index_queryset(DEFAULT_ALIAS) # initialises index._backend_alias indexed = index.prepare(post) - self.assertEqual(post.get_title(), indexed['title']) self.assertEqual(post.get_description(), indexed['description']) + self.assertEqual(post.get_tags(), indexed['tags']) self.assertEqual(self.sample_text, indexed['text']) self.assertEqual(post.get_absolute_url(), indexed['url']) - #self.assertEqual(post.date_published.strftime("%Y-%m-%d %H:%M:%S"), indexed['pub_date']) - - def test_blog_post_is_indexed_using_update_object(self): - """This tests the indexing path way used by the RealTimeSignalProcessor""" - post = self._get_post(self._post_data[0]['en']) - post = self._get_post(self._post_data[0]['it'], post, 'it') - post.tags.add('a tag') - add_plugin(post.content, 'TextPlugin', language='en', body='test body') - - index = self.get_post_index() - index.update_object(post, using=DEFAULT_ALIAS) - indexed = index.prepared_data - - self.assertEqual(post.get_title(), indexed['title']) - self.assertEqual(post.get_description(), indexed['description']) - self.assertEqual(self.sample_text, indexed['text']) - self.assertEqual(post.get_absolute_url(), indexed['url']) - #self.assertEqual(post.date_published.strftime("%Y-%m-%d %H:%M:%S"), indexed['pub_date']) + self.assertEqual(post.date_published, indexed['pub_date']) def test_searchqueryset(self): posts = self.get_posts() diff --git a/tests/test_toolbar.py b/tests/test_toolbar.py index 90b6ccb..e3bc069 100644 --- a/tests/test_toolbar.py +++ b/tests/test_toolbar.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, unicode_literals -from cms.toolbar.items import ModalItem +from cms.toolbar.items import ButtonList, ModalItem from django.core.urlresolvers import reverse +from django.utils.encoding import force_text from djangocms_blog.models import BLOG_CURRENT_POST_IDENTIFIER @@ -20,9 +21,39 @@ class ToolbarTest(BaseTest): pages = self.get_pages() request = self.get_page_request(pages[0], self.user, r'/en/blog/', edit=True) setattr(request, BLOG_CURRENT_POST_IDENTIFIER, posts[0]) + + posts[0].publish = False + posts[0].save() toolbar = CMSToolbar(request) + toolbar.populate() + toolbar.post_template_populate() toolbar.get_left_items() blog_menu = toolbar.menus['djangocms_blog'] self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_changelist'))), 1) self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_add'))), 1) self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_change', args=(posts[0].pk,)))), 1) + + # Publish button only appears if current post is unpublished + right = toolbar.get_right_items() + buttons = sum([item.buttons for item in right if isinstance(item, ButtonList)], []) + self.assertTrue([button for button in buttons if force_text(button.name) == 'Publish Blog now']) + + # Publish button does not appears if current post is published + posts[0].publish = True + posts[0].save() + toolbar = CMSToolbar(request) + toolbar.populate() + toolbar.post_template_populate() + right = toolbar.get_right_items() + buttons = sum([item.buttons for item in right if isinstance(item, ButtonList)], []) + self.assertFalse([button for button in buttons if force_text(button.name) == 'Publish Blog now']) + + # Publish button does not appears if other posts but the current one are unpublished + posts[1].publish = True + posts[1].save() + toolbar = CMSToolbar(request) + toolbar.populate() + toolbar.post_template_populate() + right = toolbar.get_right_items() + buttons = sum([item.buttons for item in right if isinstance(item, ButtonList)], []) + self.assertFalse([button for button in buttons if force_text(button.name) == 'Publish Blog now']) diff --git a/tests/test_wizards.py b/tests/test_wizards.py index 3cc6901..b3da377 100644 --- a/tests/test_wizards.py +++ b/tests/test_wizards.py @@ -47,25 +47,43 @@ class WizardTest(BaseTest): @skipIf(LooseVersion(cms.__version__) < LooseVersion('3.2'), reason='Wizards not available for django CMS < 3.2') def test_wizard_init(self): + from cms.utils.permissions import current_user from cms.wizards.wizard_pool import wizard_pool from djangocms_blog.models import Post self.get_pages() - wizs = [entry for entry in wizard_pool.get_entries() if entry.model == Post] - for wiz in wizs: - app_config = self.app_config_1.pk if wiz.title == 'New Blog' else self.app_config_2.pk - form = wiz.form() - self.assertTrue(form.initial.get('app_config', False), app_config) - self.assertTrue(form.fields['app_config'].widget.attrs['disabled']) + with current_user(self.user_staff): + wizs = [entry for entry in wizard_pool.get_entries() if entry.model == Post] + for index, wiz in enumerate(wizs): + app_config = self.app_config_1.pk if wiz.title == 'New Blog' else self.app_config_2.pk + form = wiz.form() + self.assertTrue(form.initial.get('app_config', False), app_config) + self.assertTrue(form.fields['app_config'].widget.attrs['disabled']) - form = wiz.form(data={ - '1-title': 'title', - '1-abstract': 'abstract', - '1-categories': [self.category_1.pk], - }, prefix=1) - self.assertEqual(form.default_appconfig, app_config) - self.assertTrue(form.is_valid()) - self.assertTrue(form.cleaned_data['app_config'], app_config) + form = wiz.form(data={ + '1-title': 'title{0}'.format(index), + '1-abstract': 'abstract{0}'.format(index), + '1-categories': [self.category_1.pk], + }, prefix=1) + self.assertEqual(form.default_appconfig, app_config) + self.assertTrue(form.is_valid()) + self.assertEqual(form.cleaned_data['app_config'].pk, app_config) + instance = form.save() + self.assertEqual(instance.author, self.user_staff) + + with self.settings(BLOG_AUTHOR_DEFAULT='normal'): + for index, wiz in enumerate(wizs): + app_config = self.app_config_1.pk if wiz.title == 'New Blog' else self.app_config_2.pk + form = wiz.form(data={ + '1-title': 'title-2{0}'.format(index), + '1-abstract': 'abstract-2{0}'.format(index), + '1-categories': [self.category_1.pk], + }, prefix=1) + self.assertEqual(form.default_appconfig, app_config) + self.assertTrue(form.is_valid()) + self.assertEqual(form.cleaned_data['app_config'].pk, app_config) + instance = form.save() + self.assertEqual(instance.author, self.user_normal) def test_wizard_import(self): # The following import should not fail in any django CMS version diff --git a/tox.ini b/tox.ini index b96713b..880745f 100644 --- a/tox.ini +++ b/tox.ini @@ -1,27 +1,29 @@ [tox] -envlist = pep8,isort,py{35,34,33,27}-django{19,18}-cms{32,31},py{34,33,27}-django{17,16}-cms{32,31,30},py{26}-django16-cms{31,30} +envlist = pep8,isort,py{35,34,27}-django{19}-cms{32},py{35,34,33,27}-django{18}-cms{32,31},py{34,33,27}-django{17,16}-cms{32,31,30},py{26}-django16-cms{31,30} [testenv] commands = {env:COMMAND:python} cms_helper.py test djangocms_blog --no-migrate deps = - -r{toxinidir}/requirements-test.txt django16: Django>=1.6,<1.7 + django16: django-taggit<0.18 + django16: django-mptt<0.8 django17: Django>=1.7,<1.8 - django18: Django>=1.7,<1.9 - django18: https://github.com/stefanfoulis/django-filer/archive/develop.zip - django18: https://github.com/stefanfoulis/cmsplugin-filer/archive/develop.zip - django19: Django==1.9a1 - django19: https://github.com/stefanfoulis/django-filer/archive/develop.zip - django19: https://github.com/stefanfoulis/cmsplugin-filer/archive/develop.zip + django17: django-mptt<0.8 + django18: Django>=1.8,<1.9 + django18: django-mptt>=0.8 + django19: Django>=1.9,<1.10 + django19: django-mptt>=0.8 + django19: https://github.com/divio/django-filer/archive/develop.zip + django19: https://github.com/divio/cmsplugin-filer/archive/develop.zip cms30: https://github.com/divio/django-cms/archive/support/3.0.x.zip cms31: https://github.com/divio/django-cms/archive/support/3.1.x.zip - cms32: https://github.com/divio/django-cms/archive/develop.zip + cms32: https://github.com/divio/django-cms/archive/release/3.2.x.zip https://github.com/nephila/django-meta-mixin/archive/master.zip https://github.com/nephila/djangocms-helper/archive/develop.zip py26: unittest2 - django-parler<1.5 https://github.com/aldryn/aldryn-apphooks-config/archive/master.zip https://github.com/nephila/djangocms-apphook-setup/archive/master.zip + -r{toxinidir}/requirements-test.txt [testenv:isort] deps = isort