Changeset 3370713
- Timestamp:
- 09/30/2025 09:16:17 PM (5 months ago)
- Location:
- locatoraid/trunk
- Files:
-
- 12 edited
-
happ2/hsystem/database/query_builder.php (modified) (94 diffs)
-
happ2/hsystem/factory.php (modified) (3 diffs)
-
happ2/modules/acl/roles.php (modified) (3 diffs)
-
happ2/modules/auth.wordpress/_config_route.php (modified) (1 diff)
-
locatoraid.php (modified) (2 diffs)
-
modules/addon.conf/_config_after.php (modified) (1 diff)
-
modules/app.conf/_config_after.php (modified) (1 diff)
-
modules/app/_config_route.php (modified) (1 diff)
-
modules/coordinates/view.php (modified) (1 diff)
-
modules/directions.front/_config_after.php (modified) (3 diffs)
-
modules/directions.locations/_config_after.php (modified) (5 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
locatoraid/trunk/happ2/hsystem/database/query_builder.php
r1925696 r3370713 52 52 53 53 class HC_Database_Query_Builder { 54 /**55 * Table prefix56 *57 * @var string58 */59 54 public $dbprefix = ''; 60 61 /**62 * Character set63 *64 * @var string65 */66 55 public $char_set = 'utf8'; 67 68 /**69 * Swap Prefix70 *71 * @var string72 */73 56 public $swap_pre = ''; 74 75 /**76 * Debug flag77 *78 * Whether to display error messages.79 *80 * @var bool81 */82 57 public $db_debug = FALSE; 83 58 public $db_debug_level = 'low'; 84 85 /**86 * Benchmark time87 *88 * @var int89 */90 59 public $benchmark = 0; 91 92 /**93 * Bind marker94 *95 * Character used to identify values in a prepared statement.96 *97 * @var string98 */99 60 public $bind_marker = '?'; 100 101 /**102 * Save queries flag103 *104 * Whether to keep an in-memory history of queries for debugging purposes.105 *106 * @var bool107 */108 61 public $save_queries = TRUE; 109 110 /**111 * Queries list112 *113 * @see CI_DB_driver::$save_queries114 * @var string[]115 */116 62 public $queries = array(); 117 118 /**119 * Query times120 *121 * A list of times that queries took to execute.122 *123 * @var array124 */125 63 public $query_times = array(); 126 127 /**128 * Transaction enabled flag129 *130 * @var bool131 */132 64 public $trans_enabled = TRUE; 133 134 /**135 * Strict transaction mode flag136 *137 * @var bool138 */139 65 public $trans_strict = TRUE; 140 141 /**142 * Transaction depth level143 *144 * @var int145 */146 66 protected $_trans_depth = 0; 147 148 /**149 * Transaction status flag150 *151 * Used with transactions to determine if a rollback should occur.152 *153 * @var bool154 */155 67 protected $_trans_status = TRUE; 156 157 /**158 * Transaction failure flag159 *160 * Used with transactions to determine if a transaction has failed.161 *162 * @var bool163 */164 68 protected $_trans_failure = FALSE; 165 166 /**167 * Cache On flag168 *169 * @var bool170 */171 69 public $cache_on = FALSE; 172 173 /**174 * Cache directory path175 *176 * @var bool177 */178 70 public $cachedir = ''; 179 180 /**181 * Cache auto-delete flag182 *183 * @var bool184 */185 71 public $cache_autodel = FALSE; 186 187 /**188 * DB Cache object189 *190 * @see CI_DB_cache191 * @var object192 */193 72 public $CACHE; 194 195 /**196 * Protect identifiers flag197 *198 * @var bool199 */200 73 protected $_protect_identifiers = TRUE; 201 202 /**203 * List of reserved identifiers204 *205 * Identifiers that must NOT be escaped.206 *207 * @var string[]208 */209 74 protected $_reserved_identifiers = array('*'); 210 211 /**212 * Identifier escape character213 *214 * @var string215 */216 // protected $_escape_char = '"';217 75 protected $_escape_char = '`'; 218 219 /**220 * ESCAPE statement string221 *222 * @var string223 */224 76 protected $_like_escape_str = " ESCAPE '%s' "; 225 226 /**227 * ESCAPE character228 *229 * @var string230 */231 77 protected $_like_escape_chr = '!'; 232 233 /**234 * ORDER BY random keyword235 *236 * @var array237 */238 78 protected $_random_keyword = array('RAND()', 'RAND(%d)'); 239 240 /**241 * COUNT string242 *243 * @used-by CI_DB_driver::count_all()244 * @used-by CI_DB_query_builder::count_all_results()245 *246 * @var string247 */248 79 protected $_count_string = 'SELECT COUNT(*) AS '; 249 250 /**251 * Return DELETE SQL flag252 *253 * @var bool254 */255 80 protected $return_delete_sql = FALSE; 256 257 /**258 * Reset DELETE data flag259 *260 * @var bool261 */262 81 protected $reset_delete_data = FALSE; 263 264 /**265 * QB SELECT data266 *267 * @var array268 */269 82 protected $qb_select = array(); 270 271 /**272 * QB DISTINCT flag273 *274 * @var bool275 */276 83 protected $qb_distinct = FALSE; 277 278 /**279 * QB FROM data280 *281 * @var array282 */283 84 protected $qb_from = array(); 284 285 /**286 * QB JOIN data287 *288 * @var array289 */290 85 protected $qb_join = array(); 291 86 protected $qb_join_tables = array(); 292 293 /**294 * QB WHERE data295 *296 * @var array297 */298 87 protected $qb_where = array(); 299 300 /**301 * QB GROUP BY data302 *303 * @var array304 */305 88 protected $qb_groupby = array(); 306 307 /**308 * QB HAVING data309 *310 * @var array311 */312 89 protected $qb_having = array(); 313 314 /**315 * QB keys316 *317 * @var array318 */319 90 protected $qb_keys = array(); 320 321 /**322 * QB LIMIT data323 *324 * @var int325 */326 91 protected $qb_limit = FALSE; 327 328 /**329 * QB OFFSET data330 *331 * @var int332 */333 92 protected $qb_offset = FALSE; 334 335 /**336 * QB ORDER BY data337 *338 * @var array339 */340 93 protected $qb_orderby = array(); 341 342 /**343 * QB data sets344 *345 * @var array346 */347 94 protected $qb_set = array(); 348 349 /**350 * QB aliased tables list351 *352 * @var array353 */354 95 protected $qb_aliased_tables = array(); 355 356 /**357 * QB WHERE group started flag358 *359 * @var bool360 */361 96 protected $qb_where_group_started = FALSE; 362 363 /**364 * QB WHERE group count365 *366 * @var int367 */368 97 protected $qb_where_group_count = 0; 369 370 // Query Builder Caching variables371 372 /**373 * QB Caching flag374 *375 * @var bool376 */377 98 protected $qb_caching = FALSE; 378 379 /**380 * QB Cache exists list381 *382 * @var array383 */384 99 protected $qb_cache_exists = array(); 385 386 /**387 * QB Cache SELECT data388 *389 * @var array390 */391 100 protected $qb_cache_select = array(); 392 393 /**394 * QB Cache FROM data395 *396 * @var array397 */398 101 protected $qb_cache_from = array(); 399 400 /**401 * QB Cache JOIN data402 *403 * @var array404 */405 102 protected $qb_cache_join = array(); 406 407 /**408 * QB Cache WHERE data409 *410 * @var array411 */412 103 protected $qb_cache_where = array(); 413 414 /**415 * QB Cache GROUP BY data416 *417 * @var array418 */419 104 protected $qb_cache_groupby = array(); 420 421 /**422 * QB Cache HAVING data423 *424 * @var array425 */426 105 protected $qb_cache_having = array(); 427 428 /**429 * QB Cache ORDER BY data430 *431 * @var array432 */433 106 protected $qb_cache_orderby = array(); 434 435 /**436 * QB Cache data sets437 *438 * @var array439 */440 107 protected $qb_cache_set = array(); 441 442 /**443 * QB No Escape data444 *445 * @var array446 */447 108 protected $qb_no_escape = array(); 448 449 /**450 * QB Cache No Escape data451 *452 * @var array453 */454 109 protected $qb_cache_no_escape = array(); 455 110 456 // --------------------------------------------------------------------457 458 /**459 * Select460 *461 * Generates the SELECT portion of the query462 *463 * @param string464 * @param mixed465 * @return CI_DB_query_builder466 */467 111 public function select($select = '*', $escape = NULL) 468 112 { … … 496 140 } 497 141 498 // --------------------------------------------------------------------499 500 /**501 * Select Max502 *503 * Generates a SELECT MAX(field) portion of a query504 *505 * @param string the field506 * @param string an alias507 * @return CI_DB_query_builder508 */509 142 public function select_max($select = '', $alias = '') 510 143 { … … 512 145 } 513 146 514 // --------------------------------------------------------------------515 516 /**517 * Select Min518 *519 * Generates a SELECT MIN(field) portion of a query520 *521 * @param string the field522 * @param string an alias523 * @return CI_DB_query_builder524 */525 147 public function select_min($select = '', $alias = '') 526 148 { … … 528 150 } 529 151 530 // --------------------------------------------------------------------531 532 /**533 * Select Average534 *535 * Generates a SELECT AVG(field) portion of a query536 *537 * @param string the field538 * @param string an alias539 * @return CI_DB_query_builder540 */541 152 public function select_avg($select = '', $alias = '') 542 153 { … … 544 155 } 545 156 546 // --------------------------------------------------------------------547 548 /**549 * Select Sum550 *551 * Generates a SELECT SUM(field) portion of a query552 *553 * @param string the field554 * @param string an alias555 * @return CI_DB_query_builder556 */557 157 public function select_sum($select = '', $alias = '') 558 158 { … … 560 160 } 561 161 562 // --------------------------------------------------------------------563 564 /**565 * SELECT [MAX|MIN|AVG|SUM]()566 *567 * @used-by select_max()568 * @used-by select_min()569 * @used-by select_avg()570 * @used-by select_sum()571 *572 * @param string $select Field name573 * @param string $alias574 * @param string $type575 * @return CI_DB_query_builder576 */577 162 protected function _max_min_avg_sum($select = '', $alias = '', $type = 'MAX') 578 163 { … … 608 193 } 609 194 610 // --------------------------------------------------------------------611 612 /**613 * Determines the alias name based on the table614 *615 * @param string $item616 * @return string617 */618 195 protected function _create_alias_from_table($item) 619 196 { … … 627 204 } 628 205 629 // --------------------------------------------------------------------630 631 /**632 * DISTINCT633 *634 * Sets a flag which tells the query string compiler to add DISTINCT635 *636 * @param bool $val637 * @return CI_DB_query_builder638 */639 206 public function distinct($val = TRUE) 640 207 { … … 643 210 } 644 211 645 // --------------------------------------------------------------------646 647 /**648 * From649 *650 * Generates the FROM portion of the query651 *652 * @param mixed $from can be a string or array653 * @return CI_DB_query_builder654 */655 212 public function from($from) 656 213 { … … 694 251 } 695 252 696 // --------------------------------------------------------------------697 698 /**699 * JOIN700 *701 * Generates the JOIN portion of the query702 *703 * @param string704 * @param string the join condition705 * @param string the type of join706 * @param string whether not to try to escape identifiers707 * @return CI_DB_query_builder708 */709 253 public function join($table, $cond, $type = '', $escape = NULL) 710 254 { … … 790 334 } 791 335 792 // --------------------------------------------------------------------793 794 /**795 * WHERE796 *797 * Generates the WHERE portion of the query.798 * Separates multiple calls with 'AND'.799 *800 * @param mixed801 * @param mixed802 * @param bool803 * @return CI_DB_query_builder804 */805 336 public function where($key, $value = NULL, $escape = NULL) 806 337 { … … 808 339 } 809 340 810 // --------------------------------------------------------------------811 812 /**813 * OR WHERE814 *815 * Generates the WHERE portion of the query.816 * Separates multiple calls with 'OR'.817 *818 * @param mixed819 * @param mixed820 * @param bool821 * @return CI_DB_query_builder822 */823 341 public function or_where($key, $value = NULL, $escape = NULL) 824 342 { … … 826 344 } 827 345 828 // --------------------------------------------------------------------829 830 /**831 * WHERE, HAVING832 *833 * @used-by where()834 * @used-by or_where()835 * @used-by having()836 * @used-by or_having()837 *838 * @param string $qb_key 'qb_where' or 'qb_having'839 * @param mixed $key840 * @param mixed $value841 * @param string $type842 * @param bool $escape843 * @return CI_DB_query_builder844 */845 346 protected function _wh($qb_key, $key, $value = NULL, $type = 'AND ', $escape = NULL) 846 347 { … … 895 396 } 896 397 897 // --------------------------------------------------------------------898 899 /**900 * WHERE IN901 *902 * Generates a WHERE field IN('item', 'item') SQL query,903 * joined with 'AND' if appropriate.904 *905 * @param string $key The field to search906 * @param array $values The values searched on907 * @param bool $escape908 * @return CI_DB_query_builder909 */910 398 public function where_in($key = NULL, $values = NULL, $escape = NULL) 911 399 { … … 913 401 } 914 402 915 // --------------------------------------------------------------------916 917 /**918 * OR WHERE IN919 *920 * Generates a WHERE field IN('item', 'item') SQL query,921 * joined with 'OR' if appropriate.922 *923 * @param string $key The field to search924 * @param array $values The values searched on925 * @param bool $escape926 * @return CI_DB_query_builder927 */928 403 public function or_where_in($key = NULL, $values = NULL, $escape = NULL) 929 404 { … … 931 406 } 932 407 933 // --------------------------------------------------------------------934 935 /**936 * WHERE NOT IN937 *938 * Generates a WHERE field NOT IN('item', 'item') SQL query,939 * joined with 'AND' if appropriate.940 *941 * @param string $key The field to search942 * @param array $values The values searched on943 * @param bool $escape944 * @return CI_DB_query_builder945 */946 408 public function where_not_in($key = NULL, $values = NULL, $escape = NULL) 947 409 { … … 949 411 } 950 412 951 // --------------------------------------------------------------------952 953 /**954 * OR WHERE NOT IN955 *956 * Generates a WHERE field NOT IN('item', 'item') SQL query,957 * joined with 'OR' if appropriate.958 *959 * @param string $key The field to search960 * @param array $values The values searched on961 * @param bool $escape962 * @return CI_DB_query_builder963 */964 413 public function or_where_not_in($key = NULL, $values = NULL, $escape = NULL) 965 414 { … … 967 416 } 968 417 969 // --------------------------------------------------------------------970 971 /**972 * Internal WHERE IN973 *974 * @used-by where_in()975 * @used-by or_where_in()976 * @used-by where_not_in()977 * @used-by or_where_not_in()978 *979 * @param string $key The field to search980 * @param array $values The values searched on981 * @param bool $not If the statement would be IN or NOT IN982 * @param string $type983 * @param bool $escape984 * @return CI_DB_query_builder985 */986 418 protected function _where_in($key = NULL, $values = NULL, $not = FALSE, $type = 'AND ', $escape = NULL) 987 419 { … … 1032 464 } 1033 465 1034 // --------------------------------------------------------------------1035 1036 /**1037 * LIKE1038 *1039 * Generates a %LIKE% portion of the query.1040 * Separates multiple calls with 'AND'.1041 *1042 * @param mixed $field1043 * @param string $match1044 * @param string $side1045 * @param bool $escape1046 * @return CI_DB_query_builder1047 */1048 466 public function like($field, $match = '', $side = 'both', $escape = NULL) 1049 467 { … … 1051 469 } 1052 470 1053 // --------------------------------------------------------------------1054 1055 /**1056 * NOT LIKE1057 *1058 * Generates a NOT LIKE portion of the query.1059 * Separates multiple calls with 'AND'.1060 *1061 * @param mixed $field1062 * @param string $match1063 * @param string $side1064 * @param bool $escape1065 * @return CI_DB_query_builder1066 */1067 471 public function not_like($field, $match = '', $side = 'both', $escape = NULL) 1068 472 { … … 1070 474 } 1071 475 1072 // --------------------------------------------------------------------1073 1074 /**1075 * OR LIKE1076 *1077 * Generates a %LIKE% portion of the query.1078 * Separates multiple calls with 'OR'.1079 *1080 * @param mixed $field1081 * @param string $match1082 * @param string $side1083 * @param bool $escape1084 * @return CI_DB_query_builder1085 */1086 476 public function or_like($field, $match = '', $side = 'both', $escape = NULL) 1087 477 { … … 1089 479 } 1090 480 1091 // --------------------------------------------------------------------1092 1093 /**1094 * OR NOT LIKE1095 *1096 * Generates a NOT LIKE portion of the query.1097 * Separates multiple calls with 'OR'.1098 *1099 * @param mixed $field1100 * @param string $match1101 * @param string $side1102 * @param bool $escape1103 * @return CI_DB_query_builder1104 */1105 481 public function or_not_like($field, $match = '', $side = 'both', $escape = NULL) 1106 482 { … … 1108 484 } 1109 485 1110 // --------------------------------------------------------------------1111 1112 /**1113 * Internal LIKE1114 *1115 * @used-by like()1116 * @used-by or_like()1117 * @used-by not_like()1118 * @used-by or_not_like()1119 *1120 * @param mixed $field1121 * @param string $match1122 * @param string $type1123 * @param string $side1124 * @param string $not1125 * @param bool $escape1126 * @return CI_DB_query_builder1127 */1128 486 protected function _like($field, $match = '', $type = 'AND ', $side = 'both', $not = '', $escape = NULL) 1129 487 { … … 1181 539 } 1182 540 1183 // --------------------------------------------------------------------1184 1185 /**1186 * Starts a query group.1187 *1188 * @param string $not (Internal use only)1189 * @param string $type (Internal use only)1190 * @return CI_DB_query_builder1191 */1192 541 public function group_start($not = '', $type = 'AND ') 1193 542 { … … 1210 559 } 1211 560 1212 // --------------------------------------------------------------------1213 1214 /**1215 * Starts a query group, but ORs the group1216 *1217 * @return CI_DB_query_builder1218 */1219 561 public function or_group_start() 1220 562 { … … 1222 564 } 1223 565 1224 // --------------------------------------------------------------------1225 1226 /**1227 * Starts a query group, but NOTs the group1228 *1229 * @return CI_DB_query_builder1230 */1231 566 public function not_group_start() 1232 567 { … … 1234 569 } 1235 570 1236 // --------------------------------------------------------------------1237 1238 /**1239 * Starts a query group, but OR NOTs the group1240 *1241 * @return CI_DB_query_builder1242 */1243 571 public function or_not_group_start() 1244 572 { … … 1246 574 } 1247 575 1248 // --------------------------------------------------------------------1249 1250 /**1251 * Ends a query group1252 *1253 * @return CI_DB_query_builder1254 */1255 576 public function group_end() 1256 577 { … … 1270 591 } 1271 592 1272 // --------------------------------------------------------------------1273 1274 /**1275 * Group_get_type1276 *1277 * @used-by group_start()1278 * @used-by _like()1279 * @used-by _wh()1280 * @used-by _where_in()1281 *1282 * @param string $type1283 * @return string1284 */1285 593 protected function _group_get_type($type) 1286 594 { … … 1294 602 } 1295 603 1296 // --------------------------------------------------------------------1297 1298 /**1299 * GROUP BY1300 *1301 * @param string $by1302 * @param bool $escape1303 * @return CI_DB_query_builder1304 */1305 604 public function group_by($by, $escape = NULL) 1306 605 { … … 1334 633 } 1335 634 1336 // --------------------------------------------------------------------1337 1338 /**1339 * HAVING1340 *1341 * Separates multiple calls with 'AND'.1342 *1343 * @param string $key1344 * @param string $value1345 * @param bool $escape1346 * @return CI_DB_query_builder1347 */1348 635 public function having($key, $value = NULL, $escape = NULL) 1349 636 { … … 1351 638 } 1352 639 1353 // --------------------------------------------------------------------1354 1355 /**1356 * OR HAVING1357 *1358 * Separates multiple calls with 'OR'.1359 *1360 * @param string $key1361 * @param string $value1362 * @param bool $escape1363 * @return CI_DB_query_builder1364 */1365 640 public function or_having($key, $value = NULL, $escape = NULL) 1366 641 { … … 1368 643 } 1369 644 1370 // --------------------------------------------------------------------1371 1372 /**1373 * ORDER BY1374 *1375 * @param string $orderby1376 * @param string $direction ASC, DESC or RANDOM1377 * @param bool $escape1378 * @return CI_DB_query_builder1379 */1380 645 public function order_by($orderby, $direction = '', $escape = NULL) 1381 646 { … … 1427 692 } 1428 693 1429 // --------------------------------------------------------------------1430 1431 /**1432 * LIMIT1433 *1434 * @param int $value LIMIT value1435 * @param int $offset OFFSET value1436 * @return CI_DB_query_builder1437 */1438 694 public function limit($value, $offset = 0) 1439 695 { … … 1444 700 } 1445 701 1446 // --------------------------------------------------------------------1447 1448 /**1449 * Sets the OFFSET value1450 *1451 * @param int $offset OFFSET value1452 * @return CI_DB_query_builder1453 */1454 702 public function offset($offset) 1455 703 { … … 1458 706 } 1459 707 1460 // --------------------------------------------------------------------1461 1462 /**1463 * LIMIT string1464 *1465 * Generates a platform-specific LIMIT clause.1466 *1467 * @param string $sql SQL Query1468 * @return string1469 */1470 708 protected function _limit($sql) 1471 709 { … … 1473 711 } 1474 712 1475 // --------------------------------------------------------------------1476 1477 /**1478 * The "set" function.1479 *1480 * Allows key/value pairs to be set for inserting or updating1481 *1482 * @param mixed1483 * @param string1484 * @param bool1485 * @return CI_DB_query_builder1486 */1487 713 public function set($key, $value = '', $escape = NULL) 1488 714 { … … 1505 731 } 1506 732 1507 // --------------------------------------------------------------------1508 1509 /**1510 * Get SELECT query string1511 *1512 * Compiles a SELECT query string and returns the sql.1513 *1514 * @param string the table name to select from (optional)1515 * @param bool TRUE: resets QB values; FALSE: leave QB values alone1516 * @return string1517 */1518 733 public function get_compiled_select($table = '', $reset = TRUE) 1519 734 { … … 1534 749 } 1535 750 1536 // --------------------------------------------------------------------1537 1538 /**1539 * Insert batch statement1540 *1541 * Generates a platform-specific insert string from the supplied data.1542 *1543 * @param string $table Table name1544 * @param array $keys INSERT keys1545 * @param array $values INSERT values1546 * @return string1547 */1548 751 protected function _insert_batch($table, $keys, $values) 1549 752 { … … 1551 754 } 1552 755 1553 // --------------------------------------------------------------------1554 1555 /**1556 * The "set_insert_batch" function. Allows key/value pairs to be set for batch inserts1557 *1558 * @param mixed1559 * @param string1560 * @param bool1561 * @return CI_DB_query_builder1562 */1563 756 public function set_insert_batch($key, $value = '', $escape = NULL) 1564 757 { … … 1609 802 } 1610 803 1611 // --------------------------------------------------------------------1612 1613 /**1614 * Get INSERT query string1615 *1616 * Compiles an insert query and returns the sql1617 *1618 * @param string the table to insert into1619 * @param bool TRUE: reset QB values; FALSE: leave QB values alone1620 * @return string1621 */1622 804 public function get_compiled_insert($table = '', $reset = TRUE) 1623 805 { … … 1643 825 } 1644 826 1645 // --------------------------------------------------------------------1646 1647 /**1648 * Validate Insert1649 *1650 * This method is used by both insert() and get_compiled_insert() to1651 * validate that the there data is actually being set and that table1652 * has been chosen to be inserted into.1653 *1654 * @param string the table to insert data into1655 * @return string1656 */1657 827 protected function _validate_insert($table = '') 1658 828 { … … 1674 844 } 1675 845 1676 // --------------------------------------------------------------------1677 1678 /**1679 * Replace statement1680 *1681 * Generates a platform-specific replace string from the supplied data1682 *1683 * @param string the table name1684 * @param array the insert keys1685 * @param array the insert values1686 * @return string1687 */1688 846 protected function _replace($table, $keys, $values) 1689 847 { … … 1691 849 } 1692 850 1693 // --------------------------------------------------------------------1694 1695 /**1696 * FROM tables1697 *1698 * Groups tables in FROM clauses if needed, so there is no confusion1699 * about operator precedence.1700 *1701 * Note: This is only used (and overridden) by MySQL and CUBRID.1702 *1703 * @return string1704 */1705 851 protected function _from_tables() 1706 852 { … … 1708 854 } 1709 855 1710 // --------------------------------------------------------------------1711 1712 /**1713 * Get UPDATE query string1714 *1715 * Compiles an update query and returns the sql1716 *1717 * @param string the table to update1718 * @param bool TRUE: reset QB values; FALSE: leave QB values alone1719 * @return string1720 */1721 856 public function get_compiled_update($table = '', $reset = TRUE) 1722 857 { … … 1739 874 } 1740 875 1741 // --------------------------------------------------------------------1742 1743 /**1744 * Validate Update1745 *1746 * This method is used by both update() and get_compiled_update() to1747 * validate that data is actually being set and that a table has been1748 * chosen to be update.1749 *1750 * @param string the table to update data on1751 * @return bool1752 */1753 876 protected function _validate_update($table) 1754 877 { … … 1770 893 } 1771 894 1772 // --------------------------------------------------------------------1773 1774 /**1775 * Update_Batch statement1776 *1777 * Generates a platform-specific batch update string from the supplied data1778 *1779 * @param string $table Table name1780 * @param array $values Update data1781 * @param string $index WHERE key1782 * @return string1783 */1784 895 protected function _update_batch($table, $values, $index) 1785 896 { … … 1811 922 } 1812 923 1813 // --------------------------------------------------------------------1814 1815 /**1816 * The "set_update_batch" function. Allows key/value pairs to be set for batch updating1817 *1818 * @param array1819 * @param string1820 * @param bool1821 * @return CI_DB_query_builder1822 */1823 924 public function set_update_batch($key, $index = '', $escape = NULL) 1824 925 { … … 1857 958 } 1858 959 1859 // --------------------------------------------------------------------1860 1861 /**1862 * Truncate statement1863 *1864 * Generates a platform-specific truncate string from the supplied data1865 *1866 * If the database does not support the truncate() command,1867 * then this method maps to 'DELETE FROM table'1868 *1869 * @param string the table name1870 * @return string1871 */1872 960 protected function _truncate($table) 1873 961 { … … 1875 963 } 1876 964 1877 // --------------------------------------------------------------------1878 1879 /**1880 * Get DELETE query string1881 *1882 * Compiles a delete query string and returns the sql1883 *1884 * @param string the table to delete from1885 * @param bool TRUE: reset QB values; FALSE: leave QB values alone1886 * @return string1887 */1888 965 public function get_compiled_delete($table = '', $reset = TRUE) 1889 966 { … … 1894 971 } 1895 972 1896 // --------------------------------------------------------------------1897 1898 /**1899 * Delete1900 *1901 * Compiles a delete string and runs the query1902 *1903 * @param mixed the table(s) to delete from. String or array1904 * @param mixed the where clause1905 * @param mixed the limit clause1906 * @param bool1907 * @return mixed1908 */1909 973 public function delete($table = '', $where = '', $limit = NULL, $reset_data = TRUE) 1910 974 { … … 1961 1025 } 1962 1026 1963 // --------------------------------------------------------------------1964 1965 /**1966 * Delete statement1967 *1968 * Generates a platform-specific delete string from the supplied data1969 *1970 * @param string the table name1971 * @return string1972 */1973 1027 protected function _delete($table) 1974 1028 { … … 1998 1052 } 1999 1053 2000 // --------------------------------------------------------------------2001 2002 /**2003 * DB Prefix2004 *2005 * Prepends a database prefix if one exists in configuration2006 *2007 * @param string the table2008 * @return string2009 */2010 1054 public function dbprefix($table = '') 2011 1055 { … … 2018 1062 } 2019 1063 2020 // --------------------------------------------------------------------2021 2022 /**2023 * Set DB Prefix2024 *2025 * Set's the DB Prefix to something new without needing to reconnect2026 *2027 * @param string the prefix2028 * @return string2029 */2030 1064 public function set_prefix($prefix = '') 2031 1065 { … … 2037 1071 } 2038 1072 2039 // --------------------------------------------------------------------2040 2041 /**2042 * Track Aliases2043 *2044 * Used to track SQL statements written with aliased tables.2045 *2046 * @param string The table to inspect2047 * @return string2048 */2049 1073 protected function _track_aliases($table) 2050 1074 { … … 2082 1106 } 2083 1107 2084 // --------------------------------------------------------------------2085 2086 /**2087 * Compile the SELECT statement2088 *2089 * Generates a query string based on which functions were used.2090 * Should not be called directly.2091 *2092 * @param bool $select_override2093 * @return string2094 */2095 1108 protected function _compile_select($select_override = FALSE) 2096 1109 { … … 2152 1165 } 2153 1166 2154 // --------------------------------------------------------------------2155 2156 /**2157 * Compile WHERE, HAVING statements2158 *2159 * Escapes identifiers in WHERE and HAVING statements at execution time.2160 *2161 * Required so that aliases are tracked properly, regardless of whether2162 * where(), or_where(), having(), or_having are called prior to from(),2163 * join() and dbprefix is added only if needed.2164 *2165 * @param string $qb_key 'qb_where' or 'qb_having'2166 * @return string SQL statement2167 */2168 1167 public function get_compiled_where( $reset = TRUE ) 2169 1168 { … … 2243 1242 } 2244 1243 2245 // --------------------------------------------------------------------2246 2247 /**2248 * Compile GROUP BY2249 *2250 * Escapes identifiers in GROUP BY statements at execution time.2251 *2252 * Required so that aliases are tracked properly, regardless of wether2253 * group_by() is called prior to from(), join() and dbprefix is added2254 * only if needed.2255 *2256 * @return string SQL statement2257 */2258 1244 protected function _compile_group_by() 2259 1245 { … … 2279 1265 } 2280 1266 2281 // --------------------------------------------------------------------2282 2283 /**2284 * Compile ORDER BY2285 *2286 * Escapes identifiers in ORDER BY statements at execution time.2287 *2288 * Required so that aliases are tracked properly, regardless of wether2289 * order_by() is called prior to from(), join() and dbprefix is added2290 * only if needed.2291 *2292 * @return string SQL statement2293 */2294 1267 protected function _compile_order_by() 2295 1268 { … … 2316 1289 } 2317 1290 2318 // --------------------------------------------------------------------2319 2320 /**2321 * Object to Array2322 *2323 * Takes an object as input and converts the class variables to array key/vals2324 *2325 * @param object2326 * @return array2327 */2328 1291 protected function _object_to_array($object) 2329 1292 { … … 2346 1309 } 2347 1310 2348 // --------------------------------------------------------------------2349 2350 /**2351 * Object to Array2352 *2353 * Takes an object as input and converts the class variables to array key/vals2354 *2355 * @param object2356 * @return array2357 */2358 1311 protected function _object_to_array_batch($object) 2359 1312 { … … 2383 1336 } 2384 1337 2385 // --------------------------------------------------------------------2386 2387 /**2388 * Start Cache2389 *2390 * Starts QB caching2391 *2392 * @return CI_DB_query_builder2393 */2394 1338 public function start_cache() 2395 1339 { … … 2398 1342 } 2399 1343 2400 // --------------------------------------------------------------------2401 2402 /**2403 * Stop Cache2404 *2405 * Stops QB caching2406 *2407 * @return CI_DB_query_builder2408 */2409 1344 public function stop_cache() 2410 1345 { … … 2413 1348 } 2414 1349 2415 // --------------------------------------------------------------------2416 2417 /**2418 * Flush Cache2419 *2420 * Empties the QB cache2421 *2422 * @return CI_DB_query_builder2423 */2424 1350 public function flush_cache() 2425 1351 { … … 2440 1366 } 2441 1367 2442 // --------------------------------------------------------------------2443 2444 /**2445 * Merge Cache2446 *2447 * When called, this function merges any cached QB arrays with2448 * locally called ones.2449 *2450 * @return void2451 */2452 1368 protected function _merge_cache() 2453 1369 { … … 2494 1410 } 2495 1411 2496 // --------------------------------------------------------------------2497 2498 /**2499 * Is literal2500 *2501 * Determines if a string represents a literal value or a field name2502 *2503 * @param string $str2504 * @return bool2505 */2506 1412 protected function _is_literal($str) 2507 1413 { … … 2524 1430 } 2525 1431 2526 // --------------------------------------------------------------------2527 2528 /**2529 * Reset Query Builder values.2530 *2531 * Publicly-visible method to reset the QB values.2532 *2533 * @return CI_DB_query_builder2534 */2535 1432 public function reset_query() 2536 1433 { … … 2540 1437 } 2541 1438 2542 // --------------------------------------------------------------------2543 2544 /**2545 * Resets the query builder values. Called by the get() function2546 *2547 * @param array An array of fields to reset2548 * @return void2549 */2550 1439 protected function _reset_run($qb_reset_items) 2551 1440 { … … 2556 1445 } 2557 1446 2558 // --------------------------------------------------------------------2559 2560 /**2561 * Resets the query builder values. Called by the get() function2562 *2563 * @return void2564 */2565 1447 protected function _reset_select() 2566 1448 { … … 2582 1464 } 2583 1465 2584 // --------------------------------------------------------------------2585 2586 /**2587 * Resets the query builder "write" values.2588 *2589 * Called by the insert() update() insert_batch() update_batch() and delete() functions2590 *2591 * @return void2592 */2593 1466 protected function _reset_write() 2594 1467 { … … 2604 1477 } 2605 1478 2606 2607 // --------------------------------------------------------------------2608 2609 /**2610 * Version number query string2611 *2612 * @return string2613 */2614 1479 protected function _version() 2615 1480 { … … 2617 1482 } 2618 1483 2619 // --------------------------------------------------------------------2620 2621 /**2622 * Disable Transactions2623 * This permits transactions to be disabled at run-time.2624 *2625 * @return void2626 */2627 1484 public function trans_off() 2628 1485 { … … 2630 1487 } 2631 1488 2632 // --------------------------------------------------------------------2633 2634 /**2635 * Enable/disable Transaction Strict Mode2636 *2637 * When strict mode is enabled, if you are running multiple groups of2638 * transactions, if one group fails all subsequent groups will be2639 * rolled back.2640 *2641 * If strict mode is disabled, each group is treated autonomously,2642 * meaning a failure of one group will not affect any others2643 *2644 * @param bool $mode = TRUE2645 * @return void2646 */2647 1489 public function trans_strict($mode = TRUE) 2648 1490 { … … 2650 1492 } 2651 1493 2652 // --------------------------------------------------------------------2653 2654 /**2655 * Start Transaction2656 *2657 * @param bool $test_mode = FALSE2658 * @return bool2659 */2660 1494 public function trans_start($test_mode = FALSE) 2661 1495 { … … 2668 1502 } 2669 1503 2670 // --------------------------------------------------------------------2671 2672 /**2673 * Complete Transaction2674 *2675 * @return bool2676 */2677 1504 public function trans_complete() 2678 1505 { … … 2702 1529 } 2703 1530 2704 // --------------------------------------------------------------------2705 2706 /**2707 * Lets you retrieve the transaction flag to determine if it has failed2708 *2709 * @return bool2710 */2711 1531 public function trans_status() 2712 1532 { … … 2714 1534 } 2715 1535 2716 // --------------------------------------------------------------------2717 2718 /**2719 * Begin Transaction2720 *2721 * @param bool $test_mode2722 * @return bool2723 */2724 1536 public function trans_begin($test_mode = FALSE) 2725 1537 { … … 2749 1561 } 2750 1562 2751 // --------------------------------------------------------------------2752 2753 /**2754 * Commit Transaction2755 *2756 * @return bool2757 */2758 1563 public function trans_commit() 2759 1564 { … … 2772 1577 } 2773 1578 2774 // --------------------------------------------------------------------2775 2776 /**2777 * Rollback Transaction2778 *2779 * @return bool2780 */2781 1579 public function trans_rollback() 2782 1580 { … … 2795 1593 } 2796 1594 2797 // --------------------------------------------------------------------2798 2799 /**2800 * Compile Bindings2801 *2802 * @param string the sql statement2803 * @param array an array of bind data2804 * @return string2805 */2806 1595 public function compile_binds($sql, $binds) 2807 1596 { … … 2860 1649 } 2861 1650 2862 // --------------------------------------------------------------------2863 2864 /**2865 * Determines if a query is a "write" type.2866 *2867 * @param string An SQL query string2868 * @return bool2869 */2870 1651 public function is_write_type($sql) 2871 1652 { … … 2873 1654 } 2874 1655 2875 // --------------------------------------------------------------------2876 2877 /**2878 * "Smart" Escape String2879 *2880 * Escapes data based on type2881 * Sets boolean and null types2882 *2883 * @param string2884 * @return mixed2885 */2886 1656 public function escape($str) 2887 1657 { … … 2907 1677 } 2908 1678 2909 // --------------------------------------------------------------------2910 2911 /**2912 * Escape String2913 *2914 * @param string|string[] $str Input string2915 * @param bool $like Whether or not the string will be used in a LIKE condition2916 * @return string2917 */2918 1679 public function escape_str($str, $like = FALSE) 2919 1680 { … … 2943 1704 } 2944 1705 2945 // --------------------------------------------------------------------2946 2947 /**2948 * Escape LIKE String2949 *2950 * Calls the individual driver for platform2951 * specific escaping for LIKE conditions2952 *2953 * @param string|string[]2954 * @return mixed2955 */2956 1706 public function escape_like_str($str) 2957 1707 { … … 2959 1709 } 2960 1710 2961 // --------------------------------------------------------------------2962 2963 /**2964 * Platform-dependant string escape2965 *2966 * @param string2967 * @return string2968 */2969 1711 protected function _escape_str($str) 2970 1712 { … … 2972 1714 } 2973 1715 2974 // --------------------------------------------------------------------2975 2976 /**2977 * Escape the SQL Identifiers2978 *2979 * This function escapes column and table names2980 *2981 * @param mixed2982 * @return mixed2983 */2984 1716 public function escape_identifiers($item) 2985 1717 { … … 3034 1766 } 3035 1767 3036 // --------------------------------------------------------------------3037 3038 /**3039 * Generate an insert string3040 *3041 * @param string the table upon which the query will be performed3042 * @param array an associative array data of key/values3043 * @return string3044 */3045 1768 public function insert_string($table, $data) 3046 1769 { … … 3056 1779 } 3057 1780 3058 // --------------------------------------------------------------------3059 3060 /**3061 * Insert statement3062 *3063 * Generates a platform-specific insert string from the supplied data3064 *3065 * @param string the table name3066 * @param array the insert keys3067 * @param array the insert values3068 * @return string3069 */3070 1781 protected function _insert($table, $keys, $values) 3071 1782 { … … 3073 1784 } 3074 1785 3075 // --------------------------------------------------------------------3076 3077 /**3078 * Generate an update string3079 *3080 * @param string the table upon which the query will be performed3081 * @param array an associative array data of key/values3082 * @param mixed the "where" statement3083 * @return string3084 */3085 1786 public function update_string($table, $data, $where) 3086 1787 { … … 3103 1804 } 3104 1805 3105 // --------------------------------------------------------------------3106 3107 /**3108 * Update statement3109 *3110 * Generates a platform-specific update string from the supplied data3111 *3112 * @param string the table name3113 * @param array the update data3114 * @return string3115 */3116 1806 protected function _update($table, $values) 3117 1807 { … … 3127 1817 } 3128 1818 3129 // --------------------------------------------------------------------3130 3131 /**3132 * Tests whether the string has an SQL operator3133 *3134 * @param string3135 * @return bool3136 */3137 1819 protected function _has_operator($str) 3138 1820 { … … 3140 1822 } 3141 1823 3142 // --------------------------------------------------------------------3143 3144 /**3145 * Returns the SQL string operator3146 *3147 * @param string3148 * @return string3149 */3150 1824 protected function _get_operator($str) 3151 1825 { … … 3178 1852 } 3179 1853 3180 // --------------------------------------------------------------------3181 3182 /**3183 * Protect Identifiers3184 *3185 * This function is used extensively by the Query Builder class, and by3186 * a couple functions in this class.3187 * It takes a column or table name (optionally with an alias) and inserts3188 * the table prefix onto it. Some logic is necessary in order to deal with3189 * column names that include the path. Consider a query like this:3190 *3191 * SELECT hostname.database.table.column AS c FROM hostname.database.table3192 *3193 * Or a query with aliasing:3194 *3195 * SELECT m.member_id, m.member_name FROM members AS m3196 *3197 * Since the column name can include up to four segments (host, DB, table, column)3198 * or also have an alias prefix, we need to do a bit of work to figure this out and3199 * insert the table prefix (if it exists) in the proper position, and escape only3200 * the correct identifiers.3201 *3202 * @param string3203 * @param bool3204 * @param mixed3205 * @param bool3206 * @return string3207 */3208 1854 public function protect_identifiers($item, $prefix_single = FALSE, $protect_identifiers = NULL, $field_exists = TRUE) 3209 1855 { … … 3379 2025 $safe_file_name = str_replace(array(), '', $call['file']); 3380 2026 $safe_file_name = basename( $safe_file_name ); 3381 3382 2027 // $message[] = 'Filename: ' . $safe_file_name; 3383 2028 // $message[] = 'Line Number: '. $call['line']; 3384 3385 2029 break; 3386 2030 } -
locatoraid/trunk/happ2/hsystem/factory.php
r1726376 r3370713 63 63 $this_return_path .= '.php'; 64 64 array_unshift( $return_path, $this_return_path ); 65 // $final_return_path[] = $this_return_path;66 65 67 66 $last_subdir = ''; … … 73 72 74 73 $this_return_path .= '.php'; 75 // $final_return_path[] = $this_return_path;76 74 array_unshift( $return_path, $this_return_path ); 77 75 … … 83 81 } 84 82 85 // echo "FINAL RETURN PATH<br>";86 // _print_r( $return_path );87 88 83 $return = array( $return_module, $return_classname, $return_path ); 89 84 90 // echo "MAKING CLASSNAME PATH FROM '$slug'<br>";91 // _print_r( $return );92 85 $slug2class[ $slug ] = $return; 93 86 return $return; -
locatoraid/trunk/happ2/modules/acl/roles.php
r2859421 r3370713 2 2 class Acl_Roles_HC_MVC extends _HC_MVC 3 3 { 4 public function has_role( $user_id, $check_role, $on = NULL)4 public function has_role($user_id, $check_role, $on = null) 5 5 { 6 $ret urn = FALSE;6 $ret = false; 7 7 $bits = 0; 8 8 9 if( $on ){ 10 } 11 else { 12 if( $user_id ){ 9 if ($on) { 10 } else { 11 if($user_id) { 13 12 $user = $this->app->make('/users/commands/read') 14 ->execute( array($user_id))13 ->execute(array($user_id)) 15 14 ; 16 if( $user && isset($user['roles']) ){15 if($user && isset($user['roles'])) { 17 16 $bits = $user['roles']; 18 17 } … … 20 19 } 21 20 22 $user_roles = $this->get_roles( $bits);23 if( in_array($check_role, $user_roles) ){24 $ret urn = TRUE;21 $user_roles = $this->get_roles($bits); 22 if(in_array($check_role, $user_roles)) { 23 $ret = true; 25 24 } 26 25 27 return $ret urn;26 return $ret; 28 27 } 29 28 … … 31 30 { 32 31 $return = array( 33 'admin' => __( 'Administrator', 'locatoraid' ),32 'admin' => __( 'Administrator', 'locatoraid' ), 34 33 ); 35 34 -
locatoraid/trunk/happ2/modules/auth.wordpress/_config_route.php
r1807089 r3370713 9 9 $config['route']['auth/login'] = $auth_wordpress_login_redirect; 10 10 $config['route']['login'] = $auth_wordpress_login_redirect; 11 if (is_admin()){ 12 $config['route'][''] = '/locations/index/controller'; 13 } else { 14 $config['route'][''] = $auth_wordpress_login_redirect; 15 } -
locatoraid/trunk/locatoraid.php
r3349796 r3370713 4 4 Plugin URI: https://www.locatoraid.com/ 5 5 Description: Store locator plugin 6 Version: 3.9.6 16 Version: 3.9.62 7 7 Author: plainware.com 8 8 Author URI: https://www.locatoraid.com/ … … 12 12 13 13 if( ! defined('LC3_VERSION') ){ 14 define( 'LC3_VERSION', 396 1);14 define( 'LC3_VERSION', 3962 ); 15 15 } 16 16 -
locatoraid/trunk/modules/addon.conf/_config_after.php
r3008011 r3370713 2 2 $config['after']['/conf/view/layout->tabs'][] = function( $app, $ret ) 3 3 { 4 $ret['addon'] = array( 'addon.conf', __('Add-ons', 'locatoraid'));4 $ret['addon'] = array('addon.conf', __('Add-ons', 'locatoraid')); 5 5 return $ret; 6 6 }; -
locatoraid/trunk/modules/app.conf/_config_after.php
r2791689 r3370713 1 1 <?php if (! defined('ABSPATH')) exit; // Exit if accessed directly 2 $config['after']['/conf/view/layout->tabs'][] = function( $app, $ret urn)2 $config['after']['/conf/view/layout->tabs'][] = function( $app, $ret ) 3 3 { 4 $ret urn['app'] = array( 'app.conf', __('Configuration', 'locatoraid') );5 return $ret urn;4 $ret['app'] = array( 'app.conf', __('Configuration', 'locatoraid') ); 5 return $ret; 6 6 }; -
locatoraid/trunk/modules/app/_config_route.php
r1807089 r3370713 1 1 <?php if (! defined('ABSPATH')) exit; // Exit if accessed directly 2 $config['route'][''] = '/locations/index/controller';2 // $config['route'][''] = '/locations/index/controller'; -
locatoraid/trunk/modules/coordinates/view.php
r2859421 r3370713 2 2 class Coordinates_View_LC_HC_MVC extends _HC_MVC 3 3 { 4 public function render( $address)4 public function render($address) 5 5 { 6 6 $out = $this->app->make('/html/list') 7 7 ->set_gutter(2) 8 8 ; 9 10 9 $out 11 10 ->add( $address ) -
locatoraid/trunk/modules/directions.front/_config_after.php
r1925696 r3370713 1 1 <?php if (! defined('ABSPATH')) exit; // Exit if accessed directly 2 $config['after']['/front/view'][] = function( $app, $ret urn)2 $config['after']['/front/view'][] = function( $app, $ret ) 3 3 { 4 4 $app_settings = $app->make('/app/settings'); … … 7 7 $this_pname_config = $app_settings->get($this_pname); 8 8 if( ! $this_pname_config ){ 9 return $ret urn;9 return $ret; 10 10 } 11 11 … … 15 15 ; 16 16 17 return $ret urn;17 return $ret; 18 18 }; -
locatoraid/trunk/modules/directions.locations/_config_after.php
r2791689 r3370713 1 1 <?php if (! defined('ABSPATH')) exit; // Exit if accessed directly 2 $config['after']['/locations/presenter->fields'][] = function( $app, $ret urn)2 $config['after']['/locations/presenter->fields'][] = function( $app, $ret ) 3 3 { 4 $ret urn['directions'] = __('Directions', 'locatoraid');5 return $ret urn;4 $ret['directions'] = __('Directions', 'locatoraid'); 5 return $ret; 6 6 }; 7 7 8 $config['after']['/locations/presenter->present_front'][] = function( $app, $ret urn, $search, $search_coordinates )8 $config['after']['/locations/presenter->present_front'][] = function( $app, $ret, $search, $search_coordinates ) 9 9 { 10 if( ! ($ret urn['latitude'] && $return['longitude']) ){11 return $ret urn;10 if( ! ($ret['latitude'] && $ret['longitude']) ){ 11 return $ret; 12 12 } 13 13 14 if( ( ($ret urn['latitude'] == -1) OR ($return['longitude'] == -1) ) ){15 return $ret urn;14 if( ( ($ret['latitude'] == -1) OR ($ret['longitude'] == -1) ) ){ 15 return $ret; 16 16 } 17 17 18 18 if( ! $search_coordinates ){ 19 return $ret urn;19 return $ret; 20 20 } 21 21 if( ! is_array($search_coordinates) ){ 22 return $ret urn;22 return $ret; 23 23 } 24 24 … … 26 26 $search_lng = array_shift( $search_coordinates ); 27 27 if( ! ($search_lat && $search_lng) ){ 28 return $ret urn;28 return $ret; 29 29 } 30 30 … … 34 34 $this_pname_config = $app_settings->get($this_pname); 35 35 if( ! $this_pname_config ){ 36 return $ret urn;36 return $ret; 37 37 } 38 38 … … 44 44 'class' => 'lpr-directions', 45 45 'href' => '#', 46 'data-to-lat' => $ret urn['latitude'],47 'data-to-lng' => $ret urn['longitude'],46 'data-to-lat' => $ret['latitude'], 47 'data-to-lng' => $ret['longitude'], 48 48 'data-from-lat' => $search_lat, 49 49 'data-from-lng' => $search_lng, … … 59 59 $link_view .= '</a>'; 60 60 61 $ret urn['directions'] = $link_view;62 return $ret urn;61 $ret['directions'] = $link_view; 62 return $ret; 63 63 }; -
locatoraid/trunk/readme.txt
r3349796 r3370713 4 4 Tags: map, store locator, store finder, google maps, zip code 5 5 License: GPLv2 or later 6 Stable tag: 3.9.6 16 Stable tag: 3.9.62 7 7 Requires at least: 3.3 8 8 Tested up to: 6.8 … … 89 89 90 90 == Changelog == 91 92 = 3.9.62 = 93 Code cleanup and minor fixes. 91 94 92 95 = 3.9.61 =
Note: See TracChangeset
for help on using the changeset viewer.