Overview

Namespaces

  • None
  • WPGMZA
    • CustomFieldFilterWidget
    • Integration
    • MarkerListing
    • Selector

Classes

  • WPGMapsImportExport
  • WPGMZA\AddMapDialog
  • WPGMZA\AdminMarkerDataTable
  • WPGMZA\AjaxTable
  • WPGMZA\AutoLoader
  • WPGMZA\Categories
  • WPGMZA\Category
  • WPGMZA\CategoryTree
  • WPGMZA\CategoryTreeNode
  • WPGMZA\ContentEditorMapButton
  • WPGMZA\Crud
  • WPGMZA\CustomFieldFilter
  • WPGMZA\CustomFieldFilterController
  • WPGMZA\CustomFieldFilterWidget
  • WPGMZA\CustomFieldFilterWidget\Checkboxes
  • WPGMZA\CustomFieldFilterWidget\Dropdown
  • WPGMZA\CustomFieldFilterWidget\Text
  • WPGMZA\CustomFields
  • WPGMZA\CustomFieldsPage
  • WPGMZA\CustomMapObjectFields
  • WPGMZA\CustomMarkerFields
  • WPGMZA\Database
  • WPGMZA\DataTable
  • WPGMZA\Distance
  • WPGMZA\DOMDocument
  • WPGMZA\DOMElement
  • WPGMZA\Export
  • WPGMZA\Factory
  • WPGMZA\FontAwesomeIconPicker
  • WPGMZA\GDPRCompliance
  • WPGMZA\GlobalSettings
  • WPGMZA\GoogleGeocoder
  • WPGMZA\GoogleMap
  • WPGMZA\GoogleMapsAPILoader
  • WPGMZA\GoogleMapsLoader
  • WPGMZA\GoogleProMapsLoader
  • WPGMZA\Import
  • WPGMZA\ImportCSV
  • WPGMZA\ImportGPX
  • WPGMZA\ImportJSON
  • WPGMZA\ImportKML
  • WPGMZA\Integration\Gutenberg
  • WPGMZA\Integration\ProGutenberg
  • WPGMZA\Integration\WPMigrateDB
  • WPGMZA\LatLng
  • WPGMZA\Map
  • WPGMZA\MapSelect
  • WPGMZA\MapsEngineDialog
  • WPGMZA\Marker
  • WPGMZA\MarkerDataTable
  • WPGMZA\MarkerFilter
  • WPGMZA\MarkerLibraryDialog
  • WPGMZA\MarkerListing
  • WPGMZA\MarkerListing\AdvancedTable
  • WPGMZA\MarkerListing\BasicList
  • WPGMZA\MarkerListing\BasicTable
  • WPGMZA\MarkerListing\Carousel
  • WPGMZA\MarkerListing\Modern
  • WPGMZA\ModalDialog
  • WPGMZA\NominatimGeocodeCache
  • WPGMZA\OLLoader
  • WPGMZA\OLProLoader
  • WPGMZA\Plugin
  • WPGMZA\ProAdminMarkerDataTable
  • WPGMZA\ProMap
  • WPGMZA\ProMarker
  • WPGMZA\ProMarkerFilter
  • WPGMZA\ProPlugin
  • WPGMZA\ProRestAPI
  • WPGMZA\Query
  • WPGMZA\QueryFragment
  • WPGMZA\RestAPI
  • WPGMZA\ScriptLoader
  • WPGMZA\Selector\AttributeSelector
  • WPGMZA\Selector\Parser
  • WPGMZA\Selector\PseudoSelector
  • WPGMZA\Selector\Selector
  • WPGMZA\Selector\Token
  • WPGMZA\Selector\Tokenizer
  • WPGMZA\Selector\TokenStream
  • WPGMZA\Selector\XPathConverter
  • WPGMZA\Strings
  • WPGMZA\Table

Exceptions

  • WPGMZA\Selector\ConvertException
  • WPGMZA\Selector\ParseException

Functions

  • old_wpgmaps_list_categories
  • old_wpgmza_pro_return_category_select_list
  • wpgmaps_admin_add_poly_javascript
  • wpgmaps_admin_add_polyline_javascript
  • wpgmaps_admin_category_scripts
  • wpgmaps_admin_category_styles
  • wpgmaps_admin_edit_poly_javascript
  • wpgmaps_admin_edit_polyline_javascript
  • wpgmaps_admin_wizard_scripts
  • wpgmaps_category_head
  • wpgmaps_list_categories
  • wpgmaps_menu_category_layout
  • wpgmaps_trash_cat
  • wpgmaps_wizard_layout
  • WPGMZA\add_custom_filter_widgets
  • WPGMZA\create_marker_instance_delegate
  • WPGMZA\custom_field_filter_get_filtered_marker_ids
  • WPGMZA\get_custom_field_filter
  • WPGMZA\get_custom_field_filter_controller
  • WPGMZA\get_custom_field_filter_widget
  • WPGMZA\get_marker_custom_fields
  • WPGMZA\import_ajax_delete_schedule
  • WPGMZA\import_ajax_file_options
  • WPGMZA\import_ajax_handle_delete
  • WPGMZA\import_ajax_handle_upload
  • WPGMZA\import_ajax_import
  • WPGMZA\import_ajax_schedule
  • WPGMZA\import_cron_import
  • WPGMZA\import_cron_schedules
  • WPGMZA\import_export_admin_options
  • WPGMZA\import_export_admin_tabs
  • WPGMZA\import_export_download
  • WPGMZA\import_export_get_maps_list
  • WPGMZA\import_get_progress
  • WPGMZA\import_get_schedule
  • WPGMZA\import_mimes
  • WPGMZA\import_wp_check_filetype_and_ext
  • WPGMZA\load_advanced_menu_page_hooks
  • WPGMZA\query_nominatim_cache
  • WPGMZA\Selector\trace
  • WPGMZA\show_custom_fields_page
  • WPGMZA\store_nominatim_cache
  • wpgmza_backwards_compat_get_all_circle_data
  • wpgmza_backwards_compat_get_all_rectangle_data
  • wpgmza_build_tree
  • wpgmza_check_admin_head_backwards_compat_v6
  • wpgmza_check_cat_map
  • wpgmza_check_map_editor_backwards_compat_v6
  • wpgmza_check_pro_compat_required_v6
  • wpgmza_check_user_backwards_compat_v6
  • wpgmza_consume_tree
  • wpgmza_consume_tree_dropdown
  • wpgmza_consume_tree_main_list
  • wpgmza_get_category_localized_data
  • wpgmza_pro_add_poly
  • wpgmza_pro_add_polyline
  • wpgmza_pro_category_edit_layout
  • wpgmza_pro_category_new_layout
  • wpgmza_pro_edit_poly
  • wpgmza_pro_edit_polyline
  • wpgmza_pro_return_category_blocks
  • wpgmza_pro_return_category_checkbox_list
  • wpgmza_pro_return_category_dropdown_list
  • wpgmza_pro_return_category_select_list
  • wpgmza_pro_return_maps_linked_to_cat
  • wpgmza_return_all_categories
  • wpgmza_return_category_data
  • wpgmza_return_marker_count_by_category
  • wpgmza_return_marker_count_category_via_elements
  • wpgmza_return_poly_options
  • wpgmza_return_polygon_array
  • wpgmza_return_polygon_id_array
  • wpgmza_return_polygon_list
  • wpgmza_return_polyline_array
  • wpgmza_return_polyline_id_array
  • wpgmza_return_polyline_list
  • wpgmza_return_polyline_options
  • wpgmza_tree_marker_counter
  • wpgmza_wizard_item_control_c
  • wpgmza_wizard_item_control_gd
  • wpgmza_wizard_item_control_ml
  • wpgmza_wizard_item_control_sl
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 
<?php

namespace WPGMZA;

require_once(__DIR__ . '/class.custom-fields.php');
require_once(__DIR__ . '/class.custom-marker-fields.php');

class CustomFieldsPage
{
    public function __construct()
    {
        global $wpgmza;
        
        if(!CustomFields::installed())
            CustomFields::install();
        
        $wpgmza->loadScripts();
        
        $this->fontAwesomeIconPicker = new FontAwesomeIconPicker();
        
        wp_enqueue_script('wpgmza-custom-fields-page', plugin_dir_url(WPGMZA_PRO_FILE) . 'js/custom-fields-page.js');
    }
    
    /**
     * Called when POSTing custom field data through WP admin post hook
     * @return void
     */
    public static function POST()
    {
        global $wpdb;
        global $WPGMZA_TABLE_NAME_CUSTOM_FIELDS;
        
        $numFields = count($_POST['ids']);
        
        // Remove fields which aren't in POST from the DB
        $qstr = "DELETE FROM $WPGMZA_TABLE_NAME_CUSTOM_FIELDS";
        if($numFields > 0)
            $qstr .= " WHERE id NOT IN (" . implode(',', array_map('intval', $_POST['ids'])) . ")";
        $wpdb->query($qstr);
        
        // Iterate over fields in POST
        for($i = 0; $i < $numFields; $i++)
        {
            $id             = $_POST['ids'][$i];
            $name           = $_POST['names'][$i];
            $icon           = $_POST['icons'][$i];
            $attributes     = stripslashes($_POST['attributes'][$i]);
            $widget_type    = $_POST['widget_types'][$i];
            
            if(!json_decode($attributes))
                throw new \Exception('Invalid attribute JSON');
            
            if($id == -1 || empty($id))
            {
                $qstr = "INSERT INTO $WPGMZA_TABLE_NAME_CUSTOM_FIELDS (name, icon, attributes, widget_type) VALUES (%s, %s, %s, %s)";
                $params = array($name, $icon, $attributes, $widget_type);
            }
            else
            {
                $qstr = "UPDATE $WPGMZA_TABLE_NAME_CUSTOM_FIELDS SET name=%s, icon=%s, attributes=%s, widget_type=%s WHERE id=%s";
                $params = array($name, $icon, $attributes, $widget_type, $id);
            }
            
            $stmt = $wpdb->prepare($qstr, $params);
            $wpdb->query($stmt);
        }
        
        wp_redirect( admin_url('admin.php') . '?page=wp-google-maps-menu-custom-fields' );
        exit;
    }
    
    /**
     * Echos attribute table HTML for the given field
     * @return void
     */
    protected function attributeTableHTML($field)
    {
        $attributes = json_decode($field->attributes);
        
        ?>
        <input name="attributes[]" type="hidden"/>
        <table class="attributes">
            <tbody>
                <?php
                foreach($attributes as $key => $value)
                {
                ?>
                    <tr>
                        <td>
                            <input
                                placeholder="<?php _e('Name', 'wp-google-maps'); ?>"
                                class="attribute-name"
                                value="<?php echo $key; ?>"
                                />
                        </td>
                        <td>
                            <input 
                                placeholder="<?php _e('Value', 'wp-google-maps'); ?>"
                                class="attribute-value"
                                value="<?php echo $value; ?>"
                                />
                        </td>
                    </tr>
                <?php
                }
                ?>
            </tbody>
        </table>
        <?php
    }
    
    /**
     * Echos the custom field page table
     * @return void
     */
    protected function tableBodyHTML()
    {
        global $wpdb;
        global $WPGMZA_TABLE_NAME_CUSTOM_FIELDS;
        
        $fields = $wpdb->get_results("SELECT * FROM $WPGMZA_TABLE_NAME_CUSTOM_FIELDS");
        
        foreach($fields as $obj)
        {
            ?>
            <tr>
                <td>
                    <input name="ids[]" value="<?php echo $obj->id; ?>"/>
                </td>
                <td>
                    <input name="names[]" value="<?php echo addslashes($obj->name); ?>"/>
                </td>
                <td>
                    <input class="wpgmza-fontawesome-iconpicker" name="icons[]" value="<?php echo $obj->icon; ?>"/>
                </td>
                <td>
                    <?php
                    
                    $this->attributeTableHTML($obj);
                    
                    ?>
                </td>
                <td>
                    <?php
                    $options = array(
                        'none'          => 'None',
                        'text'          => 'Text',
                        'dropdown'      => 'Dropdown',
                        'checkboxes'    => 'Checkboxes'
                    );
                    ?>
                
                    <select name="widget_types[]">
                        <?php
                        foreach($options as $value => $text)
                        {
                            ?>
                            <option value="<?php echo $value; ?>"
                            <?php
                            if($obj->widget_type == $value)
                                echo ' selected="selected"';
                            ?>
                                >
                                <?php echo __($text, 'wp-google-maps'); ?>
                            </option>
                            <?php
                        }
                        
                        // Use this filter to add options to the dropdown
                        $custom_options = apply_filters('wpgmza_custom_fields_widget_type_options', $obj);
                        
                        if(is_string($custom_options))
                            echo $custom_options;
                        
                        ?>
                    </select>
                </td>
                <td>
                    <button type='button' class='button wpgmza-delete-custom-field'><i class='fa fa-trash-o' aria-hidden='true'></i></button>
                </td>
            </tr>
            <?php
        }
    }
    
    /**
     * Echos the custom fields page
     * @return void
     */
    public function html()
    {
        ?>
        
        <form id="wpgmza-custom-fields" 
            action="<?php echo admin_url('admin-post.php'); ?>" 
            method="POST">
            
            <input name="action" value="wpgmza_save_custom_fields" type="hidden"/>
            
            <h1>
                <?php
                _e('WP Google Maps - Custom Fields', 'wp-google-maps');
                ?>
            </h1>
            
            <table class="wp-list-table widefat fixed striped pages">
                <thead>
                    <tr>
                        <th scope="col" id="id" class ="manage-column column-id">
                            <?php
                            _e('ID', 'wp-google-maps');
                            ?>
                        </th>
                        <th scope="col" id="id" class ="manage-column column-id">
                            <?php
                            _e('Name', 'wp-google-maps');
                            ?>
                        </th>
                        <th>
                            <?php
                            _e('Icon', 'wp-google-maps');
                            ?>
                        </th>
                        <th>
                            <?php
                            _e('Attributes', 'wp-google-maps');
                            ?>
                        </th>
                        <th>
                            <?php
                            _e('Filter Type', 'wp-google-maps');
                            ?>
                        </th>
                        <th>
                            <?php
                            _e('Actions', 'wp-google-maps');
                            ?>
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <?php
                    $this->tableBodyHTML();
                    ?>
                    
                    <tr id="wpgmza-new-custom-field">
                        <td>
                            <input 
                                name="ids[]"
                                value="-1"
                                readonly
                                />
                        </td>
                        <td>
                            <input
                                required
                                name="names[]"
                                />
                        </td>
                        <td>
                            <input name="icons[]" class="wpgmza-fontawesome-iconpicker"/>
                        </td>
                        <td>
                            <input name="attributes[]" type="hidden"/>
                            <table class="attributes">
                                <tbody>
                                    <tr>
                                        <td>
                                            <input
                                                placeholder="<?php _e('Name', 'wp-google-maps'); ?>"
                                                class="attribute-name"
                                                />
                                        </td>
                                        <td>
                                            <input 
                                                placeholder="<?php _e('Value', 'wp-google-maps'); ?>"
                                                class="attribute-value"
                                                />
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                        </td>
                        <td>
                            <select name="widget_types[]">
                                <option value="none">
                                    <?php
                                    _e('None', 'wp-google-maps');
                                    ?>
                                </option>
                                <option value="text">
                                    <?php
                                    _e('Text', 'wp-google-maps');
                                    ?>
                                </option>
                                <option value="dropdown">
                                    <?php
                                    _e('Dropdown', 'wp-google-maps');
                                    ?>
                                </option>
                                <option value="checkboxes">
                                    <?php
                                    _e('Checkboxes', 'wp-google-maps');
                                    ?>
                                </option>
                                <?php
                                // Use this filter to add options to the dropdown
                                echo apply_filters('wpgmza_custom_fields_widget_type_options', '');
                                ?>
                            </select>
                        </td>
                        <td>
                            <button type="submit" class="button button-primary wpgmza-add-custom-field">
                                <?php
                                _e('Add', 'wp-google-maps');
                                ?>
                            </button>
                        </td>
                    </tr>
                </tbody>
            </table>
            
            <p style="text-align: center;">
                <input 
                    type="submit" 
                    class="button button-primary" 
                    value="<?php _e('Save', 'wp-google-maps'); ?>"
                    />
            </p>
        </form>
        
        <?php
    }
}

// Bind post listener
add_action('admin_post_wpgmza_save_custom_fields', array('WPGMZA\\CustomFieldsPage', 'POST'));

// Display function for menu hook
function show_custom_fields_page()
{
    $page = new CustomFieldsPage();
    $page->html();
}

API documentation generated by ApiGen