Commit e695678a authored by Alan Garcia's avatar Alan Garcia

Pour #1350

parent bc0af080
......@@ -610,6 +610,7 @@ src/functions.sh -text
src/functions_dns.sh -text
src/functions_hosting.sh -text
src/inotify_update_domains.sh -text
src/mail_dodelete.php -text
src/mem_add -text
src/mem_del -text
src/popimap-log-login.sh -text
......
......@@ -405,6 +405,16 @@ ORDER BY
return true;
}
// return the alternc account's ID of the mail_id
function get_account_by_mail_id($mail_id) {
global $db,$err;
$db->query("select compte as uid from domaines d, address a where a.domain_id = d.id and a.id = $mail_id");
if ( !$db->next_record()) {
return false;
}
return $db->f('uid');
}
/* ----------------------------------------------------------------- */
/** Function used to delete a mail from the db
......@@ -429,6 +439,9 @@ ORDER BY
return false;
}
$mailinfos=$this->get_details($mail_id);
$hooks->invoke('hook_mail_delete', array($mail_id, $mailinfos['address'].'@'.$mailinfos['domain'] ));
// Search for that address:
$db->query("SELECT a.id, a.type, a.mail_action, m.mail_action AS mailbox_action, NOT ISNULL(m.id) AS islocal FROM address a LEFT JOIN mailbox m ON m.address_id=a.id WHERE a.id='$mail_id';");
if (!$db->next_record()) {
......
......@@ -65,6 +65,22 @@ class m_roundcube {
}
/* ----------------------------------------------------------------- */
/** Hook called when an email is REALLY deleted (by the cron, not just in the panel)
* @param mail_id integer the ID of the mail in the AlternC database
* @param fullmail string the deleted mail himself in the form of john@domain.tld
* @return boolean
*/
function hook_mail_delete_for_real($mail_id, $fullmail) {
// FIXME do something !
// Include Roundcube configuration
// Delete from the roundcube configuration
// Use cleandb.sh filled by roundcube ?
printvar($mail_id);
printvar($fullmail);
}
} /* Class Roundcube */
......
......@@ -19,7 +19,7 @@
# ----------------------------------------------------------------------
# Purpose of file: Makefile des binaires de /usr/lib/alternc
# ----------------------------------------------------------------------
SCRIPTS=sqlbackup.sh quota_init quota_delete update_domains.sh slave_dns sendmail spoolsize.php fixperms.sh alternc-dboptimize export_account.php cron_users_doit.sh cron_users.sh compress_logs.sh delete_logs.sh quota-warning.sh update_mails.sh alternc_add_policy_dovecot rebuild_all_webconf.sh courier-dovecot-migrate.pl popimap-log-login.sh mem_add mem_del quota_edit quota_get du.pl update_quota_mail.sh inotify_update_domains.sh functions.sh functions_hosting.sh functions_dns.sh
SCRIPTS=sqlbackup.sh quota_init quota_delete update_domains.sh slave_dns sendmail spoolsize.php fixperms.sh alternc-dboptimize export_account.php cron_users_doit.sh cron_users.sh compress_logs.sh delete_logs.sh quota-warning.sh update_mails.sh alternc_add_policy_dovecot rebuild_all_webconf.sh courier-dovecot-migrate.pl popimap-log-login.sh mem_add mem_del quota_edit quota_get du.pl update_quota_mail.sh inotify_update_domains.sh functions.sh functions_hosting.sh functions_dns.sh mail_dodelete.php
BIN=$(DESTDIR)/usr/lib/alternc/
install:
......
#!/usr/bin/php -q
<?php
// Launch the hooks for a real deletion of the mail whose ID is in parameters
$mail_id = @intval($argv[1]);
if (empty($mail_id) ) {
die('You must specified a valid mail id (integer)');
}
require_once("/var/alternc/bureau/class/config_nochk.php");
// Wich account should I be ?
$uid=$mail->get_account_by_mail_id($mail_id);
// Ok, so be it
$mem->su($uid);
// Get the mails informations
$mailinfos=$mail->get_details($mail_id);
// AND CALL THE HOOKS
$hooks->invoke('hook_mail_delete_for_real', array($mail_id, $mailinfos['address'].'@'.$mailinfos['domain'] ));
// Bye bye
echo "\n\n";
?>
......@@ -43,6 +43,7 @@ echo $$ > "$LOCK_FILE"
# If process is interrupted, the row isn't deleted. We have to force it by reseting mail_action to 'DELETE'
mysql_query "SELECT id, quote(replace(path,'!','\\!')) FROM mailbox WHERE mail_action='DELETE';"|while read id path ; do
mysql_query "UPDATE mailbox set mail_action='DELETING' WHERE id=$id;"
/usr/lib/alternc/mail_dodelete.php "$id"
# Check there is no instruction of changing directory, and check the first part of the string
if [[ "$path" =~ '../' || "$path" =~ '/..' || ! "'$ALTERNC_MAIL_LOC" == "${path:0:$((${#ALTERNC_MAIL_LOC}+1))}" ]] ; then
# The path will be empty for mailman addresses
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment