<?php

/*********************************************************************************************************
*
*  Read report alert (/inc/plugins/readreportalert.php)
*  Author: MYBB PL
*  Copyright: 2016 @ MYBB PL @ All rights reserved
*  
*  Website: https://mybboard.pl/
*  License: licence.txt
*  Description: Plugin alert user when moderator read his report.
*
*********************************************************************************************************/
/*********************************************************************************************************
*
* This file is part of "Read report alert" plugin for MyBB.
* Copyright (C) 2016 MYBB PL
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
*********************************************************************************************************/

if(!defined("IN_MYBB"))
{
	die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}

$plugins->add_hook("admin_config_settings_manage", "readreportalert_admin_lang_load");
$plugins->add_hook("admin_config_settings_change", "readreportalert_admin_lang_load");
$plugins->add_hook("admin_config_settings_start", "readreportalert_admin_lang_load");
$plugins->add_hook("admin_settings_print_peekers", "readreportalert_admin_settings_print_peekers");
$plugins->add_hook("admin_page_output_footer", "readreportalert_admin_page_output_footer");
$plugins->add_hook("modcp_do_reports", "readreportalert_modcp_do_reports");

function readreportalert_info()
{	
	global $lang;
    $lang->load("config_readreportalert");
	
	return array(
		"name"				=> $lang->readreportalert,
		"description"		=> $lang->readreportalert_desc,
		"website"				=> "https://mybboard.pl/",
		"author"				=> "MYBB PL",
		"authorsite"			=> "https://mybboard.pl/",
		"version"			=> "1.0",
		"compatibility"	=> "1808",
		"codename"		=> "read_report_alert",
	);
}

function readreportalert_is_installed()
{
	global $db;
	
	return $db->num_rows($db->simple_select("settinggroups", "*", "name=\"readreportalert\""));
}

function readreportalert_install()
{
	global $db, $lang, $cache, $mybb;
    $lang->load("config_readreportalert");
	
	$max_disporder = $db->fetch_field($db->simple_select("settinggroups", "MAX(disporder) AS max_disporder"), "max_disporder");
	
	$settinggroup = array(
		"gid"					=> "",
		"name" 				=> "readreportalert", 
		"title" 				=> $db->escape_string($lang->setting_group_readreportalert),
		"description"		=> $db->escape_string($lang->setting_group_readreportalert_desc),
		"disporder" 		=> $max_disporder + 1,
		"isdefault"			=> "0",
	);
	
	$gid = $db->insert_query("settinggroups", $settinggroup);
	
	$settings = array();
	
	$settings[] = array(
		"sid"					=> "",
		"name"				=> "readreportalert_onoff",
		"title"					=> $db->escape_string($lang->setting_readreportalert_onoff),
		"description"		=> $db->escape_string($lang->setting_readreportalert_onoff_desc),
		"optionscode"	=> "onoff",
		"value"				=> "1",
		"disporder"		=> "1",
		"gid"					=> $gid,
		"isdefault"			=> "0",
	);
	
	$options = "select\n";
	$options .= "readed_report=".$lang->setting_readreportalert_pm_sender_readed_report."\n";
    $options .= "username=".$lang->setting_readreportalert_pm_sender_username."\n";
    $options .= "anonymous=".$lang->setting_readreportalert_pm_sender_anonymous."\n";
	
	$settings[] = array(
		"sid"					=> "",
		"name"				=> "readreportalert_pm_sender",
		"title"					=> $db->escape_string($lang->setting_readreportalert_pm_sender),
		"description"		=> $db->escape_string($lang->setting_readreportalert_pm_sender_desc),
		"optionscode"	=> $options,
		"value"				=> "0",
		"disporder"		=> "2",
		"gid"					=> $gid,
		"isdefault"			=> "0",
	);

	$settings[] = array(
		"sid"					=> "",
		"name"				=> "readreportalert_pm_username",
		"title"					=> $db->escape_string($lang->setting_readreportalert_pm_username),
		"description"		=> $db->escape_string($lang->setting_readreportalert_pm_username_desc),
		"optionscode"	=> "text",
		"value"				=> $mybb->user['username'],
		"disporder"		=> "3",
		"gid"					=> $gid,
		"isdefault"			=> "0",
	);
	
	$db->insert_query_multiple("settings", $settings);
	
	rebuild_settings();
}

function readreportalert_uninstall()
{
    global $db;
	
	$db->delete_query("settinggroups", "name = \"readreportalert\"");
	$db->delete_query("settings", "name LIKE \"readreportalert%\"");
	rebuild_settings();
}

function readreportalert_admin_lang_load()
{
    global $lang;
    $lang->load("config_readreportalert");
}

function readreportalert_admin_settings_print_peekers(&$peekers)
{
    $peekers[] = 'new Peeker($("#setting_readreportalert_pm_sender"), $("#row_setting_readreportalert_pm_username"), /username/, false)';
} 

function readreportalert_admin_page_output_footer()
{	
	        echo '<link rel="stylesheet" href="../jscripts/select2/select2.css">
	<script type="text/javascript" src="../jscripts/select2/select2.min.js?ver=1804"></script>
	<style>
	.select2-container .select2-choice > .select2-chosen {
    width: 300px;
}
	</style>
	<script type="text/javascript">
	<!--
	
	$("#setting_readreportalert_pm_username").select2({
		placeholder: "Search user",
		minimumInputLength: 3,
		maximumSelectionSize: 3,
		multiple: false,
		ajax: { // instead of writing the function to execute the request we use Select2\'s convenient helper
			url: "../xmlhttp.php?action=get_users",
			dataType: \'json\',
			data: function (term, page) {
				return {
					query: term, // search term
				};
			},
			results: function (data, page) { // parse the results into the format expected by Select2.
				// since we are using custom formatting functions we do not need to alter remote JSON data
				return {results: data};
			}
		},
		initSelection: function(element, callback) {
			var query = $(element).val();
			if (query !== "") {
				$.ajax("../xmlhttp.php?action=get_users&getone=1", {
					data: {
						query: query
					},
					dataType: "json"
				}).done(function(data) { callback(data); });
			}
		},
	});

  	$(\'[for=setting_readreportalert_pm_username]\').click(function(){
		$("#setting_readreportalert_pm_username").select2(\'open\');
		return false;
	});
	// -->
	</script>';
}

function readreportalert_modcp_do_reports()
{
	global $lang, $mybb, $db, $sql, $cache;
	$lang->load("readreportalert");
	
	if($mybb->settings['readreportalert_onoff'] != "1")
	{
		return;
	}
	
	if($sql == "1=1")
	{
		$sqls = "";
	}
	else
	{
		$sqls = "AND r.".$sql;
	}
	
	$reasons = $cache->read("reportreasons");
//	echo "<pre>";print_r($reasons);echo"</pre>";exit;
	$query = $db->query("
		SELECT *
		FROM ".TABLE_PREFIX."reportedcontent r
		WHERE reportstatus = 0 {$sqls}
	");
	
	while($report = $db->fetch_array($query))
	{
		$reports[$report['rid']] = $report;
	}
	
	foreach($reports as $report)
	{		
		if(!$report['type'])
		{
			$report['type'] = "post";
		}


		if($report['reasonid'] > 0)
		{
			$reason = ($lang->parse($reasons[$report['type']][$report['reasonid']]['title']));
		}
		else
		{
			$reason = $lang->na;
		}
			
		$reporters = my_unserialize($report['reporters']);
		foreach($reporters as $reporter)
		{
			$reporterun = get_user($reporter);
			switch($report['type'])
			{
				case "post":
					$post = get_post($report['id']);
					$link = $mybb->settings['bburl'] ."/". get_post_link($post['pid'], "-1") . "#pid{$post['pid']}";
					$date = my_date('relative', $report['dateline']);
					$mess = $lang->sprintf($lang->readreportalert_post, $reporterun['username'], $date, $reason, $link, $post['subject']);
				break;
				case "profile":
					$user = get_user($report['id']);
					$link = $mybb->settings['bburl'] ."/member.php?action=profile&uid=".$user['uid'];
					$date = my_date('relative', $report['dateline']);
					$mess = $lang->sprintf($lang->readreportalert_profile, $reporterun['username'], $date, $reason, $link, $user['username']);
				break;
				case "reputation":
					$query = $db->simple_select("reputation", "*", "rid = '".$report['id']."'");
					$reputation = $db->fetch_array($query);
					$adduid = get_user($reputation['adduid']);
					$linkadduid = $mybb->settings['bburl'] ."/member.php?action=profile&uid=".$adduid['uid'];
					$uid = get_user($reputation['uid']);
					$linkuid = $mybb->settings['bburl'] ."/member.php?action=profile&uid=".$uid['uid'];
					$repdate = my_date('relative', $reputation['dateline']);
					if($reputation['pid'] > "0")
					{						
						$post = get_post($reputation['pid']);
						$link = $mybb->settings['bburl'] ."/". get_post_link($post['pid'], "-1") . "#pid{$post['pid']}";
						$name = $post['subject'];
						$for = $lang->readreportalert_forpost;
					}
					else
					{
						$link = $mybb->settings['bburl'] ."/member.php?action=profile&uid=".$uid['uid'];
						$name = $uid['username'];
						$for = $lang->readreportalert_forprofile;
					}
					$date = my_date('relative', $report['dateline']);
					$mess = $lang->sprintf($lang->readreportalert_reputation, $reporterun['username'], $date, $reason, $linkuid, $uid['username'], $linkadduid, $adduid['username'], $repdate, $for, $link, $name);
				break;				
			}

			$pm = array(
				'subject' => $lang->readreportalert_thanks_for_report,
				'message' => $mess,
				'touid' => $reporter,
			);
			
			switch($mybb->settings['readreportalert_pm_sender'])
			{
				case "readed_report":
					$sender_uid = $mybb->user['uid'];
				break;
				case "username":
					$suser = get_user_by_username(trim($mybb->settings['readreportalert_pm_username']));
					$sender_uid = $suser['uid'];
				break;
				case "anonymous":
					$sender_uid = -1;
				break;
			}
			
			send_pm($pm, $sender_uid, true);
		}
	}
}