diff --git a/e107_plugins/pm/languages/English_admin_pm.php b/e107_plugins/pm/languages/English_admin_pm.php
index 7420857e9..1e7698311 100755
--- a/e107_plugins/pm/languages/English_admin_pm.php
+++ b/e107_plugins/pm/languages/English_admin_pm.php
@@ -6,7 +6,7 @@ define('ADLAN_PM_3', "PM settings not found, default values set");
define('ADLAN_PM_4', "Options Updated");
define('ADLAN_PM_5', "Limit for selected userclass already exists");
define('ADLAN_PM_6', "Limit successfully added");
-define('ADLAN_PM_7', "Limit not added - unknown error");
+define('ADLAN_PM_7', "Limit not added/updated - unknown error");
define('ADLAN_PM_8', "Limit status updated");
define('ADLAN_PM_9', " - Limit successfully removed");
define('ADLAN_PM_10', " - Limit not removed - unknown error");
@@ -45,19 +45,44 @@ define('ADLAN_PM_42', "Update Limits");
define('ADLAN_PM_43', "Add New Limit");
define('ADLAN_PM_44', "seconds");
define('ADLAN_PM_45', "Limit PM By: ");
-define('ADLAN_PM_46', "PM Conversion");
-define('ADLAN_PM_47', "You do not appear to have any old messages from previous versions, it is safe to uninstall the old plugin");
-define('ADLAN_PM_48', "You have {OLDCOUNT} messages from the older version, please decide what you would like to do with these messages
If converting messages, any message successfully converted will be removed from old system.");
-define('ADLAN_PM_49', "Convert to new PM");
-define('ADLAN_PM_50', "Discard old messages");
-define('ADLAN_PM_51', "PM #{PMNUM} not converted");
-define('ADLAN_PM_52', "messages converted");
-define('ADLAN_PM_53', "No records found to convert.");
+
+//define('ADLAN_PM_46', "PM Conversion");
+//define('ADLAN_PM_47', "You do not appear to have any old messages from previous versions, it is safe to uninstall the old plugin");
+//define('ADLAN_PM_48', "You have {OLDCOUNT} messages from the older version, please decide what you would like to do with these messages
If converting messages, any message successfully converted will be removed from old system.");
+//define('ADLAN_PM_49', "Convert to new PM");
+//define('ADLAN_PM_50', "Discard old messages");
+//define('ADLAN_PM_51', "PM #{PMNUM} not converted");
+//define('ADLAN_PM_52', "messages converted");
+//define('ADLAN_PM_53', "No records found to convert.");
define('ADLAN_PM_54', "Main settings");
define('ADLAN_PM_55', "Limits");
-define('ADLAN_PM_56', "Conversion");
+//define('ADLAN_PM_56', "Conversion");
define('ADLAN_PM_57', "This plugin is a fully featured Private Messaging system.");
define('ADLAN_PM_58', "Private Messenger");
+
+define('ADLAN_PM_59', 'Maintenance');
+define('ADLAN_PM_60', 'PM Maintenance');
+define('ADLAN_PM_61', 'Execute');
+define('ADLAN_PM_62', 'These options remove transactions concerned with deleted users from the PM database tables');
+define('ADLAN_PM_63', 'Messages sent');
+define('ADLAN_PM_64', 'Messages received');
+define('ADLAN_PM_65', 'User blocks');
+define('ADLAN_PM_66', 'No maintenance tasks specified');
+define('ADLAN_PM_67', 'PM DB maintenance started');
+define('ADLAN_PM_68', '--COUNT-- blocks to deleted users removed');
+define('ADLAN_PM_69', '--COUNT-- blocks from deleted users removed');
+define('ADLAN_PM_70', 'Database error --NUM--: --TEXT-- removing user blocks');
+define('ADLAN_PM_71', 'Time-expired messages');
+define('ADLAN_PM_72', 'No PM timeouts set');
+define('ADLAN_PM_73', '--COUNT-- time-expired PMs deleted');
+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_80', '');
+
?>
diff --git a/e107_plugins/pm/plugin.xml b/e107_plugins/pm/plugin.xml
index 302004963..ce02954a8 100755
--- a/e107_plugins/pm/plugin.xml
+++ b/e107_plugins/pm/plugin.xml
@@ -1,9 +1,12 @@
-
+
ADLAN_PM_57users
+
+
+
ADLAN_PM_2
diff --git a/e107_plugins/pm/pm_class.php b/e107_plugins/pm/pm_class.php
index b39719725..826d23abd 100755
--- a/e107_plugins/pm/pm_class.php
+++ b/e107_plugins/pm/pm_class.php
@@ -9,8 +9,8 @@
*
*
* $Source: /cvs_backup/e107_0.8/e107_plugins/pm/pm_class.php,v $
- * $Revision: 1.9 $
- * $Date: 2009-12-10 20:40:38 $
+ * $Revision: 1.10 $
+ * $Date: 2009-12-11 22:33:15 $
* $Author: e107steved $
*/
@@ -142,6 +142,16 @@ class private_message
return $ret;
}
+
+
+ /**
+ * Delete a PM from a user's inbox/outbox.
+ * PM is only actually deleted from DB once both sender and recipient have marked it as deleted
+ * When physically deleted, any attachments are deleted as well
+ *
+ * @param integer $pmid - ID of the PM
+ * @return boolean|string - FALSE if PM not found, or other DB error. String if successful
+ */
function del($pmid)
{
global $sql;
@@ -193,8 +203,11 @@ class private_message
}
return $ret;
}
+ return FALSE;
}
+
+
function pm_send_notify($uid, $pminfo, $pmid, $attach_count = 0)
{
require_once(e_HANDLER.'mail.php');
diff --git a/e107_plugins/pm/pm_conf.php b/e107_plugins/pm/pm_conf.php
index cbd037605..3d2a833f3 100755
--- a/e107_plugins/pm/pm_conf.php
+++ b/e107_plugins/pm/pm_conf.php
@@ -6,20 +6,31 @@
* Released under the terms and conditions of the
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
*
- *
+ * PM Plugin - administration
*
* $Source: /cvs_backup/e107_0.8/e107_plugins/pm/pm_conf.php,v $
- * $Revision: 1.7 $
- * $Date: 2009-12-10 20:40:38 $
+ * $Revision: 1.8 $
+ * $Date: 2009-12-11 22:33:15 $
* $Author: e107steved $
*/
+
+/*
+TODO:
+1. Limits page needs some lines round the table
+2. Limits page - test
+3. Maintenance page - to be tested
+4. Check operation of user dropdown bit
+5. User option to enable/disable email notification of PMs
+6. Cron-triggered bulk send.
+7. Is it right that limits are saved in $pref, not $pm_prefs? If not, import routine/change
+8. Put prefs into plugin.xml?
+*/
+
+
$retrieve_prefs[] = 'pm_prefs';
$eplug_admin = TRUE;
require_once('../../class2.php');
-require_once(e_PLUGIN.'pm/pm_class.php');
-require_once(e_HANDLER.'userclass_class.php');
-require_once(e_HANDLER.'form_handler.php');
if (!e107::isInstalled('pm') || !getperms('P'))
{
@@ -27,6 +38,12 @@ if (!e107::isInstalled('pm') || !getperms('P'))
exit;
}
+require_once(e_PLUGIN.'pm/pm_class.php');
+require_once(e_HANDLER.'userclass_class.php');
+require_once(e_HANDLER.'form_handler.php');
+require_once (e_HANDLER.'message_handler.php');
+$emessage = &eMessage :: getInstance();
+
$action = e_QUERY;
require_once(e_ADMIN.'auth.php');
@@ -44,7 +61,8 @@ if(!is_array($pm_prefs))
require_once(e_PLUGIN.'pm/pm_default.php');
$pm_prefs = pm_set_default_prefs(); // Use the default settings
$sysprefs->setArray('pm_prefs');
- $message = ADLAN_PM_3;
+ $emessage->add(ADLAN_PM_3, E_MESSAGE_INFO);
+ $e107->admin_log->log_event('PM_ADM_01', '');
}
@@ -54,30 +72,90 @@ if(!is_array($pm_prefs))
if (isset($_POST['update_prefs']))
{
- foreach($_POST['option'] as $k => $v)
+ $temp = array();
+ foreach($_POST as $k => $v)
{
- $pm_prefs[$k] = $v;
+ if (strpos($k, 'pm_option-') === 0)
+ {
+ $k = str_replace('pm_option-','',$k);
+ $temp[$k] = $v;
+ }
+ }
+ if ($e107->admin_log->logArrayDiffs($temp, $pm_prefs, 'PM_ADM_02'))
+ {
+ $sysprefs->setArray('pm_prefs');
+ $emessage->add(ADLAN_PM_4, E_MESSAGE_SUCCESS);
+ }
+ else
+ {
+ $emessage->add(ADLAN_PM_76, E_MESSAGE_INFO);
}
- $sysprefs->setArray('pm_prefs');
- $message = ADLAN_PM_4;
}
+
+// Mantenance options
+if (isset($_POST['pm_maint_execute']))
+{
+ $maintOpts = array();
+ $emessage->add('Starting maintenance', E_MESSAGE_INFO);
+ if (vartrue($_POST['pm_maint_sent']))
+ {
+ $maintOpts['sent'] = 1;
+ }
+ if (vartrue($_POST['pm_maint_rec']))
+ {
+ $maintOpts['rec'] = 1;
+ }
+ if (vartrue($_POST['pm_maint_blocked']))
+ {
+ $maintOpts['blocked'] = 1;
+ }
+ if (vartrue($_POST['pm_maint_expired']))
+ {
+ $maintOpts['expired'] = 1;
+ }
+ $result = doMaint($maintOpts, $pm_prefs);
+ if (is_array($result))
+ {
+ foreach ($result as $k => $ma)
+ {
+ foreach ($ma as $m)
+ {
+ $emessage->add($m, $k);
+ }
+ }
+ }
+}
+
+
+
if(isset($_POST['addlimit']))
{
- if($sql->db_Select('generic','gen_id',"gen_type = 'pm_limit' AND gen_datestamp = {$_POST['newlimit_class']}"))
+ $id = intval($_POST['newlimit_class']);
+ if($sql->db_Select('generic','gen_id',"gen_type = 'pm_limit' AND gen_datestamp = ".$id))
{
- $message = ADLAN_PM_5;
+ $emessage->add(ADLAN_PM_5, E_MESSAGE_INFO); // 'Limit for selected user class already exists'
}
else
{
- if($sql->db_Insert('generic',"0, 'pm_limit', '{$_POST['newlimit_class']}', '{$_POST['new_inbox_count']}', '{$_POST['new_outbox_count']}', '{$_POST['new_inbox_size']}', '{$_POST['new_outbox_size']}'"))
+ $limArray = array( // Strange field names because we use the 'generic' table. But at least it documents the correlation
+ 'gen_type' => 'pm_limit',
+ 'gen_datestamp' => intval($_POST['newlimit_class']),
+ 'gen_user_id' => intval($_POST['new_inbox_count']),
+ 'gen_ip' => intval($_POST['new_outbox_count']),
+ 'gen_intdata' => intval($_POST['new_inbox_size']),
+ 'gen_chardata' => intval($_POST['new_outbox_size'])
+ );
+ if($sql->db_Insert('generic', $limArray))
{
- $message = ADLAN_PM_6;
+ $e107->admin_log->logArrayAll('PM_ADM_05', $limArray);
+ $emessage->add(ADLAN_PM_6, E_MESSAGE_SUCCESS);
}
else
{
- $message = ADLAN_PM_7;
+ $e107->admin_log->log_event('PM_ADM_08', '');
+ $emessage->add(ADLAN_PM_7, E_MESSAGE_ERROR);
}
}
}
@@ -88,136 +166,166 @@ if(isset($_POST['updatelimits']))
{
$pref['pm_limits'] = $_POST['pm_limits'];
save_prefs();
- $message .= ADLAN_PM_8." ";
+ $emessage->add(ADLAN_PM_8, E_MESSAGE_SUCCESS);
}
foreach(array_keys($_POST['inbox_count']) as $id)
{
- if($_POST['inbox_count'][$id] == "" && $_POST['outbox_count'][$id] == "" && $_POST['inbox_size'][$id] == "" && $_POST['outbox_size'][$id] == "")
+ $id = intval($id);
+ if($_POST['inbox_count'][$id] == '' && $_POST['outbox_count'][$id] == '' && $_POST['inbox_size'][$id] == '' && $_POST['outbox_size'][$id] == '')
{
//All entries empty - Remove record
- if($sql->db_Delete('generic',"gen_id = {$id}"))
+ if($sql->db_Delete('generic','gen_id = '.$id))
{
- $message .= $id.ADLAN_PM_9." ";
+ $e107->admin_log->log_event('PM_ADM_07', 'ID: '.$id);
+ $emessage->add($id.ADLAN_PM_9, E_MESSAGE_SUCCESS);
}
else
{
- $message .= $id.ADLAN_PM_10." ";
+ $e107->admin_log->log_event('PM_ADM_10', '');
+ $emessage->add($id.ADLAN_PM_10, E_MESSAGE_ERROR);
}
}
else
{
- $sql->db_Update('generic',"gen_user_id = '{$_POST['inbox_count'][$id]}', gen_ip = '{$_POST['outbox_count'][$id]}', gen_intdata = '{$_POST['inbox_size'][$id]}', gen_chardata = '{$_POST['outbox_size'][$id]}' WHERE gen_id = {$id}");
- $message .= $id.ADLAN_PM_11." ";
+ $limArray = array( // Strange field names because we use the 'generic' table. But at least it documents the correlation
+ 'gen_user_id' => intval($_POST['inbox_count'][$id]),
+ 'gen_ip' => intval($_POST['outbox_count'][$id]),
+ 'gen_intdata' => intval($_POST['inbox_size'][$id]),
+ 'gen_chardata' => intval($_POST['outbox_size'][$id])
+ );
+ if ($sql->db_Update('generic',array('data' => $limArray, 'WHERE' => 'gen_id = '.$id)))
+ {
+ $e107->admin_log->logArrayAll('PM_ADM_06', $limArray);
+ $emessage->add($id.ADLAN_PM_11, E_MESSAGE_SUCCESS);
+ }
+ else
+ {
+ $e107->admin_log->log_event('PM_ADM_09', '');
+ $emessage->add($id.ADLAN_PM_7, E_MESSAGE_ERROR);
+ }
}
}
}
-if(isset($message))
+
+if ($emessage->hasMessage())
{
- $ns->tablerender('', $message);
+ $e107->ns->tablerender(ADLAN_PM_58, $emessage->render());
}
switch ($action)
{
case 'main' :
- $ns->tablerender(ADLAN_PM_12, show_options());
+ $ns->tablerender(ADLAN_PM_12, show_options($pm_prefs));
break;
case 'limits' :
$ns->tablerender(ADLAN_PM_14, show_limits());
$ns->tablerender(ADLAN_PM_15, add_limit());
break;
+ case 'maint' :
+ $ns->tablerender(ADLAN_PM_60, show_maint($pm_prefs));
+ break;
}
require_once(e_ADMIN.'footer.php');
-function yes_no($fname)
+
+
+
+function yes_no($fname, $curval = '')
{
- global $pm_prefs;
$ret =
- form::form_radio("option[{$fname}]", "1", ($pm_prefs[$fname] ? "1" : "0"), "", "").LAN_YES." ".
- form::form_radio("option[{$fname}]", "0", ($pm_prefs[$fname] ? "0" : "1"), "", "").LAN_NO;
+ form::form_radio($fname, '1', ($curval ? '1' : '0'), '', '').LAN_YES.' '.
+ form::form_radio($fname, '0', ($curval ? '0' : '1'), '', '').LAN_NO;
return $ret;
}
-function show_options()
+function show_options($pm_prefs)
{
- global $pm_prefs;
$txt = "
+