"""User Interface for the core tables
"""
from .auth import USER
from gluon import current
from plugin_dbui import (FieldsModifier,
FormModifier,
GridModifier,
StoreModifier,
map_tabpanel)
TPL = ['{PublicationsTitle}
',
'{PublicationsFirst_author}'
' et al'
', {CollaborationsCollaboration}',
', {PublicationsConference_title}',
'
{PublicationsConference_town}',
', {CountriesCountry}',
', {PublicationsConference_dates}'
', {PublicationsPreprint}'
'',
', {PublicationsPreprint}',
', {PublishersAbbreviation}',
' {PublicationsVolume}',
' ({PublicationsYear}) ',
' {PublicationsPages}',
'',
'',
', {ReportsType}',
', {PublicationsReport_numbers}',
', {PublicationsPreprint}',
'',
', {PublicationsUniversities}',
', {PublicationsDefense}']
class CoreUI(object):
@staticmethod
def configure(db, T):
"""Configure the user interface for the history table and
its foreign tables,
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
CoreUI.authors_roles(db, T)
CoreUI.categories(db, T)
CoreUI.countries(db, T)
CoreUI.collaborations(db, T)
CoreUI.orgnisation(db, T)
CoreUI.projects(db, T)
CoreUI.publications(db, T)
CoreUI.publishers(db, T)
CoreUI.reports(db, T)
CoreUI.status(db, T)
CoreUI.teams(db, T)
@staticmethod
def authors_roles(db, T):
"""UI for the authors_roles table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
# ....................................................................
#
# Grid
#
mdf = GridModifier("authors_roles")
mdf.configure_column("role", width=75)
# ....................................................................
#
# Store
#
StoreModifier("authors_roles").orderby(db.authors_roles.role)
@staticmethod
def categories(db, T):
"""UI for the categories table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
tr_contains = T("contains")
# ....................................................................
#
# Grid
#
mdf = GridModifier("categories")
mdf.configure_column("code", width=10)
mdf.configure_column("usual", width=20)
mdf.append_filter(("code", "contains", tr_contains))
mdf.append_filter(("usual", "contains", tr_contains))
mdf.configure_filters(plugins=["pFormToolTip"], width=300)
mdf.configure_gridWithFilter(selectorTitle=T("Filter"))
# ....................................................................
#
# Store
#
StoreModifier("categories").orderby(db.categories.code)
@staticmethod
def collaborations(db, T):
"""UI for the collaborations table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
tr_contains = T("contains")
# ....................................................................
#
# Fields
#
mdf = FieldsModifier("collaborations")
mdf.configure_field("collaboration", xtype="textarea")
mdf.configure_field("synonyms", minimumRows=5)
# ....................................................................
#
# Grid
#
mdf = GridModifier("collaborations")
mdf.append_filter(("collaboration", "contains", tr_contains),
fieldLabel=T("Collaboration"),
xtype="textfield")
mdf.append_filter(("synonyms", "contains", tr_contains),
fieldLabel=T("Synonyms"),
xtype="textfield")
mdf.configure_filters(plugins=["pFormToolTip"], width=300)
mdf.configure_gridWithFilter(selectorTitle=T("Filter"))
# ....................................................................
#
# Store
#
mdf = StoreModifier("collaborations")
mdf.orderby(db.collaborations.collaboration)
@staticmethod
def countries(db, T):
"""UI for the countries table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
tr_contains = T("contains")
# ....................................................................
#
# Fields
#
mdf = FieldsModifier("countries")
mdf.configure_field("synonyms", minimumRows=5)
# ....................................................................
#
# Grid
#
mdf = GridModifier("countries")
mdf.configure_column("country", width=50)
mdf.append_filter(("country", "contains", tr_contains))
mdf.append_filter(("synonyms", "contains", tr_contains),
fieldLabel=T("Synonyms"),
xtype="textfield")
mdf.configure_filters(plugins=["pFormToolTip"], width=300)
mdf.configure_gridWithFilter(selectorTitle=T("Filter"))
# ....................................................................
#
# Store
#
StoreModifier("countries").orderby(db.countries.country)
@staticmethod
def orgnisation(db, T):
"""UI for the organisation table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
# ....................................................................
#
# Grid
#
mdf = GridModifier("organisation")
mdf.configure_column("id_teams", width=30)
# ....................................................................
#
# Store
#
mdf = StoreModifier("organisation")
mdf.orderby(db.teams.team, db.projects.project)
@staticmethod
def projects(db, T):
"""UI for the projects table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
# ....................................................................
#
# Store
#
StoreModifier("projects").orderby(db.projects.project)
@staticmethod
def publications(db, T):
"""UI for the publications table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
year = current.request.now.year
# ....................................................................
#
# Fields
#
mdf = FieldsModifier("publications")
mdf.configure_field("conference_start", format="Y-m-d")
mdf.configure_field("origin", xtype="textarea")
mdf.configure_field("pages", emptyText=T("pages"))
mdf.configure_field("publication_date", format="Y-m-d")
mdf.configure_field("volume", emptyText=T("volume"))
mdf.configure_field("year", emptyText=T("year"), maxValue=year)
mdf.merge_fields("volume",
"pages",
fieldLabel=T("Volume / pages"))
session = current.globalenv["session"]
if session.role == USER:
mdf.configure_field("id_status", hidden=True)
# ....................................................................
#
# Form
#
publications = db.publications
mdf = FormModifier("publications")
mdf.link_comboboxes(master=publications.id_projects,
slave=publications.id_teams,
masterHasSlaveData="organisation",
slaveExtJS={"hidden": True})
# organised fields within tab
mdf.merge_fields("title",
"first_author",
"authors",
"id_collaborations",
"id_publishers",
"volume",
"year",
"submitted",
"preprint",
"publication_url",
title=T("Publication"))
mdf.merge_fields("conference_title",
"conference_url",
"conference_dates",
"conference_town",
"id_countries",
"conference_speaker",
title=T("Conference"))
mdf.merge_fields("report_numbers",
"id_reports",
title=T("Report"))
mdf.merge_fields("directors",
"universities",
"defense",
title=T("Thesis"))
mdf.merge_fields("book_isbn",
"book_issn",
"book_chapters",
title=T("Book"))
mdf.merge_fields("authors_institute",
"id_authors_roles",
"id_teams",
"id_projects",
"id_categories",
"id_status",
"origin",
title=T("Meta"))
mdf.set_mapper(map_tabpanel)
mdf.configure(buttonAlign="right", width=450)
# ....................................................................
#
# Grid
#
mdf = GridModifier("publications")
mdf.configure(plugins=["pGridPaging",
"pMathJax",
"pGridRowEditorUnlockStatusOk",
{"ptype": "pGridRowEditorConfirmDelete",
"resetFields": ["PublicationsId_status",
"PublicationsOrigin"]}])
mdf.merge_columns("title",
"first_author",
"id_collaborations",
"id_publishers",
"volume",
"pages",
"conference_title",
"conference_url",
"conference_dates",
"conference_town",
"id_countries",
"conference_speaker",
"report_numbers",
"id_reports",
"book_isbn",
"book_issn",
"book_chapters",
autohide=True,
header=T("Publication"),
position=0,
tpl=TPL,
width=700)
mdf.hide_columns("id_authors_roles",
"id_teams",
"id_projects",
"authors",
"authors_institute",
"defense",
"directors",
"origin",
"preprint",
"publication_url",
"universities",)
tr_contains = T("contains")
tr_equal = T("is equal to")
mdf.append_filter(("year", "==", tr_equal), allowBlank=True)
mdf.append_filter(("id_teams", "==", tr_equal))
mdf.append_filter(("id_projects", "==", tr_equal))
mdf.append_filter(("id_categories", "==", tr_equal))
mdf.append_filter(("authors_institute", "contains", tr_contains),
allowBlank=True,
fieldLabel=T("Authors"),
xtype="textfield")
mdf.append_filter(("id_authors_roles", "==", tr_equal))
mdf.append_filter(("title", "contains", tr_contains),
allowBlank=True)
mdf.append_filter(("id_publishers", "==", tr_equal))
mdf.append_filter(("volume", "contains", tr_contains),
allowBlank=True)
mdf.append_filter(("report_numbers", "contains", tr_contains),
allowBlank=True)
mdf.append_filter(("id_status", "==", tr_equal))
# NOTE the id is hidden in the form by default. Activate it
mdf.append_filter(("id", "==", tr_equal),
hidden=False,
hideLabel=False,
readOnly=False)
mdf.configure_filters(plugins=["pFormToolTip"], width=300)
mdf.configure_gridWithFilter(selectorTitle=T("Filter"))
# ....................................................................
#
# Store
#
StoreModifier("publications").orderby(~publications.id)
@staticmethod
def publishers(db, T):
"""UI for the publishers table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
# ....................................................................
#
# Fields
#
mdf = FieldsModifier("publishers")
mdf.configure_field("synonyms", minimumRows=5)
# ....................................................................
#
# Grid
#
tr_contains = T("contains")
mdf = GridModifier("publishers")
mdf.append_filter(("publisher", "contains", tr_contains))
mdf.append_filter(("abbreviation", "contains", tr_contains))
mdf.append_filter(("synonyms", "contains", tr_contains),
fieldLabel=T("Synonyms"),
xtype="textfield")
mdf.configure_filters(plugins=["pFormToolTip"], width=300)
mdf.configure_gridWithFilter(selectorTitle=T("Filter"))
# ....................................................................
#
# Store
#
StoreModifier("publishers").orderby(db.publishers.abbreviation)
@staticmethod
def reports(db, T):
"""UI for the reports table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
# ....................................................................
#
# Store
#
StoreModifier("reports").orderby(db.reports.type)
@staticmethod
def status(db, T):
"""UI for the status table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
# ....................................................................
#
# Grid
#
mdf = GridModifier("status")
mdf.configure_column("code", width=10)
mdf.append_filter(("code", "contains", T("contains")))
mdf.configure_filters(plugins=["pFormToolTip"], width=300)
mdf.configure_gridWithFilter(selectorTitle=T("Filter"))
# ....................................................................
#
# Store
#
StoreModifier("status").orderby(db.status.code)
@staticmethod
def teams(db, T):
"""UI for the teams table
Args:
db (pyDAL.DAL): database connection
T (gluon.languages.translator): language translator
"""
# ....................................................................
#
# Store
#
StoreModifier("teams").orderby(db.teams.team)