305 lines
No EOL
8.9 KiB
PHP
305 lines
No EOL
8.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* MyBB 1.6
|
|
* Copyright 2012 Edson Ordaz, All Rights Reserved
|
|
*
|
|
* Email: edsordaz@gmail.com
|
|
* WebSite: http://www.mybb-es.com
|
|
*
|
|
* $Id: achivements.php 2012-05-27Z Edson Ordaz $
|
|
*
|
|
* UPDATED: Version 2.5
|
|
*
|
|
* + Pone todos los logros (de postbit y de perfil) como
|
|
* visibles para todo el foro (tomando en cuenta que los del
|
|
* postbit solo mostrara los que el administrador tiene permitido.
|
|
* + Se agrega nueva configuracion para dar logros a usuarios inactivos.
|
|
* + Se dan logros por logros
|
|
*/
|
|
|
|
function task_achivements($task)
|
|
{
|
|
global $db, $mybb;
|
|
if($mybb->settings['achivements_enable'] == 1)
|
|
{
|
|
require_once MYBB_ROOT."inc/plugins/achivements/include/mp.php";
|
|
$achivements = array();
|
|
$query = $db->simple_select('achivements');
|
|
while ($achivement = $db->fetch_array($query))
|
|
{
|
|
$achivements[] = $achivement;
|
|
}
|
|
$db->free_result($query);
|
|
$userachivements = array();
|
|
$uquery = $db->simple_select("user_achivements", "*");
|
|
while($usera = $db->fetch_array($uquery))
|
|
{
|
|
$userachivements[$usera['uid']][$usera['aid']] = true;
|
|
}
|
|
$users = array();
|
|
$taskusersoffline = '';
|
|
if($mybb->settings['achivements_taskuseroffline'] == 0)
|
|
{
|
|
$taskusersoffline = "`lastactive` >= '{$task['lastrun']}'";
|
|
}
|
|
$query = $db->simple_select("users", "*", $taskusersoffline);
|
|
while($user = $db->fetch_array($query))
|
|
{
|
|
$users[$user['uid']] = $user;
|
|
}
|
|
$insert_achivements = array();
|
|
$countachivements = 0;
|
|
$countusers = 0;
|
|
$max_postcount=0;
|
|
$max_threadcount=0;
|
|
$max_repcount=0;
|
|
$max_timecount=0;
|
|
$max_regdatecount=0;
|
|
foreach ($users as $uid => $user)
|
|
{
|
|
$sendmp = unserialize($mybb->settings['achivements_sendmp']);
|
|
foreach($achivements as $achivement)
|
|
{
|
|
switch($achivement['type'])
|
|
{
|
|
case "post":
|
|
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
|
|
{
|
|
if($achivement['requirement'] <= intval($user['postnum']))
|
|
{
|
|
if($mybb->settings['achivements_showonlycurrent'] == 1)
|
|
{
|
|
if($max_postcount < $achivement['requirement'])
|
|
{
|
|
$max_postcount = $achivement['requirement'];
|
|
++$countachivements;
|
|
unset($insert_achivements[$uid]['posts']);
|
|
$insert_achivements[$uid]['posts'][] = $achivement['id'];
|
|
if($sendmp['posts'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'posts', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
++$countachivements;
|
|
$insert_achivements[$uid]['posts'][] = $achivement['id'];
|
|
if($sendmp['posts'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'posts', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "threads":
|
|
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
|
|
{
|
|
if($achivement['requirement'] <= intval($user['threads']))
|
|
{
|
|
if($mybb->settings['achivements_showonlycurrent'] == 1)
|
|
{
|
|
if($max_threadcount < $achivement['requirement'])
|
|
{
|
|
$max_threadcount = $achivement['requirement'];
|
|
++$countachivements;
|
|
unset($insert_achivements[$uid]['threads']);
|
|
$insert_achivements[$uid]['threads'][] = $achivement['id'];
|
|
if($sendmp['threads'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'threads', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
++$countachivements;
|
|
$insert_achivements[$uid]['threads'][] = $achivement['id'];
|
|
if($sendmp['threads'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'threads', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "rep":
|
|
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
|
|
{
|
|
if($achivement['requirement'] <= intval($user['reputation']))
|
|
{
|
|
if($mybb->settings['achivements_showonlycurrent'] == 1)
|
|
{
|
|
if($max_repcount < $achivement['requirement'])
|
|
{
|
|
$max_repcount = $achivement['requirement'];
|
|
++$countachivements;
|
|
unset($insert_achivements[$uid]['rep']);
|
|
$insert_achivements[$uid]['rep'][] = $achivement['id'];
|
|
if($sendmp['reputation'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'reputation', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
++$countachivements;
|
|
$insert_achivements[$uid]['rep'][] = $achivement['id'];
|
|
if($sendmp['reputation'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'reputation', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "time":
|
|
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
|
|
{
|
|
switch($achivement['requirement_unit'])
|
|
{
|
|
case "hours":
|
|
$timeonline = $achivement['requirement']*60*60;
|
|
break;
|
|
case "days":
|
|
$timeonline = $achivement['requirement']*60*60*24;
|
|
break;
|
|
case "weeks":
|
|
$timeonline = $achivement['requirement']*60*60*24*7;
|
|
case "months":
|
|
$timeonline = $achivement['requirement']*60*60*24*30;
|
|
break;
|
|
case "years":
|
|
$timeonline = $achivement['requirement']*60*60*24*365;
|
|
break;
|
|
}
|
|
if($timeonline <= intval($user['reputation']))
|
|
{
|
|
if($mybb->settings['achivements_showonlycurrent'] == 1)
|
|
{
|
|
if($max_timecount < $timeonline)
|
|
{
|
|
$max_timecount = $timeonline;
|
|
++$countachivements;
|
|
unset($insert_achivements[$uid]['time']);
|
|
$insert_achivements[$uid]['time'][] = $achivement['id'];
|
|
if($sendmp['timeonline'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'timeonline', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
++$countachivements;
|
|
$insert_achivements[$uid]['time'][] = $achivement['id'];
|
|
if($sendmp['timeonline'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'timeonline', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "regdate":
|
|
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
|
|
{
|
|
switch($achivement['requirement_unit'])
|
|
{
|
|
case "hours":
|
|
$regdate = $achivement['requirement']*60*60;
|
|
break;
|
|
case "days":
|
|
$regdate = $achivement['requirement']*60*60*24;
|
|
break;
|
|
case "weeks":
|
|
$regdate = $achivement['requirement']*60*60*24*7;
|
|
case "months":
|
|
$regdate = $achivement['requirement']*60*60*24*30;
|
|
break;
|
|
case "years":
|
|
$regdate = $achivement['requirement']*60*60*24*365;
|
|
break;
|
|
}
|
|
$rdate = TIME_NOW - $regdate;
|
|
if(intval($user['regdate']) <= $rdate)
|
|
{
|
|
if($mybb->settings['achivements_showonlycurrent'] == 1)
|
|
{
|
|
if($max_regdatecount < intval($user['regdate']))
|
|
{
|
|
$max_regdatecount = intval($user['regdate']);
|
|
++$countachivements;
|
|
unset($insert_achivements[$uid]['regdate']);
|
|
$insert_achivements[$uid]['regdate'][] = $achivement['id'];
|
|
if($sendmp['regdate'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'regdate', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
++$countachivements;
|
|
$insert_achivements[$uid]['regdate'][] = $achivement['id'];
|
|
if($sendmp['regdate'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'regdate', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "archivements":
|
|
$achs = explode('|',$achivement['required_achivements']);;
|
|
$error = 0;
|
|
if(!empty($achs))
|
|
{
|
|
foreach($achs as $ar)
|
|
{
|
|
if(empty($userachivements[$uid][$ar]))
|
|
{
|
|
++$error;
|
|
}
|
|
}
|
|
if($error == 0)
|
|
{
|
|
if (!isset($userachivements[$uid][$achivement['id']]) || empty($userachivements[$uid][$achivement['id']]))
|
|
{
|
|
++$countachivements;
|
|
$insert_achivements[$uid]['archivements'][] = $achivement['id'];
|
|
if($sendmp['achivements'] == 1)
|
|
{
|
|
send_mp_achivement_new($uid, 'achivement', $achivement['id']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
++$countusers;
|
|
}
|
|
foreach($insert_achivements as $uid => $ach){
|
|
foreach($ach as $key => $v){
|
|
foreach($v as $a){
|
|
$update = array(
|
|
"uid" => $uid,
|
|
"aid" => $a,
|
|
"showprofile"=>1,
|
|
"showpostbit"=>1
|
|
);
|
|
$db->insert_query("user_achivements", $update);
|
|
}
|
|
}
|
|
}
|
|
$tasklog = "Checked {$countusers} Users and gave out {$countachivements} Achivements in total.";
|
|
}else{
|
|
$tasklog = "Achivements deactivated.";
|
|
}
|
|
add_task_log($task, $tasklog);
|
|
}
|
|
?>
|