From 15cf4fa9251f01313b5eb5cf1a91ec10643d42cb Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Wed, 21 Nov 2012 13:55:34 -0500
Subject: [PATCH] Rename rcube_bc.inc to bc.php for consistency
---
program/steps/settings/save_folder.inc | 56 +++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 41 insertions(+), 15 deletions(-)
diff --git a/program/steps/settings/save_folder.inc b/program/steps/settings/save_folder.inc
index a4e752c..877b0fb 100644
--- a/program/steps/settings/save_folder.inc
+++ b/program/steps/settings/save_folder.inc
@@ -1,12 +1,15 @@
<?php
-/*
+/**
+-----------------------------------------------------------------------+
| program/steps/settings/save_folder.inc |
| |
| This file is part of the Roundcube Webmail client |
- | Copyright (C) 2005-2009, The Roundcube Dev Team |
- | Licensed under the GNU GPL |
+ | Copyright (C) 2005-2012, The Roundcube Dev Team |
+ | |
+ | Licensed under the GNU General Public License version 3 or |
+ | any later version with exceptions for skins & plugins. |
+ | See the README file for a full license statement. |
| |
| PURPOSE: |
| Provide functionality to create/edit a folder |
@@ -14,15 +17,12 @@
+-----------------------------------------------------------------------+
| Author: Aleksander Machniak <alec@alec.pl> |
+-----------------------------------------------------------------------+
-
- $Id$
-
*/
// WARNING: folder names in UI are encoded with RCMAIL_CHARSET
// init IMAP connection
-$RCMAIL->imap_connect();
+$STORAGE = $RCMAIL->get_storage();
$name = trim(get_input_value('_name', RCUBE_INPUT_POST, true));
@@ -33,7 +33,7 @@
$old_imap = rcube_charset_convert($old, RCMAIL_CHARSET, 'UTF7-IMAP');
// $path is in UTF7-IMAP already
-$delimiter = $IMAP->get_hierarchy_delimiter();
+$delimiter = $STORAGE->get_hierarchy_delimiter();
$options = strlen($old_imap) ? rcmail_folder_options($old_imap) : array();
// Folder name checks
@@ -66,11 +66,28 @@
$name_imap = $path . $delimiter . $name_imap;
}
else {
- $name_imap = $RCMAIL->imap->mod_mailbox($name, 'in');
+ $name_imap = $STORAGE->mod_folder($name_imap, 'in');
}
+}
+// Check access rights to the parent folder
+if (!$error && strlen($path) && (!strlen($old_imap) || $old_imap != $name_imap)) {
+ $parent_opts = $STORAGE->folder_info($path);
+ if ($parent_opts['namespace'] != 'personal'
+ && (empty($parent_opts['rights']) || !preg_match('/[ck]/', implode($parent_opts['rights'])))
+ ) {
+ $error = rcube_label('parentnotwritable');
+ }
+}
+
+if ($error) {
+ $OUTPUT->command('display_message', $error, 'error');
+}
+else {
$folder['name'] = $name_imap;
$folder['oldname'] = $old_imap;
+ $folder['class'] = '';
+ $folder['options'] = $options;
$folder['settings'] = array(
// List view mode: 0-list, 1-threads
'view_mode' => (int) get_input_value('_viewmode', RCUBE_INPUT_POST),
@@ -82,12 +99,14 @@
// create a new mailbox
if (!$error && !strlen($old)) {
+ $folder['subscribe'] = true;
+
$plugin = $RCMAIL->plugins->exec_hook('folder_create', array('record' => $folder));
$folder = $plugin['record'];
if (!$plugin['abort']) {
- $created = $IMAP->create_mailbox($folder['name'], TRUE);
+ $created = $STORAGE->create_folder($folder['name'], $folder['subscribe']);
}
else {
$created = $plugin['result'];
@@ -105,9 +124,11 @@
$RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
}
-
- rcmail_update_folder_row($folder['name']);
+
+ rcmail_update_folder_row($folder['name'], null, $folder['subscribe'], $folder['class']);
$OUTPUT->show_message('foldercreated', 'confirmation');
+ // reset folder preview frame
+ $OUTPUT->command('subscription_select');
$OUTPUT->send('iframe');
}
else {
@@ -125,7 +146,7 @@
if (!$plugin['abort']) {
if ($rename) {
- $updated = $RCMAIL->imap->rename_mailbox($folder['oldname'], $folder['name']);
+ $updated = $STORAGE->rename_folder($folder['oldname'], $folder['name']);
}
else {
$updated = true;
@@ -149,7 +170,7 @@
}
else if (preg_match($oldprefix, $key)) {
unset($a_threaded[$key]);
- $a_threaded[preg_replace($oldprefix, $folder['name'].$delimiter, $key)] = true;
+ $a_threaded[preg_replace($oldprefix, $folder['name'].$delimiter, $key)] = true;
}
}
}
@@ -162,8 +183,13 @@
}
$OUTPUT->show_message('folderupdated', 'confirmation');
+
if ($rename) {
- rcmail_update_folder_row($folder['name'], $folder['oldname']);
+ // #1488692: update session
+ if ($_SESSION['mbox'] === $folder['oldname']) {
+ $_SESSION['mbox'] = $folder['name'];
+ }
+ rcmail_update_folder_row($folder['name'], $folder['oldname'], $folder['subscribe'], $folder['class']);
$OUTPUT->send('iframe');
}
}
--
Gitblit v1.9.1