/**
  * Create and set-up a MetadataValue object.
  */
 function &newMetadataValue($itemId, $fieldId, $type, $value)
 {
     $mdv =& $this->createFromType($type);
     $mdv->setFieldId($fieldId);
     $mdv->setItemId($itemId);
     $mdv->setType($type);
     if ($type == PLUGIN_DOCMAN_METADATA_TYPE_LIST) {
         $ea = array();
         if (is_array($value)) {
             foreach ($value as $val) {
                 $e = new Docman_MetadataListOfValuesElement();
                 $e->setId($val);
                 $ea[] = $e;
             }
         } else {
             $e = new Docman_MetadataListOfValuesElement();
             $e->setId($value);
             $ea[] = $e;
         }
         $mdv->setValue($ea);
     } else {
         $mdv->setValue($value);
     }
     return $mdv;
 }
 function admin_delete_love()
 {
     $request =& HTTPRequest::instance();
     $_loveId = (int) $request->get('loveid');
     $_mdLabel = $request->get('md');
     $_gid = (int) $request->get('group_id');
     $mdFactory = new Docman_MetadataFactory($_gid);
     $md =& $mdFactory->getFromLabel($_mdLabel);
     if ($md !== null && $md->getType() == PLUGIN_DOCMAN_METADATA_TYPE_LIST && $md->getLabel() != 'status') {
         $love = new Docman_MetadataListOfValuesElement($md->getId());
         $love->setId($_loveId);
         // Delete value
         $loveFactory = new Docman_MetadataListOfValuesElementFactory($md->getId());
         $deleted = $loveFactory->delete($love);
         if ($deleted) {
             $this->_controler->feedback->log('info', $GLOBALS['Language']->getText('plugin_docman', 'admin_metadata_delete_element'));
             $this->_controler->feedback->log('info', $GLOBALS['Language']->getText('plugin_docman', 'admin_metadata_reset_delete_element'));
         } else {
             $this->_controler->feedback->log('error', $GLOBALS['Language']->getText('plugin_docman', 'admin_metadata_error_delete_element'));
         }
     } else {
         // Sth really strange is happening... user try to delete a value
         // that do not belong to a metadata with a List type !?
         // If this happen, shutdown the server, format the hard drive and
         // leave computer science to keep goat on the Larzac.
     }
 }
 function _cloneMetadataValues($item, $newItemId, $metadataMapping)
 {
     // List for current item all its metadata and
     // * change the itemId
     // * change the fieldId (use mapping between template metadata and
     //   project metadata)
     // * for list of values change the values (use mapping as behind).
     $newMdvFactory =& $this->_getMetadataValueFactory($this->dstGroupId);
     $oldMdFactory =& $this->_getMetadataFactory($item->getGroupId());
     $oldMdFactory->appendItemMetadataList($item);
     $oldMdIter =& $item->getMetadataIterator();
     $oldMdIter->rewind();
     while ($oldMdIter->valid()) {
         $oldMd = $oldMdIter->current();
         if ($oldMdFactory->isRealMetadata($oldMd->getLabel())) {
             $oldValue = $oldMdFactory->getMetadataValue($item, $oldMd);
             if (isset($metadataMapping['md'][$oldMd->getId()])) {
                 $newMdv = $newMdvFactory->createFromType($oldMd->getType());
                 $newMdv->setItemId($newItemId);
                 $newMdv->setFieldId($metadataMapping['md'][$oldMd->getId()]);
                 if ($oldMd->getType() == PLUGIN_DOCMAN_METADATA_TYPE_LIST) {
                     $ea = array();
                     $oldValue->rewind();
                     while ($oldValue->valid()) {
                         $e = $oldValue->current();
                         // no maping for value `100` (shared by all lists).
                         if ($e->getId() != 100 && isset($metadataMapping['love'][$e->getId()])) {
                             $newE = clone $e;
                             $newE->setId($metadataMapping['love'][$e->getId()]);
                             $ea[] = $newE;
                         }
                         $oldValue->next();
                     }
                     // No match found: set None value.
                     if (count($ea) == 0) {
                         $e = new Docman_MetadataListOfValuesElement();
                         $e->setId(PLUGIN_DOCMAN_ITEM_STATUS_NONE);
                         $ea[] = $e;
                     }
                     $newMdv->setValue($ea);
                 } else {
                     $newMdv->setValue($oldValue);
                 }
                 $newMdvFactory->create($newMdv);
             }
         }
         $oldMdIter->next();
     }
 }
 /**
  * Return static list of status (hardcoded metadata with hardcoded values)
  */
 function &getStatusList($status = null)
 {
     $ea = array();
     $e = new Docman_MetadataListOfValuesElement();
     $e->setId(PLUGIN_DOCMAN_ITEM_STATUS_NONE);
     $e->setName($GLOBALS['Language']->getText('plugin_docman', 'md_love_status_none_name'));
     //$e->setDescription($GLOBALS['Language']->getText('plugin_docman','md_love_status_none_desc'));
     $e->setRank(PLUGIN_DOCMAN_ITEM_STATUS_NONE);
     $e->setStatus('P');
     $ea[PLUGIN_DOCMAN_ITEM_STATUS_NONE] =& $e;
     unset($e);
     $e = new Docman_MetadataListOfValuesElement();
     $e->setId(PLUGIN_DOCMAN_ITEM_STATUS_DRAFT);
     $e->setName($GLOBALS['Language']->getText('plugin_docman', 'md_love_status_draft_name'));
     //$e->setDescription('md_love_status_draft_desc');
     $e->setRank(PLUGIN_DOCMAN_ITEM_STATUS_DRAFT);
     $e->setStatus('P');
     $ea[PLUGIN_DOCMAN_ITEM_STATUS_DRAFT] =& $e;
     unset($e);
     $e = new Docman_MetadataListOfValuesElement();
     $e->setId(PLUGIN_DOCMAN_ITEM_STATUS_APPROVED);
     $e->setName($GLOBALS['Language']->getText('plugin_docman', 'md_love_status_approved_name'));
     //$e->setDescription('md_love_status_approved_desc');
     $e->setRank(PLUGIN_DOCMAN_ITEM_STATUS_APPROVED);
     $e->setStatus('P');
     $ea[PLUGIN_DOCMAN_ITEM_STATUS_APPROVED] =& $e;
     unset($e);
     $e = new Docman_MetadataListOfValuesElement();
     $e->setId(PLUGIN_DOCMAN_ITEM_STATUS_REJECTED);
     $e->setName($GLOBALS['Language']->getText('plugin_docman', 'md_love_status_rejected_name'));
     //$e->setDescription('md_love_status_rejected_desc');
     $e->setRank(PLUGIN_DOCMAN_ITEM_STATUS_REJECTED);
     $e->setStatus('P');
     $ea[PLUGIN_DOCMAN_ITEM_STATUS_REJECTED] =& $e;
     unset($e);
     if ($status === null) {
         return $ea;
     } else {
         return $ea[$status];
     }
 }
 function getItemTypeSearchMetadata()
 {
     // Special case for a fake metadata: item type search
     $md = new Docman_ListMetadata();
     $md->setGroupId($this->groupId);
     $md->setName($GLOBALS['Language']->getText('plugin_docman', 'filters_item_type'));
     $md->setType(PLUGIN_DOCMAN_METADATA_TYPE_LIST);
     $md->setUseIt(PLUGIN_DOCMAN_METADATA_USED);
     $md->setLabel('item_type');
     $md->setIsMultipleValuesAllowed(true);
     $row = array();
     $values = array();
     foreach (array('file', 'wiki', 'embeddedfile', 'empty', 'link', 'folder') as $type) {
         $row['value_id'] = constant('PLUGIN_DOCMAN_ITEM_TYPE_' . strtoupper($type));
         $row['name'] = $GLOBALS['Language']->getText('plugin_docman', 'filters_item_type_' . $type);
         $row['status'] = 'A';
         $love = new Docman_MetadataListOfValuesElement();
         $love->initFromRow($row);
         $values[] = $love;
     }
     $md->setListOfValueElements($values);
     return $md;
 }