Version 3.0.5
This commit is contained in:
1 parent
19b38c7c74
commit
1d4720f3e2
3755 files changed
+508378
-664541
No files matched your search
@@ -0,0 +1,954 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Invision Power Services
|
||||
* IP.Board v3.0.5
|
||||
* Member warn functions
|
||||
* Last Updated: $Date: 2009-06-24 23:14:22 -0400 (Wed, 24 Jun 2009) $
|
||||
*
|
||||
* @author $Author: bfarber $
|
||||
* @copyright (c) 2001 - 2009 Invision Power Services, Inc.
|
||||
* @license http://www.iinvisionpower.com/community/board/license.html
|
||||
* @package Invision Power Board
|
||||
* @subpackage Members
|
||||
* @link http://www.iinvisionpower.com
|
||||
* @since 20th February 2002
|
||||
* @version $Revision: 4818 $
|
||||
*
|
||||
* @todo [Future] Ability to require confirmation of a warning (feature)?
|
||||
*/
|
||||
|
||||
if ( ! defined( 'IN_IPB' ) )
|
||||
{
|
||||
print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files.";
|
||||
exit();
|
||||
}
|
||||
|
||||
class public_members_warn_warn extends ipsCommand
|
||||
{
|
||||
/**
|
||||
* Temporary stored output HTML
|
||||
*
|
||||
* @access public
|
||||
* @var string
|
||||
*/
|
||||
public $output;
|
||||
|
||||
/**
|
||||
* Forum information
|
||||
*
|
||||
* @access private
|
||||
* @var array Array of forum details
|
||||
*/
|
||||
private $forum = array();
|
||||
|
||||
/**
|
||||
* Topic information
|
||||
*
|
||||
* @access private
|
||||
* @var array Array of topic details
|
||||
*/
|
||||
private $topic = array();
|
||||
|
||||
/**
|
||||
* Topic ID
|
||||
*
|
||||
* @access private
|
||||
* @var integer Topic id
|
||||
*/
|
||||
private $topic_id = 0;
|
||||
|
||||
/**
|
||||
* Forum ID
|
||||
*
|
||||
* @access private
|
||||
* @var integer Forum id
|
||||
*/
|
||||
private $forum_id = 0;
|
||||
|
||||
/**
|
||||
* Moderator information
|
||||
*
|
||||
* @access private
|
||||
* @var array Array of moderator details
|
||||
*/
|
||||
private $moderator = array();
|
||||
|
||||
/**
|
||||
* Can ban member from warn panel
|
||||
*
|
||||
* @access private
|
||||
* @var bool Can ban member
|
||||
*/
|
||||
private $canSuspend = 0;
|
||||
|
||||
/**
|
||||
* Can mod queue member from warn panel
|
||||
*
|
||||
* @access private
|
||||
* @var bool Can mod queue member
|
||||
*/
|
||||
private $canModQueue = 0;
|
||||
|
||||
/**
|
||||
* Can remove posting rights from member from warn panel
|
||||
*
|
||||
* @access private
|
||||
* @var bool Can remove posting for member
|
||||
*/
|
||||
private $canRemovePostAbility = 0;
|
||||
|
||||
/**
|
||||
* Number of times per day member can be warned
|
||||
*
|
||||
* @access private
|
||||
* @var integer Number of times per day member can be warned
|
||||
*/
|
||||
private $restrictWarnsPerDay = 0;
|
||||
|
||||
/**
|
||||
* Type of member
|
||||
*
|
||||
* @access private
|
||||
* @var string mod, supmod, or member
|
||||
*/
|
||||
private $type = 'mod';
|
||||
|
||||
/**
|
||||
* Data for the member being warned
|
||||
*
|
||||
* @access private
|
||||
* @var array Member being warned
|
||||
*/
|
||||
private $warn_member = array();
|
||||
|
||||
/**
|
||||
* Class entry point
|
||||
*
|
||||
* @access public
|
||||
* @param object Registry reference
|
||||
* @return void [Outputs to screen/redirects]
|
||||
*/
|
||||
public function doExecute( ipsRegistry $registry )
|
||||
{
|
||||
$this->loadData();
|
||||
|
||||
//-----------------------------------------
|
||||
// Bouncy, bouncy!
|
||||
//-----------------------------------------
|
||||
|
||||
switch ($this->request['do'])
|
||||
{
|
||||
case 'dowarn':
|
||||
$this->_doWarn();
|
||||
break;
|
||||
|
||||
case 'add_note':
|
||||
$this->_checkAccess();
|
||||
$this->_addNoteform();
|
||||
break;
|
||||
|
||||
case 'save_note':
|
||||
$this->_checkAccess();
|
||||
$this->_saveNote();
|
||||
break;
|
||||
|
||||
case 'view':
|
||||
$this->_checkAccess();
|
||||
$this->viewLog();
|
||||
break;
|
||||
|
||||
case 'form':
|
||||
default:
|
||||
$this->_showForm();
|
||||
break;
|
||||
}
|
||||
|
||||
$this->registry->output->addNavigation( $this->lang->words['w_title'], '' );
|
||||
$this->registry->output->addContent( $this->output );
|
||||
|
||||
if( $this->request['popup'] )
|
||||
{
|
||||
$this->registry->getClass('output')->popUpWindow( $this->output );
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->registry->output->sendOutput();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load all necessary properties
|
||||
*
|
||||
* @access public
|
||||
* @param boolean Return false on error, instead of display
|
||||
* @return void
|
||||
*/
|
||||
public function loadData( $returnOnError=false )
|
||||
{
|
||||
//-----------------------------------------
|
||||
// Set up
|
||||
//-----------------------------------------
|
||||
|
||||
$this->settings[ 'warn_min'] = $this->settings['warn_min'] ? $this->settings['warn_min'] : 0;
|
||||
$this->settings[ 'warn_max'] = $this->settings['warn_max'] ? $this->settings['warn_max'] : 10;
|
||||
|
||||
//-----------------------------------------
|
||||
// Load modules...
|
||||
//-----------------------------------------
|
||||
|
||||
ipsRegistry::getClass( 'class_localization')->loadLanguageFile( array( 'public_mod' ), 'forums' );
|
||||
|
||||
if ( ! $this->settings['warn_on'] )
|
||||
{
|
||||
if( $returnOnError )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->registry->output->showError( 'warn_system_off', 10248 );
|
||||
}
|
||||
|
||||
/* Need app_class_forums to setup moderator stuff */
|
||||
require_once( IPS_ROOT_PATH . 'applications/forums/app_class_forums.php' );
|
||||
$app_class_forums = new app_class_forums( $this->registry );
|
||||
|
||||
//-----------------------------------------
|
||||
// Make sure we're a moderator...
|
||||
//-----------------------------------------
|
||||
|
||||
$pass = 0;
|
||||
|
||||
if( $this->memberData['member_id'] )
|
||||
{
|
||||
if( $this->memberData['g_is_supmod'] == 1 )
|
||||
{
|
||||
$pass = 1;
|
||||
$this->canSuspend = $this->settings['warn_gmod_ban'];
|
||||
$this->canModQueue = $this->settings['warn_gmod_modq'];
|
||||
$this->canRemovePostAbility = $this->settings['warn_gmod_post'];
|
||||
$this->restrictWarnsPerDay = intval($this->settings['warn_gmod_day']);
|
||||
$this->canApprovePosts = 1;
|
||||
$this->canApproveTopics = 1;
|
||||
$this->canDeletePosts = 1;
|
||||
$this->canDeleteTopics = 1;
|
||||
$this->type = 'supmod';
|
||||
}
|
||||
else if( $this->memberData['is_mod'] )
|
||||
{
|
||||
$other_mgroups = array();
|
||||
|
||||
if( $this->memberData['mgroup_others'] )
|
||||
{
|
||||
$other_mgroups = explode( ",", IPSText::cleanPermString( $this->memberData['mgroup_others'] ) );
|
||||
}
|
||||
|
||||
$other_mgroups[] = $this->memberData['member_group_id'];
|
||||
|
||||
$this->DB->build( array(
|
||||
'select' => '*',
|
||||
'from' => 'moderators',
|
||||
'where' => "(member_id='" . $this->memberData['member_id'] . "' OR (is_group=1 AND group_id IN(" . implode( ",", $other_mgroups ) . ")))"
|
||||
) );
|
||||
|
||||
$this->DB->execute();
|
||||
|
||||
while ( $this->moderator = $this->DB->fetch() )
|
||||
{
|
||||
if ( $this->moderator['allow_warn'] )
|
||||
{
|
||||
$pass = 1;
|
||||
$this->canSuspend = $this->settings['warn_mod_ban'];
|
||||
$this->canModQueue = $this->settings['warn_mod_modq'];
|
||||
$this->canRemovePostAbility = $this->settings['warn_mod_post'];
|
||||
$this->restrictWarnsPerDay = intval($this->settings['warn_mod_day']);
|
||||
$this->canApprovePosts = $this->moderator['post_q'];
|
||||
$this->canApproveTopics = $this->moderator['topic_q'];
|
||||
$this->canDeletePosts = $this->moderator['delete_post'];
|
||||
$this->canDeleteTopics = $this->moderator['delete_topic'];
|
||||
$this->type = 'mod';
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( $this->settings['warn_show_own'] and $this->memberData['member_id'] == $this->request['mid'] )
|
||||
{
|
||||
$pass = 1;
|
||||
$this->canSuspend = 0;
|
||||
$this->canModQueue = 0;
|
||||
$this->canRemovePostAbility = 0;
|
||||
$this->restrictWarnsPerDay = 0;
|
||||
$this->canApprovePosts = 0;
|
||||
$this->canApproveTopics = 0;
|
||||
$this->canDeletePosts = 0;
|
||||
$this->canDeleteTopics = 0;
|
||||
$this->type = 'member';
|
||||
}
|
||||
}
|
||||
|
||||
if ( $pass == 0 )
|
||||
{
|
||||
if( $returnOnError )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->registry->output->showError( 'warn_no_access', 2025 );
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// Ensure we have a valid member
|
||||
//-----------------------------------------
|
||||
|
||||
$mid = intval($this->request['mid']);
|
||||
|
||||
if ( $mid < 1 )
|
||||
{
|
||||
if( $returnOnError )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->registry->output->showError( 'warn_no_user', 10249 );
|
||||
}
|
||||
|
||||
$this->warn_member = IPSMember::load( $mid, 'all' );
|
||||
|
||||
if ( ! $this->warn_member['member_id'] )
|
||||
{
|
||||
if( $returnOnError )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->registry->output->showError( 'warn_no_user', 10250 );
|
||||
}
|
||||
|
||||
$this->registry->output->setTitle( $this->page_title ? $this->page_title : $this->lang->words['w_title'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a new note
|
||||
*
|
||||
* @access private
|
||||
* @return void [Outputs to screen/redirects]
|
||||
*/
|
||||
private function _saveNote()
|
||||
{
|
||||
if ( $this->type == 'member' )
|
||||
{
|
||||
$this->registry->output->showError( 'warn_member_notes', 2026 );
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// INIT
|
||||
//-----------------------------------------
|
||||
|
||||
$content = '';
|
||||
$note = trim( $this->request['note'] );
|
||||
$save = array();
|
||||
|
||||
if ( $note )
|
||||
{
|
||||
//-----------------------------------------
|
||||
// Ready to save?
|
||||
//-----------------------------------------
|
||||
|
||||
$save['wlog_notes'] = "<content>{$note}</content>";
|
||||
$save['wlog_notes'] .= "<mod></mod>";
|
||||
$save['wlog_notes'] .= "<post></post>";
|
||||
$save['wlog_notes'] .= "<susp></susp>";
|
||||
|
||||
$save['wlog_mid'] = $this->warn_member['member_id'];
|
||||
$save['wlog_addedby'] = $this->memberData['member_id'];
|
||||
$save['wlog_type'] = 'note';
|
||||
$save['wlog_date'] = time();
|
||||
|
||||
//-----------------------------------------
|
||||
// Enter into warn loggy poos (eeew - poo)
|
||||
//-----------------------------------------
|
||||
|
||||
$this->DB->insert( 'warn_logs', $save );
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// Done...
|
||||
//-----------------------------------------
|
||||
|
||||
$popup = $this->request['popup'] ? '&popup=1' : '';
|
||||
|
||||
$this->registry->output->silentRedirect( $this->settings['base_url']."app=members&module=warn&section=warn&mid={$this->warn_member['member_id']}&do=view" . $popup );
|
||||
}
|
||||
|
||||
/**
|
||||
* Form to add a new note
|
||||
*
|
||||
* @access private
|
||||
* @return void [Outputs to screen/redirects]
|
||||
*/
|
||||
private function _addNoteForm()
|
||||
{
|
||||
if ( $this->type == 'member' )
|
||||
{
|
||||
$this->registry->output->showError( 'warn_member_notes', 2027 );
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// INIT
|
||||
//-----------------------------------------
|
||||
|
||||
$content = '';
|
||||
|
||||
$this->output .= $this->registry->getClass('output')->getTemplate('mod')->warn_add_note_form( $this->warn_member['member_id'], $this->warn_member['members_display_name'], $this->warn_member['members_seo_name'] );
|
||||
|
||||
$this->registry->getClass('output')->setTitle( $this->lang->words['warn_popup_title'] );
|
||||
$this->registry->getClass('output')->popUpWindow( $this->output );
|
||||
}
|
||||
|
||||
/**
|
||||
* View the warn logs
|
||||
*
|
||||
* @access public
|
||||
* @return string HTML output
|
||||
*/
|
||||
public function viewLog()
|
||||
{
|
||||
$perpage = 50;
|
||||
$start = intval($this->request['st']) >= 0 ? intval($this->request['st']) : 0;
|
||||
$row = $this->DB->buildAndFetch( array( 'select' => 'count(*) as cnt', 'from' => 'warn_logs', 'where' => "wlog_mid={$this->warn_member['member_id']}" ) );
|
||||
$rows = array();
|
||||
|
||||
$links = $this->registry->output->generatePagination( array(
|
||||
'totalItems' => $row['cnt'],
|
||||
'itemsPerPage' => $perpage,
|
||||
'currentStartValue' => $start,
|
||||
'baseUrl' => "app=members&module=warn&section=warn&do=view&mid={$this->warn_member['member_id']}",
|
||||
) );
|
||||
|
||||
if ( $row['cnt'] > 0 )
|
||||
{
|
||||
$this->DB->build( array(
|
||||
'select' => 'l.*',
|
||||
'from' => array( 'warn_logs' => 'l' ),
|
||||
'where' => 'l.wlog_mid=' . $this->warn_member['member_id'],
|
||||
'order' => 'l.wlog_date DESC ',
|
||||
'limit' => array( $start, $perpage ),
|
||||
'add_join' => array(
|
||||
array(
|
||||
'select' => 'p.member_id as punisher_id, p.members_display_name as punisher_name, p.members_seo_name, p.member_group_id, p.mgroup_others',
|
||||
'from' => array( 'members' => 'p' ),
|
||||
'where' => 'p.member_id=l.wlog_addedby',
|
||||
'type' => 'left',
|
||||
)
|
||||
)
|
||||
) );
|
||||
$q =$this->DB->execute();
|
||||
|
||||
while ( $r = $this->DB->fetch( $q ) )
|
||||
{
|
||||
if ( strstr( $r['wlog_notes'], '<content>' ) )
|
||||
{
|
||||
$raw = preg_match( "#<content>(.+?)</content>#is", $r['wlog_notes'], $match );
|
||||
}
|
||||
else
|
||||
{
|
||||
$_array = unserialize( $r['wlog_notes'] );
|
||||
|
||||
if ( is_array( $_array ) AND $_array['content'] )
|
||||
{
|
||||
$match[1] = $_array['content'];
|
||||
}
|
||||
}
|
||||
|
||||
IPSText::getTextClass( 'bbcode' )->parse_smilies = 1;
|
||||
IPSText::getTextClass( 'bbcode' )->parse_html = 0;
|
||||
IPSText::getTextClass( 'bbcode' )->parse_bbcode = 1;
|
||||
IPSText::getTextClass( 'bbcode' )->parsing_section = 'warn';
|
||||
IPSText::getTextClass( 'bbcode' )->parsing_mgroup = $r['member_group_id'];
|
||||
IPSText::getTextClass( 'bbcode' )->parsing_mgroup_others = $r['mgroup_others'];
|
||||
|
||||
$r['content'] = IPSText::getTextClass( 'bbcode' )->preDisplayParse( $match[1] );
|
||||
|
||||
$rows[] = $r;
|
||||
}
|
||||
}
|
||||
|
||||
$this->output .= $this->registry->getClass('output')->getTemplate('mod')->warn_view_log( $this->warn_member, $rows, $links );
|
||||
|
||||
$this->registry->getClass('output')->setTitle( $this->lang->words['warn_popup_title'] );
|
||||
|
||||
return $this->output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new arn entry
|
||||
*
|
||||
* @access private
|
||||
* @return void [Outputs to screen/redirects]
|
||||
*/
|
||||
private function _doWarn()
|
||||
{
|
||||
//-----------------------------------------
|
||||
// INIT
|
||||
//-----------------------------------------
|
||||
|
||||
$save = array();
|
||||
$err = 0;
|
||||
$topicPosts_type = trim( $this->request['topicPosts_type'] );
|
||||
$topicPosts_topics = intval( $this->request['topicPosts_topics'] );
|
||||
$topicPosts_replies = intval( $this->request['topicPosts_replies'] );
|
||||
$topicPosts_lastx = intval( $this->request['topicPosts_lastx'] );
|
||||
$topicPosts_lastxunits = trim( $this->request['topicPosts_lastxunits'] );
|
||||
$level_custom = intval( $this->request['level_custom'] );
|
||||
$ban_indef = intval( $this->request['ban_indef'] );
|
||||
$member_banned = intval( $this->warn_member['member_banned'] );
|
||||
$warn_level = intval( $this->warn_member['warn_level']) ;
|
||||
|
||||
//-----------------------------------------
|
||||
// Load Mod Squad
|
||||
//-----------------------------------------
|
||||
|
||||
require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/moderate.php' );
|
||||
$moderatorLibrary = new moderatorLibrary( $this->registry );
|
||||
|
||||
//-----------------------------------------
|
||||
// Security checks
|
||||
//-----------------------------------------
|
||||
|
||||
if ( $this->type == 'member' )
|
||||
{
|
||||
$this->registry->output->showError( 'warn_member_notes', 2028 );
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// Check security fang
|
||||
//-----------------------------------------
|
||||
|
||||
if ( $this->request['key'] != $this->member->form_hash )
|
||||
{
|
||||
$this->registry->output->showError( 'warn_bad_key', 3020 );
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// As Celine Dion once squawked, "Show me the reason"
|
||||
//-----------------------------------------
|
||||
|
||||
if ( trim($this->request['reason']) == "" )
|
||||
{
|
||||
$this->_showForm( 'we_no_reason' );
|
||||
return;
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// Other checks
|
||||
//-----------------------------------------
|
||||
|
||||
if ( ! $this->settings['warn_past_max'] && $this->request['level'] != 'nochange' )
|
||||
{
|
||||
if ( $this->request['level'] == 'custom' )
|
||||
{
|
||||
if ( $level_custom > $this->settings['warn_max'] )
|
||||
{
|
||||
$err = 1;
|
||||
}
|
||||
else if( $level_custom < $this->settings['warn_min'] )
|
||||
{
|
||||
$err = 2;
|
||||
}
|
||||
}
|
||||
else if ( $this->request['level'] == 'add' )
|
||||
{
|
||||
if ( $warn_level >= $this->settings['warn_max'] )
|
||||
{
|
||||
$err = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( $warn_level <= $this->settings['warn_min'] )
|
||||
{
|
||||
$err = 2;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $err )
|
||||
{
|
||||
$this->registry->output->showError( $err == 1 ? 'warn_past_max_high' : 'warn_past_max_low', 10251 );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// Plussy - minussy?
|
||||
//-----------------------------------------
|
||||
|
||||
if( $this->request['level'] == 'nochange' )
|
||||
{
|
||||
$save['wlog_type'] = 'nochan';
|
||||
}
|
||||
else
|
||||
{
|
||||
$save['wlog_type'] = ( $this->request['level'] == 'custom' ) ? 'custom' : ( ( $this->request['level'] == 'add' ) ? 'neg' : 'pos' );
|
||||
}
|
||||
$save['wlog_date'] = time();
|
||||
|
||||
//-----------------------------------------
|
||||
// Contacting the member?
|
||||
//-----------------------------------------
|
||||
|
||||
$test_content = trim( IPSText::br2nl( $_POST['contact'] ) ) ;
|
||||
|
||||
if ( $test_content != "" )
|
||||
{
|
||||
if ( trim($this->request['subject']) == "" )
|
||||
{
|
||||
$this->_showForm('we_no_subject');
|
||||
return;
|
||||
}
|
||||
|
||||
unset($test_content);
|
||||
|
||||
if ( IPSText::getTextClass('editor')->method == 'rte' )
|
||||
{
|
||||
$this->request['contact'] = IPSText::getTextClass('editor')->processRawPost( 'contact' );
|
||||
}
|
||||
|
||||
IPSText::getTextClass( 'bbcode' )->parse_smilies = 1;
|
||||
IPSText::getTextClass( 'bbcode' )->parse_html = 0;
|
||||
IPSText::getTextClass( 'bbcode' )->parse_bbcode = 1;
|
||||
IPSText::getTextClass( 'bbcode' )->parsing_section = 'warn';
|
||||
|
||||
$save['wlog_contact'] = $this->request['contactmethod'];
|
||||
$save['wlog_contact_content'] = "<subject>" . $this->request['subject'] . "</subject><content>" . $this->request['contact'] . "</content>";
|
||||
$save['wlog_contact_content'] = IPSText::getTextClass( 'bbcode' )->preDbParse( $save['wlog_contact_content'] );
|
||||
|
||||
if ( $this->request['contactmethod'] == 'email' )
|
||||
{
|
||||
IPSText::getTextClass( 'bbcode' )->parse_smilies = 0;
|
||||
IPSText::getTextClass( 'bbcode' )->parse_html = 1;
|
||||
IPSText::getTextClass( 'bbcode' )->parse_bbcode = 1;
|
||||
IPSText::getTextClass( 'bbcode' )->parsing_section = 'warn';
|
||||
IPSText::getTextClass( 'bbcode' )->parsing_mgroup = $this->memberData['member_group_id'];
|
||||
IPSText::getTextClass( 'bbcode' )->parsing_mgroup_others = $this->memberData['mgroup_others'];
|
||||
|
||||
$this->request['contact'] = IPSText::getTextClass( 'bbcode' )->preDisplayParse( IPSText::getTextClass( 'bbcode' )->preDbParse( $this->request['contact'] ) );
|
||||
|
||||
//-----------------------------------------
|
||||
// Send the email
|
||||
//-----------------------------------------
|
||||
|
||||
IPSText::getTextClass( 'email' )->getTemplate("email_member");
|
||||
|
||||
IPSText::getTextClass( 'email' )->buildMessage( array(
|
||||
'MESSAGE' => IPSText::br2nl( $this->request['contact'] ),
|
||||
'MEMBER_NAME' => $this->warn_member['members_display_name'],
|
||||
'FROM_NAME' => $this->memberData['members_display_name']
|
||||
)
|
||||
);
|
||||
|
||||
IPSText::getTextClass( 'email' )->subject = $this->request['subject'];
|
||||
IPSText::getTextClass( 'email' )->to = $this->warn_member['email'];
|
||||
IPSText::getTextClass( 'email' )->from = $this->settings['email_out'];
|
||||
IPSText::getTextClass( 'email' )->sendMail();
|
||||
}
|
||||
else
|
||||
{
|
||||
//-----------------------------------------
|
||||
// Grab PM class
|
||||
//-----------------------------------------
|
||||
|
||||
require_once( IPSLib::getAppDir( 'members' ) . '/sources/classes/messaging/messengerFunctions.php' );
|
||||
$messengerFunctions = new messengerFunctions( $this->registry );
|
||||
|
||||
try
|
||||
{
|
||||
$messengerFunctions->sendNewPersonalTopic( $this->warn_member['member_id'],
|
||||
$this->memberData['member_id'],
|
||||
array(),
|
||||
$this->request['subject'],
|
||||
IPSText::getTextClass( 'editor' )->method == 'rte' ? nl2br($_POST['contact']) : $_POST['contact'],
|
||||
array( 'origMsgID' => 0,
|
||||
'fromMsgID' => 0,
|
||||
'postKey' => md5(microtime()),
|
||||
'trackMsg' => 0,
|
||||
'addToSentFolder' => 0,
|
||||
'hideCCUser' => 0,
|
||||
'forcePm' => 1,
|
||||
)
|
||||
);
|
||||
}
|
||||
catch( Exception $error )
|
||||
{
|
||||
$msg = $error->getMessage();
|
||||
$toMember = IPSMember::load( $this->warn_member['member_id'], 'core' );
|
||||
|
||||
if ( strstr( $msg, 'BBCODE_' ) )
|
||||
{
|
||||
$msg = str_replace( 'BBCODE_', '', $msg );
|
||||
|
||||
$this->registry->output->showError( $msg, 10252 );
|
||||
}
|
||||
else if ( isset($this->lang->words[ 'err_' . $msg ]) )
|
||||
{
|
||||
$this->lang->words[ 'err_' . $msg ] = $this->lang->words[ 'err_' . $msg ];
|
||||
$this->lang->words[ 'err_' . $msg ] = str_replace( '#NAMES#' , implode( ",", $messengerFunctions->exceptionData ), $this->lang->words[ 'err_' . $msg ] );
|
||||
$this->lang->words[ 'err_' . $msg ] = str_replace( '#TONAME#' , $toMember['members_display_name'] , $this->lang->words[ 'err_' . $msg ] );
|
||||
$this->lang->words[ 'err_' . $msg ] = str_replace( '#FROMNAME#', $this->memberData['members_display_name'], $this->lang->words[ 'err_' . $msg ] );
|
||||
|
||||
$this->registry->output->showError( 'err_' . $msg, 10253 );
|
||||
}
|
||||
else if( $msg != 'CANT_SEND_TO_SELF' )
|
||||
{
|
||||
$_msgString = $this->lang->words['err_UNKNOWN'] . ' ' . $msg;
|
||||
$this->registry->output->showError( $_msgString, 10254 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($test_content);
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// Right - is we banned or wha?
|
||||
//-----------------------------------------
|
||||
|
||||
$restrict_post = '';
|
||||
$mod_queue = '';
|
||||
$susp = '';
|
||||
$_notes = array();
|
||||
|
||||
$_notes['content'] = $this->request['reason'];
|
||||
$_notes['mod'] = $this->request['mod_value'];
|
||||
$_notes['post'] = $this->request['post_value'];
|
||||
$_notes['susp'] = $this->request['susp_value'];
|
||||
$_notes['ban'] = $ban_indef;
|
||||
$_notes['topicPosts_type'] = $topicPosts_type;
|
||||
$_notes['topicPosts_topics'] = $topicPosts_topics;
|
||||
$_notes['topicPosts_replies'] = $topicPosts_replies;
|
||||
$_notes['topicPosts_lastx'] = $topicPosts_lastx;
|
||||
$_notes['topicPosts_lastxunits'] = $topicPosts_lastxunits;
|
||||
|
||||
$save['wlog_notes'] = serialize( $_notes );
|
||||
|
||||
//-----------------------------------------
|
||||
// Member Content
|
||||
//-----------------------------------------
|
||||
|
||||
if ( $topicPosts_type == 'unapprove' OR $topicPosts_type == 'approve' )
|
||||
{
|
||||
$time = ( $topicPosts_lastxunits == 'd' ) ? ( $topicPosts_lastx * 24 ) : $topicPosts_lastx;
|
||||
$approve = ( $topicPosts_type == 'approve' ) ? TRUE : FALSE;
|
||||
|
||||
if ( ( $topicPosts_topics AND $this->canApproveTopics ) AND ( $topicPosts_replies AND $this->canApprovePosts ) )
|
||||
{
|
||||
$moderatorLibrary->toggleApproveMemberContent( $this->warn_member['member_id'], $approve, 'all', $time );
|
||||
}
|
||||
else if ( $topicPosts_topics AND $this->canApproveTopics )
|
||||
{
|
||||
$moderatorLibrary->toggleApproveMemberContent( $this->warn_member['member_id'], $approve, 'topics', $time );
|
||||
}
|
||||
else if ( $topicPosts_replies AND $this->canApprovePosts )
|
||||
{
|
||||
$moderatorLibrary->toggleApproveMemberContent( $this->warn_member['member_id'], $approve, 'replies', $time );
|
||||
}
|
||||
}
|
||||
else if ( $topicPosts_type == 'delete')
|
||||
{
|
||||
$time = ( $topicPosts_lastxunits == 'd' ) ? ( $topicPosts_lastx * 24 ) : $topicPosts_lastx;
|
||||
|
||||
if ( ( $topicPosts_topics AND $this->canDeleteTopics ) AND ( $topicPosts_replies AND $this->canDeletePosts ) )
|
||||
{
|
||||
$moderatorLibrary->deleteMemberContent( $this->warn_member['member_id'], 'all', $time );
|
||||
}
|
||||
else if ( $topicPosts_topics AND $this->canDeleteTopics )
|
||||
{
|
||||
$moderatorLibrary->deleteMemberContent( $this->warn_member['member_id'], 'topics', $time );
|
||||
}
|
||||
else if ( $topicPosts_replies AND $this->canDeletePosts )
|
||||
{
|
||||
$moderatorLibrary->deleteMemberContent( $this->warn_member['member_id'], 'replies', $time );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// Member Suspension
|
||||
//-----------------------------------------
|
||||
|
||||
if ( $this->canModQueue )
|
||||
{
|
||||
if ( $this->request['mod_indef'] == 1 )
|
||||
{
|
||||
$mod_queue = 1;
|
||||
}
|
||||
elseif ( $this->request['mod_value'] > 0 )
|
||||
{
|
||||
$mod_queue = IPSMember::processBanEntry( array( 'timespan' => intval($this->request['mod_value']), 'unit' => $this->request['mod_unit'] ) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( $this->canRemovePostAbility )
|
||||
{
|
||||
if ( $this->request['post_indef'] == 1 )
|
||||
{
|
||||
$restrict_post = 1;
|
||||
}
|
||||
elseif ( $this->request['post_value'] > 0 )
|
||||
{
|
||||
$restrict_post = IPSMember::processBanEntry( array( 'timespan' => intval($this->request['post_value']), 'unit' => $this->request['post_unit'] ) );
|
||||
}
|
||||
}
|
||||
|
||||
if ( $this->canSuspend )
|
||||
{
|
||||
if ( $ban_indef )
|
||||
{
|
||||
$member_banned = 1;
|
||||
}
|
||||
else if ( $this->request['susp_value'] > 0 )
|
||||
{
|
||||
$susp = IPSMember::processBanEntry( array( 'timespan' => intval($this->request['susp_value']), 'unit' => $this->request['susp_unit'] ) );
|
||||
}
|
||||
|
||||
/* Were banned but now unticked? */
|
||||
if ( ! $ban_indef AND $member_banned )
|
||||
{
|
||||
$member_banned = 0;
|
||||
}
|
||||
}
|
||||
|
||||
$save['wlog_mid'] = $this->warn_member['member_id'];
|
||||
$save['wlog_addedby'] = $this->memberData['member_id'];
|
||||
|
||||
//-----------------------------------------
|
||||
// Enter into warn loggy poos (eeew - poo)
|
||||
//-----------------------------------------
|
||||
|
||||
$this->DB->insert( 'warn_logs', $save );
|
||||
|
||||
//-----------------------------------------
|
||||
// Update member
|
||||
//-----------------------------------------
|
||||
|
||||
if( $this->request['level'] != 'nochange' )
|
||||
{
|
||||
if ( $this->request['level'] == 'custom' )
|
||||
{
|
||||
$warn_level = $level_custom;
|
||||
}
|
||||
else if ( $this->request['level'] == 'add' )
|
||||
{
|
||||
$warn_level++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$warn_level--;
|
||||
}
|
||||
|
||||
if ( $warn_level > $this->settings['warn_max'] )
|
||||
{
|
||||
$warn_level = $this->settings['warn_max'];
|
||||
}
|
||||
|
||||
if ( $warn_level < intval($this->settings['warn_min']) )
|
||||
{
|
||||
$warn_level = intval($this->settings['warn_min']);
|
||||
}
|
||||
}
|
||||
|
||||
IPSMember::save( $this->warn_member['member_id'], array( 'core' => array( 'mod_posts' => $mod_queue,
|
||||
'restrict_post' => $restrict_post,
|
||||
'temp_ban' => $susp,
|
||||
'member_banned' => $member_banned,
|
||||
'warn_level' => $warn_level,
|
||||
'warn_lastwarn' => time() ) ) );
|
||||
|
||||
//-----------------------------------------
|
||||
// Now what? Show success screen, that's what!!
|
||||
//-----------------------------------------
|
||||
|
||||
$this->lang->words['w_done_te'] = sprintf( $this->lang->words['w_done_te'], $this->warn_member['members_display_name'] );
|
||||
|
||||
$tid = intval($this->request['t']);
|
||||
$topic = array();
|
||||
|
||||
if ( $tid > 0 )
|
||||
{
|
||||
$topic = $this->DB->buildAndFetch( array(
|
||||
'select' => 't.tid, t.title, t.title_seo',
|
||||
'from' => array( 'topics' => 't' ),
|
||||
'where' => "t.tid={$tid}",
|
||||
'add_join' => array( array(
|
||||
'select' => 'f.id, f.name, f.name_seo',
|
||||
'from' => array( 'forums' => 'f' ),
|
||||
'where' => 'f.id=t.forum_id',
|
||||
'type' => 'left'
|
||||
) )
|
||||
) );
|
||||
}
|
||||
|
||||
$this->output .= $this->registry->getClass('output')->getTemplate('mod')->warn_success( $topic );
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the add new warn form
|
||||
*
|
||||
* @access private
|
||||
* @param mixed Empty | Error message language key
|
||||
* @return void [Outputs to screen/redirects]
|
||||
*/
|
||||
private function _showForm( $errors="" )
|
||||
{
|
||||
if ( $this->type == 'member' )
|
||||
{
|
||||
$this->registry->output->showError( 'warn_member_notes', 10255 );
|
||||
}
|
||||
|
||||
$this->warn_member['warn_level'] = intval($this->warn_member['warn_level']);
|
||||
|
||||
$this->request['contact'] = $this->request['contact'] ? IPSText::getTextClass( 'bbcode' )->preEditParse( $this->request['contact'] ) : '';
|
||||
|
||||
$this->output .= $this->registry->getClass('output')->getTemplate('mod')->warnForm( IPSMember::buildDisplayData( $this->warn_member, '__all__' ),
|
||||
intval($this->request['t']),
|
||||
intval($this->request['st']),
|
||||
$errors ? $this->lang->words[$errors] : '',
|
||||
$this->canModQueue,
|
||||
$this->canRemovePostAbility,
|
||||
$this->canSuspend,
|
||||
IPSText::getTextClass( 'editor' )->showEditor( $this->request['contact'] ? $this->request['contact'] : '', 'contact' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Checking method access
|
||||
*
|
||||
* @access private
|
||||
* @return void [Displays error if appropriate]
|
||||
*/
|
||||
private function _checkAccess()
|
||||
{
|
||||
//-----------------------------------------
|
||||
// Protected member? Really? o_O
|
||||
//-----------------------------------------
|
||||
|
||||
if ( strstr( ',' . $this->settings['warn_protected'] . ',', ',' . $this->warn_member['member_group_id'] . ',' ) )
|
||||
{
|
||||
$this->registry->output->showError( 'warn_protected_member', 10256 );
|
||||
}
|
||||
|
||||
//-----------------------------------------
|
||||
// I've already warned you!!
|
||||
//-----------------------------------------
|
||||
|
||||
if ( $this->restrictWarnsPerDay > 0 )
|
||||
{
|
||||
$time_to_check = time() - 86400;
|
||||
|
||||
$check = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as warn_times', 'from' => 'warn_logs', 'where' => "wlog_mid={$this->warn_member['member_id']} AND wlog_date > $time_to_check" ) );
|
||||
|
||||
if ( $check['warn_times'] >= $this->restrictWarnsPerDay )
|
||||
{
|
||||
$this->registry->output->showError( 'warned_already', 10257 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user