Esempio n. 1
0
 function do_updateFieldset()
 {
     global $main;
     $GLOBALS['default']->log->error(print_r($_REQUEST, true));
     header('Content-Type: application/xml');
     $oFieldset =& $this->oValidator->validateFieldset($_REQUEST['fieldset']);
     $matches = array();
     $aFields = array();
     foreach ($_REQUEST as $k => $v) {
         if (preg_match('/^metadata_(\\d+)$/', $k, $matches)) {
             $aValues[$matches[1]] = $v;
         }
     }
     $aNextFieldValues =& KTMetadataUtil::getNext($oFieldset, $aValues);
     $sWidgets = '';
     // convert these into widgets using the ever-evil...
     // function getWidgetForMetadataField($field, $current_value, $page, $errors = null, $vocab = null)
     foreach ($aNextFieldValues as $aFieldInfo) {
         $vocab = array();
         $vocab[''] = 'Unset';
         foreach ($aFieldInfo['values'] as $md_v) {
             $vocab[$md_v->getName()] = $md_v->getName();
         }
         $req = $aFieldInfo['field']->getIsMandatory();
         $oWidget = getWidgetForMetadataField($aFieldInfo['field'], null, $main, null, $vocab, array('required' => $req));
         $sWidgets .= $oWidget->render();
     }
     return $sWidgets;
 }
 function validateMetadata(&$oDocument, $aMetadata)
 {
     $aFieldsets =& KTFieldset::getGenericFieldsets();
     $aFieldsets =& kt_array_merge($aFieldsets, KTFieldset::getForDocumentType($oDocument->getDocumentTypeId()));
     $aSimpleMetadata = array();
     foreach ($aMetadata as $aSingleMetadatum) {
         list($oField, $sValue) = $aSingleMetadatum;
         if (is_null($oField)) {
             continue;
         }
         $aSimpleMetadata[$oField->getId()] = $sValue;
     }
     $aFailed = array();
     foreach ($aFieldsets as $oFieldset) {
         $aFields =& $oFieldset->getFields();
         $aFieldValues = array();
         $isRealConditional = $oFieldset->getIsConditional() && KTMetadataUtil::validateCompleteness($oFieldset);
         foreach ($aFields as $oField) {
             $v = KTUtil::arrayGet($aSimpleMetadata, $oField->getId());
             if ($oField->getIsMandatory() && !$isRealConditional) {
                 if (empty($v)) {
                     // XXX: What I'd do for a setdefault...
                     $aFailed['field'][$oField->getId()] = 1;
                 }
             }
             if (!empty($v)) {
                 $aFieldValues[$oField->getId()] = $v;
             }
         }
         if ($isRealConditional) {
             $res = KTMetadataUtil::getNext($oFieldset, $aFieldValues);
             if ($res) {
                 foreach ($res as $aMDSet) {
                     if ($aMDSet['field']->getIsMandatory()) {
                         $aFailed['fieldset'][$oFieldset->getId()] = 1;
                     }
                 }
             }
         }
     }
     if (!empty($aFailed)) {
         return new KTMetadataValidationError($aFailed);
     }
     return $aMetadata;
 }