function do_storeRelationship() { // handle the store, and DON'T give a 500 ;) does not act on the information. global $default; $default->log->error(http_build_query($_REQUEST)); $iFieldsetId = KTUtil::arrayGet($_REQUEST, 'fieldset_id'); $parent_field = KTUtil::arrayGet($_REQUEST, 'parent_field'); $parent_lookup = KTUtil::arrayGet($_REQUEST, 'parent_lookup'); $child_lookups = KTUtil::arrayGet($_REQUEST, 'child_lookups'); // child lookups is a nested array. in python it would be: // child_lookups = // { // field_id:[lookup_id, lookup_id], // field_id:[lookup_id, lookup_id], // } $oFieldset =& KTFieldset::get($iFieldsetId); $oFieldset->setIsComplete(false); $oFieldset->update(); $oParentInstance = KTMetadataUtil::getOrCreateValueInstanceForLookup($parent_lookup); $iBehaviourId = $oParentInstance->getBehaviourId(); $oParentMetadata =& MetaData::get($oParentInstance->getFieldValueId()); if (is_null($iBehaviourId)) { $oBehaviour =& KTFieldBehaviour::createFromArray(array('name' => 'autoinstance' . $oParentInstance->getId(), 'humanname' => 'Auto instance' . $oParentMetadata->getName(), 'fieldid' => $oParentInstance->getFieldId())); } else { $oBehaviour =& KTFieldBehaviour::get($iBehaviourId); } if (PEAR::isError($oBehaviour)) { var_dump($oBehaviour); return $oBehaviour; } $iBehaviourId = $oBehaviour->getId(); $oParentInstance->setBehaviourId($iBehaviourId); $oParentInstance->update(); $sTable = KTUtil::getTableName('field_behaviour_options'); $aOptions = array('noid' => true); $aQuery = array("DELETE FROM {$sTable} WHERE behaviour_id = ?", array($iBehaviourId)); $res = DBUtil::runQuery($aQuery); foreach ($child_lookups as $iFieldId => $aLookups) { foreach ($aLookups as $iLookupId) { $oValueInstance =& KTMetadataUtil::getOrCreateValueInstanceForLookup($iLookupId); if (PEAR::isError($oValueInstance)) { var_dump($oValueInstance); return $oValueInstance; } $res = DBUtil::autoInsert($sTable, array('behaviour_id' => $iBehaviourId, 'field_id' => $iFieldId, 'instance_id' => $oValueInstance->getId()), $aOptions); if (PEAR::isError($res)) { var_dump($res); return $res; } } } }
function predispatch() { $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Document Field Management')); $this->persistParams(array('fFieldsetId')); $this->oFieldset = KTFieldset::get(KTUtil::arrayGet($_REQUEST, 'fFieldsetId')); if (PEAR::isError($this->oFieldset)) { $this->oFieldset = null; unset($_REQUEST['fFieldset']); // prevent further attacks. } else { $this->aBreadcrumbs[] = array('url' => KTUtil::addQueryStringSelf($this->meldPersistQuery("", "edit")), 'name' => $this->oFieldset->getName()); } $this->bHaveConditional = KTPluginUtil::pluginIsActive('ktextra.conditionalmetadata.plugin'); }
function _buildGenericCriteria() { $aFields =& DocumentField::getList(); foreach ($aFields as $oField) { $sNamespace = $oField->getNamespace(); $oFieldset =& KTFieldset::get($oField->getParentFieldset()); if ($oFieldset->getName() == 'Tag Cloud') { continue; } //if(is_null($oFieldset->userinfo)){continue;} $aInitialize = array(sprintf("%s: %s", $oFieldset->getName(), $oField->getName()), 'id', 'id', $oField->getId(), $sNamespace); $this->registerCriterion('GenericMetadataCriterion', $sNamespace, null, $aInitialize); } $this->_bGenericRegistered = true; }
function predispatch() { $this->persistParams(array('fFieldId')); $this->oFieldset = KTFieldset::get(KTUtil::arrayGet($_REQUEST, 'fFieldsetId')); if (PEAR::isError($this->oFieldset)) { $this->oFieldset = null; unset($_REQUEST['fFieldsetId']); // prevent further attacks. } $this->oField = DocumentField::get(KTUtil::arrayGet($_REQUEST, 'fFieldId')); if (PEAR::isError($this->oField)) { $this->oField = null; unset($_REQUEST['fFieldId']); // prevent further attacks. } else { $this->aBreadcrumbs[] = array('url' => KTUtil::addQueryStringSelf($this->meldPersistQuery("", "managefield")), 'name' => $this->oField->getName()); } }
function do_edit() { $this->aBreadcrumbs[] = array('url' => $_SERVER['PHP_SELF'], 'name' => _kt('Document Type Management')); $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('ktcore/documenttypes/edit'); $oDocumentType =& DocumentType::get($_REQUEST['fDocumentTypeId']); $aCurrentFieldsets =& KTFieldset::getForDocumentType($oDocumentType); $aCurrentFieldsetIds = array_map(array("KTUtil", "getId"), $aCurrentFieldsets); $aAvailableFieldsets =& KTFieldset::getNonGenericFieldsets(); $aAvailableFieldsetIds =& array_map(array("KTUtil", "getId"), $aAvailableFieldsets); $aAvailableFieldsetIds = array_diff($aAvailableFieldsetIds, $aCurrentFieldsetIds); $vocab = array(); foreach ($aAvailableFieldsetIds as $iFieldsetId) { $oFieldset = KTFieldset::get($iFieldsetId); $vocab[$oFieldset->getId()] = $oFieldset->getName(); } $aOptions = array(); $aOptions['vocab'] = $vocab; $aOptions['multi'] = true; $aOptions['size'] = 5; $availableTypesWidget =& new KTLookupWidget(_kt('Available Fieldsets'), _kt('Select the fieldsets which you wish to associate with this document type'), 'fieldsetid[]', null, $this->oPage, true, null, null, $aOptions); $this->aBreadcrumbs[] = array('name' => $oDocumentType->getName()); $this->oPage->setBreadcrumbDetails(_kt('edit')); $oTemplate->setData(array('context' => $this, 'oDocumentType' => $oDocumentType, 'sDocTypeName' => sanitizeForHTML($oDocumentType->getName()), 'aCurrentFieldsets' => $aCurrentFieldsets, 'bAnyFieldsets' => count($aAvailableFieldsets) > 0, 'bAvailableFieldsets' => count($vocab) > 0, 'availableWidget' => $availableTypesWidget)); return $oTemplate; }
function configure($aOptions) { $res = parent::configure($aOptions); if (PEAR::isError($res)) { return $res; } $this->sIdMethod = KTUtil::arrayGet($aOptions, 'id_method', 'getId'); $this->sLabelMethod = KTUtil::arrayGet($aOptions, 'label_method'); if (empty($this->sLabelMethod)) { return PEAR::raiseError(_kt('No label method specified.')); } $existing_entities = (array) KTUtil::arrayGet($aOptions, 'existing_entities'); if (empty($this->value)) { $this->value = array(); foreach ($existing_entities as $oEntity) { $this->value[] = call_user_func(array(&$oEntity, $this->sIdMethod)); } } $this->iField = KTUtil::arrayGet($aOptions, 'field'); $this->iMasterId = KTUtil::arrayGet($aOptions, 'masterid'); // if we're the master, we have to build the dependancy array and store it as JSON // also, include the javascript if (KTUtil::arrayGet($aOptions, 'master', false)) { $this->bMaster = true; $this->aJavascript = array('resources/js/conditional_selection.js'); $oFieldset = KTFieldset::get(KTUtil::arrayGet($aOptions, 'fieldset')); $aLookups = array(); $aConnections = array(); foreach ($oFieldset->getFields() as $oField) { $c = array(); foreach ($oField->getEnabledValues() as $oMetadata) { $a = array(); // print '<pre>'; $nvals = KTMetadataUtil::getNextValuesForLookup($oMetadata->getId()); if ($nvals) { foreach ($nvals as $i => $aVals) { $a = array_merge($a, $aVals); foreach ($aVals as $id) { $field = $this->_getFieldIdForMetadataId($id); // print 'id ' . $id . ' is in field ' . $field . "<br/>"; if (!in_array($field, $c)) { $c[] = $field; } } } } $aLookups[$oMetadata->getId()] = $a; } $aConnections[$oField->getId()] = $c; } //exit(0); $oJSON = new Services_JSON(); $this->sLookupsJSON = $oJSON->encode($aLookups); $this->sConnectionsJSON = $oJSON->encode($aConnections); } $new_vocab = array(); foreach ($this->aVocab as $oEntity) { $id = call_user_func(array(&$oEntity, $this->sIdMethod)); $label = call_user_func(array(&$oEntity, $this->sLabelMethod)); $new_vocab[$id] = array($label, $oEntity->getId()); } $this->aVocab = $new_vocab; }
function &getByField($oField) { $oField =& KTUtil::getObject('DocumentField', $oField); $iFieldsetId = $oField->getParentFieldsetId(); return KTFieldset::get($iFieldsetId); }
function do_editComplexFieldset() { $fieldset_id = KTUtil::arrayGet($_REQUEST, "fieldset_id"); $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate("ktcore/metadata/conditional/editcomplex"); /* alright: to "do" this we need at least: * 1. the list of all the columns (id, name) and their available values. * 2. the fieldset_id. * we can then render in/out. Everything "intelligent" happens * in AJAX (doing it with submits sucks arse. * * FIXME we fake it here with nested arrays... */ $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()); $this->aBreadcrumbs[] = array('url' => KTUtil::ktLink('admin.php', 'documents/fieldmanagement', 'action=manageConditional&fFieldsetId=' . $oFieldset->getId()), 'name' => _kt('Manage conditional fieldset')); $sTable = KTUtil::getTableName('field_orders'); $aQuery = array("SELECT parent_field_id, child_field_id FROM {$sTable} WHERE fieldset_id = ?", array($oFieldset->getId())); $aFieldOrders = DBUtil::getResultArray($aQuery); $aOrders = array(); foreach ($aFieldOrders as $row) { $aChildren = KTUtil::arrayGet($aOrders, $row['parent_field_id'], array()); $aChildren[] = $row['child_field_id']; $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" => $aOrderedFields, "iMasterFieldId" => $oFieldset->getMasterFieldId()); return $oTemplate->render($aTemplateData); }