Merge branch 'master' into dev/elastic

pull/5578/merge
Aleksander Machniak 7 years ago
commit 750827ad65

@ -37,6 +37,7 @@ CHANGELOG Roundcube Webmail
- Managesieve: Support filter action with custom IMAP flags (#6011) - Managesieve: Support filter action with custom IMAP flags (#6011)
- Managesieve: Support 'mime' extension tests - RFC5703 (#5832) - Managesieve: Support 'mime' extension tests - RFC5703 (#5832)
- Managesieve: Support GSSAPI authentication with krb_authentication plugin (#5779) - Managesieve: Support GSSAPI authentication with krb_authentication plugin (#5779)
- Managesieve: Support enabling the plugin for specified hosts only (#6292)
- Password: Support host variables in password_db_dsn option (#5955) - Password: Support host variables in password_db_dsn option (#5955)
- Password: Automatic virtualmin domain setting, removed password_virtualmin_format option (#5759) - Password: Automatic virtualmin domain setting, removed password_virtualmin_format option (#5759)
- Password: Added password_username_format option (#5766) - Password: Added password_username_format option (#5766)

@ -87,7 +87,6 @@ class enigma_ui
$this->rc->output->add_handlers(array( $this->rc->output->add_handlers(array(
'keyslist' => array($this, 'tpl_keys_list'), 'keyslist' => array($this, 'tpl_keys_list'),
'keyframe' => array($this, 'tpl_key_frame'),
'countdisplay' => array($this, 'tpl_keys_rowcount'), 'countdisplay' => array($this, 'tpl_keys_rowcount'),
'searchform' => array($this->rc->output, 'search_form'), 'searchform' => array($this->rc->output, 'search_form'),
)); ));
@ -191,18 +190,6 @@ class enigma_ui
$this->add_js(); $this->add_js();
} }
/**
* Template object for key info/edit frame.
*
* @param array Object attributes
*
* @return string HTML output
*/
function tpl_key_frame($attrib)
{
return $this->rc->output->frame($attrib, true);
}
/** /**
* Template object for list of keys. * Template object for list of keys.
* *

@ -60,7 +60,7 @@
</script> </script>
<div id="enigmacontent-box"> <div id="enigmacontent-box">
<roundcube:object name="keyframe" id="keyframe" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="keyframe" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -69,7 +69,7 @@
</div> </div>
</div> </div>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="keyframe" id="keyframe" src="/watermark.html" /> <roundcube:object name="contentframe" id="keyframe" src="env:blankpage" />
</div> </div>
</div> </div>

@ -63,7 +63,7 @@
<div id="enigmacontent-box" class="uibox"> <div id="enigmacontent-box" class="uibox">
<div class="iframebox"> <div class="iframebox">
<roundcube:object name="keyframe" id="keyframe" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="keyframe" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>
</div> </div>

@ -74,11 +74,11 @@ class help extends rcube_plugin
// register UI objects // register UI objects
$rcmail->output->add_handlers(array( $rcmail->output->add_handlers(array(
'contentframe' => array($this, 'content_frame'),
'helpcontent' => array($this, 'help_content'), 'helpcontent' => array($this, 'help_content'),
'tablink' => array($this, 'tablink'), 'tablink' => array($this, 'tablink'),
)); ));
$rcmail->output->set_env('help_links', $this->help_metadata());
$rcmail->output->send(!empty($_GET['_content']) ? 'help.content' : 'help.help'); $rcmail->output->send(!empty($_GET['_content']) ? 'help.content' : 'help.help');
} }
@ -114,17 +114,6 @@ class help extends rcube_plugin
return $rcmail->output->button($attrib); return $rcmail->output->button($attrib);
} }
function content_frame($attrib)
{
$rcmail = rcmail::get_instance();
$content = $this->help_metadata();
$src = $content[$rcmail->action] ?: $content['index'];
$rcmail->output->set_env('help_links', $content);
return $rcmail->output->frame($attrib, true);
}
function help_metadata() function help_metadata()
{ {
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();

@ -41,7 +41,7 @@ function help_init_settings_tabs()
</div> </div>
<div id="mainscreen" class="box help-box"> <div id="mainscreen" class="box help-box">
<roundcube:object name="contentframe" id="helpcontentframe" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="helpcontentframe" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</body> </body>

@ -24,7 +24,7 @@
<span class="header-title"><roundcube:label name="help.help" /></span> <span class="header-title"><roundcube:label name="help.help" /></span>
</div> </div>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="contentframe" id="helpcontentframe" src="/watermark.html" title="arialabelhelpcontent" /> <roundcube:object name="contentframe" id="helpcontentframe" src="env:blankpage" title="arialabelhelpcontent" />
</div> </div>
</div> </div>

@ -19,7 +19,7 @@
<div id="pluginbody" class="uibox offset"> <div id="pluginbody" class="uibox offset">
<div class="iframebox help_<roundcube:var name='env:action' />"> <div class="iframebox help_<roundcube:var name='env:action' />">
<roundcube:object name="contentframe" id="helpcontentframe" style="width:100%; height:100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="helpcontentframe" style="width:100%; height:100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -1,8 +1,11 @@
* version 9.1 [2018-05-19]
-----------------------------------------------------------
- Added GSSAPI support (#5779) - Added GSSAPI support (#5779)
- Added option managesieve_default_headers - Added option managesieve_default_headers
- Added option managesieve_forward to enable settings dialog for simple forwarding (#6021) - Added option managesieve_forward to enable settings dialog for simple forwarding (#6021)
- Support filter action with custom IMAP flags (#6011) - Support filter action with custom IMAP flags (#6011)
- Support 'mime' extension tests - RFC5703 (#5832) - Support 'mime' extension tests - RFC5703 (#5832)
- Support enabling the plugin for specified hosts only (#6292)
- Support Elastic skin - Support Elastic skin
- Fix bug where text: syntax was forced for strings longer than 1024 characters (#6143) - Fix bug where text: syntax was forced for strings longer than 1024 characters (#6143)
- Fix missing Save button in Edit Filter Set page of Classic skin (#6154) - Fix missing Save button in Edit Filter Set page of Classic skin (#6154)

@ -119,5 +119,11 @@ $config['managesieve_raw_editor'] = true;
// Disabled actions // Disabled actions
// Prevent user from performing specific actions: // Prevent user from performing specific actions:
// list_sets, enable_disable_set, delete_set, new_set, download_set, new_rule, delete_rule // list_sets, enable_disable_set, delete_set, new_set, download_set, new_rule, delete_rule
// Note: disabling list_sets removes the Filter sets widget from the UI and means the set defined in managesieve_script_name will always be used (and activated) // Note: disabling list_sets removes the Filter sets widget from the UI and means
// the set defined in managesieve_script_name will always be used (and activated)
$config['managesieve_disabled_actions'] = array(); $config['managesieve_disabled_actions'] = array();
// List of hosts that support managesieve.
// Activate managesieve for selected hosts only. If this is not set all hosts are allowed.
// Example: $config['managesieve_allowed_hosts'] = array('host1.mydomain.com','host2.mydomain.com');
$config['managesieve_allowed_hosts'] = null;

@ -60,7 +60,7 @@ class rcube_sieve_engine
); );
private $disabled_actions; private $disabled_actions;
const VERSION = '9.0'; const VERSION = '9.1';
const PROGNAME = 'Roundcube (Managesieve)'; const PROGNAME = 'Roundcube (Managesieve)';
const PORT = 4190; const PORT = 4190;
@ -84,7 +84,6 @@ class rcube_sieve_engine
$this->rc->output->add_handlers(array( $this->rc->output->add_handlers(array(
'filterslist' => array($this, 'filters_list'), 'filterslist' => array($this, 'filters_list'),
'filtersetslist' => array($this, 'filtersets_list'), 'filtersetslist' => array($this, 'filtersets_list'),
'filterframe' => array($this, 'filter_frame'),
'filterform' => array($this, 'filter_form'), 'filterform' => array($this, 'filter_form'),
'filtersetform' => array($this, 'filterset_form'), 'filtersetform' => array($this, 'filterset_form'),
'filterseteditraw' => array($this, 'filterset_editraw'), 'filterseteditraw' => array($this, 'filterset_editraw'),
@ -1320,11 +1319,6 @@ class rcube_sieve_engine
return $out; return $out;
} }
function filter_frame($attrib)
{
return $this->rc->output->frame($attrib, true);
}
function filterset_editraw($attrib) function filterset_editraw($attrib)
{ {
$script_name = isset($_GET['_set']) ? $_GET['_set'] : $_POST['_set']; $script_name = isset($_GET['_set']) ? $_GET['_set'] : $_POST['_set'];

@ -38,6 +38,13 @@ class managesieve extends rcube_plugin
{ {
$this->rc = rcube::get_instance(); $this->rc = rcube::get_instance();
$this->load_config();
$allowed_hosts = $this->rc->config->get('managesieve_allowed_hosts');
if (!empty($allowed_hosts) && !in_array($_SESSION['storage_host'], (array) $allowed_hosts)) {
return;
}
// register actions // register actions
$this->register_action('plugin.managesieve', array($this, 'managesieve_actions')); $this->register_action('plugin.managesieve', array($this, 'managesieve_actions'));
$this->register_action('plugin.managesieve-action', array($this, 'managesieve_actions')); $this->register_action('plugin.managesieve-action', array($this, 'managesieve_actions'));
@ -100,10 +107,8 @@ class managesieve extends rcube_plugin
*/ */
function settings_actions($args) function settings_actions($args)
{ {
$this->load_config();
$vacation_mode = (int) $this->rc->config->get('managesieve_vacation'); $vacation_mode = (int) $this->rc->config->get('managesieve_vacation');
$forward_mode = (int) $this->rc->config->get('managesieve_forward'); $forward_mode = (int) $this->rc->config->get('managesieve_forward');
// register Filters action // register Filters action
if ($vacation_mode != 2 && $forward_mode != 2) { if ($vacation_mode != 2 && $forward_mode != 2) {
@ -264,14 +269,12 @@ class managesieve extends rcube_plugin
public function get_engine($type = null) public function get_engine($type = null)
{ {
if (!$this->engine) { if (!$this->engine) {
$this->load_config();
// Add include path for internal classes // Add include path for internal classes
$include_path = $this->home . '/lib' . PATH_SEPARATOR; $include_path = $this->home . '/lib' . PATH_SEPARATOR;
$include_path .= ini_get('include_path'); $include_path .= ini_get('include_path');
set_include_path($include_path); set_include_path($include_path);
$class_name = 'rcube_sieve_' . ($type ?: 'engine'); $class_name = 'rcube_sieve_' . ($type ?: 'engine');
$this->engine = new $class_name($this); $this->engine = new $class_name($this);
} }

@ -61,7 +61,7 @@
</script> </script>
<div id="filter-box"> <div id="filter-box">
<roundcube:object name="filterframe" id="filter-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="filter-frame" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -53,7 +53,7 @@
</div> </div>
<h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2> <h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="filterframe" id="filter-box" src="/watermark.html" title="managesieve.arialabelfilterform" <roundcube:object name="contentframe" id="filter-box" src="env:blankpage" title="managesieve.arialabelfilterform"
aria-labelledby="aria-label-filterform" /> aria-labelledby="aria-label-filterform" />
</div> </div>
</div> </div>

@ -42,7 +42,7 @@
<div id="filter-box" class="uibox contentbox"> <div id="filter-box" class="uibox contentbox">
<div class="iframebox" role="complementary" aria-labelledby="aria-label-filterform"> <div class="iframebox" role="complementary" aria-labelledby="aria-label-filterform">
<h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2> <h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2>
<roundcube:object name="filterframe" id="filter-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="managesieve.arialabelfilterform" /> <roundcube:object name="contentframe" id="filter-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="managesieve.arialabelfilterform" />
</div> </div>
</div> </div>

@ -58,6 +58,18 @@ class rcmail_output_html extends rcmail_output
'messageprint' => 'printmessage', 'messageprint' => 'printmessage',
); );
// deprecated names of template objects used before 1.4
protected $deprecated_template_objects = array(
'addressframe' => 'contentframe',
'messagecontentframe' => 'contentframe',
'prefsframe' => 'contentframe',
'folderframe' => 'contentframe',
'identityframe' => 'contentframe',
'responseframe' => 'contentframe',
'keyframe' => 'contentframe',
'filterframe' => 'contentframe',
);
/** /**
* Constructor * Constructor
*/ */
@ -139,6 +151,11 @@ EOF;
'charsetselector' => array($this, 'charset_selector'), 'charsetselector' => array($this, 'charset_selector'),
'aboutcontent' => array($this, 'about_content'), 'aboutcontent' => array($this, 'about_content'),
)); ));
// set blankpage (watermark) url
$blankpage = $this->config->get('blankpage_url', '/watermark.html');
$blankpage = $this->abs_url($blankpage);
$this->set_env('blankpage', $blankpage);
} }
/** /**
@ -1036,6 +1053,45 @@ EOF;
return eval("return ($expression);"); return eval("return ($expression);");
} }
/**
* Parse variable strings
*
* @param string $type Variable type (env, config etc)
* @param string $name Variable name
*
* @return mixed Variable value
*/
protected function parse_variable($type, $name)
{
$value = '';
switch ($type) {
case 'env':
$value = $this->env[$name];
break;
case 'config':
$value = $this->config->get($name);
if (is_array($value) && $value[$_SESSION['storage_host']]) {
$value = $value[$_SESSION['storage_host']];
}
break;
case 'request':
$value = rcube_utils::get_input_value($name, rcube_utils::INPUT_GPC);
break;
case 'session':
$value = $_SESSION[$name];
break;
case 'cookie':
$value = htmlspecialchars($_COOKIE[$name], ENT_COMPAT | ENT_HTML401, RCUBE_CHARSET);
break;
case 'browser':
$value = $this->browser->{$name};
break;
}
return $value;
}
/** /**
* Search for special tags in input and replace them * Search for special tags in input and replace them
* with the appropriate content * with the appropriate content
@ -1183,6 +1239,11 @@ EOF;
$object = strtolower($attrib['name']); $object = strtolower($attrib['name']);
$content = ''; $content = '';
// correct deprecated object names
if ($this->deprecated_template_objects[$object]) {
$object = $this->deprecated_template_objects[$object];
}
// we are calling a class/method // we are calling a class/method
if (($handler = $this->object_handlers[$object]) && is_array($handler)) { if (($handler = $this->object_handlers[$object]) && is_array($handler)) {
if (is_callable($handler)) { if (is_callable($handler)) {
@ -1254,6 +1315,18 @@ EOF;
$title .= $this->get_pagetitle(); $title .= $this->get_pagetitle();
$content = html::quote($title); $content = html::quote($title);
} }
else if ($object == 'contentframe') {
if (empty($attrib['id'])) {
$attrib['id'] = 'rcm' . $this->env['task'] . 'frame';
}
// parse variables
if (preg_match('/^(config|env):([a-z0-9_]+)$/i', $attrib['src'], $matches)) {
$attrib['src'] = $this->parse_variable($matches[1], $matches[2]);
}
$content = $this->frame($attrib, true);
}
// exec plugin hooks for this template object // exec plugin hooks for this template object
$hook = $this->app->plugins->exec_hook("template_object_$object", $attrib + array('content' => $content)); $hook = $this->app->plugins->exec_hook("template_object_$object", $attrib + array('content' => $content));
@ -1284,32 +1357,7 @@ EOF;
// return variable // return variable
case 'var': case 'var':
$var = explode(':', $attrib['name']); $var = explode(':', $attrib['name']);
$name = $var[1]; $value = $this->parse_variable($var[0], $var[1]);
$value = '';
switch ($var[0]) {
case 'env':
$value = $this->env[$name];
break;
case 'config':
$value = $this->config->get($name);
if (is_array($value) && $value[$_SESSION['storage_host']]) {
$value = $value[$_SESSION['storage_host']];
}
break;
case 'request':
$value = rcube_utils::get_input_value($name, rcube_utils::INPUT_GPC);
break;
case 'session':
$value = $_SESSION[$name];
break;
case 'cookie':
$value = htmlspecialchars($_COOKIE[$name], ENT_COMPAT | ENT_HTML401, RCUBE_CHARSET);
break;
case 'browser':
$value = $this->browser->{$name};
break;
}
if (is_array($value)) { if (is_array($value)) {
$value = implode(', ', $value); $value = implode(', ', $value);
@ -1825,7 +1873,6 @@ EOF;
// register as 'contentframe' object // register as 'contentframe' object
if ($is_contentframe || $attrib['contentframe']) { if ($is_contentframe || $attrib['contentframe']) {
$this->set_env('contentframe', $attrib['contentframe'] ? $attrib['contentframe'] : $attrib['name']); $this->set_env('contentframe', $attrib['contentframe'] ? $attrib['contentframe'] : $attrib['name']);
$this->set_env('blankpage', $this->asset_url($attrib['src']));
} }
return html::iframe($attrib); return html::iframe($attrib);

@ -854,17 +854,16 @@ class rcube_message
) { ) {
$this->add_part($mail_part, 'inline'); $this->add_part($mail_part, 'inline');
} }
// regular attachment with valid content type
// (content-type name regexp according to RFC4288.4.2) // Any non-inline attachment
else if (preg_match('/^[a-z0-9!#$&.+^_-]+\/[a-z0-9!#$&.+^_-]+$/i', $part_mimetype)) { if (!preg_match('/^inline/i', $mail_part->disposition)) {
$this->add_part($mail_part, 'attachment'); // Content-Type name regexp according to RFC4288.4.2
} if (!preg_match('/^[a-z0-9!#$&.+^_-]+\/[a-z0-9!#$&.+^_-]+$/i', $part_mimetype)) {
// attachment with invalid content type // replace malformed content type with application/octet-stream (#1487767)
// replace malformed content type with application/octet-stream (#1487767) $mail_part->ctype_primary = 'application';
else if ($mail_part->filename) { $mail_part->ctype_secondary = 'octet-stream';
$mail_part->ctype_primary = 'application'; $mail_part->mimetype = 'application/octet-stream';
$mail_part->ctype_secondary = 'octet-stream'; }
$mail_part->mimetype = 'application/octet-stream';
$this->add_part($mail_part, 'attachment'); $this->add_part($mail_part, 'attachment');
} }

@ -117,7 +117,6 @@ $OUTPUT->add_handlers(array(
'savedsearchlist' => 'rcmail_savedsearch_list', 'savedsearchlist' => 'rcmail_savedsearch_list',
'addresslist' => 'rcmail_contacts_list', 'addresslist' => 'rcmail_contacts_list',
'addresslisttitle' => 'rcmail_contacts_list_title', 'addresslisttitle' => 'rcmail_contacts_list_title',
'addressframe' => 'rcmail_contact_frame',
'recordscountdisplay' => 'rcmail_rowcount_display', 'recordscountdisplay' => 'rcmail_rowcount_display',
'searchform' => array($OUTPUT, 'search_form') 'searchform' => array($OUTPUT, 'search_form')
)); ));
@ -455,18 +454,6 @@ function rcmail_contacts_list_title($attrib)
} }
// similar function as /steps/settings/identities.inc::rcmail_identity_frame()
function rcmail_contact_frame($attrib)
{
global $OUTPUT;
if (!$attrib['id'])
$attrib['id'] = 'rcmcontactframe';
return $OUTPUT->frame($attrib, true);
}
function rcmail_rowcount_display($attrib) function rcmail_rowcount_display($attrib)
{ {
global $RCMAIL; global $RCMAIL;

@ -125,7 +125,6 @@ $OUTPUT->add_handlers(array(
'messagecountdisplay' => 'rcmail_messagecount_display', 'messagecountdisplay' => 'rcmail_messagecount_display',
'listmenulink' => 'rcmail_options_menu_link', 'listmenulink' => 'rcmail_options_menu_link',
'mailboxname' => 'rcmail_mailbox_name_display', 'mailboxname' => 'rcmail_mailbox_name_display',
'messagecontentframe' => 'rcmail_messagecontent_frame',
'messageimportform' => 'rcmail_message_import_form', 'messageimportform' => 'rcmail_message_import_form',
'searchfilter' => 'rcmail_search_filter', 'searchfilter' => 'rcmail_search_filter',
'searchinterval' => 'rcmail_search_interval', 'searchinterval' => 'rcmail_search_interval',
@ -683,20 +682,6 @@ function rcmail_options_menu_link($attrib = array())
), $inner); ), $inner);
} }
/**
* Return an HTML iframe for loading mail content
*/
function rcmail_messagecontent_frame($attrib)
{
global $OUTPUT;
if (empty($attrib['id'])) {
$attrib['id'] = 'rcmailcontentwindow';
}
return $OUTPUT->frame($attrib, true);
}
function rcmail_messagecount_display($attrib) function rcmail_messagecount_display($attrib)
{ {
global $RCMAIL; global $RCMAIL;

@ -189,7 +189,6 @@ $OUTPUT->add_label('deletefolderconfirm', 'purgefolderconfirm', 'movefolderconfi
// register UI objects // register UI objects
$OUTPUT->add_handlers(array( $OUTPUT->add_handlers(array(
'foldersubscription' => 'rcmail_folder_subscriptions', 'foldersubscription' => 'rcmail_folder_subscriptions',
'folderframe' => 'rcmail_folder_frame',
'folderfilter' => 'rcmail_folder_filter', 'folderfilter' => 'rcmail_folder_filter',
'quotadisplay' => array($RCMAIL, 'quota_display'), 'quotadisplay' => array($RCMAIL, 'quota_display'),
'searchform' => array($OUTPUT, 'search_form'), 'searchform' => array($OUTPUT, 'search_form'),
@ -419,17 +418,6 @@ function rcmail_folder_tree_element($folders, &$key, &$js_folders)
return html::tag('li', $attribs, $content); return html::tag('li', $attribs, $content);
} }
function rcmail_folder_frame($attrib)
{
global $OUTPUT;
if (!$attrib['id']) {
$attrib['id'] = 'rcmfolderframe';
}
return $OUTPUT->frame($attrib, true);
}
function rcmail_folder_filter($attrib) function rcmail_folder_filter($attrib)
{ {
global $RCMAIL; global $RCMAIL;

@ -26,7 +26,6 @@ if (!$OUTPUT->ajax_call) {
// register UI objects // register UI objects
$OUTPUT->add_handlers(array( $OUTPUT->add_handlers(array(
'settingstabs' => 'rcmail_settings_tabs', 'settingstabs' => 'rcmail_settings_tabs',
'prefsframe' => 'rcmail_preferences_frame',
'sectionslist' => 'rcmail_sections_list', 'sectionslist' => 'rcmail_sections_list',
'identitieslist' => 'rcmail_identities_list', 'identitieslist' => 'rcmail_identities_list',
)); ));
@ -50,19 +49,6 @@ $RCMAIL->register_action_map(array(
)); ));
// similar function as /steps/settings/identities.inc::rcmail_identity_frame()
function rcmail_preferences_frame($attrib)
{
global $OUTPUT;
if (!$attrib['id']) {
$attrib['id'] = 'rcmprefsframe';
}
return $OUTPUT->frame($attrib, true);
}
function rcmail_sections_list($attrib) function rcmail_sections_list($attrib)
{ {
global $RCMAIL; global $RCMAIL;

@ -46,21 +46,7 @@ define('IDENTITIES_LEVEL', intval($RCMAIL->config->get('identities_level', 0)));
$OUTPUT->set_pagetitle($RCMAIL->gettext('identities')); $OUTPUT->set_pagetitle($RCMAIL->gettext('identities'));
$OUTPUT->include_script('list.js'); $OUTPUT->include_script('list.js');
$OUTPUT->add_handler('identityframe', 'rcmail_identity_frame');
$OUTPUT->set_env('identities_level', IDENTITIES_LEVEL); $OUTPUT->set_env('identities_level', IDENTITIES_LEVEL);
$OUTPUT->add_label('deleteidentityconfirm'); $OUTPUT->add_label('deleteidentityconfirm');
$OUTPUT->send('identities'); $OUTPUT->send('identities');
// similar function as /steps/addressbook/func.inc::rcmail_contact_frame()
function rcmail_identity_frame($attrib)
{
global $OUTPUT;
if (!$attrib['id']) {
$attrib['id'] = 'rcmIdentityFrame';
}
return $OUTPUT->frame($attrib, true);
}

@ -78,7 +78,6 @@ $OUTPUT->set_pagetitle($RCMAIL->gettext('responses'));
$OUTPUT->include_script('list.js'); $OUTPUT->include_script('list.js');
$OUTPUT->add_handlers(array( $OUTPUT->add_handlers(array(
'responseframe' => 'rcmail_response_frame',
'responseslist' => 'rcmail_responses_list', 'responseslist' => 'rcmail_responses_list',
)); ));
$OUTPUT->add_label('deleteresponseconfirm'); $OUTPUT->add_label('deleteresponseconfirm');
@ -115,17 +114,3 @@ function rcmail_responses_list($attrib)
return $out; return $out;
} }
// similar function as /steps/addressbook/func.inc::rcmail_contact_frame()
function rcmail_response_frame($attrib)
{
global $OUTPUT;
if (!$attrib['id']) {
$attrib['id'] = 'rcmResponseFrame';
}
$OUTPUT->set_env('contentframe', $attrib['id']);
return $OUTPUT->frame($attrib, true);
}

@ -115,7 +115,7 @@
</script> </script>
<div id="contacts-box"> <div id="contacts-box">
<roundcube:object name="addressframe" id="contact-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="contact-frame" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -54,7 +54,7 @@
</script> </script>
<div id="folder-box"> <div id="folder-box">
<roundcube:object name="folderframe" id="folder-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="folder-frame" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -35,7 +35,7 @@
</script> </script>
<div id="identity-box"> <div id="identity-box">
<roundcube:object name="identityframe" id="identity-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="identity-frame" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -84,7 +84,7 @@
</div> </div>
<div id="mailpreviewframe"> <div id="mailpreviewframe">
<roundcube:object name="messagecontentframe" id="messagecontframe" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="messagecontframe" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -35,7 +35,7 @@
</script> </script>
<div id="response-box"> <div id="response-box">
<roundcube:object name="responseframe" id="response-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="response-frame" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -30,7 +30,7 @@
</script> </script>
<div id="prefs-box"> <div id="prefs-box">
<roundcube:object name="prefsframe" id="prefs-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="prefs-frame" width="100%" height="100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -92,7 +92,7 @@
</div> </div>
<h2 id="aria-label-contact-frame" class="voice"><roundcube:label name="contactproperties" /></h2> <h2 id="aria-label-contact-frame" class="voice"><roundcube:label name="contactproperties" /></h2>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="addressframe" id="contact-frame" src="/watermark.html" title="contactproperties" <roundcube:object name="contentframe" id="contact-frame" src="env:blankpage" title="contactproperties"
aria-labelledby="aria-label-contact-frame" /> aria-labelledby="aria-label-contact-frame" />
</div> </div>
</div> </div>

@ -57,7 +57,7 @@
</div> </div>
</div> </div>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="folderframe" id="preferences-frame" src="/watermark.html" /> <roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" />
</div> </div>
</div> </div>

@ -38,7 +38,7 @@
</div> </div>
</div> </div>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="identityframe" id="preferences-frame" src="/watermark.html" title="arialabelidentityeditfrom" /> <roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelidentityeditfrom" />
</div> </div>
</div> </div>

@ -105,10 +105,10 @@
</div> </div>
<h2 id="aria-label-mailpreviewframe" class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h2> <h2 id="aria-label-mailpreviewframe" class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h2>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="messagecontentframe" <roundcube:object name="contentframe"
id="messagecontframe" id="messagecontframe"
aria-labelledby="aria-label-mailpreviewframe" aria-labelledby="aria-label-mailpreviewframe"
src="/watermark.html" src="env:blankpage"
title="arialabelmailpreviewframe" title="arialabelmailpreviewframe"
/> />
</div> </div>

@ -36,7 +36,7 @@
</div> </div>
</div> </div>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="responseframe" id="preferences-frame" src="/watermark.html" title="arialabelresonseeditfrom" /> <roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelresonseeditfrom" />
</div> </div>
</div> </div>

@ -22,7 +22,7 @@
<span class="header-title"></span> <span class="header-title"></span>
</div> </div>
<div class="iframe-wrapper"> <div class="iframe-wrapper">
<roundcube:object name="prefsframe" id="preferences-frame" src="/watermark.html" title="arialabelpreferencesform" /> <roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelpreferencesform" />
</div> </div>
</div> </div>

@ -122,7 +122,7 @@
<div id="contacts-box" class="uibox"> <div id="contacts-box" class="uibox">
<div class="iframebox"> <div class="iframebox">
<roundcube:object name="addressframe" id="contact-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="contactproperties" /> <roundcube:object name="contentframe" id="contact-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="contactproperties" />
</div> </div>
</div> </div>

@ -55,7 +55,7 @@
<div id="folder-details" class="uibox contentbox"> <div id="folder-details" class="uibox contentbox">
<div class="iframebox"> <div class="iframebox">
<roundcube:object name="folderframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" /> <roundcube:object name="contentframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" />
</div> </div>
</div> </div>

@ -27,7 +27,7 @@
<div id="identity-details" class="uibox contentbox"> <div id="identity-details" class="uibox contentbox">
<div class="iframebox"> <div class="iframebox">
<roundcube:object name="identityframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="arialabelidentityeditfrom" /> <roundcube:object name="contentframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="arialabelidentityeditfrom" />
</div> </div>
</div> </div>

@ -147,7 +147,7 @@
<div id="mailpreviewframe" class="iframebox" role="complementary" aria-labelledby="aria-label-mailpreviewframe"> <div id="mailpreviewframe" class="iframebox" role="complementary" aria-labelledby="aria-label-mailpreviewframe">
<h2 id="aria-label-mailpreviewframe" class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h2> <h2 id="aria-label-mailpreviewframe" class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h2>
<roundcube:object name="messagecontentframe" id="messagecontframe" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="arialabelmailpreviewframe" /> <roundcube:object name="contentframe" id="messagecontframe" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="arialabelmailpreviewframe" />
</div> </div>
</div><!-- end mailview-bottom --> </div><!-- end mailview-bottom -->

@ -28,7 +28,7 @@
<div id="response-details" class="uibox contentbox"> <div id="response-details" class="uibox contentbox">
<div class="iframebox"> <div class="iframebox">
<roundcube:object name="responseframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="arialabelresonseeditfrom" /> <roundcube:object name="contentframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="arialabelresonseeditfrom" />
</div> </div>
</div> </div>

@ -25,7 +25,7 @@
<div id="preferences-box" class="uibox contentbox" role="main"> <div id="preferences-box" class="uibox contentbox" role="main">
<div class="iframebox"> <div class="iframebox">
<roundcube:object name="prefsframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="/watermark.html" title="arialabelpreferencesform" /> <roundcube:object name="contentframe" id="preferences-frame" style="width:100%; height:100%" frameborder="0" src="env:blankpage" title="arialabelpreferencesform" />
</div> </div>
</div> </div>

Loading…
Cancel
Save