IPB

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Синхронизация IPB и Mambo, Тема: восстановление пароля
Alecfyz
сообщение 08.04.05 - 19:40
Сообщение #1


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Некоторые сайтостроители, которые пользуются интеграцией от SaVaG`a (использование IPB-файла ipb_member_sync.php), заметили, что при использовании функции восстановления пароля, он меняется только в форуме, а в Mambo остается тем же. Что не есть хорошо.

Забирайте готовое решение проблемы.

На операционный стол в качестве пациентов попадают 2 файла:
modules/ipb_member_sync.php
и
sources/register.php
Оба файла находятся в папке форума! Файлы Mambo не меняются!

Итак, в первом файле (ipb_member_sync.php) добавляем новую функцию в любом месте внутри класса.
Например, находим код
CODE
function on_pass_change($id, $new_raw)
{
 global $DB, $std, $ibforums;

 //---- START

 $row=$DB->fetch_row($DB->query("select * from ipb_members where id='".$id."'"));
 $DB->query("update mos_users set password='".md5($new_raw)."' where username='".$row["name"]."'");

 //---- END
}

и после него вставляем следующий код:
CODE
function on_pass_remember($name, $new_raw)
{
 global $DB, $std, $ibforums;

 //---- START

   $DB->query("update mos_users set password='".$new_raw."' where username='".$name."'");

 //---- END
}

Сохраняем файл, и закрываем его.

Теперь открываем файл register.php
Примерно на 1622 строке находим такой код:
CODE
                               $std->boink_it($ibforums->base_url.'&act=Login&CODE=autologin&frompass=1');

                       }

                       //-----------------------------------------
                       // EMAIL ADDY CHANGE
                       //-----------------------------------------

Перед этим кодом, то есть выше него вставляем такой код:
CODE

// вспоминем пароль ( remember pass ) ++
                //-----------------------------------------
                //  Используем синхронизацию?
                //-----------------------------------------
                if ( USE_MODULES == 1 )
               {
                       $this->modules->register_class(&$this);
                       $this->modules->on_pass_remember($member['name'], $new_pass);

                  }
// вспоминем пароль ( remember pass ) --


То есть, в результате, у вас должен получиться примерно следующий листинг (у меня он начинается со строки #1601):
CODE
                               //-----------------------------------------
                               // Remove "dead" validation
                               //-----------------------------------------

                               $DB->simple_exec_query( array( 'delete' => 'validating', 'where' => "vid='".$validate['vid']."' OR (member_id={$member['id']} AND lost_pass=1)" ) );

                               $this->bash_dead_validations();

// вспоминем пароль ( remember pass ) ++
                //-----------------------------------------
                // Используем синхронизацию?
                //-----------------------------------------
                if ( USE_MODULES == 1 )
               {
                       $this->modules->register_class(&$this);
                       $this->modules->on_pass_remember($member['name'], $new_pass);

                  }
// вспоминем пароль( remember pass ) --

                               $std->boink_it($ibforums->base_url.'&act=Login&CODE=autologin&frompass=1');

                       }

                       //-----------------------------------------
                       // EMAIL ADDY CHANGE
                       //-----------------------------------------

                       else if ($in_type == 'newemail')
                       {
                               if ( $validate['email_chg'] != 1 )


Сохраняемся.

Вот, собственно и все.

Удачи!
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 02.08.05 - 15:58
Сообщение #2


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Выкладываю листинг файла ipb_member_sync.php, а то постоянно спрашивают что да как...
Рабочий код:
CODE
<?php
/*
+--------------------------------------------------------------------------
|  Invision Power Board v2.0.x Module File
|  ========================================
|  by Matthew Mecham
|  © 2001 - 2003 Invision Power Services
|  http://www.invisionpower.com
|  ========================================
|  Web: http://www.invisionboard.com
|  Email: matt@invisionpower.com
|  Licence Info: http://www.invisionboard.com/?license
+---------------------------------------------------------------------------
|
|  > Member Sync Module File
|  > Module written by Matt Mecham
|  > Date started: 7th July 2003
|
+--------------------------------------------------------------------------
|
|  > Module modyfied by Alecfyz {Gorsk.net Studio}
|  > Great thanks to SaVaGe & Petro
|
+--------------------------------------------------------------------------
|
| USAGE:
| ------
|
| This module is designed to hold any module modifications to with registration
| It doesn't do much in itself, but custom code can be added to handle
| synchronization, etc.
|
| - on_create_account: Is called upon successful account creation
| - on_register_form: Is called when the form is displayed
| - on_login: Is called when logged in succcessfully
| - on_delete: Is called when member deleted (single, multiple)
| - on_email_change: When email address change is confirmed
| - on_profile_update: When profile is updated (msn, sig, etc)
| - on_pass_change: When password is updated
| - on_group_change: When the member's membergroup has changed
| - on_name_change: When the member's name has been changed
+--------------------------------------------------------------------------
*/

class ipb_member_sync
{
var $class = "";

function ipb_member_sync()
{

}

//-----------------------------------------------
// register_class($class)
//
// Register a $this-> with this class
//
//-----------------------------------------------

function register_class(&$class)
{
 $this->class = $class;
}

//-----------------------------------------------
// on_create_account($member)
//
// $member = array( 'id', 'name', 'email',
// 'password', 'mgroup'...etc)
//
//-----------------------------------------------

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

 //---- START
 $DB->query("insert into mos_users (name,username,email,password,sendEmail,gid)
 values ('".$member["name"]."','".$member["name"]."',
 '".$member["email"]."','".md5($member["password"])."',0,18)");

 $row=$DB->fetch_row($DB->query("select id from mos_users where username='".$member["name"]."'"));

 $DB->query("insert into mos_core_acl_aro ( section_value, value,order_value, name)
 values('users',".$row["id"].",0,'".$member["name"]."')");


 $row=$DB->fetch_row($DB->query("select aro_id from  mos_core_acl_aro where value='".$row["id"]."'"));
 $DB->query("insert into  mos_core_acl_groups_aro_map (group_id,aro_id) values (18,'".$row["aro_id"]."')");



       function return_after_create()
       {
               global $ibforums;

               header("Location: "."http://support.gorsk.net");

               exit();
       }
return_after_create();

 //---- END
}

//-----------------------------------------------
// on_register_form()
//
//
//-----------------------------------------------

function on_register_form()
{
 global $DB, $std, $ibforums;

 //---- START



 //---- END
}

//-----------------------------------------------
// on_login()
//
// $member = array( 'id', 'name', 'email', 'pass')
//          ...etc
//-----------------------------------------------

function on_login($member=array())
{
 global $DB, $std, $ibforums;

 //---- START



 //---- END
}

//-----------------------------------------------
// on_delete($ids)
//
// $ids = array | integer
// If array, will contain list of ids
//-----------------------------------------------

function on_delete($ids=array())
{
 global $DB, $std, $ibforums;

 $type = "";

 //---- START

 if ( is_array($ids) and count($ids) > 0 )
 {
 $type = 'arr';
 }
 else
 {
 $type = 'int';
 }



 //---- END
}

//-----------------------------------------------
// on_email_change($id, $new_email)
//
// $id        = int member_id
// $new_email = string new email address
//-----------------------------------------------

function on_email_change($id, $new_email)
{
 global $DB, $std, $ibforums;

 //---- START

 $row=$DB->fetch_row($DB->query("select * from ipb_members where id='".$id."'"));

 $DB->query("update mos_users set email='".$new_email."' where username='".$row["name"]."'");

 //---- END
}

//-----------------------------------------------
// on_pass_change($id, $new_raw)
//
// $id        = int member_id
// $new_raw  = string new plain text password
//-----------------------------------------------

function on_pass_change($id, $new_raw)
{
 global $DB, $std, $ibforums;

 //---- START

 $row=$DB->fetch_row($DB->query("select * from ipb_members where id='".$id."'"));
 $DB->query("update mos_users set password='".md5($new_raw)."' where username='".$row["name"]."'");

 //---- END
}



function on_pass_remember($name, $new_raw)
{
 global $DB, $std, $ibforums;

 //---- START

   $DB->query("update mos_users set password='".$new_raw."' where username='".$name."'");

 //---- END
}


//-----------------------------------------------
// on_profile_update($member)
//
// $member = array: avatar, avatar_size, aim_name
// icq_number, location, website, yahoo, interests
// integ_msg, msnname, id, name
//
//-----------------------------------------------

function on_profile_update($member=array())
{
 global $DB, $std, $ibforums;

 //---- START


 //---- END
}

//-----------------------------------------------
// on_signature_update($member, $new_sig)
//
// $member = array: id, name, email, etc
// $new_sig = New signature
//
//-----------------------------------------------

function on_signature_update($member=array(), $new_sig="")
{
 global $DB, $std, $ibforums;

 //---- START


 //---- END
}

//-----------------------------------------------
// on_group_change()
//
// $id        = int member_id
// $new_group = new int() group id
//-----------------------------------------------

function on_group_change( $id, $new_group )
{
 global $DB, $std, $ibforums;

 //---- START


 //---- END
}

//-----------------------------------------------
// on_name_change()
//
// $id        = int member_id
// $new_group = new name
//-----------------------------------------------

function on_name_change( $id, $new_name )
{
 global $DB, $std, $ibforums;

 //---- START

// $row=$DB->fetch_row($DB->query("select * from ipb_members where id='".$id."'"));

// $DB->query("update mos_users set name='".$new_name."' where  username='".$row["]."'";

 //---- END
}



}


?>

В этом коде уже есть исправления от Petro и включена редакция из поста выше.
Не забываем, что код НЕ универсален и нужно смотреть префиксы таблиц, если они у вас отличаются от стандартных.
Естественно, нужно будет еще подредактировать свой файл sources/register.php, чтобы восстановление пароля работало.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
tclub
сообщение 28.09.05 - 16:49
Сообщение #3


Newbie
*

Группа: Members
Сообщений: 6
Регистрация: 28.09.05
Пользователь №: 1,539



дык а что править в sources/register.php?

User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 28.09.05 - 17:03
Сообщение #4


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Внимательно почитайте мой первый пост в этой теме.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
tclub
сообщение 29.09.05 - 12:58
Сообщение #5


Newbie
*

Группа: Members
Сообщений: 6
Регистрация: 28.09.05
Пользователь №: 1,539



Поменял файлы так, как написано выше, теперь появилась маленькая проблемка - после нажатия кнопки окончания регистрации пользователя перебрасывает на чистую белую страницу (но при этом он становится уже зарегистрированным пользователем)

D логах обнаружил следующее:
CODE
PHP Fatal error:  Non-static method ipb_member_sync::return_after_create() cannot be called statically in /virt/homes/tclub/htdocs/forum/modules/ipb_member_sync.php on line 102, referer: http://autosurfmonitor.kiev.ua/forum/index.php?act=Reg&coppa_user=0&termsread=1&coppa_pass=1


Скажите, как с этим бороться?
Как, к примеру указать определенную страницу, на которую доджен попасть пользователь после подтверждения регистрации?

Сообщение отредактировал tclub - 29.09.05 - 13:23
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 29.09.05 - 13:38
Сообщение #6


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Чтобы указать конкретную страницу, сделайте вот что: в файле модуля синхронизации в функции "on_create_account()" допишите вот что:
CODE
       function return_after_create()
       {
               
               header("Location: "."http://support.gorsk.net");

               exit();
       }
return_after_create();

Есстественно, вместо "http://support.gorsk.net" напишите нужный вам адрес.
Этот код должен стоять в смом низу функции, перед
CODE

 //---- END
}

cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
tclub
сообщение 29.09.05 - 14:00
Сообщение #7


Newbie
*

Группа: Members
Сообщений: 6
Регистрация: 28.09.05
Пользователь №: 1,539



не помогло sad.gif, результат тот же - пустая страница.
В логах вот такое вот сообщение:
CODE
Non-static method ipb_member_sync::return_after_create() cannot be called statically in /virt/homes/tclub/htdocs/forum/modules/ipb_member_sync.php on line 98, referer: http://autosurfmonitor.kiev.ua/forum/index.php?act=Reg&coppa_user=0&termsread=1&coppa_pass=1


98 строка - это
CODE
return_after_create();


Вот полный код функции:
CODE
function on_create_account($member)
{
global $DB, $std, $ibforums;

//---- START
$DB->query("insert into mos_users (name,username,email,password,sendEmail,gid)
values ('".$member["name"]."','".$member["name"]."',
'".$member["email"]."','".md5($member["password"])."',0,18)");

$row=$DB->fetch_row($DB->query("select id from mos_users where username='".$member["name"]."'"));

$DB->query("insert into mos_core_acl_aro ( section_value, value,order_value, name)
values('users',".$row["id"].",0,'".$member["name"]."')");


$row=$DB->fetch_row($DB->query("select aro_id from  mos_core_acl_aro where value='".$row["id"]."'"));
$DB->query("insert into  mos_core_acl_groups_aro_map (group_id,aro_id) values (18,'".$row["aro_id"]."')");

      function return_after_create()
      {
              header("Location: "."http://autosurfmonitor.kiev.ua/forum");

              exit();
      }
return_after_create();

//---- END


Что не так?

Сообщение отредактировал tclub - 29.09.05 - 14:15
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 29.09.05 - 18:00
Сообщение #8


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



так вам просто надо, чтоб обратно на форум возвращало??
Это просто: комментируем строку "return_after_create();" и все.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
tclub
сообщение 29.09.05 - 18:38
Сообщение #9


Newbie
*

Группа: Members
Сообщений: 6
Регистрация: 28.09.05
Пользователь №: 1,539



спасибо, проблема решена smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Alecfyz
сообщение 06.10.05 - 22:58
Сообщение #10


Gorsk.net Studio
***

Группа: Admin
Сообщений: 1,852
Регистрация: 24.02.05
Пользователь №: 3



Пакет полной интеграции IPB и Mambo/Joomla.
cool.gif


--------------------
Ибу ибу ди - хуэй дао муди - [Шаг за шагом можно достигнуть цели (кит.)]
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Sheridan
сообщение 19.03.06 - 00:35
Сообщение #11


Newbie
*

Группа: Members
Сообщений: 1
Регистрация: 18.03.06
Пользователь №: 1,796



Alecfyz
Привет
Вот уже середина марта, а для 2.0.4 нет
Очень жаль sad.gif (В соседней теме обещалось в январе)
Абгрейд до 2.1 невозможен(на форуме полно всего, что для 2.1 еще не существует)
Если было бы для 2.0.4 купил бы
Небольшая просьба, есть хотя бы наработка для 2.0.4 , чтобы пользователи были сразу залогинены на мамбе и IPB ....(общие куки что ли =) )
Общая регистрация есть


Сообщение отредактировал Sheridan - 19.03.06 - 00:36
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic

 



Lo-Fi Version Time is now: 22.05.12 - 01:59
Рейтинг@Mail.ru Rambler's Top100 Яндекс цитирования