function _getDefaultValuesFields($params) { $mdFactory = new Docman_MetadataFactory($this->newItem->getGroupId()); $inheritableMda = $mdFactory->getInheritableMdLabelArray(true); $mdIter = $this->newItem->getMetadataIterator(); $mdHtmlFactory = new Docman_MetadataHtmlFactory(); return $mdHtmlFactory->buildFieldArray($mdIter, $inheritableMda, true, $params['form_name'], $params['theme_path']); }
function _getInheritableMetadata() { if ($this->inheritableMetadataArray === null) { $mdFactory = new Docman_MetadataFactory($this->item->getGroupId()); $inheritableMda = $mdFactory->getInheritableMdLabelArray(true); $mdIter = $this->item->getMetadataIterator(); $mdHtmlFactory = new Docman_MetadataHtmlFactory(); $this->inheritableMetadataArray = $mdHtmlFactory->buildFieldArray($mdIter, $inheritableMda, true, $this->formName, $this->theme_path); } return $this->inheritableMetadataArray; }
function update() { $request =& $this->_controler->request; if ($request->exist('item')) { $user =& $this->_controler->getUser(); $data = $request->get('item'); $item_factory =& $this->_getItemFactory($request->get('group_id')); $item =& $item_factory->getItemFromDb($data['id']); // Update Owner $ownerChanged = false; if (isset($data['owner'])) { $_owner_id = $this->_checkOwnerChange($data['owner'], $user); if ($_owner_id != $item->getOwnerId()) { $ownerChanged = true; $um = $this->_getUserManagerInstance(); $_oldowner = $um->getUserById($item->getOwnerId())->getName(); $_newowner = $um->getUserById($_owner_id)->getName(); $data['user_id'] = $_owner_id; } unset($data['owner']); } // Change creation date if (isset($data['create_date']) && $data['create_date'] != '') { $old_create_date = $item->getCreateDate(); if ($old_create_date == $data['create_date']) { $create_date_changed = false; } else { $create_date_changed = true; } } else { $create_date_changed = false; } // Change update date if (isset($data['update_date']) && $data['update_date'] != '') { $old_update_date = $item->getUpdateDate(); if ($old_update_date == $data['update_date']) { $update_date_changed = false; } else { $update_date_changed = true; } } else { $update_date_changed = false; } // Special handling of obsolescence date if (isset($data['obsolescence_date']) && $data['obsolescence_date'] != 0) { if (preg_match('/^([0-9]+)-([0-9]+)-([0-9]+)$/', $data['obsolescence_date'], $d)) { $data['obsolescence_date'] = gmmktime(0, 0, 0, $d[2], $d[3], $d[1]); } else { if (!preg_match('/^[0-9]*$/', $data['obsolescence_date'])) { $data['obsolescence_date'] = 0; } } } // Check is status change $statusChanged = false; if (array_key_exists('status', $data)) { $old_st = $item->getStatus(); if ($old_st != $data['status']) { $statusChanged = true; } } // For empty document, check if type changed $createFile = false; $itemType = $item_factory->getItemTypeForItem($item); if ($itemType == PLUGIN_DOCMAN_ITEM_TYPE_EMPTY && isset($data['item_type']) && $itemType != $data['item_type'] && ($data['item_type'] != PLUGIN_DOCMAN_ITEM_TYPE_EMBEDDEDFILE || $this->_controler->getProperty('embedded_are_allowed'))) { if ($data['item_type'] == PLUGIN_DOCMAN_ITEM_TYPE_EMBEDDEDFILE || $data['item_type'] == PLUGIN_DOCMAN_ITEM_TYPE_FILE) { $createFile = true; } } else { $data['item_type'] = $itemType; } $updated = $item_factory->update($data); if ($updated) { $this->event_manager->processEvent('plugin_docman_event_update', array('group_id' => $request->get('group_id'), 'item' => $item, 'new' => $data, 'user' => $user)); } // Log the 'edit' event if link_url or wiki_page are set if (isset($data['link_url']) || isset($data['wiki_page'])) { $this->event_manager->processEvent('plugin_docman_event_edit', array('group_id' => $request->get('group_id'), 'item' => &$item, 'user' => &$user)); } if ($ownerChanged) { $this->_raiseMetadataChangeEvent($user, $item, $request->get('group_id'), $_oldowner, $_newowner, 'owner'); } if ($statusChanged) { $this->_raiseMetadataChangeEvent($user, $item, $request->get('group_id'), $old_st, $data['status'], 'status'); } if ($create_date_changed) { $this->_raiseMetadataChangeEvent($user, $item, $request->get('group_id'), $old_create_date, $data['create_date'], 'create_date'); } if ($update_date_changed) { $this->_raiseMetadataChangeEvent($user, $item, $request->get('group_id'), $old_update_date, $data['update_date'], 'update_date'); } if ($createFile) { // Re-create from DB (because of type changed) $item = $item_factory->getItemFromDb($data['id']); $this->_storeFile($item); } // Update real metatata if ($request->exist('metadata')) { $groupId = (int) $request->get('group_id'); $metadata_array = $request->get('metadata'); $mdvFactory = new Docman_MetadataValueFactory($groupId); $mdvFactory->updateFromRow($data['id'], $metadata_array); if ($mdvFactory->isError()) { $this->_controler->feedback->log('error', $mdvFactory->getErrorMessage()); } else { // Recursive update of properties if ($request->exist('recurse')) { $recurseArray = $request->get('recurse'); // Check if all are actually inheritable $metadataFactory = new Docman_MetadataFactory($groupId); $inheritableMdLabelArray = $metadataFactory->getInheritableMdLabelArray(); if (count(array_diff($recurseArray, $inheritableMdLabelArray)) == 0) { $dPm =& Docman_PermissionsManager::instance($groupId); if ($dPm->currentUserCanWriteSubItems($data['id'])) { $subItemsWritableVisitor =& $dPm->getSubItemsWritableVisitor(); if ($this->_controler->_actionParams['recurseOnDocs']) { $itemIdArray = $subItemsWritableVisitor->getItemIdList(); } else { $itemIdArray = $subItemsWritableVisitor->getFolderIdList(); } // Remove the first element (parent item) to keep // only the children. array_shift($itemIdArray); if (count($itemIdArray) > 0) { $recurseArray = $request->get('recurse'); $mdvFactory->massUpdateFromRow($data['id'], $recurseArray, $itemIdArray); // extract cross references $reference_manager =& ReferenceManager::instance(); foreach ($metadata_array as $curr_metadata_value) { foreach ($itemIdArray as $curr_item_id) { $reference_manager->extractCrossRef($curr_metadata_value, $curr_item_id, ReferenceManager::REFERENCE_NATURE_DOCUMENT, $groupId); } } } else { $this->_controler->feedback->log('warning', $GLOBALS['Language']->getText('plugin_docman', 'warning_no_item_recurse')); } } } } } } $this->_controler->feedback->log('info', $GLOBALS['Language']->getText('plugin_docman', 'info_item_updated')); } $this->event_manager->processEvent('send_notifications', array()); }