diff --git a/presentation/lookAndFeel/knowledgeTree/foldermanagement/addFolderBL.php b/presentation/lookAndFeel/knowledgeTree/foldermanagement/addFolderBL.php index a5f37b8..9d2b175 100644 --- a/presentation/lookAndFeel/knowledgeTree/foldermanagement/addFolderBL.php +++ b/presentation/lookAndFeel/knowledgeTree/foldermanagement/addFolderBL.php @@ -35,160 +35,164 @@ KTUtil::extractGPC('fDocumentTypeID', 'fFolderID', 'fFolderName'); require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc"); -if (checkSession()) { - require_once("$default->fileSystemRoot/lib/visualpatterns/PatternCustom.inc"); - - $oPatternCustom = & new PatternCustom(); - - if (isset($fFolderID)) { - //initialse a folder object - $oFolder = Folder::get($fFolderID); - require_once("$default->fileSystemRoot/lib/visualpatterns/PatternTableSqlQuery.inc"); - require_once("$default->fileSystemRoot/lib/visualpatterns/PatternListBox.inc"); - require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc"); - require_once("$default->fileSystemRoot/lib/foldermanagement/FolderDocTypeLink.inc"); - require_once("$default->fileSystemRoot/lib/foldermanagement/PhysicalFolderManagement.inc"); - require_once("$default->fileSystemRoot/lib/subscriptions/SubscriptionEngine.inc"); - require_once("$default->fileSystemRoot/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc"); - require_once("$default->fileSystemRoot/presentation/Html.inc"); - require_once("addFolderUI.inc"); - - if (!isset($fFolderName)) { - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - //we're still browsing - - if (Permission::userHasFolderWritePermission($oFolder)) { - //if the user is allowed to add folders, then display the add button - $oPatternCustom->setHtml(renderBrowseAddPage($fFolderID)); - } else { - //otherwise just let the user browse - $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); - $main->setErrorMessage(_("You do not have permission to create new folders in this folder") . "rootUrl/control.php?action=browse&fFolderID=$fFolderID\">"); - } - $main->setCentralPayload($oPatternCustom); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); - $main->setHasRequiredFields(true); - $main->render(); - } else { - // a document type has been specified - if (isset($fDocumentTypeID)) { - //have a folder name to store - if (Permission::userHasFolderWritePermission($oFolder)) { - //check for illegal characters in the folder name - - // strip slashes from the already EPGCS escaped form input - $sCheckFolderName = stripslashes($fFolderName); - if (strpos($sCheckFolderName, "\\") === false && strpos($sCheckFolderName, ">") === false && - strpos($sCheckFolderName, "<") === false && strpos($sCheckFolderName, ":") === false && - strpos($sCheckFolderName, "*") === false && strpos($sCheckFolderName, "?") === false && - strpos($sCheckFolderName, "|") === false && strpos($sCheckFolderName, "/") === false && - strpos($sCheckFolderName, "\"") === false) { - - if (Folder::folderExistsName($fFolderName, $fFolderID)) { - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom->setHtml(renderBrowseAddPage($fFolderID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage(sprintf(_("There is another folder named %s in this folder already"), $fFolderName)); - $main->setHasRequiredFields(true); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); - $main->render(); - } else { - $oParentFolder = Folder::get($fFolderID); - //create the folder in the db, giving it the properties of it's parent folder - $oFolder = & new Folder($fFolderName, "", $fFolderID, $_SESSION["userID"], $oParentFolder->getUnitID()); - if ($oFolder->create()) { - $oFolderDocTypeLink = & new FolderDocTypeLink($oFolder->getID(), $fDocumentTypeID); - if ($oFolderDocTypeLink->create()) { - //create the folder on the file system - if (PhysicalFolderManagement::createFolder(Folder::getFolderPath($oFolder->getID()))) { - $default->log->info("addFolderBL.php successfully added folder $fFolderName to parent folder " . Folder::getFolderPath($fFolderID) . " id=$fFolderID"); - - // fire subscription alerts for the new folder - $count = SubscriptionEngine::fireSubscription($oParentFolder->getID(), SubscriptionConstants::subscriptionAlertType("AddFolder"), - SubscriptionConstants::subscriptionType("FolderSubscription"), - array( "newFolderName" => $fFolderName, - "parentFolderName" => $oParentFolder->getName()) ); - $default->log->info("addFolderBL.php fired $count subscription alerts for new folder $fFolderName"); - redirect("$default->rootUrl/control.php?action=editFolder&fFolderID=" . $oFolder->getID()); - } else { - //if we couldn't do that - $default->log->error("addFolderBL.php Filesystem error attempting to store folder name=$fFolderName in parent folder '" . Folder::getFolderPath($fFolderID) . "' id=$fFolderID"); - - // remove the folder and its doc type link from the db and report and error - $oFolderDocTypeLink->delete(); - $oFolder->delete(); - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage(sprintf(_("There was an error creating the folder %s on the filesystem"), $fFolderName)); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); - $main->setHasRequiredFields(true); - $main->render(); - } - } else { - //couldn't associate the chosen document type with this folder - $default->log->error("addFolderBL.php DB error storing folder-document type link for folder name=$fFolderName in parent folder '" . Folder::getFolderPath($fFolderID) . "' folderID=$fFolderID; docTypeID=$fDocumentTypeID"); - - //remove the folder from the database - $oFolder->delete(); - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage(sprintf(_("There was an error creating the folder %s on the filesystem"), $fFolderName)); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); - $main->setHasRequiredFields(true); - $main->render(); - } - } else { - //if we couldn't create the folder in the db, report an error - $default->log->error("addFolderBL.php DB error attempting to store folder name=$fFolderName in parent folder '" . Folder::getFolderPath($fFolderID) . "' id=$fFolderID"); - - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage(sprintf(_("There was an error creating the folder %s in the database"), $fFolderName)); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); - $main->render(); - } - } - } else { - //the user entered an illegal character in the folder name - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom->setHtml(renderBrowseAddPage($fFolderID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage(_("Folder not created. Folder names may not contain: '<', '>', '*', '/', '\', '|', '?' or '\"' ")); - $main->setHasRequiredFields(true); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); - $main->render(); - } - - } else { - //if the user doesn't have write permission for this folder, - //give them only browse facilities - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage(_("You do not have permission to create new folders in this folder")); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); - $main->render(); - } - } else { - //there are no document type assigned to this folder - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom->setHtml(renderBrowseAddPage($fFolderID)); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage(_("You did not specify a document type. If there are no system document types, please contact a System Administrator.")); - $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); - $main->render(); - } - } - } else { - require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); - $oPatternCustom->setHtml(""); - $main->setCentralPayload($oPatternCustom); - $main->setErrorMessage(_("No folder currently selected")); - $main->render(); - } +if (!checkSession()) { + // Doesn't return anyway. Just in case... + exit(0); } +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternCustom.inc"); + +$oPatternCustom = & new PatternCustom(); + +if (!isset($fFolderID)) { + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom->setHtml(""); + $main->setCentralPayload($oPatternCustom); + $main->setErrorMessage(_("No folder currently selected")); + $main->render(); + exit(0); +} + +//initialse a folder object +$oFolder = Folder::get($fFolderID); +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternTableSqlQuery.inc"); +require_once("$default->fileSystemRoot/lib/visualpatterns/PatternListBox.inc"); +require_once("$default->fileSystemRoot/lib/foldermanagement/Folder.inc"); +require_once("$default->fileSystemRoot/lib/foldermanagement/FolderDocTypeLink.inc"); +require_once("$default->fileSystemRoot/lib/foldermanagement/PhysicalFolderManagement.inc"); +require_once("$default->fileSystemRoot/lib/subscriptions/SubscriptionEngine.inc"); +require_once("$default->fileSystemRoot/presentation/lookAndFeel/knowledgeTree/foldermanagement/folderUI.inc"); +require_once("$default->fileSystemRoot/presentation/Html.inc"); +require_once("addFolderUI.inc"); + +if (!Permission::userHasFolderWritePermission($oFolder)) { + //if the user doesn't have write permission for this folder, + //give them only browse facilities + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); + $main->setCentralPayload($oPatternCustom); + $main->setErrorMessage(_("You do not have permission to create new folders in this folder")); + $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); + $main->render(); + exit(0); +} + + +if (!isset($fFolderName)) { + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + + $oPatternCustom->setHtml(renderBrowseAddPage($fFolderID)); + $main->setCentralPayload($oPatternCustom); + $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); + $main->setHasRequiredFields(true); + $main->render(); + exit(0); +} + +// a document type has been specified +if (!isset($fDocumentTypeID)) { + //there are no document type assigned to this folder + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom->setHtml(renderBrowseAddPage($fFolderID)); + $main->setCentralPayload($oPatternCustom); + $main->setErrorMessage(_("You did not specify a document type. If there are no system document types, please contact a System Administrator.")); + $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); + $main->render(); + exit(0); +} + +//check for illegal characters in the folder name + +// strip slashes from the already EPGCS escaped form input +$sCheckFolderName = stripslashes($fFolderName); +if (!(strpos($sCheckFolderName, "\\") === false && strpos($sCheckFolderName, ">") === false && + strpos($sCheckFolderName, "<") === false && strpos($sCheckFolderName, ":") === false && + strpos($sCheckFolderName, "*") === false && strpos($sCheckFolderName, "?") === false && + strpos($sCheckFolderName, "|") === false && strpos($sCheckFolderName, "/") === false && + strpos($sCheckFolderName, "\"") === false)) { + //the user entered an illegal character in the folder name + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom->setHtml(renderBrowseAddPage($fFolderID)); + $main->setCentralPayload($oPatternCustom); + $main->setErrorMessage(_("Folder not created. Folder names may not contain: '<', '>', '*', '/', '\', '|', '?' or '\"' ")); + $main->setHasRequiredFields(true); + $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); + $main->render(); + exit(0); +} + +if (Folder::folderExistsName($fFolderName, $fFolderID)) { + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom->setHtml(renderBrowseAddPage($fFolderID)); + $main->setCentralPayload($oPatternCustom); + $main->setErrorMessage(sprintf(_("There is another folder named %s in this folder already"), $fFolderName)); + $main->setHasRequiredFields(true); + $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); + $main->render(); + exit(0); +} + +$oParentFolder = Folder::get($fFolderID); +//create the folder in the db, giving it the properties of it's parent folder +$oFolder = & new Folder($fFolderName, "", $fFolderID, $_SESSION["userID"], $oParentFolder->getUnitID()); + +if (!$oFolder->create()) { + //if we couldn't create the folder in the db, report an error + $default->log->error("addFolderBL.php DB error attempting to store folder name=$fFolderName in parent folder '" . Folder::getFolderPath($fFolderID) . "' id=$fFolderID"); + + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); + $main->setCentralPayload($oPatternCustom); + $main->setErrorMessage(sprintf(_("There was an error creating the folder %s in the database"), $fFolderName)); + $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); + $main->render(); + exit(0); +} + + +$oFolderDocTypeLink = & new FolderDocTypeLink($oFolder->getID(), $fDocumentTypeID); +if (!$oFolderDocTypeLink->create()) { + //couldn't associate the chosen document type with this folder + $default->log->error("addFolderBL.php DB error storing folder-document type link for folder name=$fFolderName in parent folder '" . Folder::getFolderPath($fFolderID) . "' folderID=$fFolderID; docTypeID=$fDocumentTypeID"); + + //remove the folder from the database + $oFolder->delete(); + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); + $main->setCentralPayload($oPatternCustom); + $main->setErrorMessage(sprintf(_("There was an error creating the folder %s on the filesystem"), $fFolderName)); + $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); + $main->setHasRequiredFields(true); + $main->render(); + exit(0); +} + +//create the folder on the file system +if (!PhysicalFolderManagement::createFolder(Folder::getFolderPath($oFolder->getID()))) { + //if we couldn't do that + $default->log->error("addFolderBL.php Filesystem error attempting to store folder name=$fFolderName in parent folder '" . Folder::getFolderPath($fFolderID) . "' id=$fFolderID"); + + // remove the folder and its doc type link from the db and report and error + $oFolderDocTypeLink->delete(); + $oFolder->delete(); + require_once("$default->fileSystemRoot/presentation/webpageTemplate.inc"); + $oPatternCustom->setHtml(renderBrowsePage($fFolderID)); + $main->setCentralPayload($oPatternCustom); + $main->setErrorMessage(sprintf(_("There was an error creating the folder %s on the filesystem"), $fFolderName)); + $main->setFormAction($_SERVER["PHP_SELF"] . "?fFolderID=$fFolderID"); + $main->setHasRequiredFields(true); + $main->render(); + exit(0); +} + +$default->log->info("addFolderBL.php successfully added folder $fFolderName to parent folder " . Folder::getFolderPath($fFolderID) . " id=$fFolderID"); + +// fire subscription alerts for the new folder +$count = SubscriptionEngine::fireSubscription($oParentFolder->getID(), SubscriptionConstants::subscriptionAlertType("AddFolder"), + SubscriptionConstants::subscriptionType("FolderSubscription"), + array( "newFolderName" => $fFolderName, + "parentFolderName" => $oParentFolder->getName()) ); +$default->log->info("addFolderBL.php fired $count subscription alerts for new folder $fFolderName"); +redirect("$default->rootUrl/control.php?action=editFolder&fFolderID=" . $oFolder->getID()); + ?>