/** * Gets a simple array of document metadata fields * * <code> * $ktapi = new KTAPI(); * $session = $ktapi->start_system_session(); * $document = $ktapi->get_document_by_id($documentid); * $metadata = $document->get_packed_metadata(); * foreach($metadata as $field){ * echo '<br><br>Fieldset: ' . $field[0]->getParentFieldset(); * echo '<br>Field name: ' .$field[0]->getName(); * echo ' Value: ' . $field[1]; * } * </code> * * @author KnowledgeTree Team * @access public * @param array $metadata The full metadata fieldsets and fields * @return array An array of metadata field object and value pairs */ function get_packed_metadata($metadata = null) { global $default; if (is_null($metadata)) { $metadata = $this->get_metadata(); } $packed = array(); foreach ($metadata as $fieldset_metadata) { if (is_array($fieldset_metadata)) { $fieldsetname = $fieldset_metadata['fieldset']; $fields = $fieldset_metadata['fields']; } elseif ($fieldset_metadata instanceof stdClass) { $fieldsetname = $fieldset_metadata->fieldset; $fields = $fieldset_metadata->fields; } else { $default->log->debug("unexpected fieldset type"); continue; } $fieldset = KTFieldset::getByName($fieldsetname); if (is_null($fieldset) || PEAR::isError($fieldset) || $fieldset instanceof KTEntityNoObjects) { $default->log->debug("could not resolve fieldset: {$fieldsetname} for document id: {$this->documentid}"); // exit graciously continue; } foreach ($fields as $fieldinfo) { if (is_array($fieldinfo)) { $fieldname = $fieldinfo['name']; $value = $fieldinfo['value']; } elseif ($fieldinfo instanceof stdClass) { $fieldname = $fieldinfo->name; $value = $fieldinfo->value; } else { $default->log->debug("unexpected fieldinfo type"); continue; } $field = DocumentField::getByFieldsetAndName($fieldset, $fieldname); if (is_null($field) || PEAR::isError($field) || is_a($field, 'KTEntityNoObjects')) { $default->log->debug("Could not resolve field: {$fieldname} on fieldset {$fieldsetname} for document id: {$this->documentid}"); // exit graciously continue; } $packed[] = array($field, $value); } } return $packed; }
function do_savefieldset() { $oForm = $this->form_edit(); $res = $oForm->validate(); $data = $res['results']; $errors = $res['errors']; $extra_errors = array(); if ($data['name'] != $this->oFieldset->getName()) { $oOldFieldset = KTFieldset::getByName($data['name']); if (!PEAR::isError($oOldFieldset)) { $extra_errors['name'][] = _kt("A fieldset with that name already exists."); } } if (!empty($errors) || !empty($extra_errors)) { return $oForm->handleError(null, $extra_errors); } $this->startTransaction(); $this->oFieldset->setName($data['name']); $this->oFieldset->setDescription($data['description']); $bGeneric = $data['generic']; if ($bGeneric != $this->oFieldset->getIsGeneric() && $bGeneric == true) { // delink it from all doctypes. $aTypes = $this->oFieldset->getAssociatedTypes(); foreach ($aTypes as $oType) { $res = KTMetadataUtil::removeSetsFromDocumentType($oType, $this->oFieldset->getId()); if (PEAR::isError($res)) { $this->errorRedirectTo('edit', _kt('Could not save fieldset changes')); exit(0); } } } $this->oFieldset->setIsGeneric($data['generic']); $res = $this->oFieldset->update(); if (PEAR::isError($res)) { $this->errorRedirectTo('edit', _kt('Could not save fieldset changes')); exit(0); } return $this->successRedirectTo('edit', _kt("Fieldset details updated.")); }