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} | - {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}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}
|---|---|---|---|