A group site object defines a specific site that a user can choose when logging into the app, or is automatically chosen for them based on their PMS login. These commonly are record for holiday parks, and have many fields in them instead of the core strings list.
The 'key' is one of the most important parts, and generally should never change, even if the park itself has had a name change. This key is what identifies what park a user has chosen when loading the app, and is also used to filter their content so they only see relevant information for their park.
{
"id": 123,
"title": "Park One",
"key": "park-one",
"guestsOnly": false,
"ownersOnly": false,
"priority": 0,
"image": "https://your-wordpress-install.com/wp-content/uploads/2021/07/DJI_0934.jpg?v=1628248500",
"footerImage": "https://your-wordpress-install.com/wp-content/uploads/2021/07/DJI_0934.jpg?v=1628248500",
"description": "Holiday Park One sits on the south coast of England, just a stones throw from the jurassic coast",
"phone": "012345678",
"emergencyNumber": "01234 567890",
"emergencyText": "Emergency and Out Of Hours",
"emergencyCopy": "This number is only for use out of hours or in the case of an emergency.#BREAK#Would you like to call?"
"email": "info@holidaymakerapp.co.uk",
"website": "https://holidaymakerapp.co.uk",
"address": "Holidaymaker App Ltd#BREAK#Stowey House#BREAK#Bridport Road#BREAK#Dorchester#BREAK#DT12SB",
"w3w": "qualified.burglars.digitally",
"w3wUrl": "https://w3w.co/qualified.burglars.digitally",
"privacyUrl": "https://your-wordpress-install.com/privacy",
"socialIcons": "facebook;twitter;instagram",
"facebookUrl": "https://www.facebook.com/holidaymakerapp",
"instagramUrl": "https://www.instagram.com/holidaymakerapp",
"twitterUrl": "https://twitter.com/holidaymakerapp",
"youtubeUrl": "",
"tiktokUrl": "",
"threadsUrl": "",
"holidayHomesUrl": "https://link-to-external-homesales-site.com",
"accommodationMapButton": "Download Park Map",
"accommodationMapUrl": "https://your-wordpress-install.com/parkmap",
"loc_lat" : "50.71245750791539,",
"loc_lng": "-2.4619866156242995",
"loc_zoom": "14",
"mapStyle": "satellite",
"bookingEngineStrings": {
//Booking Engine Strings Object
}
"basicFormHeader": "Your contact details",
"basicFormButton": "Submit"
"basicFormSentTitle": "Thank you",
"basicFormSent" : "We will be in touch as soon as we can.",
"basicFormSmallPrint": "Data is only processed by us",
}Type : Integer - Required
ID for group site record, must be unique between group site records, but does not need to unique among other entities.
Type : String - Required
The site/park key - This is a very important property as it is used to identify which park a user is on, and what content should be shown based on other entities 'sites' array
Type : Boolean - Optional
Should this site or park be considered guest only? This means if a user select this park, they will bypass the login selection and automatically be set to be a guest. Usful for none parks which are added as an additional groupsite, eg an on site pub open to locals as well as a park guests
Type : Boolean - Optional
Should this site or park be considered guest only? This means if a user selects this park they can choose to be a owner, or a guest, but not have the option to login with a PMS booking.
Type : Integer - Optional
Defaults to 99 - the lower the priority the higher on the site selection list this park will appear before alphabetisation.
Type : Image Url String - Optional
Hero image for this site / park. This is shown on the site selection list.
Type : Rich Text / Multiline String - Optional
Text displayed on the card for this park / site on the site selection screen
Type : String - Optional
Contact phone number - This can include spaces as if a call us request is triggered this will have spaces removed from it
Type : String - Optional
Emergency phone number - This can include spaces as if a emergency call us request is triggered this will have spaces removed from it
Type : String - Optional
Emergency button text - This is the text rendered in the emergency phone number button if visible
Type : Rich Text / Multiline String - Optional
Emergency button copy - This is the text that popups in a confirmation dialog if the emergency button is pressed - is often a warning that the number is only for use out of hours or for emergencies
Type : Social Icon Type String - Optional
Selection of three social icons to show on the my holiday section. Note that if choosing a social network, the corrasponding url should also exist in the data. This will be checked by the app before navigation, but is good practice to ensure url exists as well in the data
Type : Url String - Optional
Facebook Url - only used if facebook is present in the social icons selection
Type : Url String - Optional
Instagram Url - only used if instagram is present in the social icons selection
Type : Url String - Optional
Twitter Url - only used if twitter is present in the social icons selection
Type : Url String - Optional
YouTube Url - only used if youtube is present in the social icons selection
Type : Url String - Optional
TikTok Url - only used if tiktok is present in the social icons selection
Type : Url String - Optional
Threads Url - only used if threads is present in the social icons selection
Type : Url String - Optional
If not using the holiday homes sales app section, the main menu can instead navigate to this external holiday home sales url
Type : String - Optional
An optional external accommodation map jpeg, png or webpage can be added - this is the text the button will show
Type : Url String - Optional
An optional external accommodation map jpeg, png or webpage can be added - this is the text the button will show
Type : Map Style - Optional
The style the google map should use in the Park Map section of the app - default 'road'
Type : Booking Engine Strings - Optional
A nested object with a collection of strings in relation to PMS login and behavior
Type : String - Optional
Header for standard contact form once the form has sent successfully
Type : Rich Text / Multiline String - Optional
Copy for standard contact form once the form has sent successfully
Type : Rich Text / Multiline String - Optional
Small print rendered under the standard contact form
Selection of strings for use by a group site object in relation to the PMS connection. These are sent as a nested object in a group site, but essentially work the same as the standard core information strings with the same property names
{
"feedbackUrl": "https://your-wordpress-install.com/contact",
"newBookingUrl": "https://your-wordpress-install.com/booknow",
"forgotPasswordUrl": "https://your-booking-engine.com/forgotpassword",
//ProphetOnly
"forgotPasswordButton": "Reset Login Details",
"forgotPasswordCopy": "Click below to visit our booking system to reset your credentials if you are having trouble logging in",
"registerBookingButton": "Register Account",
"registerBookingUrl": "https://your-booking-engine.com/register",
"registerBookingCopy": "Click below to visit our booking system to create an account. If this is the same email address attached to your booking, they will synchronise across and you will be able to login",
"continueAsGuestButton": "Continue as guest",
"continueAsGuestCopy": "If you booked on a third party booking system like PitchUp, then you will not be able to add your booking. Click below to continue using the app as a guest",
"refreshBookingOldCopy": "You do not have a current or future holiday on your account. If you do have a future booking it may take 24 hours to synchronise, but please contact us if you are still having difficulties",
"refreshBookingNoCopy": "You do not have any holiday bookings on your account. If you do have a future booking it may take 24 hours to synchronise, but please contact us if you are still having difficulties",
}Type : Url String - Optional
Once a logged in user's departure date has past they will be presented with a leave feedback button which will navigate to this url
Type : Url String - Optional
Once a logged in user's departure date has past they will be presented with a make new booking button which will navigate to this url. This button is also visible to users who choose to browse the app as a guest
Type : Url String - Optional
Used by most PMS connections - button available to users who are having trouble logging in with their booking
Type : String - Optional
Prophet PMS Only - Text for forgot password button on help screen
Type : Rich Text / Multiline String - Optional
Prophet PMS Only - Copy for forgot password box on help screen
Type : String - Optional
Prophet PMS Only - Text for register account button text on help screen
Type : Url String - Optional
Prophet PMS Only - Text for register account button url on help screen
Type : Rich Text / Multiline String - Optional
Prophet PMS Only - Copy for register account box on help screen
Type : String - Optional
Prophet PMS Only - Continue as guest button text on help screen
Type : Rich Text / Multiline String - Optional
Prophet PMS Only - Copy for continue as guest box on help screen
Type : Rich Text / Multiline String - Optional
Prophet PMS Only - Text which appears on a box on the my holiday screen if someone has successfully logged in but does not have any future bookings
Type : Rich Text / Multiline String - Optional
Prophet PMS Only - Text which appears on a box on the my holiday screen if someone has successfully logged in but does not have any booking
As we connect to different systems using a range of different languages, we can interpret several things as a true. Generally speaking holidaymaker will use a standard true/false JSON boolean, however we also read a lower case string and checked if they are "1", "true", "yes", or "on" to then create the positive boolean. Unless explicitly noted, all booleans are defaulted as false if the node doesn't exist.
{
"optionOne": true,
"optionTwo": false,
"allTheseAreValidTrues" : [
1, "1", true, "true", "on", "yes"
]
}Float and Double values are handled as normal JSON. Depending on the precision of the language sending/receiving the data can depend on the truncation of the decimal points. However due to the context of our data, only location lat/lng numbers will normally have more than 2-3 points.
{
"cost": 55.5,
"lat": 50.71245750791539,
"lng": -2.4619866156242995
}Our app surfaces talk to an image engine on our infrastructure to process and resize images for different smart phone screen densities. Because of this the size of images are less relevant as they are delivered at optimum sizes anyway. However due to processing power and speed we do recommend that image urls are all 3000 pixels or below. The app surfaces will never need an image this large, so it gives you the option of still having a large quality image, but can be loaded in the apps and our infrastructure efficiently. We support both png, jpeg, and webp images. You can optionally include a '?v=' version integer so this can be used for versioning. If you do include this you can ensure images are reprocessed if the source image is changed on your servers.
{
"imgUrl": "https://your-wordpress-site.com/wp-content/uploads/2023/08/a-large-image-3000x2100.jpg?v=1691481892",
"image": "https://your-wordpress-site.com/wp-content/uploads/2023/08/a-smaller-image.png"
}Standard JSON Integer - 0 is commonly considered to be a default value, unless it is an valid ID when -1 is used. For sort priorities 99 is used as the default.
{
"key1": 9,
"key2": 42,
"arrayOfInts": [
2,
3,
5,
8
]
}This is string definition to set how embedded google maps should render in the app. The options available are :
• "road" - Standard Google Maps Road
• "satellite" - Satellite Photo View
{
"mapStyle": "satelitte"
}Acts the same as the standard String type, however If text is assumed to include line breaks then we use a place holder of #BREAK#. These will then be replaced by the relevant line breaks depending on the language, and device that is rendering the text. This is commonly used in entity copy, and addresses. Rich text should not include HTML or other markup. There should always be a contextual consideration as well - for example if you copy includes a html anchor link to 'Read More' - then simply removing the markup will then leave the text 'Read More' which will be a redundant, none clickable piece of text within the app surfaces.
{
"textWithBullets": "This paragraph will now have two line breaks, and then a list of bullets#BREAK##BREAK#• Bullet 1#BREAK#• Bullet 2#BREAK#• Bullet 3",
"address": "Holidaymaker App Ltd#BREAK#Stowey House#BREAK#Bridport Road#BREAK#Dorchester#BREAK#DT12SB"
}This is a set of up to three string definitions to set what social icons to use. These should be semicolon delimited, out of the following available options :
• "none" - Do not show an icon is this position (default)
• "twitter" - Twitter using the legacy blue bird icon
• "twitterx" - Twitter using recent 'X' black logo
• "tiktok" - TikTok
• "facebook" - Facebook
• "instagram" - Instagram
• "youtube" - YouTube
• "threads" - Threads
• "logo" - Brand / Company logo - this will navigate to main park website - on CMS restricts users from selecting this option for the middle position only
{
"socialIcons": "threads;instagram;tiktok"
}Standard JSON String - Often will have certain characters escaped depending what system is writing the JSON packet, however our parser only requires to have double quotes (") escaped. UTF-8 encoding is our standard, but others may be accepted if required. If line breaks are required in the text then the Rich Text / Multiline String type is used instead.
{
"key1": "A string value",
"key2": "Another string with an some \"quotes\" that need escaping",
"arrayOfStrings": [
"Item one as a string",
"Item two as a string",
"Item three as a string",
]
}A Url is sent the same as a string. If our system knows this is a url it will check if it starts with http or https - Note that navigating from both iOS and Android should use https.
{
"bookingUrl" : "https://portal.managebooking.pmssystem"
}Added emergency number, text, and copy properties
Added Twitter 'X' option
Added threads, tiktok, and youtube options
Added support for tiktok, youtube, and threads urls
Added w3w and w3wUrl properties