getMasterFieldId()); return array($oField->getId() => array('field' => $oField, 'values' => $oField->getValues())); } $aReturn = array(); foreach ($aCurrentSelections as $iFieldId => $iLookupId) { $aFieldIds = KTMetadataUtil::getNextValuesForLookup($iLookupId); foreach ($aFieldIds as $key => $aValueIds) { if (in_array($key, $aCurrentSelections)) { continue; } $aValues = array(); foreach ($aValueIds as $iLookupId) { $aValues[] = MetaData::get($iLookupId); } $aReturn[$key] = array( 'field' => DocumentField::get($key), 'values' => $aValues, ); } } return $aReturn; } // }}} // {{{ getStartFields function getMasterField($oFieldset) { $oFieldset =& KTUtil::getObject('KTFieldset', $oFieldset); if ($oFieldset->getMasterField()) { return DocumentField::get($oFieldset->getMasterField()); } } // }}} // {{{ removeSetsFromDocumentType function removeSetsFromDocumentType($oDocumentType, $aFieldsets) { if (is_object($oDocumentType)) { $iDocumentTypeId = $oDocumentType->getId(); } else { $iDocumentTypeId = $oDocumentType; } if (!is_array($aFieldsets)) { $aFieldsets = array($aFieldsets); } if (empty($aFieldsets)) { return true; } $aIds = array(); foreach ($aFieldsets as $oFieldset) { if (is_object($oFieldset)) { $iFieldsetId = $oFieldset->getId(); } else { $iFieldsetId = $oFieldset; } $aIds[] = $iFieldsetId; } // Converts to (?, ?, ?) for query $sParam = DBUtil::paramArray($aIds); $aWhere = KTUtil::whereToString(array( array('document_type_id = ?', array($iDocumentTypeId)), array("fieldset_id IN ($sParam)", $aIds), )); $sTable = KTUtil::getTableName('document_type_fieldsets'); $aQuery = array( "DELETE FROM $sTable WHERE {$aWhere[0]}", $aWhere[1], ); return DBUtil::runQuery($aQuery); } // }}} // {{{ addSetsToDocumentType function addSetsToDocumentType($oDocumentType, $aFieldsets) { if (is_object($oDocumentType)) { $iDocumentTypeId = $oDocumentType->getId(); } else { $iDocumentTypeId = $oDocumentType; } if (!is_array($aFieldsets)) { $aFieldsets = array($aFieldsets); } $aIds = array(); foreach ($aFieldsets as $oFieldset) { if (is_object($oFieldset)) { $iFieldsetId = $oFieldset->getId(); } else { $iFieldsetId = $oFieldset; } $aIds[] = $iFieldsetId; } $sTable = KTUtil::getTableName('document_type_fieldsets'); foreach ($aIds as $iId) { $res = DBUtil::autoInsert($sTable, array( 'document_type_id' => $iDocumentTypeId, 'fieldset_id' => $iId, )); if (PEAR::isError($res)) { return $res; } } return true; } // }}} // {{{ addFieldOrder function addFieldOrder($oParentField, $oChildField, $oFieldset) { $iParentFieldId = KTUtil::getId($oParentField); $iChildFieldId = KTUtil::getId($oChildField); $iFieldsetId = KTUtil::getId($oFieldset); $aOptions = array('noid' => true); $sTable = KTUtil::getTableName('field_orders'); $aValues = array( 'parent_field_id' => $iParentFieldId, 'child_field_id' => $iChildFieldId, 'fieldset_id' => $iFieldsetId, ); return DBUtil::autoInsert($sTable, $aValues, $aOptions); } // }}} // {{{ removeFieldOrdering function removeFieldOrdering($oFieldset) { $iFieldsetId = KTUtil::getId($oFieldset); $sTable = KTUtil::getTableName('field_orders'); $aQuery = array( "DELETE FROM $sTable WHERE fieldset_id = ?", array($iFieldsetId), ); return DBUtil::runQuery($aQuery); } // }}} // {{{ getParentFieldId function getParentFieldId($oField) { $sTable = KTUtil::getTableName('field_orders'); $aQuery = array("SELECT parent_field_id FROM $sTable WHERE child_field_id = ?", array($oField->getId()), ); return DBUtil::getOneResultKey($aQuery, 'parent_field_id'); } // }}} // {{{ getChildFieldIds function getChildFieldIds($oField) { $iFieldId = KTUtil::getId($oField); $sTable = KTUtil::getTableName('field_orders'); $aQuery = array("SELECT child_field_id FROM $sTable WHERE parent_field_id = ?", array($iFieldId), ); return DBUtil::getResultArrayKey($aQuery, 'child_field_id'); } // }}} function &getOrCreateValueInstanceForLookup(&$oLookup) { $oLookup =& KTUtil::getObject('MetaData', $oLookup); $oValueInstance =& KTValueInstance::getByLookupSingle($oLookup); if (PEAR::isError($oValueInstance)) { return $oValueInstance; } // If we got a value instance, return it. if (!is_null($oValueInstance)) { return $oValueInstance; } return KTValueInstance::createFromArray(array( 'fieldid' => $oLookup->getDocFieldId(), 'fieldvalueid' => $oLookup->getId(), )); } function getNextValuesForLookup($oLookup) { $oLookup =& KTUtil::getObject('MetaData', $oLookup); $oInstance =& KTValueInstance::getByLookupSingle($oLookup); if (PEAR::isError($oInstance)) { return $oInstance; } if (!is_null($oInstance) && $oInstance->getBehaviourId()) { // if we have an instance, and we have a behaviour, return // the actual values for that behaviour. $oBehaviour =& KTFieldBehaviour::get($oInstance->getBehaviourId()); return KTMetadataUtil::getNextValuesForBehaviour($oBehaviour); } // No instance or no behaviour, so send an empty array for each // field that we affect. $aChildFieldIds = KTMetadataUtil::getChildFieldIds($oLookup->getDocFieldId()); foreach ($aChildFieldIds as $iFieldId) { $aValues[$iFieldId] = array(); } return $aValues; } function getNextValuesForBehaviour($oBehaviour) { $oBehaviour =& KTUtil::getObject('KTFieldBehaviour', $oBehaviour); $aValues = array(); $sTable = KTUtil::getTableName('field_behaviour_options'); $aChildFieldIds = KTMetadataUtil::getChildFieldIds($oBehaviour->getFieldId()); foreach ($aChildFieldIds as $iFieldId) { $aValues[$iFieldId] = array(); } $aQuery = array( "SELECT field_id, instance_id FROM $sTable WHERE behaviour_id = ?", array($oBehaviour->getId()), ); $aRows = DBUtil::getResultArray($aQuery); if (PEAR::isError($aRows)) { return $aRows; } foreach ($aRows as $aRow) { $oInstance =& KTValueInstance::get($aRow['instance_id']); $aValues[$aRow['field_id']][] = $oInstance->getFieldValueId(); } return $aValues; } } ?>