Опубликовано: 15 августа 20187 г Здравствуйте. Я создал функцию регистрации на игровом сервере через сайт. Пожалуйста, посмотрите код, правильно ли всё реализовано, функция рабочая, интересует на сколько кривой код получился. protected function addpvpgn() { if(! \IPS\Settings::i()->pvpgn_enabled) { return NULL; } \IPS\Session::i()->csrfCheck(); $db = \IPS\sharedstats\DB::get(); $account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [ ['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games'] ]); if(count($account_pvpgn) == 0) { $form = new \IPS\Helpers\Form(); $form->addHeader('sharedstats_pvpgn_account_add'); $form->add(new \IPS\Helpers\Form\Text('sharedstats_pvpgn_account_add_name', null, true, array())); $form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password', NULL, TRUE, array() ) ); $form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password2', NULL, TRUE, array( 'confirm' => 'sharedstats_pvpgn_account_add_password' ) ) ); if ($values = $form->values()) { try { $pvpgn = new \IPS\sharedstats\Records\PvPGN\BNET; $pvpgnHash = new \IPS\sharedstats\DbIntegration\Hash; $friend = new \IPS\sharedstats\Records\PvPGN\friend; $profile = new \IPS\sharedstats\Records\PvPGN\profile; $Record = new \IPS\sharedstats\Records\PvPGN\Record; $pvpgn->uid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id; $pvpgn->acct_username = $values['sharedstats_pvpgn_account_add_name']; $pvpgn->username = mb_strtolower($values['sharedstats_pvpgn_account_add_name']); $pvpgn->acct_userid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id; $pvpgn->acct_passhash1 = $pvpgnHash->getHash($values['sharedstats_pvpgn_account_add_password']); $pvpgn->acct_email = \IPS\Member::loggedIn()->email; $pvpgn->save(); $friend->uid = \IPS\Member::loggedIn()->member_id; $friend->save(); $profile->uid = \IPS\Member::loggedIn()->member_id; $profile->save(); $Record->uid = \IPS\Member::loggedIn()->member_id; $Record->save(); $conn = new \IPS\sharedstats\Records\ForumConnection; $conn->name = mb_strtolower($values['sharedstats_pvpgn_account_add_name']); $conn->server = 'Server.WC3.Games'; $conn->member_id = \IPS\Member::loggedIn()->member_id; $conn->status = 'approved'; $conn->save(); \IPS\Output::i() ->redirect(\IPS\Http\Url::internal('app=sharedstats&module=stats&controller=BNetAccount', 'front') , 'sharedstats_pvpgn_account_add_added'); } catch(\IPS\Db\Exception $e) { if ($e->getCode() !== 1062) { throw $e; } $form->error = 'Такой игровой логин уже существует, выберите другой.'; } } /* Display */ \IPS\Output::i()->title = \IPS\Member::loggedIn() ->language() ->addToStack('sharedstats_pvpgn_account_add_name'); if (\IPS\Request::i()->isAjax()) { \IPS\Output::i()->output = $form->customTemplate(array( call_user_func_array(array( \IPS\Theme::i() , 'getTemplate' ) , array( 'forms', 'core' )) , 'popupTemplate' )); } else { \IPS\Output::i()->output = $form; } } } И еще вопрос, как вывести в шаблон результат переменной: $account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [ ['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games'] ]);Точнее, саму переменную, чтобы использовать условие if, если $account_pvpgn === 0 то отображать кнопку и форму не нужно. Изменено 15 августа 20187 г пользователем TemKa_SD
Опубликовано: 17 августа 20187 г Автор Спасибо, добавил return true; и заработало. Я вам сильное надоел? Изменено 17 августа 20187 г пользователем TemKa_SD
Опубликовано: 17 августа 20187 г Автор Хотя нет, что-то не то. Шаблон еще поправил, правильно? {{if \IPS\Settings::i()->pvpgn_enabled AND $accountPvPGN == true }} public function accountPvPGN() { $db = \IPS\sharedstats\DB::get(); $db::i('stats')->select('COUNT(*)', 'stats_forum_connections', [['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games']])->first() != 0; return true; } Блин, тоже не работает. Изменено 17 августа 20187 г пользователем TemKa_SD
Опубликовано: 18 августа 20187 г public function accountPvPGN() { $db = \IPS\sharedstats\DB::get(); return ($db::i('stats')->select('COUNT(*)', 'stats_forum_connections', [['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games']])->first() == 0); }
Здравствуйте. Я создал функцию регистрации на игровом сервере через сайт. Пожалуйста, посмотрите код, правильно ли всё реализовано, функция рабочая, интересует на сколько кривой код получился.
protected function addpvpgn() { if(! \IPS\Settings::i()->pvpgn_enabled) { return NULL; } \IPS\Session::i()->csrfCheck(); $db = \IPS\sharedstats\DB::get(); $account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [ ['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games'] ]); if(count($account_pvpgn) == 0) { $form = new \IPS\Helpers\Form(); $form->addHeader('sharedstats_pvpgn_account_add'); $form->add(new \IPS\Helpers\Form\Text('sharedstats_pvpgn_account_add_name', null, true, array())); $form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password', NULL, TRUE, array() ) ); $form->add( new \IPS\Helpers\Form\Password( 'sharedstats_pvpgn_account_add_password2', NULL, TRUE, array( 'confirm' => 'sharedstats_pvpgn_account_add_password' ) ) ); if ($values = $form->values()) { try { $pvpgn = new \IPS\sharedstats\Records\PvPGN\BNET; $pvpgnHash = new \IPS\sharedstats\DbIntegration\Hash; $friend = new \IPS\sharedstats\Records\PvPGN\friend; $profile = new \IPS\sharedstats\Records\PvPGN\profile; $Record = new \IPS\sharedstats\Records\PvPGN\Record; $pvpgn->uid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id; $pvpgn->acct_username = $values['sharedstats_pvpgn_account_add_name']; $pvpgn->username = mb_strtolower($values['sharedstats_pvpgn_account_add_name']); $pvpgn->acct_userid = \IPS\Settings::i()->connect_master ? \IPS\Member::loggedIn()->member_id : \IPS\Member::loggedIn()->ipsconnect_id; $pvpgn->acct_passhash1 = $pvpgnHash->getHash($values['sharedstats_pvpgn_account_add_password']); $pvpgn->acct_email = \IPS\Member::loggedIn()->email; $pvpgn->save(); $friend->uid = \IPS\Member::loggedIn()->member_id; $friend->save(); $profile->uid = \IPS\Member::loggedIn()->member_id; $profile->save(); $Record->uid = \IPS\Member::loggedIn()->member_id; $Record->save(); $conn = new \IPS\sharedstats\Records\ForumConnection; $conn->name = mb_strtolower($values['sharedstats_pvpgn_account_add_name']); $conn->server = 'Server.WC3.Games'; $conn->member_id = \IPS\Member::loggedIn()->member_id; $conn->status = 'approved'; $conn->save(); \IPS\Output::i() ->redirect(\IPS\Http\Url::internal('app=sharedstats&module=stats&controller=BNetAccount', 'front') , 'sharedstats_pvpgn_account_add_added'); } catch(\IPS\Db\Exception $e) { if ($e->getCode() !== 1062) { throw $e; } $form->error = 'Такой игровой логин уже существует, выберите другой.'; } } /* Display */ \IPS\Output::i()->title = \IPS\Member::loggedIn() ->language() ->addToStack('sharedstats_pvpgn_account_add_name'); if (\IPS\Request::i()->isAjax()) { \IPS\Output::i()->output = $form->customTemplate(array( call_user_func_array(array( \IPS\Theme::i() , 'getTemplate' ) , array( 'forms', 'core' )) , 'popupTemplate' )); } else { \IPS\Output::i()->output = $form; } } }И еще вопрос, как вывести в шаблон результат переменной:
$account_pvpgn = $db::i('stats')->select('id, status, name, active, server, created', 'stats_forum_connections', [ ['member_id=?', \IPS\Member::loggedIn()->member_id], ['server=?', 'Server.WC3.Games'] ]);Точнее, саму переменную, чтобы использовать условие if, если $account_pvpgn === 0 то отображать кнопку и форму не нужно.
Изменено пользователем TemKa_SD