e107_plugins/pm/admin_config.php
<?php
// Generated e107 Plugin Admin Area
require_once(__DIR__.'/../../class2.php');
if (!getperms('P'))
{
e107::redirect('admin');
exit;
}
e107::lan('pm',true);
// e107::css('inline', "div.tab-content { margin-top:10px } ");
class pm_admin extends e_admin_dispatcher
{
protected $modes = array(
'main' => array(
'controller' => 'private_msg_ui',
'path' => null,
'ui' => 'private_msg_form_ui',
'uipath' => null
),
'inbox' => array(
'controller' => 'private_msg_ui',
'path' => null,
'ui' => 'private_msg_form_ui',
'uipath' => null
),
'outbox' => array(
'controller' => 'private_msg_ui',
'path' => null,
'ui' => 'private_msg_form_ui',
'uipath' => null
),
/*
'block' => array(
'controller' => 'private_msg_block_ui',
'path' => null,
'ui' => 'private_msg_block_form_ui',
'uipath' => null
),
*/
);
protected $adminMenu = array(
'main/prefs' => array('caption'=> LAN_PREFS, 'perm' => 'P'),
'main/limits' => array('caption'=> ADLAN_PM_55, 'perm' => 'P'),
'main/maint' => array('caption'=> ADLAN_PM_59, 'perm' => 'P'),
'main/null' => array('divider'=> true),
'inbox/list' => array('caption'=> LAN_PLUGIN_PM_INBOX, 'perm' => 'P'),
'outbox/list' => array('caption'=> LAN_PLUGIN_PM_OUTBOX, 'perm' => 'P'),
'outbox/create' => array('caption'=> LAN_PLUGIN_PM_NEW, 'perm' => 'P'),
// 'block/list' => array('caption'=> LAN_MANAGE, 'perm' => 'P'),
// 'block/create' => array('caption'=> LAN_CREATE, 'perm' => 'P'),
);
protected $adminMenuAliases = array(
'main/edit' => 'main/list'
);
protected $menuTitle = LAN_PLUGIN_PM_NAME;
function init()
{
if(e_DEBUG == true)
{
$this->adminMenu['main/null2'] = array('divider'=> true);
$this->adminMenu['main/list'] = array('caption'=> "Log", 'perm' => 'P');
}
}
}
class private_msg_ui extends e_admin_ui
{
protected $pluginTitle = LAN_PLUGIN_PM_NAME;
protected $pluginName = 'pm';
protected $table = 'private_msg';
protected $pid = 'pm_id';
protected $perPage = 7;
protected $listQry = '';
protected $listOrder = "p.pm_id DESC";
protected $fields = array ( 'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
'pm_id' => array ( 'title' => LAN_ID, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'left', 'thclass' => 'left', ),
'pm_from' => array ( 'title' => LAN_PLUGIN_PM_FROM, 'type' => 'method', 'noedit'=>true, 'data' => 'int', 'filter'=>true, 'width' => '5%%', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'left', 'thclass' => 'left', ),
'pm_to' => array ( 'title' => LAN_PLUGIN_PM_TO, 'type' => 'user', 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'left', 'thclass' => 'left', ),
'pm_sent' => array ( 'title' => LAN_DATE, 'type' => 'datestamp', 'data' => 'int', 'width' => '15%', 'help' => '', 'readParms' => array(), 'writeParms' => 'auto=1&readonly=1', 'class' => 'center', 'thclass' => 'center', ),
'pm_subject' => array ( 'title' => LAN_PLUGIN_PM_SUB, 'type' => 'text', 'data' => 'str', 'width' => '15%', 'help' => '', 'readParms' => array(), 'writeParms' => array('size'=>'xlarge'), 'class' => 'left', 'thclass' => 'left', ),
'pm_text' => array ( 'title' => LAN_PLUGIN_PM_MESS, 'type' => 'bbarea', 'data' => 'str', 'width' => '40%', 'help' => '', 'readParms' => 'expand=1&truncate=50', 'writeParms' => 'rows=5&size=block&cols=80', 'class' => 'left', 'thclass' => 'left', ),
'pm_read' => array ( 'title' => LAN_PLUGIN_PM_READ, 'type' => 'boolean', 'noedit'=>1, 'data' => 'int', 'batch'=>true, 'filter'=>true, 'width' => '5%', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'pm_sent_del' => array ( 'title' => LAN_PLUGIN_PM_DEL, 'type' => 'boolean', 'noedit'=>true, 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'pm_read_del' => array ( 'title' => LAN_PLUGIN_PM_DEL, 'type' => 'boolean', 'noedit'=>true, 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'pm_attachments' => array ( 'title' => LAN_PLUGIN_PM_ATTACHMENT, 'type' => 'text', 'noedit'=>true, 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'pm_option' => array ( 'title' => 'Option', 'type' => 'text', 'noedit'=>true, 'data' => 'str', 'width' => 'auto', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'pm_size' => array ( 'title' => LAN_PLUGIN_PM_SIZE, 'type' => 'boolean', 'noedit'=>true, 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'options' => array ( 'title' => LAN_OPTIONS, 'type' => 'method', 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', ),
);
protected $fieldpref = array('pm_id', 'pm_from', 'pm_to', 'pm_sent', 'pm_read', 'pm_subject', 'pm_text');
protected $preftabs = array(LAN_BASIC, LAN_ADVANCED);
protected $prefs = array(
'title' => array('title'=> ADLAN_PM_16, 'tab'=>0, 'type' => 'text', 'data' => 'str', 'help'=>''),
'pm_class' => array('title'=> ADLAN_PM_23, 'tab'=>0, 'type' => 'userclass', 'data' => 'int', 'help'=>'', 'writeParms'=>array('size'=>'xlarge', 'classlist'=>'nobody,main,member,admin,classes')),
'sendall_class' => array('title'=> ADLAN_PM_29, 'tab'=>1, 'type' => 'userclass', 'data' => 'int', 'help'=>'', 'writeParms'=>array('size'=>'xlarge', 'classlist'=>'nobody,main,member,admin,classes')),
'send_to_class' => array('title'=> ADLAN_PM_83, 'tab'=>0, 'type' => 'method', 'data' => 'str', 'help'=>''),
'vip_class' => array('title'=> ADLAN_PM_86, 'tab'=>0, 'type' => 'userclass', 'data' => 'int', 'help'=>ADLAN_PM_87, 'writeParms'=>array('size'=>'xlarge', 'classlist'=>'nobody,main,admin,classes')),
'multi_class' => array('title'=> ADLAN_PM_30, 'tab'=>0, 'type' => 'userclass', 'data' => 'int', 'help'=>'', 'writeParms'=>array('size'=>'xlarge', 'classlist'=>'nobody,main,member,admin,classes')),
'opt_userclass' => array('title'=> ADLAN_PM_31, 'tab'=>0, 'type' => 'userclass', 'data' => 'int', 'help'=>'', 'writeParms'=>array('size'=>'xlarge', 'classlist'=>'nobody,main,member,admin,classes')),
'animate' => array('title'=> ADLAN_PM_17, 'tab'=>1, 'type' => 'boolean', 'data' => 'str', 'help'=>''),
// 'dropdown' => array('title'=> ADLAN_PM_18, 'tab'=>0, 'type' => 'boolean', 'data' => 'str', 'help'=>''),
'read_timeout' => array('title'=> ADLAN_PM_19, 'tab'=>1, 'type' => 'number', 'data' => 'int', 'help'=>''),
'unread_timeout'=> array('title'=> ADLAN_PM_20, 'tab'=>1, 'type' => 'number', 'data' => 'int', 'help'=>''),
'popup' => array('title'=> ADLAN_PM_21, 'tab'=>1, 'type' => 'boolean', 'data' => 'int', 'help'=>''),
'popup_delay' => array('title'=> ADLAN_PM_22, 'tab'=>1, 'type' => 'number', 'data' => 'int', 'help'=>'', 'writeParms'=>array('post'=>ADLAN_PM_44, 'tdClassRight'=>'form-inline')),
'notify_class' => array('title'=> ADLAN_PM_25, 'tab'=>1, 'type' => 'userclass', 'data' => 'int', 'help'=>'', 'writeParms'=>array('size'=>'xlarge', 'classlist'=>'nobody,main,member,admin,classes')),
'receipt_class' => array('title'=> ADLAN_PM_26, 'tab'=>1, 'type' => 'userclass', 'data' => 'int', 'help'=>'', 'writeParms'=>array('size'=>'xlarge', 'classlist'=>'nobody,main,member,admin,classes')),
'attach_class' => array('title'=> ADLAN_PM_27, 'tab'=>0, 'type' => 'userclass', 'data' => 'int', 'help'=>'', 'writeParms'=>array('size'=>'xlarge', 'classlist'=>'nobody,main,member,admin,classes')),
'attach_size' => array('title'=> ADLAN_PM_28, 'tab'=>1, 'type' => 'number', 'data' => 'int', 'help'=>'', 'writeParms'=>'tdClassRight=form-inline&post=Kb'),
'pm_max_send' => array('title'=> ADLAN_PM_81, 'tab'=>1, 'type' => 'number', 'data' => 'int', 'help'=>''),
'perpage' => array('title'=> ADLAN_PM_24, 'tab'=>0, 'type' => 'number', 'data' => 'int', 'help'=>''),
'maxlength' => array('title'=> ADLAN_PM_84, 'tab'=>1, 'type' => 'number', 'data' => 'int', 'help'=>ADLAN_PM_85, 'writeParms'=>array('post'=>'chars.')),
);
private function limitsPageAdd()
{
$sql = e107::getDb();
$mes = e107::getMessage();
$id = intval($_POST['newlimit_class']);
if($sql->select('generic','gen_id',"gen_type = 'pm_limit' AND gen_datestamp = ".$id))
{
$mes->addInfo(ADLAN_PM_5); // 'Limit for selected user class already exists'
}
else
{
$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->insert('generic', $limArray))
{
e107::getLog()->addArray($limArray)->save('PM_ADM_05');
$mes->addSuccess(ADLAN_PM_6);
}
else
{
e107::getLog()->add('PM_ADM_08', '');
$mes->addError(ADLAN_PM_7);
}
}
}
private function limitsPageUpdate()
{
$sql = e107::getDb();
$mes = e107::getMessage();
$pm_prefs = e107::pref('pm');
$limitVal = intval($_POST['pm_limits']);
if($pm_prefs['pm_limits'] != $limitVal)
{
$pm_prefs['pm_limits'] = $limitVal;
$mes->addSuccess(ADLAN_PM_8);
}
foreach(array_keys($_POST['inbox_count']) as $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->delete('generic','gen_id = '.$id))
{
e107::getLog()->add('PM_ADM_07', 'ID: '.$id);
$mes->addSuccess($id.ADLAN_PM_9);
}
else
{
e107::getLog()->add('PM_ADM_10', '');
$mes->addError($id.ADLAN_PM_10);
}
}
else
{
$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->update('generic',array('data' => $limArray, 'WHERE' => 'gen_id = '.$id)))
{
e107::getLog()->addArray($limArray)->save('PM_ADM_06');
$mes->addSuccess($id.ADLAN_PM_11);
}
else
{
e107::getLog()->add('PM_ADM_09', '');
$mes->addError($id.ADLAN_PM_7);
}
}
}
}
public function limitsPage()
{
if(isset($_POST['addlimit']))
{
$this->limitsPageAdd();
}
if(isset($_POST['updatelimits']))
{
$this->limitsPageUpdate();
}
// ---------------------
$sql = e107::getDb();
$frm = e107::getForm();
$pm_prefs = e107::pref('pm');
if (!isset($pm_prefs['pm_limits'])) { $pm_prefs['pm_limits'] = 0; }
if($sql->select('generic', "gen_id as limit_id, gen_datestamp as limit_classnum, gen_user_id as inbox_count, gen_ip as outbox_count, gen_intdata as inbox_size, gen_chardata as outbox_size", "gen_type = 'pm_limit'"))
{
while($row = $sql->fetch())
{
$limitList[$row['limit_classnum']] = $row;
}
}
$txt = "
<fieldset id='plugin-pm-showlimits'>
<form method='post' action='".e_SELF.'?'.e_QUERY."'>
<table class='table adminform'>
<colgroup>
<col class='col-label' />
<col class='col-control' />
<col class='col-control' />
</colgroup>
<thead>
<tr>
<th>".LAN_USERCLASS."</th>
<th>".ADLAN_PM_37."</th>
<th>".ADLAN_PM_38."</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan='3' style='text-align:left'>".ADLAN_PM_45."
<select name='pm_limits' class='tbox'>
";
$sel = ($pm_prefs['pm_limits'] == 0 ? "selected='selected'" : "");
$txt .= "<option value='0' {$sel}>".ADLAN_PM_33."</option>\n";
$sel = ($pm_prefs['pm_limits'] == 1 ? "selected='selected'" : "");
$txt .= "<option value='1' {$sel}>".ADLAN_PM_34."</option>\n";
$sel = ($pm_prefs['pm_limits'] == 2 ? "selected='selected'" : "");
$txt .= "<option value='2' {$sel}>".ADLAN_PM_35."</option>\n";
$txt .= "</select>\n";
$txt .= ' '.ADLAN_PM_77."
</td>
</tr>
";
if (isset($limitList))
{
foreach($limitList as $row)
{
$txt .= "
<tr>
<td>".e107::getUserClass()->getName($row['limit_classnum'])."</td>
<td>
<div class='row'>
<div class='col-md-2'>".LAN_PLUGIN_PM_INBOX.":</div><div class='col-md-10'><input type='text' class='tbox' size='5' name='inbox_count[{$row['limit_id']}]' value='{$row['inbox_count']}' /></div>
<div class='col-md-2'>".LAN_PLUGIN_PM_OUTBOX.":</div><div class='col-md-10'><input type='text' class='tbox' size='5' name='outbox_count[{$row['limit_id']}]' value='{$row['outbox_count']}' /></div>
</div>
</td>
<td>
<div class='row'>
<div class='col-md-2'>".LAN_PLUGIN_PM_INBOX.":</div><div class='col-md-10'><input type='text' class='tbox' size='5' name='inbox_size[{$row['limit_id']}]' value='{$row['inbox_size']}' /></div>
<div class='col-md-2'>".LAN_PLUGIN_PM_OUTBOX.":</div><div class='col-md-10'><input type='text' class='tbox' size='5' name='outbox_size[{$row['limit_id']}]' value='{$row['outbox_size']}' /></div>
</div>
</td>
</tr>
";
}
}
else
{
$txt .= "
<tr>
<td colspan='3' style='text-align: center'>".ADLAN_PM_41."</td>
</tr>
";
}
$txt .= '
</tbody>
</table>
<div class="buttons-bar center">
'.$frm->admin_button('updatelimits','no-value','update', LAN_UPDATE).'
</div>
</form>
</fieldset>';
$tabs = array();
$tabs[] = array('caption'=>ADLAN_PM_14, 'text'=>$txt);
$tabs[] = array('caption'=>ADLAN_PM_15, 'text'=>$this->addLimitPage());
return e107::getForm()->tabs($tabs);
}
function addLimitPage()
{
$sql = e107::getDb();
$frm = e107::getForm();
$pm_prefs = e107::pref('pm');
if($sql->select('generic', "gen_id as limit_id, gen_datestamp as limit_classnum, gen_user_id as inbox_count, gen_ip as outbox_count, gen_intdata as inbox_size, gen_chardata as outbox_size", "gen_type = 'pm_limit'"))
{
while($row = $sql->fetch())
{
$limitList[$row['limit_classnum']] = $row;
}
}
$txt = "
<fieldset id='plugin-pm-addlimit'>
<form method='post' action='".e_SELF.'?'.e_QUERY."'>
<table class='table adminform'>
<colgroup>
<col class='col-label' />
<col class='col-control' />
<col class='col-control' />
</colgroup>
<thead>
<tr>
<th>".LAN_USERCLASS."</th>
<th>".ADLAN_PM_37."</th>
<th>".ADLAN_PM_38."</th>
</tr>
</thead>
<tbody>
";
$txt .= "
<tr>
<td>".e107::getUserClass()->uc_dropdown('newlimit_class', 0, 'guest,member,admin,classes')."</td>
<td>
<div class='row'>
<div class='col-md-2'>".LAN_PLUGIN_PM_INBOX.":</div><div class='col-md-10'><input type='text' class='tbox' size='5' name='new_inbox_count' value='' /></div>
<div class='col-md-2'>".LAN_PLUGIN_PM_OUTBOX.":</div><div class='col-md-10'><input type='text' class='tbox' size='5' name='new_outbox_count' value='' /></div>
</div>
</td>
<td>
<div class='row'>
<div class='col-md-2'>".LAN_PLUGIN_PM_INBOX.":</div><div class='col-md-10'><input type='text' class='tbox' size='5' name='new_inbox_size' value='' /></div>
<div class='col-md-2'>".LAN_PLUGIN_PM_OUTBOX.":</div><div class='col-md-10'><input type='text' class='tbox' size='5' name='new_outbox_size' value='' /></div>
</div>
</td>
</tr>
";
$txt .= '
</tbody>
</table>
<div class="buttons-bar center">
'.$frm->admin_button('addlimit','no-value','update', LAN_ADD).'
</div>
</form>
</fieldset>';
return $txt;
}
public function mainPageProcess()
{
$pm_prefs = e107::pref('pm');
$mes = e107::getMessage();
$maintOpts = array();
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;
}
if (vartrue($_POST['pm_maint_attach']))
{
$maintOpts['attach'] = 1;
}
$result = $this->doMaint($maintOpts, $pm_prefs);
if (is_array($result))
{
foreach ($result as $k => $ma)
{
foreach ($ma as $m)
{
$mes->add($m, $k);
}
}
}
}
public function maintPage()
{
if(isset($_POST['pm_maint_execute']))
{
$this->mainPageProcess();
}
$frm = e107::getForm();
$pmPrefs = e107::pref('pm');
$txt = "
<fieldset id='plugin-pm-maint'>
<legend>".ADLAN_PM_62."</legend>
<form method='post' action='".e_SELF."?maint'>
<table class='table adminform'>
<colgroup>
<col class='col-label' />
<col class='col-control' />
</colgroup>
<tbody>
<tr>
<td>".ADLAN_PM_63."</td>
<td>".$frm->radio_switch('pm_maint_sent', '', LAN_YES, LAN_NO)."</td>
</tr>
<tr>
<td>".ADLAN_PM_64."</td>
<td>".$frm->radio_switch('pm_maint_rec', '', LAN_YES, LAN_NO)."</td>
</tr>
<tr>
<td>".ADLAN_PM_65."</td>
<td>".$frm->radio_switch('pm_maint_blocked', '', LAN_YES, LAN_NO)."</td>
</tr>
";
if ($pmPrefs['read_timeout'] || $pmPrefs['unread_timeout'])
{
$txt .= "
<tr>
<td>".ADLAN_PM_71."</td>
<td>".$frm->radio_switch('pm_maint_expired', '', LAN_YES, LAN_NO)."</td>
</tr>";
}
$txt .= "
<tr>
<td>".ADLAN_PM_78."</td>
<td>".$frm->radio_switch('pm_maint_attach', '', LAN_YES, LAN_NO)."</td>
</tr>
</tbody>
</table>
<div class='buttons-bar center'>
".$frm->admin_button('pm_maint_execute','no-value','delete', LAN_GO)."
</div>
</form>
</fieldset>
";
return $txt;
}
/**
* Do PM DB maintenance
* @param array $opts of tasks key = sent|rec|blocked|expired (one or more present). ATM value not used
* @return array where key is message type (E_MESSAGE_SUCCESS|E_MESSAGE_ERROR|E_MESSAGE_INFO etc), data is array of messages of that type (key = timestamp)
*/
private function doMaint($opts, $pmPrefs)
{
if (!count($opts))
{
return array(E_MESSAGE_ERROR => array(ADLAN_PM_66));
}
$results = array(E_MESSAGE_INFO => array(ADLAN_PM_67)); // 'Maintenance started' - primarily for a log entry to mark start time
$logResults = array();
$e107 = e107::getInstance();
e107::getLog()->add('PM_ADM_04', implode(', ',array_keys($opts)));
$pmHandler = new private_message($pmPrefs);
$db2 =e107::getDb('sql2'); // 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;
if ($res = $db2->gen("SELECT pm.pm_id FROM `#private_msg` AS pm LEFT JOIN `#user` AS u ON pm.`pm_from` = `#user`.`user_id`
WHERE (pm.`pm_read_del = 1) AND `#user`.`user_id` IS NULL"))
{
while ($row = $db2->fetch())
{
if ($pmHandler->del($row['pm_id']) !== FALSE)
{
$cnt++;
}
}
}
$start = time();
$results[E_MESSAGE_SUCCESS][$start] = str_replace('[x]', $cnt, ADLAN_PM_74);
}
if (isset($opts['rec'])) // Want pm_to = deleted user and pm_sent_del = 1
{
$cnt = 0;
if ($res = $db2->gen("SELECT pm.pm_id FROM `#private_msg` AS pm LEFT JOIN `#user` AS u ON pm.`pm_to` = `#user`.`user_id`
WHERE (pm.`pm_sent_del = 1) AND `#user`.`user_id` IS NULL"))
{
while ($row = $db2->fetch())
{
if ($pmHandler->del($row['pm_id']) !== FALSE)
{
$cnt++;
}
}
}
$start = max($start + 1, time());
$results[E_MESSAGE_SUCCESS][$start] = str_replace('[x]', $cnt, ADLAN_PM_75);
}
if (isset($opts['blocked']))
{
if ($res = $db2->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());
$results[E_MESSAGE_ERROR][$start] = str_replace(array('[y]', '[z]'), array($this->sql->getLastErrorNum, $this->sql->getLastErrorText), ADLAN_PM_70);
}
else
{
$start = max($start + 1, time());
$results[E_MESSAGE_SUCCESS][$start] = str_replace('[x]', $res, ADLAN_PM_69);
}
if ($res = $db2->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());
$results[E_MESSAGE_ERROR][$start] = str_replace(array('[y]', '[z]'), array($this->sql->getLastErrorNum, $this->sql->getLastErrorText), ADLAN_PM_70);
}
else
{
$start = max($start + 1, time());
$results[E_MESSAGE_SUCCESS][$start] = str_replace('[x]', $res, ADLAN_PM_68);
}
}
if (isset($opts['expired']))
{
$del_qry = array();
$read_timeout = intval($pmPrefs['read_timeout']);
$unread_timeout = intval($pmPrefs['unread_timeout']);
if($read_timeout > 0)
{
$timeout = time()-($read_timeout * 86400);
$del_qry[] = "(pm_sent < {$timeout} AND pm_read > 0)";
}
if($unread_timeout > 0)
{
$timeout = time()-($unread_timeout * 86400);
$del_qry[] = "(pm_sent < {$timeout} AND pm_read = 0)";
}
if(count($del_qry) > 0)
{
$qry = implode(' OR ', $del_qry);
$cnt = 0;
if($db2->select('private_msg', 'pm_id', $qry))
{
while ($row = $db2->fetch())
{
if ($pmHandler->del($row['pm_id']) !== FALSE)
{
$cnt++;
}
}
}
$start = max($start + 1, time());
$results[E_MESSAGE_SUCCESS][$start] = str_replace('[x]', $cnt, ADLAN_PM_73);
}
else
{
$start = max($start + 1, time());
$results[E_MESSAGE_ERROR][$start] = ADLAN_PM_72;
}
}
if (isset($opts['attach']))
{ // Check for orphaned and missing attachments
$fl = e107::getFile();
$missing = array();
$orphans = array();
$fileArray = $fl->get_files(e_PLUGIN.'pm/attachments'); //FIXME wrong path.
if ($db2->select('private_msg', 'pm_id, pm_attachments', "pm_attachments != ''"))
{
while ($row = $db2->fetch())
{
$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('[x]', '[y]'), 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::getLog()->addArray($this->makeLogEntry($results))->save('PM_ADM_03');
foreach ($results as $k => $r)
{
foreach ($r as $sk => $s)
{
$results[$k][$sk] = str_replace('[!br!]','<br />',$s);
}
}
return $results;
}
/**
* Turn the array produced by doMaint for message display into an array of log strings.
* Data is sorted into time stamp order
*
* @param array $results - array of arrays as returned from doMaint()
* @param array|boolean $extra - optional additional information which is sorted into the main result according to keys - so use low numbers
* to make the entry appear at the beginning, and text strings to add to the end.
*/
function makeLogEntry($results, $extra = FALSE)
{
$logPrefixes = array(E_MESSAGE_SUCCESS => 'Pass - ', E_MESSAGE_ERROR => 'Fail - ', E_MESSAGE_INFO => 'Info - ', E_MESSAGE_DEBUG => 'Debug - ');
$res = array();
foreach ($results as $k => $ma)
{
foreach ($ma as $ts => $m)
{
$res[$ts] = $logPrefixes[$k].$m;
}
}
if (is_array($extra))
{
$res = array_merge($res, $extra);
}
ksort($res); // Sort in ascending order of timestamp
return $res;
}
function sendTestNotify()
{
e107::includeLan(e_PLUGIN.'pm/languages/'.e_LANGUAGE.'.php');
require_once(e_PLUGIN."pm/pm_class.php");
$pmInfo = array ( 'numsent' => '1', 'pm_to' => USERID, 'pm_sent'=>time(), 'pm_userclass' => false, 'pm_subject' => 'Test Subject Random:'.md5(time()), 'pm_message' => 'Test Message '.md5(time()), 'postpm' => 'Send Private Message', 'keyword' => NULL,
'to_info' => array (
'user_id' => USERID,
'user_name' => USERNAME,
'user_class' => USERCLASS,
'user_email' => USEREMAIL,
),
'uploaded' => array ( ), 'from_id' => 1, 'options' => '', );
$pm = new private_message;
if($pm->pm_send_notify(null,$pmInfo, 1) === true)
{
e107::getMessage()->addSuccess(ADLAN_PM_92);
}
else
{
e107::getMessage()->addError(ADLAN_PM_93);
}
}
public function init()
{
// $this->listQry = "SELECT p.*,u.user_name FROM #private_msg AS p LEFT JOIN #user AS u ON p.pm_from = u.user_id ";
if(deftrue('e_DEVELOPER') || deftrue('e_DEBUG'))
{
$this->prefs['notify_class']['writeParms']['post']= e107::getForm()->button('testNotify', 1, 'primary', ADLAN_PM_91);
if(!empty($_POST['testNotify']))
{
$this->sendTestNotify();
}
}
if($this->getMode() == 'inbox')
{
$this->listQry = 'SELECT p.*, u.user_name, f.user_name AS fromuser FROM #private_msg AS p LEFT JOIN #user AS u ON u.user_id = p.pm_to
LEFT JOIN #user as f on f.user_id = p.pm_from WHERE p.pm_to = '.USERID;
$this->fields['pm_to']['nolist'] = true;
$this->fields['options']['readParms'] = 'editClass='.e_UC_NOBODY;
}
if($this->getMode() == 'outbox')
{
$this->listQry = 'SELECT p.*, u.user_name, f.user_name AS fromuser FROM #private_msg AS p LEFT JOIN #user AS u ON u.user_id = p.pm_to
LEFT JOIN #user as f on f.user_id = p.pm_from WHERE p.pm_from = '.USERID;
$this->fields['pm_from']['nolist'] = true;
$this->fields['options']['readParms'] = 'editClass='.e_UC_NOBODY;
}
if($this->getMode() == 'main')
{
$this->listQry = 'SELECT p.*, u.user_name, f.user_name AS fromuser FROM #private_msg AS p LEFT JOIN #user AS u ON u.user_id = p.pm_to
LEFT JOIN #user as f on f.user_id = p.pm_from WHERE 1 ';
// $this->fields['pm_from']['nolist'] = true;
$this->fields['options']['readParms'] = 'editClass='.e_UC_NOBODY;
$this->perPage = 20;
}
if($this->getAction() == 'create')
{
$this->fields['pm_to']['writeParms']['default'] = 99999999;
$this->fields['pm_to']['writeParms']['required'] = 1;
$this->fields['pm_subject']['writeParms']['required'] = 1;
if(!empty($_GET['to']))
{
$this->fields['pm_to']['writeParms']['default'] = intval($_GET['to']);
$this->addTitle('Reply');
}
if(!empty($_GET['subject']))
{
$this->fields['pm_subject']['writeParms']['default'] = "Re: ". base64_decode($_GET['subject']);
}
}
}
public function beforeCreate($new_data, $old_data)
{
if(empty($new_data['pm_to']))
{
e107::getMessage()->addError(ADLAN_PM_90);
return false;
}
$new_data['pm_size'] = strlen($new_data['pm_text']);
$new_data['pm_from'] = USERID;
return $new_data;
}
/*
protected = array(
'pref_type' => array('title'=> 'type', 'type'=>'text', 'data' => 'string', 'validate' => true),
'pref_folder' => array('title'=> 'folder', 'type' => 'boolean', 'data' => 'integer'),
'pref_name' => array('title'=> 'name', 'type' => 'text', 'data' => 'string', 'validate' => 'regex', 'rule' => '#^[\w]+$#i', 'help' => 'allowed characters are a-zA-Z and underscore')
);
public function customPage()
{
$ns = e107::getRender();
$text = 'Hello World!';
$ns->tablerender('Hello',$text);
}
*/
}
class private_msg_form_ui extends e_admin_form_ui
{
function send_to_class($value, $mode, $id)
{
$list = e107::getUserClass()->getClassList('main,admin,member,classes');
$list['matchclass'] = ADLAN_PM_89;
return $this->select('send_to_class', $list, vartrue($value, e_UC_MEMBER), array('size'=>'xlarge'));
}
function options($parms, $value, $id, $attributes)
{
// return $this->renderValue('options',$value,$att,$id);;
$tp = e107::getParser();
$mode = $this->getController()->getMode();
if($mode == 'inbox')
{
$text = "";
$pmData = $this->getController()->getListModel()->getData();
if($pmData['pm_from'] != USERID)
{
$link = e_SELF."?";
$link .= (!empty($_GET['iframe'])) ? 'mode=inbox&iframe=1' : 'mode=outbox';
$link .= "&action=create&to=".intval($pmData['pm_from'])."&subject=".base64_encode($pmData['pm_subject']);
$text .= "<a href='".$link."' class='btn' title='Reply'>".$tp->toGlyph('fa-reply', array('size'=>'1x'))."</a>";
}
// $text .= $this->renderValue('options',$value,$attr,$id);
return $text;
}
}
function pm_from($curVal, $mode)
{
if($mode == 'read')
{
$pmData = $this->getController()->getListModel()->getData();
}
return $pmData['fromuser'];
}
}
/*
class private_msg_block_ui extends e_admin_ui
{
protected $pluginTitle = 'Private Messaging';
protected $pluginName = 'pm';
protected $table = 'private_msg_block';
protected $pid = 'pm_block_id';
protected $perPage = 10;
protected $fields = array ( 'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
'pm_block_id' => array ( 'title' => 'LAN_ID', 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'left', 'thclass' => 'left', ),
'pm_block_from' => array ( 'title' => 'From', 'type' => 'boolean', 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'pm_block_to' => array ( 'title' => 'To', 'type' => 'boolean', 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'pm_block_datestamp' => array ( 'title' => 'LAN_DATESTAMP', 'type' => 'datestamp', 'data' => 'int', 'width' => 'auto', 'filter' => true, 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'left', 'thclass' => 'left', ),
'pm_block_count' => array ( 'title' => 'Count', 'type' => 'boolean', 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => array(), 'writeParms' => array(), 'class' => 'center', 'thclass' => 'center', ),
'options' => array ( 'title' => 'Options', 'type' => null, 'data' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center last', 'forced' => '1', ),
);
protected $fieldpref = array('pm_block_datestamp');
// protected = array(
// 'pref_type' => array('title'=> 'type', 'type'=>'text', 'data' => 'string', 'validate' => true),
// 'pref_folder' => array('title'=> 'folder', 'type' => 'boolean', 'data' => 'integer'),
// 'pref_name' => array('title'=> 'name', 'type' => 'text', 'data' => 'string', 'validate' => 'regex', 'rule' => '#^[\w]+$#i', 'help' => 'allowed characters are a-zA-Z and underscore')
// );
// optional
public function init()
{
}
public function customPage()
{
$ns = e107::getRender();
$text = 'Hello World!';
$ns->tablerender('Hello',$text);
}
}
class private_msg_block_form_ui extends e_admin_form_ui
{
}
*/
new pm_admin();
require_once(e_ADMIN."auth.php");
e107::getAdminUI()->runPage();
require_once(e_ADMIN."footer.php");