url->getUrl('core:core', 'main', 'action=index')); exit; } if(varset($_POST['useraction'])) { foreach($_POST['useraction'] as $key=>$val) { if($val) { $_POST['useraction'] = $val; $_POST['userip'] = $_POST['userip'][$key]; $_POST['userid'] = $key; break; } } } if (isset($_POST['useraction']) && $_POST['useraction'] == 'userinfo') { header('location:'.e_ADMIN."userinfo.php?".$e107->tp->toDB($_POST['userip'])); exit; } if (isset($_POST['useraction']) && $_POST['useraction'] == 'usersettings') { header('location:'. $e107->url->getUrl('core:user', 'main', 'func=settings&id='.(int)$_POST['userid'])); exit; } if (isset($_POST['useraction']) && $_POST['useraction'] == 'userclass') { header('location:'.e_ADMIN.'userclass.php?'.$e107->tp->toDB($_POST['userid'].'.'.e_QUERY)); exit; } function headerjs() { require_once(e_HANDLER.'js_helper.php'); return ""; } require_once(e_HANDLER.'message_handler.php'); $emessage = &eMessage::getInstance(); if(isset($_POST['delete_rank'])) { foreach($_POST['delete_rank'] as $k => $v) { deleteRank($k); } } if(isset($_POST['updateRanks'])) { updateRanks(); } $e_sub_cat = 'users'; require_once('auth.php'); $user = new users; require_once(e_HANDLER.'form_handler.php'); require_once(e_HANDLER.'userclass_class.php'); include_once(e_HANDLER.'user_extended_class.php'); require_once(e_HANDLER.'validator_class.php'); require_once(e_HANDLER.'user_handler.php'); // $userMethods = new UserHandler; // $colList = $userMethods->getNiceNames(TRUE); $ue = new e107_user_extended; $userMethods = new UserHandler; $user_data = array(); $frm = new e_form; $rs = new form; if (e_QUERY) { $tmp = explode('.', e_QUERY); $action = $tmp[0]; $sub_action = varset($tmp[1],''); $id = varset($tmp[2],0); $from = varset($tmp[3],0); unset($tmp); } $from = varset($from, 0); $amount = 30; if($action == 'ranks') { show_ranks(); } // ------- Check for Bounces -------------- $bounce_act = ''; if (isset($_POST['check_bounces'])) $bounce_act = 'first_check'; if (isset($_POST['delnonbouncesubmit'])) $bounce_act = 'delnonbounce'; if (isset($_POST['clearemailbouncesubmit'])) $bounce_act = 'clearemailbounce'; if (isset($_POST['delcheckedsubmit'])) $bounce_act = 'delchecked'; if (isset($_POST['delallsubmit'])) $bounce_act = 'delall'; if ($bounce_act) { $user->check_bounces($bounce_act, implode(',',$_POST['delete_email'])); require_once("footer.php"); exit; } // ------- Resend Email. -------------- if (isset($_POST['resend_mail'])) { $user->resend($_POST['resend_id'],$_POST['resend_key'],$_POST['resend_name'],$_POST['resend_email']); } // ------- Resend Email. -------------- if(isset($_POST['resend_to_all'])) { $user->resend_to_all(); } // ------- Test Email. -------------- if (isset($_POST['test_mail'])) { require_once(e_HANDLER.'mail_validation_class.php'); list($adminuser,$adminhost) = split ("@", SITEADMINEMAIL); $validator = new email_validation_class; $validator->localuser= $adminuser; $validator->localhost= $adminhost; $validator->timeout=5; $validator->debug=1; $validator->html_debug=1; $text = "
"; ob_start(); $email_status = $validator->ValidateEmailBox($_POST['test_email']); $text .= ob_get_contents(); ob_end_clean(); $text .= "
"; $caption = $_POST['test_email']." - "; $caption .= ($email_status == 1)? "Valid": "Invalid"; if($email_status == 1){ $text .= "
\n \n \n
\n"; $text .= "
"; } $ns->tablerender($caption, $text); unset($id, $action, $sub_cation); } // ------- Update Options. -------------- if (isset($_POST['update_options'])) { $temp = array(); $temp['avatar_upload'] = (FILE_UPLOADS ? $_POST['avatar_upload'] : 0); $temp['im_width'] = $_POST['im_width']; $temp['im_height'] = $_POST['im_height']; $temp['photo_upload'] = (FILE_UPLOADS ? $_POST['photo_upload'] : 0); $temp['del_unv'] = $_POST['del_unv']; $temp['profile_rate'] = $_POST['profile_rate']; $temp['profile_comments'] = $_POST['profile_comments']; $temp['track_online'] = $_POST['track_online']; $temp['force_userupdate'] = $_POST['force_userupdate']; $temp['memberlist_access'] = $_POST['memberlist_access']; $temp['user_new_period'] = $_POST['user_new_period']; if ($admin_log->logArrayDiffs($temp, $pref, 'USET_03')) { save_prefs(); // Only save if changes $user->show_message(USRLAN_1); } else { $user->show_message(USRLAN_193); } } // ------- Prune Users. -------------- if (isset($_POST['prune'])) { $e107cache->clear('online_menu_member_total'); $e107cache->clear('online_menu_member_newest'); $text = USRLAN_56.' '; $bantype = $_POST['prune_type']; if($bantype == 30) // older than 30 days. { $bantype = 2; $ins = " AND user_join < ".strtotime("-30 days"); } if ($sql->db_Select("user", "user_id, user_name", "user_ban= {$bantype}".$ins)) { $uList = $sql->db_getList(); foreach($uList as $u) { $text .= $u['user_name']." "; $sql->db_Delete("user", "user_id='{$u['user_id']}' "); $sql->db_Delete("user_extended", "user_extended_id='{$u['user_id']}' "); } $admin_log->log_event('USET_04',str_replace(array('--COUNT--','--TYPE--'),array(count($uList),$bantype),USRLAN_160),E_LOG_INFORMATIVE); } $ns->tablerender(USRLAN_57, "
".$text."
"); unset($text); } // ------- Quick Add User -------------- if (isset($_POST['adduser'])) { if (!$_POST['ac'] == md5(ADMINPWCHANGE)) { exit; } $e107cache->clear('online_menu_member_total'); $e107cache->clear('online_menu_member_newest'); $error = FALSE; if (isset($_POST['generateloginname'])) { $_POST['loginname'] = $userMethods->generateUserLogin($pref['predefinedLoginName']); } if (isset($_POST['generatepassword'])) { $_POST['password1'] = $userMethods->generateRandomString('**********'); // 10-char password should be enough $_POST['password2'] = $_POST['password1']; } // Now validate everything $allData = validatorClass::validateFields($_POST,$userMethods->userVettingInfo, TRUE); // Do basic validation validatorClass::checkMandatory('user_name,user_loginname', $allData); // Check for missing fields (email done in userValidation() ) validatorClass::dbValidateArray($allData, $userMethods->userVettingInfo, 'user', 0); // Do basic DB-related checks $userMethods->userValidation($allData); // Do user-specific DB checks if (!isset($allData['errors']['user_password'])) { // No errors in password - keep it outside the main data array $savePassword = $allData['data']['user_password']; unset($allData['data']['user_password']); // Delete the password value in the output array } unset($_POST['password1']); // Restrict the scope of this unset($_POST['password2']); if (!check_class($pref['displayname_class'], $allData['data']['user_class'])) { if ($allData['data']['user_name'] != $allData['data']['user_loginname']) { $allData['errors']['user_name'] = ERR_FIELDS_DIFFERENT; } } if (count($allData['errors'])) { require_once(e_HANDLER."message_handler.php"); $temp = validatorClass::makeErrorList($allData,'USER_ERR_','%n - %x - %t: %v', '
', $userMethods->userVettingInfo); message_handler('P_ALERT', $temp); $error = TRUE; } // Always save some of the entered data - then we can redisplay on error $user_data = &$allData['data']; if (!$error) { $message = ''; $user_data['user_password'] = $userMethods->HashPassword($savePassword,$loginname); $user_data['user_join'] = time(); if ($userMethods->needEmailPassword()) { // Save separate password encryption for use with email address $user_data['user_prefs'] = serialize(array('email_password' => $userMethods->HashPassword($savePassword, $user_data['user_email']))); } $userMethods->userClassUpdate($allData['data'], 'userall'); // Set any initial classes $userMethods->addNonDefaulted($user_data); validatorClass::addFieldTypes($userMethods->userVettingInfo,$allData); //FIXME - (SecretR) there is a better way to fix this (missing default value, sql error in strict mode - user_realm is to be deleted from DB later) $allData['data']['user_realm'] = ''; if ($sql -> db_Insert('user', $allData)) { // Add to admin log $admin_log->log_event('USET_02',"UName: {$user_data['user_name']}; Email: {$user_data['user_email']}",E_LOG_INFORMATIVE); // Add to user audit trail $admin_log->user_audit(USER_AUDIT_ADD_ADMIN,$user_data, 0,$user_data['user_loginname']); $e_event->trigger('userfull', $user_data); // send everything available for user data - bit sparse compared with user-generated signup if (isset($_POST['sendconfemail'])) { // Send confirmation email to user require_once(e_HANDLER.'mail.php'); $e_message = str_replace(array('--SITE--','--LOGIN--','--PASSWORD--'),array(SITEURL,$loginname,$savePassword),USRLAN_185).USRLAN_186; if (sendemail($user_data['user_email'],USRLAN_187.SITEURL,$e_message,$user_data['user_login'],'','')) { $message = USRLAN_188.'

'; } else { $message = USRLAN_189.'

'; } } $message .= str_replace('--NAME--',$user_data['user_name'], USRLAN_174) ; if (isset($_POST['generateloginname'])) $message .= '

'.USRLAN_173.': '.$loginname; if (isset($_POST['generatepassword'])) $message .= '

'.USRLAN_172.': '.$savePassword; unset($user_data); // Don't recycle the data once the user's been accepted without error } } if (isset($message)) $user->show_message($message); } // ------- Bounce --> Unverified -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == "reqverify") { $sql->db_Select("user", "*", "user_id='".$_POST['userid']."'"); $row = $sql->db_Fetch(); extract($row); $sql->db_Update("user", "user_ban='2' WHERE user_id='".$_POST['userid']."' "); $user->show_message("User now has to verify"); $action = "main"; if(!$sub_action) {$sub_action = "user_id"; } } // ------- Ban User. -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == "ban") { // $sub_action = $_POST['userid']; $sql->db_Select("user", "*", "user_id='".$_POST['userid']."'"); $row = $sql->db_Fetch(); if (($row['user_perms'] == "0") || ($row['user_perms'] == "0.")) { $user->show_message(USRLAN_7); } else { if($sql->db_Update("user", "user_ban='1' WHERE user_id='".$_POST['userid']."' ")) { $admin_log->log_event('USET_05',str_replace(array('--UID--','--NAME--'),array($row['user_id'],$row['user_name']),USRLAN_161),E_LOG_INFORMATIVE); $user->show_message(USRLAN_8); } if(trim($row['user_ip']) == "") { $user->show_message(USRLAN_135); } else { if($sql->db_Count("user", "(*)", "WHERE user_ip = '{$row['user_ip']}'") > 1) { // Multiple users have same IP address $user->show_message(str_replace("{IP}", $row['user_ip'], USRLAN_136)); } else { if ($e107->add_ban(6,USRLAN_149.$row['user_name'].'/'.$row['user_loginname'],$row['user_ip'],USERID)) { // Successful IP ban $user->show_message(str_replace("{IP}", $row['user_ip'], USRLAN_137)); } else { // IP address on whitelist $user->show_message(str_replace("{IP}", $row['user_ip'], USRLAN_150)); } } } } $action = "main"; if(!$sub_action){$sub_action = "user_id"; } } // ------- Unban User -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == "unban") { $sql->db_Select("user", "user_name,user_ip", "user_id='".$_POST['userid']."'"); $row = $sql->db_Fetch(); $sql->db_Update("user", "user_ban='0' WHERE user_id='".$_POST['userid']."' "); $sql -> db_Delete("banlist", " banlist_ip='{$row['user_ip']}' "); $admin_log->log_event('USET_06',str_replace(array('--UID--','--NAME--'),array($_POST['userid'],$row['user_name']),USRLAN_162),E_LOG_INFORMATIVE); $user->show_message(USRLAN_9); $action = "main"; if(!$sub_action){$sub_action = "user_id"; } } // ------- Resend Email Confirmation. -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == 'resend') { $qry = (e_QUERY) ? "?".e_QUERY : ""; if ($sql->db_Select("user", "*", "user_id='".$_POST['userid']."' ")) { $resend = $sql->db_Fetch(); $text .= "
\n"; $text .= USRLAN_116." ".$resend['user_name']."

\n \n \n \n \n
\n"; $caption = USRLAN_112; $ns->tablerender($caption, $text); require_once("footer.php"); exit; } } // ------- TEst Email confirmation. -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == 'test') { $qry = (e_QUERY) ? "?".e_QUERY : ""; if ($sql->db_Select("user", "*", "user_id='".$_POST['userid']."' ")) { $test = $sql->db_Fetch(); $text .= "
\n"; $text .= USRLAN_117."
".$test['user_email']."

\n \n \n
\n"; $caption = USRLAN_118; $ns->tablerender($caption, $text); require_once("footer.php"); exit; } } // ------- Delete User -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == 'deluser') { if ($_POST['confirm']) { $uid = intval($_POST['userid']); if ($sql->db_Delete("user", "user_id=".$uid." AND user_perms != '0' AND user_perms != '0.'")) { $sql->db_Delete("user_extended", "user_extended_id='".$uid."' "); $admin_log->log_event('USET_07',str_replace('--UID--',$uid,USRLAN_163),E_LOG_INFORMATIVE); $e_event->trigger('userdelete', $temp = array('user_id' => $uid)); $user->show_message(USRLAN_10); } if(!$sub_action){ $sub_action = "user_id"; } if(!$id){ $id = "DESC"; } } else { // Put up confirmation if ($sql->db_Select("user", "*", "user_id='".$_POST['userid']."' ")) { $row = $sql->db_Fetch(); $qry = (e_QUERY) ? "?".e_QUERY : ""; $text .= "
\n"; $text .= "
". USRLAN_13."

#{$row['user_id']} : {$row['user_name']}

  
"; $ns->tablerender(USRLAN_16, $text); require_once("footer.php"); exit; } } } // ------- Make Admin -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == "admin" && getperms('3')) { $sql->db_Select("user", "user_id, user_name", "user_id='".$_POST['userid']."'"); $row = $sql->db_Fetch(); $sql->db_Update("user", "user_admin='1' WHERE user_id='".$_POST['userid']."' "); $admin_log->log_event('USET_08',str_replace(array('--UID--','--NAME--'),array($row['user_id'],$row['user_name']),USRLAN_164),E_LOG_INFORMATIVE); $user->show_message($row['user_name']." ".USRLAN_3." ".USRLAN_4.""); $action = "main"; if(!$sub_action){ $sub_action = "user_id"; } if(!$id){ $id = "DESC"; } } // ------- Remove Admin -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == "unadmin" && getperms('3')) { $sql->db_Select("user", "*", "user_id='".$_POST['userid']."'"); $row = $sql->db_Fetch(); extract($row); if ($user_perms == "0") { $user->show_message(USRLAN_5); } else { $sql->db_Update("user", "user_admin='0', user_perms='' WHERE user_id='".$_POST['userid']."'"); $admin_log->log_event('USET_09',str_replace(array('--UID--','--NAME--'),array($row['user_id'],$row['user_name']),USRLAN_165),E_LOG_INFORMATIVE); $user->show_message($user_name." ".USRLAN_6); $action = "main"; if(!$sub_action){ $sub_action = "user_id"; } if(!$id){ $id = "DESC"; } } } // ------- Approve User. -------------- if (isset($_POST['useraction']) && $_POST['useraction'] == "verify") { $uid = intval($_POST['userid']); if ($sql->db_Select("user", "*", "user_id='".$uid."' ")) { if ($row = $sql->db_Fetch()) { $dbData = array(); $dbData['WHERE'] = "user_id=".$uid; $dbData['data'] = array('user_ban'=>'0', 'user_sess'=>''); // Add in the initial classes as necessary if ($userMethods->userClassUpdate($row, 'userall')) { $dbData['data']['user_class'] = $row['user_class']; } $userMethods->addNonDefaulted($dbData); validatorClass::addFieldTypes($userMethods->userVettingInfo,$dbData); $sql->db_Update('user',$dbData); $admin_log->log_event('USET_10',str_replace(array('--UID--','--NAME--'),array($row['user_id'],$row['user_name']),USRLAN_166),E_LOG_INFORMATIVE); $e_event->trigger('userfull', $row); // 'New' event $user->show_message(USRLAN_86); if(!$action){ $action = "main"; } if(!$sub_action){ $sub_action = "user_id"; } if(!$id){ $id = "DESC"; } if($pref['user_reg_veri'] == 2) { if($sql->db_Select("user", "user_email, user_name", "user_id = '{$uid}'")) { $row = $sql->db_Fetch(); $message = USRLAN_114." ".$row['user_name'].",\n\n".USRLAN_122." ".SITENAME.".\n\n".USRLAN_123."\n\n"; $message .= str_replace("{SITEURL}", SITEURL, USRLAN_139); require_once(e_HANDLER."mail.php"); if(sendemail($row['user_email'], USRLAN_113." ".SITENAME, $message)) { // echo str_replace("\n","
",$message); $user->show_message("Email sent to: ".$row['user_name']); } else { $user->show_message("Failed to send to: ".$row['user_name']); } } } } } } if (isset($action) && $action == "uset") { $user->show_message(USRLAN_87); $action = "main"; } if (isset($action) && $action == "cu") { $user->show_message(USRLAN_88); $action = "main"; // $sub_action = "user_id"; } /* echo "action= ".$action."
"; echo "subaction= ".$sub_action."
"; echo "id= ".$id."
"; echo "from= ".$from."
"; echo "amount= ".$amount."
"; */ $unverified = $sql -> db_Count("user", "(*)", "WHERE user_ban = 2"); if (!e_QUERY) $action = "main"; switch ($action) { case "unverified" : $user->show_existing_users($action, $sub_action, $id, $from, $amount); break; case "options" : $user->show_prefs(); break; case "prune" : $user->show_prune(); break; case "create" : $userMethods->deleteExpired(); // Remove time-expired users $user->add_user($user_data); break; default : $user->show_existing_users($action, $sub_action, $id, $from, $amount); } require_once("footer.php"); class users { var $fields = array(); var $fieldpref = array(); function users() { global $pref, $user_pref, $sql, $tp; if(isset($pref['admin_user_disp'])) { $user_pref['admin_users_columns'] = ($pref['admin_user_disp']) ? explode("|",$pref['admin_user_disp']) : array('user_name', 'user_class'); save_prefs('user'); unset($pref['admin_user_disp']); save_prefs; } $this->usersSaveColumnPref(); $this->fieldpref = (!$user_pref['admin_users_columns']) ? array('user_name', 'user_class') : $user_pref['admin_users_columns']; $this->fields = array( 'user_id' => array('title'=> 'Id', 'width'=>'5%', 'forced'=> TRUE), 'user_status' => array('title'=> ADLAN_134, 'forced'=> TRUE), 'user_name' => array('title'=> LAN_USER_01, 'type' => 'text', 'width' => 'auto', 'thclass' => 'left first'), // Display name 'user_loginname' => array('title'=> LAN_USER_02, 'type' => 'text', 'width' => 'auto'), // User name 'user_login' => array('title'=> LAN_USER_03, 'type' => 'text', 'width' => 'auto'), // Real name (no real vetting) 'user_customtitle' => array('title'=> LAN_USER_04, 'type' => 'text', 'width' => 'auto'), // No real vetting 'user_password' => array('title'=> LAN_USER_05, 'type' => 'text', 'width' => 'auto'), 'user_sess' => array('title'=> LAN_USER_06, 'type' => 'text', 'width' => 'auto'), // Photo 'user_image' => array('title'=> LAN_USER_07, 'type' => 'text', 'width' => 'auto'), // Avatar 'user_email' => array('title'=> LAN_USER_08, 'type' => 'text', 'width' => 'auto'), 'user_signature' => array('title'=> LAN_USER_09, 'type' => 'text', 'width' => 'auto'), 'user_hideemail' => array('title'=> LAN_USER_10, 'type' => 'int', 'width' => 'auto'), 'user_xup' => array('title'=> LAN_USER_11, 'type' => 'text', 'width' => 'auto'), 'user_class' => array('title'=> LAN_USER_12, 'type' => 'class'), 'user_join' => array('title' => LAN_USER_14, 'width'=> 'auto'), 'user_lastvisit' => array('title' => LAN_USER_15, 'width'=> 'auto'), 'user_currentvisit' => array('title' => LAN_USER_16, 'width'=> 'auto'), 'user_comments' => array('title' => LAN_USER_17, 'width'=> 'auto'), 'user_ip' => array('title' => LAN_USER_18, 'width'=> 'auto'), 'user_ban' => array('title' => LAN_USER_19, 'width'=> 'auto'), 'user_prefs' => array('title' => LAN_USER_20, 'width'=> 'auto'), 'user_visits' => array('title' => LAN_USER_21, 'width'=> 'auto'), 'user_admin' => array('title' => LAN_USER_22, 'width'=> 'auto'), 'user_perms' => array('title' => LAN_USER_23, 'width'=> 'auto'), 'user_pwchange' => array('title' => LAN_USER_24, 'width'=> 'auto') ); $sql -> db_Select("user_extended_struct"); while($row = $sql-> db_Fetch()) { $field = "user_".$row['user_extended_struct_name']; $title = ucfirst(str_replace("user_","",$field)); $this->fields[$field] = array('title'=>$title,'width'=>'auto'); } $this->fields['options'] = array('title' => LAN_OPTIONS, 'width'=>'10%', "thclass" => "center last"); } function usersSaveColumnPref() { global $pref,$user_pref, $admin_log; if(isset($_POST['submit-e-columns'])) { $user_pref['admin_users_columns'] = $_POST['e-columns']; save_prefs('user'); } } function show_existing_users($action, $sub_action, $id, $from, $amount) { global $sql, $frm, $ns, $tp, $mySQLdefaultdb,$pref,$unverified, $userMethods; $e107 = e107::getInstance(); $text = "
"; if (isset($_POST['searchquery']) && $_POST['searchquery'] != "") { $_POST['searchquery'] = $tp->toDB(trim($_POST['searchquery'])); $query = 'WHERE '. $query .= (strpos($_POST['searchquery'], "@") !== FALSE) ? "user_email REGEXP('".$_POST['searchquery']."') OR ": ""; $query .= (strpos($_POST['searchquery'], ".") !== FALSE) ? "user_ip REGEXP('".$_POST['searchquery']."') OR ": ""; foreach($this->fieldpref as $disp) { $query .= $disp." REGEXP('".$_POST['searchquery']."') OR "; } $query .= "user_login REGEXP('".$_POST['searchquery']."') OR "; $query .= "user_name REGEXP('".$_POST['searchquery']."') "; if($action == 'unverified') { $query .= ' AND user_ban = 2 '; } $query .= ' ORDER BY user_id'; } else { $query = ''; if($action == 'unverified') { $query = 'WHERE user_ban = 2 '; } $query .= 'ORDER BY '.($sub_action ? $sub_action : 'user_id').' '.($id ? $id : 'DESC')." LIMIT $from, $amount"; } // $user_total = db_Count($table, $fields = '(*)', $qry_insert = 'SELECT u.*, ue.* FROM `#user` AS u LEFT JOIN `#user_extended` AS ue ON ue.user_extended_id = u.user_id '; if ($user_total = $sql->db_Select_gen($qry_insert. $query)) { $text .= "
".NWSLAN_4." ".$frm->colGroup($this->fields,$this->fieldpref)."".$frm->thead($this->fields,$this->fieldpref).""; /* "; // Search Display Column header. $display_lan = $userMethods->getNiceNames(TRUE); // List of field names and descriptive names foreach($this->fieldpref as $disp) { if (isset($display_lan[$disp])) { $text .= ""; } else { $text .= ""; } } // ------------------------------ $text .= "";*/ while ($row = $sql->db_Fetch()) { extract($row); $text .= ""; // Display Chosen options $datefields = array("user_lastpost","user_lastvisit","user_join","user_currentvisit"); $boleanfields = array("user_admin","user_hideemail","user_ban"); foreach($this->fieldpref as $disp) { $text .= ""; $prev[$disp] = $row[$disp]; } // ------------------------------------------------------------- $qry = (e_QUERY) ? "?".e_QUERY : ""; $text .= " "; } $text .= "
ID ".USRLAN_79."".$display_lan[$disp]."".ucwords(str_replace("_"," ",$disp))."".LAN_OPTIONS."
{$user_id} "; if ($user_perms == "0") { $text .= "
".LAN_MAINADMIN."
"; } else if($user_admin) { $text .= ""; } else if($user_ban == 1) { $text .= ""; } else if($user_ban == 2) { $text .= "
".LAN_NOTVERIFIED."
"; } else if($user_ban == 3) { $text .= "
".LAN_BOUNCED."
"; } else { $text .= " "; } $text .= "
"; if($disp == 'user_class') { if ($user_class) { $tmp = explode(",", $user_class); while (list($key, $class_id) = each($tmp)) { $text .= $e107->user_class->uc_get_classname($class_id)."
\n"; } } else { $text .= " "; } } elseif($disp == 'user_ip') { $text .= $e107->ipDecode($user_ip); } elseif (in_array($disp,$boleanfields)) { $text .= ($row[$disp]) ? ADMIN_TRUE_ICON : ''; } elseif(in_array($disp,$datefields)) { $text .= ($row[$disp]) ? strftime($pref['shortdate'],$row[$disp]).' ' : ' '; } elseif($disp == 'user_name') { $text .= "{$row['user_name']}"; } else { $text .= $row[$disp].' '; } if(!in_array($disp,$boleanfields) && isset($prev[$disp]) && $row[$disp] == $prev[$disp] && $prev[$disp] != "") { // show matches $text .= " *"; } $text .= "
"; $text .= "
"; } if($action == "unverified") { $text .= "

"; if($pref['mail_bounce_pop3']!=''){ $text .= "\n"; } $text .= " 
"; } $users = (e_QUERY != "unverified") ? $sql->db_Count("user"): $unverified; if ($users > $amount && !$_POST['searchquery']) { $parms = "{$users},{$amount},{$from},".e_SELF."?".(e_QUERY ? "$action.$sub_action.$id." : "main.user_id.desc.")."[FROM]"; $text .= "
".$tp->parseTemplate("{NEXTPREV={$parms}}"); } // Search etc. . $text .= "
\n"; $text .= "

\n\n \n

\n"; /* $text .= "
".LAN_DISPLAYOPT."
"; $text .= ""; $ns->tablerender(USRLAN_52, $text); } function show_message($message) { global $ns; $ns->tablerender("", "
".$message."
"); } function show_prune() { global $ns, $sql; $unactive = $sql->db_Count("user", "(*)", "WHERE user_ban=2"); $bounced = $sql->db_Count("user", "(*)", "WHERE user_ban=3"); $older30 = $sql->db_Count("user", "(*)", "WHERE user_ban=2 AND (user_join < ".strtotime("-30 days").")"); $text = "



".LAN_DELETE.": 

"; $ns->tablerender(USRLAN_55, $text); } // Add a new user - may be passed existing data if there was an entry error on first pass function add_user($user_data) { global $rs, $ns, $pref, $e_userclass; if (!is_object($e_userclass)) $e_userclass = new user_class; $text = "
". $rs->form_open("post", e_SELF.(e_QUERY ? '?'.e_QUERY : ''), "adduserform")." \n"; if (!isset($user_data['user_class'])) $user_data['user_class'] = varset($pref['initial_user_classes'],''); $temp = $e_userclass->vetted_tree('class',array($e_userclass,'checkbox_desc'), $user_data['user_class'], 'classes'); if ($temp) { $text .= "\n"; } $text .= "
".USRLAN_61." ".$rs->form_text('username', 40, varset($user_data['user_name'],""), varset($pref['displayname_maxlength'],15))."
".USRLAN_128." ".$rs->form_text('loginname', 40, varset($user_data['user_loginname'],""), varset($pref['loginname_maxlength'],30))."   ".$rs->form_checkbox('generateloginname',1,varset($pref['predefinedLoginName'],FALSE)).USRLAN_170."
".USRLAN_129." ".$rs->form_text("realname", 40, varset($user_data['user_login'],""), 30)."
".USRLAN_62." ".$rs->form_password("password1", 40, "", 20)."   ".$rs->form_checkbox('generatepassword',1,FALSE).USRLAN_171."
".USRLAN_63." ".$rs->form_password("password2", 40, "", 20)."
".USRLAN_64." ".$rs->form_text("email", 60, varset($user_data['user_email'],""), 100)."
".USRLAN_120." {$temp}
".USRLAN_181."
"; $ns->tablerender(USRLAN_59, $text); } function resend($id, $key, $name, $email, $lfile='') { global $sql,$mailheader_e107id, $admin_log; $id = (int)$id; // Check for a Language field, and if present, send the email in the user's language. if($lfile == "") { if($sql -> db_Select('user_extended', 'user_language', 'user_extended_id = '.$id)) { $row = $sql -> db_Fetch(); $lfile = e_LANGUAGEDIR.$row['user_language'].'/lan_signup.php'; } } if(is_readable($lfile)) { require_once($lfile); } else { $row['user_language'] = e_LANGUAGE; require_once(e_LANGUAGEDIR.e_LANGUAGE."/lan_signup.php"); } $return_address = (substr(SITEURL, -1) == "/") ? SITEURL."signup.php?activate.".$id.".".$key : SITEURL."/signup.php?activate.".$id.".".$key; $message = LAN_EMAIL_01." ".$name."\n\n".LAN_SIGNUP_24." ".SITENAME.".\n".LAN_SIGNUP_21."\n\n"; $message .= $return_address . "\n\n".SITENAME."\n".SITEURL; $mailheader_e107id = $id; require_once(e_HANDLER."mail.php"); if(sendemail($email, LAN_404." ".SITENAME, $message)) { // echo str_replace("\n","
",$message); $admin_log->log_event('USET_11',str_replace(array('--ID--','--NAME--','--EMAIL--'),array($id,$name,$email),USRLAN_167),E_LOG_INFORMATIVE); $this->show_message(USRLAN_140.": ".$name." (".$row['user_language'].") "); } else { $this->show_message(USRLAN_141.": ".$name); } } function resend_to_all() { global $sql,$pref,$sql3, $admin_log; $count = 0; $pause_count = 1; $pause_amount = ($pref['mail_pause']) ? $pref['mail_pause'] : 10; $pause_time = ($pref['mail_pausetime']) ? $pref['mail_pausetime'] : 1; if($sql -> db_Select_gen('SELECT user_language FROM `#user_extended` LIMIT 1')) { $query = "SELECT u.*, ue.* FROM `#user` AS u LEFT JOIN `#user_extended` AS ue ON ue.user_extended_id = u.user_id WHERE u.user_ban = 2 ORDER BY u.user_id DESC"; } else { $query = 'SELECT * FROM `#user` WHERE user_ban=2'; } if(!is_object($sql3)) { $sql3 = new db; } $sql3 -> db_Select_gen($query); while($row = $sql3-> db_Fetch()) { echo $row['user_id']." ".$row['user_sess']." ".$row['user_name']." ".$row['user_email']."
"; $this->resend($row['user_id'],$row['user_sess'],$row['user_name'],$row['user_email'],$row['user_language']); if($pause_count > $pause_amount) { sleep($pause_time); $pause_count = 1; } sleep(1); $pause_count++; $count++; } if ($count) { $admin_log->log_event('USET_12',str_replace('--COUNT--',$count,USRLAN_168),E_LOG_INFORMATIVE); } } // --------------------------------------------------------------------- // Bounce handling // --------------------------------------------------------------------- // $bounce_act has the task to perform: // 'first_check' - initial read of list of bounces // 'delnonbounce' - delete any emails that aren't bounces // 'clearemailbounce' - delete email address for any user whose emails bounced // 'delchecked' - delete the emails whose comma-separated IDs are in $bounce_arr // 'delall' - delete all bounced emails function check_bounces($bounce_act='first_check', $bounce_arr = '') { global $sql,$pref; include(e_HANDLER.'pop3_class.php'); if (!trim($bounce_act)) { $bounce_act='first_check'; } // echo "Check bounces. Action: {$bounce_act}; Entries: {$bounce_arr}
"; $obj= new receiveMail($pref['mail_bounce_user'],$pref['mail_bounce_pass'],$pref['mail_bounce_email'],$pref['mail_bounce_pop3'],varset($pref['mail_bounce_type'],'pop3')); $del_count = 0; if ($bounce_act !='first_check') { // Must do some deleting $obj->connect(); $tot=$obj->getTotalMails(); $del_array = explode(',',$bounce_arr); for($i=1;$i<=$tot;$i++) { // Scan all emails; delete current one if meets the criteria $dodel = FALSE; switch ($bounce_act) { case 'delnonbounce' : $head=$obj->getHeaders($i); $dodel = (!$head['bounce']); break; case 'clearemailbounce' : if (!in_array($i, $del_array)) break; $head=$obj->getHeaders($i); if($head['bounce']) { if (preg_match("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $obj->getBody($i), $result)) { $usr_email = trim($result[0]); } if ($sql->db_Select('user','user_id, user_name, user_email',"user_email='".$usr_email."' ")) { $row = $sql->db_Fetch(); if ($sql->db_Update('user',"`user_email`='' WHERE `user_id` = '".$row['user_id']."' ") !== FALSE) { // echo "Deleting user email {$row['user_email']} for user {$row['user_name']}, id={$row['user_id']}
"; $dodel = TRUE; } } } break; case 'delall' : $dodel = TRUE; break; case 'delchecked' : $dodel = in_array($i, $del_array); break; } if ($dodel) { // echo "Delete email ID {$i}
"; $obj->deleteMails($i); $del_count++; // Keep track of number of emails deleted } } // End - Delete one email $obj->close_mailbox(); // This actually deletes the emails } // End of email deletion // Now list the emails that are left $obj->connect(); $tot=$obj->getTotalMails(); $found = FALSE; $DEL = ($pref['mail_bounce_delete']) ? TRUE : FALSE; $text = "
\n"; for($i=1;$i<=$tot;$i++) { $head=$obj->getHeaders($i); if($head['bounce']) { // Its a 'bounce' email if (ereg('.*X-e107-id:(.*)MIME', $obj->getBody($i), $result)) { if($result[1]) { $id[$i] = intval($result[1]); // This should be a user ID - but not on special mailers! // Try and pull out an email address from body - should be the one that failed if (preg_match("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $obj->getBody($i), $result)) { $emails[$i] = "'".$result[0]."'"; } $found = TRUE; } } elseif (preg_match("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $obj->getBody($i), $result)) { if($result[0] && $result[0] != $pref['mail_bounce_email']) { $emails[$i] = "'".$result[0]."'"; $found = TRUE; } elseif($result[1] && $result[1] != $pref['mail_bounce_email']) { $emails[$i] = "'".$result[1]."'"; $found = TRUE; } } if ($DEL && $found) { // Auto-delete bounced emails once noticed (if option set) $obj->deleteMails($i); $del_count++; } } else { // Its a warning message or similar // $id[$i] = ''; // Don't worry about an ID for now // Try and pull out an email address from body - should be the one that failed if (preg_match("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $obj->getBody($i), $result)) { $wmails[$i] = "'".$result[0]."'"; } } $text .= "\n"; } if ($del_count) { $admin_log->log_event('USET_13',str_replace('--COUNT--',$del_count,USRLAN_169),E_LOG_INFORMATIVE); } if ($tot) { // Option to delete emails - only if there are some in the list $text .= "
#e107-idemailSubjectBounce
".$i."".$id[$i]."".(isset($emails[$i]) ? $emails[$i] : $wmails[$i])."".$head['subject']."".($head['bounce'] ? ADMIN_TRUE_ICON : ADMIN_FALSE_ICON); $text .= "
\n \n \n \n "; } $text .= "
"; array_unique($id); array_unique($emails); $all_ids = implode(',',$id); $all_emails = implode(',',$emails); $obj->close_mailbox(); // This will actually delete emails // $tot has total number of emails in the mailbox $found = count($emails); // $found - Number of bounce emails found // $del_count has number of emails deleted // Update bounce status for users $ed = $sql -> db_Update('user', "user_ban=3 WHERE (`user_id` IN (".$all_ids.") OR `user_email` IN (".$all_emails.")) AND user_sess !='' "); if (!$ed) $ed = '0'; $this->show_message(str_replace(array('{TOTAL}','{DELCOUNT}','{DELUSER}','{FOUND}'), array($tot,$del_count,$ed,$found),USRLAN_155).$text); } } // End class users function users_adminmenu() { global $user; global $action; $user->show_options($action); } function deleteRank($rankId) { global $emessage; $e107 = e107::getInstance(); $rankId = (int)$rankId; $e107->ecache->clear_sys('nomd5_user_ranks'); if($e107->sql->db_Delete('generic', "gen_id='{$rankId}'")) { $emessage->add(USRLAN_218, E_MESSAGE_SUCCESS); } else { $emessage->add(USRLAN_218, E_MESSAGE_FAIL); } } function updateRanks() { global $pref, $emessage; $e107 = e107::getInstance(); $config = array(); $ranks_calc = ''; $ranks_flist = ''; foreach($_POST['op'] as $f => $o) { $config[$f]['op'] = $o; $config[$f]['val'] = varset($_POST['val'][$f], ''); if($_POST['val'][$f]) { $ranks_calc .= ($ranks_calc ? ' + ' : '').'({'.$f.'} '." $o {$_POST['val'][$f]}".' )'; $ranks_flist .= ($ranks_flist ? ',' : '').$f; } } $e107->sql->db_Delete('generic', "gen_type = 'user_rank_config'"); $tmp = array(); $tmp['data']['gen_type'] = 'user_rank_config'; $tmp['data']['gen_chardata'] = serialize($config); $tmp['_FIELD_TYPES']['gen_type'] = 'string'; $tmp['_FIELD_TYPES']['gen_chardata'] = 'escape'; $e107->sql->db_Insert('generic', $tmp); $pref['ranks_calc'] = $ranks_calc; $pref['ranks_flist'] = $ranks_flist; save_prefs(); //Delete existing rank data $e107->sql->db_Delete('generic', "gen_type = 'user_rank_data'"); //Add main site admin info $tmp = array(); $tmp['_FIELD_TYPES']['gen_datestamp'] = 'int'; $tmp['_FIELD_TYPES']['gen_ip'] = 'todb'; $tmp['_FIELD_TYPES']['gen_user_id'] = 'int'; $tmp['_FIELD_TYPES']['gen_chardata'] = 'todb'; $tmp['_FIELD_TYPES']['gen_intdata'] = 'int'; $tmp['data']['gen_datestamp'] = 1; $tmp['data']['gen_type'] = 'user_rank_data'; $tmp['data']['gen_ip'] = $_POST['calc_name']['main_admin']; $tmp['data']['gen_user_id'] = varset($_POST['calc_pfx']['main_admin'], 0); $tmp['data']['gen_chardata'] = $_POST['calc_img']['main_admin']; $e107->sql->db_Insert('generic', $tmp); //Add site admin info unset($tmp['data']); $tmp['data']['gen_type'] = 'user_rank_data'; $tmp['data']['gen_datestamp'] = 2; $tmp['data']['gen_ip'] = $_POST['calc_name']['admin']; $tmp['data']['gen_user_id'] = varset($_POST['calc_pfx']['admin'], 0); $tmp['data']['gen_chardata'] = $_POST['calc_img']['admin']; $e107->sql->db_Insert('generic', $tmp); //Add all current site defined ranks if(isset($_POST['field_id'])) { foreach($_POST['field_id'] as $fid => $x) { unset($tmp['data']); $tmp['data']['gen_type'] = 'user_rank_data'; $tmp['data']['gen_ip'] = varset($_POST['calc_name'][$fid], ''); $tmp['data']['gen_user_id'] = varset($_POST['calc_pfx'][$fid], 0); $tmp['data']['gen_chardata'] = varset($_POST['calc_img'][$fid], ''); $tmp['data']['gen_intdata'] = varset($_POST['calc_lower'][$fid], '_NULL_'); $e107->sql->db_Insert('generic', $tmp); } } //Add new rank, if posted if(varset($_POST['new_calc_lower'])) { unset($tmp['data']); $tmp['data']['gen_type'] = 'user_rank_data'; $tmp['data']['gen_datestamp'] = 0; $tmp['data']['gen_ip'] = varset($_POST['new_calc_name']); $tmp['data']['gen_user_id'] = varset($_POST['new_calc_pfx'], 0); $tmp['data']['gen_chardata'] = varset($_POST['new_calc_img']); $tmp['data']['gen_intdata'] = varset($_POST['new_calc_lower']); $e107->sql->db_Insert('generic', $tmp); } $e107->ecache->clear_sys('nomd5_user_ranks'); $emessage->add(USRLAN_217, E_MESSAGE_SUCCESS); } function show_ranks() { global $pref, $emessage; $e107 = e107::getInstance(); include_once(e_HANDLER.'file_class.php'); include_once(e_HANDLER.'level_handler.php'); require_once(e_HANDLER.'message_handler.php'); require_once(e_HANDLER."form_handler.php"); $frm = new e_form(true); //enable inner tabindex counter $f = new e_file; $ranks = new e107UserRank; $imageList = $f->get_files(e_IMAGE.'ranks', '.*?\.(png|gif|jpg)'); $config = array(); if($e107->sql->db_Select('generic', 'gen_chardata', "gen_type='user_rank_config'", 'default')) { $row = $e107->sql->db_Fetch(MYSQL_ASSOC); $config = unserialize($row['gen_chardata']); } $fieldList = array('core' => array(), 'extended' => array()); $fieldList['core'] = array( 'comments' => USRLAN_201, 'visits' => USRLAN_202, 'daysregged' => USRLAN_203 ); foreach($e107->extended_struct as $field) { if(strpos($field['Type'], 'int') !== false && $field['Field'] != 'user_extended_id') { $fieldList['extended'][] = substr($field['Field'], 5); } } $opArray = array('*', '+', '-'); $text .= "
"; foreach($fieldList['core'] as $k => $f) { $text .= " "; } if(count($fieldList['extended'])) { foreach($fieldList['extended'] as $f) { $text .= " "; } } if(isset($pref['ranks_calc'])) { $text .= " "; } $text .= '
".USRLAN_197." ".USRLAN_198." ".USRLAN_199." ".USRLAN_200."
".USRLAN_204." {$f}
 
".USRLAN_205." {$f}

".USRLAN_206.": {$pref['ranks_calc']}
'; $e107->ns->tablerender('', $emessage->render()); $e107->ns->tablerender('Rank Calculation fields', $text); $text = " "; $info = $ranks->ranks['special'][1]; $val = $e107->tp->toForm($info['name']); $pfx = ($info['lan_pfx'] ? "checked='checked'" : ''); $text .= " "; $info = $ranks->ranks['special'][2]; $val = $e107->tp->toForm($info['name']); $pfx = ($info['lan_pfx'] ? "checked='checked'" : ''); $text .= " "; foreach($ranks->ranks['data'] as $k => $r) { $pfx_checked = ($r['lan_pfx'] ? "checked='checked'" : ''); $text .= " "; } $text .= " "; $text .= '
".USRLAN_207." ".USRLAN_208." ".USRLAN_209." ".USRLAN_210." ".USRLAN_211."
".LAN_MAINADMIN." N/A ".RankImageDropdown($imageList, 'calc_img[main_admin]', $info['image'])."
".LAN_ADMIN." N/A ".RankImageDropdown($imageList, 'calc_img[admin]', $info['image'])."
 
".USRLAN_212." ". RankImageDropdown($imageList, "calc_img[$k]", $r['image'])." ". $frm->submit_image("delete_rank[{$r['id']}]", LAN_DELETE, 'delete', USRLAN_213.": [{$r['name']}]?")."
 
".USRLAN_214." ".RankImageDropdown($imageList, 'new_calc_img')."

'; $e107->ns->tablerender('Ranks', $text); include(e_ADMIN.'footer.php'); exit; } function RankImageDropdown(&$imgList, $field, $curVal='') { $ret = " '; return $ret; } ?>