Перейти к содержимому
Русский язык для Invision Community 5

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

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

 

	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

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

  • Автор

Спасибо, добавил return true; и заработало. Я вам сильное надоел?

Изменено пользователем TemKa_SD

  • Автор

Хотя нет, что-то не то.

 

Шаблон еще поправил, правильно?

 

  {{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;
}

 

Блин, тоже не работает.

Изменено пользователем TemKa_SD

    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);
   }

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

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.