diff --git a/e107_plugins/pm/languages/English_admin_pm.php b/e107_plugins/pm/languages/English_admin_pm.php index 1e7698311..47cffe043 100755 --- a/e107_plugins/pm/languages/English_admin_pm.php +++ b/e107_plugins/pm/languages/English_admin_pm.php @@ -81,8 +81,8 @@ define('ADLAN_PM_74', 'Removed --COUNT-- messages sent by deleted users'); define('ADLAN_PM_75', 'Removed --COUNT-- messages received by deleted users'); define('ADLAN_PM_76', 'No changes made - nothing logged'); define('ADLAN_PM_77', '(Empty all fields and Update to delete a limit)'); -define('ADLAN_PM_78', ''); -define('ADLAN_PM_79', ''); +define('ADLAN_PM_78', 'Check attachments'); +define('ADLAN_PM_79', '--ORPHANS-- unused attachments deleted. --MISSING-- missing attachments noted'); define('ADLAN_PM_80', ''); ?> diff --git a/e107_plugins/pm/pm_conf.php b/e107_plugins/pm/pm_conf.php index 3d2a833f3..848fb9162 100755 --- a/e107_plugins/pm/pm_conf.php +++ b/e107_plugins/pm/pm_conf.php @@ -9,8 +9,8 @@ * PM Plugin - administration * * $Source: /cvs_backup/e107_0.8/e107_plugins/pm/pm_conf.php,v $ - * $Revision: 1.8 $ - * $Date: 2009-12-11 22:33:15 $ + * $Revision: 1.9 $ + * $Date: 2009-12-13 12:32:28 $ * $Author: e107steved $ */ @@ -115,6 +115,10 @@ if (isset($_POST['pm_maint_execute'])) { $maintOpts['expired'] = 1; } + if (vartrue($_POST['pm_maint_attach'])) + { + $maintOpts['attach'] = 1; + } $result = doMaint($maintOpts, $pm_prefs); if (is_array($result)) { @@ -162,9 +166,10 @@ if(isset($_POST['addlimit'])) if(isset($_POST['updatelimits'])) { - if($pref['pm_limits'] != $_POST['pm_limits']) + $limitVal = intval($_POST['pm_limits']); + if($pref['pm_limits'] != $limitVal) { - $pref['pm_limits'] = $_POST['pm_limits']; + $pref['pm_limits'] = $limitVal; save_prefs(); $emessage->add(ADLAN_PM_8, E_MESSAGE_SUCCESS); } @@ -509,7 +514,8 @@ function show_maint($pmPrefs) ".ADLAN_PM_65." ".yes_no('pm_maint_blocked', '0')." - "; + + "; if ($pmPrefs['read_timeout'] || $pmPrefs['unread_timeout']) { @@ -521,6 +527,10 @@ function show_maint($pmPrefs) } $txt .= " + + ".ADLAN_PM_78." + ".yes_no('pm_maint_attach', '0')." + @@ -582,6 +592,7 @@ function doMaint($opts, $pmPrefs) $db2 = new db(); // Will usually need a second DB object to avoid over load $start = 0; // Use to ensure we get different log times + if (isset($opts['sent'])) // Want pm_from = deleted user and pm_read_del = 1 { $cnt = 0; @@ -613,7 +624,7 @@ function doMaint($opts, $pmPrefs) } } } - $start = max($start + 1, $time); + $start = max($start + 1, time()); $results[E_MESSAGE_SUCCESS][$start] = str_replace('--COUNT--', $cnt, ADLAN_PM_75); } @@ -623,27 +634,28 @@ function doMaint($opts, $pmPrefs) if ($res = $e107->sql->db_Select_gen("DELETE `#private_msg_block` FROM `#private_msg_block` LEFT JOIN `#user` ON `#private_msg_block`.`pm_block_from` = `#user`.`user_id` WHERE `#user`.`user_id` IS NULL")) { - $start = max($start + 1, $time); + $start = max($start + 1, time()); $results[E_MESSAGE_ERROR][$start] = str_replace(array('--NUM--', '--TEXT--'), array($this->sql->getLastErrorNum, $this->sql->getLastErrorText), ADLAN_PM_70); } else { - $start = max($start + 1, $time); + $start = max($start + 1, time()); $results[E_MESSAGE_SUCCESS][$start] = str_replace('--COUNT--', $res, ADLAN_PM_69); } if ($res = $e107->sql->db_Select_gen("DELETE `#private_msg_block` FROM `#private_msg_block` LEFT JOIN `#user` ON `#private_msg_block`.`pm_block_to` = `#user`.`user_id` WHERE `#user`.`user_id` IS NULL")) { - $start = max($start + 1, $time); + $start = max($start + 1, time()); $results[E_MESSAGE_ERROR][$start] = str_replace(array('--NUM--', '--TEXT--'), array($this->sql->getLastErrorNum, $this->sql->getLastErrorText), ADLAN_PM_70); } else { - $start = max($start + 1, $time); + $start = max($start + 1, time()); $results[E_MESSAGE_SUCCESS][$start] = str_replace('--COUNT--', $res, ADLAN_PM_68); } } + if (isset($opts['expired'])) { $del_qry = array(); @@ -673,17 +685,74 @@ function doMaint($opts, $pmPrefs) } } } - $start = max($start + 1, $time); + $start = max($start + 1, time()); $results[E_MESSAGE_SUCCESS][$start] = str_replace('--COUNT--', $cnt, ADLAN_PM_73); } else { - $start = max($start + 1, $time); + $start = max($start + 1, time()); $results[E_MESSAGE_ERROR][$start] = ADLAN_PM_72; } } + if (isset($opts['attach'])) + { // Check for orphaned and missing attachments + require_once(e_HANDLER.'file_class.php'); + $fl = new e_file(); + $missing = array(); + $orphans = array(); + $fileArray = $fl->get_files(e_PLUGIN.'pm/attachments'); + if ($db2->db_Select('private_msg', 'pm_id, pm_attachments', "pm_attachments != ''")) + { + while ($row = $db2->db_Fetch(MYSQL_ASSOC)) + { + $attachList = explode(chr(0), $row['pm_attachments']); + foreach ($attachList as $a) + { + $found = FALSE; + foreach ($fileArray as $k => $fd) + { + if ($fd['fname'] == $a) + { + $found = TRUE; + unset($fileArray[$k]); + break; + } + } + if (!$found) + { + $missing[] = $row['pm_id'].':'.$a; + } + } + } + } + // Any files left in $fileArray now are unused + if (count($fileArray)) + { + foreach ($fileArray as $k => $fd) + { + unlink($fd['path'].$fd['fname']); + $orphans[] = $fd['fname']; + } + } + $attachMessage = str_replace(array('--ORPHANS--', '--MISSING--'), array(count($orphans), count($missing)), ADLAN_PM_79); + if (TRUE) + { // Mostly for testing - probably disable this + if (count($orphans)) + { + $attachMessage .= '[!br!]Orphans:[!br!]'.implode('[!br!]', $orphans); + } + if (count($missing)) + { + $attachMessage .= '[!br!]Missing:[!br!]'.implode('[!br!]', $missing); + } + } + $start = max($start + 1, time()); + $results[E_MESSAGE_SUCCESS][$start] = $attachMessage; + } + + $e107->admin_log->logArrayAll('PM_ADM_03',makeLogEntry($results)); return $results; } diff --git a/e107_plugins/pm/pm_sql.php b/e107_plugins/pm/pm_sql.php index 7f6548112..a3c4bcc0a 100755 --- a/e107_plugins/pm/pm_sql.php +++ b/e107_plugins/pm/pm_sql.php @@ -1,24 +1,27 @@ -CREATE TABLE private_msg ( - pm_id int(10) unsigned NOT NULL auto_increment, - pm_from int(10) unsigned NOT NULL default '0', - pm_to varchar(250) NOT NULL default '', - pm_sent int(10) unsigned NOT NULL default '0', - pm_read int(10) unsigned NOT NULL default '0', - pm_subject text NOT NULL, - pm_text text NOT NULL, - pm_sent_del tinyint(1) unsigned NOT NULL default '0', - pm_read_del tinyint(1) unsigned NOT NULL default '0', - pm_attachments text NOT NULL, - pm_option varchar(250) NOT NULL default '', - pm_size int(10) unsigned NOT NULL default '0', - PRIMARY KEY (pm_id) -) TYPE=MyISAM AUTO_INCREMENT=1 ; - -CREATE TABLE private_msg_block ( - pm_block_id int(10) unsigned NOT NULL auto_increment, - pm_block_from int(10) unsigned NOT NULL default '0', - pm_block_to int(10) unsigned NOT NULL default '0', - pm_block_datestamp int(10) unsigned NOT NULL default '0', - pm_block_count int(10) unsigned NOT NULL default '0', - PRIMARY KEY (pm_block_id) -) TYPE=MyISAM AUTO_INCREMENT=1 ; +CREATE TABLE private_msg ( + pm_id int(10) unsigned NOT NULL auto_increment, + pm_from int(10) unsigned NOT NULL default '0', + pm_to varchar(250) NOT NULL default '', + pm_sent int(10) unsigned NOT NULL default '0', /* Date sent */ + pm_read int(10) unsigned NOT NULL default '0', /* Date read */ + pm_subject text NOT NULL, + pm_text text NOT NULL, + pm_sent_del tinyint(1) unsigned NOT NULL default '0', /* Set when can delete */ + pm_read_del tinyint(1) unsigned NOT NULL default '0', /* set when can delete */ + pm_attachments text NOT NULL, + pm_option varchar(250) NOT NULL default '', + pm_size int(10) unsigned NOT NULL default '0', + PRIMARY KEY (pm_id) +) TYPE=MyISAM AUTO_INCREMENT=1 ; + + + +CREATE TABLE private_msg_block ( + pm_block_id int(10) unsigned NOT NULL auto_increment, + pm_block_from int(10) unsigned NOT NULL default '0', + pm_block_to int(10) unsigned NOT NULL default '0', + pm_block_datestamp int(10) unsigned NOT NULL default '0', + pm_block_count int(10) unsigned NOT NULL default '0', /* Not sure what this is for */ + PRIMARY KEY (pm_block_id) +) TYPE=MyISAM AUTO_INCREMENT=1 ; +