Hi Pierre
Please update your local copy to the latest revision (svn update) and then create the diff again. The current one removes newly added features :-(
~Thomas
Pierre Lena wrote:
Here is the diff file.
Regards.
Hello
I installed Pierre's diff on the last SVN. I join the updated diff.
I applied the original patch to R400, added the new files, update to R424 and fix some conflicts.
I have NOT include SQL to diff, the table structure to handle mailrule is:
CREATE TABLE mailrules
(
mailrule_id
int(11) NOT NULL auto_increment,
from
varchar(128) default NULL,
to
varchar(128) default NULL,
subject
varchar(128) default NULL,
user_id
int(10) unsigned NOT NULL default '0',
del
tinyint(1) NOT NULL default '0',
location
varchar(128) default NULL,
PRIMARY KEY (mailrule_id
)
) TYPE=MyISAM;
Note : The SQL script is NOT compatible with SQLite :-(
Black Myst
Thomas Bruederli a écrit :
Hi Pierre
Please update your local copy to the latest revision (svn update) and then create the diff again. The current one removes newly added features :-(
~Thomas
Pierre Lena wrote:
Here is the diff file.
Regards.
I've put this on a fresh SVN and haven't been able to login. It give me the login screen ok but when I try to logon it give me a blank screen. Anyone else having this problem?
-Ryan
Network Administrator Goshen College (574) 535-7004
Black.myst wrote:
Hello
I installed Pierre's diff on the last SVN. I join the updated diff.
I applied the original patch to R400, added the new files, update to R424 and fix some conflicts.
I have NOT include SQL to diff, the table structure to handle mailrule is: CREATE TABLE
mailrules
(mailrule_id
int(11) NOT NULL auto_increment,from
varchar(128) default NULL,to
varchar(128) default NULL,subject
varchar(128) default NULL,user_id
int(10) unsigned NOT NULL default '0',del
tinyint(1) NOT NULL default '0',location
varchar(128) default NULL, PRIMARY KEY (mailrule_id
) ) TYPE=MyISAM;Note : The SQL script is NOT compatible with SQLite :-(
Black Myst
Thomas Bruederli a écrit :
Hi Pierre
Please update your local copy to the latest revision (svn update) and then create the diff again. The current one removes newly added features :-(
~Thomas
Pierre Lena wrote:
Here is the diff file.
Regards.
Index: program/include/main.inc
--- program/include/main.inc (revision 424) +++ program/include/main.inc (working copy) @@ -1341,6 +1341,12 @@ 'itentitieslist' => 'rcmail_identities_list', 'identityframe' => 'rcmail_identity_frame', 'identityform' => 'rcube_identity_form',
// ADDED TO HANDLE MAILRULES
'mailruleslist' => 'rcmail_mailrule_list',
'mailrulesframe' => 'rcmail_mailrule_frame',
'mailrulesform' => 'rcube_mailrule_form',
// 'foldersubscription' => 'rcube_subscription_form', 'createfolder' => 'rcube_create_folder_form', 'renamefolder' => 'rcube_rename_folder_form',
Index: program/localization/fr/labels.inc
--- program/localization/fr/labels.inc (revision 424) +++ program/localization/fr/labels.inc (working copy) @@ -146,10 +146,11 @@ $labels['ldappublicsearchfield'] = 'Recherche sur'; $labels['ldappublicsearchform'] = 'Chercher un contact'; $labels['ldappublicsearch'] = 'Recherche'; -$labels['settingsfor'] = 'Paramètres pour'; -$labels['preferences'] = 'Préférences'; $labels['userpreferences'] = 'Préférences utilisateur'; $labels['editpreferences'] = 'Editer les préférences utilisateur'; +$labels['mailrules'] = 'Règles'; +$labels['managemailrules'] = 'Gérer les règles de messagerie'; +$labels['newmailrule'] = 'Nouvelle règle'; $labels['identities'] = 'Identités'; $labels['manageidentities'] = 'Gérer les identités pour ce compte'; $labels['newidentity'] = 'Nouvelle identité'; @@ -180,4 +181,6 @@ $labels['sortby'] = 'Trier par'; $labels['sortasc'] = 'Tri ascendant'; $labels['sortdesc'] = 'Tri descendant'; +$labels['location'] = 'Destination';
?> Index: program/js/app.js =================================================================== --- program/js/app.js (revision 424) +++ program/js/app.js (working copy) @@ -247,9 +247,15 @@
case 'settings':
this.enable_command('preferences', 'identities', 'save', 'folders', true);
this.enable_command('preferences', 'identities', 'save', 'folders', 'mailrules', true);
if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='add-identity')
if(this.env.action=='mailrules' || this.env.action=='edit-mailrule' || this.env.action=='add-mailrule')
this.enable_command('edit', 'add', 'delete', true);
if (this.env.action=='edit-mailrule' || this.env.action=='add-mailrule')
this.enable_command('save', true);
if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='') this.enable_command('edit', 'add', 'delete', true); if (this.env.action=='edit-identity' || this.env.action=='add-identity')
@@ -269,6 +275,18 @@ this.identity_list.highlight_row(this.env.iid); }
//ADDED TO HANDLE MAILRULES
if (this.gui_objects.mailruleslist)
{
this.mailrule_list = new rcube_list_widget(this.gui_objects.mailruleslist, {multiselect:false, draggable:false, keyboard:false});
this.mailrule_list.addEventListener('select', function(o){ pmailrule_select(o); });
this.mailrule_list.init();
this.mailrule_list.focus();
if (this.env.iid)
this.mailrule_list.highlight_row(this.env.iid);
}
// break;
case 'login':
@@ -556,22 +574,18 @@ case 'add': if (this.task=='addressbook') this.load_contact(0, 'add');
/* LDAP stuff, has to be re-written with new address book
if (!window.frames[this.env.contentframe].rcmail)
this.load_contact(0, 'add');
else
{
if (window.frames[this.env.contentframe].rcmail.selection.length)
this.add_ldap_contacts();
else
this.load_contact(0, 'add');
}
*/ else if (this.task=='settings') {
this.identity_list.clear_selection();
this.load_identity(0, 'add-identity');
if(this.env.action=='mailrules')
{
this.mailrule_list.clear_selection();
this.load_mailrule(0, 'add-mailrule');
}
else
{
this.identity_list.clear_selection();
this.load_identity(0, 'add-identity');
} } break;
@@ -628,7 +642,12 @@ this.delete_contacts(); // user settings task else if (this.task=='settings')
this.delete_identity();
{
if(this.env.action=='edit-mailrule')
this.delete_mailrule();
else
this.delete_identity();
} break;
@@ -903,12 +922,19 @@ this.goto_url(''); break;
case 'mailrules':
this.goto_url('mailrules');
break;
case 'identities': this.goto_url('identities'); break; case 'delete-identity': this.delete_identity();
case 'delete-mailrule':
this.delete_mailrule(); case 'folders': this.goto_url('folders');
@@ -2368,6 +2394,13 @@ this.load_identity(id, 'edit-identity'); };
- this.mailrule_select = function(list)
- {
- var id;
- if (id = list.get_single_selection())
this.load_mailrule(id, 'edit-mailrule');
- }
- // load contact record this.load_identity = function(id, action) {
@@ -2388,10 +2421,32 @@ this.set_busy(true); target.location.href = this.env.comm_path+'&_action='+action+'&_iid='+id+add_url; }
return true; };
// load rule record
this.load_mailrule = function(id, action)
{
if (action=='edit-mailrule' && (!id || id==this.env.iid))
return false;
var add_url = '';
var target = window;
if (this.env.contentframe && window.frames && window.frames[this.envcontentframe])
{
add_url = '&_framed=1';
target = window.frames[this.env.contentframe];
document.getElementById(this.env.contentframe).style.visibility = 'inherit';
}
if (action && (id || action=='add-mailrule'))
{
this.set_busy(true);
target.location.href = this.env.comm_path+'&_action='+action+'&_iid='+id+add_url;
}
return true;
};
this.delete_identity = function(id) {
@@ -2403,21 +2458,26 @@ if (!id) id = this.env.iid ? this.env.iid : selection[0];
-/*
- // 'remove' row from list (just hide it)
- if (this.identity_rows && this.identity_rows[id].obj)
{
this.clear_selection();
this.identity_rows[id].obj.style.display = 'none';
}
-*/
- // if (this.env.framed && id) this.goto_url('delete-identity', '_iid='+id, true); return true; };
this.delete_mailrule = function(id)
{
// exit if no mailbox specified or if selection is empty
var selection = this.mailrule_list.get_selection();
if (!(selection.length || this.env.iid))
return;
if (!id)
id = this.env.iid ? this.env.iid : selection[0];
// if (this.env.framed && id)
this.goto_url('delete-mailrule', '_iid='+id, true);
return true;
};
// tell server to create and subscribe a new mailbox this.create_folder = function(name) {
Index: program/steps/settings/save_identity.inc
--- program/steps/settings/save_identity.inc (revision 424) +++ program/steps/settings/save_identity.inc (working copy) @@ -145,6 +145,6 @@
// go to next step -rcmail_overwrite_action($_POST['_framed'] ? 'edit-identitiy' : 'identities'); +rcmail_overwrite_action($_POST['_framed'] ? 'edit-identity' : 'identities');
?> \ No newline at end of file Index: program/steps/settings/save_mailrule.inc =================================================================== --- program/steps/settings/save_mailrule.inc (revision 0) +++ program/steps/settings/save_mailrule.inc (revision 0) @@ -0,0 +1,139 @@ +<?php
+/*
- +-----------------------------------------------------------------------+
- | program/steps/settings/save_mailrule.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Save an identity record or to add a new one |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli roundcube@gmail.com |
- +-----------------------------------------------------------------------+
- $Id: save_identity.inc 344 2006-09-14 03:49:28Z estadtherr $
+*/
+$a_save_cols = array('from', 'to', 'subject', 'location');
+// check input +if (empty($_POST['_from']) && empty($_POST['_to']) && empty($_POST['_subject']) && empty($_POST['_location']) )
- {
- show_message('formincomplete', 'warning');
- rcmail_overwrite_action('edit-mailrule');
- return;
- }
+// update an existing contact +if ($_POST['_iid'])
- {
- $a_write_sql = array();
- foreach ($a_save_cols as $col)
- {
- $fname = '_'.$col;
- if (!isset($_POST[$fname]))
continue;
- $a_write_sql[] = sprintf("%s=%s",
$DB->quoteIdentifier($col),
$DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols))));
- }
- if (sizeof($a_write_sql))
- {
- $DB->query("UPDATE ".get_table_name('mailrules')."
SET ".join(', ', $a_write_sql)."
WHERE mailrule_id=?
AND user_id=?
AND del<>1",
get_input_value('_iid', RCUBE_INPUT_POST),
$_SESSION['user_id']);
- $updated = $DB->affected_rows();
- }
- if ($updated)
- {
show_message('successfullysaved', 'confirmation');
- // mark all other identities as 'not-default'
- if (!empty($_POST['_standard']))
$DB->query("UPDATE ".get_table_name('mailrule')."
SET ".$DB->quoteIdentifier('standard')."='0'
WHERE user_id=?
AND mailrule_id<>?
AND del<>1",
$_SESSION['user_id'],
get_input_value('_iid', RCUBE_INPUT_POST));
- if ($_POST['_framed'])
{
// update the changed col in list
// ...
}
- }
- else if ($DB->is_error())
- {
- // show error message
- show_message('errorsaving', 'error');
- rcmail_overwrite_action('edit-mailrule');
- }
- }
+// insert a new contact +else
- {
- $a_insert_cols = $a_insert_values = array();
- foreach ($a_save_cols as $col)
- {
- $fname = '_'.$col;
- if (!isset($_POST[$fname]))
continue;
- $a_insert_cols[] = $DB->quoteIdentifier($col);
- $a_insert_values[] = $DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols)));
- }
- if (sizeof($a_insert_cols))
- {
- $DB->query("INSERT INTO ".get_table_name('mailrules')."
(user_id, ".join(', ', $a_insert_cols).")
VALUES (?, ".join(', ', $a_insert_values).")",
$_SESSION['user_id']);
- $insert_id = $DB->insert_id(get_sequence_name('mailrules'));
- }
- if ($insert_id)
- {
- $_GET['_iid'] = $insert_id;
- if ($_POST['_framed'])
{
// add contact row or jump to the page where it should appear
// ....
}
- }
- else
- {
- // show error message
- show_message('errorsaving', 'error');
- rcmail_overwrite_action('edit-mailrule');
- }
- }
+// go to next step +rcmail_overwrite_action($_POST['_framed'] ? 'edit-mailrule' : 'mailrules');
+?> \ No newline at end of file Index: program/steps/settings/func.inc =================================================================== --- program/steps/settings/func.inc (revision 424) +++ program/steps/settings/func.inc (working copy) @@ -230,8 +230,36 @@ return $out; }
+function rcmail_mailrule_list($attrib) +{
global $DB, $CONFIG, $OUTPUT, $JS_OBJECT_NAME;
// get contacts from DB
$sql_result = $DB->query("SELECT * FROM ".get_table_name('mailrules')."
WHERE del<>1
AND user_id=?",
$_SESSION['user_id']);
// add id to message list table if not specified
if (!strlen($attrib['id']))
$attrib['id'] = 'mailruleslist';
// define list of cols to be displayed
$a_show_cols = array('from', 'to', 'subject','location');
// create XHTML table
$out = rcube_table_output($attrib, $sql_result, $a_show_cols, 'mailrule_id');
// set client env
$javascript = sprintf("%s.gui_object('mailruleslist', '%s');\n", $JS_OBJECT_NAME, $attrib['id']);
$OUTPUT->add_script($javascript);
return $out;
}
// similar function as in /steps/addressbook/edit.inc function get_form_tags($attrib, $action, $add_hidden=array()) { Index: program/steps/settings/delete_mailrule.inc =================================================================== --- program/steps/settings/delete_mailrule.inc (revision 0) +++ program/steps/settings/delete_mailrule.inc (revision 0) @@ -0,0 +1,53 @@ +<?php
+/*
- +-----------------------------------------------------------------------+
- | program/steps/settings/delete_mailrule.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Delete the submitted mailrules (IIDs) from the database |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli roundcube@gmail.com |
- +-----------------------------------------------------------------------+
- $Id: delete_mailrule.inc
+*/
+$REMOTE_REQUEST = $_GET['_remote'] ? TRUE : FALSE;
+if ($_GET['_iid'])
- {
- $DB->query("UPDATE ".get_table_name('mailrules')."
SET del=1
WHERE user_id=?
AND mailrule_id IN (".$_GET['_iid'].")",
$_SESSION['user_id']);
- $count = $DB->affected_rows();
- if ($count)
- {
- $commands = show_message('deletedsuccessfully', 'confirmation');
- }
- // send response
- if ($REMOTE_REQUEST)
- rcube_remote_response($commands);
- }
+if ($REMOTE_REQUEST)
- exit;
+// go to mailrules page +$_action = 'mailrules';
+// overwrite action variable
+$OUTPUT->add_script(sprintf("\n%s.set_env('action', '%s');", $JS_OBJECT_NAME, $_action)); +?> \ No newline at end of file Index: program/steps/settings/mailrules.inc =================================================================== --- program/steps/settings/mailrules.inc (revision 0) +++ program/steps/settings/mailrules.inc (revision 0) @@ -0,0 +1,46 @@ +<?php
+/*
- +-----------------------------------------------------------------------+
- | program/steps/settings/manage_mailrules.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Provide functionality to create/delete/rename mail rules |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli roundcube@gmail.com |
- +-----------------------------------------------------------------------+
- $Id: manage_mailrules.inc N/A 2006-12-11 mangoose $
+*/
+if ($USER_DATA = $DB->fetch_assoc($sql_result))
- $PAGE_TITLE = sprintf('%s (%s@%s)', rcube_label('mailrules'), $USER_DATA['username'], $USER_DATA['mail_host']);
+$OUTPUT->include_script('list.js');
+function rcmail_mailrule_frame($attrib)
- {
- global $OUTPUT, $JS_OBJECT_NAME;
- if (!$attrib['id'])
- $attrib['id'] = 'rcmMailRuleFrame';
- $attrib['name'] = $attrib['id'];
- $OUTPUT->add_script(sprintf("%s.set_env('contentframe', '%s');", $JS_OBJECT_NAME, $attrib['name']));
- $attrib_str = create_attrib_string($attrib, array('name', 'id', 'class', 'style', 'src', 'width', 'height', 'frameborder'));
- $out = '<iframe'. $attrib_str . '></iframe>';
- return $out;
- }
+parse_template('mailrules'); +?> \ No newline at end of file Index: program/steps/settings/edit_mailrule.inc =================================================================== --- program/steps/settings/edit_mailrule.inc (revision 0) +++ program/steps/settings/edit_mailrule.inc (revision 0) @@ -0,0 +1,128 @@ +<?php
+/*
- +-----------------------------------------------------------------------+
- | program/steps/settings/edit_identity.inc |
- | |
- | This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005, RoundCube Dev. - Switzerland |
- | Licensed under the GNU GPL |
- | |
- | PURPOSE: |
- | Show edit form for a identity record or to add a new one |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli roundcube@gmail.com |
- +-----------------------------------------------------------------------+
- $Id: edit_mailrule.inc 392 2006-12-03 22:32:16Z mangoose $
+*/
+if (($_GET['_iid'] || $_POST['_iid']) && $_action=='edit-mailrule')
- {
- $DB->query("SELECT * FROM ".get_table_name('mailrules')."
WHERE mailrule_id=?
AND user_id=?
AND del<>1",
get_input_value('_iid', RCUBE_INPUT_GPC),
$_SESSION['user_id']);
- $MAILRULE_RECORD = $DB->fetch_assoc();
- if (is_array($MAILRULE_RECORD))
- $OUTPUT->add_script(sprintf("%s.set_env('iid', '%s');", $JS_OBJECT_NAME, $MAILRULE_RECORD['mailrule_id']));
- $PAGE_TITLE = rcube_label('edititem');
- }
+else
- $PAGE_TITLE = rcube_label('newitem');
+$OUTPUT->include_script('list.js');
+function rcube_mailrule_form($attrib)
- {
- global $MAILRULE_RECORD, $JS_OBJECT_NAME, $OUTPUT;
- $OUTPUT->include_script('tiny_mce/tiny_mce_src.js');
- $OUTPUT->add_script("tinyMCE.init({ mode : 'specific_textareas'," .
"apply_source_formatting : true," .
"content_css : '\$__skin_path' + '/editor_content.css'," .
"popups_css : '\$__skin_path' + '/editor_popups.css'," .
"editor_css : '\$__skin_path' + '/editor_ui.css'," .
"theme : 'advanced'," .
"theme_advanced_toolbar_location : 'top'," .
"theme_advanced_toolbar_align : 'left'," .
"theme_advanced_buttons1 : 'bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,separator,outdent,indent,charmap,hr'," .
"theme_advanced_buttons2 : 'link,unlink,code,forecolor,fontselect,fontsizeselect'," .
"theme_advanced_buttons3 : '' });");
- if (!$MAILRULE_RECORD && $GLOBALS['_action']!='add-mailrule')
- return rcube_label('notfound');
- // add some labels to client
- rcube_add_label('noemailwarning');
- rcube_add_label('nonamewarning');
- list($form_start, $form_end) = get_form_tags($attrib, 'save-mailrule', array('name' => '_iid', 'value' => $MAILRULE_RECORD['mailrule_id']));
- unset($attrib['form']);
- // list of available cols
- $a_show_cols = array('from' => array('type' => 'text'),
'to' => array('type' => 'text'),
'subject' => array('type' => 'text'),
'location' => array('type' => 'text'));
- // a specific part is requested
- if ($attrib['part'])
- {
$colprop = $a_show_cols[$attrib['part']];
if (is_array($colprop))
{
$out = $form_start;
$out .= rcmail_get_edit_field($attrib['part'], $MAILRULE_RECORD[$attrib['part']], $attrib, $colprop['type']);
return $out;
}
- else
return '';
- }
- // return the complete edit form as table
- $out = "$form_start<table>\n\n";
- foreach ($a_show_cols as $col => $colprop)
- {
- $attrib['id'] = 'rcmfd_'.$col;
- if (strlen($colprop['onclick']))
$attrib['onclick'] = $colprop['onclick'];
- else
unset($attrib['onclick']);
- $label = strlen($colprop['label']) ? $colprop['label'] : $col;
- $value = rcmail_get_edit_field($col, $MAILRULE_RECORD[$col], $attrib, $colprop['type']);
- $out .= sprintf("<tr><td class="title"><label for="%s">%s</label></td><td>%s</td></tr>\n",
$attrib['id'],
rep_specialchars_output(rcube_label($label)),
$value);
- }
- $out .= "\n</table>$form_end";
- return $out;
- }
+if ($_action=='add-mailrule' && template_exists('addmailrule'))
- parse_template('addmailrule');
+parse_template('editmailrule'); +?> Index: program/steps/mail/check_recent.inc =================================================================== --- program/steps/mail/check_recent.inc (revision 424) +++ program/steps/mail/check_recent.inc (working copy) @@ -25,36 +25,37 @@
foreach ($a_mailboxes as $mbox_name) {
- if ($mbox_name == $IMAP->get_mailbox_name())
- {
- if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE))
{
$count = $IMAP->messagecount();
$unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
- if ($mbox_name == $IMAP->get_mailbox_name())
- {
if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE))
{
$count = $IMAP->messagecount();
$unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $unread_count);
$commands .= sprintf("this.set_env('messagecount', %d);\n", $count);
$commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text());
$commands .= sprintf("this.set_quota('%s');\n", $IMAP->get_quota());
// add new message headers to list
$a_headers = array();
for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++)
{
$header = $IMAP->get_headers($id, NULL, FALSE);
if ($header->recent)
{
$a_headers[] = $header;
}
}
// add new message headers to list
$a_headers = array();
for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++)
{
$header = $IMAP->get_headers($id, NULL, FALSE);
if ($header->recent)
$a_headers[] = $header;
}
$commands .= rcmail_js_message_list($a_headers, TRUE);
}
$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $unread_count);
$commands .= sprintf("this.set_env('messagecount', %d);\n", $count);
$commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text());
$commands .= sprintf("this.set_quota('%s');\n", $IMAP->get_quota());
$commands .= rcmail_js_message_list($a_headers, TRUE);
} else {}
- if ($IMAP->messagecount($mbox_name, 'RECENT'))
$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $IMAP->messagecount($mbox_name, 'UNSEEN'));
- }
if ($IMAP->messagecount($mbox_name, 'RECENT'))
$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $IMAP->messagecount($mbox_name, 'UNSEEN'));
- } }
rcube_remote_response($commands); ?> Index: program/steps/mail/func.inc =================================================================== --- program/steps/mail/func.inc (revision 424) +++ program/steps/mail/func.inc (working copy) @@ -23,6 +23,8 @@ require_once('lib/enriched.inc');
$EMAIL_ADDRESS_PATTERN = '/([a-z0-9][a-z0-9-.+_]*@a-z0-9*[a-z0-9]\.[a-z]{2,5})/i';
if (empty($_SESSION['mbox'])){ @@ -293,7 +295,7 @@ // return the message list as HTML table function rcmail_message_list($attrib) {
- global $IMAP, $CONFIG, $COMM_PATH, $OUTPUT, $JS_OBJECT_NAME;
global $IMAP, $CONFIG, $COMM_PATH, $OUTPUT, $JS_OBJECT_NAME,$DB;
$skin_path = $CONFIG['skin_path']; $image_tag = '<img src="%s%s" alt="%s" border="0" />';
@@ -406,9 +408,60 @@
$a_js_message_arr = array();
- //ADDED TO HANDLE MAILRULE
- $SQL_RESULT = $DB->query("SELECT * FROM ".get_table_name('mailrules')"
WHERE del<>1
AND user_id=?",
$_SESSION['user_id']);
- while ($sql_arr = $DB->fetch_assoc($SQL_RESULT))
{
$SQL_ARRA[] = $sql_arr;
}
- // // create row for each message
- foreach ($a_headers as $i => $header) //while (list($i, $header) = each($a_headers))
- foreach ($a_headers as $i => $header) {
- //ADDED TO HANDLE MAILRULE
- $from_parts = $IMAP->decode_address_list($header->from);
- $to_parts = $IMAP->decode_address_list($header->to);
- $moved_message = 0;
- foreach($SQL_ARRA as $sql_arr)
- {
$need_to_be_moved = 0;
- foreach($from_parts as $from_part)
{
if(empty($sql_arr['from']) || stristr($from_part['name'],$sql_arr['from']) || stristr($from_part['address'],$sql_arr['from']))
{
$need_to_be_moved++;
}
- }
- foreach($to_parts as $to_part)
- {
if(empty($sql_arr['to']) || stristr($to_part['name'],$sql_arr['to']) || stristr($to_part['address'],$sql_arr['to']))
{
$need_to_be_moved++;
}
- }
- if(empty($sql_arr['subject']) || stristr(rep_specialchars_output($IMAP->decode_header($header->subject), 'html', 'all'),$sql_arr['subject']))
{
$need_to_be_moved++;
}
if($need_to_be_moved == 3)
{
$IMAP->move_message($header->uid,$sql_arr['location'],$_SESSION['mbox']);
$moved_message = 1;
break;
}
- }
- if($moved_message == 0)
{
- //
- $message_icon = $attach_icon = ''; $js_row_arr = array(); $zebra_class = $i%2 ? 'even' : 'odd';
@@ -468,12 +521,17 @@
if (sizeof($js_row_arr)) $a_js_message_arr[$header->uid] = $js_row_arr;
- //ADDED TO HANDLE MAILRULE }
//
}
// complete message table $out .= "</tbody></table>\n";
$message_count = $IMAP->messagecount();
// set client env
Index: skins/default/settings.css
--- skins/default/settings.css (revision 424) +++ skins/default/settings.css (working copy) @@ -59,6 +59,7 @@ padding-right: 10px; }
+#mailrules-list, #identities-list, #folder-manager { @@ -76,6 +77,7 @@ height: expression((parseInt(document.documentElement.clientHeight)-215)+'px'); }
+#mailrules-table, #identities-table { width: 600px; @@ -83,11 +85,13 @@ background-color: #F9F9F9; }
+#mailrules-table tbody td, #identities-table tbody td { cursor: pointer; }
+#mailrule-frame, #identity-frame { position: relative; @@ -95,6 +99,7 @@ border: 1px solid #999999; }
+#mailrule-details, #identity-details { margin-top: 30px; @@ -102,6 +107,7 @@ border: 1px solid #999999; }
+#mailrule-details table td.title, #identity-details table td.title { color: #666666; @@ -121,6 +127,7 @@
#userprefs-title, #identity-title, +#mailrule-title, div.boxtitle, #subscription-table thead td { Index: skins/default/templates/editmailrule.html =================================================================== --- skins/default/templates/editmailrule.html (revision 0) +++ skins/default/templates/editmailrule.html (revision 0) @@ -0,0 +1,37 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title><roundcube:object name="pagetitle" /></title> +<roundcube:include file="/includes/links.html" /> +<link rel="stylesheet" type="text/css" href="/settings.css" /> +</head> +<body>
+<roundcube:include file="/includes/taskbar.html" /> +<roundcube:include file="/includes/header.html" /> +<roundcube:include file="/includes/settingstabs.html" />
+<div id="mailrules-list"> +<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" />
+<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p>
+<div id="mailrule-details"> +<div id="mailrule-title"><roundcube:label name="edititem" /></div>
+<div style="padding:15px;"> +<roundcube:object name="mailrulesform" size="40" />
+<p><br /> +<roundcube:button command="delete" type="input" class="button" label="delete" /> +<roundcube:button command="save" type="input" class="button" label="save" /> +</p> +</div> +</div> +</div>
+<roundcube:include file="/includes/settingscripts.html" />
+</body> +</html> Index: skins/default/templates/mail.html =================================================================== --- skins/default/templates/mail.html (revision 424) +++ skins/default/templates/mail.html (working copy) @@ -26,11 +26,9 @@
</div>
<div id="messagecountbar"> -<roundcube:button command="firstpage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessages" /> <roundcube:button command="previouspage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessages" /> <roundcube:object name="messageCountDisplay" /> <roundcube:button command="nextpage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessages" /> -<roundcube:button command="lastpage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastmessages" /> </div>
<div id="mailboxlist-header"><roundcube:label name="mailboxlist" /></div> @@ -77,7 +75,7 @@ <roundcube:button command="select-all" label="all" classAct="active" /> <roundcube:button command="select-all" prop="unread" label="unread" classAct="active" /> <roundcube:button command="select-none" label="none" classAct="active" /> -<roundcube:label name="quota" />: <roundcube:object name="quotaDisplay" display="image" width="120" id="quotadisplay" /> +<roundcube:label name="quota" />: <roundcube:object name="quotaDisplay" /> </div>
</body> Index: skins/default/templates/addmailrule.html =================================================================== --- skins/default/templates/addmailrule.html (revision 0) +++ skins/default/templates/addmailrule.html (revision 0) @@ -0,0 +1,36 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title><roundcube:object name="pagetitle" /></title> +<roundcube:include file="/includes/links.html" /> +<link rel="stylesheet" type="text/css" href="/settings.css" /> +</head> +<body> + +<roundcube:include file="/includes/taskbar.html" /> +<roundcube:include file="/includes/header.html" /> +<roundcube:include file="/includes/settingstabs.html" /> + + +<div id="mailrules-list"> +<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" /> + +<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p> + +<div id="mailrule-details"> +<div id="mailrule-title"><roundcube:label name="edititem" /></div> + +<div style="padding:15px;"> +<roundcube:object name="mailrulesform" size="40" /> + +<p><br /> +<roundcube:button command="save" type="input" class="button" label="save" /> +</p> +</div> +</div> +</div> + +<roundcube:include file="/includes/settingscripts.html" /> + +</body> +</html> \ No newline at end of file Index: skins/default/templates/message.html =================================================================== --- skins/default/templates/message.html (revision 424) +++ skins/default/templates/message.html (working copy) @@ -11,11 +11,9 @@ <roundcube:include file="/includes/header.html" />
<div id="messagecountbar"> -<roundcube:button command="firstmessage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessage" /> -<roundcube:button command="previousmessage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessage" /> +<roundcube:button command="previousmessage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessages" /> <roundcube:object name="messageCountDisplay" /> -<roundcube:button command="nextmessage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessage" /> -<roundcube:button command="lastmessage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastmessage" /> +<roundcube:button command="nextmessage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessages" /> </div>
<div id="messagetoolbar"> Index: skins/default/templates/mailrules.html =================================================================== --- skins/default/templates/mailrules.html (revision 0) +++ skins/default/templates/mailrules.html (revision 0) @@ -0,0 +1,23 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title><roundcube:object name="pagetitle" /></title> +<roundcube:include file="/includes/links.html" /> +<link rel="stylesheet" type="text/css" href="/settings.css" /> +</head> +<body> + +<roundcube:include file="/includes/taskbar.html" /> +<roundcube:include file="/includes/header.html" /> +<roundcube:include file="/includes/settingstabs.html" /> + +<div id="mailrules-list"> +<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" /> + +<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p> +</div> + +<roundcube:include file="/includes/settingscripts.html" /> + +</body> +</html> Index: skins/default/templates/addressbook.html =================================================================== --- skins/default/templates/addressbook.html (revision 424) +++ skins/default/templates/addressbook.html (working copy) @@ -21,11 +21,9 @@ </div>
<div id="abookcountbar"> -<roundcube:button command="firstpage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstpage" /> <roundcube:button command="previouspage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previouspage" /> <roundcube:object name="recordsCountDisplay" /> <roundcube:button command="nextpage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextpage" /> -<roundcube:button command="lastpage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastpage" /> </div>
<div id="addresslist"> Index: skins/default/templates/compose.html =================================================================== --- skins/default/templates/compose.html (revision 424) +++ skins/default/templates/compose.html (working copy) @@ -106,9 +106,7 @@ <td align="right"> <roundcube:label name="charset" />: <roundcube:object name="charsetSelector" tabindex="8" /> </td> -<td align="right"> - <roundcube:label name="editortype" />: </td> -<roundcube:object name="editorSelector" tabindex="9" /> + </tr></tbody></table>
</td> Index: skins/default/templates/ldappublicsearch.html =================================================================== --- skins/default/templates/ldappublicsearch.html (revision 424) +++ skins/default/templates/ldappublicsearch.html (working copy) @@ -22,7 +22,7 @@ <roundcube:object name="ldappublicaddresslist" id="ldappublicaddresslist" cellspacing="0" - summary="LDAP email address list" /> + summary="Ldap email address list" /> </div>
<roundcube:include file="/includes/ldapscripts.html" /> Index: skins/default/templates/login.html =================================================================== --- skins/default/templates/login.html (revision 424) +++ skins/default/templates/login.html (working copy) @@ -24,7 +24,7 @@
<form name="form" action="./" method="post"> <roundcube:object name="loginform" form="form" />
-<p style="text-align: center;"><input type="submit" class="button" value="<roundcube:label name="login" />" /></p> +<p style="text-align: center;"><input type="submit" class="button" value="<roundcube:label name="login" />" />
</form> </div> Index: skins/default/includes/settingstabs.html =================================================================== --- skins/default/includes/settingstabs.html (revision 424) +++ skins/default/includes/settingstabs.html (working copy) @@ -1,3 +1,6 @@ <div id="tabsbar"> -<span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span><span id="settingstabfolders" class="tablink"><roundcube:button command="folders" type="link" label="folders" title="managefolders" class="tablink" /></span><span id="settingstabidentities" class="tablink"><roundcube:button command="identities" type="link" label="identities" title="manageidentities" class="tablink" /></span> +<span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span> +<span id="settingstabfolders" class="tablink"><roundcube:button command="folders" type="link" label="folders" title="managefolders" class="tablink" /></span> +<span id="settingstabidentities" class="tablink"><roundcube:button command="identities" type="link" label="identities" title="manageidentities" class="tablink" /></span> +<span id="settingstabmailrules" class="tablink"><roundcube:button command="mailrules" type="link" label="mailrules" title="managemailrules" class="tablink" /></span> </div> Index: index.php =================================================================== --- index.php (revision 424) +++ index.php (working copy) @@ -358,7 +358,7 @@
if ($_action=='add-identity' || $_action=='edit-identity') include('program/steps/settings/edit_identity.inc');
- if ($_action=='delete-identity') include('program/steps/settings/delete_identity.inc');
@@ -372,6 +372,20 @@ $_action=='create-folder' || $_action=='rename-folder' || $_action=='delete-folder') include('program/steps/settings/manage_folders.inc');
+// ADDED TO HANDLE MAILRULE
- if ($_action=='mailrules')
- include('program/steps/settings/mailrules.inc');
- if ($_action=='save-mailrule')
- include('program/steps/settings/save_mailrule.inc');
- if ($_action=='edit-mailrule' || $_action=='add-mailrule')
- include('program/steps/settings/edit_mailrule.inc');
- if ($_action=='delete-mailrule')
- include('program/steps/settings/delete_mailrule.inc');
+// }
Ok, I found the bug. An SQL query in func.inc was missing a joining period (.). Here's the updated diff. I haven't been able to get the actual filters to work though. Still experimenting to see if I've just got the context wrong. Anyone know the syntax to put in? Particularly for Destination?
-Ryan
Network Administrator Goshen College (574) 535-7004
Ryan Rittenhouse wrote:
I've put this on a fresh SVN and haven't been able to login. It give me the login screen ok but when I try to logon it give me a blank screen. Anyone else having this problem?
-Ryan
Network Administrator Goshen College (574) 535-7004
Black.myst wrote:
Hello
I installed Pierre's diff on the last SVN. I join the updated diff.
I applied the original patch to R400, added the new files, update to R424 and fix some conflicts.
I have NOT include SQL to diff, the table structure to handle mailrule is: CREATE TABLE
mailrules
(mailrule_id
int(11) NOT NULL auto_increment,from
varchar(128) default NULL,to
varchar(128) default NULL,subject
varchar(128) default NULL,user_id
int(10) unsigned NOT NULL default '0',del
tinyint(1) NOT NULL default '0',location
varchar(128) default NULL, PRIMARY KEY (mailrule_id
) ) TYPE=MyISAM;Note : The SQL script is NOT compatible with SQLite :-(
Black Myst
Thomas Bruederli a écrit :
Hi Pierre
Please update your local copy to the latest revision (svn update) and then create the diff again. The current one removes newly added features :-(
~Thomas
Pierre Lena wrote:
Here is the diff file.
Regards.
--- program/steps/mail/func.inc (revision 424) +++ program/steps/mail/func.inc (working copy) @@ -23,6 +23,8 @@ require_once('lib/enriched.inc');
$EMAIL_ADDRESS_PATTERN = '/([a-z0-9][a-z0-9-.+_]*@a-z0-9*[a-z0-9]\.[a-z]{2,5})/i';
if (empty($_SESSION['mbox'])){ @@ -293,7 +295,7 @@ // return the message list as HTML table function rcmail_message_list($attrib) {
global $IMAP, $CONFIG, $COMM_PATH, $OUTPUT, $JS_OBJECT_NAME,$DB;
$skin_path = $CONFIG['skin_path']; $image_tag = '<img src="%s%s" alt="%s" border="0" />';
@@ -406,9 +408,60 @@
$a_js_message_arr = array();
WHERE del<>1
AND user_id=?",
$_SESSION['user_id']);
{
$SQL_ARRA[] = $sql_arr;
}
$need_to_be_moved = 0;
{
if(empty($sql_arr['from']) || stristr($from_part['name'],$sql_arr['from']) || stristr($from_part['address'],$sql_arr['from']))
{
$need_to_be_moved++;
}
if(empty($sql_arr['to']) || stristr($to_part['name'],$sql_arr['to']) || stristr($to_part['address'],$sql_arr['to']))
{
$need_to_be_moved++;
}
{
$need_to_be_moved++;
}
if($need_to_be_moved == 3)
{
$IMAP->move_message($header->uid,$sql_arr['location'],$_SESSION['mbox']);
$moved_message = 1;
break;
}
{
@@ -468,12 +521,17 @@
if (sizeof($js_row_arr))
$a_js_message_arr[$header->uid] = $js_row_arr;
//
}
// complete message table $out .= "</tbody></table>\n";
$message_count = $IMAP->messagecount();
// set client env
--- program/include/main.inc (revision 424) +++ program/include/main.inc (working copy) @@ -1341,6 +1341,12 @@ 'itentitieslist' => 'rcmail_identities_list', 'identityframe' => 'rcmail_identity_frame', 'identityform' => 'rcube_identity_form',
// ADDED TO HANDLE MAILRULES
'mailruleslist' => 'rcmail_mailrule_list',
'mailrulesframe' => 'rcmail_mailrule_frame',
'mailrulesform' => 'rcube_mailrule_form',
//
'foldersubscription' => 'rcube_subscription_form',
'createfolder' => 'rcube_create_folder_form',
'renamefolder' => 'rcube_rename_folder_form',
--- program/localization/fr/labels.inc (revision 424) +++ program/localization/fr/labels.inc (working copy) @@ -146,10 +146,11 @@ $labels['ldappublicsearchfield'] = 'Recherche sur'; $labels['ldappublicsearchform'] = 'Chercher un contact'; $labels['ldappublicsearch'] = 'Recherche'; -$labels['settingsfor'] = 'Paramètres pour'; -$labels['preferences'] = 'Préférences'; $labels['userpreferences'] = 'Préférences utilisateur'; $labels['editpreferences'] = 'Editer les préférences utilisateur'; +$labels['mailrules'] = 'Règles'; +$labels['managemailrules'] = 'Gérer les règles de messagerie'; +$labels['newmailrule'] = 'Nouvelle règle'; $labels['identities'] = 'Identités'; $labels['manageidentities'] = 'Gérer les identités pour ce compte'; $labels['newidentity'] = 'Nouvelle identité'; @@ -180,4 +181,6 @@ $labels['sortby'] = 'Trier par'; $labels['sortasc'] = 'Tri ascendant'; $labels['sortdesc'] = 'Tri descendant'; +$labels['location'] = 'Destination';
?> Index: program/js/app.js =================================================================== --- program/js/app.js (revision 424) +++ program/js/app.js (working copy) @@ -247,9 +247,15 @@
case 'settings':
this.enable_command('preferences', 'identities', 'save', 'folders', true);
this.enable_command('preferences', 'identities', 'save', 'folders', 'mailrules', true);
if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='add-identity')
if(this.env.action=='mailrules' || this.env.action=='edit-mailrule' || this.env.action=='add-mailrule')
this.enable_command('edit', 'add', 'delete', true);
if (this.env.action=='edit-mailrule' || this.env.action=='add-mailrule')
this.enable_command('save', true);
if (this.env.action=='identities' || this.env.action=='edit-identity' || this.env.action=='')
this.enable_command('edit', 'add', 'delete', true);
if (this.env.action=='edit-identity' || this.env.action=='add-identity')
@@ -269,6 +275,18 @@ this.identity_list.highlight_row(this.env.iid); }
//ADDED TO HANDLE MAILRULES
if (this.gui_objects.mailruleslist)
{
this.mailrule_list = new rcube_list_widget(this.gui_objects.mailruleslist, {multiselect:false, draggable:false, keyboard:false});
this.mailrule_list.addEventListener('select', function(o){ p.mailrule_select(o); });
this.mailrule_list.init();
this.mailrule_list.focus();
if (this.env.iid)
this.mailrule_list.highlight_row(this.env.iid);
}
//
break;
case 'login':
@@ -556,22 +574,18 @@ case 'add': if (this.task=='addressbook') this.load_contact(0, 'add');
/* LDAP stuff, has to be re-written with new address book
if (!window.frames[this.env.contentframe].rcmail)
this.load_contact(0, 'add');
else
{
if (window.frames[this.env.contentframe].rcmail.selection.length)
this.add_ldap_contacts();
else
this.load_contact(0, 'add');
}
*/
else if (this.task=='settings')
{
this.identity_list.clear_selection();
this.load_identity(0, 'add-identity');
if(this.env.action=='mailrules')
{
this.mailrule_list.clear_selection();
this.load_mailrule(0, 'add-mailrule');
}
else
{
this.identity_list.clear_selection();
this.load_identity(0, 'add-identity');
}
}
break;
@@ -628,7 +642,12 @@ this.delete_contacts(); // user settings task else if (this.task=='settings')
this.delete_identity();
{
if(this.env.action=='edit-mailrule')
this.delete_mailrule();
else
this.delete_identity();
}
break;
@@ -903,12 +922,19 @@ this.goto_url(''); break;
case 'mailrules':
this.goto_url('mailrules');
break;
case 'identities':
this.goto_url('identities');
break;
case 'delete-identity':
this.delete_identity();
case 'delete-mailrule':
this.delete_mailrule();
case 'folders':
this.goto_url('folders');
@@ -2368,6 +2394,13 @@ this.load_identity(id, 'edit-identity'); };
this.load_mailrule(id, 'edit-mailrule');
@@ -2388,10 +2421,32 @@ this.set_busy(true); target.location.href = this.env.comm_path+'&_action='+action+'&_iid='+id+add_url; }
return true; };
// load rule record
this.load_mailrule = function(id, action)
{
if (action=='edit-mailrule' && (!id || id==this.env.iid))
return false;
var add_url = '';
var target = window;
if (this.env.contentframe && window.frames && window.frames[this.envcontentframe])
{
add_url = '&_framed=1';
target = window.frames[this.env.contentframe];
document.getElementById(this.env.contentframe).style.visibility = 'inherit';
}
if (action && (id || action=='add-mailrule'))
{
this.set_busy(true);
target.location.href = this.env.comm_path+'&_action='+action+'&_iid='+id+add_url;
}
return true;
};
this.delete_identity = function(id) {
@@ -2403,21 +2458,26 @@ if (!id) id = this.env.iid ? this.env.iid : selection[0];
-/*
{
this.clear_selection();
this.identity_rows[id].obj.style.display = 'none';
}
-*/
this.delete_mailrule = function(id)
{
// exit if no mailbox specified or if selection is empty
var selection = this.mailrule_list.get_selection();
if (!(selection.length || this.env.iid))
return;
if (!id)
id = this.env.iid ? this.env.iid : selection[0];
// if (this.env.framed && id)
this.goto_url('delete-mailrule', '_iid='+id, true);
return true;
};
// tell server to create and subscribe a new mailbox this.create_folder = function(name) {
--- program/steps/settings/save_identity.inc (revision 424) +++ program/steps/settings/save_identity.inc (working copy) @@ -145,6 +145,6 @@
// go to next step -rcmail_overwrite_action($_POST['_framed'] ? 'edit-identitiy' : 'identities'); +rcmail_overwrite_action($_POST['_framed'] ? 'edit-identity' : 'identities');
?> \ No newline at end of file Index: program/steps/settings/save_mailrule.inc =================================================================== --- program/steps/settings/save_mailrule.inc (revision 0) +++ program/steps/settings/save_mailrule.inc (revision 0) @@ -0,0 +1,139 @@ +<?php
+/*
+*/
+$a_save_cols = array('from', 'to', 'subject', 'location');
+// check input +if (empty($_POST['_from']) && empty($_POST['_to']) && empty($_POST['_subject']) && empty($_POST['_location']) )
+// update an existing contact +if ($_POST['_iid'])
continue;
$DB->quoteIdentifier($col),
$DB->quote(get_input_value($fname, RCUBE_INPUT_POST, in_array($col, $a_html_cols))));
SET ".join(', ', $a_write_sql)."
WHERE mailrule_id=?
AND user_id=?
AND del<>1",
get_input_value('_iid', RCUBE_INPUT_POST),
$_SESSION['user_id']);
show_message('successfullysaved', 'confirmation');
$DB->query("UPDATE ".get_table_name('mailrule')."
SET ".$DB->quoteIdentifier('standard')."='0'
WHERE user_id=?
AND mailrule_id<>?
AND del<>1",
$_SESSION['user_id'],
get_input_value('_iid', RCUBE_INPUT_POST));
{
// update the changed col in list
// ...
}
+// insert a new contact +else
continue;
(user_id, ".join(', ', $a_insert_cols).")
VALUES (?, ".join(', ', $a_insert_values).")",
$_SESSION['user_id']);
{
// add contact row or jump to the page where it should appear
// ....
}
+// go to next step +rcmail_overwrite_action($_POST['_framed'] ? 'edit-mailrule' : 'mailrules');
+?> \ No newline at end of file Index: program/steps/settings/func.inc =================================================================== --- program/steps/settings/func.inc (revision 424) +++ program/steps/settings/func.inc (working copy) @@ -230,8 +230,36 @@ return $out; }
+function rcmail_mailrule_list($attrib) +{
global $DB, $CONFIG, $OUTPUT, $JS_OBJECT_NAME;
// get contacts from DB
$sql_result = $DB->query("SELECT * FROM ".get_table_name('mailrules')."
WHERE del<>1
AND user_id=?",
$_SESSION['user_id']);
// add id to message list table if not specified
if (!strlen($attrib['id']))
$attrib['id'] = 'mailruleslist';
// define list of cols to be displayed
$a_show_cols = array('from', 'to', 'subject','location');
// create XHTML table
$out = rcube_table_output($attrib, $sql_result, $a_show_cols, 'mailrule_id');
// set client env
$javascript = sprintf("%s.gui_object('mailruleslist', '%s');\n", $JS_OBJECT_NAME, $attrib['id']);
$OUTPUT->add_script($javascript);
return $out;
}
// similar function as in /steps/addressbook/edit.inc function get_form_tags($attrib, $action, $add_hidden=array()) { Index: program/steps/settings/delete_mailrule.inc =================================================================== --- program/steps/settings/delete_mailrule.inc (revision 0) +++ program/steps/settings/delete_mailrule.inc (revision 0) @@ -0,0 +1,53 @@ +<?php
+/*
+*/
+$REMOTE_REQUEST = $_GET['_remote'] ? TRUE : FALSE;
+if ($_GET['_iid'])
SET del=1
WHERE user_id=?
AND mailrule_id IN (".$_GET['_iid'].")",
$_SESSION['user_id']);
+if ($REMOTE_REQUEST)
+// go to mailrules page +$_action = 'mailrules';
+// overwrite action variable
+$OUTPUT->add_script(sprintf("\n%s.set_env('action', '%s');", $JS_OBJECT_NAME, $_action));
+?>
\ No newline at end of file
Index: program/steps/settings/mailrules.inc
===================================================================
--- program/steps/settings/mailrules.inc (revision 0)
+++ program/steps/settings/mailrules.inc (revision 0)
@@ -0,0 +1,46 @@
+<?php
+/*
+*/
+if ($USER_DATA = $DB->fetch_assoc($sql_result))
+$OUTPUT->include_script('list.js');
+function rcmail_mailrule_frame($attrib)
+parse_template('mailrules'); +?> \ No newline at end of file Index: program/steps/settings/edit_mailrule.inc =================================================================== --- program/steps/settings/edit_mailrule.inc (revision 0) +++ program/steps/settings/edit_mailrule.inc (revision 0) @@ -0,0 +1,128 @@ +<?php
+/*
+*/
+if (($_GET['_iid'] || $_POST['_iid']) && $_action=='edit-mailrule')
WHERE mailrule_id=?
AND user_id=?
AND del<>1",
get_input_value('_iid', RCUBE_INPUT_GPC),
$_SESSION['user_id']);
+else
+$OUTPUT->include_script('list.js');
+function rcube_mailrule_form($attrib)
"apply_source_formatting : true," .
"content_css : '\$__skin_path' + '/editor_content.css'," .
"popups_css : '\$__skin_path' + '/editor_popups.css'," .
"editor_css : '\$__skin_path' + '/editor_ui.css'," .
"theme : 'advanced'," .
"theme_advanced_toolbar_location : 'top'," .
"theme_advanced_toolbar_align : 'left'," .
"theme_advanced_buttons1 : 'bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,separator,outdent,indent,charmap,hr'," .
"theme_advanced_buttons2 : 'link,unlink,code,forecolor,fontselect,fontsizeselect'," .
"theme_advanced_buttons3 : '' });");
'to' => array('type' => 'text'),
'subject' => array('type' => 'text'),
'location' => array('type' => 'text'));
$colprop = $a_show_cols[$attrib['part']];
if (is_array($colprop))
{
$out = $form_start;
$out .= rcmail_get_edit_field($attrib['part'], $MAILRULE_RECORD[$attrib['part']], $attrib, $colprop['type']);
return $out;
}
return '';
$attrib['onclick'] = $colprop['onclick'];
unset($attrib['onclick']);
$attrib['id'],
rep_specialchars_output(rcube_label($label)),
$value);
+if ($_action=='add-mailrule' && template_exists('addmailrule'))
+parse_template('editmailrule'); +?> Index: program/steps/mail/check_recent.inc =================================================================== --- program/steps/mail/check_recent.inc (revision 424) +++ program/steps/mail/check_recent.inc (working copy) @@ -25,36 +25,37 @@
foreach ($a_mailboxes as $mbox_name) {
{
$count = $IMAP->messagecount();
$unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE))
{
$count = $IMAP->messagecount();
$unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $unread_count);
$commands .= sprintf("this.set_env('messagecount', %d);\n", $count);
$commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text());
$commands .= sprintf("this.set_quota('%s');\n", $IMAP->get_quota());
// add new message headers to list
$a_headers = array();
for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++)
{
$header = $IMAP->get_headers($id, NULL, FALSE);
if ($header->recent)
{
$a_headers[] = $header;
}
}
// add new message headers to list
$a_headers = array();
for ($i=$recent_count, $id=$count-$recent_count+1; $i>0; $i--, $id++)
{
$header = $IMAP->get_headers($id, NULL, FALSE);
if ($header->recent)
$a_headers[] = $header;
}
$commands .= rcmail_js_message_list($a_headers, TRUE);
}
$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $unread_count);
$commands .= sprintf("this.set_env('messagecount', %d);\n", $count);
$commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text());
$commands .= sprintf("this.set_quota('%s');\n", $IMAP->get_quota());
$commands .= rcmail_js_message_list($a_headers, TRUE);
}
}
else
{ $commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $IMAP->messagecount($mbox_name, 'UNSEEN'));
if ($IMAP->messagecount($mbox_name, 'RECENT'))
$commands .= sprintf("this.set_unread_count('%s', %d);\n", addslashes($mbox_name), $IMAP->messagecount($mbox_name, 'UNSEEN'));
rcube_remote_response($commands); ?> Index: skins/default/settings.css =================================================================== --- skins/default/settings.css (revision 424) +++ skins/default/settings.css (working copy) @@ -59,6 +59,7 @@ padding-right: 10px; }
+#mailrules-list, #identities-list, #folder-manager { @@ -76,6 +77,7 @@ height: expression((parseInt(document.documentElement.clientHeight)-215)+'px'); }
+#mailrules-table, #identities-table { width: 600px; @@ -83,11 +85,13 @@ background-color: #F9F9F9; }
+#mailrules-table tbody td, #identities-table tbody td { cursor: pointer; }
+#mailrule-frame, #identity-frame { position: relative; @@ -95,6 +99,7 @@ border: 1px solid #999999; }
+#mailrule-details, #identity-details { margin-top: 30px; @@ -102,6 +107,7 @@ border: 1px solid #999999; }
+#mailrule-details table td.title, #identity-details table td.title { color: #666666; @@ -121,6 +127,7 @@
#userprefs-title, #identity-title, +#mailrule-title, div.boxtitle, #subscription-table thead td { Index: skins/default/templates/editmailrule.html =================================================================== --- skins/default/templates/editmailrule.html (revision 0) +++ skins/default/templates/editmailrule.html (revision 0) @@ -0,0 +1,37 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title><roundcube:object name="pagetitle" /></title> +<roundcube:include file="/includes/links.html" /> +<link rel="stylesheet" type="text/css" href="/settings.css" /> +</head> +<body>
+<roundcube:include file="/includes/taskbar.html" /> +<roundcube:include file="/includes/header.html" /> +<roundcube:include file="/includes/settingstabs.html" />
+<div id="mailrules-list"> +<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" />
+<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p>
+<div id="mailrule-details"> +<div id="mailrule-title"><roundcube:label name="edititem" /></div>
+<div style="padding:15px;"> +<roundcube:object name="mailrulesform" size="40" />
+<p><br /> +<roundcube:button command="delete" type="input" class="button" label="delete" /> +<roundcube:button command="save" type="input" class="button" label="save" /> +</p> +</div> +</div> +</div>
+<roundcube:include file="/includes/settingscripts.html" />
+</body> +</html> Index: skins/default/templates/mail.html =================================================================== --- skins/default/templates/mail.html (revision 424) +++ skins/default/templates/mail.html (working copy) @@ -26,11 +26,9 @@
</div>
<div id="messagecountbar"> -<roundcube:button command="firstpage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessages" /> <roundcube:button command="previouspage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessages" /> <roundcube:object name="messageCountDisplay" /> <roundcube:button command="nextpage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessages" /> -<roundcube:button command="lastpage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastmessages" /> </div>
<div id="mailboxlist-header"><roundcube:label name="mailboxlist" /></div> @@ -77,7 +75,7 @@ <roundcube:button command="select-all" label="all" classAct="active" /> <roundcube:button command="select-all" prop="unread" label="unread" classAct="active" /> <roundcube:button command="select-none" label="none" classAct="active" /> -<roundcube:label name="quota" />: <roundcube:object name="quotaDisplay" display="image" width="120" id="quotadisplay" /> +<roundcube:label name="quota" />: <roundcube:object name="quotaDisplay" /> </div>
</body> Index: skins/default/templates/addmailrule.html =================================================================== --- skins/default/templates/addmailrule.html (revision 0) +++ skins/default/templates/addmailrule.html (revision 0) @@ -0,0 +1,36 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title><roundcube:object name="pagetitle" /></title> +<roundcube:include file="/includes/links.html" /> +<link rel="stylesheet" type="text/css" href="/settings.css" /> +</head> +<body> + +<roundcube:include file="/includes/taskbar.html" /> +<roundcube:include file="/includes/header.html" /> +<roundcube:include file="/includes/settingstabs.html" /> + + +<div id="mailrules-list"> +<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" /> + +<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p> + +<div id="mailrule-details"> +<div id="mailrule-title"><roundcube:label name="edititem" /></div> + +<div style="padding:15px;"> +<roundcube:object name="mailrulesform" size="40" /> + +<p><br /> +<roundcube:button command="save" type="input" class="button" label="save" /> +</p> +</div> +</div> +</div> + +<roundcube:include file="/includes/settingscripts.html" /> + +</body> +</html> \ No newline at end of file Index: skins/default/templates/message.html =================================================================== --- skins/default/templates/message.html (revision 424) +++ skins/default/templates/message.html (working copy) @@ -11,11 +11,9 @@ <roundcube:include file="/includes/header.html" />
<div id="messagecountbar"> -<roundcube:button command="firstmessage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessage" /> -<roundcube:button command="previousmessage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessage" /> +<roundcube:button command="previousmessage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previousmessages" /> <roundcube:object name="messageCountDisplay" /> -<roundcube:button command="nextmessage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessage" /> -<roundcube:button command="lastmessage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastmessage" /> +<roundcube:button command="nextmessage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextmessages" /> </div>
<div id="messagetoolbar"> Index: skins/default/templates/mailrules.html =================================================================== --- skins/default/templates/mailrules.html (revision 0) +++ skins/default/templates/mailrules.html (revision 0) @@ -0,0 +1,23 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title><roundcube:object name="pagetitle" /></title> +<roundcube:include file="/includes/links.html" /> +<link rel="stylesheet" type="text/css" href="/settings.css" /> +</head> +<body> + +<roundcube:include file="/includes/taskbar.html" /> +<roundcube:include file="/includes/header.html" /> +<roundcube:include file="/includes/settingstabs.html" /> + +<div id="mailrules-list"> +<roundcube:object name="mailruleslist" id="mailrules-table" class="records-table" cellspacing="0" summary="MailRules list" editIcon="" /> + +<p><roundcube:button command="add" type="input" label="newmailrule" class="button" /></p> +</div> + +<roundcube:include file="/includes/settingscripts.html" /> + +</body> +</html> Index: skins/default/templates/addressbook.html =================================================================== --- skins/default/templates/addressbook.html (revision 424) +++ skins/default/templates/addressbook.html (working copy) @@ -21,11 +21,9 @@ </div>
<div id="abookcountbar"> -<roundcube:button command="firstpage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstpage" /> <roundcube:button command="previouspage" imageSel="/images/buttons/previous_sel.png" imageAct="/images/buttons/previous_act.png" imagePas="/images/buttons/previous_pas.png" width="11" height="11" title="previouspage" /> <roundcube:object name="recordsCountDisplay" /> <roundcube:button command="nextpage" imageSel="/images/buttons/next_sel.png" imageAct="/images/buttons/next_act.png" imagePas="/images/buttons/next_pas.png" width="11" height="11" title="nextpage" /> -<roundcube:button command="lastpage" imageSel="/images/buttons/last_sel.png" imageAct="/images/buttons/last_act.png" imagePas="/images/buttons/last_pas.png" width="11" height="11" title="lastpage" /> </div>
<div id="addresslist"> Index: skins/default/templates/compose.html =================================================================== --- skins/default/templates/compose.html (revision 424) +++ skins/default/templates/compose.html (working copy) @@ -106,9 +106,7 @@ <td align="right"> <roundcube:label name="charset" />: <roundcube:object name="charsetSelector" tabindex="8" /> </td> -<td align="right"> - <roundcube:label name="editortype" />: </td> -<roundcube:object name="editorSelector" tabindex="9" /> + </tr></tbody></table>
</td> Index: skins/default/templates/ldappublicsearch.html =================================================================== --- skins/default/templates/ldappublicsearch.html (revision 424) +++ skins/default/templates/ldappublicsearch.html (working copy) @@ -22,7 +22,7 @@ <roundcube:object name="ldappublicaddresslist" id="ldappublicaddresslist" cellspacing="0" - summary="LDAP email address list" /> + summary="Ldap email address list" /> </div>
<roundcube:include file="/includes/ldapscripts.html" /> Index: skins/default/templates/login.html =================================================================== --- skins/default/templates/login.html (revision 424) +++ skins/default/templates/login.html (working copy) @@ -24,7 +24,7 @@
<form name="form" action="./" method="post"> <roundcube:object name="loginform" form="form" />
-<p style="text-align: center;"><input type="submit" class="button" value="<roundcube:label name="login" />" /></p> +<p style="text-align: center;"><input type="submit" class="button" value="<roundcube:label name="login" />" />
</form> </div> Index: skins/default/includes/settingstabs.html =================================================================== --- skins/default/includes/settingstabs.html (revision 424) +++ skins/default/includes/settingstabs.html (working copy) @@ -1,3 +1,6 @@ <div id="tabsbar"> -<span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span><span id="settingstabfolders" class="tablink"><roundcube:button command="folders" type="link" label="folders" title="managefolders" class="tablink" /></span><span id="settingstabidentities" class="tablink"><roundcube:button command="identities" type="link" label="identities" title="manageidentities" class="tablink" /></span> +<span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span> +<span id="settingstabfolders" class="tablink"><roundcube:button command="folders" type="link" label="folders" title="managefolders" class="tablink" /></span> +<span id="settingstabidentities" class="tablink"><roundcube:button command="identities" type="link" label="identities" title="manageidentities" class="tablink" /></span> +<span id="settingstabmailrules" class="tablink"><roundcube:button command="mailrules" type="link" label="mailrules" title="managemailrules" class="tablink" /></span> </div> Index: index.php =================================================================== --- index.php (revision 424) +++ index.php (working copy) @@ -358,7 +358,7 @@
if ($_action=='add-identity' || $_action=='edit-identity') include('program/steps/settings/edit_identity.inc');
@@ -372,6 +372,20 @@ $_action=='create-folder' || $_action=='rename-folder' || $_action=='delete-folder') include('program/steps/settings/manage_folders.inc');
+// ADDED TO HANDLE MAILRULE
+// }