Пример #1
0
 /**
  * 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;
 }
Пример #2
0
 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."));
 }