Commit c4da14a4ba808c7b9041af79ed1d3ca9dd90b237

Authored by nbm
1 parent 2bd0b383

Add the ability to set the master field, and restrict the ordering of

fields such that only the master field or a field which is already
attached to the master field can affect other fields.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3775 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/administration/docfieldmanagement/documentFields.php
@@ -210,17 +210,48 @@ class KTDocumentFieldDispatcher extends KTStandardDispatcher { @@ -210,17 +210,48 @@ class KTDocumentFieldDispatcher extends KTStandardDispatcher {
210 $oTemplating =& KTTemplating::getSingleton(); 210 $oTemplating =& KTTemplating::getSingleton();
211 $oTemplate =& $oTemplating->loadTemplate('ktcore/metadata/conditional/manageConditional'); 211 $oTemplate =& $oTemplating->loadTemplate('ktcore/metadata/conditional/manageConditional');
212 $oFieldset =& KTFieldset::get($_REQUEST['fFieldsetId']); 212 $oFieldset =& KTFieldset::get($_REQUEST['fFieldsetId']);
  213 + $iMasterFieldId = $oFieldset->getMasterFieldId();
  214 + if (!empty($iMasterFieldId)) {
  215 + $oMasterField =& DocumentField::get($iMasterFieldId);
  216 + if (PEAR::isError($oMasterField)) {
  217 + $oMasterField = null;
  218 + }
  219 + } else {
  220 + $oMasterField = null;
  221 + }
213 $sTable = KTUtil::getTableName('field_orders'); 222 $sTable = KTUtil::getTableName('field_orders');
214 $aQuery = array( 223 $aQuery = array(
215 "SELECT parent_field_id, child_field_id FROM $sTable WHERE fieldset_id = ?", 224 "SELECT parent_field_id, child_field_id FROM $sTable WHERE fieldset_id = ?",
216 array($oFieldset->getId()) 225 array($oFieldset->getId())
217 ); 226 );
218 $aFieldOrders = DBUtil::getResultArray($aQuery); 227 $aFieldOrders = DBUtil::getResultArray($aQuery);
  228 + $aFields = $oFieldset->getFields();
  229 +
  230 + $aFreeFieldIds = array();
  231 + foreach ($aFields as $oField) {
  232 + $aFreeFieldIds[] = $oField->getId();
  233 + }
  234 + $aParentFieldIds = array($oMasterField->getId());
  235 + foreach ($aFieldOrders as $aRow) {
  236 + $aParentFieldIds[] = $aRow['child_field_id'];
  237 + }
  238 + $aParentFields = array();
  239 + foreach (array_unique($aParentFieldIds) as $iId) {
  240 + $aParentFields[] =& DocumentField::get($iId);
  241 + }
  242 + $aFreeFields = array();
  243 + foreach ($aFreeFieldIds as $iId) {
  244 + if (in_array($iId, $aParentFieldIds)) {
  245 + continue;
  246 + }
  247 + $aFreeFields[] =& DocumentField::get($iId);
  248 + }
219 $oTemplate->setData(array( 249 $oTemplate->setData(array(
220 'oFieldset' => $oFieldset, 250 'oFieldset' => $oFieldset,
221 - 'free_fields' => $oFieldset->getFields(),  
222 - 'parent_fields' => $oFieldset->getFields(), 251 + 'free_fields' => $aFreeFields,
  252 + 'parent_fields' => $aParentFields,
223 'aFieldOrders' => $aFieldOrders, 253 'aFieldOrders' => $aFieldOrders,
  254 + 'oMasterField' => $oMasterField,
224 )); 255 ));
225 return $oTemplate; 256 return $oTemplate;
226 } 257 }
@@ -230,13 +261,16 @@ class KTDocumentFieldDispatcher extends KTStandardDispatcher { @@ -230,13 +261,16 @@ class KTDocumentFieldDispatcher extends KTStandardDispatcher {
230 function do_orderFields() { 261 function do_orderFields() {
231 $oFieldset =& KTFieldset::get($_REQUEST['fFieldsetId']); 262 $oFieldset =& KTFieldset::get($_REQUEST['fFieldsetId']);
232 $aFreeFieldIds = $_REQUEST['fFreeFieldIds']; 263 $aFreeFieldIds = $_REQUEST['fFreeFieldIds'];
  264 + if (empty($aFreeFieldIds)) {
  265 + $this->errorRedirectTo('manageConditional', 'No children fields selected', 'fFieldsetId=' . $oFieldset->getId());
  266 + }
233 $iParentFieldId = $_REQUEST['fParentFieldId']; 267 $iParentFieldId = $_REQUEST['fParentFieldId'];
234 if (in_array($aParentFieldId, $aFreeFieldIds)) { 268 if (in_array($aParentFieldId, $aFreeFieldIds)) {
235 $this->errorRedirectTo('manageConditional', 'Field cannot be its own parent field', 'fFieldsetId=' . $oFieldset->getId()); 269 $this->errorRedirectTo('manageConditional', 'Field cannot be its own parent field', 'fFieldsetId=' . $oFieldset->getId());
236 } 270 }
237 foreach ($aFreeFieldIds as $iChildFieldId) { 271 foreach ($aFreeFieldIds as $iChildFieldId) {
238 $res = KTMetadataUtil::addFieldOrder($iParentFieldId, $iChildFieldId, $oFieldset); 272 $res = KTMetadataUtil::addFieldOrder($iParentFieldId, $iChildFieldId, $oFieldset);
239 - $this->oValidator->notError($this, $res, array( 273 + $this->oValidator->notError($res, array(
240 'redirect_to' => array('manageConditional', 'fFieldsetId=' . $oFieldset->getId()), 274 'redirect_to' => array('manageConditional', 'fFieldsetId=' . $oFieldset->getId()),
241 'message' => 'Error adding Fields', 275 'message' => 'Error adding Fields',
242 )); 276 ));
@@ -245,6 +279,24 @@ class KTDocumentFieldDispatcher extends KTStandardDispatcher { @@ -245,6 +279,24 @@ class KTDocumentFieldDispatcher extends KTStandardDispatcher {
245 exit(0); 279 exit(0);
246 } 280 }
247 // }}} 281 // }}}
  282 +
  283 + // {{{
  284 + function do_setMasterField() {
  285 + $oFieldset =& $this->oValidator->validateFieldset($_REQUEST['fFieldsetId']);
  286 + $oField =& $this->oValidator->validateField($_REQUEST['fFieldId']);
  287 +
  288 + $res = KTMetadataUtil::removeFieldOrdering($oFieldset);
  289 + $oFieldset->setMasterFieldId($oField->getId());
  290 + $res = $oFieldset->update();
  291 +
  292 + $this->oValidator->notError($res, array(
  293 + 'redirect_to' => array('manageConditional', 'fFieldsetId=' . $oFieldset->getId()),
  294 + 'message' => 'Error setting master field',
  295 + ));
  296 + $this->successRedirectTo('manageConditional', 'Master field set', 'fFieldsetId=' . $oFieldset->getId());
  297 + exit(0);
  298 + }
  299 + // }}}
248 } 300 }
249 301
250 $d =& new KTDocumentFieldDispatcher; 302 $d =& new KTDocumentFieldDispatcher;