Plugin Directory

Changeset 3369496


Ignore:
Timestamp:
09/29/2025 07:53:56 AM (6 months ago)
Author:
guestapp
Message:

Update to version 2.2.5 from GitHub

Location:
guestapp
Files:
18 edited
1 copied

Legend:

Unmodified
Added
Removed
  • guestapp/tags/2.2.5/README.txt

    r3364049 r3369496  
    44Tested up to: 6.8.0
    55Requires PHP: 5.6
    6 Stable tag: 2.2.4
     6Stable tag: 2.2.5
    77License: GPLv2 or later
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    6060
    6161== Changelog ==
     62= 2.2.5 =
     63* Corrige la liste des établissements disponibles (admin)
    6264= 2.2.4 =
    6365* Retire la notion de version de l'API (admin)
  • guestapp/tags/2.2.5/config_v4.php

    r3198976 r3369496  
    33    'api_url' => getenv('GS_WIRE_API') ? getenv('GS_WIRE_API') : 'https://widget.guest-suite.com/api/v1/',
    44    'api_endpoint_reviews' => 'reviews.json',
     5    'api_endpoint_locations' => 'locations.json',
    56    'gs_url_backoffice' => getenv('GS_APP_URL') ? getenv('GS_APP_URL') : 'https://my.guest-suite.com/login',
    67    'report_url' => getenv('GS_REPORT_URL') ? getenv('GS_REPORT_URL') : 'https://widget.guest-suite.com/reviews/',
  • guestapp/tags/2.2.5/guest-suite.php

    r3364049 r3369496  
    44 * Plugin URI:        https://www.guest-suite.com/
    55 * Description:       Afficher la satisfaction de vos clients sur votre site avec le plugin Guest Suite pour Wordpress.
    6  * Version:           2.2.4
     6 * Version:           2.2.5
    77 * Requires at least: 4.6.1
    88 * Requires PHP:      5.6
  • guestapp/tags/2.2.5/includes/admin/charts/charts-functions.php

    r3364049 r3369496  
    119119 * Retrieves all available establishments.
    120120 *
     121 * This function attempts to fetch establishments from the GuestSuite API first. If the API call fails,
     122 * it falls back to querying establishments from local WordPress posts. The results are cached for 1 hour
     123 * to reduce API calls.
     124 *
     125 * @return array An associative array of establishments with establishment IDs as keys and names as values.
     126 *               The array is sorted alphabetically by establishment name.
     127 *
     128 * The function performs the following steps:
     129 * 1. Checks cache for existing establishment data
     130 * 2. If not cached, calls GuestSuite API to fetch establishments
     131 * 3. If API call fails, falls back to querying local WordPress posts
     132 * 4. Normalizes data into array of establishment IDs and names
     133 * 5. Sorts establishments alphabetically by name
     134 * 6. Caches results for 1 hour
     135 */
     136function guestsuite_get_establishments()
     137{
     138    // Cache results for 1 hour to reduce API calls
     139    $cache_key = 'gs_establishments_cache_v1';
     140    $cached = get_transient($cache_key);
     141    if ($cached !== false) {
     142        return $cached;
     143    }
     144
     145    // Call the API endpoint defined in config_v4.php as api_endpoint_locations
     146    $response = call_gs_wire_api('locations');
     147
     148    // If HTTP error or WP error, fall back to CPT-derived establishments
     149    if (is_wp_error($response)) {
     150        return guestsuite_get_establishments_from_posts();
     151    }
     152
     153    $status_code = wp_remote_retrieve_response_code($response);
     154    if ($status_code !== 200) {
     155        return guestsuite_get_establishments_from_posts();
     156    }
     157
     158    $body = wp_remote_retrieve_body($response);
     159    $data = json_decode($body, true);
     160
     161    if (!is_array($data)) {
     162        return guestsuite_get_establishments_from_posts();
     163    }
     164
     165    // Normalize into an array of [ 'id' => string|int, 'name' => string ]
     166    $establishments = [];
     167
     168    // Adjust these keys to match the real API response
     169    // Examples of common shapes:
     170    // - [ { "id": 123, "name": "Hotel ABC" }, ... ]
     171    // - [ { "uuid": "...", "label": "Hotel ABC" }, ... ]
     172    foreach ($data as $record) {
     173        $id = isset($record['establishment_id']) ? $record['establishment_id'] : (isset($record['locationUuid']) ? $record['locationUuid'] : null);
     174        $name = isset($record['establishment_name']) ? $record['establishment_name'] : null;
     175
     176        if ($id === null || empty($name)) {
     177            continue;
     178        }
     179
     180        // Ensure uniqueness by ID
     181        $establishments[(string)$id] = (string)$name;
     182    }
     183
     184    // Sort alphabetically by name
     185    uasort($establishments, function ($a, $b) {
     186        return strcasecmp($a, $b);
     187    });
     188
     189    // Convert to a simple array for consumers. If your UI expects only names, you can map to names here.
     190    // Returning as key=>value pairs is often more useful, so keep the ID if you plan to filter by it.
     191    set_transient($cache_key, $establishments, HOUR_IN_SECONDS);
     192    return $establishments;
     193}
     194
     195/**
     196 * Retrieves all available establishments.
     197 *
    121198 * This function queries the database for all posts of the custom post type defined by GUESTSUITE_CPT_NAME.
    122199 * It collects the names of the establishments from the post meta and returns a list of unique establishment names.
    123200 *
    124  * @return array An array of unique establishment names.
     201 * @return array An associative array of unique establishment names.
    125202 *
    126203 * The function performs the following steps:
     
    131208 * 5. Resets the post data after the loop.
    132209 */
    133 function guestsuite_get_establishments()
     210function guestsuite_get_establishments_from_posts()
    134211{
    135212    $args = array(
    136         'post_type' => GUESTSUITE_CPT_NAME,
    137         'posts_per_page' => -1,
    138         'fields' => 'ids'
     213            'post_type' => GUESTSUITE_CPT_NAME,
     214            'posts_per_page' => -1,
     215            'fields' => 'ids'
    139216    );
    140217    $query = new WP_Query($args);
    141218    $establishments = [];
    142219    if ($query->have_posts()) {
     220        $count = 0;
    143221        while ($query->have_posts()) {
    144222            $query->the_post();
     223            $establishment_id = get_post_meta(get_the_ID(), 'gs_establishments_id', true) ?: get_post_meta(get_the_ID(), 'gs_locationUuid', true);
    145224            $establishment_name = get_post_meta(get_the_ID(), 'gs_establishments_name', true);
    146225            if (!empty($establishment_name) && !in_array($establishment_name, $establishments)) {
    147                 $establishments[] = $establishment_name;
     226                $count++;
     227                $establishments[$establishment_id] = $establishment_name;
    148228            }
    149229        }
    150         asort($establishments);
     230
     231        uasort($establishments, function ($a, $b) {
     232            return strcasecmp($a, $b);
     233        });
    151234        wp_reset_postdata();
    152235    }
     
    291374    if ($establishment_id) {
    292375        $args['meta_query'][] = array(
    293             'key' => 'gs_establishments_id',
    294             'value' => $establishment_id,
    295             'compare' => '='
     376            'relation' => 'OR',
     377            'establishment_id' => array(
     378                    'key' => 'gs_establishments_id',
     379                    'value' => $establishment_id,
     380                    'compare' => '='
     381            ),
     382            'locationUuid' => array(
     383                    'key' => 'gs_locationUuid',
     384                    'value' => $establishment_id,
     385                    'compare' => '='
     386            ),
    296387        );
    297388    }
     
    313404    }
    314405    return $reviews;
    315 }
    316 
    317 /**
    318  * Retrieves unique establishments without duplicate entries.
    319  * establishment_ID => establishment_Name
    320  *
    321  * This function queries the database for all posts of the custom post type defined by GUESTSUITE_CPT_NAME.
    322  * It collects the establishment IDs and names from the post meta and returns an associative array of unique establishments.
    323  *
    324  * @return array An associative array of unique establishments with establishment_ID as the key and establishment_Name as the value.
    325  *
    326  * The function performs the following steps:
    327  * 1. Sets up the query arguments to fetch all posts of the custom post type.
    328  * 2. Executes the query using WP_Query.
    329  * 3. Iterates through the posts and collects the establishment IDs and names from the post meta.
    330  * 4. Ensures that only unique establishments are added to the result array.
    331  * 5. Resets the post data after the loop.
    332  */
    333 function guestsuite_get_unique_establishments()
    334 {
    335     $establishments = array();
    336     $args = array(
    337         'post_type' => GUESTSUITE_CPT_NAME,
    338         'posts_per_page' => -1,
    339         'post_status' => 'publish',
    340         'meta_key' => 'gs_establishments_id',
    341         'fields' => 'ids',
    342     );
    343     $query = new WP_Query($args);
    344     if ($query->have_posts()) {
    345         while ($query->have_posts()) {
    346             $query->the_post();
    347             $establishment_id = get_post_meta(get_the_ID(), 'gs_establishments_id', true);
    348             $establishment_name = get_post_meta(get_the_ID(), 'gs_establishments_name', true);
    349             if (!array_key_exists($establishment_id, $establishments)) {
    350                 $establishments[$establishment_id] = $establishment_name;
    351             }
    352         }
    353     }
    354     asort($establishments);
    355     wp_reset_postdata();
    356     return $establishments;
    357406}
    358407
  • guestapp/tags/2.2.5/includes/admin/functions.php

    r3364049 r3369496  
    371371                                'gs_publication_date' => $review['publication_date'],
    372372                                'gs_global_rate' => $review['global_rate'],
     373                                'gs_locationUuid' => $review['locationUuid'],
    373374                                'gs_establishments_id' => $review['establishment_id'],
    374375                                'gs_establishments_name' => $review['establishment_name'],
     
    746747}
    747748add_action('admin_head', 'guestsuite_edit_cpt_override_columns');
     749
     750
     751function call_gs_wire_api($endpoint) {
     752
     753    $config = guestsuite_get_config();
     754    $gs_URL_parameters = http_build_query(array_merge(
     755            array(
     756                    'access_token' => get_option('guestsuite_api_key')
     757            ),
     758            $config['api_endpoint_default_params']
     759    ));
     760    $gs_URL = $config['api_url'] . $config['api_endpoint_' . $endpoint] . "?" . $gs_URL_parameters;
     761    $wp_version = get_bloginfo('version');
     762    $sslverify = true;
     763    // If the WordPress version is less than 5.0, disable SSL verification
     764    if (version_compare($wp_version, '5.0', '<')) {
     765        $sslverify = false;
     766    }
     767    guestsuite_gslog('WP', $wp_version);
     768    guestsuite_gslog('SSL verify', $sslverify);
     769    $response = wp_remote_get($gs_URL, array('sslverify' => $sslverify, 'timeout' => 30));
     770    $status_code = wp_remote_retrieve_response_code($response);
     771    guestsuite_gslog('HTTP response code', $status_code);
     772
     773    return $response;
     774}
  • guestapp/tags/2.2.5/includes/admin/tabs/generator/generator-badge.php

    r3202888 r3369496  
    1111                            <option value="all"><?php esc_html_e('Tous mes établissements', 'guestapp') ?></option>
    1212                            <?php
    13                             $establishments = guestsuite_get_unique_establishments();
     13                            $establishments = guestsuite_get_establishments();
    1414                            $is_first = true;
    1515                            foreach ($establishments as $establishment_id => $establishment_name) {
  • guestapp/tags/2.2.5/includes/admin/tabs/generator/generator-carousel.php

    r3235290 r3369496  
    1111                            <option value="all" selected><?php esc_html_e('Tous mes établissements', 'guestapp') ?></option>
    1212                            <?php
    13                             $establishments = guestsuite_get_unique_establishments();
     13                            $establishments = guestsuite_get_establishments();
    1414                            $is_first = true;
    1515                            foreach ($establishments as $establishment_id => $establishment_name) {
  • guestapp/tags/2.2.5/includes/admin/tabs/generator/generator-grid.php

    r3235290 r3369496  
    1111                            <option value="all"><?php esc_html_e('Tous mes établissements', 'guestapp') ?></option>
    1212                            <?php
    13                             $establishments = guestsuite_get_unique_establishments();
     13                            $establishments = guestsuite_get_establishments();
    1414                            $is_first = true;
    1515                            foreach ($establishments as $establishment_id => $establishment_name) {
  • guestapp/tags/2.2.5/includes/admin/tabs/generator/generator-list.php

    r3235290 r3369496  
    1111                            <option value="all"><?php esc_html_e('Tous mes établissements', 'guestapp') ?></option>
    1212                            <?php
    13                             $establishments = guestsuite_get_unique_establishments();
     13                            $establishments = guestsuite_get_establishments();
    1414                            $is_first = true;
    1515                            foreach ($establishments as $establishment_id => $establishment_name) {
  • guestapp/trunk/README.txt

    r3364049 r3369496  
    44Tested up to: 6.8.0
    55Requires PHP: 5.6
    6 Stable tag: 2.2.4
     6Stable tag: 2.2.5
    77License: GPLv2 or later
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    6060
    6161== Changelog ==
     62= 2.2.5 =
     63* Corrige la liste des établissements disponibles (admin)
    6264= 2.2.4 =
    6365* Retire la notion de version de l'API (admin)
  • guestapp/trunk/config_v4.php

    r3198976 r3369496  
    33    'api_url' => getenv('GS_WIRE_API') ? getenv('GS_WIRE_API') : 'https://widget.guest-suite.com/api/v1/',
    44    'api_endpoint_reviews' => 'reviews.json',
     5    'api_endpoint_locations' => 'locations.json',
    56    'gs_url_backoffice' => getenv('GS_APP_URL') ? getenv('GS_APP_URL') : 'https://my.guest-suite.com/login',
    67    'report_url' => getenv('GS_REPORT_URL') ? getenv('GS_REPORT_URL') : 'https://widget.guest-suite.com/reviews/',
  • guestapp/trunk/guest-suite.php

    r3364049 r3369496  
    44 * Plugin URI:        https://www.guest-suite.com/
    55 * Description:       Afficher la satisfaction de vos clients sur votre site avec le plugin Guest Suite pour Wordpress.
    6  * Version:           2.2.4
     6 * Version:           2.2.5
    77 * Requires at least: 4.6.1
    88 * Requires PHP:      5.6
  • guestapp/trunk/includes/admin/charts/charts-functions.php

    r3364049 r3369496  
    119119 * Retrieves all available establishments.
    120120 *
     121 * This function attempts to fetch establishments from the GuestSuite API first. If the API call fails,
     122 * it falls back to querying establishments from local WordPress posts. The results are cached for 1 hour
     123 * to reduce API calls.
     124 *
     125 * @return array An associative array of establishments with establishment IDs as keys and names as values.
     126 *               The array is sorted alphabetically by establishment name.
     127 *
     128 * The function performs the following steps:
     129 * 1. Checks cache for existing establishment data
     130 * 2. If not cached, calls GuestSuite API to fetch establishments
     131 * 3. If API call fails, falls back to querying local WordPress posts
     132 * 4. Normalizes data into array of establishment IDs and names
     133 * 5. Sorts establishments alphabetically by name
     134 * 6. Caches results for 1 hour
     135 */
     136function guestsuite_get_establishments()
     137{
     138    // Cache results for 1 hour to reduce API calls
     139    $cache_key = 'gs_establishments_cache_v1';
     140    $cached = get_transient($cache_key);
     141    if ($cached !== false) {
     142        return $cached;
     143    }
     144
     145    // Call the API endpoint defined in config_v4.php as api_endpoint_locations
     146    $response = call_gs_wire_api('locations');
     147
     148    // If HTTP error or WP error, fall back to CPT-derived establishments
     149    if (is_wp_error($response)) {
     150        return guestsuite_get_establishments_from_posts();
     151    }
     152
     153    $status_code = wp_remote_retrieve_response_code($response);
     154    if ($status_code !== 200) {
     155        return guestsuite_get_establishments_from_posts();
     156    }
     157
     158    $body = wp_remote_retrieve_body($response);
     159    $data = json_decode($body, true);
     160
     161    if (!is_array($data)) {
     162        return guestsuite_get_establishments_from_posts();
     163    }
     164
     165    // Normalize into an array of [ 'id' => string|int, 'name' => string ]
     166    $establishments = [];
     167
     168    // Adjust these keys to match the real API response
     169    // Examples of common shapes:
     170    // - [ { "id": 123, "name": "Hotel ABC" }, ... ]
     171    // - [ { "uuid": "...", "label": "Hotel ABC" }, ... ]
     172    foreach ($data as $record) {
     173        $id = isset($record['establishment_id']) ? $record['establishment_id'] : (isset($record['locationUuid']) ? $record['locationUuid'] : null);
     174        $name = isset($record['establishment_name']) ? $record['establishment_name'] : null;
     175
     176        if ($id === null || empty($name)) {
     177            continue;
     178        }
     179
     180        // Ensure uniqueness by ID
     181        $establishments[(string)$id] = (string)$name;
     182    }
     183
     184    // Sort alphabetically by name
     185    uasort($establishments, function ($a, $b) {
     186        return strcasecmp($a, $b);
     187    });
     188
     189    // Convert to a simple array for consumers. If your UI expects only names, you can map to names here.
     190    // Returning as key=>value pairs is often more useful, so keep the ID if you plan to filter by it.
     191    set_transient($cache_key, $establishments, HOUR_IN_SECONDS);
     192    return $establishments;
     193}
     194
     195/**
     196 * Retrieves all available establishments.
     197 *
    121198 * This function queries the database for all posts of the custom post type defined by GUESTSUITE_CPT_NAME.
    122199 * It collects the names of the establishments from the post meta and returns a list of unique establishment names.
    123200 *
    124  * @return array An array of unique establishment names.
     201 * @return array An associative array of unique establishment names.
    125202 *
    126203 * The function performs the following steps:
     
    131208 * 5. Resets the post data after the loop.
    132209 */
    133 function guestsuite_get_establishments()
     210function guestsuite_get_establishments_from_posts()
    134211{
    135212    $args = array(
    136         'post_type' => GUESTSUITE_CPT_NAME,
    137         'posts_per_page' => -1,
    138         'fields' => 'ids'
     213            'post_type' => GUESTSUITE_CPT_NAME,
     214            'posts_per_page' => -1,
     215            'fields' => 'ids'
    139216    );
    140217    $query = new WP_Query($args);
    141218    $establishments = [];
    142219    if ($query->have_posts()) {
     220        $count = 0;
    143221        while ($query->have_posts()) {
    144222            $query->the_post();
     223            $establishment_id = get_post_meta(get_the_ID(), 'gs_establishments_id', true) ?: get_post_meta(get_the_ID(), 'gs_locationUuid', true);
    145224            $establishment_name = get_post_meta(get_the_ID(), 'gs_establishments_name', true);
    146225            if (!empty($establishment_name) && !in_array($establishment_name, $establishments)) {
    147                 $establishments[] = $establishment_name;
     226                $count++;
     227                $establishments[$establishment_id] = $establishment_name;
    148228            }
    149229        }
    150         asort($establishments);
     230
     231        uasort($establishments, function ($a, $b) {
     232            return strcasecmp($a, $b);
     233        });
    151234        wp_reset_postdata();
    152235    }
     
    291374    if ($establishment_id) {
    292375        $args['meta_query'][] = array(
    293             'key' => 'gs_establishments_id',
    294             'value' => $establishment_id,
    295             'compare' => '='
     376            'relation' => 'OR',
     377            'establishment_id' => array(
     378                    'key' => 'gs_establishments_id',
     379                    'value' => $establishment_id,
     380                    'compare' => '='
     381            ),
     382            'locationUuid' => array(
     383                    'key' => 'gs_locationUuid',
     384                    'value' => $establishment_id,
     385                    'compare' => '='
     386            ),
    296387        );
    297388    }
     
    313404    }
    314405    return $reviews;
    315 }
    316 
    317 /**
    318  * Retrieves unique establishments without duplicate entries.
    319  * establishment_ID => establishment_Name
    320  *
    321  * This function queries the database for all posts of the custom post type defined by GUESTSUITE_CPT_NAME.
    322  * It collects the establishment IDs and names from the post meta and returns an associative array of unique establishments.
    323  *
    324  * @return array An associative array of unique establishments with establishment_ID as the key and establishment_Name as the value.
    325  *
    326  * The function performs the following steps:
    327  * 1. Sets up the query arguments to fetch all posts of the custom post type.
    328  * 2. Executes the query using WP_Query.
    329  * 3. Iterates through the posts and collects the establishment IDs and names from the post meta.
    330  * 4. Ensures that only unique establishments are added to the result array.
    331  * 5. Resets the post data after the loop.
    332  */
    333 function guestsuite_get_unique_establishments()
    334 {
    335     $establishments = array();
    336     $args = array(
    337         'post_type' => GUESTSUITE_CPT_NAME,
    338         'posts_per_page' => -1,
    339         'post_status' => 'publish',
    340         'meta_key' => 'gs_establishments_id',
    341         'fields' => 'ids',
    342     );
    343     $query = new WP_Query($args);
    344     if ($query->have_posts()) {
    345         while ($query->have_posts()) {
    346             $query->the_post();
    347             $establishment_id = get_post_meta(get_the_ID(), 'gs_establishments_id', true);
    348             $establishment_name = get_post_meta(get_the_ID(), 'gs_establishments_name', true);
    349             if (!array_key_exists($establishment_id, $establishments)) {
    350                 $establishments[$establishment_id] = $establishment_name;
    351             }
    352         }
    353     }
    354     asort($establishments);
    355     wp_reset_postdata();
    356     return $establishments;
    357406}
    358407
  • guestapp/trunk/includes/admin/functions.php

    r3364049 r3369496  
    371371                                'gs_publication_date' => $review['publication_date'],
    372372                                'gs_global_rate' => $review['global_rate'],
     373                                'gs_locationUuid' => $review['locationUuid'],
    373374                                'gs_establishments_id' => $review['establishment_id'],
    374375                                'gs_establishments_name' => $review['establishment_name'],
     
    746747}
    747748add_action('admin_head', 'guestsuite_edit_cpt_override_columns');
     749
     750
     751function call_gs_wire_api($endpoint) {
     752
     753    $config = guestsuite_get_config();
     754    $gs_URL_parameters = http_build_query(array_merge(
     755            array(
     756                    'access_token' => get_option('guestsuite_api_key')
     757            ),
     758            $config['api_endpoint_default_params']
     759    ));
     760    $gs_URL = $config['api_url'] . $config['api_endpoint_' . $endpoint] . "?" . $gs_URL_parameters;
     761    $wp_version = get_bloginfo('version');
     762    $sslverify = true;
     763    // If the WordPress version is less than 5.0, disable SSL verification
     764    if (version_compare($wp_version, '5.0', '<')) {
     765        $sslverify = false;
     766    }
     767    guestsuite_gslog('WP', $wp_version);
     768    guestsuite_gslog('SSL verify', $sslverify);
     769    $response = wp_remote_get($gs_URL, array('sslverify' => $sslverify, 'timeout' => 30));
     770    $status_code = wp_remote_retrieve_response_code($response);
     771    guestsuite_gslog('HTTP response code', $status_code);
     772
     773    return $response;
     774}
  • guestapp/trunk/includes/admin/tabs/generator/generator-badge.php

    r3202888 r3369496  
    1111                            <option value="all"><?php esc_html_e('Tous mes établissements', 'guestapp') ?></option>
    1212                            <?php
    13                             $establishments = guestsuite_get_unique_establishments();
     13                            $establishments = guestsuite_get_establishments();
    1414                            $is_first = true;
    1515                            foreach ($establishments as $establishment_id => $establishment_name) {
  • guestapp/trunk/includes/admin/tabs/generator/generator-carousel.php

    r3235290 r3369496  
    1111                            <option value="all" selected><?php esc_html_e('Tous mes établissements', 'guestapp') ?></option>
    1212                            <?php
    13                             $establishments = guestsuite_get_unique_establishments();
     13                            $establishments = guestsuite_get_establishments();
    1414                            $is_first = true;
    1515                            foreach ($establishments as $establishment_id => $establishment_name) {
  • guestapp/trunk/includes/admin/tabs/generator/generator-grid.php

    r3235290 r3369496  
    1111                            <option value="all"><?php esc_html_e('Tous mes établissements', 'guestapp') ?></option>
    1212                            <?php
    13                             $establishments = guestsuite_get_unique_establishments();
     13                            $establishments = guestsuite_get_establishments();
    1414                            $is_first = true;
    1515                            foreach ($establishments as $establishment_id => $establishment_name) {
  • guestapp/trunk/includes/admin/tabs/generator/generator-list.php

    r3235290 r3369496  
    1111                            <option value="all"><?php esc_html_e('Tous mes établissements', 'guestapp') ?></option>
    1212                            <?php
    13                             $establishments = guestsuite_get_unique_establishments();
     13                            $establishments = guestsuite_get_establishments();
    1414                            $is_first = true;
    1515                            foreach ($establishments as $establishment_id => $establishment_name) {
Note: See TracChangeset for help on using the changeset viewer.