ExBB Community ExBB Community
 Сайт проекта ExBB Общение объединяет!
Войдите на форум при помощиВойти через loginza
 Чат на форуме      Помощь      Поиск      Пользователи     BanList BanList


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

> Без описания
valualit
Отправлено: 4 февраля 2013 — 06:47
Post Id


Пользователь
Newbie


Покинул форум
Сообщений всего: 13
Дата рег-ции: Апр. 2012  
Репутация: 1




Для игрового портала по 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));

(Отредактировано автором: 4 февраля 2013 — 06:48)

 
 
shyuser
Отправлено: 4 февраля 2013 — 09:10
Post Id


Пользователь
Member


Покинул форум
Сообщений всего: 111
Дата рег-ции: Июль 2009  
Откуда: Лукоянов, Нижегородская область, Россия
Репутация: 16




valualit пишет:
Собственно часть кода, который используется:
вопрос, а почему в строке
CODE:
$forum_stats['totalmembers']=0;
$forum_stats['totalmembers']=$forum_stats['totalmembers']+1;
делается сначала обнуление кол-ва пользователей?
 
 
valualit
Отправлено: 4 февраля 2013 — 13:21
Post Id


Пользователь
Newbie


Покинул форум
Сообщений всего: 13
Дата рег-ции: Апр. 2012  
Репутация: 1




CODE:
$forum_stats['totalmembers']=0;

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

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


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

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


P.S> Отредактировать старый пост не могу, поскольку нет прав.
 
 
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Решение проблем »

> Похожие темы: Класс для добавления пользователя на форум ExBB
Темы Форум Информация о теме Обновление
Отображение списка online
Как отобразить список участников online на каждой странице форума
Обсуждение Ответов: 5
Автор темы: Марта
9 февраля 2010 — 22:09
Автор: yura3d
Notice: Undefined variable: post
Ошибка на форуме который я установил
Решение проблем Ответов: 7
Автор темы: ququka
4 июня 2011 — 01:40
Автор: ququka
Дополнение: Ограничение использования службы ЛС новичками
Для противодействия спаму и неадекватным пользователям
Модификации и дополнения Ответов: 24
Автор темы: yura3d
23 декабря 2014 — 07:01
Автор: demon124
Мод: Регистрация и авторизация со сторонних ресурсов (Loginza)
Быстрая регистрация, вход на форум через социальные сети и другие популярные сайты
Модификации и дополнения Ответов: 300
Автор темы: Defenderyk
20 января 2015 — 10:31
Автор: variant0
О нагрузке на сервер
Нагрузка на сервер или сколько запросов в БД от одного пользователя
MySQL Ответов: 17
Автор темы: Defenderyk
15 февраля 2011 — 11:26
Автор: M-A-X
 



Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 




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

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0797]     [ ]