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:
<?php
namespace WPGMZA;
class Category
{
public static function doesMarkersHasCategoriesTableExist()
{
global $wpdb;
global $WPGMZA_TABLE_NAME_MARKERS_HAS_CATEGORIES;
$stmt = $wpdb->prepare("SHOW TABLES LIKE %s", array($WPGMZA_TABLE_NAME_MARKERS_HAS_CATEGORIES));
$table = $wpdb->get_var($stmt);
return ($table ? true : false);
}
public static function installMarkerHasCategoriesTable()
{
global $wpdb;
global $WPGMZA_TABLE_NAME_MARKERS_HAS_CATEGORIES;
if(Category::doesMarkersHasCategoriesTableExist())
return;
$wpdb->query("CREATE TABLE `$WPGMZA_TABLE_NAME_MARKERS_HAS_CATEGORIES` (
marker_id int(11) NOT NULL,
category_id int(11) NOT NULL,
PRIMARY KEY (marker_id, category_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
");
}
public static function rebuildTableFromLegacyField($options=null)
{
global $wpdb;
global $wpgmza_tblname;
global $WPGMZA_TABLE_NAME_CATEGORIES;
global $WPGMZA_TABLE_NAME_MARKERS_HAS_CATEGORIES;
Category::installMarkerHasCategoriesTable();
if(!$options)
$options = array();
$map_id = null;
$marker_id = null;
if(!empty($options['map']))
$map_id = $options['map']->id;
if(!empty($options['marker']))
$marker_id = $options['marker']->id;
if(!empty($options['marker_id']))
$marker_id = $options['marker_id'];
if($map_id)
$where = " WHERE marker_id IN (SELECT id FROM $wpgmza_tblname WHERE map_id=" . (int)$map_id . ")";
else if($marker_id)
$where = " WHERE marker_id=" . (int)$marker_id;
else
$where = "";
$qstr = "DELETE FROM $WPGMZA_TABLE_NAME_MARKERS_HAS_CATEGORIES $where";
$wpdb->query($qstr);
if($map_id)
$where = " WHERE map_id=" . (int)$map_id;
else if($marker_id)
$where = " WHERE id=" . (int)$marker_id;
$qstr = "SELECT id, category FROM $wpgmza_tblname $where";
$markers = $wpdb->get_results($qstr);
foreach($markers as $marker)
{
if(empty($marker->category))
continue;
$categories = explode(',', $marker->category);
foreach($categories as $category_id)
{
if(array_search($category_id, $categories) === false)
continue;
$qstr = "INSERT INTO $WPGMZA_TABLE_NAME_MARKERS_HAS_CATEGORIES (marker_id, category_id) VALUES (%d, %d)";
$stmt = $wpdb->prepare($qstr, array($marker->id, $category_id));
$wpdb->query($stmt);
}
}
}
}
add_action('init', function() {
if(!Category::doesMarkersHasCategoriesTableExist())
Category::rebuildTableFromLegacyField();
}, 100);
add_action('wpgmza_marker_saved', function($marker) {
Category::rebuildTableFromLegacyField(array(
'marker' => $marker
));
});
add_action('wpgmza_marker_deleted', function($marker_id) {
Category::rebuildTableFromLegacyField(array(
'marker_id' => $marker_id
));
});
add_action('wpgmza_categories_saved', array('WPGMZA\\Category', 'rebuildTableFromLegacyField'));
add_action('wpgmza_category_deleted', array('WPGMZA\\Category', 'rebuildTableFromLegacyField'));
add_action('wpgmza_import_complete', array('WPGMZA\\Category', 'rebuildTableFromLegacyField'));