use new dialog.show_prompt for rename; handle encoding issues; catch possible exceptions and try to handle it correctly by attempting some kind of rollback

This commit is contained in:
Klaus Leithoff 2013-12-12 15:10:25 +00:00
parent d3a2dff6a9
commit 95021fe0fc
3 changed files with 60 additions and 24 deletions

View File

@ -1688,9 +1688,9 @@ class mail_bo
*/ */
function renameFolder($_oldFolderName, $_parent, $_folderName) function renameFolder($_oldFolderName, $_parent, $_folderName)
{ {
$oldFolderName = $this->_encodeFolderName($_oldFolderName); $oldFolderName = $_oldFolderName;//$this->_encodeFolderName($_oldFolderName);
$parent = $this->_encodeFolderName($_parent); $parent = $_parent;//$this->_encodeFolderName($_parent);
$folderName = $this->_encodeFolderName($_folderName); $folderName = $_folderName;//$this->_encodeFolderName($_folderName);
if(empty($parent)) { if(empty($parent)) {
$newFolderName = $folderName; $newFolderName = $folderName;
@ -1699,10 +1699,13 @@ class mail_bo
$newFolderName = $parent . $HierarchyDelimiter . $folderName; $newFolderName = $parent . $HierarchyDelimiter . $folderName;
} }
if (self::$debug) error_log("create folder: $newFolderName"); if (self::$debug) error_log("create folder: $newFolderName");
try
{
$rv = $this->icServer->renameMailbox($oldFolderName, $newFolderName); $rv = $this->icServer->renameMailbox($oldFolderName, $newFolderName);
if ( PEAR::isError($rv) ) { }
if (self::$debug) error_log(__METHOD__." failed for $oldFolderName, $newFolderName with error: ".print_r($rv->message,true)); catch (Exception $e)
return false; {
throw new egw_exception(__METHOD__." failed for $oldFolderName (rename to: $newFolderName) with error:".$e->getMessage());;
} }
return $newFolderName; return $newFolderName;

View File

@ -3229,11 +3229,11 @@ blockquote[type=cite] {
*/ */
function ajax_renameFolder($_folderName, $_newName) function ajax_renameFolder($_folderName, $_newName)
{ {
//error_log(__METHOD__.__LINE__.' OldFolderName:'.array2string($_folderName).' NewName:'.array2string($_newName)); error_log(__METHOD__.__LINE__.' OldFolderName:'.array2string($_folderName).' NewName:'.array2string($_newName));
if ($_folderName) if ($_folderName)
{ {
$decodedFolderName = $this->mail_bo->decodeEntityFolderName($_folderName); $decodedFolderName = $this->mail_bo->decodeEntityFolderName($_folderName);
$_newName = translation::convert($this->mail_bo->decodeEntityFolderName($_newName), $this->charset, 'UTF7-IMAP'); $_newName = $this->mail_bo->decodeEntityFolderName($_newName);
$del = $this->mail_bo->getHierarchyDelimiter(false); $del = $this->mail_bo->getHierarchyDelimiter(false);
$oA = array(); $oA = array();
list($profileID,$folderName) = explode(self::$delimiter,$decodedFolderName,2); list($profileID,$folderName) = explode(self::$delimiter,$decodedFolderName,2);
@ -3275,11 +3275,21 @@ blockquote[type=cite] {
} }
$this->mail_bo->reopen('INBOX'); $this->mail_bo->reopen('INBOX');
$success = false;
try
{
if($newFolderName = $this->mail_bo->renameFolder($folderName, $parentFolder, $_newName)) { if($newFolderName = $this->mail_bo->renameFolder($folderName, $parentFolder, $_newName)) {
$this->mail_bo->resetFolderObjectCache($profileID); $this->mail_bo->resetFolderObjectCache($profileID);
//enforce the subscription to the newly named server, as it seems to fail for names with umlauts //enforce the subscription to the newly named server, as it seems to fail for names with umlauts
$rv = $this->mail_bo->subscribe($newFolderName, true); $rv = $this->mail_bo->subscribe($newFolderName, true);
$rv = $this->mail_bo->subscribe($folderName, false); $rv = $this->mail_bo->subscribe($folderName, false);
$success = true;
}
}
catch (Exception $e)
{
$newFolderName=$folderName;
$msg = $e->getMessage();
} }
$this->mail_bo->reopen($newFolderName); $this->mail_bo->reopen($newFolderName);
$fS = $this->mail_bo->getFolderStatus($newFolderName,false); $fS = $this->mail_bo->getFolderStatus($newFolderName,false);
@ -3337,11 +3347,15 @@ blockquote[type=cite] {
$this->mail_bo->saveSessionData(); $this->mail_bo->saveSessionData();
} }
//error_log(__METHOD__.__LINE__.array2string($oA)); //error_log(__METHOD__.__LINE__.array2string($oA));
if ($oA) if ($oA && $success)
{ {
$response = egw_json_response::get(); $response = egw_json_response::get();
$response->call('app.mail.mail_setLeaf',$oA,'mail'); $response->call('app.mail.mail_setLeaf',$oA,'mail');
} }
else
{
$response->call('egw_refresh',lang('failed to rename %1 ! Reason: %2',$oldFolderName,$msg),'mail');
}
} }
} }

View File

@ -1826,15 +1826,34 @@ app.classes.mail = AppJS.extend(
OldFolderName = OldFolderName.trim(); OldFolderName = OldFolderName.trim();
OldFolderName = OldFolderName.replace(/\([0-9]*\)/g,'').trim(); OldFolderName = OldFolderName.replace(/\([0-9]*\)/g,'').trim();
//console.log(OldFolderName); //console.log(OldFolderName);
NewFolderName = prompt(this.egw.lang("Rename Folder %1 to:",OldFolderName)); var buttons = [
if (jQuery(NewFolderName).text().length>0) NewFolderName = jQuery(NewFolderName).text(); {text: this.egw.lang("Rename"), id: "rename", class: "ui-priority-primary", "default": true},
{text: this.egw.lang("Cancel"), id:"cancel"},
];
var dialog = et2_dialog.show_prompt(function(_button_id, _value) {
var senders = this.my_data.data;
var NewFolderName = null;
if (_value.length>0) NewFolderName = _value;
//alert(NewFolderName); //alert(NewFolderName);
if (NewFolderName && NewFolderName.length>0) if (NewFolderName && NewFolderName.length>0)
{ {
app.mail.app_refresh(this.egw.lang("Renaming Folder %1 to %2",OldFolderName,NewFolderName, 'mail')); switch (_button_id)
egw.json('mail.mail_ui.ajax_renameFolder',[_senders[0].iface.id, NewFolderName]) {
case "rename":
egw.json('mail.mail_ui.ajax_renameFolder',[senders[0].iface.id, NewFolderName])
.sendRequest(true); .sendRequest(true);
return;
case "cancel":
} }
}
},
this.egw.lang("Rename Folder %1 to:",OldFolderName),
this.egw.lang("Rename Folder %1 ?",OldFolderName),
OldFolderName, buttons);
// setting required data for callback in as my_data
dialog.my_data = {
data: _senders,
};
}, },
/** /**