ExBB Community » Файловый ExBB » Решение проблем » Класс для добавления пользователя на форум ExBB

Страниц (1): [1]
 

1. valualit - 4 февраля 2013 — 06:47 - перейти к сообщению
Для игрового портала по Lineage 2 L2-RPG.COM необходимо было организовать автоматическую регистрацию на форуме, поскольку раздельная регистрация мастер аккаунта и профиля на форуме вносила дискомфорт.

Так же в условия задачи необходимо было организовать подтверждение регистрации на сайте и форуме, поскольку игровые порталы наиболее уязвимы к спаму.

Собственно часть кода, который используется:

CODE:
<?php
class valualit_exbb {

public function file_serialize_read($filename){
if (!file_exists($filename)){
return array();
}
$fp = @fopen($filename,'r');
flock($fp, 1);
$filesize = filesize($filename);
$filesize = ($filesize ===0) ? 1:$filesize-8;
fseek($fp,8);
$str = fread($fp,$filesize);
flock($fp, 3);
fclose($fp);
return (!empty($str))?unserialize($str):array();
}

// Проверка существования пользователя по логину
public function user_exists($path_forum,$name){
$users = self::file_serialize_read(VALUALIT_ROOT_DIR.$path_forum."data/users.php");
foreach($users as $k=>$u){
if($u['n']==$name){
return true;
}
}
return false;
}


// Добавляем пользователя
public function user_add($login,$email,$passwd,$path_to_forum,$status='me',$title='Пользователь'){
$array=self::file_serialize_read(VALUALIT_ROOT_DIR.$path_to_forum."data/users.php");
$array[0]=true;
$array[]=array("n"=>strtolower(preg_replace("~\s*~isU","",$login)),"m"=>trim($email),"p"=>0);
unset($array[0]);
file_put_contents(VALUALIT_ROOT_DIR.$path_to_forum."data/users.php",'<?die;?>'.serialize($array));
$forum_id_user=max(array_keys($array));
$user_info=array(
"id"=>$forum_id_user,
"status"=>$status,
"name"=>iconv('utf-8', 'windows-1251',preg_replace("~\s*~isU","",$login)),
"pass"=>md5(iconv('utf-8', 'windows-1251', preg_replace("~\s*~isU","",$passwd))),
"mail"=>iconv('utf-8', 'windows-1251',trim($email)),
"posts"=>0,
"icq"=>"",
"title"=>iconv('utf-8', 'windows-1251',$title),
"ip"=>"127.0.0.1",
"showemail"=>FALSE,
"joined"=>time(),
"www"=>"",
"aim"=>"",
"location"=>"",
"interests"=>"",
"sig"=>"",
"sig_on"=>TRUE,
"lang"=>"russian",
"timedif"=>0,
"avatar"=>'noavatar.gif',
"upload"=>TRUE,
"visible"=>TRUE,
"new_pm"=>FALSE,
"sendnewpm"=>FALSE,
"posts2page"=>10,
"topics2page"=>15,
"last_visit"=>0);
file_put_contents(VALUALIT_ROOT_DIR.$path_to_forum."members/".$forum_id_user.".php",'<?die;?>'.serialize($user_info));

$forum_stats=self::file_serialize_read(VALUALIT_ROOT_DIR.$path_to_forum."data/boardstats.php");
$forum_stats['totalmembers']=0;
$forum_stats['totalmembers']=$forum_stats['totalmembers']+1;
$forum_stats['last_id']=$forum_id_user;
$forum_stats['lastreg']=iconv('utf-8', 'windows-1251',preg_replace("~\s*~isU","",$login));
file_put_contents(VALUALIT_ROOT_DIR.$path_to_forum."data/boardstats.php",'<?die;?>'.serialize($forum_stats));
}
}


Поскольку это создавалось для движка CMF Valualit, код содержит некоторые нюансы.

VALUALIT_ROOT_DIR - содержит полный путь к корню проекта.
file_serialize_read - метод практически в неизменном виде взят из движка ExBB
$path_forum - входящий параметр содержащий относительный путь к форуму от корня проекта.
user_exists - с помощью цикла перебирает data/users.php для проверки занятости логина на форуме.
user_add - метод добавления профиля пользователя на форум, а так же обновление статистики в data/boardstats.php


Проверяем существование пользователя:

CODE:
if(valualit_exbb::user_exists($path_to_forum,$login)==true){
// Аккаунт с таким Логином существует!
} else {
// Добавляем аккаунт
}



По умолчанию статус пользователя при регистрации указывается block

CODE:
valualit_exbb::user_add($login,$email,$passwd,$path_to_forum,$status='banned',$title='Пользователь');


После подтверждения регистрации:

CODE:
$array=valualit_exbb::file_serialize_read(VALUALIT_ROOT_DIR.$path_to_forum."members/".$user_id.".php");
$array["status"]='me';
file_put_contents(VALUALIT_ROOT_DIR.$path_to_forum."members/".$user_id.".php",'<?die;?>'.serialize($array));
2. shyuser - 4 февраля 2013 — 09:10 - перейти к сообщению
valualit пишет:
Собственно часть кода, который используется:
вопрос, а почему в строке
CODE:
$forum_stats['totalmembers']=0;
$forum_stats['totalmembers']=$forum_stats['totalmembers']+1;
делается сначала обнуление кол-ва пользователей?
3. valualit - 4 февраля 2013 — 13:21 - перейти к сообщению
CODE:
$forum_stats['totalmembers']=0;

Необходимо удалить, код использовался при установке системы, когда необходимо было почистить профили и статистику на форуме и создать нового админа.

CODE:
$forum_stats['totalmembers']=$forum_stats['totalmembers']+1;


можно заменить на :

CODE:
$forum_stats['totalmembers']+=1;


P.S> Отредактировать старый пост не могу, поскольку нет прав.

Яндекс.Метрика   

Powered by ExBB
[Script Execution time: 0.0421]     [ ]