Allow to override module name of a specific application either through the model...
authorMichael Spahn <m.spahn@metaways.de>
Fri, 4 Aug 2017 13:40:42 +0000 (15:40 +0200)
committerMichael Spahn <m.spahn@metaways.de>
Mon, 7 Aug 2017 06:11:59 +0000 (08:11 +0200)
Change-Id: Icce36d4ab54f9055262dd40ae35f2a2d7ab01578
Reviewed-on: http://gerrit.tine20.com/customers/5399
Tested-by: Jenkins CI (http://ci.tine20.com/) <tine20-jenkins@metaways.de>
Reviewed-by: Michael Spahn <m.spahn@metaways.de>
Tested-by: Michael Spahn <m.spahn@metaways.de>
tine20/Tinebase/ModelConfiguration.php
tine20/Tinebase/js/data/Record.js
tine20/Tinebase/js/widgets/ContentTypeTreePanel.js

index 9388b96..148b36c 100644 (file)
@@ -25,6 +25,7 @@
  * @property string     $identifier legacy
  * @property string     $recordName Human readable name of the record
  * @property string     $recordsName Human readable name of multiple records
+ * @property string     $moduleName The name of the module if it doesn't fit to the recordsName, e.g. used in frontend module tree panel
  * @property string     $containerProperty The property of the container, if any
  * @property boolean    $containerUsesFilter set this to false, if no filter and grid column should be created - default is true
  * @property boolean    $hasPersonalContainer set this to false, if personal containers should be ommited - default is true
@@ -701,7 +702,7 @@ class Tinebase_ModelConfiguration {
         'containerProperty', 'containersName', 'containerName', 'defaultSortInfo', 'fieldKeys', 'filterModel',
         'defaultFilter', 'requiredRight', 'singularContainerMode', 'fields', 'defaultData', 'titleProperty',
         'useGroups', 'fieldGroupFeDefaults', 'fieldGroupRights', 'multipleEdit', 'multipleEditRequiredRight',
-        'copyEditAction', 'copyOmitFields', 'recordName', 'recordsName', 'appName', 'modelName', 'createModule',
+        'copyEditAction', 'copyOmitFields', 'recordName', 'recordsName', 'appName', 'modelName', 'createModule', 'moduleName',
         'isDependent', 'hasCustomFields', 'modlogActive', 'hasAttachments', 'idProperty', 'splitButton',
         'attributeConfig', 'hasPersonalContainer', 'import', 'export', 'virtualFields', 'group',
     );
@@ -1441,7 +1442,12 @@ class Tinebase_ModelConfiguration {
             
             // add calculated values to frontend configuration
             foreach ($this->_frontendProperties as $prop) {
-                $this->_frontendConfiguration[$prop] = $this->{'_' . $prop};
+                // There should be no need to require all properties, the frontend should handle the abstinence.
+                $property = '_' . $prop;
+                if (!property_exists($this, $property)) {
+                    continue;
+                }
+                $this->_frontendConfiguration[$prop] = $this->{$property};
             }
         }
         return $this->_frontendConfiguration;
index 84c0a8b..1b7bee3 100644 (file)
@@ -286,6 +286,17 @@ Tine.Tinebase.data.Record.create = function(o, meta) {
             
         return i18n.n_(p.recordName, p.recordsName, 1);
     };
+    f.getModuleName = function () {
+        var app = Tine.Tinebase.appMgr.get(p.appName),
+            i18n = app && app.i18n ? app.i18n : i18n,
+            moduleName;
+
+        if (p.modelConfiguration && p.modelConfiguration.moduleName) {
+            return i18n._(p.modelConfiguration.moduleName);
+        }
+
+        return p.moduleName ? i18n._(p.moduleName) : f.getRecordsName();
+    };
     f.getRecordsName = function() {
         var app = Tine.Tinebase.appMgr.get(p.appName),
             i18n = app && app.i18n ? app.i18n :i18n;
index 0e16ddd..d057598 100644 (file)
@@ -166,7 +166,7 @@ Ext.extend(Tine.widgets.ContentTypeTreePanel, Ext.tree.TreePanel, {
                 id : 'treenode-' + recordClass.getMeta('modelName'),
                 contentType: recordClass.getMeta('modelName'),
                 iconCls: modelApp.appName + modelName,
-                text: recordClass.getRecordsName(),
+                text: recordClass.getModuleName(),
                 leaf : true
             };