<?php
/**
* Thank you 3.0.2
* written by Arash.j13@gmail.com
* website WWW.CodeCorona.com
* **************************
* Thank you 3.0.6
* Upgrade for MyBB 1.4 : AmirH Hassaneini,Hamed Arfaee
* w w w . i r a n v i g . c o m
* ***************************
* Thank you 2.0
* Upgrade for MyBB 1.6.x (actually 1.6.6)
* www.soportemybb.com
*/
if(!defined("IN_MYBB"))
{
die("No se permite la inicialización directa de este archivo.");
}
if(isset($GLOBALS['templatelist']))
{
$GLOBALS['templatelist'] .= ", thanks_postbit_count";
}
$plugins->add_hook("postbit", "thx");
$plugins->add_hook("parse_message", "thx_code");
$plugins->add_hook("parse_quoted_message", "thx_quote");
$plugins->add_hook("xmlhttp", "do_action");
$plugins->add_hook("showthread_start", "direct_action");
$plugins->add_hook("class_moderation_delete_post", "deletepost_edit");
$plugins->add_hook('admin_tools_action_handler', 'thx_admin_action');
$plugins->add_hook('admin_tools_menu', 'thx_admin_menu');
$plugins->add_hook('admin_tools_permissions', 'thx_admin_permissions');
$plugins->add_hook('admin_load', 'thx_admin');
function thx_info()
{
return array(
'name' => 'Sistema de Agradecimientos',
'description' => 'Agregar boton de agradecimiento a los temas de usuarios.',
'website' => 'http://www.soportemybb.com',
'author' => 'Dark Neo',
'authorsite' => 'http://darkneo.com.ar',
'version' => '2.0',
'guid' => '',
'compatibility' => '16*'
);
}
function thx_install()
{
global $db;
$db->query("CREATE TABLE IF NOT EXISTS ".TABLE_PREFIX."thx (
txid INT UNSIGNED NOT NULL AUTO_INCREMENT,
uid int(10) UNSIGNED NOT NULL,
adduid int(10) UNSIGNED NOT NULL,
pid int(10) UNSIGNED NOT NULL,
time bigint(30) NOT NULL DEFAULT '0',
PRIMARY KEY (`txid`),
INDEX (`adduid`, `pid`, `time`)
);"
);
if(!$db->field_exists("thx", "users"))
{
$sq[] = "ALTER TABLE ".TABLE_PREFIX."users ADD `thx` INT NOT NULL, ADD `thxcount` INT NOT NULL, ADD `thxpost` INT NOT NULL";
}
elseif (!$db->field_exists("thxpost", "users"))
{
$sq[] = "ALTER TABLE ".TABLE_PREFIX."users ADD `thxpost` INT NOT NULL";
}
if($db->field_exists("thx", "posts"))
{
$sq[] = "ALTER TABLE ".TABLE_PREFIX."posts DROP thx";
}
if(!$db->field_exists("pthx", "posts"))
{
$sq[] = "ALTER TABLE ".TABLE_PREFIX."posts ADD `pthx` INT(10) NOT NULL DEFAULT '0'";
}
if(is_array($sq))
{
foreach($sq as $q)
{
$db->query($q);
}
}
}
function thx_is_installed()
{
global $db;
if($db->field_exists('thxpost', "users"))
{
return true;
}
return false;
}
function thx_activate()
{
global $db;
//Update from v3.8
$thx_tbl_keys = $db->query("SHOW KEYS FROM ".TABLE_PREFIX."thx WHERE Key_name='adduid'");
if(!$db->fetch_field($thx_tbl_keys, "Key_name"))
{
$db->query("ALTER TABLE ".TABLE_PREFIX."thx ADD INDEX (`adduid`, `pid`, `time`)");
}
//Adding templates
require MYBB_ROOT."inc/adminfunctions_templates.php";
if(!find_replace_templatesets("postbit", '#'.preg_quote('{$seperator}').'#', '{$post[\'thxdsp_inline\']}{$seperator}{$post[\'thxdsp_outline\']}'))
{
find_replace_templatesets("postbit", '#button_delete_pm(.*)<\/tr>(.*)<\/table>#is', 'button_delete_pm$1</tr>{\$post[\'thxdsp_inline\']}$2</table>{$post[\'thxdsp_outline\']}');
}
find_replace_templatesets("postbit", '#'.preg_quote('{$post[\'button_rep\']}').'#', '{$post[\'thanks\']}');
find_replace_templatesets("postbit_classic", '#button_delete_pm(.*)<\/tr>(.*)<\/table>#is', 'button_delete_pm$1</tr>{\$post[\'thxdsp_inline\']}$2</table>{$post[\'thxdsp_outline\']}');
find_replace_templatesets("postbit_classic", '#'.preg_quote('{$post[\'button_rep\']}').'#', '{$post[\'thanks\']}');
find_replace_templatesets("headerinclude", "#".preg_quote('{$newpmmsg}').'#',
'<script type="text/javascript" src="jscripts/thx.js"></script>{$newpmmsg}');
$templatearray = array(
'title' => 'thanks_postbit_count',
'template' => "<div><span class=\"smalltext\">{\$lang->thx_thank} {\$post[\'thank_count\']}<br />
{\$post[\'thanked_count\']}<br /></span></div>",
'sid' => '-1',
);
$db->insert_query("templates", $templatearray);
$templatearray = array(
'title' => 'thanks_postbit_inline',
'template' => "<tr id=\"thx{\$post[\'pid\']}\" style=\"{\$display_style}\" class=\"trow2 tnx_style tnx_newstl\"><td><span class=\"smalltext\">{\$lang->thx_givenby}</span> <span id=\"thx_list{\$post[\'pid\']}\">\$entries</span></td></tr>",
'sid' => '-1',
);
$db->insert_query("templates", $templatearray);
$templatearray = array(
'title' => 'thanks_postbit_inline_classic',
'template' => "<tr id=\"thx{\$post[\'pid\']}\" style=\"{\$display_style}\" class=\"trow2 tnx_style tnx_classic\"><td><span class=\"smalltext\">{\$lang->thx_givenby}</span></td><td class=\"trow2 tnx_style\" id=\"thx_list{\$post[\'pid\']}\">\$entries</td></tr>",
'sid' => '-1',
);
$db->insert_query("templates", $templatearray);
$templatearray = array(
'title' => 'thanks_postbit_outline',
'template' => "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" id=\"thx{\$post[\'pid\']}\" style=\"{\$display_style};margin-top:5px;\"><tr><td>
<div id=\"dn_thx_list{\$post[\'pid\']}\"><div class=\"smallfont\" align=\"center\"><input type=\"button\" value=\"Mostrar Agradecimientos\" style=\"background-color:#f5f5f5; background-image:linear-gradient(top,#f5f5f5,#f1f1f1); background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1); border:1px solid #dcdcdc;border:1px solid rgba(0, 0, 0, 0.1); border-radius:2px; color:#666; cursor:default; font-family:arial,sans-serif; font-size:11px; font-weight:bold; height:29px; line-height:27px; margin:11px 6px; min-width:54px; padding:0 8px; text-align:center\" onClick=\"if (this.parentNode.parentNode.getElementsByTagName(\'div\')[1].getElementsByTagName(\'div\')[0].style.display != \'\') { this.parentNode.parentNode.getElementsByTagName(\'div\')[1].getElementsByTagName(\'div\')[0].style.display = \'\'; this.innerText = \'\'; this.value = \'Ocultar Agradecimientos\'; } else { this.parentNode.parentNode.getElementsByTagName(\'div\')[1].getElementsByTagName(\'div\')[0].style.display = \'none\'; this.innerText = \'\'; this.value = \'Mostrar Agradecimientos\'; }\"></div><div class=\"alt2\"><div style=\"display: none;\">
<table border=\"0\" cellspacing=\"{\$theme[\'borderwidth\']}\" cellpadding=\"{\$theme[\'tablespace\']}\" class=\"tborder thxdsp_outline\"><tr class=\"trow1 tnx_style\"><td valign=\"top\" width=\"1%\" nowrap=\"nowrap\"><img src=\"{\$mybb->settings[\'bburl\']}/images/gracias.gif\" align=\"absmiddle\" /> <span class=\"smalltext\">{\$lang->thx_givenby}</span></td><td class=\"trow2 tnx_style\" id=\"thx_list{\$post[\'pid\']}\" align=\"left\">\$entries</td></tr></table></div></div></div>
</td></tr></table>",
'sid' => '-1',
);
$db->insert_query("templates", $templatearray);
$thx_group = array(
"name" => "Gracias",
"title" => "[Plugin] Sistema de Agradecimientos",
"description" => "Configurar Plugin.",
"disporder" => "3",
"isdefault" => "1"
);
$db->insert_query("settinggroups", $thx_group);
$gid = $db->insert_id();
$thx[]= array(
"name" => "thx_active",
"title" => "Activar/Desactivar plugin",
"description" => "Activar o desactivar el plugin <u>No elimina la tabla</u>",
"optionscode" => "onoff",
"value" => '1',
"disporder" => '1',
"gid" => intval($gid),
);
$thx[] = array(
"name" => "thx_count",
"title" => "Mostrar conteo de agradecimientos",
"description" => "Muestra el conteo de los agradecimientos dados en cada tema",
"optionscode" => "onoff",
"value" => '1',
"disporder" => '2',
"gid" => intval($gid),
);
$thx[] = array(
"name" => "thx_del",
"title" => "Los usuarios pueden eliminar sus agradecimientos",
"description" => "Cada usuario puede eliminar los agradecimientos que haya dado",
"optionscode" => "onoff",
"value" => '0',
"disporder" => '3',
"gid" => intval($gid),
);
$thx[] = array(
"name" => "thx_hidemode",
"title" => "Mostrar fecha al alejar el raton",
"description" => "Muestra la fecha del agradecimiento, cuando el raton paso por encima del texto",
"optionscode" => "onoff",
"value" => '1',
"disporder" => '4',
"gid" => intval($gid),
);
$thx[] = array(
"name" => "thx_autolayout",
"title" => "Auto deteccion de plantillas",
"description" => "Detectar plantilla del postbit relacionando el codigo HTML! (solo funciona si \"Separar tablas\" esta Habilitado)",
"optionscode" => "onoff",
"value" => '1',
"disporder" => '5',
"gid" => intval($gid),
);
$thx[] = array(
"name" => "thx_outline",
"title" => "Separar tablas",
"description" => "Si quiere mostrar los agradecimientos entre los mensajes (no al final del mensaje), active esta opcion.",
"optionscode" => "onoff",
"value" => '1',
"disporder" => '6',
"gid" => intval($gid),
);
$thx[] = array(
"name" => "thx_hidesystem",
"title" => "Utilizar etiqueta [oculto]",
'description' => 'Oculta los contenidos entre la etiqueta [oculto], hasta agradecer al tema. <div style="float:right;"><a href="http://www.myposs.com" target="_blank">MyPoss</a></div>',
"optionscode" => "yesno",
"value" => '1',
"disporder" => '7',
"gid" => intval($gid),
);
foreach($thx as $t)
{
$db->insert_query("settings", $t);
}
rebuild_settings();
}
function thx_deactivate()
{
global $db;
require '../inc/adminfunctions_templates.php';
find_replace_templatesets("postbit", '#'.preg_quote('{$post[\'thxdsp_inline\']}').'#', '', 0);
find_replace_templatesets("postbit", '#'.preg_quote('{$post[\'thxdsp_outline\']}').'#', '', 0);
find_replace_templatesets("postbit", '#'.preg_quote('{$post[\'thanks\']}').'#', '{$post[\'button_rep\']}', 0);
find_replace_templatesets("postbit_classic", '#'.preg_quote('{$post[\'thxdsp_inline\']}').'#', '', 0);
find_replace_templatesets("postbit_classic", '#'.preg_quote('{$post[\'thxdsp_outline\']}').'#', '', 0);
find_replace_templatesets("postbit_classic", '#'.preg_quote('{$post[\'thanks\']}').'#', '{$post[\'button_rep\']}', 0);
find_replace_templatesets("headerinclude", "#".preg_quote('<script type="text/javascript" src="jscripts/thx.js"></script>').'#', '', 0);
$db->delete_query("settings", "name IN ('thx_active', 'thx_count', 'thx_del', 'thx_hidemode', 'thx_autolayout', 'thx_outline', 'thx_hidesystem')");
$db->delete_query("settinggroups", "name='Gracias'");
$db->delete_query("templates", "title='thanks_postbit_count'");
$db->delete_query("templates", "title='thanks_postbit_inline'");
$db->delete_query("templates", "title='thanks_postbit_inline_classic'");
$db->delete_query("templates", "title='thanks_postbit_outline'");
rebuild_settings();
}
function thx_uninstall()
{
global $db;
if($db->field_exists("thx", "users"))
{
$db->query("ALTER TABLE ".TABLE_PREFIX."users DROP thx, DROP thxcount, DROP thxpost");
}
if($db->field_exists("pthx", "posts"))
{
$db->query("ALTER TABLE ".TABLE_PREFIX."posts DROP pthx");
}
}
function thx_code(&$message)
{
global $db, $post, $mybb, $lang ,$session, $theme, $altbg, $templates, $thx_cache;
if (!$mybb->settings['thx_hidesystem'] || !empty($session->is_spider))
{
return false;
}
// Si es invitado, esperando activacion o bloqueado no mostramos nada.
if ($mybb->usergroup['gid'] == "1" || $mybb->usergroup['gid'] == "5" || $mybb->usergroup['gid'] == "7")
{
$message = preg_replace("#\[oculto\](.*?)\[/oculto\]#is","<div style=\"padding: 5px; padding-top: 8px; border: 1px solid #000080; background: #f5f5f5; color:#B22222; border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; webkit-border-radius: 4px\"><center><b>Debes agradecer para ver el Contenido...</b></center></div>",$message);
}
// Si eres el creador del tema mostramos el contenido
if ($mybb->user['uid'] == "$post[uid]")
{
$message = preg_replace("#\[oculto\](.*?)\[/oculto\]#si","<div style=\"padding: 5px; padding-top: 8px; border: 1px solid #000080; background: #f5f5f5; color:#B22222; border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; webkit-border-radius: 4px\"><b>Contenido: </b><Font Color=\"Black\">$1</Font></div>",$message);
}
// Si no eres el creador del tema, pero has iniciado sesion...
if($mybb->user['uid'] != $post['uid'])
{
$thx_user = $mybb->user['uid'];
$query=$db->query("SELECT th.txid, th.uid, th.adduid, th.pid, th.time, u.username, u.usergroup, u.displaygroup, u.avatar
FROM ".TABLE_PREFIX."thx th
JOIN ".TABLE_PREFIX."users u
ON th.adduid=u.uid
WHERE th.pid='$post[pid]' AND th.adduid ='$thx_user'
ORDER BY th.time ASC"
);
while($record = $db->fetch_array($query))
{
if($record['adduid'] == $mybb->user['uid'])
{
// Si no eres el autor del tema pero has agradecido
$message = preg_replace("#\[oculto\](.*?)\[/oculto\]#is","<div style=\"padding: 5px; padding-top: 8px; border: 1px solid #000080; background: #f5f5f5; color:#B22222; border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; webkit-border-radius: 4px\"><b>Contenido: </b><Font Color=\"Black\">$1</Font></div>",$message);
}
else
{
// Si aun no agradeces, ni eres el autor del tema, ni nada....
$message = preg_replace("#\[oculto\](.*?)\[/oculto\]#is","<div style=\"padding: 5px; padding-top: 8px; border: 1px solid #000080; background: #f5f5f5; color:#B22222; border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; webkit-border-radius: 4px\"><center><b>Debes agradecer para ver el Contenido</b></center></div>",$message);
}
}
// Si no eres el autor del tema, aun no as agradecido.
$message = preg_replace("#\[oculto\](.*?)\[/oculto\]#is","<div style=\"padding: 5px; padding-top: 8px; border: 1px solid #000080; background: #f5f5f5; color:#B22222; border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; webkit-border-radius: 4px\"><center><b>Debes agradecer para ver el Contenido</b></center></div>",$message);
}
}
function thx_quote(&$quoted_post)
{
global $mybb, $session, $templates, $lang;
if (!$mybb->settings['thx_hidesystem'] || !empty($session->is_spider))
{
return false;
}
$quoted_post['message'] = preg_replace('#(http://)([a-zA-Z0-9-]+)\.(([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,})#i', "", $quoted_post['message']);
$quoted_post['message'] = preg_replace("#\[oculto\](.*?)\[/oculto\]#is", "", $quoted_post['message']);
}
function thx(&$post)
{
global $db, $mybb, $lang ,$session, $theme, $altbg, $templates, $thx_cache;
if(!$mybb->settings['thx_active'] || !empty($session->is_spider))
{
return false;
}
if ($mybb->settings['thx_hidesystem'] != 0)
{
$lang->load("thx");
if($b = $post['pthx'])
{
$entries = build_thank($post['pid'], $b);
}
else
{
$entries = "";
}
if($mybb->user['uid'] != 0 && $mybb->user['uid'] != $post['uid'])
{
if(!$b)
{
$post['thanks'] = "<span class=\"botones\"><a id=\"a{$post['pid']}\" onclick=\"javascript:return thx({$post['pid']});\" href=\"showthread.php?action=thank&tid={$post['tid']}&pid={$post['pid']}\" class=\"positivo\">
<img src=\"{$mybb->settings['bburl']}/{$theme['imgdir']}/postbit_thx.gif\" border=\"0\" alt=\"$lang->thx_main\" title=\"$lang->thx_main\" id=\"i{$post['pid']}\" /></a></span>";
}
else if($mybb->settings['thx_del'] == "1")
{
$post['thanks'] = "<span class=\"botones\"><a id=\"a{$post['pid']}\" onclick=\"javascript:return rthx({$post['pid']});\" href=\"showthread.php?action=remove_thank&tid={$post['tid']}&pid={$post['pid']}\" class=\"negativo\">
<img src=\"{$mybb->settings['bburl']}/{$theme['imgdir']}/postbit_rthx.gif\" border=\"0\" alt=\"$lang->thx_remove\" title=\"$lang->thx_remove\" id=\"i{$post['pid']}\" /></a></span>";
}
else
{
$post['thanks'] = "<!-- No se permiten remover agradecimientos por el administrador del foro -->";
}
}
}
$display_style = $entries ? "" : "display:none; border:0;";
$playout = $mybb->settings['postlayout'];
if(!$mybb->settings['thx_outline'])
{
eval("\$post['thxdsp_inline'] .= \"".$templates->get("thanks_postbit_inline")."\";");
if($mybb->settings['thx_autolayout'] && $playout == "classic")
{
eval("\$post['thxdsp_inline'] .= \"".$templates->get("thanks_postbit_inline_classic")."\";");
}
}
else
{
eval("\$post['thxdsp_outline'] .= \"".$templates->get("thanks_postbit_outline")."\";");
}
if($mybb->settings['thx_count'] == "1")
{
if(!isset($thx_cache['postbit'][$post['uid']]))
{
$post['thank_count'] = $post['thx'];
$post['thanked_count'] = $lang->sprintf($lang->thx_thanked_count, $post['thxcount'], $post['thxpost']);
eval("\$x = \"".$templates->get("thanks_postbit_count")."\";");
$thx_cache['postbit'][$post['uid']] = $x;
}
$post['user_details'] .= $thx_cache['postbit'][$post['uid']];
}
}
function do_action()
{
global $mybb, $lang, $theme;
if(($mybb->input['action'] != "thankyou" && $mybb->input['action'] != "remove_thankyou") || $mybb->request_method != "post")
{
return false;
}
if(file_exists($lang->path."/".$lang->language."/thx.lang.php"))
{
$lang->load("thx");
}
else
{
$l = $lang->language;
$lang->set_language();
$lang->load("thx");
$lang->set_language($l);
}
$pid = intval($mybb->input['pid']);
if ($mybb->input['action'] == "thankyou" )
{
do_thank($pid);
}
else if($mybb->settings['thx_del'] == "1")
{
del_thank($pid);
}
$nonead = 0;
$list = build_thank($pid, $nonead);
header('Content-Type: text/xml');
$output = "<thankyou>
<list><![CDATA[$list]]></list>
<display>".($list ? "1" : "0")."</display>
<image>{$mybb->settings['bburl']}/{$theme['imgdir']}/";
if($mybb->input['action'] == "thankyou")
{
$output .= "postbit_rthx.gif";
}
else
{
$output .= "postbit_thx.gif";
}
$output .= "</image>
<del>{$mybb->settings['thx_del']}</del>
</thankyou>";
echo $output;
}
function direct_action()
{
global $mybb, $lang;
if($mybb->input['action'] != "thank" && $mybb->input['action'] != "remove_thank")
{
return false;
}
if(file_exists($lang->path."/".$lang->language."/thx.lang.php"))
{
$lang->load("thx");
}
else
{
$l = $lang->language;
$lang->set_language();
$lang->load("thx");
$lang->set_language($l);
}
$pid=intval($mybb->input['pid']);
if($mybb->input['action'] == "thank" )
{
do_thank($pid);
}
else if($mybb->settings['thx_del'] == "1")
{
del_thank($pid);
}
redirect($_SERVER['HTTP_REFERER']);
}
function build_thank(&$pid, &$is_thx)
{
global $db, $mybb, $lang, $thx_cache, $message;
$is_thx = 0;
$pid = intval($pid);
if(file_exists($lang->path."/".$lang->language."/thx.lang.php"))
{
$lang->load("thx");
}
else
{
$l=$lang->language;
$lang->set_language();
$lang->load("thx");
$lang->set_language($l);
}
$dir = $lang->thx_dir;
$query=$db->query("SELECT th.txid, th.uid, th.adduid, th.pid, th.time, u.username, u.usergroup, u.displaygroup, u.avatar
FROM ".TABLE_PREFIX."thx th
JOIN ".TABLE_PREFIX."users u
ON th.adduid=u.uid
WHERE th.pid='$pid'
ORDER BY th.time ASC"
);
while($record = $db->fetch_array($query))
{
if($record['adduid'] == $mybb->user['uid'])
{
$is_thx++;
}
$date = my_date($mybb->settings['dateformat'].' '.$mybb->settings['timeformat'], $record['time']);
if(!isset($thx_cache['showname'][$record['username']]))
{
$url = get_profile_link($record['adduid']);
$name = format_name($record['username'], $record['usergroup'], $record['displaygroup']);
$avatar = $record['avatar'];
if($avatar != '')
{
$thx_cache['showname'][$record['username']] = "<a href=\"$url\" dir=\"$dir\"><img src=\"$avatar\" style=\"width: 19px; height: 19px; border-style: double; color: #D8DFEA; padding: 2px; background-color: #FCFDFD; border-radius: 4px; -ms-border-radius: 4px; -moz-border-radius: 4px; webkit-border-radius: 4px;\"> $name</a>";
}
else
{
$thx_cache['showname'][$record['username']] = "<a href=\"$url\" dir=\"$dir\"><img src=\"images/default_avatar.gif\" style=\"width: 19px; height: 19px; border-style: double; color: #D8DFEA; padding: 2px; background-color: #FCFDFD; border-radius: 4px; -ms-border-radius: 4px; -moz-border-radius: 4px; webkit-border-radius: 4px;\">$name</a>";
}
}
if($mybb->settings['thx_hidemode'])
{
$entries .= $r1comma." <span title=\"".$date."\">".$thx_cache['showname'][$record['username']]."</span>";
}
else
{
$entries .= $r1comma.$thx_cache['showname'][$record['username']]." <span class=\"smalltext\">(".$date.")</span>";
}
$r1comma = $lang->thx_comma;
}
return $entries;
}
function do_thank(&$pid)
{
global $db, $mybb;
$pid = intval($pid);
$check_query = $db->simple_select("thx", "count(*) as c" ,"adduid='{$mybb->user['uid']}' AND pid='$pid'", array("limit"=>"1"));
$tmp=$db->fetch_array($check_query);
if($tmp['c'] != 0)
{
return false;
}
$check_query = $db->simple_select("posts", "uid", "pid='$pid'", array("limit"=>1));
if($db->num_rows($check_query) == 1)
{
$tmp=$db->fetch_array($check_query);
if($tmp['uid'] == $mybb->user['uid'])
{
return false;
}
$database = array (
"uid" =>$tmp['uid'],
"adduid" => $mybb->user['uid'],
"pid" => $pid,
"time" => time()
);
$time = time();
$sq = array (
"UPDATE ".TABLE_PREFIX."users SET thx=thx+1 WHERE uid='{$mybb->user['uid']}' LIMIT 1",
"UPDATE ".TABLE_PREFIX."users SET thxcount=thxcount+1, reputation = reputation+1,thxpost=CASE( SELECT COUNT(*) FROM ".TABLE_PREFIX."thx WHERE pid='{$pid}' LIMIT 1) WHEN 0 THEN thxpost+1 ELSE thxpost END WHERE uid='{$database['uid']}' LIMIT 1",
"UPDATE ".TABLE_PREFIX."posts SET pthx=pthx+1 WHERE pid='{$pid}' LIMIT 1",
"INSERT INTO ".TABLE_PREFIX."reputation (uid, adduid, pid, reputation, dateline, comments) VALUES ('{$tmp['uid']}', '{$mybb->user['uid']}', '{$pid}', 1, '{$time}', 'Gracias por el aporte')"
);
unset($tmp);
foreach($sq as $q)
{
$db->query($q);
}
$db->insert_query("thx", $database);
}
}
function del_thank(&$pid)
{
global $mybb, $db;
$pid = intval($pid);
if($mybb->settings['thx_del'] != "1")
{
return false;
}
$check_query = $db->simple_select("thx", "`uid`, `txid`" ,"adduid='{$mybb->user['uid']}' AND pid='$pid'", array("limit"=>"1"));
if($db->num_rows($check_query))
{
$data = $db->fetch_array($check_query);
$uid = intval($data['uid']);
$thxid = intval($data['txid']);
unset($data);
$time = time();
$sq = array (
"UPDATE ".TABLE_PREFIX."users SET thx=thx-1 WHERE uid='{$mybb->user['uid']}' LIMIT 1",
"UPDATE ".TABLE_PREFIX."users SET thxcount=thxcount-1, reputation=reputation-1, thxpost=CASE(SELECT COUNT(*) FROM ".TABLE_PREFIX."thx WHERE pid='{$pid}' LIMIT 1) WHEN 0 THEN thxpost-1 ELSE thxpost END WHERE uid='{$uid}' LIMIT 1",
"UPDATE ".TABLE_PREFIX."reputation SET reputation='0', dateline='{$time}', comments='Desagradecer el aporte' WHERE adduid='{$mybb->user['uid']}' && pid='{$pid}' LIMIT 1",
"UPDATE ".TABLE_PREFIX."posts SET pthx=pthx-1 WHERE pid='{$pid}' LIMIT 1"
);
$db->delete_query("thx", "txid='{$thxid}'", "1");
foreach($sq as $q)
{
$db->query($q);
}
}
}
function deletepost_edit(&$pid)
{
global $db;
$pid = intval($pid);
$q = $db->simple_select("thx", "uid, adduid", "pid='{$pid}'");
$postnum = $db->num_rows($q);
if($postnum <= 0)
{
return false;
}
$adduids = array();
while($r = $db->fetch_array($q))
{
$uid = intval($r['uid']);
$adduids[] = $r['adduid'];
}
$adduids = implode(", ", $adduids);
$sq = array();
$sq[] = "UPDATE ".TABLE_PREFIX."users SET thxcount=thxcount-1, thxpost=thxpost-1 WHERE uid='{$uid}'";
$sq[] = "UPDATE ".TABLE_PREFIX."users SET thx=thx-1 WHERE uid IN ({$adduids})";
foreach($sq as $q)
{
$db->query($q);
}
$db->delete_query("thx", "pid={$pid}", $postnum);
}
function thx_admin_action(&$action)
{
$action['recount_thanks'] = array ('active'=>'recount_thanks');
}
function thx_admin_menu(&$sub_menu)
{
$sub_menu['45'] = array (
'id' => 'recount_thanks',
'title' => 'Recontar Agradecimientos',
'link' => 'index.php?module=tools/recount_thanks'
);
}
function thx_admin_permissions(&$admin_permissions)
{
$admin_permissions['recount_thanks'] = 'Puede recontar agradecimientos';
}
function thx_admin()
{
global $mybb, $page, $db;
require_once MYBB_ROOT.'inc/functions_rebuild.php';
if($page->active_action != 'recount_thanks')
{
return false;
}
if($mybb->request_method == "post")
{
if(!isset($mybb->input['page']) || intval($mybb->input['page']) < 1)
{
$mybb->input['page'] = 1;
}
if(isset($mybb->input['do_recountthanks']))
{
if(!intval($mybb->input['thx_chunk_size']))
{
$mybb->input['thx_chunk_size'] = 500;
}
do_recount();
}
else if(isset($mybb->input['do_recountposts']))
{
if(!intval($mybb->input['post_chunk_size']))
{
$mybb->input['post_chunk_size'] = 500;
}
do_recount_post();
}
}
$page->add_breadcrumb_item('Recount thanks', "index.php?module=tools/recount_thanks");
$page->output_header('Reconteo de Agradecimientos');
$sub_tabs['thankyoulike_recount'] = array(
'title' => 'Recontar Agradecimientos',
'link' => "index.php?module=tools/recount_thanks",
'description' => 'Actualizar el conteo de los agradecimientos'
);
$page->output_nav_tabs($sub_tabs, 'thankyoulike_recount');
$form = new Form("index.php?module=tools/recount_thanks", "post");
$form_container = new FormContainer('Recontar Agradecimientos');
$form_container->output_row_header('Tarea');
$form_container->output_row_header('Envíos/Ciclo', array('width' => 50));
$form_container->output_row_header(" ");
$form_container->output_cell("<label>Actualizar contador de agradecimientos</label>
<div class=\"description\">Actualiza los agradecimientos dados/recibidos por los usuarios individuales y por temas.</div>");
$form_container->output_cell($form->generate_text_box("thx_chunk_size", 100, array('style' => 'width: 150px;')));
$form_container->output_cell($form->generate_submit_button('Actualizar', array("name" => "do_recountthanks")));
$form_container->construct_row();
$form_container->output_cell("<label>Actualizar contadores</label>
<div class=\"description\">Actualiza los temas donde se han recibido agradecimientos.</div>");
$form_container->output_cell($form->generate_text_box("post_chunk_size", 500, array('style' => 'width: 150px;')));
$form_container->output_cell($form->generate_submit_button('Actualizar', array("name" => "do_recountposts")));
$form_container->construct_row();
$form_container->end();
$form->end();
$page->output_footer();
exit;
}
function do_recount()
{
global $db, $mybb;
$cur_page = intval($mybb->input['page']);
$per_page = intval($mybb->input['thx_chunk_size']);
$start = ($cur_page-1) * $per_page;
$end = $start + $per_page;
if ($cur_page == 1)
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET thx='0', thxcount='0'");
$db->write_query("UPDATE ".TABLE_PREFIX."posts SET pthx='0'");
}
$query = $db->simple_select("thx", "COUNT(txid) AS thx_count");
$thx_count = $db->fetch_field($query, 'thx_count');
$query = $db->query("
SELECT uid, adduid, pid
FROM ".TABLE_PREFIX."thx
ORDER BY time ASC
LIMIT $start, $per_page
");
$post_thx = array();
$user_thx = array();
$user_thx_to = array();
while($thx = $db->fetch_array($query))
{
if($post_thx[$thx['pid']])
{
$post_thx[$thx['pid']]++;
}
else
{
$post_thx[$thx['pid']] = 1;
}
if($user_thx[$thx['adduid']])
{
$user_thx[$thx['adduid']]++;
}
else
{
$user_thx[$thx['adduid']] = 1;
}
if($user_thx_to[$thx['uid']])
{
$user_thx_to[$thx['uid']]++;
}
else
{
$user_thx_to[$thx['uid']] = 1;
}
}
if(is_array(&$post_thx))
{
foreach($post_thx as $pid => $change)
{
$db->write_query("UPDATE ".TABLE_PREFIX."posts SET pthx=pthx+$change WHERE pid='$pid'");
}
}
if(is_array(&$user_thx))
{
foreach($user_thx as $adduid => $change)
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET thx=thx+$change WHERE uid='$adduid'");
}
}
if(is_array(&$user_thx_to))
{
foreach($user_thx_to as $uid => $change)
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET thxcount=thxcount+$change WHERE uid='$uid'");
}
}
my_check_proceed($thx_count, $end, $cur_page+1, $per_page, "thx_chunk_size", "do_recountthanks", "Se ha actualizado el conteo de agradecimientos con exito");
}
function do_recount_post()
{
global $db, $mybb;
$cur_page = intval($mybb->input['page']);
$per_page = intval($mybb->input['post_chunk_size']);
$start = ($cur_page-1) * $per_page;
$end = $start + $per_page;
if ($cur_page == 1)
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET thxpost='0'");
}
$query = $db->simple_select("thx", "COUNT(distinct pid) AS post_count");
$post_count = $db->fetch_field($query, 'post_count');
$query = $db->query("
SELECT uid, pid
FROM ".TABLE_PREFIX."thx
GROUP BY pid
ORDER BY pid ASC
LIMIT $start, $per_page
");
while($thx = $db->fetch_array($query))
{
$db->write_query("UPDATE ".TABLE_PREFIX."users SET thxpost=thxpost+1 WHERE uid='{$thx['uid']}'");
}
my_check_proceed($post_count, $end, $cur_page+1, $per_page, "post_chunk_size", "do_recountposts", "Se ha actualizado el conteo de agradecimientos en temas");
}
function my_check_proceed($current, $finish, $next_page, $per_page, $name_chunk, $name_submit, $message)
{
global $page;
if($finish >= $current)
{
flash_message($message, 'success');
admin_redirect("index.php?module=tools/recount_thanks");
}
else
{
$page->output_header();
$form = new Form("index.php?module=tools/recount_thanks", 'post');
echo $form->generate_hidden_field("pag", $next_page);
echo $form->generate_hidden_field($name_chunk, $per_page);
echo $form->generate_hidden_field($name_submit, "Actualizar");
echo "<div class=\"confirm_action\">\n";
echo "<p>Clic en \"Continuar\"para hacer el conteo de los agradecimientos.</p>\n";
echo "<p>Despues de haber cargado la pagina por completo de clic de nuevo en continuar para ver su consulta con exito.</p>\n";
echo "<br />\n";
echo "<p class=\"buttons\">\n";
echo $form->generate_submit_button("Continuar", array('class' => 'button_yes'));
echo "</p>\n";
echo "</div>\n";
$form->end();
$page->output_footer();
exit;
}
}
?>