Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Правильно ли сделан код?

Опубликовано:

Здравствуйте. Я создал функцию регистрации на игровом сервере через сайт. Пожалуйста, посмотрите код, правильно ли всё реализовано, функция рабочая, интересует на сколько кривой код получился.

 

	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

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

Опубликовано:

Не пойму, как идет проверка на наличие логина в базе данных. В файле \applications\core\modules\front\system\register.php вроде нету, а подключение core.front.system.register только в нем и одном js файле.

 

Вам оно зачем, если Ваши поля не связаны с именами юзеров?

Опубликовано:
  • Автор

Я хочу сделать проверку логина в своей внешней базе (игрового ника).

Опубликовано:
Я хочу сделать проверку логина в своей внешней базе (игрового ника).
Пишите подробнее, где и что должно быть.
Опубликовано:
  • Автор

Вот код модуля по регистрации игрового ника во внешней базе денных, функция addpvpgn.

Я хочу сделать чтобы при вводе логина (игровой ник во внешней БД) проверялось его наличие, и в случае нахождения выдавало ошибку как на скрине.

BNetAccount.php

post-60255-0-26952400-1534401448_thumb.png

Опубликовано:

Я хочу сделать чтобы при вводе логина (игровой ник во внешней БД) проверялось его наличие, и в случае нахождения выдавало ошибку как на скрине.

Без нажатия на кнопку? Ввел и получил результат?

Если так, то там используется ajax. См.

		/**
	 * Fires an ajax request to check whether the username is already in use
	 * Updates the result element depending on the result
	 *
	 * @returns 	{void}
	 */
	_doCheck: function (type, field) {

Опубликовано:
  • Автор

Не, не для моих это мозгов. Я думал будет что-то примерно:

 

$form->add( new \IPS\Helpers\Form\Text( 'username', NULL, TRUE, array( 'accountUsername' => $переменная, в которой записан результат выборки из БД ) ) );

Опубликовано:
'accountUsername' => $переменная, в которой записан результат выборки из БД
Забудьте про accountUsername
Не, не для моих это мозгов
Сделайте на submit. Юзер отправил форму -> идет проверка на ник.

 

$form->add( new \IPS\Helpers\Form\Text( 
'username', 
NULL, 
TRUE, 
array(),
function ($value)
{
	$nick = false; // Проверяете игровой ник во внешней БД

	if (!$nick)
	{
		throw new \DomainException('Указанного ника не существует');
	}
}		
) );

Опубликовано:

Кстати, у Вас там еще пароли фигурируют, которые тоже должны проверяться.

Опубликовано:
  • Автор

Большое спасибо, работает. А нельзя сделать, чтобы форма не перезагружалась на отдельную страницу?

 

		$form->addHeader('sharedstats_pvpgn_account_add', NULL, TRUE, array(),
	    function ($value)
	    {
	        $nick = $db::i('pvpgn')->select('username', 'pvpgn_BNET', [['username=?', $value]]);

	        if ($nick)
	        {
	            throw new \DomainException('Такой игровой логин уже зарегистрирован, выберите другой.');
	        }
	    });

post-60255-0-93134000-1534413762_thumb.png

Опубликовано:
  • Автор

Кстати, у Вас там еще пароли фигурируют, которые тоже должны проверяться.

 

Проверяться на что?

Опубликовано:

А нельзя сделать, чтобы форма не перезагружалась на отдельную страницу?

ajax или открывайте форму в попап-окне

 

Проверяться на что?
На корректность. Если я знаю ник, то смогу его добавить, введя любой пароль.
Опубликовано:
  • Автор

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

 

Не понял )

Опубликовано:
  • Автор

Подскажите пожалуйста, как вывести результат вот этого запроса в шаблонpost-60255-0-54764600-1534414876_thumb.png, чтобы скрыть эту кнопкуpost-60255-0-11947000-1534414889_thumb.png.

Опубликовано:

Не понял )

		$form->add( new \IPS\Helpers\Form\Password( 'password', '', TRUE, array(  'minLength' => 3, 'maxLength' => 15 ) ) );
	$form->add( new \IPS\Helpers\Form\Password( 'password_confirm', '', TRUE, array( 'confirm' => 'password', 'minLength' => 3, 'maxLength' => 15 ) ) );

Что это за пароль? Для чего он нужен?

 

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

 

Я же писал, ищите шаблон, где выводится кнопка и добавьте новый параметр.

Опубликовано:
  • Автор

		$form->add( new \IPS\Helpers\Form\Password( 'password', '', TRUE, array(  'minLength' => 3, 'maxLength' => 15 ) ) );
	$form->add( new \IPS\Helpers\Form\Password( 'password_confirm', '', TRUE, array( 'confirm' => 'password', 'minLength' => 3, 'maxLength' => 15 ) ) );

Что это за пароль? Для чего он нужен?

 

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

 

Я же писал, ищите шаблон, где выводится кнопка и добавьте новый параметр.

 

Missing argument 2 for IPS\Theme\theme_sharedstats_front_bnet_accountView(), called in /var/www/dev/data/www/dev.wc3.games/system/Theme/Dev/Template.php on line 171 and defined

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.