Skip to content

Commit

Permalink
Fix bug where namespace prefix could not be truncated on folders list…
Browse files Browse the repository at this point in the history
… if show_real_foldernames=true (#5695)
  • Loading branch information
alecpl committed Apr 1, 2017
1 parent b314dfc commit 34446e0
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 14 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ CHANGELOG Roundcube Webmail
- Fix XSS issue in handling of a style tag inside of an svg element [CVE-2017-6820]
- Fix bug where settings/upload.inc could not be used by plugins (#5694)
- Fix regression in LDAP fuzzy search where it always used prefix search instead (#5713)
- Fix bug where namespace prefix could not be truncated on folders list if show_real_foldernames=true (#5695)

RELEASE 1.3-beta
----------------
Expand Down
25 changes: 17 additions & 8 deletions program/include/rcmail.php
Original file line number Diff line number Diff line change
Expand Up @@ -1689,25 +1689,34 @@ public function folder_classname($folder_id)
* Try to localize the given IMAP folder name.
* UTF-7 decode it in case no localized text was found
*
* @param string $name Folder name
* @param bool $with_path Enable path localization
* @param string $name Folder name
* @param bool $with_path Enable path localization
* @param bool $path_remove Remove the path
*
* @return string Localized folder name in UTF-8 encoding
*/
public function localize_foldername($name, $with_path = false)
public function localize_foldername($name, $with_path = false, $path_remove = false)
{
$realnames = $this->config->get('show_real_foldernames');

if (!$realnames && ($folder_class = $this->folder_classname($name))) {
return $this->gettext($folder_class);
}

$storage = $this->get_storage();
$delimiter = $storage->get_hierarchy_delimiter();

// Remove the path
if ($path_remove) {
if (strpos($name, $delimiter)) {
$path = explode($delimiter, $name);
$name = array_pop($path);
}
}
// try to localize path of the folder
if ($with_path && !$realnames) {
$storage = $this->get_storage();
$delimiter = $storage->get_hierarchy_delimiter();
$path = explode($delimiter, $name);
$count = count($path);
else if ($with_path && !$realnames) {
$path = explode($delimiter, $name);
$count = count($path);

if ($count > 1) {
for ($i = 1; $i < $count; $i++) {
Expand Down
9 changes: 5 additions & 4 deletions program/steps/settings/edit_folder.inc
Original file line number Diff line number Diff line change
Expand Up @@ -86,20 +86,21 @@ function rcmail_folder_form($attrib)

// Location (name)
if ($options['protected']) {
$foldername = str_replace($delimiter, ' &raquo; ', rcube::Q($RCMAIL->localize_folderpath($mbox)));
$foldername = str_replace($delimiter, ' &raquo; ', rcube::Q($RCMAIL->localize_foldername($mbox, false, true)));
}
else if ($options['norename']) {
$foldername = rcube::Q($folder);
}
else {
if (isset($_POST['_name']))
if (isset($_POST['_name'])) {
$folder = trim(rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST, true));
}

$foldername = new html_inputfield(array('name' => '_name', 'id' => '_name', 'size' => 30));
$foldername = $foldername->show($folder);

if ($options['special']) {
$foldername .= '&nbsp;(' . rcube::Q($RCMAIL->localize_foldername($mbox)) .')';
if ($options['special'] && ($sname = $RCMAIL->localize_foldername($mbox, false, true)) != $folder) {
$foldername .= '&nbsp;(' . rcube::Q($sname) .')';
}
}

Expand Down
5 changes: 3 additions & 2 deletions program/steps/settings/folders.inc
Original file line number Diff line number Diff line change
Expand Up @@ -277,12 +277,13 @@ function rcmail_subscription_form($attrib)
foreach ($list_folders as $i => $folder) {
$sub_key = array_search($folder['id'], $a_subscribed);
$subscribed = $sub_key !== false;
$protected = $folder['id'] == 'INBOX' || ($protect_default && isset($special_folders[$folder['id']]));
$special = $folder['id'] == 'INBOX' || isset($special_folders[$folder['id']]);
$protected = $folder['id'] == 'INBOX' || ($protect_default && $special);
$noselect = false;
$classes = array();

$folder_utf8 = rcube_charset::convert($folder['id'], 'UTF7-IMAP');
$display_folder = rcube::Q($protected ? $RCMAIL->localize_foldername($folder['id']) : $folder['name']);
$display_folder = rcube::Q($special ? $RCMAIL->localize_foldername($folder['id'], false, true) : $folder['name']);

if ($folder['virtual']) {
$classes[] = 'virtual';
Expand Down

0 comments on commit 34446e0

Please sign in to comment.