diff --git a/app_website_blog_editor/__init__.py b/app_website_blog_editor/__init__.py new file mode 100644 index 00000000..9ea74431 --- /dev/null +++ b/app_website_blog_editor/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import controllers +from .hooks import pre_init_hook +from .hooks import post_init_hook +from .hooks import uninstall_hook \ No newline at end of file diff --git a/app_website_blog_editor/__manifest__.py b/app_website_blog_editor/__manifest__.py new file mode 100644 index 00000000..8713a020 --- /dev/null +++ b/app_website_blog_editor/__manifest__.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- + +# Created on 2022-09-01 +# author: 欧度智能,https://www.odooai.cn +# email: 300883@qq.com +# resource of odooai +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +# Odoo16在线用户手册(长期更新) +# https://www.odooai.cn/documentation/15.0/zh_CN/index.html + +# Odoo16在线开发者手册(长期更新) +# https://www.odooai.cn/documentation/15.0/zh_CN/developer.html + +# Odoo13在线用户手册(长期更新) +# https://www.odooai.cn/documentation/user/13.0/zh_CN/index.html + +# Odoo13在线开发者手册(长期更新) +# https://www.odooai.cn/documentation/13.0/index.html + +# Odoo10在线中文用户手册(长期更新) +# https://www.odooai.cn/documentation/user/10.0/zh_CN/index.html + +# Odoo10离线中文用户手册下载 +# https://www.odooai.cn/odoo10_user_manual_document_offline/ +# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) +# https://www.odooai.cn/odoo10_developer_document_offline/ + +############################################################################## +# Copyright (C) 2009-TODAY odooai.cn Ltd. https://www.odooai.cn +# Author: Ivan Deng,300883@qq.com +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# See . +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +############################################################################## + +{ + 'name': "Website Blogs Editor in Backend", + 'version': '15.23.09.08', + 'author': 'odooai.cn', + 'category': 'Base', + 'website': 'https://www.odooai.cn', + 'live_test_url': 'https://demo.odooapp.cn', + 'license': 'LGPL-3', + 'sequence': 2, + 'price': 0.00, + 'currency': 'EUR', + 'images': ['static/description/banner.png'], + 'depends': [ + 'website_blog', + ], + 'summary': ''' + Odoo App of odooai.cn + ''', + 'description': ''' + Support Odoo 16,15,14,13,12, Enterprise and Community and odoo.sh Edition + 1. + 2. + 11. Multi-language Support. Multi-Company Support. + 12. Support Odoo 16,15,14,13,12, Enterprise and Community and odoo.sh Edition. + 13. Full Open Source. + ========== + 1. + 2. + 11. 多语言支持,多公司支持 + 12. Odoo 16,15,14,13,12, 企业版,社区版,在线SaaS.sh版,等全版本支持 + 13. 代码完全开源 + ''', + 'data': [ + 'views/blog_blog_views.xml', + 'views/blog_tag_category_views.xml', + 'views/blog_tag_views.xml', + 'views/blog_post_views.xml', + 'views/website_page_views.xml', + 'views/res_config_settings_views.xml' + # 'report/.xml', + ], + 'demo': [], + # 'pre_init_hook': 'pre_init_hook', + # 'post_init_hook': 'post_init_hook', + # 'uninstall_hook': 'uninstall_hook', + 'installable': True, + 'application': True, + 'auto_install': False, +} diff --git a/app_website_blog_editor/controllers/__init__.py b/app_website_blog_editor/controllers/__init__.py new file mode 100644 index 00000000..757b12a1 --- /dev/null +++ b/app_website_blog_editor/controllers/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import main diff --git a/app_website_blog_editor/controllers/main.py b/app_website_blog_editor/controllers/main.py new file mode 100644 index 00000000..5c278a77 --- /dev/null +++ b/app_website_blog_editor/controllers/main.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- + +import re +import werkzeug +from odoo import http, fields, tools +from odoo.addons.http_routing.models.ir_http import slug, unslug +from odoo.addons.website.controllers.main import QueryURL +from odoo.http import request +from odoo.addons.website_blog.controllers.main import WebsiteBlog + + +class WebsiteBlog(WebsiteBlog): + + def _prepare_blog_values(self, blogs, blog=False, date_begin=False, date_end=False, tags=False, state=False, page=False, search=None): + blogs = blogs.sorted(key='sequence') + res = super(WebsiteBlog, self)._prepare_blog_values(blogs, blog, date_begin, date_end, tags, state, page, search) + return res + diff --git a/app_website_blog_editor/data/product_attribute_value_group_data.xml b/app_website_blog_editor/data/product_attribute_value_group_data.xml new file mode 100644 index 00000000..ad0a23e1 --- /dev/null +++ b/app_website_blog_editor/data/product_attribute_value_group_data.xml @@ -0,0 +1,17 @@ + + + + + CHN + CN + + + Eur + EU + + + US + US + + + \ No newline at end of file diff --git a/app_website_blog_editor/hooks.py b/app_website_blog_editor/hooks.py new file mode 100644 index 00000000..40a5ccf5 --- /dev/null +++ b/app_website_blog_editor/hooks.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +# Created on 2018-10-12 +# author: 欧度智能,https://www.odooai.cn +# email: 300883@qq.com +# resource of odooai +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +# Odoo在线中文用户手册(长期更新) +# https://www.odooai.cn/documentation/user/10.0/zh_CN/index.html + +# Odoo10离线中文用户手册下载 +# https://www.odooai.cn/odoo10_user_manual_document_offline/ +# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) +# https://www.odooai.cn/odoo10_developer_document_offline/ +# description: + +from odoo import api, SUPERUSER_ID, _ + + +def pre_init_hook(cr): + pass + # cr.execute("") + +def post_init_hook(cr, registry): + pass + # cr.execute("") + +def uninstall_hook(cr, registry): + pass + # cr.execute("") + diff --git a/app_website_blog_editor/i18n/zh_CN.po b/app_website_blog_editor/i18n/zh_CN.po new file mode 100644 index 00000000..ef923457 --- /dev/null +++ b/app_website_blog_editor/i18n/zh_CN.po @@ -0,0 +1,102 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * app_website_blog_editor +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0+e-20230721\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-28 08:26+0000\n" +"PO-Revision-Date: 2023-08-28 08:26+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: app_website_blog_editor +#: model:ir.model,name:app_website_blog_editor.model_blog_blog +msgid "Blog" +msgstr "博客分类" + +#. module: app_website_blog_editor +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_blog_post_form_view_code +msgid "Blog Content" +msgstr "博客内容" + +#. module: app_website_blog_editor +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_blog_post_form_view_code +msgid "Blog Name" +msgstr "博客名称" + +#. module: app_website_blog_editor +#: model:ir.model,name:app_website_blog_editor.model_blog_post +msgid "Blog Post" +msgstr "博文" + +#. module: app_website_blog_editor +#: model:ir.model,name:app_website_blog_editor.model_blog_tag +msgid "Blog Tag" +msgstr "博客标签" + +#. module: app_website_blog_editor +#: model:ir.model,name:app_website_blog_editor.model_blog_tag_category +msgid "Blog Tag Category" +msgstr "博客标签分类" + +#. module: app_website_blog_editor +#: model:ir.model,name:app_website_blog_editor.model_res_config_settings +msgid "Config Settings" +msgstr "配置设置" + +#. module: app_website_blog_editor +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_view_blog_post_form +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_view_blog_post_search +msgid "Content" +msgstr "博客图文" + +#. module: app_website_blog_editor +#: model:ir.model.fields,help:app_website_blog_editor.field_blog_blog__sequence +#: model:ir.model.fields,help:app_website_blog_editor.field_blog_tag__sequence +#: model:ir.model.fields,help:app_website_blog_editor.field_blog_tag_category__sequence +msgid "Determine the display order" +msgstr "确定显示顺序" + +#. module: app_website_blog_editor +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_res_config_settings_form_view +msgid "If set, replaces the blog post background image as the meta image." +msgstr "如果设置,默认将博文背景图片替换为元图像。" + +#. module: app_website_blog_editor +#: model:ir.model.fields,field_description:app_website_blog_editor.field_blog_blog__sequence +#: model:ir.model.fields,field_description:app_website_blog_editor.field_blog_tag__sequence +#: model:ir.model.fields,field_description:app_website_blog_editor.field_blog_tag_category__sequence +msgid "Sequence" +msgstr "顺序" + +#. module: app_website_blog_editor +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_view_blog_post_list +msgid "Settings" +msgstr "设置" + +#. module: app_website_blog_editor +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_view_blog_post_list +msgid "Source Code" +msgstr "源代码" + +#. module: app_website_blog_editor +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_view_blog_post_search +msgid "Title" +msgstr "标题" + +#. module: app_website_blog_editor +#: model:ir.model.fields,field_description:app_website_blog_editor.field_res_config_settings__sync_blog_meta_background_img +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_res_config_settings_form_view +msgid "Use a meta image by default for blog post background" +msgstr "博客文章背景默认使用元图像" + +#. module: app_website_blog_editor +#: model_terms:ir.ui.view,arch_db:app_website_blog_editor.app_blog_post_form_view_code +msgid "Website Description" +msgstr "网站描述" diff --git a/app_website_blog_editor/models/__init__.py b/app_website_blog_editor/models/__init__.py new file mode 100644 index 00000000..0c33e961 --- /dev/null +++ b/app_website_blog_editor/models/__init__.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Part of odooai.cn. See LICENSE file for full copyright and licensing details. + +# Created on 2019-04-20 +# author: 欧度智能,http://www.odooai.cn +# email: 300883@qq.com +# resource of odooai +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +# Odoo12在线用户手册(长期更新) +# http://www.odooai.cn/documentation/user/12.0/en/index.html + +# Odoo12在线开发者手册(长期更新) +# http://www.odooai.cn/documentation/12.0/index.html + +# Odoo10在线中文用户手册(长期更新) +# http://www.odooai.cn/documentation/user/10.0/zh_CN/index.html + +# Odoo10离线中文用户手册下载 +# http://www.odooai.cn/odoo10_user_manual_document_offline/ +# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) +# http://www.odooai.cn/odoo10_developer_document_offline/ +# description: + +from . import blog_tag_category +from . import blog_tag +from . import blog_blog +from . import blog_post +from . import website_page +from . import res_config_settings diff --git a/app_website_blog_editor/models/blog_blog.py b/app_website_blog_editor/models/blog_blog.py new file mode 100644 index 00000000..e3e881e0 --- /dev/null +++ b/app_website_blog_editor/models/blog_blog.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +from odoo import api, models, fields, _ +from odoo.tools.safe_eval import safe_eval + + +class BlogBlog(models.Model): + _inherit = 'blog.blog' + _order = 'sequence, name' + + seo_name = fields.Char(tracking=True) + + # 排序 + sequence = fields.Integer(string='Sequence', default=20, index=True, help="Determine the display order") + + def action_view_blog_post(self): + self.ensure_one() + action = self.env.ref('website_blog.action_blog_post').read()[0] + action['domain'] = [('blog_id', '=', self.id)] + return action + + # def unlink(self): + # # active的先不删除,设置为 deactive + # to_deactive = self.filtered(lambda r: r.active) + # self = self - to_deactive + # to_deactive.write({ + # 'active': False, + # }) + # if self: + # return super(BlogBlog, self).unlink() + # else: + # return False diff --git a/app_website_blog_editor/models/blog_post.py b/app_website_blog_editor/models/blog_post.py new file mode 100644 index 00000000..a0b4d28a --- /dev/null +++ b/app_website_blog_editor/models/blog_post.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- + +import json +from odoo import api, models, fields, _ +from odoo.tools.safe_eval import safe_eval + + +class BlogPost(models.Model): + _inherit = 'blog.post' + + # 不允许暴力删除 + blog_id = fields.Many2one('blog.blog', ondelete='restrict') + + def write(self, vals): + if vals.get('website_meta_og_img'): + sync_blog_meta_background_img = self.env['ir.config_parameter'].sudo().get_param('app_website_blog_editor.sync_blog_meta_background_img') + if sync_blog_meta_background_img: + web_base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url', default='') + img_url = vals.get('website_meta_og_img').replace(web_base_url, '') + for rec in self: + cover_properties = json.loads(rec.cover_properties) + cover_properties.update({ + 'background-image': 'url("%s")' % img_url, + }) + vals.update({ + 'cover_properties': json.dumps(cover_properties) + }) + return super(BlogPost, self).write(vals) + + def action_post_debug_view(self): + self.ensure_one() + action = self.env.ref('website_blog.action_blog_post').read()[0] + + action['views'] = [(self.env.ref('website_blog.view_blog_post_form').id, 'form')] + action['res_id'] = self.id + return action + + def action_post_code_view(self): + self.ensure_one() + action = self.env.ref('website_blog.action_blog_post').read()[0] + + action['views'] = [(self.env.ref('app_website_blog_editor.app_blog_post_form_view_code').id, 'form')] + action['res_id'] = self.id + return action diff --git a/app_website_blog_editor/models/blog_tag.py b/app_website_blog_editor/models/blog_tag.py new file mode 100644 index 00000000..46e2700a --- /dev/null +++ b/app_website_blog_editor/models/blog_tag.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +from odoo import api, models, fields, _ + + +class BlogTag(models.Model): + _inherit = 'blog.tag' + _order = 'sequence, name' + + # 排序 + sequence = fields.Integer(string='Sequence', default=20, index=True, help="Determine the display order") diff --git a/app_website_blog_editor/models/blog_tag_category.py b/app_website_blog_editor/models/blog_tag_category.py new file mode 100644 index 00000000..b448bbdd --- /dev/null +++ b/app_website_blog_editor/models/blog_tag_category.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +from odoo import api, models, fields, _ + + +class BlogTagCategory(models.Model): + _inherit = 'blog.tag.category' + _order = 'sequence, name' + + # 排序 + sequence = fields.Integer(string='Sequence', default=20, index=True, help="Determine the display order") + diff --git a/app_website_blog_editor/models/res_config_settings.py b/app_website_blog_editor/models/res_config_settings.py new file mode 100644 index 00000000..194bd9ac --- /dev/null +++ b/app_website_blog_editor/models/res_config_settings.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- + +from odoo import fields, models, _ + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + sync_blog_meta_background_img = fields.Boolean('Use a meta image by default for blog post background', config_parameter='app_website_blog_editor.sync_blog_meta_background_img') + + def set_values(self): + res = super().set_values() + self.env['ir.config_parameter'].set_param('app_website_blog_editor.sync_blog_meta_background_img', self.sync_blog_meta_background_img) + return res diff --git a/app_website_blog_editor/models/website_page.py b/app_website_blog_editor/models/website_page.py new file mode 100644 index 00000000..ac005c92 --- /dev/null +++ b/app_website_blog_editor/models/website_page.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models + + +class WebsitePage(models.Model): + _inherit = 'website.page' + + def action_page_debug_view(self): + # 直接覆盖原生 + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'res_model': 'ir.ui.view', + 'res_id': self.view_id.id, + 'view_mode': 'form', + 'view_id': self.env.ref('app_website_blog_editor.app_view_view_form_extend_debug').id, + } + + def action_page_code_view(self): + self.ensure_one() + return { + 'type': 'ir.actions.act_window', + 'res_model': 'ir.ui.view', + 'res_id': self.view_id.id, + 'view_mode': 'form', + 'view_id': self.env.ref('website.view_view_form_extend').id, + } diff --git a/app_website_blog_editor/report/__init__.py b/app_website_blog_editor/report/__init__.py new file mode 100644 index 00000000..633f8661 --- /dev/null +++ b/app_website_blog_editor/report/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- + diff --git a/app_website_blog_editor/security/app_security.xml b/app_website_blog_editor/security/app_security.xml new file mode 100644 index 00000000..a4b85605 --- /dev/null +++ b/app_website_blog_editor/security/app_security.xml @@ -0,0 +1,51 @@ + + + + + + acc_module_user + + + + + + + + + + App... + Helps you manage your ... + 8 + + + + + App User + + + The user will be able to ... + + + + + App Admin + + + The user will be able to config ... + + + + + + + + + + Users are allowed to access their own m/// + + ['|', ('partner_id', 'in', [user.partner_id.id]), ('user_id.id', '=', user.id)] + + + + + diff --git a/app_website_blog_editor/security/ir.model.access.csv b/app_website_blog_editor/security/ir.model.access.csv new file mode 100644 index 00000000..64f91fa5 --- /dev/null +++ b/app_website_blog_editor/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_product_attribute_value_group_user,product_attribute_value_group.user,app_product_variant_pro.model_product_attribute_value_group,base.group_user,1,0,0,0 +access_product_attribute_value_group_manager,product_attribute_value_group.manager,app_product_variant_pro.model_product_attribute_value_group,base.group_erp_manager,1,1,1,1 \ No newline at end of file diff --git a/app_website_blog_editor/static/description/banner.png b/app_website_blog_editor/static/description/banner.png new file mode 100644 index 00000000..80333db4 Binary files /dev/null and b/app_website_blog_editor/static/description/banner.png differ diff --git a/app_website_blog_editor/static/description/icon.png b/app_website_blog_editor/static/description/icon.png new file mode 100644 index 00000000..91a539ca Binary files /dev/null and b/app_website_blog_editor/static/description/icon.png differ diff --git a/app_website_blog_editor/static/description/index.html b/app_website_blog_editor/static/description/index.html new file mode 100644 index 00000000..a9d22eb4 --- /dev/null +++ b/app_website_blog_editor/static/description/index.html @@ -0,0 +1,95 @@ +
+
+
+

+

+
+

Lastest update: v15.23.08.28

+
+ +
+
+
+ Key features: +
    +
  • + + Put key function here. +
  • +
  • + + 1. +
  • +
  • + + 11. Multi-language Support. Multi-Company Support. +
  • +
  • + + 12. Support Odoo 16,15,14,13,12, Enterprise and Community and odoo.sh Edition. +
  • +
+
+
+
+
+
+
+ +
+
+

So Easy to navigator and search any data.

+

+
+ +
+
+
+ +
+
+

Multi-language Support..

+

+
+ +
+
+
+ +
+
+
+

Technical Help & Support

+
+
+
+

+ For any type of technical help & support requests, Feel free to contact us

+ + guohuadeng@hotmail.com +

+ Via QQ: 300883 (App user would not get QQ or any other IM support. Only for odoo project customize.)

+ + 300883@qq.com +
+
+

+ Visit our website for more support.

+ + https://www.odooai.cn +
+
+
+
+

More Powerful addons, Make your odoo very easy to use, easy customize: + odooai.cn Odoo Addons +

+
+
+ diff --git a/app_website_blog_editor/static/img/icon_sunpop.png b/app_website_blog_editor/static/img/icon_sunpop.png new file mode 100644 index 00000000..aa490954 Binary files /dev/null and b/app_website_blog_editor/static/img/icon_sunpop.png differ diff --git a/app_website_blog_editor/static/img/logo_sunpop.png b/app_website_blog_editor/static/img/logo_sunpop.png new file mode 100644 index 00000000..bc32c24e Binary files /dev/null and b/app_website_blog_editor/static/img/logo_sunpop.png differ diff --git a/app_website_blog_editor/static/src/js/sunpop.cn b/app_website_blog_editor/static/src/js/sunpop.cn new file mode 100644 index 00000000..e69de29b diff --git a/app_website_blog_editor/static/src/scss/sunpop.cn b/app_website_blog_editor/static/src/scss/sunpop.cn new file mode 100644 index 00000000..e69de29b diff --git a/app_website_blog_editor/static/src/xml/sunpop.cn b/app_website_blog_editor/static/src/xml/sunpop.cn new file mode 100644 index 00000000..e69de29b diff --git a/app_website_blog_editor/views/blog_blog_views.xml b/app_website_blog_editor/views/blog_blog_views.xml new file mode 100644 index 00000000..7bd97e91 --- /dev/null +++ b/app_website_blog_editor/views/blog_blog_views.xml @@ -0,0 +1,30 @@ + + + + app.blog.blog.list + blog.blog + + + + + + + + + + app.blog.blog.form + blog.blog + + + +
+ +
+
+
+
+
+ + diff --git a/app_website_blog_editor/views/blog_post_views.xml b/app_website_blog_editor/views/blog_post_views.xml new file mode 100644 index 00000000..ccc3fcc5 --- /dev/null +++ b/app_website_blog_editor/views/blog_post_views.xml @@ -0,0 +1,93 @@ + + + + app.blog.post.list + blog.post + + + + + + + show + + + hide + + + hide + + + show + + + + + + + + + + + + + + +