From 21c8a9409a7425f629bd42b69cc0d5eac246e947 Mon Sep 17 00:00:00 2001
From: Brad Shuttleworth
Date: Mon, 3 Jul 2006 11:24:55 +0000
Subject: [PATCH] merge fix for KEP-70 from preview.
---
lib/metadata/metadatautil.inc.php | 6 ++++--
plugins/ktcore/admin/ajaxComplexConditionals.php | 4 ++--
plugins/ktcore/admin/manageConditionals.php | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
templates/ktcore/metadata/conditional/editsimple.smarty | 2 +-
templates/ktcore/metadata/editFieldset.smarty | 28 ++++++++++++----------------
5 files changed, 71 insertions(+), 25 deletions(-)
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}
- {foreach from=$oField->getValues() item=oMetaData}
+ {foreach from=$oField->getEnabledValues() item=oMetaData}
{$oMetaData->getName()|escape}
{/foreach}
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}Conditional{/i18n}
-
-{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}
-
+
+
{i18n}Conditional{/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}
+
+