diff --git a/lib/metadata/metadatautil.inc.php b/lib/metadata/metadatautil.inc.php index f5757ba..f3fa5d5 100644 --- a/lib/metadata/metadatautil.inc.php +++ b/lib/metadata/metadatautil.inc.php @@ -533,7 +533,7 @@ class KTMetadataUtil { $sTable = KTUtil::getTableName('field_value_instances'); $sLookupTable = KTUtil::getTableName('metadata_lookup'); $aQuery = array( - "SELECT COUNT(FVI.id) AS cnt FROM $sTable AS FVI LEFT JOIN $sLookupTable AS ML ON (FVI.field_value_id = ML.id) WHERE FVI.field_id = ?", + "SELECT COUNT(FVI.id) AS cnt FROM $sTable AS FVI LEFT JOIN $sLookupTable AS ML ON (FVI.field_value_id = ML.id) WHERE FVI.field_id = ? AND ML.disabled = 0", array($iMasterFieldId), ); $iCount = DBUtil::getOneResultKey($aQuery, 'cnt'); @@ -551,10 +551,12 @@ class KTMetadataUtil { // check that each master-field value has a valueinstance assigned. $sTable = KTUtil::getTableName('metadata_lookup'); $aQuery = array( - "SELECT COUNT(id) AS cnt FROM $sTable WHERE document_field_id = ? AND disabled <> 0 ", + "SELECT COUNT(id) AS cnt FROM $sTable WHERE document_field_id = ? AND disabled = 0 ", array($iMasterFieldId), ); $iValCount = DBUtil::getOneResultKey($aQuery, 'cnt'); + + // assumes that there cannot be more than 1 value instance for each master-field-value. if ($iValCount != $iCount) { return PEAR::raiseError(sprintf(_kt('%d values for the Master Field are not assigned to behaviours.'), ($iValCount - $iCount))); } diff --git a/plugins/ktcore/admin/ajaxComplexConditionals.php b/plugins/ktcore/admin/ajaxComplexConditionals.php index afe56ba..7759ab7 100755 --- a/plugins/ktcore/admin/ajaxComplexConditionals.php +++ b/plugins/ktcore/admin/ajaxComplexConditionals.php @@ -64,7 +64,7 @@ class AjaxConditionalAdminDispatcher extends KTAdminDispatcher { $oTemplate =& $oTemplating->loadTemplate('ktcore/metadata/conditional/ajax_complex_get_item_list'); $aValues = array(); - foreach ($oField->getValues() as $oValue) { + foreach ($oField->getEnabledValues() as $oValue) { if (empty($parent_behaviour)) { $oInstance = KTValueInstance::getByLookupSingle($oValue); if (empty($oInstance)) { @@ -132,7 +132,7 @@ class AjaxConditionalAdminDispatcher extends KTAdminDispatcher { $aValues = array(); $aBehaviours = array(); - foreach ($oField->getValues() as $oValue) { + foreach ($oField->getEnabledValues() as $oValue) { if (empty($parent_behaviour)) { $oInstance = KTValueInstance::getByLookupSingle($oValue); if (!empty($oInstance)) { diff --git a/plugins/ktcore/admin/manageConditionals.php b/plugins/ktcore/admin/manageConditionals.php index c22aa16..9582ab2 100755 --- a/plugins/ktcore/admin/manageConditionals.php +++ b/plugins/ktcore/admin/manageConditionals.php @@ -80,7 +80,7 @@ class ManageConditionalDispatcher extends KTAdminDispatcher { $oFieldset =& KTFieldset::get($fieldset_id); $aFields =& $oFieldset->getFields(); - + $this->aBreadcrumbs[] = array( 'url' => KTUtil::ktLink('admin.php','documents/fieldmanagement','action=edit&fFieldsetId=' . $oFieldset->getId()), 'name' => $oFieldset->getName() @@ -102,11 +102,37 @@ class ManageConditionalDispatcher extends KTAdminDispatcher { $aChildren[] = $row['child_field_id']; $aOrders[$row['parent_field_id']] = $aChildren; } + + // for useability, they can go in any order + // but master field should be first. beyond that + // it can get odd anyway. + + $aKeyedFields = array(); + $aOrderedFields = array(); + $aStack = array($oFieldset->getMasterFieldId()); + + // first, key + foreach ($aFields as $oField) { + $aKeyedFields[$oField->getId()] = $oField; + } + + while (!empty($aStack)) { + $iKey = array_shift($aStack); + // this shouldn't happen, but avoid it anyway. + if (!is_null($aKeyedFields[$iKey])) { + $aOrderedFields[] = $aKeyedFields[$iKey]; + unset($aKeyedFields[$iKey]); + } + // add children to stack + $aStack = kt_array_merge($aStack, $aOrders[$iKey]); + } + + $aTemplateData = array( "context" => &$this, "fieldset_id" => $fieldset_id, "ordering" => $aOrders, - "aFields" => $aFields, + "aFields" => $aOrderedFields, "iMasterFieldId" => $oFieldset->getMasterFieldId(), ); return $oTemplate->render($aTemplateData); @@ -126,7 +152,8 @@ class ManageConditionalDispatcher extends KTAdminDispatcher { * FIXME we fake it here with nested arrays... */ $oFieldset =& KTFieldset::get($fieldset_id); - $aFields =& $oFieldset->getFields(); + $aFields =& $oFieldset->getFields(); + $this->aBreadcrumbs[] = array( 'url' => KTUtil::ktLink('admin.php','documents/fieldmanagement','action=edit&fFieldsetId=' . $oFieldset->getId()), 'name' => $oFieldset->getName() @@ -149,12 +176,33 @@ class ManageConditionalDispatcher extends KTAdminDispatcher { $aOrders[$row['parent_field_id']] = $aChildren; } + + $aKeyedFields = array(); + $aOrderedFields = array(); + $aStack = array($oFieldset->getMasterFieldId()); + + // first, key + foreach ($aFields as $oField) { + $aKeyedFields[$oField->getId()] = $oField; + } + + while (!empty($aStack)) { + $iKey = array_shift($aStack); + // this shouldn't happen, but avoid it anyway. + if (!is_null($aKeyedFields[$iKey])) { + $aOrderedFields[] = $aKeyedFields[$iKey]; + unset($aKeyedFields[$iKey]); + } + // add children to stack + $aStack = kt_array_merge($aStack, $aOrders[$iKey]); + } + $this->oPage->setBreadcrumbDetails(_kt('Manage complex conditional')); $aTemplateData = array( "context" => &$this, "fieldset_id" => $fieldset_id, "ordering" => $aOrders, - "aFields" => $aFields, + "aFields" => $aOrderedFields, "iMasterFieldId" => $oFieldset->getMasterFieldId(), ); return $oTemplate->render($aTemplateData); diff --git a/templates/ktcore/metadata/conditional/editsimple.smarty b/templates/ktcore/metadata/conditional/editsimple.smarty index ef342f4..3208583 100644 --- a/templates/ktcore/metadata/conditional/editsimple.smarty +++ b/templates/ktcore/metadata/conditional/editsimple.smarty @@ -95,7 +95,7 @@ refresh the page.{/i18n}

{i18n}This field is not controlled by the currently active group.{/i18n}

diff --git a/templates/ktcore/metadata/editFieldset.smarty b/templates/ktcore/metadata/editFieldset.smarty index 8e279c1..17dddad 100644 --- a/templates/ktcore/metadata/editFieldset.smarty +++ b/templates/ktcore/metadata/editFieldset.smarty @@ -25,21 +25,6 @@ {$oWidget->render()} {/foreach} -{if ($oFieldset->getIsConditional() || $context->haveConditional())} -
- -

-{i18n}A conditional fieldset contains only lookup fields. The values for each -field can depend on the user's selections for the others.{/i18n} -

-{if $oFieldset->getIsConditional() } - {i18n}Yes{/i18n} -{else} - {i18n}No{/i18n} -{/if} -
-{/if} -
@@ -65,7 +50,16 @@ field can depend on the user's selections for the others.{/i18n} field can depend on the user's selections for the others.{/i18n}

- +
+ +

+

+{if $oFieldset->getIsConditional() } + {i18n}Yes{/i18n} +{else} + {i18n}No{/i18n} +{/if} +
{if $oFieldset->getIsConditional() } @@ -75,6 +69,8 @@ field can depend on the user's selections for the others.{/i18n} +
+