From cf27d3b83527781e9b5c80b8f5739afc4f48b38f Mon Sep 17 00:00:00 2001
From: David Beal
Date: Fri, 16 Sep 2016 11:40:58 +0200
Subject: [PATCH] [IMP] add security file
---
.travis.yml | 1 +
help_popup/README.rst | 31 +++--
help_popup/__init__.py | 2 +-
help_popup/__openerp__.py | 5 +
help_popup/demo/help.xml | 79 +++++++------
help_popup/models/__init__.py | 2 +
.../{model.py => models/action_window.py} | 109 +++++++++---------
help_popup/models/models.py | 40 +++++++
help_popup/report/all.xml | 4 +-
help_popup/report/help.xml | 2 +-
help_popup/security/group.xml | 12 ++
help_popup/security/ir.model.access.csv | 3 +
help_popup/static/description/contributor.png | Bin 0 -> 7046 bytes
help_popup/static/description/doc.png | Bin 0 -> 3385 bytes
help_popup/static/description/nodoc.png | Bin 0 -> 3625 bytes
help_popup/static/description/popup.png | Bin 123947 -> 253490 bytes
help_popup/static/description/sales.png | Bin 0 -> 1338 bytes
help_popup/static/description/sales_doc.png | Bin 0 -> 54425 bytes
help_popup/static/src/js/popup_help.js | 3 +-
help_popup/tests/__init__.py | 1 +
help_popup/tests/test_help.py | 44 +++++++
help_popup/views/action_view.xml | 11 +-
22 files changed, 233 insertions(+), 116 deletions(-)
create mode 100644 help_popup/models/__init__.py
rename help_popup/{model.py => models/action_window.py} (63%)
create mode 100644 help_popup/models/models.py
create mode 100644 help_popup/security/group.xml
create mode 100644 help_popup/security/ir.model.access.csv
create mode 100644 help_popup/static/description/contributor.png
create mode 100644 help_popup/static/description/doc.png
create mode 100644 help_popup/static/description/nodoc.png
create mode 100644 help_popup/static/description/sales.png
create mode 100644 help_popup/static/description/sales_doc.png
create mode 100644 help_popup/tests/__init__.py
create mode 100644 help_popup/tests/test_help.py
diff --git a/.travis.yml b/.travis.yml
index 04b322b4..3e7e3afa 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -32,6 +32,7 @@ install:
- git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools
- export PATH=${HOME}/maintainer-quality-tools/travis:${PATH}
- travis_install_nightly
+ - pip install bs4
script:
- travis_run_tests
diff --git a/help_popup/README.rst b/help_popup/README.rst
index 516d9bd7..82242d5f 100644
--- a/help_popup/README.rst
+++ b/help_popup/README.rst
@@ -10,36 +10,31 @@ It brings to end users inline documentation.
Some parts of the documentation can be modified by anyone (with proper rights).
-Configuration
-=============
-
-* Go to any view and click on the `?` near the title view.
-* Edit the html field to add content
-
-
-* You can provide documentation with this module by appending data
- in the field advanced_help (relative to action) or advanced_help_model
- if your help must be associated to model instead of action
-
-
Usage
=====
-Click on ? button
+Read the documentation below
.. image:: help_popup/static/description/popup.png
- :alt: License: Help Popup
+ :alt: Help Popup
+
+Here is the documentation for the whole sales menu with a summary
+
+.. image:: help_popup/static/description/sales_doc.png
+ :alt: Documentaion for main menu
Alternative
-----------
If you have website module installed, it could be an option
-to install help_online instead of this module.
+to install help_online instead of this module. Just compare them.
+
-Help Online is more advanced (allow the end user to add help)
-but depends on an other module.
-Help popup is more like an embedded help that use power users for end users.
+Roadmap / issue
+===============
+* For v9 move to knowledge repository
+* Allow to plug an online translator to reduce the translation effort to the popup.
Bug Tracker
diff --git a/help_popup/__init__.py b/help_popup/__init__.py
index 9186ee3a..0650744f 100644
--- a/help_popup/__init__.py
+++ b/help_popup/__init__.py
@@ -1 +1 @@
-from . import model
+from . import models
diff --git a/help_popup/__openerp__.py b/help_popup/__openerp__.py
index 52f20da8..0468af19 100644
--- a/help_popup/__openerp__.py
+++ b/help_popup/__openerp__.py
@@ -16,10 +16,15 @@
'report/report.xml',
'report/help.xml',
'report/all.xml',
+ 'security/group.xml',
+ 'security/ir.model.access.csv',
],
'demo': [
'demo/help.xml',
],
+ 'external_dependencies': {
+ 'python': ['bs4'],
+ },
'qweb': [
'static/src/xml/popup_help.xml',
],
diff --git a/help_popup/demo/help.xml b/help_popup/demo/help.xml
index 44d5ab67..4679dc57 100644
--- a/help_popup/demo/help.xml
+++ b/help_popup/demo/help.xml
@@ -7,22 +7,9 @@
Hi Odooer,
-
-
-
-I'm the field 'enduser_help' in the Customer action model
-
-
-I'm displayed in a Qweb html report
-
-
-
-Don't hesitate to customized me with your own words and syntax
-
-
-You can write any html tag. Here is an image with img tag
-
-
+
+Here is a documentation tool. You can customize these lines.
+Check lines below to learn more about this feature.
]]>
@@ -32,24 +19,48 @@ Don't hesitate to customized me with your own words and syntax
Hi Odoo community,
-
-
-
-I'm the field 'advanced_help' in the customer action also displayed in Qweb report.
-
-
-I wrote these words to explain the main purpose:
-
-Odoo community companies can insert their documenation here with data in their modules.
-Then, any end users can see this documentation in one click.
-
-End users can also display and print documentation about an entire menu.
-
-
-
-
-
+Main functionalities:
+
+ - Documentation is contextual by model or action: the right help to the good place.
+ - Modules contributors can embeds their documentation in their modules: documentation access in 1 click by model or action.
+ - End users can also produce some html documentation to complete missing parts.
+ - Documentation can also been edited for a complete base menu: Sales, Purchase, etc.
+ - Documentation can be printed with Ctrl + P shortcut.
+
+
+
+How to use it:
+
+ - When you see on any user interface part click on '?'.
+ - Click on edit and fill 'End Users help' field.
+ - When you see click on '?' button to access directly to the documentation.
+ - With the 2 buttons on the right, can either edit help or call the documentation of the whole main menus
+
+
+
How to embedds documentation in your module:
+
+ - You can insert html with standard Odoo xml data.
+ - Data are inserted with 'ir.actions.act_window' model
+ - If your data concerns a model, then fill the field 'advanced_help_model' of your action.
+ - If your data is specific to 1 action window (i.e. only customers, not suppliers) then fill the field 'avanced_help' with your data.
+ - Example of inserted data
+
+ <record id="base.action_partner_form" model="ir.actions.act_window">
+
+ <field name="advanced_help"><![CDATA[
+ put your html data here
+
+ ]]></field>
+
+ </record>
+
+ - You can do of the same way with 'advanced_help_model' field.
+ - Several modules can modify a fraction of the same field: remove of data at uninstall is taken account.
+
+
+
+
]]>
@@ -68,7 +79,7 @@ Use these multicategories to classify your partners
-
Who does not want to rob a bank?
diff --git a/help_popup/models/__init__.py b/help_popup/models/__init__.py
new file mode 100644
index 00000000..2b9b1823
--- /dev/null
+++ b/help_popup/models/__init__.py
@@ -0,0 +1,2 @@
+from . import models
+from . import action_window
diff --git a/help_popup/model.py b/help_popup/models/action_window.py
similarity index 63%
rename from help_popup/model.py
rename to help_popup/models/action_window.py
index 1bf54023..7bf9ea34 100644
--- a/help_popup/model.py
+++ b/help_popup/models/action_window.py
@@ -2,36 +2,18 @@
# © 2015 David BEAL @ Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-from BeautifulSoup import BeautifulSoup as BSHTML
+import logging
import inspect
from openerp import _, api, models, fields
-from openerp.exceptions import Warning as UserError
+_logger = logging.getLogger(__name__)
-class ErpHelp(models.AbstractModel):
- _name = 'erp.help'
-
- enduser_help = fields.Html(
- string="End User Help",
- help="Use this field to add custom content for documentation purpose\n"
- "mainly by power users ")
- advanced_help = fields.Text(
- string="Advanced Help", groups='base.group_no_one',
- help="Use this field to add custom content for documentation purpose\n"
- "mainly by developers or consultants")
-
- # @api.multi
- # def write(self, vals):
- # if not self._context.get('install_mode') and 'advanced_help' in vals:
- # raise UserError(_("Advanced help field must only be updated "
- # "by install mode (not with the user interface"))
- # return super(ErpHelp, self).write(vals)
-
-
-class IrModel(models.Model):
- _inherit = ['ir.model', 'erp.help']
- _name = 'ir.model'
+try:
+ from bs4 import BeautifulSoup as BSHTML
+except ImportError:
+ _logger.debug(
+ 'Beautifulsoup required for help_popup module is not installed')
class IrActionsActwindow(models.Model):
@@ -40,17 +22,18 @@ class IrActionsActwindow(models.Model):
_rpt_menu = False
enduser_help_model = fields.Html(
- string='Enduser Help from Model', store="True",
- compute='_compute_model_help', inverse='_inverse_model_help',
+ string='Enduser Help from Model', related='model_id.enduser_help',
help="")
advanced_help_model = fields.Text(
- string='Advanced Help from model', store="True",
- compute='_compute_model_help', inverse='_inverse_model_help',
+ string='Advanced Help from model', related='model_id.advanced_help',
help="")
action_help = fields.Boolean(string="Display Action Help")
help_has_content = fields.Boolean(
string="Content in help", compute='_compute_contains_help',
- help="One of the help has content")
+ help="One of the help field has content")
+ model_id = fields.Many2one(
+ string='Model', comodel_name='ir.model', store=True,
+ compute='_compute_model_id')
@api.one
@api.depends('enduser_help', 'advanced_help',
@@ -62,30 +45,29 @@ class IrActionsActwindow(models.Model):
else:
self.help_has_content = False
- @api.multi
- def _compute_model_help(self):
- for rec in self:
- model = rec.env['ir.model'].search([('model', '=', rec.res_model)])
- rec.enduser_help_model = model.enduser_help
- rec.advanced_help_model = model.advanced_help
-
- def _inverse_model_help(self):
- for rec in self:
- model = rec.env['ir.model'].search([('model', '=', rec.res_model)])
- model.enduser_help = rec.enduser_help_model
- model.advanced_help = rec.advanced_help_model
+ @api.one
+ @api.depends('res_model')
+ def _compute_model_id(self):
+ if self.res_model:
+ model = self.env['ir.model'].search(
+ [('model', '=', self.res_model)])
+ if model:
+ self.model_id = model.id
@api.multi
def write(self, vals):
if self._context.get('install_mode'):
- module_name = self.module_being_update_or_insert()
- for field in ['advanced_help']:
- if field in vals:
+ module_name = self.module_being_processing()
+ for field in ['advanced_help', 'advanced_help_model']:
+ if module_name and field in vals:
self._update_help_field(vals, field, module_name)
return super(IrActionsActwindow, self).write(vals)
@api.multi
def _update_help_field(self, vals, field, module_name):
+ """ update partially the content of the field according to
+ which inserted information inside
+ """
new_val_field = u'%s' % (
module_name, vals[field] or '', module_name)
original_val_field = vals[field]
@@ -105,17 +87,21 @@ class IrActionsActwindow(models.Model):
self[field], new_val_field)
@api.model
- def module_being_update_or_insert(self):
+ def module_being_processing(self):
for elm in inspect.stack():
arg_values = inspect.getargvalues(elm[0])
if 'locals' in arg_values.__dict__:
- if arg_values.__dict__['locals'].get('module'):
- module = arg_values.__dict__['locals'].get('module')
- if module not in self.env.registry:
- return arg_values.__dict__['locals'].get('module')
+ module_name = arg_values.__dict__['locals'].get('module')
+ if module_name and \
+ module_name not in self.env.registry._init_modules:
+ return module_name
+ # We don't know stack evolution in future versions, alert required
+ _logger.warning("'module_being_processing()' hasn't found "
+ "module name in the stack. Please check this method.")
+ return False
@api.multi
- def open_help_popup(self):
+ def button_open_help_popup(self):
""" Open in a new tab instead of in popup"""
self.ensure_one()
return {
@@ -127,7 +113,7 @@ class IrActionsActwindow(models.Model):
@api.model
def get_help_actions(self):
- """ called by the template"""
+ """ called by qweb template"""
self._rpt_menu = self.get_main_menu()
menu_names = self.get_menu_names(self._rpt_menu)
actions = self.search([
@@ -150,7 +136,7 @@ class IrActionsActwindow(models.Model):
('value', '=', 'ir.actions.act_window,%s' % self.id),
])
if ir_vals:
- # we only keep the first menu beacause we have no info on menu_id
+ # we only keep the first menu because we have no info on menu_id
self._rpt_menu = self.env['ir.ui.menu'].browse(ir_vals[0].res_id)
while self._rpt_menu.parent_id:
self._rpt_menu = self._rpt_menu.parent_id
@@ -171,7 +157,22 @@ class IrActionsActwindow(models.Model):
return {int(x.value[22:]): map_menu[x.res_id] for x in ir_vals}
def _anchorize(self, string):
- """ called by template """
+ """ called by qweb template """
for char in ["'", '"', ' ']:
string = string.replace(char, '-')
return string
+
+ @api.one
+ def remove_obsolete_help(self, module_name):
+ """ We need to remove some partial content of the file """
+ for field in ['advanced_help', 'advanced_help_model']:
+ tag = getattr(
+ BSHTML(self[field]), 'help_%s' % module_name)
+ if tag:
+ old_content = ''.join(
+ [unicode(x) for x in tag.contents if x])
+ if old_content:
+ to_replace = '%s' % (
+ module_name, old_content, module_name)
+ value = self[field].replace(to_replace, '')
+ self.write({field: value})
diff --git a/help_popup/models/models.py b/help_popup/models/models.py
new file mode 100644
index 00000000..41c309e7
--- /dev/null
+++ b/help_popup/models/models.py
@@ -0,0 +1,40 @@
+# coding: utf-8
+# © 2015 David BEAL @ Akretion
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+
+from openerp import api, models, fields
+
+
+class ErpHelp(models.AbstractModel):
+ _name = 'erp.help'
+
+ enduser_help = fields.Html(
+ string="End User Help",
+ help="Use this field to add custom content for documentation purpose\n"
+ "mainly by power users ")
+ advanced_help = fields.Text(
+ string="Advanced Help", groups='base.group_no_one',
+ help="Use this field to add custom content for documentation purpose\n"
+ "mainly by developers or consultants")
+
+
+class IrModel(models.Model):
+ _inherit = ['ir.model', 'erp.help']
+ _name = 'ir.model'
+
+
+class IrModuleModule(models.Model):
+ _inherit = 'ir.module.module'
+
+ @api.multi
+ def module_uninstall(self):
+ if self.name != 'help_popup':
+ domain = ['|',
+ ('advanced_help', 'like', '%' + self.name + '%'),
+ ('advanced_help_model', 'like', '%' + self.name + '%')]
+ actions = self.env['ir.actions.act_window'].search(domain)
+ for record in actions:
+ record.with_context(
+ help_uninstall=True).remove_obsolete_help(self.name)
+ return super(IrModuleModule, self).module_uninstall()
diff --git a/help_popup/report/all.xml b/help_popup/report/all.xml
index db7efbea..c091d300 100644
--- a/help_popup/report/all.xml
+++ b/help_popup/report/all.xml
@@ -23,8 +23,8 @@
-
-
+
+
diff --git a/help_popup/report/help.xml b/help_popup/report/help.xml
index 03dcbf86..39bb2960 100644
--- a/help_popup/report/help.xml
+++ b/help_popup/report/help.xml
@@ -21,7 +21,7 @@
-
+
Internal
diff --git a/help_popup/security/group.xml b/help_popup/security/group.xml
new file mode 100644
index 00000000..b716cd79
--- /dev/null
+++ b/help_popup/security/group.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ Inline Help
+
+
+
+
+
diff --git a/help_popup/security/ir.model.access.csv b/help_popup/security/ir.model.access.csv
new file mode 100644
index 00000000..156925de
--- /dev/null
+++ b/help_popup/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_ir_model_group_help,ir_model_group_help,model_ir_model,group_help,1,1,0,0
+access_ir_actions_act_window_group_help,ir_actions_act_window_group_help,model_ir_actions_act_window,group_help,1,1,0,0
diff --git a/help_popup/static/description/contributor.png b/help_popup/static/description/contributor.png
new file mode 100644
index 0000000000000000000000000000000000000000..7bff1b295969408415dc9262736af7d11f16cd8d
GIT binary patch
literal 7046
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
literal 0
HcmV?d00001
diff --git a/help_popup/static/description/doc.png b/help_popup/static/description/doc.png
new file mode 100644
index 0000000000000000000000000000000000000000..c887527d3e04b7101e01e6cc523b152550516d89
GIT binary patch
literal 3385
zcmV-94aV|`P)(m6ney+E@9gtebi3)9R)bWm(-cyP9=x=Ce<&
z%(S%3EMJu-Mn1SEp>^dYU?eCYFv1M;-h1Ca&Ttq8W_XBSUB3DKHM93#Yp=C`d#|H=I6MkNY+Kf%hKh80B
zTu~>~hj&6e3BF_CoKp#bK5P5-3swL?_lc?hcx+Udf^)!HdFF#xSAKI9sQPxtiIn9N
zLmD`6RMKoLl@qgLm%UN$AP9>=M`M_Bd0HDW%FV0U26)2^g6CwsDJn&fZkIPQffft?q-F#=j)oo8LIam$&
zPk4R9W3k>G0KK{|bu&8dUcoD*2e&wab+%VXz%yL#P3e7c19h#xck?n%QV
z)Zp6VOCR5G(LQzlyYps#Fm~C7g>gy%Ahi0IgS);yom*5~uJ;OxjOx`tamw8jZwdAS
z0AjnmYw>e?D*(;dSC)@B|IueZT)1rV?{&+_$#Z5W2NoXscu!hZUWrZ_+V|F!hv!a=
z@g>p<8j641w>K>-zp%K<>=PV4@V3b_?jCLLWfg~(JhiPD5C*-l`ETaEo3Az(C
z)3>O=&91#@Kf8oLsStufgC8E>{q}HgCAAh7R%}eamaV5&8*8`TCZw85GK(Z_eWr}=
zE;2?Llez>!9lvnhmWL?-(MR2|Yl#GDjNB>^LI`XXY5z{$lx4Cva)b6tUizo2PoBMh
z)jwuLDb>HN_P=>EjD;O_#0#N|6u(R(pQ?>u(+`w%O%qbxB@zNnYj;XC7GbVoJ1%
z5cyWG%iOr+c$JhZs){lXZOG0$?pt`l{us@6EkEu3rFIN
zUHWPN#-C38chMUQZVM7g!#Oo%Z+mV3i7G%1K_G;dyY^ywly|#%6$PSEDW*>7nP9s1
zX`0#Q>zg8^56l6SQl{_=3=9km4AgkrH@*x>
z+(|nz=YRHbmI;8O_vHDhue`i?Udmt%0DAG0%_pn5e^Tnkbqiyq!LbY1ZCU+LZ!Zq6
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
literal 0
HcmV?d00001
diff --git a/help_popup/static/description/popup.png b/help_popup/static/description/popup.png
index 812551cc97efbd2c9fd02646d6c473e05c069c6d..14f06249c4783da72d0725327f52b406216f60d5 100644
GIT binary patch
literal 253490
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