From da297dd0b801238dc73abfe09d78eeef11ba4ce9 Mon Sep 17 00:00:00 2001 From: tokul Date: Thu, 14 Jul 2005 14:54:57 +0000 Subject: [PATCH] reduced setup.php size. added checks for disabled plugin in spamcop.php. listed used hooks and pref keys in README git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@9777 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- plugins/spamcop/README | 19 ++- plugins/spamcop/functions.php | 215 ++++++++++++++++++++++++++++++++++ plugins/spamcop/index.php | 5 +- plugins/spamcop/options.php | 23 ++-- plugins/spamcop/setup.php | 114 ++---------------- plugins/spamcop/spamcop.php | 58 ++------- 6 files changed, 261 insertions(+), 173 deletions(-) create mode 100644 plugins/spamcop/functions.php diff --git a/plugins/spamcop/README b/plugins/spamcop/README index 82af1aea..c80da441 100755 --- a/plugins/spamcop/README +++ b/plugins/spamcop/README @@ -26,9 +26,6 @@ can then just delete the forwarder and get a new one. Make sure to use the forwarder to sign up for SpamCop and get the required information for the plugin. -This plugin is also an example of how to use the identity hooks. Just open -up setup.php and read the comments. - Installation ============ @@ -36,3 +33,19 @@ Installation Go back to the main directory, run configure and add the plugin. +API +=== + +SquirrelMail hooks used by plugin: +* loading_prefs +* optpage_register_block +* read_body_header_right +* compose_send + +Plugin preference keys: +* spamcop_enabled +* spamcop_delete +* spamcop_save +* spamcop_method +* spamcop_type +* spamcop_id diff --git a/plugins/spamcop/functions.php b/plugins/spamcop/functions.php new file mode 100644 index 00000000..2a78c795 --- /dev/null +++ b/plugins/spamcop/functions.php @@ -0,0 +1,215 @@ +\n"; + + /* + Catch situation when user uses quick_email and does not update + preferences. User gets web_form link. If prefs are set to + quick_email format - they will be updated after clicking the link + */ + if (! $spamcop_quick_report && $spamcop_method=='quick_email') { + $spamcop_method = 'web_form'; + } + + // Javascript is used only in web based reporting + // don't insert javascript if javascript is disabled + if ($spamcop_method == 'web_form' && $javascript_on) { +?> + + _("SpamCop - Spam Reporting"), + 'url' => '../plugins/spamcop/options.php', + 'desc' => _("Help fight the battle against unsolicited email. SpamCop reads the spam email and determines the correct addresses to send complaints to. Quite fast, really smart, and easy to use."), + 'js' => false + ); +} + +/** + * Process messages that are submitted by email. + * + * Delete spam if user wants to delete it. Don't save submitted emails. + * Implement overrides that fix compose.php behavior. + * @since 1.5.1 + * @access private + */ +function spamcop_while_sending_function() { + global $mailbox, $spamcop_delete, $spamcop_save, $spamcop_is_composing, $auto_expunge, + $username, $key, $imapServerAddress, $imapPort; + + if (sqgetGlobalVar('spamcop_is_composing' , $spamcop_is_composing)) { + // delete spam message + if ($spamcop_delete) { + $imapConnection = sqimap_login($username, $key, $imapServerAddress, + $imapPort, 0); + sqimap_mailbox_select($imapConnection, $mailbox); + sqimap_msgs_list_delete($imapConnection, $mailbox, array($spamcop_is_composing)); + if ($auto_expunge) + sqimap_mailbox_expunge($imapConnection, $mailbox, true); + } + if (! $spamcop_save) { + // disable use of send folder. + // Temporally override in order to disable saving of 'reply anyway' messages. + global $default_move_to_sent; + $default_move_to_sent=false; + } + // change default email composition setting. Plugin always operates in right frame. + // make sure that compose.php redirects to right page. Temporally override. + global $compose_new_win; + $compose_new_win = false; + } +} + +/** + * Internal spamcop plugin function. + * + * It is used to display similar action links. + * @access private + */ +function spamcop_enable_disable($option,$disable_action,$enable_action) { + if ($option) { + $ret= _("Enabled") . " (" . _("Disable it") . ")\n"; + } else { + $ret = _("Disabled") . " (" . _("Enable it") . ")\n"; + } + return $ret; +} + +/** + * Stores message in attachment directory, when email based reports are used + * @access private + */ +function getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, + $passed_ent_id='', $imapConnection) { + global $attachment_dir, $username; + + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + if (!$passed_ent_id) { + $body_a = sqimap_run_command($imapConnection, + 'FETCH '.$passed_id.' RFC822', + TRUE, $response, $readmessage, + TRUE); + } else { + $body_a = sqimap_run_command($imapConnection, + 'FETCH '.$passed_id.' BODY['.$passed_ent_id.']', + TRUE, $response, $readmessage,TRUE); + $message = $message->parent; + } + if ($response == 'OK') { + array_shift($body_a); + $body = implode('', $body_a) . "\r\n"; + + $localfilename = GenerateRandomString(32, 'FILE', 7); + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + $fp = fopen( $full_localfilename, 'w'); + fwrite ($fp, $body); + fclose($fp); + + /* dirty relative dir fix */ + if (substr($attachment_dir,0,3) == '../') { + $attachment_dir = substr($attachment_dir,3); + $hashed_attachment_dir = getHashedDir($username, $attachment_dir); + } + $full_localfilename = "$hashed_attachment_dir/$localfilename"; + + $composeMessage->initAttachment('message/rfc822','email.txt', + $full_localfilename); + } + return $composeMessage; +} +?> \ No newline at end of file diff --git a/plugins/spamcop/index.php b/plugins/spamcop/index.php index 04982122..42c5c79a 100644 --- a/plugins/spamcop/index.php +++ b/plugins/spamcop/index.php @@ -11,7 +11,6 @@ * @subpackage spamcop */ - header("Location:../../src/login.php\n\n"); - exit(); - +header("Location:../../index.php\n\n"); +exit(); ?> \ No newline at end of file diff --git a/plugins/spamcop/options.php b/plugins/spamcop/options.php index fea10414..ce58c776 100755 --- a/plugins/spamcop/options.php +++ b/plugins/spamcop/options.php @@ -12,25 +12,16 @@ /** @ignore */ define('SM_PATH','../../'); +/* SquirrelMail functions */ require_once(SM_PATH . 'include/validate.php'); - -/** - * Internal spamcop plugin function. - * - * It is used to display similar action links. - * @access private - */ -function spamcop_enable_disable($option,$disable_action,$enable_action) { - if ($option) { - $ret= _("Enabled") . " (" . _("Disable it") . ")\n"; - } else { - $ret = _("Disabled") . " (" . _("Enable it") . ")\n"; - } - return $ret; -} +/* plugin functions */ +include_once(SM_PATH . 'plugins/spamcop/functions.php'); displayPageHeader($color, 'None'); +/** is spamcop plugin disabled */ +// option changes do nothing, if read_body_header_right hook is not active. + /* globals */ sqgetGlobalVar('action', $action); sqgetGlobalVar('meth', $meth); @@ -82,7 +73,7 @@ switch ($action) { } global $spamcop_enabled, $spamcop_delete, $spamcop_save, $spamcop_quick_report; -spamcop_load(); +spamcop_load_function(); ?>
diff --git a/plugins/spamcop/setup.php b/plugins/spamcop/setup.php index f62b441f..787dbf23 100755 --- a/plugins/spamcop/setup.php +++ b/plugins/spamcop/setup.php @@ -9,10 +9,6 @@ * @subpackage spamcop */ -/** Disable Quick Reporting by default */ -global $spamcop_quick_report; -$spamcop_quick_report = false; - /** * Initialize the plugin * @access private @@ -30,36 +26,13 @@ function squirrelmail_plugin_init_spamcop() { 'spamcop_while_sending'; } - /** * Loads spamcop settings and validates some of values (make '' into 'default', etc.) * @access private */ function spamcop_load() { - global $username, $data_dir, $spamcop_enabled, $spamcop_delete, $spamcop_save, - $spamcop_method, $spamcop_id, $spamcop_quick_report, $spamcop_type; - - $spamcop_enabled = getPref($data_dir, $username, 'spamcop_enabled'); - $spamcop_delete = getPref($data_dir, $username, 'spamcop_delete'); - $spamcop_save = getPref($data_dir, $username, 'spamcop_save',true); - $spamcop_method = getPref($data_dir, $username, 'spamcop_method'); - $spamcop_type = getPref($data_dir, $username, 'spamcop_type'); - $spamcop_id = getPref($data_dir, $username, 'spamcop_id'); - if ($spamcop_method == '') { - // Default to web_form. It is faster. - $spamcop_method = 'web_form'; - setPref($data_dir, $username, 'spamcop_method', $spamcop_method); - } - if (! $spamcop_quick_report && $spamcop_method=='quick_email') { - $spamcop_method = 'web_form'; - setPref($data_dir, $username, 'spamcop_method', $spamcop_method); - } - if ($spamcop_type == '') { - $spamcop_type = 'free'; - setPref($data_dir, $username, 'spamcop_type', $spamcop_type); - } - if ($spamcop_id == '') - $spamcop_enabled = 0; + include_once(SM_PATH . 'plugins/spamcop/functions.php'); + spamcop_load_function(); } @@ -68,49 +41,8 @@ function spamcop_load() { * @access private */ function spamcop_show_link() { - global $spamcop_enabled, $spamcop_method, $spamcop_quick_report,$javascript_on; - - if (! $spamcop_enabled) - return; - - /* GLOBALS */ - sqgetGlobalVar('passed_id', $passed_id, SQ_FORM); - sqgetGlobalVar('passed_ent_id',$passed_ent_id,SQ_FORM); - sqgetGlobalVar('mailbox', $mailbox, SQ_FORM); - if ( sqgetGlobalVar('startMessage', $startMessage, SQ_FORM) ) { - $startMessage = (int)$startMessage; - } - /* END GLOBALS */ - - // catch unset passed_ent_id - if (! sqgetGlobalVar('passed_ent_id', $passed_ent_id, SQ_FORM) ) { - $passed_ent_id = 0; - } - - echo "
\n"; - - /* - Catch situation when user uses quick_email and does not update - preferences. User gets web_form link. If prefs are set to - quick_email format - they will be updated after clicking the link - */ - if (! $spamcop_quick_report && $spamcop_method=='quick_email') { - $spamcop_method = 'web_form'; - } - - // Javascript is used only in web based reporting - // don't insert javascript if javascript is disabled - if ($spamcop_method == 'web_form' && $javascript_on) { -?> - -"); * @access private */ function spamcop_options() { - global $optpage_blocks; - - $optpage_blocks[] = array( - 'name' => _("SpamCop - Spam Reporting"), - 'url' => '../plugins/spamcop/options.php', - 'desc' => _("Help fight the battle against unsolicited email. SpamCop reads the spam email and determines the correct addresses to send complaints to. Quite fast, really smart, and easy to use."), - 'js' => false - ); + include_once(SM_PATH . 'plugins/spamcop/functions.php'); + spamcop_options_function(); } /** - * When we send the email, we optionally trash it then too + * Process messages submitted by email * @access private */ function spamcop_while_sending() { - global $mailbox, $spamcop_delete, $spamcop_save, $spamcop_is_composing, $auto_expunge, - $username, $key, $imapServerAddress, $imapPort; - - if (sqgetGlobalVar('spamcop_is_composing' , $spamcop_is_composing)) { - // delete spam message - if ($spamcop_delete) { - $imapConnection = sqimap_login($username, $key, $imapServerAddress, - $imapPort, 0); - sqimap_mailbox_select($imapConnection, $mailbox); - sqimap_msgs_list_delete($imapConnection, $mailbox, array($spamcop_is_composing)); - if ($auto_expunge) - sqimap_mailbox_expunge($imapConnection, $mailbox, true); - } - if (! $spamcop_save) { - // disable use of send folder. - // Temporally override in order to disable saving of 'reply anyway' messages. - global $default_move_to_sent; - $default_move_to_sent=false; - } - // change default email composition setting. Plugin always operates in right frame. - // make sure that compose.php redirects to right page. Temporally override. - global $compose_new_win; - $compose_new_win = false; - } + include_once(SM_PATH . 'plugins/spamcop/functions.php'); + spamcop_while_sending_function(); } ?> \ No newline at end of file diff --git a/plugins/spamcop/spamcop.php b/plugins/spamcop/spamcop.php index de8e06a7..15a23fc2 100644 --- a/plugins/spamcop/spamcop.php +++ b/plugins/spamcop/spamcop.php @@ -12,53 +12,12 @@ /** @ignore */ define('SM_PATH','../../'); - /* SquirrelMail required files. */ +/* SquirrelMail required files. */ require_once(SM_PATH . 'include/validate.php'); -require_once(SM_PATH . 'functions/imap.php'); - -/** - * Stores message in attachment directory, when email based reports are used - * @access private - */ -function getMessage_RFC822_Attachment($message, $composeMessage, $passed_id, - $passed_ent_id='', $imapConnection) { - global $attachment_dir, $username; - - $hashed_attachment_dir = getHashedDir($username, $attachment_dir); - if (!$passed_ent_id) { - $body_a = sqimap_run_command($imapConnection, - 'FETCH '.$passed_id.' RFC822', - TRUE, $response, $readmessage, - TRUE); - } else { - $body_a = sqimap_run_command($imapConnection, - 'FETCH '.$passed_id.' BODY['.$passed_ent_id.']', - TRUE, $response, $readmessage,TRUE); - $message = $message->parent; - } - if ($response == 'OK') { - array_shift($body_a); - $body = implode('', $body_a) . "\r\n"; - - $localfilename = GenerateRandomString(32, 'FILE', 7); - $full_localfilename = "$hashed_attachment_dir/$localfilename"; - $fp = fopen( $full_localfilename, 'w'); - fwrite ($fp, $body); - fclose($fp); - - /* dirty relative dir fix */ - if (substr($attachment_dir,0,3) == '../') { - $attachment_dir = substr($attachment_dir,3); - $hashed_attachment_dir = getHashedDir($username, $attachment_dir); - } - $full_localfilename = "$hashed_attachment_dir/$localfilename"; - - $composeMessage->initAttachment('message/rfc822','email.txt', - $full_localfilename); - } - return $composeMessage; -} - +include_once(SM_PATH . 'functions/display_messages.php'); +include_once(SM_PATH . 'functions/imap.php'); +/* plugin functions */ +include_once(SM_PATH . 'plugins/spamcop/functions.php'); /* GLOBALS */ @@ -97,6 +56,13 @@ if ($js_web) { displayPageHeader($color,$mailbox); } +/** is spamcop plugin disabled */ +if (! is_plugin_enabled('spamcop')) { + error_box(_("Plugin is disabled."),$color); + echo "\n\n"; + exit(); +} + $imap_stream = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0); sqimap_mailbox_select($imap_stream, $mailbox); -- 2.25.1