[ADD] Document_page

This commit is contained in:
Gervais Naoussi 2015-10-22 02:37:37 -04:00
parent 6036333d9a
commit 0901b0f01d
15 changed files with 235 additions and 92 deletions

90
document_page/README.rst Normal file
View File

@ -0,0 +1,90 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
=============
Document Page
=============
This module allows you to write web pages for internal documentation.
Installation
============
This module depends on module knowledge. So make sure to have available it in your addons list
Configuration
=============
No configuration required
Usage
=====
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
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/118/9.0
Known issues / Roadmap
======================
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/
{project_repo}/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here <https://github.com/OCA/knowledge/issues/new?body=module:%20document_page%0Aversion:%209.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* Odoo SA <info@odoo.com>
* Savoir-faire Linux <support@savoirfairelinux.com>
* Gervais Naoussi <gervaisnaoussi@gmail.com>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.
Changelog
---------
v 9.0.1.0.0
Creation of folders models, views, data and demo
document_page_view.xml moved to views and renamed to document_page
document_page_data.xml moved to data and renamed to document_page
document_page_demo.xml moved to demo and renamed to document_page
document_page.py moved to models and renamed to document_page
Module models initialise by the creation of the file __init__.py
wizard file reorganized
folder wizard created
document_page_create_menu.py and document_page_create_show_diff.py moved to wizard
document_page_create_menu_view.xml moved to document_page_create_menu.xml
document_page_create_show_diff_view.xml en document_page_create_show_diff.xml
__openerp_.py et __init__.py file edited in order to reflect the module organization

View File

@ -1,3 +1,4 @@
"""Import of other document page submodule."""
# -*- coding: utf-8 -*-
##############################################################################
#
@ -18,5 +19,5 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import document_page
from . import models
from . import wizard

View File

@ -1,3 +1,4 @@
"""Document Page configuration's file."""
# -*- coding: utf-8 -*-
##############################################################################
#
@ -21,35 +22,29 @@
{
'name': 'Document Page',
'version': '8.0.1.0.1',
'version': '9.0.1.0.0',
'category': 'Knowledge Management',
'description': """
Pages
=====
Web pages
""",
'author': ['OpenERP SA'],
'author': 'OpenERP SA, Odoo Community Association (OCA)',
'website': 'http://www.openerp.com/',
'license': 'AGPL-3',
'depends': [
'knowledge',
'mail',
'knowledge',
],
'data': [
'wizard/document_page_create_menu_view.xml',
'wizard/document_page_show_diff_view.xml',
'document_page_view.xml',
'wizard/document_page_create_menu.xml',
'wizard/document_page_show_diff.xml',
'views/document_page.xml',
'security/document_page_security.xml',
'security/ir.model.access.csv',
],
'demo': [
'document_page_demo.xml'
'demo/document_page.xml'
],
'test': [
'test/document_page_test00.yml'
],
'installable': False,
'installable': True,
'auto_install': False,
'images': [],
'css': ['static/src/css/document_page.css'],
}

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<odoo>
<data noupdate="1">
<record id="wiki_wiki_main" model="document.page">
<field name="name">The OpenERP wiki</field>
@ -8,8 +8,8 @@
<field name="index">1</field>
<field name="summary">Initial Page</field>
<field name="content">==The OpenERP wiki==
[[File:http://www.openerp.com/sites/all/themes/openerp/logo.png OpenERP]]
[[File:http://www.openerp.com/sites/all/themes/openerp/logo.png OpenERP]]
The OpenERP wiki allows you to manage your enterprise's contents using wiki
restructured texts. This module provides a collaborative way to manage internal
@ -38,4 +38,4 @@ FAQs, quality manuals, technical references, etc.
<field name="parent_id" ref="wiki_groups_wikiformatting0"/>
</record>
</data>
</openerp>
</odoo>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<odoo>
<data noupdate="1">
<record id="base.user_demo" model="res.users">
<field eval="[(4, ref('base.group_document_user'))]"
@ -128,4 +128,4 @@ Think of it as an out-of-the-box solution to boost your business' productivity.<
</record>
</data>
</openerp>
</odoo>

View File

@ -0,0 +1,23 @@
"""Data's models registration."""
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import document_page
from . import document_page_history

View File

@ -1,3 +1,4 @@
"""Document model."""
# -*- coding: utf-8 -*-
##############################################################################
#
@ -19,13 +20,14 @@
#
##############################################################################
import logging
import difflib
from openerp import models, fields, api, _
from openerp import models, fields, api
_logger = logging.getLogger(__name__)
class document_page(models.Model):
class DocumentPage(models.Model):
"""This class is use to manage Document."""
_name = "document.page"
_inherit = ['mail.thread']
_description = "Document Page"
@ -99,6 +101,7 @@ class document_page(models.Model):
)
def _get_page_index(self, page, link=True):
"""Return the index of a document."""
index = []
for subpage in page.child_ids:
index += ["<li>" + self._get_page_index(subpage) +
@ -112,6 +115,7 @@ class document_page(models.Model):
return r
def _get_display_content(self):
"""Return the content of a document."""
for page in self:
if page.type == "category":
display_content = self._get_page_index(page, link=False)
@ -121,11 +125,13 @@ class document_page(models.Model):
@api.onchange("parent_id")
def do_set_content(self):
"""We Set it the right content to the new parent."""
if self.parent_id and not self.content:
if self.parent_id.type == "category":
self.content = self.parent_id.content
def create_history(self, page_id, content):
"""Create the first history of a newly created document."""
history = self.env['document.page.history']
return history.create({
"content": content,
@ -134,7 +140,8 @@ class document_page(models.Model):
@api.multi
def write(self, vals):
result = super(document_page, self).write(vals)
"""Write the content and set the history."""
result = super(DocumentPage, self).write(vals)
content = vals.get('content')
if content:
for page in self:
@ -144,51 +151,9 @@ class document_page(models.Model):
@api.model
@api.returns('self', lambda value: value.id)
def create(self, vals):
page_id = super(document_page, self).create(vals)
"""Create the first history of a document."""
page_id = super(DocumentPage, self).create(vals)
content = vals.get('content')
if content:
self.create_history(page_id.id, content)
return page_id
class document_page_history(models.Model):
_name = "document.page.history"
_description = "Document Page History"
_order = 'id DESC'
_rec_name = "create_date"
page_id = fields.Many2one('document.page', 'Page')
summary = fields.Char('Summary', size=256, select=True)
content = fields.Text("Content")
create_date = fields.Datetime("Date")
create_uid = fields.Many2one('res.users', "Modified By")
def getDiff(self, v1, v2):
text1 = self.browse(v1).content
text2 = self.browse(v2).content
line1 = line2 = ''
if text1:
line1 = text1.splitlines(1)
if text2:
line2 = text2.splitlines(1)
if (not line1 and not line2) or (line1 == line2):
return _('There are no changes in revisions.')
else:
diff = difflib.HtmlDiff()
return diff.make_table(
line1, line2,
"Revision-{}".format(v1),
"Revision-{}".format(v2),
context=True
)
def __getattr__(self, attr):
"""Return a dummy callabale"""
if attr in ['_sql', 'init', '_ids']:
raise AttributeError
_logger.warning(
"Trying to access attribute %s on document_page_history",
attr
)
return (lambda *a, **b: None)

View File

@ -0,0 +1,72 @@
"""DocumentPageHistory model."""
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import logging
import difflib
from openerp import models, fields, _
_logger = logging.getLogger(__name__)
class DocumentPageHistory(models.Model):
"""This model is necessary to manage a document history."""
_name = "document.page.history"
_description = "Document Page History"
_order = 'id DESC'
_rec_name = "create_date"
page_id = fields.Many2one('document.page', 'Page')
summary = fields.Char('Summary', select=True)
content = fields.Text("Content")
create_date = fields.Datetime("Date")
create_uid = fields.Many2one('res.users', "Modified By")
def getDiff(self, v1, v2):
"""Return the difference between two version of document version."""
text1 = self.browse(v1).content
text2 = self.browse(v2).content
line1 = line2 = ''
if text1:
line1 = text1.splitlines(1)
if text2:
line2 = text2.splitlines(1)
if (not line1 and not line2) or (line1 == line2):
return _('There are no changes in revisions.')
else:
diff = difflib.HtmlDiff()
return diff.make_table(
line1, line2,
"Revision-{}".format(v1),
"Revision-{}".format(v2),
context=True
)
def __getattr__(self, attr):
"""Return a dummy callabale."""
if attr in ['_sql', 'init', '_ids']:
raise AttributeError
_logger.warning(
"Trying to access attribute %s on document_page_history",
attr
)
return (lambda *a, **b: None)

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<odoo>
<data noupdate="0">
<record id="base.group_document_user" model="res.groups">
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
</data>
</openerp>
</odoo>

View File

@ -1,9 +1,6 @@
<?xml version="1.0"?>
<openerp>
<odoo>
<data>
<menuitem name="Knowledge"
id="knowledge.menu_document" />
<menuitem name="Pages"
id="menu_wiki"
parent="knowledge.menu_document"
@ -316,4 +313,4 @@
src_model="document.page"/>
</data>
</openerp>
</odoo>

View File

@ -1,3 +1,4 @@
"""wizard's models registration."""
# -*- coding: utf-8 -*-
##############################################################################
#
@ -20,5 +21,3 @@
##############################################################################
from . import document_page_create_menu
from . import document_page_show_diff
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,3 +1,4 @@
"""DocumentPageCreateMenu model."""
# -*- coding: utf-8 -*-
##############################################################################
#
@ -21,8 +22,9 @@
from openerp import models, fields, api
class document_page_create_menu(models.TransientModel):
""" Create Menu """
class DocumentPageCreateMenu(models.TransientModel):
"""Create Menu."""
_name = "document.page.create.menu"
_description = "Wizard Create Menu"
@ -39,7 +41,8 @@ class document_page_create_menu(models.TransientModel):
@api.model
def default_get(self, fields_list):
res = super(document_page_create_menu, self).default_get(fields_list)
"""Add page to the menu."""
res = super(DocumentPageCreateMenu, self).default_get(fields_list)
page_id = self.env.context.get('active_id')
obj_page = self.env['document.page']
page = obj_page.browse(page_id)
@ -48,6 +51,7 @@ class document_page_create_menu(models.TransientModel):
@api.multi
def document_page_menu_create(self):
"""Menu creation."""
obj_page = self.env['document.page']
obj_menu = self.env['ir.ui.menu']
obj_action = self.env['ir.actions.act_window']
@ -86,6 +90,3 @@ class document_page_create_menu(models.TransientModel):
'type': 'ir.actions.client',
'tag': 'reload',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<odoo>
<data>
<!-- Create Menu From view -->
<record id="view_wiki_create_menu" model="ir.ui.view">
@ -38,4 +38,4 @@
</record>
</data>
</openerp>
</odoo>

View File

@ -1,3 +1,4 @@
"""DocumentPageShowDiff model."""
# -*- coding: utf-8 -*-
##############################################################################
#
@ -22,12 +23,13 @@ from openerp import models, fields, _
from openerp import exceptions
class showdiff(models.TransientModel):
""" Display Difference for History """
class DocumentPageShowDiff(models.TransientModel):
"""Display Difference for History."""
_name = 'wizard.document.page.history.show_diff'
def get_diff(self):
"""Return the Difference between two document."""
history = self.env["document.page.history"]
ids = self.env.context.get('active_ids', [])
@ -57,5 +59,3 @@ class showdiff(models.TransientModel):
readonly=True,
default=get_diff
)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<odoo>
<data>
<!-- Create Index Form view -->
@ -44,4 +44,4 @@
view_type="form"/>
</data>
</openerp>
</odoo>