Pools
-
Hi,
I have 2 questions regarding pools. I have created 15 pools in which players can participate in the football pool. 14 of them are named after regional football club, so members of the local football club can compete whith each other. The 15th one is called ‘No pool’.
I use the Peepso plugin for registrations on my website. In the registration form one has to choose in which pool they want to participate.
Unfortunately I did not figure out how to link the choice of pool to your plugin. From another topic I understood I had to name the related field of the registration form to ‘League’. Unfortunately I think this is not possible with Peepso. Is there another way?If it is not possible no problem. I can add users manualy to a pool. But in that case I wonder how I can set the default pool when there is a new registration?
I have pools with the folowing names:
– vv de Zuiderburen
– HMVV
– Reusel sport
– No pool
– Etc.A new user by default is placed in pool ‘Reusel sport’, but I would like them to be in ‘No pool’.
Thanks again for your support.
-
This topic was modified 3 years, 11 months ago by
fransjansen.
The page I need help with: [log in to see the link]
-
This topic was modified 3 years, 11 months ago by
-
Hi Frans,
From another topic I understood I had to name the related field of the registration form to ‘League’. Unfortunately I think this is not possible with Peepso. Is there another way?
Yes, what you would need to do is to fetch the correct field and pass it on to the relevant functions.
If you look at this script, it hooks into the relevant filter and passes the
$league
value to the functions to automate the league registration. What you can do, is just overwrite the var with the value of your input field. E.g. just before the update_user_meta calls:$league = Football_Pool_Utils::post_int( '<name of your input>', <int value of your default league> );
Hopefully the value contains the league ID from the database, that would make it real easy. If not, you would first have to map the values to the corresponding league ID before sending it to the functions. That can be done with a simple case statement or via an array lookup if you put all the id => league name pairs in an array.
A new user by default is placed in pool ‘Reusel sport’, but I would like them to be in ‘No pool’.
You can define the default league in your wp-config file by adding this line:
define( 'FOOTBALLPOOL_LEAGUE_DEFAULT', 3 );
The value should be the ID of your league (you can get it from the admin screen or database).
Hey Antoine,
Ik reageer even in het Nederlands. Dat praat wat makkelijker, zeker als het over materie gaat waar ik niet veel verstand van heb. Dat is namelijk het geval bij PHP. Ik kan dat script uploaden naar de juiste map, maar met die aanpassing worstel ik.
<?php /** * Plugin Name: Football Pool Remove Admin Approval * Description: No admin approval required for league. * Version: 2.0 * Author: Antoine Hurkmans * Author URI: [email protected] * License: MIT */ // Save this plugin in the "/wp-content/plugins" folder and activate it // class FootballPoolSetLeagueOnRegistration { public static function init_extension() { // Display a message if the Football Pool plugin is not activated. if ( ! class_exists( 'Football_Pool' ) ) { add_action( 'admin_notices', array( __CLASS__, 'no_fp_plugin_error' ) ); return; } // Users are automatically added, so after the save we just set the player in the chosen pool. // Admin approval is not needed with this plugin. add_action( 'footballpool_new_user', array( __CLASS__, 'set_league' ), 50, 2 ); } public static function no_fp_plugin_error() { echo '<div class="error"><p>The Football Pool plugin is not activated. Make sure you activate it so the Football Pool extension plugin has some use.</p></div>'; } public static function set_league( $user_id, $league ) { global $wpdb; $prefix = FOOTBALLPOOL_DB_PREFIX; <strong> $league = Football_Pool_Utils::post_int( 'profile_field_16377', $Geen league );</strong> $pool = new Football_Pool_Pool(); if ( $pool->has_leagues ) { update_user_meta( $user_id, 'footballpool_registeredforleague', $league ); update_user_meta( $user_id, 'footballpool_league', $league ); Football_Pool::update_user_custom_tables( $user_id, $league ); } else { $pool->update_league_for_user( $user_id, 0 ); } } } add_filter( 'plugins_loaded', array( 'FootballPoolSetLeagueOnRegistration', 'init_extension' ) );
Ik heb een regel toegevoegd, maar ik was er al bang voor dat dat niet correct was en dat blijkt ook zo.
Als het te buiten de range van support gaat, is het prima hoor, dan voeg ik gebruikers handmatig toe aan een league, maar je hebt me wel lekker gemaakt met het script ??-
This reply was modified 3 years, 11 months ago by
fransjansen.
Op de plek van
$Geen league
moet je een getal geven (de id van een league). Of het volgende als je deze constante in je wp-config hebt gedefinieerd:FOOTBALLPOOL_LEAGUE_DEFAULT
Dat zal in ieder geval de fout oplossen. Het is dan nog geen garantie dat het script dan exact doet wat je wil ??
Nou de fout is inderdaad opgelost. Ik heb
$Geen league
vervangen door3
. Dat is het id van de pool ‘Geen league’, waar iedereen in hoort te komen die niet in een pool wil deelnemen.Als ik nu echter een nieuwe speler registreer en daarbij bijv. pool ‘vv Hoogeloon’ kies komt deze speler toch in ‘Geen league’.
Ik vroeg me af of ik dan onderstaand advies moet uitvoeren:
Hopefully the value contains the league ID from the database, that would make it real easy. If not, you would first have to map the values to the corresponding league ID before sending it to the functions. That can be done with a simple case statement or via an array lookup if you put all the id => league name pairs in an array.
Dat is voor mij ook abracadabra. Sorry….
Verder vroeg ik me ook af of in het script de naam van mijn input klopt. Ik heb die naam gekozen op basis de inspectie, zie screenshot:
screenshot-
This reply was modified 3 years, 11 months ago by
fransjansen.
Ja, je moet helaas gaan ‘mappen’. Als je de select open klapt in de inspector dan zie je dat de values van alle options ook dynamisch worden opgebouwd door je form generator. Voorbeeld: “option_16377_3”.
Het is die waarde die wordt doorgestuurd naar het script en dan in de $league value terecht komt. Of beter gezegd, mijn Utils functie eist dat er een integer value wordt opgehaald en omdat de waarde een string is, zal de default-waarde (de 2e parameter) worden gebruikt.Je moet dus 2 dingen doen:
1. de exacte string-waarde ophalen;
2. deze string-waarde eerst vertalen naar een database ID van de league.Het mooiste zou zijn als je dit dynamisch zou doen want dan zou ook een nieuwe league die je toevoegt, automatisch kunnen worden opgepikt door het script, maar aangezien je zo’n nieuwe league toch al handmatig aan je form moet toevoegen en de waarde van de option onvoorspelbaar is (geen idee hoe je die weer automatisch in de form generator kan opzoeken), zou ik zeggen: gewoon hard-coded in je script opnemen.
De regel
$league = ...
moet dan worden vervangen door het volgende stuk code:$league = Football_Pool_Utils::post_str( 'profile_field_16377', FOOTBALLPOOL_LEAGUE_DEFAULT ); $league_options = [ 'option_16377_1' => 10, // zuiderburen 'option_16377_2' => 20, // reusel 'option_16377_3' => 30, // hmvv // etc. voor elke option 1 zo'n regel ]; if ( array_key_exists( $league, $league_options ) ) { $league = $league_options[$league]; }
Waarbij de waarden 10, 20 en 30 in de array natuurlijk zijn verzonnen en moeten worden vervangen door de echte league ID’s. Ik raad aan om voor de leesbaarheid van het script net als ik achter elke array regel een comment met de naam van de league te plaatsen, bv.
// reusel
. Maakt het makkelijker om later je script te begrijpen ??p.s. Disclaimer: ik heb bovenstaande code niet getest, dus hopelijk heb ik geen syntax-fouten gemaakt.
p.s.2. Omdat het script erg afhankelijk is van de wijze waarop je form generator de option values genereert, is het belangrijk om – wanneer je iets wijzigt aan het formulier – altijd even te controleren of je script nog goed werkt. Hopelijk wijzigt er niets, maar er zijn ook generators die telkens nieuwe, dynamische, namen voor de elementen op het form genereren.
btw. vergeet ik nog te melden: als je form generator het ondersteunt om ook de value op te geven bij elke optie in de league dropdown, dan is heel die mapping niet nodig. Je kan dan gewoon de waarde van de league id opgeven bij de optie en dan het oorspronkelijke script houden.
Super Antoine! Bedankt voor de geweldige support.
Het werkt nu.I wil dit topic even heropenen, omdat ik een nieuwe inschrijfformulier gemaakt heb m.b.v. een andere plugin namelijk Paytium. De reden hiervoor is dat ik gebruikers wil laten betalen via iDeal voor deelname. Het nieuwe inschrijfformulier is te bekijken op https://ek2021pool.nl/inschrijven/.
Ik heb het script waar we eerder over spraken als volgt aangepast:
<?php /** * Plugin Name: Football Pool Remove Admin Approval * Description: No admin approval required for league. * Version: 2.0 * Author: Antoine Hurkmans * Author URI: [email protected] * License: MIT */ // Save this plugin in the "/wp-content/plugins" folder and activate it // class FootballPoolSetLeagueOnRegistration { public static function init_extension() { // Display a message if the Football Pool plugin is not activated. if ( ! class_exists( 'Football_Pool' ) ) { add_action( 'admin_notices', array( __CLASS__, 'no_fp_plugin_error' ) ); return; } // Users are automatically added, so after the save we just set the player in the chosen pool. // Admin approval is not needed with this plugin. add_action( 'footballpool_new_user', array( __CLASS__, 'set_league' ), 50, 2 ); } public static function no_fp_plugin_error() { echo '<div class="error"><p>The Football Pool plugin is not activated. Make sure you activate it so the Football Pool extension plugin has some use.</p></div>'; } public static function set_league( $user_id, $league ) { global $wpdb; $prefix = FOOTBALLPOOL_DB_PREFIX; $league = Football_Pool_Utils::post_str( 'pt-field-dropdown-6', FOOTBALLPOOL_LEAGUE_DEFAULT ); $league_options = [ 'vv de Zuiderburen' => 2, // vv de Zuiderburen 'Reusel Sport' => 16, // Reusel Sport 'HMVV' => 4, // HMVV 'vv Hulsel' => 5, // vv Hulsel 'Bladella' => 6, // Bladella 'SDO ’39' => 7, // SDO ’39 'vv Netersel' => 8, // vv Netersel 'vv Hapert' => 9, // vv Hapert 'Rkvv Casteren' => 10, // Rkvv Casteren 'vv Hoogeloon' => 11, // vv Hoogeloon 'Dosko ’32' => 12, // Dosko ’32 'sv Tuldania' => 13, // sv Tuldania 'vv EFC' => 14, // vv EFC 'vv Vessem' => 15, // vv Vessem 'Geen league' => 3, // Geen league ]; if ( array_key_exists( $league, $league_options ) ) { $league = $league_options[$league]; } $pool = new Football_Pool_Pool(); if ( $pool->has_leagues ) { update_user_meta( $user_id, 'footballpool_registeredforleague', $league ); update_user_meta( $user_id, 'footballpool_league', $league ); Football_Pool::update_user_custom_tables( $user_id, $league ); } else { $pool->update_league_for_user( $user_id, 0 ); } } } add_filter( 'plugins_loaded', array( 'FootballPoolSetLeagueOnRegistration', 'init_extension' ) );
Als ik nu echter een nieuwe gebruiker registreer wordt de gekozen pool/league niet gekoppeld aan jouw plugin.
Wat doe ik fout of zie ik over het hoofd?
Nogmaals bedankt.Ik zie zo 1-2-3 ook niet wat er mis zou moeten zijn. Het lijkt erop dat de $league value niet bevat wat we verwachten waardoor de array lookup niet werkt. Maar de enige manier om daar achter te komen is door te debuggen. Je wil weten wat de waarde van $league is vóór en na het volgende statement:
if ( array_key_exists( $league, $league_options ) ) { ... }
Heel erg bedankt voor je uitleg, maar dit gaat mijn pet te boven. Ik was heel blij dat het de vorige keer gelukt was.
Het voelt niet helemaal goed om wéér om hulp te vragen. Ik heb zelf gegoogled, maar het voelt alsof ik als 10 jarige in een auto gezet wordt met de vraag ga maar rijden…Hoe werkt debuggen?
Ik vermoed dat het probleem niet zo simpel is. Ik heb even naar de plugin gekeken die je nu gebruikt en dat is geen plugin die ingrijpt op het registratieproces. Het is een plugin die payments ondersteund middels een ‘normaal’ formulier en dan ook aansluitend een gebruiker kan aanmaken. In dat proces weet ik niet zeker of je nog de beschikking hebt over de user ID van de gebruiker die zojuist is aangemaakt.Als ik naar de documentatie van de plugin kijk, dan zie ik dat er een hook is waar je op kan ingrijpen:paytium_after_paytium_user_data_processing
. Maar ik kan niet snel vinden of de User ID beschikbaar is van de zojuist aangemaakte gebruiker. Iets wat bij de hooks van het registratieproces van WP wel het geval is. Dat is dus sowieso iets wat je dan met de maker van die plugin moet navragen. Als dat duidelijk is, dan is er nog wel een kans dat we het werkend kunnen krijgen.Nevermind… Je zou gewoon met de gebruikelijke hooks moeten kunnen werken. Dus wellicht toch even debuggen.
In de meest simpele vorm zou je de waarden naar de pagina kunnen schrijven met
echo
, als dit tenminste niet ergens een fout oplevert, bv. zoecho "de waarde van league = $league<br>";
En als je dit voor en na het statement doet, dan kan je ergens op de pagina of in de view source deze tekst terug vinden. Maar helaas werkt dit niet altijd. Soms zit je nog niet in het juiste ‘moment’ van de WP cycle om te kunnen schrijven naar de content waardoor je een fout krijgt. Wat dus iets ‘zekerder’ werkt, is schrijven naar een txt file. Ik heb een functie in mijn code die hierbij kan helpen. Je moet daarvoor dan wel even in je wp-config het volgende toevoegen (aub niet vergeten weer weg te halen als je klaar bent met debuggen):
define( 'FOOTBALLPOOL_LOCAL_MODE', true );
Met deze waarde op ‘true’ kan je met de volgende code debug-waarden wegschrijven in een tekstbestand dat in de root folder van de plugin wordt gezet (‘_error_log.txt’):
Football_Pool_Utils::debugf( "de waarde van league = $league" );
-
This reply was modified 3 years, 10 months ago by
AntoineH.
Hoi Antoine,
Bedankt voor je geduld. Ik had nav je bericht voor de aanpassing al een mail naar Paytium gestuurd, maar nog geen reactie. N.a.v. je aanpassing heb ik getracht jouw aanbevelingen door te voeren, maar wat doe ik fout?
Ik heb in WP-config het volgende toegevoegd:
define( 'FOOTBALLPOOL_LOCAL_MODE', true );
Zie afbeelding: https://i.postimg.cc/X7Lpbtzt/debug-wp-config.jpgVervolgens heb ik de volgende code
Football_Pool_Utils::debugf( "de waarde van league = $league" );
toegevoegd in football-pool-set-league-on-registration-v2.php (die zich in de folder ‘plugins’ bevindt.
Zie afbeelding: https://i.postimg.cc/Gmp9hq0t/debug-1.jpgIn de root folder vd plugin zie ik echter geen bestand met de naam ‘_error_log.txt’. Zie afbeelding: https://i.postimg.cc/7Ywfjqmg/debug-root.jpg
Dit kan 2 dingen betekenen:
1. Het schrijven van het bestand lukt niet. Bv. omdat de rechten op het filesystem dit verhinderen. Misschien staat er iets in de debug.log van WP?2. De code van de extension wordt helemaal niet uitgevoerd. Dan moeten we uitzoeken waarom de hook “footballpool_new_user” niet wordt getriggerd.
Ik heb in wp-config.php wp_debug op true gezet.
define( 'WP_DEBUG', true );
Wat gegoogle leert mij dat er dan een debug.log bestand in de contant map zou moeten staan. Deze ontbreekt echter en ook in andere mappen kan ik ‘m niet terugvinden. Ik kan je dan ook niet vertellen wat daarin staat.Verder valt me op dat de permission van bestand football-pool-set-league-on-registration-v2.php op 644 staat. Kan het zijn dat ik dat aan moet passen?
Wat gegoogle leert mij dat er dan een debug.log bestand in de contant map zou moeten staan. Deze ontbreekt echter
Als je geen error ziet, dan is dat op zich positief nieuws. De log wordt overigens alleen aangemaakt als je ook het volgende in je wp-config hebt staan:
define( 'WP_DEBUG_LOG', true );
Meer info hier.
Verder valt me op dat de permission van bestand football-pool-set-league-on-registration-v2.php op 644 staat. Kan het zijn dat ik dat aan moet passen?
Nee, rechten van dit bestand zijn niet relevant. Het gaat om de directory waar schrijven mogelijk moet zijn (755 als ik me niet vergis). Dat zouden in ieder geval dezelfde rechten moeten zijn als op de “wp-content/uploads” directory (want daar kan de webserver schrijven). Maar ik vermoed dat dit wel klopt.
Ik denk persoonlijk dat het script niet wordt ‘getriggerd’.
-
This reply was modified 3 years, 11 months ago by
- The topic ‘Pools’ is closed to new replies.