diff --git a/setup/website_document_page/odoo/addons/website_document_page b/setup/website_document_page/odoo/addons/website_document_page new file mode 120000 index 00000000..891b47ad --- /dev/null +++ b/setup/website_document_page/odoo/addons/website_document_page @@ -0,0 +1 @@ +../../../../website_document_page \ No newline at end of file diff --git a/setup/website_document_page/setup.py b/setup/website_document_page/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/website_document_page/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/website_document_page/README.rst b/website_document_page/README.rst new file mode 100644 index 00000000..21cd7854 --- /dev/null +++ b/website_document_page/README.rst @@ -0,0 +1,21 @@ +**This file is going to be generated by oca-gen-addon-readme.** + +*Manual changes will be overwritten.* + +Please provide content in the ``readme`` directory: + +* **DESCRIPTION.rst** (required) +* INSTALL.rst (optional) +* CONFIGURE.rst (optional) +* **USAGE.rst** (optional, highly recommended) +* DEVELOP.rst (optional) +* ROADMAP.rst (optional) +* HISTORY.rst (optional, recommended) +* **CONTRIBUTORS.rst** (optional, highly recommended) +* CREDITS.rst (optional) + +Content of this README will also be drawn from the addon manifest, +from keys such as name, authors, maintainers, development_status, +and license. + +A good, one sentence summary in the manifest is also highly recommended. diff --git a/website_document_page/__init__.py b/website_document_page/__init__.py new file mode 100644 index 00000000..e49039bd --- /dev/null +++ b/website_document_page/__init__.py @@ -0,0 +1,4 @@ +# Copyright (C) 2020 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import controllers +from . import models diff --git a/website_document_page/__manifest__.py b/website_document_page/__manifest__.py new file mode 100644 index 00000000..eb1a8f23 --- /dev/null +++ b/website_document_page/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright (C) 2020 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Website Document Page", + "summary": "Provides a wiki to host documentation", + "version": "13.0.1.0.0", + "category": "Knowledge Management", + "author": "Open Source Integrators, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/knowledge", + "license": "AGPL-3", + "depends": ["document_tag", "website"], + "data": [ + "security/ir.model.access.csv", + "security/ir_rule.xml", + "views/templates.xml", + "views/document_page.xml", + "views/document_tag.xml", + "views/website.xml", + "data/website_menu.xml", + ], + "development_status": "Alpha", + "maintainers": ["max3903"], +} diff --git a/website_document_page/controllers/__init__.py b/website_document_page/controllers/__init__.py new file mode 100644 index 00000000..22e407ae --- /dev/null +++ b/website_document_page/controllers/__init__.py @@ -0,0 +1,3 @@ +# Copyright (C) 2020 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import main diff --git a/website_document_page/controllers/main.py b/website_document_page/controllers/main.py new file mode 100644 index 00000000..1f05602e --- /dev/null +++ b/website_document_page/controllers/main.py @@ -0,0 +1,64 @@ +# Copyright (C) 20020 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import http +from odoo.http import request + + +class WikiController(http.Controller): + @http.route( + [ + """/wiki""", + """/wiki/page/""", + """/wiki/category/""", + """/wiki/tag/""", + ], + type="http", + auth="public", + website=True, + ) + def wiki(self, page=None, category=None, tag=None, search=""): + Page = request.env["document.page"] + Tag = request.env["document.tag"] + pages = {} + page_tags = {} + + # Page + if not page and not category and not tag and not search: + website = request.env["website"].get_current_website() + page_id = website.wiki_id.id or False + page = Page.browse(page_id) + # Page Tags + if page: + page_tags = page.tag_ids + # Category + if category: + pages = Page.search([("parent_id", "=", category.id)]) + # Tag + if tag: + pages = Page.search([("tag_ids", "in", tag.id)]) + # Search + if search: + pages = Page.search( + ["|", ("name", "like", search), ("content", "like", search)] + ) + search_count = len(pages) + # Menu + menu_categories = Page.search( + [("parent_id", "=", False), ("is_menu", "=", True)] + ) + menu_pages = Page.search([("parent_id", "!=", False), ("is_menu", "=", True)]) + menu_tags = Tag.search([("is_menu", "=", True)]) + + values = { + "category": category, + "pages": pages, + "page": page, + "page_tags": page_tags, + "tag": tag, + "search": search, + "search_count": search_count, + "menu_categories": menu_categories, + "menu_pages": menu_pages, + "menu_tags": menu_tags, + } + return request.render("website_document_page.wiki", values) diff --git a/website_document_page/data/website_menu.xml b/website_document_page/data/website_menu.xml new file mode 100644 index 00000000..6f96e32f --- /dev/null +++ b/website_document_page/data/website_menu.xml @@ -0,0 +1,8 @@ + + + Wiki + /wiki + + 30 + + diff --git a/website_document_page/models/__init__.py b/website_document_page/models/__init__.py new file mode 100644 index 00000000..745e5d4c --- /dev/null +++ b/website_document_page/models/__init__.py @@ -0,0 +1,7 @@ +# Copyright (C) 2020 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import ( + document_page, + document_tag, + website, +) diff --git a/website_document_page/models/document_page.py b/website_document_page/models/document_page.py new file mode 100644 index 00000000..b83958c9 --- /dev/null +++ b/website_document_page/models/document_page.py @@ -0,0 +1,16 @@ +# Copyright (C) 2020 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class DocumentPage(models.Model): + _inherit = [ + "document.page", + "website.seo.metadata", + "website.published.multi.mixin", + ] + _name = "document.page" + _order = "sequence" + + is_menu = fields.Boolean("Show in the Wiki menu") + sequence = fields.Integer("Sequence") diff --git a/website_document_page/models/document_tag.py b/website_document_page/models/document_tag.py new file mode 100644 index 00000000..f17c1571 --- /dev/null +++ b/website_document_page/models/document_tag.py @@ -0,0 +1,11 @@ +# Copyright (C) 2020 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class DocumentTag(models.Model): + _inherit = "document.tag" + _order = "sequence" + + is_menu = fields.Boolean("Show in the Wiki menu") + sequence = fields.Integer("Sequence") diff --git a/website_document_page/models/website.py b/website_document_page/models/website.py new file mode 100644 index 00000000..c32f6e74 --- /dev/null +++ b/website_document_page/models/website.py @@ -0,0 +1,9 @@ +# Copyright (C) 2020 Open Source Integrators +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class Website(models.Model): + _inherit = "website" + + wiki_id = fields.Many2one("document.page", string="Wiki Main Page") diff --git a/website_document_page/readme/CONTRIBUTORS.rst b/website_document_page/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..bd2fd4ae --- /dev/null +++ b/website_document_page/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Open Source Integrators `_ + + * Maxime Chambreuil diff --git a/website_document_page/readme/DESCRIPTION.rst b/website_document_page/readme/DESCRIPTION.rst new file mode 100644 index 00000000..c57db45c --- /dev/null +++ b/website_document_page/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows you to write web pages and publish documentation. diff --git a/website_document_page/readme/USAGE.rst b/website_document_page/readme/USAGE.rst new file mode 100644 index 00000000..8576f8fc --- /dev/null +++ b/website_document_page/readme/USAGE.rst @@ -0,0 +1,5 @@ +To use this module, you need to: + +* Go to Knowledge menu +* Click on Categories to create the document's category you need with the template +* Click on Pages to create pages and select the previous category to use the template diff --git a/website_document_page/security/ir.model.access.csv b/website_document_page/security/ir.model.access.csv new file mode 100644 index 00000000..02822d97 --- /dev/null +++ b/website_document_page/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +document_page_nobody,document.page nobody,document_page.model_document_page,,1,0,0,0 +document_tag_nobody,document.tag nobody,document_tag.model_document_tag,,1,0,0,0 +document_page_history_nobody,document.page.history nobody,document_page.model_document_page_history,,1,0,0,0 diff --git a/website_document_page/security/ir_rule.xml b/website_document_page/security/ir_rule.xml new file mode 100644 index 00000000..4126cb01 --- /dev/null +++ b/website_document_page/security/ir_rule.xml @@ -0,0 +1,15 @@ + + + Public document page + + [('website_published', '=', True)] + + + + + + + diff --git a/website_document_page/static/description/icon.png b/website_document_page/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/website_document_page/static/description/icon.png differ diff --git a/website_document_page/static/src/scss/website_document_page.scss b/website_document_page/static/src/scss/website_document_page.scss new file mode 100644 index 00000000..a0ad57a8 --- /dev/null +++ b/website_document_page/static/src/scss/website_document_page.scss @@ -0,0 +1,32 @@ +#wrap { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.wiki_menu { + position: relative; + flex: 0 0 20%; + max-width: 20%; +} + +.wiki_content { + position: relative; + flex: 0 0 59%; + max-width: 59%; +} + +.wiki_page_footer { + border: 1px solid #aaa; + background-color: #f9f9f9; + padding: 5px; + margin-top: 1em; + clear: both; +} + +.wiki_sidebar { + position: relative; + flex: 0 0 20%; + max-width: 20%; +} diff --git a/website_document_page/views/document_page.xml b/website_document_page/views/document_page.xml new file mode 100644 index 00000000..70a619f1 --- /dev/null +++ b/website_document_page/views/document_page.xml @@ -0,0 +1,49 @@ + + + + view.document.page.website + document.page + + + + + + + + + + + + + + + + + + view.document.page.published + document.page + + +
+ +
+ + + + + + + + + + + +
+
+
diff --git a/website_document_page/views/document_tag.xml b/website_document_page/views/document_tag.xml new file mode 100644 index 00000000..c03b9c61 --- /dev/null +++ b/website_document_page/views/document_tag.xml @@ -0,0 +1,16 @@ + + + view.document.tag.website + document.tag + + + + + + + + + diff --git a/website_document_page/views/templates.xml b/website_document_page/views/templates.xml new file mode 100644 index 00000000..b54f3baf --- /dev/null +++ b/website_document_page/views/templates.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/website_document_page/views/website.xml b/website_document_page/views/website.xml new file mode 100644 index 00000000..22bf3ac1 --- /dev/null +++ b/website_document_page/views/website.xml @@ -0,0 +1,12 @@ + + + view.website.form.wiki + website + + + + + + + +