Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Dlaczego funkcja wykonuje się 4 razy.


cin34

Rekomendowane odpowiedzi

Mam hooka, który ustawia mi limit tworzenia klubów oraz tworzenie klubu za punkty, mam problem z aktualizacją salda punktów, ponieważ funkcja create() wykonuje się 4 razy co w efekcie zamiast zabrać użytkownikowi 10 punktów zabiera ich 40.

Poniżej załączam zawartość hooka:

//<?php

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	exit;
}

class hook187 extends _HOOK_CLASS_
{
	protected function create()
	{
		try
		{
			try
			{
				try
				{
					try
					{
						if( \IPS\Settings::i()->clubLimitCreate > 0 )
						{
							$totalClubs = \IPS\Db::i()->select( 'count(*)', 'core_clubs', array( "owner=?", \IPS\Member::loggedIn()->member_id ) )->first();
		
							if( $totalClubs >= \IPS\Settings::i()->clubLimitCreate )
							{
								\IPS\Output::i()->error( 'clubError', 'Clubs Enhancements/12', 403, '' );
							}
						}
						
						if( \IPS\Settings::i()->clubCreatePoints > 0 )
						{
							$totalPoints = \IPS\Db::i()->select( 'points', 'points_members', array( "member_id=?", \IPS\Member::loggedIn()->member_id ), NULL, 1 )->first();
		
							if( $totalPoints >= \IPS\Settings::i()->clubCreatePoints )
							{
								$newPoints = $totalPoints - \IPS\Settings::i()->clubCreatePoints;
								try
								{
									\IPS\Db::i()->update( 'points_members', array( 'points' => $newPoints ), array( 'member_id=?', \IPS\Member::loggedIn()->member_id ) );
								}
								catch( \UnderflowException $ex )
								{
									\IPS\Output::i()->error( 'clubError', 'Clubs Enhancements/12', 403, '' );
								}
								
							}
						}
		
						parent::create();
					}
					catch ( \RuntimeException $e )
					{
						if ( method_exists( get_parent_class(), __FUNCTION__ ) )
						{
							return call_user_func_array( 'parent::' . __FUNCTION__, func_get_args() );
						}
						else
						{
							throw $e;
						}
					}
				}
				catch ( \RuntimeException $e )
				{
					if ( method_exists( get_parent_class(), __FUNCTION__ ) )
					{
						return call_user_func_array( 'parent::' . __FUNCTION__, func_get_args() );
					}
					else
					{
						throw $e;
					}
				}
			}
			catch ( \RuntimeException $e )
			{
				if ( method_exists( get_parent_class(), __FUNCTION__ ) )
				{
					return call_user_func_array( 'parent::' . __FUNCTION__, func_get_args() );
				}
				else
				{
					throw $e;
				}
			}
		}
		catch ( \RuntimeException $e )
		{
			if ( method_exists( get_parent_class(), __FUNCTION__ ) )
			{
				return call_user_func_array( 'parent::' . __FUNCTION__, func_get_args() );
			}
			else
			{
				throw $e;
			}
		}
	}


}

Poratuje mnie ktoś i naprowadzi na właściwy tor? :P

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Co tak dużo tych try'ów? :)

Odnośnie 4 wywołania - na pewno ta konkretna operacja jest wywoływana? Dodaj parametr który sprawdzi czy punkty zostały już odjęte.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.