From 78804342dac2e273619a6107ef62a24f8991839e Mon Sep 17 00:00:00 2001 From: Neil Blakey-Milner Date: Wed, 21 Dec 2005 15:12:20 +0000 Subject: [PATCH] Move presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php to edit.php. --- edit.php | 345 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php | 345 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2 files changed, 345 insertions(+), 345 deletions(-) create mode 100644 edit.php delete mode 100644 presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php diff --git a/edit.php b/edit.php new file mode 100644 index 0000000..fe985fd --- /dev/null +++ b/edit.php @@ -0,0 +1,345 @@ +aBreadcrumbs = array( + array('action' => 'browse', 'name' => _('Browse')), + ); + return parent::KTStandardDispatcher(); + } + + // FIXME identify the current location somehow. + function addPortlets($currentaction = null) { + $actions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser); + $oPortlet = new KTActionPortlet(_("Document Actions")); + $oPortlet->setActions($actions, $currentaction); + + $this->oPage->addPortlet($oPortlet); + } + + function addBreadcrumbs() { + $folder_id = $this->oDocument->getFolderId(); // conveniently, will be 0 if not possible. + if ($folder_id == 0) { $folder_id = 1; } + + // here we need the folder object to do the breadcrumbs. + $oFolder =& Folder::get($folder_id); + if (PEAR::isError($oFolder)) { + $this->oPage->addError(_("invalid folder")); + $folder_id = 1; + $oFolder =& Folder::get($folder_id); + } + + // do the breadcrumbs. + + // skip root. + $folder_path_names = array_slice($oFolder->getPathArray(), 1); + $folder_path_ids = array_slice(explode(',', $oFolder->getParentFolderIds()), 1); + + $parents = count($folder_path_ids); + + if ($parents != 0) { + foreach (range(0,$parents) as $index) { + $this->aBreadcrumbs[] = array("url" => $GLOBALS['KTRootUrl'] . "/browse.php?fFolderId=" . $folder_path_ids[$index], "name" => $folder_path_names[$index]); + } + } + + // now add this folder, _if we aren't in 1_. + if ($folder_id != 1) { + $this->aBreadcrumbs[] = array("url" => $GLOBALS['KTRootUrl'] . "/browse.php?fFolderId=" . $folder_id, "name" => $oFolder->getName()); + } + + // now add the document + $this->aBreadcrumbs[] = array("name" => $this->oDocument->getName()); + } + + function errorPage($errorMessage) { + $this->handleOutput($errorMessage); + exit(0); + } + + // FIXME move the render-setup to be a helper, to avoid the current two-location-copy-paste in do_main and do_update. + + function do_main() { + $document_id = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); + if (empty($document_id)) { + $this->errorPage(_("No document specified for editing.")); + } + $oDocument = Document::get($document_id); + if (PEAR::isError($oDocument)) { + $this->errorPage(_("Invalid Document.")); + } + + $this->oDocument = $oDocument; + $this->oFolder = Folder::get($oDocument->getFolderId()); // FIXME do we need to check that this is valid? + $this->addBreadcrumbs(); + $this->addPortlets("Edit"); + + $fieldsets = array(); + + // we always have a generic. + array_push($fieldsets, new GenericFieldsetDisplay()); + $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton(); + + $activesets = KTFieldset::getGenericFieldsets(); + foreach ($activesets as $oFieldset) { + $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); + array_push($fieldsets, new $displayClass($oFieldset)); + } + + // FIXME can we key this on fieldset namespace? or can we have duplicates? + // now we get the other fieldsets, IF there is a valid doctype. + $activesets = KTFieldset::getForDocumentType($oDocument->getDocumentTypeID()); + foreach ($activesets as $oFieldset) { + $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); + array_push($fieldsets, new $displayClass($oFieldset)); + } + + + $document_data = array(); + $document_data["document"] =& $this->oDocument; + + // we want to grab all the md for this doc, since its faster that way. + $mdlist =& DocumentFieldLink::getList(array('document_id = ?', array($document_id))); + + $field_values = array(); + foreach ($mdlist as $oFieldLink) { + $field_values[$oFieldLink->getDocumentFieldID()] = $oFieldLink->getValue(); + } + + $document_data["field_values"] = $field_values; + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate =& $oTemplating->loadTemplate("kt3/document/edit"); + $aTemplateData = array( + 'context' => $this, + 'document' => $this->oDocument, + 'document_data' => $document_data, // FIXME what do we need here? + 'fieldsets' => $fieldsets, + 'has_error' => false, + ); + $oTemplate->setData($aTemplateData); + return $oTemplate->render(); + } + + function do_update() { + $document_id = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); + if (empty($document_id)) { + $this->errorPage(_("No document specified for editing.")); + } + $oDocument = Document::get($document_id); + if (PEAR::isError($oDocument)) { + $this->errorPage(_("Invalid Document.")); + } + + $aErrorOptions = array( + 'redirect_to' => array('main', sprintf('fDocumentId=%d', $oDocument->getId())), + 'message' => 'No name given', + ); + $title = KTUtil::arrayGet($_REQUEST, 'generic_title'); + $title = $this->oValidator->validateString($title, + $aErrorOptions); + + $this->oDocument = $oDocument; + $this->oFolder = Folder::get($oDocument->getFolderId()); // FIXME do we need to check that this is valid? + $this->addBreadcrumbs(); + $this->addPortlets("Edit"); + + $fieldsets = array(); + + // FIXME handle true generic document DATA (e.g. title). + + // $activesets = KTFieldset::getGenericFieldsets(); + $activesets =& KTMetadataUtil::fieldsetsForDocument($oDocument); + foreach ($activesets as $oFieldset) { + array_push($fieldsets, $oFieldset); + } + + $activesets = KTFieldset::getForDocumentType($oDocument->getDocumentTypeID()); + + + // FIXME use array_merge + foreach ($activesets as $oFieldset) { + array_push($fieldsets, $oFieldset); + } + + // erk. we need all the items that the document _does_ need, _and_ what they have, + // _and_ what they don't ... + // we want to grab all the md for this doc, since its faster that way. + $current_md =& DocumentFieldLink::getList(array('document_id = ?', array($document_id))); + + // to get all fields, we merge repeatedly from KTFieldset::get + + $field_values = array(); + foreach ($fieldsets as $oFieldSet) { + $fields =& $oFieldSet->getFields(); + + // FIXME this doesn't handle multi-fieldset fields - are they possible/meaningful? + foreach ($fields as $oField) { + $field_values[$oField->getID()] = array($oField, null); + } + } + + + foreach ($current_md as $oFieldLink) { + $field_values[$oFieldLink->getDocumentFieldID()][1] = $oFieldLink->getValue(); + } + + // now, we need the full set of items that this document could contain. + + // FIXME this DOES NOT WORK for date items. + // FIXME that's fine - we don't use range items here... + $expect_vals = KTUtil::arrayGet($_REQUEST,'kt_core_fieldsets_expect'); + + foreach ($field_values as $key => $val) { + $newVal = KTUtil::arrayGet($_REQUEST, 'metadata_' . $key, null); + $wantVal = KTUtil::arrayGet($expect_vals, 'metadata_' . $key, false); + + // FIXME this leaves no way to check if someone has actually removed the item. + // FIXME we probably want to _not_ set anything that could be set ... but then how do you + // FIXME know about managed values ... + + if ($newVal !== null) { + $field_values[$key][1] = $newVal; // need the items themselves. + } else if ($wantVal !== false) { + // we sent it out, delete it. + + unset($field_values[$key]); + } + } + + + // finally, we need to pass through and remove null entries (sigh) + // FIXME alternatively we could build a new set, but that might break stuff? + + $final_values = array(); + foreach ($field_values as $aMDPack) { + if ($aMDPack[1] !== null) { + $final_values[] = $aMDPack; + } + } + $field_values = $final_values; + + // FIXME handle md versions. + //return '
' . print_r($field_values, true) . '
'; + $this->startTransaction(); + + $res = KTDocumentUtil::createMetadataVersion($oDocument); + if (PEAR::isError($res)) { + $this->errorRedirectToMain('Unable to create a metadata version of the document.'); + } + + $oDocument->setName($title); + $oDocument->setLastModifiedDate(getCurrentDateTime()); + $oDocument->setModifiedUserId($this->oUser->getId()); + $oDocument->setMetadataVersion($oDocument->getMetadataVersion() + 1); + $oDocumentTransaction = & new DocumentTransaction($oDocument, 'update metadata.', 'ktcore.transactions.update'); + + $res = $oDocumentTransaction->create(); + if (PEAR::isError($res)) { + $this->errorRedirectToMain('Failed to create transaction.'); + } + + $res = $oDocument->update(); + if (PEAR::isError($res)) { + $this->errorRedirectToMain('Failed to change basic details about the document..'); + } + $res = KTDocumentUtil::saveMetadata($oDocument, $field_values); + + if (PEAR::isError($res)) { + $this->rollbackTransaction(); + + // right. we're rolled out. now we want to regenerate the page, + errors. + + // fixme use map (urgh) + $new_field_values = array(); + + foreach ($field_values as $aMDSet) { + $new_field_values[$aMDSet[0]->getId()] = $aMDSet[1]; + + } + + // we need to do the displayAdaption. + + $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton(); + + $new_fieldsets = array(); + array_push($new_fieldsets, new GenericFieldsetDisplay()); + foreach ($fieldsets as $oFieldset) { + $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); + array_push($new_fieldsets, new $displayClass($oFieldset)); + } + + $document_data['document'] = $oDocument; + $document_data["field_values"] = $new_field_values; + + //print '
' . print_r($document_data['field_values'], true) . '
'; + + $document_data['errors'] = $res->aFailed['field']; + + $oTemplating =& KTTemplating::getSingleton(); + $oTemplate =& $oTemplating->loadTemplate("kt3/document/edit"); + $aTemplateData = array( + 'context' => $this, + 'document' => $this->oDocument, + 'document_data' => $document_data, // FIXME what do we need here? + 'fieldsets' => $new_fieldsets, + 'has_error' => true, + ); + $oTemplate->setData($aTemplateData); + return $oTemplate->render(); + + + } else { + $this->commitTransaction(); + + // now we need to say we're ok. + // this involves a redirect to view, with a message. + // FIXME do not hard-code URLs + + redirect('view.php?fDocumentId=' . $document_id); + } + + + + } + +} +$d =& new KTEditDocumentDispatcher; +$d->dispatch(); + + +?> diff --git a/presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php b/presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php deleted file mode 100644 index db78516..0000000 --- a/presentation/lookAndFeel/knowledgeTree/documentmanagement/editDocument.php +++ /dev/null @@ -1,345 +0,0 @@ -aBreadcrumbs = array( - array('action' => 'browse', 'name' => _('Browse')), - ); - return parent::KTStandardDispatcher(); - } - - // FIXME identify the current location somehow. - function addPortlets($currentaction = null) { - $actions = KTDocumentActionUtil::getDocumentActionsForDocument($this->oDocument, $this->oUser); - $oPortlet = new KTActionPortlet(_("Document Actions")); - $oPortlet->setActions($actions, $currentaction); - - $this->oPage->addPortlet($oPortlet); - } - - function addBreadcrumbs() { - $folder_id = $this->oDocument->getFolderId(); // conveniently, will be 0 if not possible. - if ($folder_id == 0) { $folder_id = 1; } - - // here we need the folder object to do the breadcrumbs. - $oFolder =& Folder::get($folder_id); - if (PEAR::isError($oFolder)) { - $this->oPage->addError(_("invalid folder")); - $folder_id = 1; - $oFolder =& Folder::get($folder_id); - } - - // do the breadcrumbs. - - // skip root. - $folder_path_names = array_slice($oFolder->getPathArray(), 1); - $folder_path_ids = array_slice(explode(',', $oFolder->getParentFolderIds()), 1); - - $parents = count($folder_path_ids); - - if ($parents != 0) { - foreach (range(0,$parents) as $index) { - $this->aBreadcrumbs[] = array("url" => "../browse.php?fFolderId=" . $folder_path_ids[$index], "name" => $folder_path_names[$index]); - } - } - - // now add this folder, _if we aren't in 1_. - if ($folder_id != 1) { - $this->aBreadcrumbs[] = array("url" => "../browse.php?fFolderId=" . $folder_id, "name" => $oFolder->getName()); - } - - // now add the document - $this->aBreadcrumbs[] = array("name" => $this->oDocument->getName()); - } - - function errorPage($errorMessage) { - $this->handleOutput($errorMessage); - exit(0); - } - - // FIXME move the render-setup to be a helper, to avoid the current two-location-copy-paste in do_main and do_update. - - function do_main() { - $document_id = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); - if (empty($document_id)) { - $this->errorPage(_("No document specified for editing.")); - } - $oDocument = Document::get($document_id); - if (PEAR::isError($oDocument)) { - $this->errorPage(_("Invalid Document.")); - } - - $this->oDocument = $oDocument; - $this->oFolder = Folder::get($oDocument->getFolderId()); // FIXME do we need to check that this is valid? - $this->addBreadcrumbs(); - $this->addPortlets("Edit"); - - $fieldsets = array(); - - // we always have a generic. - array_push($fieldsets, new GenericFieldsetDisplay()); - $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton(); - - $activesets = KTFieldset::getGenericFieldsets(); - foreach ($activesets as $oFieldset) { - $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); - array_push($fieldsets, new $displayClass($oFieldset)); - } - - // FIXME can we key this on fieldset namespace? or can we have duplicates? - // now we get the other fieldsets, IF there is a valid doctype. - $activesets = KTFieldset::getForDocumentType($oDocument->getDocumentTypeID()); - foreach ($activesets as $oFieldset) { - $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); - array_push($fieldsets, new $displayClass($oFieldset)); - } - - - $document_data = array(); - $document_data["document"] =& $this->oDocument; - - // we want to grab all the md for this doc, since its faster that way. - $mdlist =& DocumentFieldLink::getList(array('document_id = ?', array($document_id))); - - $field_values = array(); - foreach ($mdlist as $oFieldLink) { - $field_values[$oFieldLink->getDocumentFieldID()] = $oFieldLink->getValue(); - } - - $document_data["field_values"] = $field_values; - - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate =& $oTemplating->loadTemplate("kt3/document/edit"); - $aTemplateData = array( - 'context' => $this, - 'document' => $this->oDocument, - 'document_data' => $document_data, // FIXME what do we need here? - 'fieldsets' => $fieldsets, - 'has_error' => false, - ); - $oTemplate->setData($aTemplateData); - return $oTemplate->render(); - } - - function do_update() { - $document_id = KTUtil::arrayGet($_REQUEST, 'fDocumentId'); - if (empty($document_id)) { - $this->errorPage(_("No document specified for editing.")); - } - $oDocument = Document::get($document_id); - if (PEAR::isError($oDocument)) { - $this->errorPage(_("Invalid Document.")); - } - - $aErrorOptions = array( - 'redirect_to' => array('main', sprintf('fDocumentId=%d', $oDocument->getId())), - 'message' => 'No name given', - ); - $title = KTUtil::arrayGet($_REQUEST, 'generic_title'); - $title = $this->oValidator->validateString($title, - $aErrorOptions); - - $this->oDocument = $oDocument; - $this->oFolder = Folder::get($oDocument->getFolderId()); // FIXME do we need to check that this is valid? - $this->addBreadcrumbs(); - $this->addPortlets("Edit"); - - $fieldsets = array(); - - // FIXME handle true generic document DATA (e.g. title). - - // $activesets = KTFieldset::getGenericFieldsets(); - $activesets =& KTMetadataUtil::fieldsetsForDocument($oDocument); - foreach ($activesets as $oFieldset) { - array_push($fieldsets, $oFieldset); - } - - $activesets = KTFieldset::getForDocumentType($oDocument->getDocumentTypeID()); - - - // FIXME use array_merge - foreach ($activesets as $oFieldset) { - array_push($fieldsets, $oFieldset); - } - - // erk. we need all the items that the document _does_ need, _and_ what they have, - // _and_ what they don't ... - // we want to grab all the md for this doc, since its faster that way. - $current_md =& DocumentFieldLink::getList(array('document_id = ?', array($document_id))); - - // to get all fields, we merge repeatedly from KTFieldset::get - - $field_values = array(); - foreach ($fieldsets as $oFieldSet) { - $fields =& $oFieldSet->getFields(); - - // FIXME this doesn't handle multi-fieldset fields - are they possible/meaningful? - foreach ($fields as $oField) { - $field_values[$oField->getID()] = array($oField, null); - } - } - - - foreach ($current_md as $oFieldLink) { - $field_values[$oFieldLink->getDocumentFieldID()][1] = $oFieldLink->getValue(); - } - - // now, we need the full set of items that this document could contain. - - // FIXME this DOES NOT WORK for date items. - // FIXME that's fine - we don't use range items here... - $expect_vals = KTUtil::arrayGet($_REQUEST,'kt_core_fieldsets_expect'); - - foreach ($field_values as $key => $val) { - $newVal = KTUtil::arrayGet($_REQUEST, 'metadata_' . $key, null); - $wantVal = KTUtil::arrayGet($expect_vals, 'metadata_' . $key, false); - - // FIXME this leaves no way to check if someone has actually removed the item. - // FIXME we probably want to _not_ set anything that could be set ... but then how do you - // FIXME know about managed values ... - - if ($newVal !== null) { - $field_values[$key][1] = $newVal; // need the items themselves. - } else if ($wantVal !== false) { - // we sent it out, delete it. - - unset($field_values[$key]); - } - } - - - // finally, we need to pass through and remove null entries (sigh) - // FIXME alternatively we could build a new set, but that might break stuff? - - $final_values = array(); - foreach ($field_values as $aMDPack) { - if ($aMDPack[1] !== null) { - $final_values[] = $aMDPack; - } - } - $field_values = $final_values; - - // FIXME handle md versions. - //return '
' . print_r($field_values, true) . '
'; - $this->startTransaction(); - - $res = KTDocumentUtil::createMetadataVersion($oDocument); - if (PEAR::isError($res)) { - $this->errorRedirectToMain('Unable to create a metadata version of the document.'); - } - - $oDocument->setName($title); - $oDocument->setLastModifiedDate(getCurrentDateTime()); - $oDocument->setModifiedUserId($this->oUser->getId()); - $oDocument->setMetadataVersion($oDocument->getMetadataVersion() + 1); - $oDocumentTransaction = & new DocumentTransaction($oDocument, 'update metadata.', 'ktcore.transactions.update'); - - $res = $oDocumentTransaction->create(); - if (PEAR::isError($res)) { - $this->errorRedirectToMain('Failed to create transaction.'); - } - - $res = $oDocument->update(); - if (PEAR::isError($res)) { - $this->errorRedirectToMain('Failed to change basic details about the document..'); - } - $res = KTDocumentUtil::saveMetadata($oDocument, $field_values); - - if (PEAR::isError($res)) { - $this->rollbackTransaction(); - - // right. we're rolled out. now we want to regenerate the page, + errors. - - // fixme use map (urgh) - $new_field_values = array(); - - foreach ($field_values as $aMDSet) { - $new_field_values[$aMDSet[0]->getId()] = $aMDSet[1]; - - } - - // we need to do the displayAdaption. - - $fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton(); - - $new_fieldsets = array(); - array_push($new_fieldsets, new GenericFieldsetDisplay()); - foreach ($fieldsets as $oFieldset) { - $displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace()); - array_push($new_fieldsets, new $displayClass($oFieldset)); - } - - $document_data['document'] = $oDocument; - $document_data["field_values"] = $new_field_values; - - //print '
' . print_r($document_data['field_values'], true) . '
'; - - $document_data['errors'] = $res->aFailed['field']; - - $oTemplating =& KTTemplating::getSingleton(); - $oTemplate =& $oTemplating->loadTemplate("kt3/document/edit"); - $aTemplateData = array( - 'context' => $this, - 'document' => $this->oDocument, - 'document_data' => $document_data, // FIXME what do we need here? - 'fieldsets' => $new_fieldsets, - 'has_error' => true, - ); - $oTemplate->setData($aTemplateData); - return $oTemplate->render(); - - - } else { - $this->commitTransaction(); - - // now we need to say we're ok. - // this involves a redirect to view, with a message. - // FIXME do not hard-code URLs - - redirect('view.php?fDocumentId=' . $document_id); - } - - - - } - -} -$d =& new KTEditDocumentDispatcher; -$d->dispatch(); - - -?> -- libgit2 0.21.4