From 5988e2a706ffd8c54f5e95e94e0381274e92ff30 Mon Sep 17 00:00:00 2001
From: Brad Shuttleworth
Date: Fri, 7 Apr 2006 15:55:19 +0000
Subject: [PATCH] pending merges: Brad Shuttleworth 2006-04-07 fix for fieldset overviews. Brad Shuttleworth 2006-04-07 KTS-644: Add overview & test to conditional... Brad Shuttleworth 2006-04-07 KTS-453: show types and fieldsets on respe... Brad Shuttleworth 2006-04-07 merge in. Brad Shuttleworth 2006-04-07 KTS-747: invalid role-allocation lookup
---
lib/metadata/fieldset.inc.php | 21 +++++++++++++++++++++
lib/roles/roleallocation.inc.php | 2 +-
plugins/ktcore/admin/documentFields.php | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
plugins/ktcore/admin/documentTypes.php | 18 ++++++++++++++++++
resources/js/conditional_usage.js | 3 ++-
templates/ktcore/documenttypes/list.smarty | 12 ++++++++----
templates/ktcore/metadata/conditional/conditional_overview.smarty | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
templates/ktcore/metadata/conditional/conditional_rename_behaviours.smarty | 29 +++++++++++++++++++++++++++++
templates/ktcore/metadata/listFieldsets.smarty | 5 +++++
9 files changed, 295 insertions(+), 6 deletions(-)
create mode 100644 templates/ktcore/metadata/conditional/conditional_overview.smarty
create mode 100644 templates/ktcore/metadata/conditional/conditional_rename_behaviours.smarty
diff --git a/lib/metadata/fieldset.inc.php b/lib/metadata/fieldset.inc.php
index 2667b65..90601fe 100644
--- a/lib/metadata/fieldset.inc.php
+++ b/lib/metadata/fieldset.inc.php
@@ -161,6 +161,27 @@ class KTFieldset extends KTEntity {
}
return $aRet;
}
+
+ function &getAssociatedTypes() {
+ // NOTE: this returns null if we are generic (all is the wrong answer)
+ if ($this->getIsGeneric()) { return null; }
+
+ $sTable = KTUtil::getTableName('document_type_fieldsets');
+ $aQuery = array(
+ "SELECT document_type_id FROM $sTable WHERE fieldset_id = ?",
+ array($this->getId()),
+ );
+ $aIds = DBUtil::getResultArrayKey($aQuery, 'document_type_id');
+
+ $aRet = array();
+ foreach ($aIds as $iID) {
+ $oType = DocumentType::get($iID);
+ if (!PEAR::isError($oType)) {
+ $aRet[] = $oType;
+ }
+ }
+ return $aRet;
+ }
function &getFields() {
return DocumentField::getByFieldset($this);
diff --git a/lib/roles/roleallocation.inc.php b/lib/roles/roleallocation.inc.php
index 3955c2c..c3a4505 100644
--- a/lib/roles/roleallocation.inc.php
+++ b/lib/roles/roleallocation.inc.php
@@ -110,7 +110,7 @@ class RoleAllocation extends KTEntity {
' LEFT JOIN ' . $fTable . ' AS f ON (f.id = ra.folder_id) ' .
' WHERE f.id IN ' . $folders .
' AND ra.role_id = ?' .
- ' ORDER BY CHAR_LENGTH(f.parent_folder_ids) desc, f.parent_folder_ids DESC; ';
+ ' ORDER BY CHAR_LENGTH(f.parent_folder_ids) desc, f.parent_folder_ids DESC';
$aParams = array($iRoleId);
$aRoleAllocIds = DBUtil::getResultArrayKey(array($sQuery, $aParams), 'id');
diff --git a/plugins/ktcore/admin/documentFields.php b/plugins/ktcore/admin/documentFields.php
index 752580c..ebfd228 100755
--- a/plugins/ktcore/admin/documentFields.php
+++ b/plugins/ktcore/admin/documentFields.php
@@ -61,6 +61,7 @@ class KTDocumentFieldDispatcher extends KTAdminDispatcher {
$oTemplating =& KTTemplating::getSingleton();
$oTemplate =& $oTemplating->loadTemplate('ktcore/metadata/listFieldsets');
$oTemplate->setData(array(
+ 'context' => $this,
'fieldsets' => KTFieldset::getList(),
'creation_fields' => $createFields,
));
@@ -68,6 +69,25 @@ class KTDocumentFieldDispatcher extends KTAdminDispatcher {
}
// }}}
+ function getTypesForFieldset($oFieldset) {
+ if ($oFieldset->getIsGeneric()) {
+ return _kt('All types use this generic fieldset.');
+ }
+
+ $types = $oFieldset->getAssociatedTypes();
+ if (PEAR::isError($types)) {
+ return _kt('Error retrieving list of types.');
+ }
+ if (empty($types)) {
+ return _kt('None');
+ }
+ $aNames = array();
+ foreach ($types as $oType) {
+ $aNames[] = $oType->getName();
+ }
+ return implode(', ', $aNames);
+ }
+
// {{{ do_edit
function do_edit() {
$this->oPage->setBreadcrumbDetails("edit");
@@ -872,6 +892,122 @@ class KTDocumentFieldDispatcher extends KTAdminDispatcher {
$actionStr .= ")";
return $actionStr;
}
+
+
+ function do_viewOverview() {
+ $fieldset_id = KTUtil::arrayGet($_REQUEST, "fieldset_id");
+ $oTemplating =& KTTemplating::getSingleton();
+ $oTemplate = $oTemplating->loadTemplate("ktcore/metadata/conditional/conditional_overview");
+
+
+ $oFieldset =& KTFieldset::get($fieldset_id);
+ $aFields =& $oFieldset->getFields();
+
+ $aBehaviours = array();
+ foreach ($aFields as $oField) {
+ $aOpts = KTFieldBehaviour::getByField($oField);
+ $aBehaviours = kt_array_merge($aBehaviours, $aOpts);
+ }
+
+ $aTemplateData = array(
+ "context" => &$this,
+ "fieldset_id" => $fieldset_id,
+ "aFields" => $aFields,
+ "behaviours" => $aBehaviours,
+ "iMasterFieldId" => $oFieldset->getMasterFieldId(),
+ );
+ return $oTemplate->render($aTemplateData);
+ }
+
+ function getSetsForBehaviour($oBehaviour, $fieldset_id) {
+ $oFieldset = KTFieldset::get($fieldset_id);
+ if (is_null($oBehaviour)) {
+ $fid = $oFieldset->getMasterFieldId();
+ $aQuery = array(
+ sprintf('SELECT df.name as field_name, ml.name as lookup_name, fb.id as behaviour_id, fb.name as behaviour_name FROM
+ %s as fvi
+ LEFT JOIN %s as fb ON (fvi.behaviour_id = fb.id)
+ LEFT JOIN %s AS df ON (fvi.field_id = df.id)
+ LEFT JOIN metadata_lookup AS ml ON (fvi.field_value_id = ml.id)
+ WHERE fvi.field_id = ?
+ ORDER BY df.name ASC, ml.name ASC',
+ KTUtil::getTableName('field_value_instances'),
+ KTUtil::getTableName('field_behaviours'),
+ KTUtil::getTableName('document_fields'),
+ KTUtil::getTableName('metadata')),
+ array($fid),
+ );
+ $res = DBUtil::getResultArray($aQuery);
+ return $res;
+ } else {
+ $bid = $oBehaviour->getId();
+ $aQuery = array(
+ sprintf('SELECT df.name as field_name, ml.name as lookup_name, fb.id as behaviour_id, fb.name as behaviour_name FROM
+ %s AS fbo
+ LEFT JOIN %s as fvi ON (fbo.instance_id = fvi.id)
+ LEFT JOIN %s as fb ON (fvi.behaviour_id = fb.id)
+ LEFT JOIN %s AS df ON (fvi.field_id = df.id)
+ LEFT JOIN metadata_lookup AS ml ON (fvi.field_value_id = ml.id)
+ WHERE fbo.behaviour_id = ?
+ ORDER BY df.name ASC, ml.name ASC',
+ KTUtil::getTableName('field_behaviour_options'),
+ KTUtil::getTableName('field_value_instances'),
+ KTUtil::getTableName('field_behaviours'),
+ KTUtil::getTableName('document_fields'),
+ KTUtil::getTableName('metadata')),
+ array($bid),
+ );
+
+ $res = DBUtil::getResultArray($aQuery);
+ return $res;
+ }
+
+ return $aNextFieldValues;
+ }
+
+ function do_renameBehaviours() {
+ $fieldset_id = KTUtil::arrayGet($_REQUEST, "fieldset_id");
+ $oTemplating =& KTTemplating::getSingleton();
+ $oTemplate = $oTemplating->loadTemplate("ktcore/metadata/conditional/conditional_rename_behaviours");
+
+
+ $oFieldset =& KTFieldset::get($fieldset_id);
+ $aFields =& $oFieldset->getFields();
+
+ $aBehaviours = array();
+ foreach ($aFields as $oField) {
+ $aOpts = KTFieldBehaviour::getByField($oField);
+ $aBehaviours = kt_array_merge($aBehaviours, $aOpts);
+ }
+
+ $aTemplateData = array(
+ "context" => &$this,
+ "fieldset_id" => $fieldset_id,
+ "behaviours" => $aBehaviours,
+ );
+ return $oTemplate->render($aTemplateData);
+ }
+
+ function do_finalRename() {
+ $fieldset_id = KTUtil::arrayGet($_REQUEST, "fieldset_id");
+ $aRenamed = (array) KTUtil::arrayGet($_REQUEST, "renamed");
+
+ $this->startTransaction();
+
+ foreach ($aRenamed as $bid => $new_name) {
+ $oBehaviour = KTFieldBehaviour::get($bid);
+ if (PEAR::isError($oBehaviour)) { continue; } // skip it...
+ $oBehaviour->setName(trim($new_name));
+ $res = $oBehaviour->update();
+ if (PEAR::isError($res)) {
+ $this->errorRedirectToMain(_kt('Failed to change name of behaviour.'), sprintf('action=edit&fFieldsetId=%s',$fieldset_id));
+ }
+ }
+
+ $this->successRedirectToMain(_kt('Names changed.'), sprintf('action=edit&fFieldsetId=%s', $fieldset_id));
+ }
+
+
// }}}
}
diff --git a/plugins/ktcore/admin/documentTypes.php b/plugins/ktcore/admin/documentTypes.php
index 834a1aa..ee1af52 100755
--- a/plugins/ktcore/admin/documentTypes.php
+++ b/plugins/ktcore/admin/documentTypes.php
@@ -51,6 +51,7 @@ class KTDocumentTypeDispatcher extends KTAdminDispatcher {
$oTemplating =& KTTemplating::getSingleton();
$oTemplate = $oTemplating->loadTemplate('ktcore/documenttypes/list');
$oTemplate->setData(array(
+ 'context' => $this,
'document_types' => DocumentType::getList(),
'add_fields' => $addFields,
));
@@ -151,6 +152,7 @@ class KTDocumentTypeDispatcher extends KTAdminDispatcher {
$this->oPage->setBreadcrumbDetails(_kt('edit'));
$oTemplate->setData(array(
+ 'context' => $this,
'oDocumentType' => $oDocumentType,
'aCurrentFieldsets' => $aCurrentFieldsets,
'aAvailableFieldsets' => $aAvailableFieldsets,
@@ -210,6 +212,22 @@ class KTDocumentTypeDispatcher extends KTAdminDispatcher {
$this->successRedirectTo('edit', _kt('Fieldsets associated.'), 'fDocumentTypeId=' . $oDocumentType->getId());
exit(0);
}
+
+ function getFieldsetsForType($oType) {
+ $aCurrentFieldsets = KTFieldset::getForDocumentType($oType);
+ if (empty($aCurrentFieldsets)) {
+ return _kt('No fieldsets');
+ }
+
+ $aNames = array();
+ foreach ($aCurrentFieldsets as $oFieldset) {
+ if (!PEAR::isError($oFieldset)) {
+ $aNames[] = $oFieldset->getName();
+ }
+ }
+
+ return implode(', ', $aNames);
+ }
}
?>
diff --git a/resources/js/conditional_usage.js b/resources/js/conditional_usage.js
index fed9703..08d027c 100644
--- a/resources/js/conditional_usage.js
+++ b/resources/js/conditional_usage.js
@@ -138,6 +138,7 @@ function createFixedWidget(fieldset, widget, i_name, i_value, i_label) {
return false;
}
var header = widget.getElementsByTagName('LABEL')[0]; // FIXME _could_ fail if pathalogical.
+ header.removeChild(header.getElementsByTagName('SPAN')[0]);
var i_friendly_name = scrapeText(header);
var newWidget = DIV({'class':'field fixed'},
@@ -345,7 +346,7 @@ function reviseConditional(buttonsource) {
*/
function initialiseConditionalFieldsets() {
- simpleLog('ERROR','incomplete function called: initialiseFieldsets.');
+
var fieldsets = getElementsByTagAndClassName('FIELDSET','conditional_metadata');
simpleLog('DEBUG','found fieldsets: '+fieldsets.length);
// triggers initial update - since this contains no "fixed" vars, it'll remove "unfixed" widgets
diff --git a/templates/ktcore/documenttypes/list.smarty b/templates/ktcore/documenttypes/list.smarty
index d32e053..dd0b86c 100644
--- a/templates/ktcore/documenttypes/list.smarty
+++ b/templates/ktcore/documenttypes/list.smarty
@@ -27,11 +27,12 @@ please enter a name for the type below.{/i18n}
its details, or click on the delete button to remove it from the
system.{/i18n}
-
+
{i18n}Document Type{/i18n}
+ {i18n}Fieldsets{/i18n}
@@ -46,17 +47,20 @@ system.{/i18n}
- {i18n}Edit{/i18n}
+ {i18n}Edit{/i18n}
{if $oDocumentType->getDisabled()}
- {i18n}Enable{/i18n}
+ {i18n}Enable{/i18n}
{else}
- {i18n}Disable{/i18n}
+ {i18n}Disable{/i18n}
{/if}
+
+ {$context->getFieldsetsForType($oDocumentType)}
+
diff --git a/templates/ktcore/metadata/conditional/conditional_overview.smarty b/templates/ktcore/metadata/conditional/conditional_overview.smarty
new file mode 100644
index 0000000..9c5c34e
--- /dev/null
+++ b/templates/ktcore/metadata/conditional/conditional_overview.smarty
@@ -0,0 +1,75 @@
+{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Base.js')}
+{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Async.js')}
+{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/Iter.js')}
+{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/DateTime.js')}
+{$context->oPage->requireJSResource('thirdpartyjs/MochiKit/DOM.js')}
+{$context->oPage->requireJSResource('resources/js/taillog.js')}
+{$context->oPage->requireJSResource('resources/js/conditional_usage.js')}
+
+{i18n}Conditional Metadata Overview{/i18n}
+
+{i18n}Conditional Metadata is made up of fields, values
+and behaviours. For a given behaviour, various values in other fields can be
+selected. Depending on both the behaviour and the newly selected value, additional
+fields and values may be selected, which cause a new behaviour to be "active".{/i18n}
+
+{i18n}Test Instance{/i18n}
+{i18n}For the majority of conditional cases, simply walking
+through a test is sufficient. You can do that below for the fieldset you have selected.{/i18n}
+
+
+
+ {$description}
+
+
+
+ {i18n}conditional data.{/i18n}
+
+
+
+
+
+{i18n}These behaviours and the fields and values they allow
+are shown below for the active field.{/i18n}
+
+Behaviours
+{i18n}Clicking on a given behaviour below will show you
+which fields and values can be selected when the clicked behaviour is active.{/i18n}
+
+
+ No Active Behaviour (initial values)
+
+{* this is a list of field rows ... see db. *}
+
+{foreach from=$context->getSetsForBehaviour(null, $fieldset_id) item=row}
+Field: {$row.field_name} » Option: {$row.lookup_name} »
+{if empty($row.behaviour_id)}
+ no additional behaviours
+{else}
+ {$row.behaviour_name}
+{/if}
+
+{/foreach}
+
+{foreach from=$behaviours item=oBehaviour}
+
+ {$oBehaviour->getName()}
+
+{* this is a list of field rows ... see db. *}
+
+{foreach from=$context->getSetsForBehaviour($oBehaviour, $fieldset_id) item=row}
+Field: {$row.field_name} » Option: {$row.lookup_name} »
+{if empty($row.behaviour_id)}
+ no additional behaviours
+{else}
+ {$row.behaviour_name}
+{/if}
+
+{/foreach}
+
+{/foreach}
\ No newline at end of file
diff --git a/templates/ktcore/metadata/conditional/conditional_rename_behaviours.smarty b/templates/ktcore/metadata/conditional/conditional_rename_behaviours.smarty
new file mode 100644
index 0000000..0a80484
--- /dev/null
+++ b/templates/ktcore/metadata/conditional/conditional_rename_behaviours.smarty
@@ -0,0 +1,29 @@
+{i18n}Rename Behaviours{/i18n}
+
+{i18n}If you have converted a simple conditional fieldset to a complex one,
+it may be useful to rename some of the system-generated names. You can do that here.{/i18n}
+
+
\ No newline at end of file
diff --git a/templates/ktcore/metadata/listFieldsets.smarty b/templates/ktcore/metadata/listFieldsets.smarty
index 40dd283..1d3179f 100644
--- a/templates/ktcore/metadata/listFieldsets.smarty
+++ b/templates/ktcore/metadata/listFieldsets.smarty
@@ -14,6 +14,7 @@
{i18n}Fields{/i18n}
{i18n}Edit{/i18n}
{i18n}Delete{/i18n}
+ {i18n}Document Types using this Fieldset{/i18n}
@@ -56,6 +57,10 @@
{i18n}Delete{/i18n}
+
+ {$context->getTypesForFieldset($oFieldset)}
+
+
{/foreach}
--
libgit2 0.21.4