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;
             }
         }
     }
 }
Пример #2
0
 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');
 }
Пример #3
0
 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;
 }
Пример #4
0
 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());
     }
 }
Пример #5
0
 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;
 }
Пример #6
0
 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;
 }
Пример #7
0
 function &getByField($oField)
 {
     $oField =& KTUtil::getObject('DocumentField', $oField);
     $iFieldsetId = $oField->getParentFieldsetId();
     return KTFieldset::get($iFieldsetId);
 }
Пример #8
0
 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);
 }