Перейти к контенту

Использование модуля ipb_member_sync


Рекомендуемые сообщения

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

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

Есть возможность описать эти особенности в правилах, выводимых при регистрации,

но 90% пользователей их не читают, а пролистывают и ставят галочку.

Пришел к выводу, что лучше всего это делать посредством личного сообщения, отправляемого пользователю при регистрации.

 

Скачал с mods.invisionize.com мод Welcome PM и ужаснулся, насколько все сложно, ведь есть же

замечательная возможность сделать все проще.

Ковыряя register.php в ходе создания защиты от ботов, заметил

  if ( USE_MODULES == 1 )
 {
  require ROOT_PATH."modules/ipb_member_sync.php";

  $this->modules = new ipb_member_sync();
  $this->modules->ipsclass =& $this->ipsclass;
 }

Вызывается это в самом начале.

Значение USE_MODULES определяется еще в файле init.php, по умолчанию 1, так что код происходит.

В register.php в функции create_account есть

  //-----------------------------------------
 // Use modules?
 //-----------------------------------------

 if ( USE_MODULES == 1 )
 {
  $this->modules->register_class($this);

  $member['password'] = trim($this->ipsclass->input['PassWord']);

  $this->modules->on_create_account($member);

  if ( $this->modules->error == 1 )
  {
   return;
  }

  $member['password'] = "";
 }

это значит, опят таки, если модули используются, вызывается функция on_create_account из ipb_member_sync.php

 

Рассмотрим наконец возможности использования этой функции

Ей передаются все данные о новом пользователе, даже НЕ закодированный пароль, что также можно использовать.

Используем следующим образом.

В файле modules/ipb_member_sync.php есть

 
function on_create_account($member)
{
 global $DB, $std, $ibforums;

 //---- START


 //---- END
}

ну или что-то похожее.. тем не менее она пустая, а это значит, что можно написать все, что угодно.

Напишем Welcome PM.

Для этого между //---- START и //---- END вставим следующий код, который будет отвечать за PM

  require_once( ROOT_PATH.'sources/lib/func_msg.php' );

 $this->lib = new func_msg();
 $this->lib->ipsclass =& $this->ipsclass;

 $this->lib->init();

 $this->lib->to_by_id	= $member['id'];//ид вновь зарегестрированного пользователя
 $this->lib->from_member['id'] = 1;//ид ОТ кого будет приходить сообщение
 $this->lib->msg_title   = "Добро пожаловать!";
 $this->lib->msg_post	= "Поздравляем! Вы успешно зарегестрировались!";
 $this->lib->force_pm	= 0;

 $this->lib->send_pm();

 if ( $this->lib->error )
 {
	  print $this->error;
	  exit();
 }

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

Все придумано до нас.

В переменной $this->lib->msg_title будет хранится название нового сообщения.

В переменной $this->lib->msg_post его текст. Можете придумать все, что угодно.

Вы также можете сообщить пользователю его пароль, который он вводил, следующим образом:

$this->lib->msg_post = "Поздравляем! Вы успешно зарегестрировались! Ваш пароль: ".$member['password'].". В целях безопасности запишите этот пароль и удалите это сообщение!";

Правда пароль будет хранится в базе в таблице личных сообщений в открытом виде, так что это не безопасно.

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

Ссылка на комментарий
Поделиться на других сайтах

Спасибо, полезная фича. Как раз думал над этим файлом на днях, зачем он, особенно смутило "global $DB, $std, $ibforums;", показалось что это из 2.0.х артефакт...
Ссылка на комментарий
Поделиться на других сайтах

да, но это никак не влияет на выполнение кода

вроде в index.php им присваивается что-то

if ( LEGACY_MODE )
{
$DB	   =& $ipsclass->DB;
$std	  =& $ipsclass;
$ibforums =& $ipsclass;
$forums   =& $ipsclass->forums;
$print	=& $ipsclass->print;
$sess	 =& $ipsclass->sess;

$ipsclass->load_template('skin_global');
$ipsclass->skin_global = $ipsclass->compiled_templates['skin_global'];
}

но это в случае LEGACY_MODE, а оно в init.php

define( 'LEGACY_MODE', 0 );

так что они пустые

Ссылка на комментарий
Поделиться на других сайтах

Ну вот я и засомневался на счет них, на форуме читал, что они из 2.0.х остались и их применять нельзя. подумал что файл вообще лишний в дистрибутиве, не удалили от пред. версии, хотел даже в баги писать, а тут эта тема :D
Ссылка на комментарий
Поделиться на других сайтах

  • 6 месяцев спустя...
А штука эта в 2.3.1 работать будет?

Будет.

Ссылка на комментарий
Поделиться на других сайтах

  • 4 месяца спустя...

Не работает в 2.3.4

 

В файле init.php нет этого куска

 

//-----------------------------------------
 // Use modules?
 //-----------------------------------------

 if ( USE_MODULES == 1 )
 {
  $this->modules->register_class($this);

  $member['password'] = trim($this->ipsclass->input['PassWord']);

  $this->modules->on_create_account($member);

  if ( $this->modules->error == 1 )
  {
   return;
  }

  $member['password'] = "";
 }

Ссылка на комментарий
Поделиться на других сайтах

В register.php в функции create_account есть

 

 

это во первых

а во вторых, это статья, а не мод

и говорится в ней о том, что такое модуль ipb_member_sync.php

Ссылка на комментарий
Поделиться на других сайтах

а во вторых, это статья, а не мод

и говорится в ней о том, что такое модуль ipb_member_sync.php

пускай и статья, но работает на 2.3.х на ура ;) спс :D

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.