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();
}