From 9a333789da3a6d4e0a61e94d9e79fb38528b91c5 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 26 Feb 2013 10:51:48 +0100 Subject: [PATCH] CCM: competence interface; further clean-up of default data definitions --- expert/README.txt | 6 ++--- expert/search.txt | 16 ++++++------- external/README.txt | 6 ++--- knowledge/data/knowledge_de.dmp | 4 +++- knowledge/data/knowledge_update_de.dmp | 4 +++- knowledge/qualification/base.py | 10 +++++++++ knowledge/qualification/configure.zcml | 9 +++++--- knowledge/qualification/interfaces.py | 19 ++++++++++++++++ knowledge/tests.py | 2 ++ locales/de/LC_MESSAGES/loops.mo | Bin 20890 -> 21548 bytes locales/de/LC_MESSAGES/loops.po | 30 ++++++++++++++++++++++++- organize/README.txt | 2 +- system/sync/README.txt | 2 +- xmlrpc/README.txt | 12 +++++----- 14 files changed, 94 insertions(+), 28 deletions(-) diff --git a/expert/README.txt b/expert/README.txt index 89e946e..d3fd786 100644 --- a/expert/README.txt +++ b/expert/README.txt @@ -27,7 +27,7 @@ configuration): >>> concepts, resources, views = t.setup() >>> len(concepts) + len(resources) - 37 + 36 >>> loopsRoot = site['loops'] @@ -47,11 +47,11 @@ Type- and text-based queries >>> from loops.expert import query >>> qu = query.Title('ty*') >>> list(qu.apply()) - [0, 2, 68] + [0, 2, 65] >>> qu = query.Type('loops:*') >>> len(list(qu.apply())) - 37 + 36 >>> qu = query.Type('loops:concept:predicate') >>> len(list(qu.apply())) diff --git a/expert/search.txt b/expert/search.txt index d752ac1..18df101 100755 --- a/expert/search.txt +++ b/expert/search.txt @@ -66,13 +66,13 @@ zcml in real life: >>> t = searchView.typesForSearch() >>> len(t) - 16 + 15 >>> t.getTermByToken('loops:resource:*').title 'Any Resource' >>> t = searchView.conceptTypesForSearch() >>> len(t) - 13 + 12 >>> t.getTermByToken('loops:concept:*').title 'Any Concept' @@ -91,7 +91,7 @@ a controller attribute for the search view. >>> searchView.submitReplacing('1.results', '1.search.form', pageView) 'submitReplacing("1.results", "1.search.form", - "http://127.0.0.1/loops/views/page/.target99/@@searchresults.html");...' + "http://127.0.0.1/loops/views/page/.target96/@@searchresults.html");...' Basic (text/title) search ------------------------- @@ -177,7 +177,7 @@ of the concepts' titles: >>> request = TestRequest(form=form) >>> view = Search(page, request) >>> view.listConcepts() - u"{identifier: 'id', items: [{label: 'Zope (Thema)', name: 'Zope', id: '104'}, {label: 'Zope 2 (Thema)', name: 'Zope 2', id: '106'}, {label: 'Zope 3 (Thema)', name: 'Zope 3', id: '108'}]}" + u"{identifier: 'id', items: [{label: 'Zope (Thema)', name: 'Zope', id: '101'}, {label: 'Zope 2 (Thema)', name: 'Zope 2', id: '103'}, {label: 'Zope 3 (Thema)', name: 'Zope 3', id: '105'}]}" Preset Concept Types on Search Forms ------------------------------------ @@ -219,13 +219,13 @@ and thus include the customer type in the preset search types. >>> searchView.conceptsForType('loops:concept:customer') [{'token': 'none', 'title': u'not selected'}, - {'token': '77', 'title': u'Customer 1'}, - {'token': '79', 'title': u'Customer 2'}, - {'token': '81', 'title': u'Customer 3'}] + {'token': '74', 'title': u'Customer 1'}, + {'token': '76', 'title': u'Customer 2'}, + {'token': '78', 'title': u'Customer 3'}] Let's use this new search option for querying: - >>> form = {'search.4.text_selected': u'77'} + >>> form = {'search.4.text_selected': u'74'} >>> resultsView = SearchResults(page, TestRequest(form=form)) >>> results = list(resultsView.results) >>> results[0].title diff --git a/external/README.txt b/external/README.txt index f88f3aa..24e3816 100644 --- a/external/README.txt +++ b/external/README.txt @@ -17,7 +17,7 @@ Let's set up a loops site with basic and example concepts and resources. >>> concepts, resources, views = t.setup() >>> loopsRoot = site['loops'] >>> len(concepts), len(resources), len(views) - (34, 3, 1) + (33, 3, 1) Importing loops Objects @@ -44,7 +44,7 @@ Creating the corresponding objects >>> loader = Loader(loopsRoot) >>> loader.load(elements) >>> len(concepts), len(resources), len(views) - (35, 3, 1) + (34, 3, 1) >>> from loops.common import adapted >>> adMyquery = adapted(concepts['myquery']) @@ -118,7 +118,7 @@ Extracting elements >>> extractor = Extractor(loopsRoot, os.path.join(dataDirectory, 'export')) >>> elements = list(extractor.extract()) >>> len(elements) - 67 + 65 Writing object information to the external storage -------------------------------------------------- diff --git a/knowledge/data/knowledge_de.dmp b/knowledge/data/knowledge_de.dmp index 5b873e9..d1a0e36 100644 --- a/knowledge/data/knowledge_de.dmp +++ b/knowledge/data/knowledge_de.dmp @@ -1,5 +1,6 @@ type(u'competence', u'Kompetenz', viewName=u'', - typeInterface=u'', options=u'action.portlet:create_subtype,edit_concept') + typeInterface=u'loops.knowledge.qualification.interfaces.ICompetence', + options=u'action.portlet:create_subtype,edit_concept') type(u'person', u'Person', viewName=u'', typeInterface=u'loops.knowledge.interfaces.IPerson', options=u'action.portlet:createQualification,editPerson') @@ -38,6 +39,7 @@ child(u'general', u'topic', u'standard') child(u'system', u'issubtype', u'standard') +child(u'competence', u'competence', u'issubtype') #child(u'competence', u'training', u'issubtype', usePredicate=u'provides') # records diff --git a/knowledge/data/knowledge_update_de.dmp b/knowledge/data/knowledge_update_de.dmp index 4f427d1..403589f 100644 --- a/knowledge/data/knowledge_update_de.dmp +++ b/knowledge/data/knowledge_update_de.dmp @@ -1,5 +1,6 @@ type(u'competence', u'Kompetenz', viewName=u'', - typeInterface=u'', options=u'action.portlet:create_subtype,edit_concept') + typeInterface=u'loops.knowledge.qualification.interfaces.ICompetence', + options=u'action.portlet:create_subtype,edit_concept') # type(u'person', u'Person', viewName=u'', # typeInterface=u'loops.knowledge.interfaces.IPerson', # options=u'action.portlet:editPerson') @@ -38,6 +39,7 @@ child(u'general', u'requires', u'standard') child(u'system', u'issubtype', u'standard') +child(u'competence', u'competence', u'issubtype') #child(u'competence', u'training', u'issubtype', usePredicate=u'provides') # records diff --git a/knowledge/qualification/base.py b/knowledge/qualification/base.py index ab96a5d..0bdb8f5 100644 --- a/knowledge/qualification/base.py +++ b/knowledge/qualification/base.py @@ -25,4 +25,14 @@ Central part of CCM competence and certification management framework. from zope.component import adapts from zope.interface import implementer, implements +from loops.common import AdapterBase +from loops.knowledge.qualification.interfaces import ICompetence + + +class Competence(AdapterBase): + + implements(ICompetence) + + _contextAttributes = list(ICompetence) + diff --git a/knowledge/qualification/configure.zcml b/knowledge/qualification/configure.zcml index fb02f5f..d8cbc74 100644 --- a/knowledge/qualification/configure.zcml +++ b/knowledge/qualification/configure.zcml @@ -1,7 +1,10 @@ + xmlns:zope="http://namespaces.zope.org/zope" + xmlns:browser="http://namespaces.zope.org/browser" + i18n_domain="loops"> + + diff --git a/knowledge/qualification/interfaces.py b/knowledge/qualification/interfaces.py index d244cdb..85a002a 100644 --- a/knowledge/qualification/interfaces.py +++ b/knowledge/qualification/interfaces.py @@ -23,3 +23,22 @@ Interfaces for knowledge management and elearning with loops. from zope.interface import Interface, Attribute from zope import interface, component, schema +from loops.interfaces import IConceptSchema +from loops.util import _ + + +class ICompetence(IConceptSchema): + """ The competence of a person. + + Maybe assigned to the person via a 'knows' relation or + work items of type 'checkup'. + """ + + validityPeriod = schema.Int( + title=_(u'Validity Period (Months)'), + description=_(u'Number of months the competence remains valid. ' + u'Zero means unlimited validity.'), + default=0, + required=False) + + diff --git a/knowledge/tests.py b/knowledge/tests.py index c893edd..8340a79 100755 --- a/knowledge/tests.py +++ b/knowledge/tests.py @@ -7,6 +7,7 @@ from zope import component from zope.interface.verify import verifyClass from zope.testing.doctestunit import DocFileSuite +from loops.knowledge.qualification.base import Competence from loops.knowledge.survey.base import Questionnaire, Question, FeedbackItem from loops.knowledge.survey.interfaces import IQuestionnaire, IQuestion, \ IFeedbackItem @@ -21,6 +22,7 @@ def importData(loopsRoot): baseImportData(loopsRoot, importPath, 'knowledge_de.dmp') def importSurvey(loopsRoot): + component.provideAdapter(Competence) component.provideAdapter(Questionnaire, provides=IQuestionnaire) component.provideAdapter(Question, provides=IQuestion) component.provideAdapter(FeedbackItem, provides=IFeedbackItem) diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index d52538f9893a53a7e961ed15e985c2038444a411..79c436f21b1f6fa23447ec6f1f3e08f8b18894f3 100644 GIT binary patch delta 8647 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 delta 7997 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 DHc15z diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index ff5492f..4a6cfed 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 0.13.0\n" "POT-Creation-Date: 2007-05-22 12:00 CET\n" -"PO-Revision-Date: 2013-01-16 12:00 CET\n" +"PO-Revision-Date: 2013-02-26 12:00 CET\n" "Last-Translator: Helmut Merz \n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -170,6 +170,30 @@ msgstr "Glossareintrag anlegen..." msgid "Create Glossary Item" msgstr "Glossareintrag anlegen." +# survey / questionnaire + +msgid "Answer Range" +msgstr "Abstufung Bewertungen" + +msgid "Number of items (answer options) to select from." +msgstr "Anzahl der Abstufungen, aus denen bei der Antwort gewählt werden kann." + +msgid "Negativ" +msgstr "Negativbewertung" + +msgid "Value inversion: High selection means low value." +msgstr "Invertierung der Bewertung: Hohe gewählte Stufe bedeutet niedriger Wert." + +# competence (qualification) + +msgid "Validity Period (Months)" +msgstr "Gültigkeitszeitraum (Monate)" + +msgid "Number of months the competence remains valid. Zero means unlimited validity." +msgstr "Anzahl der Monate, die diese Kompetenz gültig bleibt. Null bedeutet unbegrenzte Gültigkeit" + +# organize + msgid "Create Person..." msgstr "Person anlegen..." @@ -212,6 +236,8 @@ msgstr "Adresse bearbeiten..." msgid "Modify address." msgstr "Adresse bearbeiten." +# general + msgid "Create Concept, Type = " msgstr "Begriff anlegen, Typ = " @@ -230,6 +256,8 @@ msgstr "Diese Ressource bearbeiten." msgid "Edit Concept" msgstr "Begriff bearbeiten" +# events and tasks + msgid "Create Event..." msgstr "Termin anlegen..." diff --git a/organize/README.txt b/organize/README.txt index 92c46e0..e013d9f 100644 --- a/organize/README.txt +++ b/organize/README.txt @@ -410,7 +410,7 @@ Send Email to Members >>> form.subject u"loops Notification from '$site'" >>> form.mailBody - u'\n\nEvent #1\nhttp://127.0.0.1/loops/views/menu/.116\n\n' + u'\n\nEvent #1\nhttp://127.0.0.1/loops/views/menu/.113\n\n' Show Presence of Other Users diff --git a/system/sync/README.txt b/system/sync/README.txt index c18c601..5ed477f 100644 --- a/system/sync/README.txt +++ b/system/sync/README.txt @@ -18,7 +18,7 @@ Let's set up a loops site with basic and example concepts and resources. >>> concepts, resources, views = t.setup() >>> loopsRoot = site['loops'] >>> len(concepts), len(resources), len(views) - (34, 3, 1) + (33, 3, 1) >>> from cybertools.tracking.btree import TrackingStorage >>> from loops.system.job import JobRecord diff --git a/xmlrpc/README.txt b/xmlrpc/README.txt index 9b2e033..3ea6557 100755 --- a/xmlrpc/README.txt +++ b/xmlrpc/README.txt @@ -35,7 +35,7 @@ ZCML setup): Let's look what setup has provided us with: >>> len(concepts) - 23 + 22 Now let's add a few more concepts: @@ -73,7 +73,7 @@ applied in an explicit assignment. >>> sorted(t['name'] for t in xrf.getConceptTypes()) [u'competence', u'customer', u'domain', u'file', u'note', u'person', - u'predicate', u'task', u'textdocument', u'topic', u'training', u'type'] + u'predicate', u'task', u'textdocument', u'topic', u'type'] >>> sorted(t['name'] for t in xrf.getPredicates()) [u'depends', u'issubtype', u'knows', u'ownedby', u'provides', u'requires', u'standard'] @@ -96,7 +96,7 @@ All methods that retrieve one object also returns its children and parents: u'hasType' >>> sorted(c['name'] for c in ch[0]['objects']) [u'competence', u'customer', u'domain', u'file', u'note', u'person', - u'predicate', u'task', u'textdocument', u'topic', u'training', u'type'] + u'predicate', u'task', u'textdocument', u'topic', u'type'] >>> pa = defaultPred['parents'] >>> len(pa) @@ -115,7 +115,7 @@ We can also retrieve children and parents explicitely: u'hasType' >>> sorted(c['name'] for c in ch[0]['objects']) [u'competence', u'customer', u'domain', u'file', u'note', u'person', - u'predicate', u'task', u'textdocument', u'topic', u'training', u'type'] + u'predicate', u'task', u'textdocument', u'topic', u'type'] >>> pa = xrf.getParents('5') >>> len(pa) @@ -174,14 +174,14 @@ Updating the concept map >>> topicId = xrf.getObjectByName('topic')['id'] >>> xrf.createConcept(topicId, u'zope2', u'Zope 2') - {'description': u'', 'title': u'Zope 2', 'type': '36', 'id': '75', + {'description': u'', 'title': u'Zope 2', 'type': '36', 'id': '72', 'name': u'zope2'} The name of the concept is checked by a name chooser; if the corresponding parameter is empty, the name will be generated from the title. >>> xrf.createConcept(topicId, u'', u'Python') - {'description': u'', 'title': u'Python', 'type': '36', 'id': '77', + {'description': u'', 'title': u'Python', 'type': '36', 'id': '74', 'name': u'python'} If we try to deassign a ``hasType`` relation nothing will happen; a