[ Index ] |
PHP Cross Reference of MyBB 1.8.38 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * MyBB 1.8 4 * Copyright 2014 MyBB Group, All Rights Reserved 5 * 6 * Website: http://www.mybb.com 7 * License: http://www.mybb.com/about/license 8 * 9 */ 10 11 function task_promotions($task) 12 { 13 global $mybb, $db, $lang, $cache, $plugins; 14 15 $usergroups = $cache->read("usergroups"); 16 // Iterate through all our promotions 17 $query = $db->simple_select("promotions", "*", "enabled = '1'"); 18 while($promotion = $db->fetch_array($query)) 19 { 20 // Does the destination usergroup even exist?? If it doesn't and it moves a user to it, the user will get PHP errors. 21 if(!array_key_exists($promotion['newusergroup'], $usergroups)) 22 { 23 // Instead of just skipping this promotion, disable it to stop it even being selected when this task is run. 24 $update = array( 25 "enabled" => 0 26 ); 27 $db->update_query("promotions", $update, "pid = '" . (int)$promotion['pid'] . "'"); 28 continue; 29 } 30 31 $and = ""; 32 $sql_where = ""; 33 34 // Based on the promotion generate criteria for user selection 35 $requirements = explode(',', $promotion['requirements']); 36 if(in_array('postcount', $requirements) && (int)$promotion['posts'] >= 0 && !empty($promotion['posttype'])) 37 { 38 $sql_where .= "{$and}postnum {$promotion['posttype']} '{$promotion['posts']}'"; 39 40 $and = " AND "; 41 } 42 43 if(in_array('threadcount', $requirements) && (int)$promotion['threads'] >= 0 && !empty($promotion['threadtype'])) 44 { 45 $sql_where .= "{$and}threadnum {$promotion['threadtype']} '{$promotion['threads']}'"; 46 47 $and = " AND "; 48 } 49 50 if(in_array('reputation', $requirements) && !empty($promotion['reputationtype'])) 51 { 52 $sql_where .= "{$and}reputation {$promotion['reputationtype']} '{$promotion['reputations']}'"; 53 54 $and = " AND "; 55 } 56 57 if(in_array('referrals', $requirements) && (int)$promotion['referrals'] >= 0 && !empty($promotion['referralstype'])) 58 { 59 $sql_where .= "{$and}referrals {$promotion['referralstype']} '{$promotion['referrals']}'"; 60 61 $and = " AND "; 62 } 63 64 if(in_array('warnings', $requirements) && (int)$promotion['warnings'] >= 0 && !empty($promotion['warningstype'])) 65 { 66 $sql_where .= "{$and}warningpoints {$promotion['warningstype']} '{$promotion['warnings']}'"; 67 68 $and = " AND "; 69 } 70 71 if(in_array('timeregistered', $requirements) && (int)$promotion['registered'] > 0 && !empty($promotion['registeredtype'])) 72 { 73 switch($promotion['registeredtype']) 74 { 75 case "hours": 76 $regdate = $promotion['registered']*60*60; 77 break; 78 case "days": 79 $regdate = $promotion['registered']*60*60*24; 80 break; 81 case "weeks": 82 $regdate = $promotion['registered']*60*60*24*7; 83 break; 84 case "months": 85 $regdate = $promotion['registered']*60*60*24*30; 86 break; 87 case "years": 88 $regdate = $promotion['registered']*60*60*24*365; 89 break; 90 default: 91 $regdate = $promotion['registered']*60*60*24; 92 } 93 $sql_where .= "{$and}regdate <= '".(TIME_NOW-$regdate)."'"; 94 $and = " AND "; 95 } 96 97 if(in_array('timeonline', $requirements) && (int)$promotion['online'] > 0 && !empty($promotion['onlinetype'])) 98 { 99 switch($promotion['onlinetype']) 100 { 101 case "hours": 102 $timeonline = $promotion['online']*60*60; 103 break; 104 case "days": 105 $timeonline = $promotion['online']*60*60*24; 106 break; 107 case "weeks": 108 $timeonline = $promotion['online']*60*60*24*7; 109 break; 110 case "months": 111 $timeonline = $promotion['online']*60*60*24*30; 112 break; 113 case "years": 114 $timeonline = $promotion['online']*60*60*24*365; 115 break; 116 default: 117 $timeonline = $promotion['online']*60*60*24; 118 } 119 $sql_where .= "{$and}timeonline > '".$timeonline."'"; 120 $and = " AND "; 121 } 122 123 if(!empty($promotion['originalusergroup']) && $promotion['originalusergroup'] != '*') 124 { 125 $sql_where .= "{$and}usergroup IN ({$promotion['originalusergroup']})"; 126 127 $and = " AND "; 128 } 129 130 if(!empty($promotion['newusergroup'])) 131 { 132 // Skip users that are already in the new group 133 switch($db->type) 134 { 135 case "pgsql": 136 case "sqlite": 137 $sql_where .= "{$and}usergroup != '{$promotion['newusergroup']}' AND ','||additionalgroups||',' NOT LIKE '%,{$promotion['newusergroup']},%'"; 138 break; 139 default: 140 $sql_where .= "{$and}usergroup != '{$promotion['newusergroup']}' AND CONCAT(',', additionalgroups, ',') NOT LIKE '%,{$promotion['newusergroup']},%'"; 141 } 142 143 $and = " AND "; 144 } 145 146 $uid = array(); 147 $log_inserts = array(); 148 149 if($promotion['usergrouptype'] == "secondary") 150 { 151 $usergroup_select = "additionalgroups"; 152 } 153 else 154 { 155 $usergroup_select = "usergroup"; 156 } 157 158 if(is_object($plugins)) 159 { 160 $args = array( 161 'task' => &$task, 162 'promotion' => &$promotion, 163 'sql_where' => &$sql_where, 164 'and' => &$and, 165 'usergroup_select' => &$usergroup_select 166 ); 167 $plugins->run_hooks('task_promotions', $args); 168 } 169 170 $query2 = $db->simple_select("users", "uid,{$usergroup_select}", $sql_where); 171 172 $uids = array(); 173 while($user = $db->fetch_array($query2)) 174 { 175 if(is_super_admin($user['uid'])) 176 { 177 // Skip super admins 178 continue; 179 } 180 181 // super admin check? 182 if($usergroup_select == "additionalgroups") 183 { 184 $log_inserts[] = array( 185 'pid' => $promotion['pid'], 186 'uid' => $user['uid'], 187 'oldusergroup' => $db->escape_string($user['additionalgroups']), 188 'newusergroup' => $promotion['newusergroup'], 189 'dateline' => TIME_NOW, 190 'type' => "secondary", 191 ); 192 } 193 else 194 { 195 $log_inserts[] = array( 196 'pid' => $promotion['pid'], 197 'uid' => $user['uid'], 198 'oldusergroup' => $user['usergroup'], 199 'newusergroup' => $promotion['newusergroup'], 200 'dateline' => TIME_NOW, 201 'type' => "primary", 202 ); 203 } 204 205 $uids[] = $user['uid']; 206 207 208 if($usergroup_select == "additionalgroups") 209 { 210 if(join_usergroup($user['uid'], $promotion['newusergroup']) === false) 211 { 212 // Did the user already have the additional usergroup? 213 array_pop($log_inserts); 214 array_pop($uids); 215 } 216 } 217 218 if((count($uids) % 20) == 0) 219 { 220 if($usergroup_select == "usergroup") 221 { 222 $db->update_query("users", array('usergroup' => $promotion['newusergroup']), "uid IN(".implode(",", $uids).")"); 223 } 224 225 if(!empty($log_inserts)) 226 { 227 $db->insert_query_multiple("promotionlogs", $log_inserts); 228 } 229 230 $uids = array(); 231 $log_inserts = array(); 232 } 233 } 234 235 if(count($uids) > 0) 236 { 237 if($usergroup_select == "usergroup") 238 { 239 $db->update_query("users", array('usergroup' => $promotion['newusergroup']), "uid IN(".implode(",", $uids).")"); 240 } 241 242 if(!empty($log_inserts)) 243 { 244 $db->insert_query_multiple("promotionlogs", $log_inserts); 245 } 246 247 $uids = array(); 248 $log_inserts = array(); 249 } 250 } 251 252 $cache->update_moderators(); 253 254 add_task_log($task, $lang->task_promotions_ran); 255 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
2005 - 2021 © MyBB.de | Alle Rechte vorbehalten! | Sponsor: netcup | Cross-referenced by PHPXref |