Allow creating new vendors when moving apps

This commit is contained in:
Alexander Nicolaysen Sørnes
2009-05-03 17:52:25 +02:00
parent 9720ac1373
commit 301ad3cd1a
4 changed files with 96 additions and 4 deletions

View File

@@ -1341,6 +1341,11 @@ class Application {
return $sMsg;
}
public function objectAllowCreatingParents()
{
return true;
}
public function objectSetParent($iNewId, $sClass = '')
{
$this->iVendorId = $iNewId;

View File

@@ -917,6 +917,8 @@ class ObjectManager
$sClassDisplayName = $oParentOM->GetOptionalSetting('objectGetClassDisplayName', 'parent entry');
echo '<p><a href="'.$this->makeUrl('moveToNewParent', $this->iId)."\">Create and move to a new $sClassDisplayName</a></p>\n";
/* Display some help text */
echo "<p>Move ".$oObject->objectMakeLink()." to the $sClassDisplayName ";
echo "selected below:</p>\n";
@@ -1127,6 +1129,61 @@ class ObjectManager
echo "</div>\n";
}
public function move_to_new_parent($aClean, $sErrors = '')
{
$oObject = new $this->sClass($this->iId);
$oOldParent = $oObject->objectGetParent();
$sParentClass = get_class($oOldParent);
$oParent = new $sParentClass();
$oParentOM = new objectManager($sParentClass);
echo "<div class='default_container'>\n";
echo '<p>Move '.$oObject->objectMakeLink().' to a new entry:</p>';
/* Display errors, if any, and fetch form data */
if($this->displayErrors($sErrors))
{
global $aClean;
$oParent->getOutputEditorValues($aClean);
if($sErrors === PREVIEW_ENTRY)
$this->show_preview($oParent, $aClean);
}
/* Display help if it exists */
if(method_exists($oParent, "objectDisplayAddItemHelp"))
{
$aVars = $this->get_custom_vars($aClean, "addHelp");
if($aVars)
$oParent->objectDisplayAddItemHelp($aClean);
else
$oParent->objectDisplayAddItemHelp();
}
echo "<form method=\"post\" action=\"".$this->makeUrl('moveToNewParent', $this->iId)."\">\n";
echo $this->makeUrlFormData();
$aVars = $oParentOM->get_custom_vars($aClean, 'add');
if($aVars)
$oParent->outputEditor($aVars);
else
$oParent->outputEditor();
$this->oObject = $oObject;
echo "<div align=\"center\">";
echo "<input type=\"submit\" class=\"button\" value=\"Move to new parent\" ".
"name=\"sSubmit\">\n";
$this->handle_preview_button();
echo "</div></form>\n";
echo html_back_link(1);
echo "</div>\n";
}
private function handle_preview_button()
{
$oObject = $this->getObject();
@@ -1290,6 +1347,14 @@ class ObjectManager
$this->iId = $this->getIdFromInput($aClean);
$oObject = new $this->sClass($this->iId);
if($aClean['sSubmit'] == 'Move to new parent')
{
$oOldParent = $oObject->objectGetParent();
$sParentClass = get_class($oOldParent);
$oObject = new $sParentClass();
}
$oOriginalObject = new $this->sClass($this->iId); /* Prevent possible security hole if users change key
variables, making the permission checks run on
the wrong criteria */
@@ -1314,7 +1379,7 @@ class ObjectManager
/* Check input, if necessary */
if($aClean['sSubmit'] != "Delete" &&
method_exists(new $this->sClass, "checkOutputEditorInput"))
method_exists($oObject, "checkOutputEditorInput"))
{
$sErrors = $oObject->checkOutputEditorInput($aClean);
}
@@ -1329,6 +1394,27 @@ class ObjectManager
case "Preview":
return PREVIEW_ENTRY;
case 'Move to new parent':
if(!$this->iId)
return FALSE;
if($sErrors)
return $sErrors;
if(!$oOriginalObject->canEdit())
return FALSE;
if(!$this->getOptionalSetting('objectAllowCreatingParents', false))
return FALSE;
$oObject->create();
if($oObject->objectGetState() != 'accepted')
$oObject->unQueue();
$oOriginalObject->objectSetParent($oObject->objectGetId());
$oOriginalObject->update();
break;
case "Submit":
// if we have errors, return them
if($sErrors)

View File

@@ -105,9 +105,6 @@ class Vendor {
*/
function unQueue()
{
if(!$this->canEdit())
return FALSE;
$hResult = query_parameters("UPDATE vendor SET state = '?' WHERE vendorId = '?'",
'accepted', $this->iVendorId);

View File

@@ -128,6 +128,10 @@ if($oObject->getId() && $sAction != "add")
$oObject->display_entry_for_editing($aClean, $sErrors);
break;
case 'moveToNewParent':
$oObject->move_to_new_parent($aClean, $sErrors);
break;
case 'showChangeParent':
$oObject->display_change_parent();
break;