Esempio n. 1
0
 /**
  * Moderate users
  *
  * @param array $validate Validate information
  * @param bool $send_validated Whether to send email to users who have been accepted
  * @param bool $send_deleted Whether to send email to users who have been deleted
  * @return bool True if user accounts validated successfully
  */
 public function moderate($validate, $send_validated, $send_deleted)
 {
     $this->checkHasAdminPermission('canadminusers');
     if (empty($validate)) {
         throw new vB_Exception_Api('please_complete_required_fields');
     }
     $evalemail_validated = array();
     $evalemail_deleted = array();
     $vboptions = vB::getDatastore()->getValue('options');
     $usergroupcache = vB::getDatastore()->getValue('usergroupcache');
     $bf_ugp_genericpermissions = vB::getDatastore()->getValue('bf_ugp_genericpermissions');
     require_once DIR . '/includes/functions_misc.php';
     if ($vboptions['welcomepm']) {
         if ($fromuser = vB_User::fetchUserInfo($vboptions['welcomepm'])) {
             cache_permissions($fromuser, false);
         }
     }
     foreach ($validate as $userid => $status) {
         $userid = intval($userid);
         $user = vB::getDbAssertor()->getRow('user', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, '#filters' => array('userid' => $userid)));
         if (!$user) {
             // use was likely deleted
             continue;
         }
         $username = unhtmlspecialchars($user['username']);
         $chosenlanguage = iif($user['languageid'] < 1, intval($vboptions['languageid']), intval($user['languageid']));
         if ($status == 1) {
             // validated
             // init user data manager
             $displaygroupid = ($user['displaygroupid'] > 0 and $user['displaygroupid'] != $user['usergroupid']) ? $user['displaygroupid'] : 2;
             $userdata = new vB_Datamanager_User(vB_DataManager_Constants::ERRTYPE_ARRAY_UNPROCESSED);
             $userdata->set_existing($user);
             $userdata->set('usergroupid', 2);
             $userdata->set_usertitle($user['customtitle'] ? $user['usertitle'] : '', false, $usergroupcache["{$displaygroupid}"], $usergroupcache['2']['genericpermissions'] & $bf_ugp_genericpermissions['canusecustomtitle'] ? true : false, false);
             $userdata->save();
             if ($userdata->has_errors(false)) {
                 throw $userdata->get_exception();
             }
             if ($send_validated) {
                 if (!isset($evalemail_validated["{$user['languageid']}"])) {
                     // note that we pass the "all languages" flag as true all the time because if the function does
                     // caching internally and is not smart enough to check if the language requested the second time
                     // was cached on the first pass -- so we make sure that we load and cache all language version
                     // in case the second user has a different language from the first
                     $forumHome = vB_Library::instance('content_channel')->getForumHomeChannel();
                     $evalemail_deleted["{$user['languageid']}"] = vB_Api::instanceInternal('phrase')->fetchEmailPhrases('moderation_validated', array(vB5_Route::buildUrl($forumHome['routeid'] . '|fullurl'), $username, $vboptions['bbtitle'], $vboptions['bburl']), array($vboptions['bbtitle']), $chosenlanguage);
                 }
                 vB_Mail::vbmail($user['email'], $evalemail_deleted["{$user['languageid']}"]['subject'], $evalemail_deleted["{$user['languageid']}"]['message'], true);
             }
             if ($vboptions['welcomepm'] and $fromuser and !$user['posts']) {
                 $userdata = new vB_Datamanager_User(vB_DataManager_Constants::ERRTYPE_STANDARD);
                 $userdata->send_welcomepm(null, $user['userid']);
             }
         } else {
             if ($status == -1) {
                 // deleted
                 if ($send_deleted) {
                     if (!isset($evalemail_deleted["{$user['languageid']}"])) {
                         // note that we pass the "all languages" flag as true all the time because if the function does
                         // caching internally and is not smart enough to check if the language requested the second time
                         // was cached on the first pass -- so we make sure that we load and cache all language version
                         // in case the second user has a different language from the first
                         $evalemail_deleted["{$user['languageid']}"] = vB_Api::instanceInternal('phrase')->fetchEmailPhrases('moderation_deleted', array($username, $vboptions['bbtitle']), array($vboptions['bbtitle']), $chosenlanguage);
                     }
                     vB_Mail::vbmail($user['email'], $evalemail_deleted["{$user['languageid']}"]['subject'], $evalemail_deleted["{$user['languageid']}"]['message'], true);
                 }
                 $userdm = new vB_Datamanager_User(vB_DataManager_Constants::ERRTYPE_SILENT);
                 $userdm->set_existing($user);
                 $userdm->delete();
                 unset($userdm);
             }
         }
         // else, do nothing
     }
     // rebuild stats so new user displays on forum home
     require_once DIR . '/includes/functions_databuild.php';
     build_user_statistics();
     return true;
 }
Esempio n. 2
0
 /**
  * Update user's display group
  *
  * @param  $userid User ID
  * @param  $usergroupid Usergroup ID to be used as display group
  * @return void
  */
 public function updateDisplayGroup($userid, $usergroupid)
 {
     $userinfo = vB_Api::instanceInternal('user')->fetchUserinfo($userid);
     $membergroups = fetch_membergroupids_array($userinfo);
     $permissions = $userinfo['permissions'];
     $vbulletin = vB::get_registry();
     $bf_ugp_genericpermissions = vB::getDatastore()->get_value('bf_ugp_genericpermissions');
     if ($usergroupid == 0) {
         throw new vB_Exception_Api('invalidid', array('usergroupid'));
     }
     if (!in_array($usergroupid, $membergroups)) {
         throw new vB_Exception_Api('notmemberofdisplaygroup');
     } else {
         $display_usergroup = $vbulletin->usergroupcache["{$usergroupid}"];
         //I'm  not sure why we require canoverride to set the display group... this is *not* required
         //by the the admincp user interface which uses a different method of saving.
         if ($usergroupid == $userinfo['usergroupid'] or $display_usergroup['canoverride']) {
             $userinfo['displaygroupid'] = $usergroupid;
             // init user data manager
             $userdata = new vB_Datamanager_User(vB_DataManager_Constants::ERRTYPE_ARRAY_UNPROCESSED);
             $userdata->set_existing($userinfo);
             $userdata->set('displaygroupid', $usergroupid);
             if (!$userinfo['customtitle']) {
                 $userdata->set_usertitle($userinfo['customtitle'] ? $userinfo['usertitle'] : '', false, $display_usergroup, $permissions['genericpermissions'] & $bf_ugp_genericpermissions['canusecustomtitle'] ? true : false, $permissions['genericpermissions'] & $bf_ugp_genericpermissions['cancontrolpanel'] ? true : false);
             }
             $userdata->save();
         } else {
             throw new vB_Exception_Api('usergroup_invaliddisplaygroup');
         }
     }
 }
Esempio n. 3
0
     }
 }
 $users = vB::getDbAssertor()->assertQuery('user', array(vB_dB_Query::TYPE_KEY => vB_dB_Query::QUERY_SELECT, vB_dB_Query::CONDITIONS_KEY => array(array('field' => 'userid', 'value' => array_keys($vbulletin->GPC['validate']), 'operator' => vB_dB_Query::OPERATOR_EQ))));
 //		foreach($vbulletin->GPC['validate'] AS $userid => $status)
 foreach ($users as $user) {
     $status = $vbulletin->GPC['validate'][$user['userid']];
     $username = unhtmlspecialchars($user['username']);
     $chosenlanguage = iif($user['languageid'] < 1, intval($vbulletin->options['languageid']), intval($user['languageid']));
     if ($status == 1) {
         // validated
         // init user data manager
         $displaygroupid = ($user['displaygroupid'] > 0 and $user['displaygroupid'] != $user['usergroupid']) ? $user['displaygroupid'] : 2;
         $userdata = new vB_Datamanager_User($vbulletin, vB_DataManager_Constants::ERRTYPE_CP);
         $userdata->set_existing($user);
         $userdata->set('usergroupid', 2);
         $userdata->set_usertitle($user['customtitle'] ? $user['usertitle'] : '', false, $vbulletin->usergroupcache["{$displaygroupid}"], $vbulletin->usergroupcache['2']['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canusecustomtitle'] ? true : false, false);
         $userdata->save();
         vB_Cache::instance(vB_Cache::CACHE_FAST)->event(array('userPerms_' . $user['userid'], 'userChg_' . $user['userid']));
         vB_Cache::instance(vB_Cache::CACHE_LARGE)->event(array('userPerms_' . $user['userid'], 'userChg_' . $user['userid']));
         if ($vbulletin->GPC['send_validated']) {
             if (!isset($evalemail_validated["{$user['languageid']}"])) {
                 //note that we pass the "all languages" flag as true all the time because if the function does
                 //caching internally and is not smart enough to check if the language requested the second time
                 //was cached on the first pass -- so we make sure that we load and cache all language version
                 //in case the second user has a different language from the first
                 $forumHome = vB_Library::instance('content_channel')->getForumHomeChannel();
                 $evalemail_deleted["{$user['languageid']}"] = vB_Api::instanceInternal('phrase')->fetchEmailPhrases('moderation_validated', array(vB5_Route::buildUrl($forumHome['routeid'] . '|fullurl'), $username, $vboptions['bbtitle'], $vboptions['bburl']), array($vboptions['bbtitle']), $chosenlanguage);
             }
             vB_Mail::vbmail($user['email'], $evalemail_deleted["{$user['languageid']}"]['subject'], $evalemail_deleted["{$user['languageid']}"]['message'], true);
         }
         if ($vbulletin->options['welcomepm'] and $fromuser and !$user['posts']) {
Esempio n. 4
0
 /**
  * Additional data to update after a save call (such as denormalized values in other tables).
  *
  * @param	boolean	Do the query?
  */
 function post_save_each($doquery = true)
 {
     $moderatorid = $this->fetch_field('moderatorid');
     // update usergroupid / membergroupids
     if (!$this->condition and !in_array($this->moderator['userid'], explode(',', $this->config['SpecialUsers']['undeletableusers'])) and can_administer('canadminusers')) {
         $update_usergroupid = $this->info['usergroupid'] > 0;
         $update_membergroup = (!empty($this->info['membergroupids']) and is_array($this->info['membergroupids']));
         if ($update_usergroupid or $update_membergroup) {
             $userdata = new vB_Datamanager_User($this->registry, vB_DataManager_Constants::ERRTYPE_SILENT);
             if (!$this->info['user'] and $this->moderator['userid']) {
                 $this->info['user'] = fetch_userinfo($this->moderator['userid']);
             }
             $userdata->set_existing($this->info['user']);
             cache_permissions($this->info['user'], false);
             $displaygroupid = $update_usergroupid ? $this->info['usergroupid'] : $this->info['user']['displaygroupid'];
             $this->usergroupcache = vB::getDatastore()->get_value('usergroupcache');
             $userdata->set_usertitle($this->info['user']['customtitle'] ? $this->info['user']['usertitle'] : '', false, $this->usergroupcache["{$displaygroupid}"], ($this->info['user']['customtitle'] == 1 or $this->info['user']['permissions']['genericpermissions'] & $this->bf_ugp_genericpermissions['canusecustomtitle']) ? true : false, $this->info['user']['customtitle'] == 1 ? true : false);
             $userdata->set_failure_callback(array(&$this, 'update_user_failed_insert'));
             if ($update_usergroupid) {
                 $userdata->set('usergroupid', $this->info['usergroupid']);
                 $userdata->set('displaygroupid', $this->info['usergroupid']);
             }
             if ($update_membergroup) {
                 $membergroupids = preg_split('#,#', $this->info['user']['membergroupids'], -1, PREG_SPLIT_NO_EMPTY);
                 $membergroupids = array_unique(array_merge($membergroupids, $this->info['membergroupids']));
                 if ($key = array_search($this->info['user']['usergroupid'], $membergroupids)) {
                     unset($membergroupids["{$key}"]);
                 }
                 sort($membergroupids);
                 $userdata->set('membergroupids', $membergroupids);
             }
             if ($userdata->errors) {
                 $this->errors = array_merge($this->errors, $userdata->errors);
                 return;
             }
             $userdata->save();
         }
     }
     if (!$this->condition and !$this->options['ignoremods']) {
         $rebuild_ignore_list = array();
         $ignored_moderators = $this->assertor->getRows('userlist', array('relationid' => $this->fetch_field('userid'), 'type' => 'ignore'));
         foreach ($ignored_moderators as $ignored_moderator) {
             $rebuild_ignore_list[] = $ignored_moderator['userid'];
         }
         if (!empty($rebuild_ignore_list)) {
             require_once DIR . '/includes/functions_databuild.php';
             $this->assertor->delete('userlist', array('relationid' => $this->fetch_field('userid'), 'type' => 'ignore'));
             foreach ($rebuild_ignore_list as $userid) {
                 build_userlist($userid);
             }
         }
     }
     // Legacy Hook 'moderatordata_postsave' Removed //
     vB_Cache::instance(vB_Cache::CACHE_FAST)->event('userPerms_' . $this->moderator['userid']);
 }
Esempio n. 5
0
 }
 echo '<p>' . $vbphrase['updating_user_info'] . '</p>';
 $tmp_usergroup_cache = array();
 $infractiongroups = array();
 $groups = $vbulletin->db->query_read("\n\t\tSELECT usergroupid, orusergroupid, pointlevel, override\n\t\tFROM " . TABLE_PREFIX . "infractiongroup\n\t\tORDER BY pointlevel\n\t");
 while ($group = $vbulletin->db->fetch_array($groups)) {
     $infractiongroups["{$group['usergroupid']}"]["{$group['pointlevel']}"][] = array('orusergroupid' => $group['orusergroupid'], 'override' => $group['override']);
 }
 $users = $vbulletin->db->query_read("\n\t\tSELECT user.*, usertextfield.rank,\n\t\tIF(user.displaygroupid=0, user.usergroupid, user.displaygroupid) AS displaygroupid\n\t\tFROM " . TABLE_PREFIX . "user AS user\n\t\tLEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield USING (userid)\n\t\tWHERE user.userid >= " . $vbulletin->GPC['startat'] . "\n\t\tORDER BY user.userid\n\t\tLIMIT " . $vbulletin->GPC['perpage']);
 $finishat = $vbulletin->GPC['startat'];
 $infractionLibrary = vB_Library::instance('Content_Infraction');
 while ($user = $vbulletin->db->fetch_array($users)) {
     $userdm = new vB_Datamanager_User($vbulletin, vB_DataManager_Constants::ERRTYPE_CP);
     $userdm->set_existing($user);
     cache_permissions($user, false);
     $userdm->set_usertitle($user['customtitle'] ? $user['usertitle'] : '', false, $vbulletin->usergroupcache["{$user['displaygroupid']}"], ($user['customtitle'] == 1 or $user['permissions']['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canusecustomtitle']) ? true : false, $user['customtitle'] == 1 ? true : false);
     if ($lastpost = $vbulletin->db->query_first("SELECT MAX(publishdate) AS dateline FROM " . TABLE_PREFIX . "node WHERE userid = {$user['userid']}")) {
         $lastpost['dateline'] = intval($lastpost['dateline']);
     } else {
         $lastpost['dateline'] = 0;
     }
     $infractioninfo = $infractionLibrary->fetchInfractionGroups($infractiongroups, $user['userid'], $user['ipoints'], $user['usergroupid']);
     $userdm->set('infractiongroupids', $infractioninfo['infractiongroupids']);
     $userdm->set('infractiongroupid', $infractioninfo['infractiongroupid']);
     $userdm->set('posts', $user['posts']);
     // This will activate the rank update
     $userdm->set('lastpost', $lastpost['dateline']);
     $userdm->save();
     unset($userdm);
     echo construct_phrase($vbphrase['processing_x'], $user['userid']) . "<br />\n";
     vbflush();