diff --git a/db-snapshots/db-snapshot.sql b/db-snapshots/db-snapshot.sql index a01c3e18..b2953318 100644 --- a/db-snapshots/db-snapshot.sql +++ b/db-snapshots/db-snapshot.sql @@ -39,7 +39,7 @@ CREATE TABLE `wp_aiowps_audit_log` ( KEY `ip` (`ip`), KEY `level` (`level`), KEY `event_type` (`event_type`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -48,6 +48,7 @@ CREATE TABLE `wp_aiowps_audit_log` ( LOCK TABLES `wp_aiowps_audit_log` WRITE; /*!40000 ALTER TABLE `wp_aiowps_audit_log` DISABLE KEYS */; +INSERT INTO `wp_aiowps_audit_log` VALUES (1,1,1,'','127.0.0.1','warning','plugin_deactivated','{\"plugin\":{\"name\":\"Advanced Custom Fields\",\"version\":\"6.6.2\",\"action\":\"deactivated\",\"network\":\"\"}}','a:22:{i:0;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:324;s:8:\"function\";s:12:\"record_event\";s:5:\"class\";s:33:\"AIOWPSecurity_Audit_Event_Handler\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:1;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:348;s:8:\"function\";s:13:\"apply_filters\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:2;a:6:{s:4:\"file\";s:36:\"/var/www/html/wp-includes/plugin.php\";s:4:\"line\";i:517;s:8:\"function\";s:9:\"do_action\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:3;a:4:{s:4:\"file\";s:105:\"/var/www/html/wp-content/plugins/all-in-one-wp-security-and-firewall/classes/wp-security-audit-events.php\";s:4:\"line\";i:273;s:8:\"function\";s:9:\"do_action\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:4;a:6:{s:4:\"file\";s:105:\"/var/www/html/wp-content/plugins/all-in-one-wp-security-and-firewall/classes/wp-security-audit-events.php\";s:4:\"line\";i:212;s:8:\"function\";s:20:\"event_plugin_changed\";s:5:\"class\";s:26:\"AIOWPSecurity_Audit_Events\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:5;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:324;s:8:\"function\";s:18:\"plugin_deactivated\";s:5:\"class\";s:26:\"AIOWPSecurity_Audit_Events\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:6;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:348;s:8:\"function\";s:13:\"apply_filters\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:7;a:6:{s:4:\"file\";s:36:\"/var/www/html/wp-includes/plugin.php\";s:4:\"line\";i:517;s:8:\"function\";s:9:\"do_action\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:8;a:4:{s:4:\"file\";s:42:\"/var/www/html/wp-admin/includes/plugin.php\";s:4:\"line\";i:840;s:8:\"function\";s:9:\"do_action\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:9;a:4:{s:4:\"file\";s:79:\"phar:///usr/local/bin/wp/vendor/wp-cli/extension-command/src/Plugin_Command.php\";s:4:\"line\";i:476;s:8:\"function\";s:18:\"deactivate_plugins\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:10;a:4:{s:8:\"function\";s:10:\"deactivate\";s:5:\"class\";s:14:\"Plugin_Command\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:11;a:4:{s:4:\"file\";s:86:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php\";s:4:\"line\";i:100;s:8:\"function\";s:14:\"call_user_func\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:12;a:4:{s:8:\"function\";s:27:\"WP_CLI\\Dispatcher\\{closure}\";s:5:\"class\";s:32:\"WP_CLI\\Dispatcher\\CommandFactory\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:13;a:4:{s:4:\"file\";s:82:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php\";s:4:\"line\";i:497;s:8:\"function\";s:14:\"call_user_func\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:14;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:470;s:8:\"function\";s:6:\"invoke\";s:5:\"class\";s:28:\"WP_CLI\\Dispatcher\\Subcommand\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:15;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:493;s:8:\"function\";s:11:\"run_command\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:16;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:1295;s:8:\"function\";s:20:\"run_command_and_exit\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:17;a:6:{s:4:\"file\";s:83:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php\";s:4:\"line\";i:28;s:8:\"function\";s:5:\"start\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:18;a:6:{s:4:\"file\";s:63:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php\";s:4:\"line\";i:84;s:8:\"function\";s:7:\"process\";s:5:\"class\";s:29:\"WP_CLI\\Bootstrap\\LaunchRunner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:19;a:4:{s:4:\"file\";s:60:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php\";s:4:\"line\";i:35;s:8:\"function\";s:16:\"WP_CLI\\bootstrap\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:20;a:4:{s:4:\"file\";s:42:\"phar:///usr/local/bin/wp/php/boot-phar.php\";s:4:\"line\";i:20;s:4:\"args\";a:1:{i:0;s:60:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php\";}s:8:\"function\";s:7:\"include\";}i:21;a:4:{s:4:\"file\";s:17:\"/usr/local/bin/wp\";s:4:\"line\";i:4;s:4:\"args\";a:1:{i:0;s:42:\"phar:///usr/local/bin/wp/php/boot-phar.php\";}s:8:\"function\";s:7:\"include\";}}',1764373621,''),(2,1,1,'','127.0.0.1','warning','plugin_deleted','{\"plugin\":{\"name\":\"Advanced Custom Fields\",\"version\":\"6.6.2\",\"action\":\"deleted\",\"network\":\"\"}}','a:22:{i:0;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:324;s:8:\"function\";s:12:\"record_event\";s:5:\"class\";s:33:\"AIOWPSecurity_Audit_Event_Handler\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:1;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:348;s:8:\"function\";s:13:\"apply_filters\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:2;a:6:{s:4:\"file\";s:36:\"/var/www/html/wp-includes/plugin.php\";s:4:\"line\";i:517;s:8:\"function\";s:9:\"do_action\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:3;a:4:{s:4:\"file\";s:105:\"/var/www/html/wp-content/plugins/all-in-one-wp-security-and-firewall/classes/wp-security-audit-events.php\";s:4:\"line\";i:273;s:8:\"function\";s:9:\"do_action\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:4;a:6:{s:4:\"file\";s:105:\"/var/www/html/wp-content/plugins/all-in-one-wp-security-and-firewall/classes/wp-security-audit-events.php\";s:4:\"line\";i:238;s:8:\"function\";s:20:\"event_plugin_changed\";s:5:\"class\";s:26:\"AIOWPSecurity_Audit_Events\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:5;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:324;s:8:\"function\";s:14:\"plugin_deleted\";s:5:\"class\";s:26:\"AIOWPSecurity_Audit_Events\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:6;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:348;s:8:\"function\";s:13:\"apply_filters\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:7;a:6:{s:4:\"file\";s:36:\"/var/www/html/wp-includes/plugin.php\";s:4:\"line\";i:517;s:8:\"function\";s:9:\"do_action\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:8;a:4:{s:4:\"file\";s:79:\"phar:///usr/local/bin/wp/vendor/wp-cli/extension-command/src/Plugin_Command.php\";s:4:\"line\";i:1617;s:8:\"function\";s:9:\"do_action\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:9;a:6:{s:4:\"file\";s:79:\"phar:///usr/local/bin/wp/vendor/wp-cli/extension-command/src/Plugin_Command.php\";s:4:\"line\";i:1235;s:8:\"function\";s:13:\"delete_plugin\";s:5:\"class\";s:14:\"Plugin_Command\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:10;a:4:{s:8:\"function\";s:9:\"uninstall\";s:5:\"class\";s:14:\"Plugin_Command\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:11;a:4:{s:4:\"file\";s:86:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php\";s:4:\"line\";i:100;s:8:\"function\";s:14:\"call_user_func\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:12;a:4:{s:8:\"function\";s:27:\"WP_CLI\\Dispatcher\\{closure}\";s:5:\"class\";s:32:\"WP_CLI\\Dispatcher\\CommandFactory\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:13;a:4:{s:4:\"file\";s:82:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php\";s:4:\"line\";i:497;s:8:\"function\";s:14:\"call_user_func\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:14;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:470;s:8:\"function\";s:6:\"invoke\";s:5:\"class\";s:28:\"WP_CLI\\Dispatcher\\Subcommand\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:15;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:493;s:8:\"function\";s:11:\"run_command\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:16;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:1295;s:8:\"function\";s:20:\"run_command_and_exit\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:17;a:6:{s:4:\"file\";s:83:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php\";s:4:\"line\";i:28;s:8:\"function\";s:5:\"start\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:18;a:6:{s:4:\"file\";s:63:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php\";s:4:\"line\";i:84;s:8:\"function\";s:7:\"process\";s:5:\"class\";s:29:\"WP_CLI\\Bootstrap\\LaunchRunner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:19;a:4:{s:4:\"file\";s:60:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php\";s:4:\"line\";i:35;s:8:\"function\";s:16:\"WP_CLI\\bootstrap\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:20;a:4:{s:4:\"file\";s:42:\"phar:///usr/local/bin/wp/php/boot-phar.php\";s:4:\"line\";i:20;s:4:\"args\";a:1:{i:0;s:60:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php\";}s:8:\"function\";s:7:\"include\";}i:21;a:4:{s:4:\"file\";s:17:\"/usr/local/bin/wp\";s:4:\"line\";i:4;s:4:\"args\";a:1:{i:0;s:42:\"phar:///usr/local/bin/wp/php/boot-phar.php\";}s:8:\"function\";s:7:\"include\";}}',1764373625,''),(3,1,1,'','127.0.0.1','info','plugin_activated','{\"plugin\":{\"name\":\"Advanced Custom Fields PRO\",\"version\":\"6.6.2\",\"action\":\"activated\",\"network\":\"\"}}','a:22:{i:0;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:324;s:8:\"function\";s:12:\"record_event\";s:5:\"class\";s:33:\"AIOWPSecurity_Audit_Event_Handler\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:1;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:348;s:8:\"function\";s:13:\"apply_filters\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:2;a:6:{s:4:\"file\";s:36:\"/var/www/html/wp-includes/plugin.php\";s:4:\"line\";i:517;s:8:\"function\";s:9:\"do_action\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:3;a:4:{s:4:\"file\";s:105:\"/var/www/html/wp-content/plugins/all-in-one-wp-security-and-firewall/classes/wp-security-audit-events.php\";s:4:\"line\";i:273;s:8:\"function\";s:9:\"do_action\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:4;a:6:{s:4:\"file\";s:105:\"/var/www/html/wp-content/plugins/all-in-one-wp-security-and-firewall/classes/wp-security-audit-events.php\";s:4:\"line\";i:177;s:8:\"function\";s:20:\"event_plugin_changed\";s:5:\"class\";s:26:\"AIOWPSecurity_Audit_Events\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:5;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:324;s:8:\"function\";s:16:\"plugin_activated\";s:5:\"class\";s:26:\"AIOWPSecurity_Audit_Events\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:6;a:6:{s:4:\"file\";s:43:\"/var/www/html/wp-includes/class-wp-hook.php\";s:4:\"line\";i:348;s:8:\"function\";s:13:\"apply_filters\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:7;a:6:{s:4:\"file\";s:36:\"/var/www/html/wp-includes/plugin.php\";s:4:\"line\";i:517;s:8:\"function\";s:9:\"do_action\";s:5:\"class\";s:7:\"WP_Hook\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:8;a:4:{s:4:\"file\";s:42:\"/var/www/html/wp-admin/includes/plugin.php\";s:4:\"line\";i:730;s:8:\"function\";s:9:\"do_action\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:9;a:4:{s:4:\"file\";s:79:\"phar:///usr/local/bin/wp/vendor/wp-cli/extension-command/src/Plugin_Command.php\";s:4:\"line\";i:386;s:8:\"function\";s:15:\"activate_plugin\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:10;a:4:{s:8:\"function\";s:8:\"activate\";s:5:\"class\";s:14:\"Plugin_Command\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:11;a:4:{s:4:\"file\";s:86:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php\";s:4:\"line\";i:100;s:8:\"function\";s:14:\"call_user_func\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:12;a:4:{s:8:\"function\";s:27:\"WP_CLI\\Dispatcher\\{closure}\";s:5:\"class\";s:32:\"WP_CLI\\Dispatcher\\CommandFactory\";s:4:\"type\";s:2:\"::\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:13;a:4:{s:4:\"file\";s:82:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php\";s:4:\"line\";i:497;s:8:\"function\";s:14:\"call_user_func\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:14;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:470;s:8:\"function\";s:6:\"invoke\";s:5:\"class\";s:28:\"WP_CLI\\Dispatcher\\Subcommand\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:15;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:493;s:8:\"function\";s:11:\"run_command\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:16;a:6:{s:4:\"file\";s:67:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php\";s:4:\"line\";i:1295;s:8:\"function\";s:20:\"run_command_and_exit\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:17;a:6:{s:4:\"file\";s:83:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php\";s:4:\"line\";i:28;s:8:\"function\";s:5:\"start\";s:5:\"class\";s:13:\"WP_CLI\\Runner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:18;a:6:{s:4:\"file\";s:63:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php\";s:4:\"line\";i:84;s:8:\"function\";s:7:\"process\";s:5:\"class\";s:29:\"WP_CLI\\Bootstrap\\LaunchRunner\";s:4:\"type\";s:2:\"->\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:19;a:4:{s:4:\"file\";s:60:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php\";s:4:\"line\";i:35;s:8:\"function\";s:16:\"WP_CLI\\bootstrap\";s:4:\"args\";a:1:{i:0;s:0:\"\";}}i:20;a:4:{s:4:\"file\";s:42:\"phar:///usr/local/bin/wp/php/boot-phar.php\";s:4:\"line\";i:20;s:4:\"args\";a:1:{i:0;s:60:\"phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php\";}s:8:\"function\";s:7:\"include\";}i:21;a:4:{s:4:\"file\";s:17:\"/usr/local/bin/wp\";s:4:\"line\";i:4;s:4:\"args\";a:1:{i:0;s:42:\"phar:///usr/local/bin/wp/php/boot-phar.php\";}s:8:\"function\";s:7:\"include\";}}',1764373713,''); /*!40000 ALTER TABLE `wp_aiowps_audit_log` ENABLE KEYS */; UNLOCK TABLES; @@ -389,7 +390,7 @@ CREATE TABLE `wp_options` ( PRIMARY KEY (`option_id`), UNIQUE KEY `option_name` (`option_name`), KEY `autoload` (`autoload`) -) ENGINE=InnoDB AUTO_INCREMENT=187 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +) ENGINE=InnoDB AUTO_INCREMENT=189 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -398,7 +399,7 @@ CREATE TABLE `wp_options` ( LOCK TABLES `wp_options` WRITE; /*!40000 ALTER TABLE `wp_options` DISABLE KEYS */; -INSERT INTO `wp_options` VALUES (1,'cron','a:12:{i:1764363747;a:1:{s:32:\"recovery_mode_clean_expired_keys\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1764363748;a:1:{s:34:\"wp_privacy_delete_old_export_files\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1764367344;a:1:{s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1764369115;a:1:{s:30:\"wp_delete_temp_updater_backups\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1764369116;a:1:{s:27:\"acf_update_site_health_data\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1764369144;a:1:{s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1764370944;a:1:{s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1764371307;a:1:{s:31:\"wpseo_permalink_structure_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1764371970;a:4:{s:26:\"aios_15_minutes_cron_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:21:\"aios-every-15-minutes\";s:4:\"args\";a:0:{}s:8:\"interval\";i:900;}}s:24:\"aiowps_hourly_cron_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}s:23:\"aiowps_daily_cron_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}s:24:\"aiowps_weekly_cron_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1764371978;a:1:{s:23:\"aiowps_clean_old_events\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1764450148;a:1:{s:30:\"wp_site_health_scheduled_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}s:7:\"version\";i:2;}','on'),(2,'siteurl','https://homeproz.dev.hanson.xyz','on'),(3,'home','https://homeproz.dev.hanson.xyz','on'),(4,'blogname','HomeProz','on'),(5,'blogdescription','','on'),(6,'users_can_register','0','on'),(7,'admin_email','brian@hanson.xyz','on'),(8,'start_of_week','1','on'),(9,'use_balanceTags','0','on'),(10,'use_smilies','1','on'),(11,'require_name_email','1','on'),(12,'comments_notify','1','on'),(13,'posts_per_rss','10','on'),(14,'rss_use_excerpt','0','on'),(15,'mailserver_url','mail.example.com','on'),(16,'mailserver_login','login@example.com','on'),(17,'mailserver_pass','','on'),(18,'mailserver_port','110','on'),(19,'default_category','1','on'),(20,'default_comment_status','open','on'),(21,'default_ping_status','open','on'),(22,'default_pingback_flag','1','on'),(23,'posts_per_page','10','on'),(24,'date_format','F j, Y','on'),(25,'time_format','g:i a','on'),(26,'links_updated_date_format','F j, Y g:i a','on'),(27,'comment_moderation','0','on'),(28,'moderation_notify','1','on'),(29,'permalink_structure','/%postname%/','on'),(30,'rewrite_rules','a:133:{s:11:\"^wp-json/?$\";s:22:\"index.php?rest_route=/\";s:14:\"^wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:21:\"^index.php/wp-json/?$\";s:22:\"index.php?rest_route=/\";s:24:\"^index.php/wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:17:\"^wp-sitemap\\.xml$\";s:23:\"index.php?sitemap=index\";s:17:\"^wp-sitemap\\.xsl$\";s:36:\"index.php?sitemap-stylesheet=sitemap\";s:23:\"^wp-sitemap-index\\.xsl$\";s:34:\"index.php?sitemap-stylesheet=index\";s:48:\"^wp-sitemap-([a-z]+?)-([a-z\\d_-]+?)-(\\d+?)\\.xml$\";s:75:\"index.php?sitemap=$matches[1]&sitemap-subtype=$matches[2]&paged=$matches[3]\";s:34:\"^wp-sitemap-([a-z]+?)-(\\d+?)\\.xml$\";s:47:\"index.php?sitemap=$matches[1]&paged=$matches[2]\";s:13:\"properties/?$\";s:28:\"index.php?post_type=property\";s:43:\"properties/feed/(feed|rdf|rss|rss2|atom)/?$\";s:45:\"index.php?post_type=property&feed=$matches[1]\";s:38:\"properties/(feed|rdf|rss|rss2|atom)/?$\";s:45:\"index.php?post_type=property&feed=$matches[1]\";s:30:\"properties/page/([0-9]{1,})/?$\";s:46:\"index.php?post_type=property&paged=$matches[1]\";s:47:\"category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?category_name=$matches[1]&feed=$matches[2]\";s:42:\"category/(.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?category_name=$matches[1]&feed=$matches[2]\";s:23:\"category/(.+?)/embed/?$\";s:46:\"index.php?category_name=$matches[1]&embed=true\";s:35:\"category/(.+?)/page/?([0-9]{1,})/?$\";s:53:\"index.php?category_name=$matches[1]&paged=$matches[2]\";s:17:\"category/(.+?)/?$\";s:35:\"index.php?category_name=$matches[1]\";s:44:\"tag/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?tag=$matches[1]&feed=$matches[2]\";s:39:\"tag/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?tag=$matches[1]&feed=$matches[2]\";s:20:\"tag/([^/]+)/embed/?$\";s:36:\"index.php?tag=$matches[1]&embed=true\";s:32:\"tag/([^/]+)/page/?([0-9]{1,})/?$\";s:43:\"index.php?tag=$matches[1]&paged=$matches[2]\";s:14:\"tag/([^/]+)/?$\";s:25:\"index.php?tag=$matches[1]\";s:45:\"type/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?post_format=$matches[1]&feed=$matches[2]\";s:40:\"type/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?post_format=$matches[1]&feed=$matches[2]\";s:21:\"type/([^/]+)/embed/?$\";s:44:\"index.php?post_format=$matches[1]&embed=true\";s:33:\"type/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?post_format=$matches[1]&paged=$matches[2]\";s:15:\"type/([^/]+)/?$\";s:33:\"index.php?post_format=$matches[1]\";s:38:\"properties/[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:48:\"properties/[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:68:\"properties/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:63:\"properties/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:63:\"properties/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:44:\"properties/[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:27:\"properties/([^/]+)/embed/?$\";s:41:\"index.php?property=$matches[1]&embed=true\";s:31:\"properties/([^/]+)/trackback/?$\";s:35:\"index.php?property=$matches[1]&tb=1\";s:51:\"properties/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?property=$matches[1]&feed=$matches[2]\";s:46:\"properties/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?property=$matches[1]&feed=$matches[2]\";s:39:\"properties/([^/]+)/page/?([0-9]{1,})/?$\";s:48:\"index.php?property=$matches[1]&paged=$matches[2]\";s:46:\"properties/([^/]+)/comment-page-([0-9]{1,})/?$\";s:48:\"index.php?property=$matches[1]&cpage=$matches[2]\";s:35:\"properties/([^/]+)(?:/([0-9]+))?/?$\";s:47:\"index.php?property=$matches[1]&page=$matches[2]\";s:27:\"properties/[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\"properties/[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\"properties/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"properties/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"properties/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\"properties/[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:54:\"property-type/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?property_type=$matches[1]&feed=$matches[2]\";s:49:\"property-type/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?property_type=$matches[1]&feed=$matches[2]\";s:30:\"property-type/([^/]+)/embed/?$\";s:46:\"index.php?property_type=$matches[1]&embed=true\";s:42:\"property-type/([^/]+)/page/?([0-9]{1,})/?$\";s:53:\"index.php?property_type=$matches[1]&paged=$matches[2]\";s:24:\"property-type/([^/]+)/?$\";s:35:\"index.php?property_type=$matches[1]\";s:56:\"property-status/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:54:\"index.php?property_status=$matches[1]&feed=$matches[2]\";s:51:\"property-status/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:54:\"index.php?property_status=$matches[1]&feed=$matches[2]\";s:32:\"property-status/([^/]+)/embed/?$\";s:48:\"index.php?property_status=$matches[1]&embed=true\";s:44:\"property-status/([^/]+)/page/?([0-9]{1,})/?$\";s:55:\"index.php?property_status=$matches[1]&paged=$matches[2]\";s:26:\"property-status/([^/]+)/?$\";s:37:\"index.php?property_status=$matches[1]\";s:49:\"location/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:56:\"index.php?property_location=$matches[1]&feed=$matches[2]\";s:44:\"location/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:56:\"index.php?property_location=$matches[1]&feed=$matches[2]\";s:25:\"location/([^/]+)/embed/?$\";s:50:\"index.php?property_location=$matches[1]&embed=true\";s:37:\"location/([^/]+)/page/?([0-9]{1,})/?$\";s:57:\"index.php?property_location=$matches[1]&paged=$matches[2]\";s:19:\"location/([^/]+)/?$\";s:39:\"index.php?property_location=$matches[1]\";s:12:\"robots\\.txt$\";s:18:\"index.php?robots=1\";s:13:\"favicon\\.ico$\";s:19:\"index.php?favicon=1\";s:12:\"sitemap\\.xml\";s:24:\"index.php??sitemap=index\";s:48:\".*wp-(atom|rdf|rss|rss2|feed|commentsrss2)\\.php$\";s:18:\"index.php?feed=old\";s:20:\".*wp-app\\.php(/.*)?$\";s:19:\"index.php?error=403\";s:18:\".*wp-register.php$\";s:23:\"index.php?register=true\";s:32:\"feed/(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:27:\"(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:8:\"embed/?$\";s:21:\"index.php?&embed=true\";s:20:\"page/?([0-9]{1,})/?$\";s:28:\"index.php?&paged=$matches[1]\";s:27:\"comment-page-([0-9]{1,})/?$\";s:39:\"index.php?&page_id=10&cpage=$matches[1]\";s:41:\"comments/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:36:\"comments/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:17:\"comments/embed/?$\";s:21:\"index.php?&embed=true\";s:44:\"search/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:39:\"search/(.+)/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:20:\"search/(.+)/embed/?$\";s:34:\"index.php?s=$matches[1]&embed=true\";s:32:\"search/(.+)/page/?([0-9]{1,})/?$\";s:41:\"index.php?s=$matches[1]&paged=$matches[2]\";s:14:\"search/(.+)/?$\";s:23:\"index.php?s=$matches[1]\";s:47:\"author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:42:\"author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:23:\"author/([^/]+)/embed/?$\";s:44:\"index.php?author_name=$matches[1]&embed=true\";s:35:\"author/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?author_name=$matches[1]&paged=$matches[2]\";s:17:\"author/([^/]+)/?$\";s:33:\"index.php?author_name=$matches[1]\";s:69:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:64:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:45:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/embed/?$\";s:74:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&embed=true\";s:57:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:81:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]\";s:39:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$\";s:63:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]\";s:56:\"([0-9]{4})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:51:\"([0-9]{4})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:32:\"([0-9]{4})/([0-9]{1,2})/embed/?$\";s:58:\"index.php?year=$matches[1]&monthnum=$matches[2]&embed=true\";s:44:\"([0-9]{4})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:65:\"index.php?year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]\";s:26:\"([0-9]{4})/([0-9]{1,2})/?$\";s:47:\"index.php?year=$matches[1]&monthnum=$matches[2]\";s:43:\"([0-9]{4})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:38:\"([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:19:\"([0-9]{4})/embed/?$\";s:37:\"index.php?year=$matches[1]&embed=true\";s:31:\"([0-9]{4})/page/?([0-9]{1,})/?$\";s:44:\"index.php?year=$matches[1]&paged=$matches[2]\";s:13:\"([0-9]{4})/?$\";s:26:\"index.php?year=$matches[1]\";s:27:\".?.+?/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\".?.+?/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\".?.+?/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\".?.+?/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"(.?.+?)/embed/?$\";s:41:\"index.php?pagename=$matches[1]&embed=true\";s:20:\"(.?.+?)/trackback/?$\";s:35:\"index.php?pagename=$matches[1]&tb=1\";s:40:\"(.?.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:35:\"(.?.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:28:\"(.?.+?)/page/?([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&paged=$matches[2]\";s:35:\"(.?.+?)/comment-page-([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&cpage=$matches[2]\";s:24:\"(.?.+?)(?:/([0-9]+))?/?$\";s:47:\"index.php?pagename=$matches[1]&page=$matches[2]\";s:27:\"[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\"[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\"[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\"[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"([^/]+)/embed/?$\";s:37:\"index.php?name=$matches[1]&embed=true\";s:20:\"([^/]+)/trackback/?$\";s:31:\"index.php?name=$matches[1]&tb=1\";s:40:\"([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?name=$matches[1]&feed=$matches[2]\";s:35:\"([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?name=$matches[1]&feed=$matches[2]\";s:28:\"([^/]+)/page/?([0-9]{1,})/?$\";s:44:\"index.php?name=$matches[1]&paged=$matches[2]\";s:35:\"([^/]+)/comment-page-([0-9]{1,})/?$\";s:44:\"index.php?name=$matches[1]&cpage=$matches[2]\";s:24:\"([^/]+)(?:/([0-9]+))?/?$\";s:43:\"index.php?name=$matches[1]&page=$matches[2]\";s:16:\"[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:26:\"[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:46:\"[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:41:\"[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:41:\"[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:22:\"[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";}','on'),(31,'hack_file','0','on'),(32,'blog_charset','UTF-8','on'),(33,'moderation_keys','','off'),(34,'active_plugins','a:5:{i:0;s:30:\"advanced-custom-fields/acf.php\";i:1;s:51:\"all-in-one-wp-security-and-firewall/wp-security.php\";i:2;s:36:\"contact-form-7/wp-contact-form-7.php\";i:3;s:53:\"webp-converter-for-media/webp-converter-for-media.php\";i:4;s:24:\"wordpress-seo/wp-seo.php\";}','on'),(35,'category_base','','on'),(36,'ping_sites','https://rpc.pingomatic.com/','on'),(37,'comment_max_links','2','on'),(38,'gmt_offset','0','on'),(39,'default_email_category','1','on'),(40,'recently_edited','','off'),(41,'template','homeproz','on'),(42,'stylesheet','homeproz','on'),(43,'comment_registration','0','on'),(44,'html_type','text/html','on'),(45,'use_trackback','0','on'),(46,'default_role','subscriber','on'),(47,'db_version','60421','on'),(48,'uploads_use_yearmonth_folders','1','on'),(49,'upload_path','','on'),(50,'blog_public','1','on'),(51,'default_link_category','2','on'),(52,'show_on_front','page','on'),(53,'tag_base','','on'),(54,'show_avatars','1','on'),(55,'avatar_rating','G','on'),(56,'upload_url_path','','on'),(57,'thumbnail_size_w','150','on'),(58,'thumbnail_size_h','150','on'),(59,'thumbnail_crop','1','on'),(60,'medium_size_w','300','on'),(61,'medium_size_h','300','on'),(62,'avatar_default','mystery','on'),(63,'large_size_w','1024','on'),(64,'large_size_h','1024','on'),(65,'image_default_link_type','none','on'),(66,'image_default_size','','on'),(67,'image_default_align','','on'),(68,'close_comments_for_old_posts','0','on'),(69,'close_comments_days_old','14','on'),(70,'thread_comments','1','on'),(71,'thread_comments_depth','5','on'),(72,'page_comments','0','on'),(73,'comments_per_page','50','on'),(74,'default_comments_page','newest','on'),(75,'comment_order','asc','on'),(76,'sticky_posts','a:0:{}','on'),(77,'widget_categories','a:0:{}','on'),(78,'widget_text','a:0:{}','on'),(79,'widget_rss','a:0:{}','on'),(80,'uninstall_plugins','a:3:{s:24:\"wordpress-seo/wp-seo.php\";s:14:\"__return_false\";s:53:\"webp-converter-for-media/webp-converter-for-media.php\";a:2:{i:0;s:37:\"WebpConverter\\Plugin\\UninstallHandler\";i:1;s:22:\"load_uninstall_actions\";}s:51:\"all-in-one-wp-security-and-firewall/wp-security.php\";a:2:{i:0;s:15:\"AIO_WP_Security\";i:1;s:17:\"uninstall_handler\";}}','off'),(81,'timezone_string','','on'),(82,'page_for_posts','9','on'),(83,'page_on_front','10','on'),(84,'default_post_format','0','on'),(85,'link_manager_enabled','0','on'),(86,'finished_splitting_shared_terms','1','on'),(87,'site_icon','0','on'),(88,'medium_large_size_w','768','on'),(89,'medium_large_size_h','0','on'),(90,'wp_page_for_privacy_policy','3','on'),(91,'show_comments_cookies_opt_in','1','on'),(92,'admin_email_lifespan','1779915744','on'),(93,'disallowed_keys','','off'),(94,'comment_previously_approved','1','on'),(95,'auto_plugin_theme_update_emails','a:0:{}','off'),(96,'auto_update_core_dev','enabled','on'),(97,'auto_update_core_minor','enabled','on'),(98,'auto_update_core_major','enabled','on'),(99,'wp_force_deactivated_plugins','a:0:{}','on'),(100,'wp_attachment_pages_enabled','1','on'),(101,'initial_db_version','60421','on'),(102,'wp_user_roles','a:7:{s:13:\"administrator\";a:2:{s:4:\"name\";s:13:\"Administrator\";s:12:\"capabilities\";a:62:{s:13:\"switch_themes\";b:1;s:11:\"edit_themes\";b:1;s:16:\"activate_plugins\";b:1;s:12:\"edit_plugins\";b:1;s:10:\"edit_users\";b:1;s:10:\"edit_files\";b:1;s:14:\"manage_options\";b:1;s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:6:\"import\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:8:\"level_10\";b:1;s:7:\"level_9\";b:1;s:7:\"level_8\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:12:\"delete_users\";b:1;s:12:\"create_users\";b:1;s:17:\"unfiltered_upload\";b:1;s:14:\"edit_dashboard\";b:1;s:14:\"update_plugins\";b:1;s:14:\"delete_plugins\";b:1;s:15:\"install_plugins\";b:1;s:13:\"update_themes\";b:1;s:14:\"install_themes\";b:1;s:11:\"update_core\";b:1;s:10:\"list_users\";b:1;s:12:\"remove_users\";b:1;s:13:\"promote_users\";b:1;s:18:\"edit_theme_options\";b:1;s:13:\"delete_themes\";b:1;s:6:\"export\";b:1;s:20:\"wpseo_manage_options\";b:1;}}s:6:\"editor\";a:2:{s:4:\"name\";s:6:\"Editor\";s:12:\"capabilities\";a:36:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:15:\"wpseo_bulk_edit\";b:1;s:28:\"wpseo_edit_advanced_metadata\";b:1;}}s:6:\"author\";a:2:{s:4:\"name\";s:6:\"Author\";s:12:\"capabilities\";a:10:{s:12:\"upload_files\";b:1;s:10:\"edit_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;s:22:\"delete_published_posts\";b:1;}}s:11:\"contributor\";a:2:{s:4:\"name\";s:11:\"Contributor\";s:12:\"capabilities\";a:5:{s:10:\"edit_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;}}s:10:\"subscriber\";a:2:{s:4:\"name\";s:10:\"Subscriber\";s:12:\"capabilities\";a:2:{s:4:\"read\";b:1;s:7:\"level_0\";b:1;}}s:13:\"wpseo_manager\";a:2:{s:4:\"name\";s:11:\"SEO Manager\";s:12:\"capabilities\";a:38:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:15:\"wpseo_bulk_edit\";b:1;s:28:\"wpseo_edit_advanced_metadata\";b:1;s:20:\"wpseo_manage_options\";b:1;s:23:\"view_site_health_checks\";b:1;}}s:12:\"wpseo_editor\";a:2:{s:4:\"name\";s:10:\"SEO Editor\";s:12:\"capabilities\";a:36:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:15:\"wpseo_bulk_edit\";b:1;s:28:\"wpseo_edit_advanced_metadata\";b:1;}}}','on'),(103,'fresh_site','0','off'),(104,'user_count','1','off'),(105,'widget_block','a:6:{i:2;a:1:{s:7:\"content\";s:19:\"\";}i:3;a:1:{s:7:\"content\";s:154:\"

Recent Posts

\";}i:4;a:1:{s:7:\"content\";s:227:\"

Recent Comments

\";}i:5;a:1:{s:7:\"content\";s:146:\"

Archives

\";}i:6;a:1:{s:7:\"content\";s:150:\"

Categories

\";}s:12:\"_multiwidget\";i:1;}','auto'),(106,'sidebars_widgets','a:2:{s:19:\"wp_inactive_widgets\";a:5:{i:0;s:7:\"block-2\";i:1;s:7:\"block-3\";i:2;s:7:\"block-4\";i:3;s:7:\"block-5\";i:4;s:7:\"block-6\";}s:13:\"array_version\";i:3;}','auto'),(107,'widget_pages','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(108,'widget_calendar','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(109,'widget_archives','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(110,'widget_media_audio','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(111,'widget_media_image','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(112,'widget_media_gallery','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(113,'widget_media_video','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(114,'widget_meta','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(115,'widget_search','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(116,'widget_recent-posts','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(117,'widget_recent-comments','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(118,'widget_tag_cloud','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(119,'widget_nav_menu','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(120,'widget_custom_html','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(121,'_transient_wp_core_block_css_files','a:2:{s:7:\"version\";s:5:\"6.8.3\";s:5:\"files\";a:536:{i:0;s:23:\"archives/editor-rtl.css\";i:1;s:27:\"archives/editor-rtl.min.css\";i:2;s:19:\"archives/editor.css\";i:3;s:23:\"archives/editor.min.css\";i:4;s:22:\"archives/style-rtl.css\";i:5;s:26:\"archives/style-rtl.min.css\";i:6;s:18:\"archives/style.css\";i:7;s:22:\"archives/style.min.css\";i:8;s:20:\"audio/editor-rtl.css\";i:9;s:24:\"audio/editor-rtl.min.css\";i:10;s:16:\"audio/editor.css\";i:11;s:20:\"audio/editor.min.css\";i:12;s:19:\"audio/style-rtl.css\";i:13;s:23:\"audio/style-rtl.min.css\";i:14;s:15:\"audio/style.css\";i:15;s:19:\"audio/style.min.css\";i:16;s:19:\"audio/theme-rtl.css\";i:17;s:23:\"audio/theme-rtl.min.css\";i:18;s:15:\"audio/theme.css\";i:19;s:19:\"audio/theme.min.css\";i:20;s:21:\"avatar/editor-rtl.css\";i:21;s:25:\"avatar/editor-rtl.min.css\";i:22;s:17:\"avatar/editor.css\";i:23;s:21:\"avatar/editor.min.css\";i:24;s:20:\"avatar/style-rtl.css\";i:25;s:24:\"avatar/style-rtl.min.css\";i:26;s:16:\"avatar/style.css\";i:27;s:20:\"avatar/style.min.css\";i:28;s:21:\"button/editor-rtl.css\";i:29;s:25:\"button/editor-rtl.min.css\";i:30;s:17:\"button/editor.css\";i:31;s:21:\"button/editor.min.css\";i:32;s:20:\"button/style-rtl.css\";i:33;s:24:\"button/style-rtl.min.css\";i:34;s:16:\"button/style.css\";i:35;s:20:\"button/style.min.css\";i:36;s:22:\"buttons/editor-rtl.css\";i:37;s:26:\"buttons/editor-rtl.min.css\";i:38;s:18:\"buttons/editor.css\";i:39;s:22:\"buttons/editor.min.css\";i:40;s:21:\"buttons/style-rtl.css\";i:41;s:25:\"buttons/style-rtl.min.css\";i:42;s:17:\"buttons/style.css\";i:43;s:21:\"buttons/style.min.css\";i:44;s:22:\"calendar/style-rtl.css\";i:45;s:26:\"calendar/style-rtl.min.css\";i:46;s:18:\"calendar/style.css\";i:47;s:22:\"calendar/style.min.css\";i:48;s:25:\"categories/editor-rtl.css\";i:49;s:29:\"categories/editor-rtl.min.css\";i:50;s:21:\"categories/editor.css\";i:51;s:25:\"categories/editor.min.css\";i:52;s:24:\"categories/style-rtl.css\";i:53;s:28:\"categories/style-rtl.min.css\";i:54;s:20:\"categories/style.css\";i:55;s:24:\"categories/style.min.css\";i:56;s:19:\"code/editor-rtl.css\";i:57;s:23:\"code/editor-rtl.min.css\";i:58;s:15:\"code/editor.css\";i:59;s:19:\"code/editor.min.css\";i:60;s:18:\"code/style-rtl.css\";i:61;s:22:\"code/style-rtl.min.css\";i:62;s:14:\"code/style.css\";i:63;s:18:\"code/style.min.css\";i:64;s:18:\"code/theme-rtl.css\";i:65;s:22:\"code/theme-rtl.min.css\";i:66;s:14:\"code/theme.css\";i:67;s:18:\"code/theme.min.css\";i:68;s:22:\"columns/editor-rtl.css\";i:69;s:26:\"columns/editor-rtl.min.css\";i:70;s:18:\"columns/editor.css\";i:71;s:22:\"columns/editor.min.css\";i:72;s:21:\"columns/style-rtl.css\";i:73;s:25:\"columns/style-rtl.min.css\";i:74;s:17:\"columns/style.css\";i:75;s:21:\"columns/style.min.css\";i:76;s:33:\"comment-author-name/style-rtl.css\";i:77;s:37:\"comment-author-name/style-rtl.min.css\";i:78;s:29:\"comment-author-name/style.css\";i:79;s:33:\"comment-author-name/style.min.css\";i:80;s:29:\"comment-content/style-rtl.css\";i:81;s:33:\"comment-content/style-rtl.min.css\";i:82;s:25:\"comment-content/style.css\";i:83;s:29:\"comment-content/style.min.css\";i:84;s:26:\"comment-date/style-rtl.css\";i:85;s:30:\"comment-date/style-rtl.min.css\";i:86;s:22:\"comment-date/style.css\";i:87;s:26:\"comment-date/style.min.css\";i:88;s:31:\"comment-edit-link/style-rtl.css\";i:89;s:35:\"comment-edit-link/style-rtl.min.css\";i:90;s:27:\"comment-edit-link/style.css\";i:91;s:31:\"comment-edit-link/style.min.css\";i:92;s:32:\"comment-reply-link/style-rtl.css\";i:93;s:36:\"comment-reply-link/style-rtl.min.css\";i:94;s:28:\"comment-reply-link/style.css\";i:95;s:32:\"comment-reply-link/style.min.css\";i:96;s:30:\"comment-template/style-rtl.css\";i:97;s:34:\"comment-template/style-rtl.min.css\";i:98;s:26:\"comment-template/style.css\";i:99;s:30:\"comment-template/style.min.css\";i:100;s:42:\"comments-pagination-numbers/editor-rtl.css\";i:101;s:46:\"comments-pagination-numbers/editor-rtl.min.css\";i:102;s:38:\"comments-pagination-numbers/editor.css\";i:103;s:42:\"comments-pagination-numbers/editor.min.css\";i:104;s:34:\"comments-pagination/editor-rtl.css\";i:105;s:38:\"comments-pagination/editor-rtl.min.css\";i:106;s:30:\"comments-pagination/editor.css\";i:107;s:34:\"comments-pagination/editor.min.css\";i:108;s:33:\"comments-pagination/style-rtl.css\";i:109;s:37:\"comments-pagination/style-rtl.min.css\";i:110;s:29:\"comments-pagination/style.css\";i:111;s:33:\"comments-pagination/style.min.css\";i:112;s:29:\"comments-title/editor-rtl.css\";i:113;s:33:\"comments-title/editor-rtl.min.css\";i:114;s:25:\"comments-title/editor.css\";i:115;s:29:\"comments-title/editor.min.css\";i:116;s:23:\"comments/editor-rtl.css\";i:117;s:27:\"comments/editor-rtl.min.css\";i:118;s:19:\"comments/editor.css\";i:119;s:23:\"comments/editor.min.css\";i:120;s:22:\"comments/style-rtl.css\";i:121;s:26:\"comments/style-rtl.min.css\";i:122;s:18:\"comments/style.css\";i:123;s:22:\"comments/style.min.css\";i:124;s:20:\"cover/editor-rtl.css\";i:125;s:24:\"cover/editor-rtl.min.css\";i:126;s:16:\"cover/editor.css\";i:127;s:20:\"cover/editor.min.css\";i:128;s:19:\"cover/style-rtl.css\";i:129;s:23:\"cover/style-rtl.min.css\";i:130;s:15:\"cover/style.css\";i:131;s:19:\"cover/style.min.css\";i:132;s:22:\"details/editor-rtl.css\";i:133;s:26:\"details/editor-rtl.min.css\";i:134;s:18:\"details/editor.css\";i:135;s:22:\"details/editor.min.css\";i:136;s:21:\"details/style-rtl.css\";i:137;s:25:\"details/style-rtl.min.css\";i:138;s:17:\"details/style.css\";i:139;s:21:\"details/style.min.css\";i:140;s:20:\"embed/editor-rtl.css\";i:141;s:24:\"embed/editor-rtl.min.css\";i:142;s:16:\"embed/editor.css\";i:143;s:20:\"embed/editor.min.css\";i:144;s:19:\"embed/style-rtl.css\";i:145;s:23:\"embed/style-rtl.min.css\";i:146;s:15:\"embed/style.css\";i:147;s:19:\"embed/style.min.css\";i:148;s:19:\"embed/theme-rtl.css\";i:149;s:23:\"embed/theme-rtl.min.css\";i:150;s:15:\"embed/theme.css\";i:151;s:19:\"embed/theme.min.css\";i:152;s:19:\"file/editor-rtl.css\";i:153;s:23:\"file/editor-rtl.min.css\";i:154;s:15:\"file/editor.css\";i:155;s:19:\"file/editor.min.css\";i:156;s:18:\"file/style-rtl.css\";i:157;s:22:\"file/style-rtl.min.css\";i:158;s:14:\"file/style.css\";i:159;s:18:\"file/style.min.css\";i:160;s:23:\"footnotes/style-rtl.css\";i:161;s:27:\"footnotes/style-rtl.min.css\";i:162;s:19:\"footnotes/style.css\";i:163;s:23:\"footnotes/style.min.css\";i:164;s:23:\"freeform/editor-rtl.css\";i:165;s:27:\"freeform/editor-rtl.min.css\";i:166;s:19:\"freeform/editor.css\";i:167;s:23:\"freeform/editor.min.css\";i:168;s:22:\"gallery/editor-rtl.css\";i:169;s:26:\"gallery/editor-rtl.min.css\";i:170;s:18:\"gallery/editor.css\";i:171;s:22:\"gallery/editor.min.css\";i:172;s:21:\"gallery/style-rtl.css\";i:173;s:25:\"gallery/style-rtl.min.css\";i:174;s:17:\"gallery/style.css\";i:175;s:21:\"gallery/style.min.css\";i:176;s:21:\"gallery/theme-rtl.css\";i:177;s:25:\"gallery/theme-rtl.min.css\";i:178;s:17:\"gallery/theme.css\";i:179;s:21:\"gallery/theme.min.css\";i:180;s:20:\"group/editor-rtl.css\";i:181;s:24:\"group/editor-rtl.min.css\";i:182;s:16:\"group/editor.css\";i:183;s:20:\"group/editor.min.css\";i:184;s:19:\"group/style-rtl.css\";i:185;s:23:\"group/style-rtl.min.css\";i:186;s:15:\"group/style.css\";i:187;s:19:\"group/style.min.css\";i:188;s:19:\"group/theme-rtl.css\";i:189;s:23:\"group/theme-rtl.min.css\";i:190;s:15:\"group/theme.css\";i:191;s:19:\"group/theme.min.css\";i:192;s:21:\"heading/style-rtl.css\";i:193;s:25:\"heading/style-rtl.min.css\";i:194;s:17:\"heading/style.css\";i:195;s:21:\"heading/style.min.css\";i:196;s:19:\"html/editor-rtl.css\";i:197;s:23:\"html/editor-rtl.min.css\";i:198;s:15:\"html/editor.css\";i:199;s:19:\"html/editor.min.css\";i:200;s:20:\"image/editor-rtl.css\";i:201;s:24:\"image/editor-rtl.min.css\";i:202;s:16:\"image/editor.css\";i:203;s:20:\"image/editor.min.css\";i:204;s:19:\"image/style-rtl.css\";i:205;s:23:\"image/style-rtl.min.css\";i:206;s:15:\"image/style.css\";i:207;s:19:\"image/style.min.css\";i:208;s:19:\"image/theme-rtl.css\";i:209;s:23:\"image/theme-rtl.min.css\";i:210;s:15:\"image/theme.css\";i:211;s:19:\"image/theme.min.css\";i:212;s:29:\"latest-comments/style-rtl.css\";i:213;s:33:\"latest-comments/style-rtl.min.css\";i:214;s:25:\"latest-comments/style.css\";i:215;s:29:\"latest-comments/style.min.css\";i:216;s:27:\"latest-posts/editor-rtl.css\";i:217;s:31:\"latest-posts/editor-rtl.min.css\";i:218;s:23:\"latest-posts/editor.css\";i:219;s:27:\"latest-posts/editor.min.css\";i:220;s:26:\"latest-posts/style-rtl.css\";i:221;s:30:\"latest-posts/style-rtl.min.css\";i:222;s:22:\"latest-posts/style.css\";i:223;s:26:\"latest-posts/style.min.css\";i:224;s:18:\"list/style-rtl.css\";i:225;s:22:\"list/style-rtl.min.css\";i:226;s:14:\"list/style.css\";i:227;s:18:\"list/style.min.css\";i:228;s:22:\"loginout/style-rtl.css\";i:229;s:26:\"loginout/style-rtl.min.css\";i:230;s:18:\"loginout/style.css\";i:231;s:22:\"loginout/style.min.css\";i:232;s:25:\"media-text/editor-rtl.css\";i:233;s:29:\"media-text/editor-rtl.min.css\";i:234;s:21:\"media-text/editor.css\";i:235;s:25:\"media-text/editor.min.css\";i:236;s:24:\"media-text/style-rtl.css\";i:237;s:28:\"media-text/style-rtl.min.css\";i:238;s:20:\"media-text/style.css\";i:239;s:24:\"media-text/style.min.css\";i:240;s:19:\"more/editor-rtl.css\";i:241;s:23:\"more/editor-rtl.min.css\";i:242;s:15:\"more/editor.css\";i:243;s:19:\"more/editor.min.css\";i:244;s:30:\"navigation-link/editor-rtl.css\";i:245;s:34:\"navigation-link/editor-rtl.min.css\";i:246;s:26:\"navigation-link/editor.css\";i:247;s:30:\"navigation-link/editor.min.css\";i:248;s:29:\"navigation-link/style-rtl.css\";i:249;s:33:\"navigation-link/style-rtl.min.css\";i:250;s:25:\"navigation-link/style.css\";i:251;s:29:\"navigation-link/style.min.css\";i:252;s:33:\"navigation-submenu/editor-rtl.css\";i:253;s:37:\"navigation-submenu/editor-rtl.min.css\";i:254;s:29:\"navigation-submenu/editor.css\";i:255;s:33:\"navigation-submenu/editor.min.css\";i:256;s:25:\"navigation/editor-rtl.css\";i:257;s:29:\"navigation/editor-rtl.min.css\";i:258;s:21:\"navigation/editor.css\";i:259;s:25:\"navigation/editor.min.css\";i:260;s:24:\"navigation/style-rtl.css\";i:261;s:28:\"navigation/style-rtl.min.css\";i:262;s:20:\"navigation/style.css\";i:263;s:24:\"navigation/style.min.css\";i:264;s:23:\"nextpage/editor-rtl.css\";i:265;s:27:\"nextpage/editor-rtl.min.css\";i:266;s:19:\"nextpage/editor.css\";i:267;s:23:\"nextpage/editor.min.css\";i:268;s:24:\"page-list/editor-rtl.css\";i:269;s:28:\"page-list/editor-rtl.min.css\";i:270;s:20:\"page-list/editor.css\";i:271;s:24:\"page-list/editor.min.css\";i:272;s:23:\"page-list/style-rtl.css\";i:273;s:27:\"page-list/style-rtl.min.css\";i:274;s:19:\"page-list/style.css\";i:275;s:23:\"page-list/style.min.css\";i:276;s:24:\"paragraph/editor-rtl.css\";i:277;s:28:\"paragraph/editor-rtl.min.css\";i:278;s:20:\"paragraph/editor.css\";i:279;s:24:\"paragraph/editor.min.css\";i:280;s:23:\"paragraph/style-rtl.css\";i:281;s:27:\"paragraph/style-rtl.min.css\";i:282;s:19:\"paragraph/style.css\";i:283;s:23:\"paragraph/style.min.css\";i:284;s:35:\"post-author-biography/style-rtl.css\";i:285;s:39:\"post-author-biography/style-rtl.min.css\";i:286;s:31:\"post-author-biography/style.css\";i:287;s:35:\"post-author-biography/style.min.css\";i:288;s:30:\"post-author-name/style-rtl.css\";i:289;s:34:\"post-author-name/style-rtl.min.css\";i:290;s:26:\"post-author-name/style.css\";i:291;s:30:\"post-author-name/style.min.css\";i:292;s:26:\"post-author/editor-rtl.css\";i:293;s:30:\"post-author/editor-rtl.min.css\";i:294;s:22:\"post-author/editor.css\";i:295;s:26:\"post-author/editor.min.css\";i:296;s:25:\"post-author/style-rtl.css\";i:297;s:29:\"post-author/style-rtl.min.css\";i:298;s:21:\"post-author/style.css\";i:299;s:25:\"post-author/style.min.css\";i:300;s:33:\"post-comments-form/editor-rtl.css\";i:301;s:37:\"post-comments-form/editor-rtl.min.css\";i:302;s:29:\"post-comments-form/editor.css\";i:303;s:33:\"post-comments-form/editor.min.css\";i:304;s:32:\"post-comments-form/style-rtl.css\";i:305;s:36:\"post-comments-form/style-rtl.min.css\";i:306;s:28:\"post-comments-form/style.css\";i:307;s:32:\"post-comments-form/style.min.css\";i:308;s:26:\"post-content/style-rtl.css\";i:309;s:30:\"post-content/style-rtl.min.css\";i:310;s:22:\"post-content/style.css\";i:311;s:26:\"post-content/style.min.css\";i:312;s:23:\"post-date/style-rtl.css\";i:313;s:27:\"post-date/style-rtl.min.css\";i:314;s:19:\"post-date/style.css\";i:315;s:23:\"post-date/style.min.css\";i:316;s:27:\"post-excerpt/editor-rtl.css\";i:317;s:31:\"post-excerpt/editor-rtl.min.css\";i:318;s:23:\"post-excerpt/editor.css\";i:319;s:27:\"post-excerpt/editor.min.css\";i:320;s:26:\"post-excerpt/style-rtl.css\";i:321;s:30:\"post-excerpt/style-rtl.min.css\";i:322;s:22:\"post-excerpt/style.css\";i:323;s:26:\"post-excerpt/style.min.css\";i:324;s:34:\"post-featured-image/editor-rtl.css\";i:325;s:38:\"post-featured-image/editor-rtl.min.css\";i:326;s:30:\"post-featured-image/editor.css\";i:327;s:34:\"post-featured-image/editor.min.css\";i:328;s:33:\"post-featured-image/style-rtl.css\";i:329;s:37:\"post-featured-image/style-rtl.min.css\";i:330;s:29:\"post-featured-image/style.css\";i:331;s:33:\"post-featured-image/style.min.css\";i:332;s:34:\"post-navigation-link/style-rtl.css\";i:333;s:38:\"post-navigation-link/style-rtl.min.css\";i:334;s:30:\"post-navigation-link/style.css\";i:335;s:34:\"post-navigation-link/style.min.css\";i:336;s:27:\"post-template/style-rtl.css\";i:337;s:31:\"post-template/style-rtl.min.css\";i:338;s:23:\"post-template/style.css\";i:339;s:27:\"post-template/style.min.css\";i:340;s:24:\"post-terms/style-rtl.css\";i:341;s:28:\"post-terms/style-rtl.min.css\";i:342;s:20:\"post-terms/style.css\";i:343;s:24:\"post-terms/style.min.css\";i:344;s:24:\"post-title/style-rtl.css\";i:345;s:28:\"post-title/style-rtl.min.css\";i:346;s:20:\"post-title/style.css\";i:347;s:24:\"post-title/style.min.css\";i:348;s:26:\"preformatted/style-rtl.css\";i:349;s:30:\"preformatted/style-rtl.min.css\";i:350;s:22:\"preformatted/style.css\";i:351;s:26:\"preformatted/style.min.css\";i:352;s:24:\"pullquote/editor-rtl.css\";i:353;s:28:\"pullquote/editor-rtl.min.css\";i:354;s:20:\"pullquote/editor.css\";i:355;s:24:\"pullquote/editor.min.css\";i:356;s:23:\"pullquote/style-rtl.css\";i:357;s:27:\"pullquote/style-rtl.min.css\";i:358;s:19:\"pullquote/style.css\";i:359;s:23:\"pullquote/style.min.css\";i:360;s:23:\"pullquote/theme-rtl.css\";i:361;s:27:\"pullquote/theme-rtl.min.css\";i:362;s:19:\"pullquote/theme.css\";i:363;s:23:\"pullquote/theme.min.css\";i:364;s:39:\"query-pagination-numbers/editor-rtl.css\";i:365;s:43:\"query-pagination-numbers/editor-rtl.min.css\";i:366;s:35:\"query-pagination-numbers/editor.css\";i:367;s:39:\"query-pagination-numbers/editor.min.css\";i:368;s:31:\"query-pagination/editor-rtl.css\";i:369;s:35:\"query-pagination/editor-rtl.min.css\";i:370;s:27:\"query-pagination/editor.css\";i:371;s:31:\"query-pagination/editor.min.css\";i:372;s:30:\"query-pagination/style-rtl.css\";i:373;s:34:\"query-pagination/style-rtl.min.css\";i:374;s:26:\"query-pagination/style.css\";i:375;s:30:\"query-pagination/style.min.css\";i:376;s:25:\"query-title/style-rtl.css\";i:377;s:29:\"query-title/style-rtl.min.css\";i:378;s:21:\"query-title/style.css\";i:379;s:25:\"query-title/style.min.css\";i:380;s:25:\"query-total/style-rtl.css\";i:381;s:29:\"query-total/style-rtl.min.css\";i:382;s:21:\"query-total/style.css\";i:383;s:25:\"query-total/style.min.css\";i:384;s:20:\"query/editor-rtl.css\";i:385;s:24:\"query/editor-rtl.min.css\";i:386;s:16:\"query/editor.css\";i:387;s:20:\"query/editor.min.css\";i:388;s:19:\"quote/style-rtl.css\";i:389;s:23:\"quote/style-rtl.min.css\";i:390;s:15:\"quote/style.css\";i:391;s:19:\"quote/style.min.css\";i:392;s:19:\"quote/theme-rtl.css\";i:393;s:23:\"quote/theme-rtl.min.css\";i:394;s:15:\"quote/theme.css\";i:395;s:19:\"quote/theme.min.css\";i:396;s:23:\"read-more/style-rtl.css\";i:397;s:27:\"read-more/style-rtl.min.css\";i:398;s:19:\"read-more/style.css\";i:399;s:23:\"read-more/style.min.css\";i:400;s:18:\"rss/editor-rtl.css\";i:401;s:22:\"rss/editor-rtl.min.css\";i:402;s:14:\"rss/editor.css\";i:403;s:18:\"rss/editor.min.css\";i:404;s:17:\"rss/style-rtl.css\";i:405;s:21:\"rss/style-rtl.min.css\";i:406;s:13:\"rss/style.css\";i:407;s:17:\"rss/style.min.css\";i:408;s:21:\"search/editor-rtl.css\";i:409;s:25:\"search/editor-rtl.min.css\";i:410;s:17:\"search/editor.css\";i:411;s:21:\"search/editor.min.css\";i:412;s:20:\"search/style-rtl.css\";i:413;s:24:\"search/style-rtl.min.css\";i:414;s:16:\"search/style.css\";i:415;s:20:\"search/style.min.css\";i:416;s:20:\"search/theme-rtl.css\";i:417;s:24:\"search/theme-rtl.min.css\";i:418;s:16:\"search/theme.css\";i:419;s:20:\"search/theme.min.css\";i:420;s:24:\"separator/editor-rtl.css\";i:421;s:28:\"separator/editor-rtl.min.css\";i:422;s:20:\"separator/editor.css\";i:423;s:24:\"separator/editor.min.css\";i:424;s:23:\"separator/style-rtl.css\";i:425;s:27:\"separator/style-rtl.min.css\";i:426;s:19:\"separator/style.css\";i:427;s:23:\"separator/style.min.css\";i:428;s:23:\"separator/theme-rtl.css\";i:429;s:27:\"separator/theme-rtl.min.css\";i:430;s:19:\"separator/theme.css\";i:431;s:23:\"separator/theme.min.css\";i:432;s:24:\"shortcode/editor-rtl.css\";i:433;s:28:\"shortcode/editor-rtl.min.css\";i:434;s:20:\"shortcode/editor.css\";i:435;s:24:\"shortcode/editor.min.css\";i:436;s:24:\"site-logo/editor-rtl.css\";i:437;s:28:\"site-logo/editor-rtl.min.css\";i:438;s:20:\"site-logo/editor.css\";i:439;s:24:\"site-logo/editor.min.css\";i:440;s:23:\"site-logo/style-rtl.css\";i:441;s:27:\"site-logo/style-rtl.min.css\";i:442;s:19:\"site-logo/style.css\";i:443;s:23:\"site-logo/style.min.css\";i:444;s:27:\"site-tagline/editor-rtl.css\";i:445;s:31:\"site-tagline/editor-rtl.min.css\";i:446;s:23:\"site-tagline/editor.css\";i:447;s:27:\"site-tagline/editor.min.css\";i:448;s:26:\"site-tagline/style-rtl.css\";i:449;s:30:\"site-tagline/style-rtl.min.css\";i:450;s:22:\"site-tagline/style.css\";i:451;s:26:\"site-tagline/style.min.css\";i:452;s:25:\"site-title/editor-rtl.css\";i:453;s:29:\"site-title/editor-rtl.min.css\";i:454;s:21:\"site-title/editor.css\";i:455;s:25:\"site-title/editor.min.css\";i:456;s:24:\"site-title/style-rtl.css\";i:457;s:28:\"site-title/style-rtl.min.css\";i:458;s:20:\"site-title/style.css\";i:459;s:24:\"site-title/style.min.css\";i:460;s:26:\"social-link/editor-rtl.css\";i:461;s:30:\"social-link/editor-rtl.min.css\";i:462;s:22:\"social-link/editor.css\";i:463;s:26:\"social-link/editor.min.css\";i:464;s:27:\"social-links/editor-rtl.css\";i:465;s:31:\"social-links/editor-rtl.min.css\";i:466;s:23:\"social-links/editor.css\";i:467;s:27:\"social-links/editor.min.css\";i:468;s:26:\"social-links/style-rtl.css\";i:469;s:30:\"social-links/style-rtl.min.css\";i:470;s:22:\"social-links/style.css\";i:471;s:26:\"social-links/style.min.css\";i:472;s:21:\"spacer/editor-rtl.css\";i:473;s:25:\"spacer/editor-rtl.min.css\";i:474;s:17:\"spacer/editor.css\";i:475;s:21:\"spacer/editor.min.css\";i:476;s:20:\"spacer/style-rtl.css\";i:477;s:24:\"spacer/style-rtl.min.css\";i:478;s:16:\"spacer/style.css\";i:479;s:20:\"spacer/style.min.css\";i:480;s:20:\"table/editor-rtl.css\";i:481;s:24:\"table/editor-rtl.min.css\";i:482;s:16:\"table/editor.css\";i:483;s:20:\"table/editor.min.css\";i:484;s:19:\"table/style-rtl.css\";i:485;s:23:\"table/style-rtl.min.css\";i:486;s:15:\"table/style.css\";i:487;s:19:\"table/style.min.css\";i:488;s:19:\"table/theme-rtl.css\";i:489;s:23:\"table/theme-rtl.min.css\";i:490;s:15:\"table/theme.css\";i:491;s:19:\"table/theme.min.css\";i:492;s:24:\"tag-cloud/editor-rtl.css\";i:493;s:28:\"tag-cloud/editor-rtl.min.css\";i:494;s:20:\"tag-cloud/editor.css\";i:495;s:24:\"tag-cloud/editor.min.css\";i:496;s:23:\"tag-cloud/style-rtl.css\";i:497;s:27:\"tag-cloud/style-rtl.min.css\";i:498;s:19:\"tag-cloud/style.css\";i:499;s:23:\"tag-cloud/style.min.css\";i:500;s:28:\"template-part/editor-rtl.css\";i:501;s:32:\"template-part/editor-rtl.min.css\";i:502;s:24:\"template-part/editor.css\";i:503;s:28:\"template-part/editor.min.css\";i:504;s:27:\"template-part/theme-rtl.css\";i:505;s:31:\"template-part/theme-rtl.min.css\";i:506;s:23:\"template-part/theme.css\";i:507;s:27:\"template-part/theme.min.css\";i:508;s:30:\"term-description/style-rtl.css\";i:509;s:34:\"term-description/style-rtl.min.css\";i:510;s:26:\"term-description/style.css\";i:511;s:30:\"term-description/style.min.css\";i:512;s:27:\"text-columns/editor-rtl.css\";i:513;s:31:\"text-columns/editor-rtl.min.css\";i:514;s:23:\"text-columns/editor.css\";i:515;s:27:\"text-columns/editor.min.css\";i:516;s:26:\"text-columns/style-rtl.css\";i:517;s:30:\"text-columns/style-rtl.min.css\";i:518;s:22:\"text-columns/style.css\";i:519;s:26:\"text-columns/style.min.css\";i:520;s:19:\"verse/style-rtl.css\";i:521;s:23:\"verse/style-rtl.min.css\";i:522;s:15:\"verse/style.css\";i:523;s:19:\"verse/style.min.css\";i:524;s:20:\"video/editor-rtl.css\";i:525;s:24:\"video/editor-rtl.min.css\";i:526;s:16:\"video/editor.css\";i:527;s:20:\"video/editor.min.css\";i:528;s:19:\"video/style-rtl.css\";i:529;s:23:\"video/style-rtl.min.css\";i:530;s:15:\"video/style.css\";i:531;s:19:\"video/style.min.css\";i:532;s:19:\"video/theme-rtl.css\";i:533;s:23:\"video/theme-rtl.min.css\";i:534;s:15:\"video/theme.css\";i:535;s:19:\"video/theme.min.css\";}}','on'),(124,'_transient_doing_cron','1764372648.6652250289916992187500','on'),(125,'theme_mods_twentytwentyfive','a:2:{s:18:\"custom_css_post_id\";i:-1;s:16:\"sidebars_widgets\";a:2:{s:4:\"time\";i:1764367183;s:4:\"data\";a:3:{s:19:\"wp_inactive_widgets\";a:0:{}s:9:\"sidebar-1\";a:3:{i:0;s:7:\"block-2\";i:1;s:7:\"block-3\";i:2;s:7:\"block-4\";}s:9:\"sidebar-2\";a:2:{i:0;s:7:\"block-5\";i:1;s:7:\"block-6\";}}}}','off'),(126,'_transient_wp_styles_for_blocks','a:2:{s:4:\"hash\";s:32:\"64ad95698215776f80fa1e80f2eb5417\";s:6:\"blocks\";a:7:{s:11:\"core/button\";s:0:\"\";s:14:\"core/site-logo\";s:0:\"\";s:18:\"core/post-template\";s:0:\"\";s:12:\"core/columns\";s:0:\"\";s:14:\"core/pullquote\";s:121:\":root :where(.wp-block-pullquote){font-size: clamp(0.984em, 0.984rem + ((1vw - 0.2em) * 0.938), 1.5em);line-height: 1.6;}\";s:15:\"core/site-title\";s:89:\":root :where(.wp-block-site-title){font-family: var(--wp--preset--font-family--display);}\";s:15:\"core/navigation\";s:86:\":root :where(.wp-block-navigation){font-family: var(--wp--preset--font-family--body);}\";}}','on'),(129,'category_children','a:0:{}','auto'),(132,'_site_transient_update_themes','O:8:\"stdClass\":5:{s:12:\"last_checked\";i:1764371969;s:7:\"checked\";a:4:{s:8:\"homeproz\";s:5:\"1.0.0\";s:16:\"twentytwentyfive\";s:3:\"1.3\";s:16:\"twentytwentyfour\";s:3:\"1.3\";s:17:\"twentytwentythree\";s:3:\"1.6\";}s:8:\"response\";a:0:{}s:9:\"no_update\";a:3:{s:16:\"twentytwentyfive\";a:6:{s:5:\"theme\";s:16:\"twentytwentyfive\";s:11:\"new_version\";s:3:\"1.3\";s:3:\"url\";s:46:\"https://wordpress.org/themes/twentytwentyfive/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/theme/twentytwentyfive.1.3.zip\";s:8:\"requires\";s:3:\"6.7\";s:12:\"requires_php\";s:3:\"7.2\";}s:16:\"twentytwentyfour\";a:6:{s:5:\"theme\";s:16:\"twentytwentyfour\";s:11:\"new_version\";s:3:\"1.3\";s:3:\"url\";s:46:\"https://wordpress.org/themes/twentytwentyfour/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/theme/twentytwentyfour.1.3.zip\";s:8:\"requires\";s:3:\"6.4\";s:12:\"requires_php\";s:3:\"7.0\";}s:17:\"twentytwentythree\";a:6:{s:5:\"theme\";s:17:\"twentytwentythree\";s:11:\"new_version\";s:3:\"1.6\";s:3:\"url\";s:47:\"https://wordpress.org/themes/twentytwentythree/\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/theme/twentytwentythree.1.6.zip\";s:8:\"requires\";s:3:\"6.1\";s:12:\"requires_php\";s:3:\"5.6\";}}s:12:\"translations\";a:0:{}}','off'),(133,'current_theme','HomeProz','auto'),(134,'theme_switched','','auto'),(135,'theme_mods_homeproz','a:2:{s:18:\"nav_menu_locations\";a:1:{s:7:\"primary\";i:15;}s:18:\"custom_css_post_id\";i:-1;}','auto'),(141,'property_type_children','a:0:{}','auto'),(144,'property_status_children','a:0:{}','auto'),(150,'property_location_children','a:0:{}','auto'),(152,'_site_transient_update_core','O:8:\"stdClass\":4:{s:7:\"updates\";a:1:{i:0;O:8:\"stdClass\":10:{s:8:\"response\";s:6:\"latest\";s:8:\"download\";s:59:\"https://downloads.wordpress.org/release/wordpress-6.8.3.zip\";s:6:\"locale\";s:5:\"en_US\";s:8:\"packages\";O:8:\"stdClass\":5:{s:4:\"full\";s:59:\"https://downloads.wordpress.org/release/wordpress-6.8.3.zip\";s:10:\"no_content\";s:70:\"https://downloads.wordpress.org/release/wordpress-6.8.3-no-content.zip\";s:11:\"new_bundled\";s:71:\"https://downloads.wordpress.org/release/wordpress-6.8.3-new-bundled.zip\";s:7:\"partial\";s:0:\"\";s:8:\"rollback\";s:0:\"\";}s:7:\"current\";s:5:\"6.8.3\";s:7:\"version\";s:5:\"6.8.3\";s:11:\"php_version\";s:6:\"7.2.24\";s:13:\"mysql_version\";s:5:\"5.5.5\";s:11:\"new_bundled\";s:3:\"6.7\";s:15:\"partial_version\";s:0:\"\";}}s:12:\"last_checked\";i:1764371969;s:15:\"version_checked\";s:5:\"6.8.3\";s:12:\"translations\";a:0:{}}','off'),(156,'acf_first_activated_version','6.6.2','on'),(157,'acf_site_health','{\"event_first_activated\":1764369116,\"last_updated\":1764369116}','off'),(162,'wpcf7','a:2:{s:7:\"version\";s:5:\"6.1.3\";s:13:\"bulk_validate\";a:4:{s:9:\"timestamp\";i:1764370639;s:7:\"version\";s:5:\"6.1.3\";s:11:\"count_valid\";i:1;s:13:\"count_invalid\";i:0;}}','auto'),(165,'_site_transient_timeout_theme_roots','1764373103','off'),(166,'_site_transient_theme_roots','a:4:{s:8:\"homeproz\";s:7:\"/themes\";s:16:\"twentytwentyfive\";s:7:\"/themes\";s:16:\"twentytwentyfour\";s:7:\"/themes\";s:17:\"twentytwentythree\";s:7:\"/themes\";}','off'),(167,'yoast_migrations_free','a:1:{s:7:\"version\";s:4:\"26.4\";}','auto'),(168,'wpseo','a:120:{s:8:\"tracking\";b:0;s:16:\"toggled_tracking\";b:0;s:22:\"license_server_version\";b:0;s:15:\"ms_defaults_set\";b:0;s:40:\"ignore_search_engines_discouraged_notice\";b:0;s:19:\"indexing_first_time\";b:1;s:16:\"indexing_started\";b:0;s:15:\"indexing_reason\";s:24:\"attachments_made_enabled\";s:29:\"indexables_indexing_completed\";b:0;s:13:\"index_now_key\";s:0:\"\";s:7:\"version\";s:4:\"26.4\";s:16:\"previous_version\";s:0:\"\";s:20:\"disableadvanced_meta\";b:1;s:30:\"enable_headless_rest_endpoints\";b:1;s:17:\"ryte_indexability\";b:0;s:11:\"baiduverify\";s:0:\"\";s:12:\"googleverify\";s:0:\"\";s:8:\"msverify\";s:0:\"\";s:12:\"yandexverify\";s:0:\"\";s:12:\"ahrefsverify\";s:0:\"\";s:9:\"site_type\";s:0:\"\";s:20:\"has_multiple_authors\";s:0:\"\";s:16:\"environment_type\";s:0:\"\";s:23:\"content_analysis_active\";b:1;s:23:\"keyword_analysis_active\";b:1;s:34:\"inclusive_language_analysis_active\";b:0;s:21:\"enable_admin_bar_menu\";b:1;s:26:\"enable_cornerstone_content\";b:1;s:18:\"enable_xml_sitemap\";b:1;s:24:\"enable_text_link_counter\";b:1;s:16:\"enable_index_now\";b:1;s:19:\"enable_ai_generator\";b:1;s:22:\"ai_enabled_pre_default\";b:0;s:22:\"show_onboarding_notice\";b:1;s:18:\"first_activated_on\";i:1764371307;s:13:\"myyoast-oauth\";b:0;s:26:\"semrush_integration_active\";b:1;s:14:\"semrush_tokens\";a:0:{}s:20:\"semrush_country_code\";s:2:\"us\";s:19:\"permalink_structure\";s:0:\"\";s:8:\"home_url\";s:0:\"\";s:18:\"dynamic_permalinks\";b:0;s:17:\"category_base_url\";s:0:\"\";s:12:\"tag_base_url\";s:0:\"\";s:21:\"custom_taxonomy_slugs\";a:0:{}s:29:\"enable_enhanced_slack_sharing\";b:1;s:23:\"enable_metabox_insights\";b:1;s:23:\"enable_link_suggestions\";b:1;s:26:\"algolia_integration_active\";b:0;s:14:\"import_cursors\";a:0:{}s:13:\"workouts_data\";a:1:{s:13:\"configuration\";a:1:{s:13:\"finishedSteps\";a:0:{}}}s:28:\"configuration_finished_steps\";a:0:{}s:36:\"dismiss_configuration_workout_notice\";b:0;s:34:\"dismiss_premium_deactivated_notice\";b:0;s:19:\"importing_completed\";a:0:{}s:26:\"wincher_integration_active\";b:1;s:14:\"wincher_tokens\";a:0:{}s:36:\"wincher_automatically_add_keyphrases\";b:0;s:18:\"wincher_website_id\";s:0:\"\";s:18:\"first_time_install\";b:1;s:34:\"should_redirect_after_install_free\";b:0;s:34:\"activation_redirect_timestamp_free\";i:1764371307;s:18:\"remove_feed_global\";b:0;s:27:\"remove_feed_global_comments\";b:0;s:25:\"remove_feed_post_comments\";b:0;s:19:\"remove_feed_authors\";b:0;s:22:\"remove_feed_categories\";b:0;s:16:\"remove_feed_tags\";b:0;s:29:\"remove_feed_custom_taxonomies\";b:0;s:22:\"remove_feed_post_types\";b:0;s:18:\"remove_feed_search\";b:0;s:21:\"remove_atom_rdf_feeds\";b:0;s:17:\"remove_shortlinks\";b:0;s:21:\"remove_rest_api_links\";b:0;s:20:\"remove_rsd_wlw_links\";b:0;s:19:\"remove_oembed_links\";b:0;s:16:\"remove_generator\";b:0;s:20:\"remove_emoji_scripts\";b:0;s:24:\"remove_powered_by_header\";b:0;s:22:\"remove_pingback_header\";b:0;s:28:\"clean_campaign_tracking_urls\";b:0;s:16:\"clean_permalinks\";b:0;s:32:\"clean_permalinks_extra_variables\";s:0:\"\";s:14:\"search_cleanup\";b:0;s:20:\"search_cleanup_emoji\";b:0;s:23:\"search_cleanup_patterns\";b:0;s:22:\"search_character_limit\";i:50;s:20:\"deny_search_crawling\";b:0;s:21:\"deny_wp_json_crawling\";b:0;s:20:\"deny_adsbot_crawling\";b:0;s:19:\"deny_ccbot_crawling\";b:0;s:29:\"deny_google_extended_crawling\";b:0;s:20:\"deny_gptbot_crawling\";b:0;s:27:\"redirect_search_pretty_urls\";b:0;s:29:\"least_readability_ignore_list\";a:0:{}s:27:\"least_seo_score_ignore_list\";a:0:{}s:23:\"most_linked_ignore_list\";a:0:{}s:24:\"least_linked_ignore_list\";a:0:{}s:28:\"indexables_page_reading_list\";a:5:{i:0;b:0;i:1;b:0;i:2;b:0;i:3;b:0;i:4;b:0;}s:25:\"indexables_overview_state\";s:21:\"dashboard-not-visited\";s:28:\"last_known_public_post_types\";a:0:{}s:28:\"last_known_public_taxonomies\";a:0:{}s:23:\"last_known_no_unindexed\";a:0:{}s:14:\"new_post_types\";a:0:{}s:14:\"new_taxonomies\";a:0:{}s:34:\"show_new_content_type_notification\";b:0;s:44:\"site_kit_configuration_permanently_dismissed\";b:0;s:18:\"site_kit_connected\";b:0;s:37:\"site_kit_tracking_setup_widget_loaded\";s:2:\"no\";s:41:\"site_kit_tracking_first_interaction_stage\";s:0:\"\";s:40:\"site_kit_tracking_last_interaction_stage\";s:0:\"\";s:52:\"site_kit_tracking_setup_widget_temporarily_dismissed\";s:2:\"no\";s:52:\"site_kit_tracking_setup_widget_permanently_dismissed\";s:2:\"no\";s:31:\"google_site_kit_feature_enabled\";b:0;s:25:\"ai_free_sparks_started_on\";N;s:15:\"enable_llms_txt\";b:0;s:15:\"last_updated_on\";b:0;s:17:\"default_seo_title\";a:0:{}s:21:\"default_seo_meta_desc\";a:0:{}s:18:\"first_activated_by\";i:0;}','auto'),(169,'wpseo_titles','a:173:{s:17:\"forcerewritetitle\";b:0;s:9:\"separator\";s:7:\"sc-dash\";s:16:\"title-home-wpseo\";s:47:\"HomeProz Real Estate | Albert Lea MN Properties\";s:18:\"title-author-wpseo\";s:41:\"%%name%%, Author at %%sitename%% %%page%%\";s:19:\"title-archive-wpseo\";s:38:\"%%date%% %%page%% %%sep%% %%sitename%%\";s:18:\"title-search-wpseo\";s:63:\"You searched for %%searchphrase%% %%page%% %%sep%% %%sitename%%\";s:15:\"title-404-wpseo\";s:35:\"Page not found %%sep%% %%sitename%%\";s:25:\"social-title-author-wpseo\";s:8:\"%%name%%\";s:26:\"social-title-archive-wpseo\";s:8:\"%%date%%\";s:31:\"social-description-author-wpseo\";s:0:\"\";s:32:\"social-description-archive-wpseo\";s:0:\"\";s:29:\"social-image-url-author-wpseo\";s:0:\"\";s:30:\"social-image-url-archive-wpseo\";s:0:\"\";s:28:\"social-image-id-author-wpseo\";i:0;s:29:\"social-image-id-archive-wpseo\";i:0;s:19:\"metadesc-home-wpseo\";s:120:\"HomeProz Real Estate - Your trusted partner for buying and selling homes in Albert Lea, Minnesota and surrounding areas.\";s:21:\"metadesc-author-wpseo\";s:0:\"\";s:22:\"metadesc-archive-wpseo\";s:0:\"\";s:9:\"rssbefore\";s:0:\"\";s:8:\"rssafter\";s:53:\"The post %%POSTLINK%% appeared first on %%BLOGLINK%%.\";s:20:\"noindex-author-wpseo\";b:0;s:28:\"noindex-author-noposts-wpseo\";b:0;s:21:\"noindex-archive-wpseo\";b:0;s:14:\"disable-author\";b:0;s:12:\"disable-date\";b:0;s:19:\"disable-post_format\";b:0;s:18:\"disable-attachment\";b:0;s:20:\"breadcrumbs-404crumb\";s:25:\"Error 404: Page not found\";s:29:\"breadcrumbs-display-blog-page\";b:0;s:20:\"breadcrumbs-boldlast\";b:0;s:25:\"breadcrumbs-archiveprefix\";s:12:\"Archives for\";s:18:\"breadcrumbs-enable\";b:0;s:16:\"breadcrumbs-home\";s:4:\"Home\";s:18:\"breadcrumbs-prefix\";s:0:\"\";s:24:\"breadcrumbs-searchprefix\";s:16:\"You searched for\";s:15:\"breadcrumbs-sep\";s:2:\"»\";s:12:\"website_name\";s:0:\"\";s:11:\"person_name\";s:0:\"\";s:11:\"person_logo\";s:0:\"\";s:22:\"alternate_website_name\";s:0:\"\";s:12:\"company_logo\";s:0:\"\";s:12:\"company_name\";s:0:\"\";s:22:\"company_alternate_name\";s:0:\"\";s:17:\"company_or_person\";s:7:\"company\";s:25:\"company_or_person_user_id\";b:0;s:17:\"stripcategorybase\";b:0;s:26:\"open_graph_frontpage_title\";s:12:\"%%sitename%%\";s:25:\"open_graph_frontpage_desc\";s:0:\"\";s:26:\"open_graph_frontpage_image\";s:0:\"\";s:24:\"publishing_principles_id\";i:0;s:25:\"ownership_funding_info_id\";i:0;s:29:\"actionable_feedback_policy_id\";i:0;s:21:\"corrections_policy_id\";i:0;s:16:\"ethics_policy_id\";i:0;s:19:\"diversity_policy_id\";i:0;s:28:\"diversity_staffing_report_id\";i:0;s:15:\"org-description\";s:0:\"\";s:9:\"org-email\";s:0:\"\";s:9:\"org-phone\";s:0:\"\";s:14:\"org-legal-name\";s:0:\"\";s:17:\"org-founding-date\";s:0:\"\";s:20:\"org-number-employees\";s:0:\"\";s:10:\"org-vat-id\";s:0:\"\";s:10:\"org-tax-id\";s:0:\"\";s:7:\"org-iso\";s:0:\"\";s:8:\"org-duns\";s:0:\"\";s:11:\"org-leicode\";s:0:\"\";s:9:\"org-naics\";s:0:\"\";s:10:\"title-post\";s:39:\"%%title%% %%page%% %%sep%% %%sitename%%\";s:13:\"metadesc-post\";s:0:\"\";s:12:\"noindex-post\";b:0;s:23:\"display-metabox-pt-post\";b:0;s:23:\"post_types-post-maintax\";i:0;s:21:\"schema-page-type-post\";s:7:\"WebPage\";s:24:\"schema-article-type-post\";s:7:\"Article\";s:17:\"social-title-post\";s:9:\"%%title%%\";s:23:\"social-description-post\";s:0:\"\";s:21:\"social-image-url-post\";s:0:\"\";s:20:\"social-image-id-post\";i:0;s:10:\"title-page\";s:39:\"%%title%% %%page%% %%sep%% %%sitename%%\";s:13:\"metadesc-page\";s:0:\"\";s:12:\"noindex-page\";b:0;s:23:\"display-metabox-pt-page\";b:0;s:23:\"post_types-page-maintax\";i:0;s:21:\"schema-page-type-page\";s:7:\"WebPage\";s:24:\"schema-article-type-page\";s:4:\"None\";s:17:\"social-title-page\";s:9:\"%%title%%\";s:23:\"social-description-page\";s:0:\"\";s:21:\"social-image-url-page\";s:0:\"\";s:20:\"social-image-id-page\";i:0;s:16:\"title-attachment\";s:39:\"%%title%% %%page%% %%sep%% %%sitename%%\";s:19:\"metadesc-attachment\";s:0:\"\";s:18:\"noindex-attachment\";b:0;s:29:\"display-metabox-pt-attachment\";b:0;s:29:\"post_types-attachment-maintax\";i:0;s:27:\"schema-page-type-attachment\";s:7:\"WebPage\";s:30:\"schema-article-type-attachment\";s:4:\"None\";s:18:\"title-tax-category\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:21:\"metadesc-tax-category\";s:0:\"\";s:28:\"display-metabox-tax-category\";b:0;s:20:\"noindex-tax-category\";b:0;s:25:\"social-title-tax-category\";s:23:\"%%term_title%% Archives\";s:31:\"social-description-tax-category\";s:0:\"\";s:29:\"social-image-url-tax-category\";s:0:\"\";s:28:\"social-image-id-tax-category\";i:0;s:26:\"taxonomy-category-ptparent\";i:0;s:18:\"title-tax-post_tag\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:21:\"metadesc-tax-post_tag\";s:0:\"\";s:28:\"display-metabox-tax-post_tag\";b:0;s:20:\"noindex-tax-post_tag\";b:0;s:25:\"social-title-tax-post_tag\";s:23:\"%%term_title%% Archives\";s:31:\"social-description-tax-post_tag\";s:0:\"\";s:29:\"social-image-url-tax-post_tag\";s:0:\"\";s:28:\"social-image-id-tax-post_tag\";i:0;s:26:\"taxonomy-post_tag-ptparent\";i:0;s:21:\"title-tax-post_format\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:24:\"metadesc-tax-post_format\";s:0:\"\";s:31:\"display-metabox-tax-post_format\";b:0;s:23:\"noindex-tax-post_format\";b:0;s:28:\"social-title-tax-post_format\";s:23:\"%%term_title%% Archives\";s:34:\"social-description-tax-post_format\";s:0:\"\";s:32:\"social-image-url-tax-post_format\";s:0:\"\";s:31:\"social-image-id-tax-post_format\";i:0;s:29:\"taxonomy-post_format-ptparent\";i:0;s:14:\"title-property\";s:30:\"%%title%% %%sep%% %%sitename%%\";s:17:\"metadesc-property\";s:106:\"View property details, photos, and features for %%title%%. Contact HomeProz Real Estate in Albert Lea, MN.\";s:16:\"noindex-property\";b:0;s:27:\"display-metabox-pt-property\";b:0;s:27:\"post_types-property-maintax\";i:0;s:25:\"schema-page-type-property\";s:7:\"WebPage\";s:28:\"schema-article-type-property\";s:4:\"None\";s:21:\"social-title-property\";s:9:\"%%title%%\";s:27:\"social-description-property\";s:0:\"\";s:25:\"social-image-url-property\";s:0:\"\";s:24:\"social-image-id-property\";i:0;s:24:\"title-ptarchive-property\";s:49:\"Properties For Sale %%page%% %%sep%% %%sitename%%\";s:27:\"metadesc-ptarchive-property\";s:126:\"Browse all properties for sale in Albert Lea, Minnesota and surrounding areas. Find your dream home with HomeProz Real Estate.\";s:26:\"bctitle-ptarchive-property\";s:0:\"\";s:26:\"noindex-ptarchive-property\";b:0;s:31:\"social-title-ptarchive-property\";s:21:\"%%pt_plural%% Archive\";s:37:\"social-description-ptarchive-property\";s:0:\"\";s:35:\"social-image-url-ptarchive-property\";s:0:\"\";s:34:\"social-image-id-ptarchive-property\";i:0;s:23:\"title-tax-property_type\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:26:\"metadesc-tax-property_type\";s:0:\"\";s:33:\"display-metabox-tax-property_type\";b:0;s:25:\"noindex-tax-property_type\";b:0;s:30:\"social-title-tax-property_type\";s:23:\"%%term_title%% Archives\";s:36:\"social-description-tax-property_type\";s:0:\"\";s:34:\"social-image-url-tax-property_type\";s:0:\"\";s:33:\"social-image-id-tax-property_type\";i:0;s:31:\"taxonomy-property_type-ptparent\";i:0;s:25:\"title-tax-property_status\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:28:\"metadesc-tax-property_status\";s:0:\"\";s:35:\"display-metabox-tax-property_status\";b:0;s:27:\"noindex-tax-property_status\";b:0;s:32:\"social-title-tax-property_status\";s:23:\"%%term_title%% Archives\";s:38:\"social-description-tax-property_status\";s:0:\"\";s:36:\"social-image-url-tax-property_status\";s:0:\"\";s:35:\"social-image-id-tax-property_status\";i:0;s:33:\"taxonomy-property_status-ptparent\";i:0;s:27:\"title-tax-property_location\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:30:\"metadesc-tax-property_location\";s:0:\"\";s:37:\"display-metabox-tax-property_location\";b:0;s:29:\"noindex-tax-property_location\";b:0;s:34:\"social-title-tax-property_location\";s:23:\"%%term_title%% Archives\";s:40:\"social-description-tax-property_location\";s:0:\"\";s:38:\"social-image-url-tax-property_location\";s:0:\"\";s:37:\"social-image-id-tax-property_location\";i:0;s:35:\"taxonomy-property_location-ptparent\";i:0;s:14:\"person_logo_id\";i:0;s:15:\"company_logo_id\";i:0;s:29:\"open_graph_frontpage_image_id\";i:0;}','auto'),(170,'wpseo_social','a:20:{s:13:\"facebook_site\";s:0:\"\";s:13:\"instagram_url\";s:0:\"\";s:12:\"linkedin_url\";s:0:\"\";s:11:\"myspace_url\";s:0:\"\";s:16:\"og_default_image\";s:0:\"\";s:19:\"og_default_image_id\";s:0:\"\";s:18:\"og_frontpage_title\";s:47:\"HomeProz Real Estate | Albert Lea MN Properties\";s:17:\"og_frontpage_desc\";s:97:\"Your trusted partner for buying and selling homes in Albert Lea, Minnesota and surrounding areas.\";s:18:\"og_frontpage_image\";s:0:\"\";s:21:\"og_frontpage_image_id\";s:0:\"\";s:9:\"opengraph\";b:1;s:13:\"pinterest_url\";s:0:\"\";s:15:\"pinterestverify\";s:0:\"\";s:7:\"twitter\";b:1;s:12:\"twitter_site\";s:0:\"\";s:17:\"twitter_card_type\";s:19:\"summary_large_image\";s:11:\"youtube_url\";s:0:\"\";s:13:\"wikipedia_url\";s:0:\"\";s:17:\"other_social_urls\";a:0:{}s:12:\"mastodon_url\";s:0:\"\";}','auto'),(171,'wpseo_llmstxt','a:7:{s:23:\"llms_txt_selection_mode\";s:4:\"auto\";s:13:\"about_us_page\";i:0;s:12:\"contact_page\";i:0;s:10:\"terms_page\";i:0;s:19:\"privacy_policy_page\";i:0;s:9:\"shop_page\";i:0;s:20:\"other_included_pages\";a:0:{}}','auto'),(174,'webpc_is_new_installation','1','auto'),(175,'webpc_notice_thanks','1765581302','auto'),(176,'webpc_notice_pro_version','1764976502','auto'),(177,'webpc_stats_installation_date','2025-11-28 23:15:02','auto'),(178,'webpc_stats_first_version','6.3.2','auto'),(181,'aio_wp_security_configs','a:52:{s:28:\"aiowps_enable_login_lockdown\";s:1:\"1\";s:28:\"aiowps_allow_unlock_requests\";s:1:\"1\";s:25:\"aiowps_max_login_attempts\";s:2:\"10\";s:24:\"aiowps_retry_time_period\";s:1:\"5\";s:26:\"aiowps_lockout_time_length\";s:2:\"30\";s:30:\"aiowps_max_lockout_time_length\";s:2:\"60\";s:28:\"aiowps_set_generic_login_msg\";s:1:\"1\";s:26:\"aiowps_enable_email_notify\";s:1:\"1\";s:20:\"aiowps_email_address\";s:16:\"brian@hanson.xyz\";s:39:\"aiowps_enable_invalid_username_lockdown\";s:0:\"\";s:43:\"aiowps_instantly_lockout_specific_usernames\";a:3:{i:0;s:5:\"admin\";i:1;s:13:\"administrator\";i:2;s:4:\"test\";}s:36:\"aiowps_remove_wp_generator_meta_info\";s:1:\"1\";s:27:\"aiowps_disable_file_editing\";s:1:\"1\";s:37:\"aiowps_prevent_default_wp_file_access\";s:1:\"1\";s:28:\"aiowps_enable_basic_firewall\";s:1:\"1\";s:27:\"aiowps_max_file_upload_size\";i:100;s:38:\"aiowps_disable_xmlrpc_pingback_methods\";s:1:\"1\";s:34:\"aiowps_block_debug_log_file_access\";s:1:\"1\";s:26:\"aiowps_disable_index_views\";s:1:\"1\";s:32:\"aiowps_prevent_users_enumeration\";s:1:\"1\";s:42:\"aiowps_disallow_unauthorized_rest_requests\";s:1:\"1\";s:40:\"aiowps_prevent_site_display_inside_frame\";s:1:\"1\";s:28:\"aiowps_enable_login_honeypot\";s:1:\"1\";s:35:\"aiowps_disable_application_password\";s:0:\"\";s:30:\"aiowps_enable_spambot_blocking\";s:1:\"1\";s:29:\"aiowps_enable_comment_captcha\";s:0:\"\";s:25:\"aiowps_enable_404_logging\";s:1:\"1\";s:28:\"aiowps_enable_404_IP_lockout\";s:0:\"\";s:36:\"aiowps_on_uninstall_delete_db_tables\";s:1:\"1\";s:34:\"aiowps_on_uninstall_delete_configs\";s:1:\"1\";s:31:\"aiowps_enable_rename_login_page\";s:0:\"\";s:43:\"aiowps_enable_brute_force_attack_prevention\";s:0:\"\";s:19:\"aiowps_site_lockout\";s:0:\"\";s:19:\"aiowps_enable_debug\";s:0:\"\";s:22:\"aiowps_default_captcha\";s:0:\"\";s:27:\"aiowps_enable_login_captcha\";s:1:\"1\";s:35:\"aiowps_enable_registration_honeypot\";s:1:\"1\";s:26:\"aiowps_enable_blacklisting\";s:0:\"\";s:25:\"aiowps_enable_5g_firewall\";s:0:\"\";s:25:\"aiowps_enable_6g_firewall\";s:0:\"\";s:26:\"aiowps_enable_custom_rules\";s:0:\"\";s:25:\"aiowps_prevent_hotlinking\";s:0:\"\";s:22:\"aiowps_copy_protection\";s:0:\"\";s:33:\"aiowps_disable_rss_and_atom_feeds\";s:0:\"\";s:27:\"aiowps_enable_forced_logout\";s:0:\"\";s:32:\"aiowps_enable_automated_fcd_scan\";s:0:\"\";s:12:\"installed-at\";i:1764371970;s:24:\"aiowps_default_recaptcha\";s:1:\"1\";s:25:\"aiowps_recaptcha_site_key\";s:40:\"6LejYRssAAAAAEhFcdcVBEB0j16HuLSWnyTYunYi\";s:27:\"aiowps_recaptcha_secret_key\";s:40:\"6LejYRssAAAAAKn-kf5xdZrBym4XA3ocxf_LFjJ7\";s:34:\"aiowps_enable_custom_login_captcha\";s:1:\"1\";s:40:\"aiowps_enable_password_protected_captcha\";s:1:\"1\";}','auto'),(182,'aios_antibot_key_map_info','a:3:{i:0;a:2:{i:0;a:2:{i:0;s:8:\"dz7zzn8y\";i:1;s:12:\"ewbnnm47eqe7\";}i:1;a:2:{i:0;s:8:\"ovzo7jga\";i:1;s:12:\"zojsx526xhvu\";}}i:1;a:2:{i:0;a:2:{i:0;s:8:\"xdxz27wr\";i:1;s:12:\"xeft4p3ib2l1\";}i:1;a:2:{i:0;s:8:\"oth0fymk\";i:1;s:12:\"bjcyxlmg09pv\";}}i:2;i:1764720000;}','off'),(183,'aiowpsec_db_version','2.1.4','auto'),(184,'aiowpsec_firewall_version','1.0.8','auto'),(185,'_site_transient_timeout_wp_theme_files_patterns-2aae27f1f26ef7a6be8ebee5c8a6a86b','1764374239','off'),(186,'_site_transient_wp_theme_files_patterns-2aae27f1f26ef7a6be8ebee5c8a6a86b','a:2:{s:7:\"version\";s:5:\"1.0.0\";s:8:\"patterns\";a:7:{s:16:\"contact-info.php\";a:5:{s:5:\"title\";s:18:\"Contact Info Block\";s:4:\"slug\";s:21:\"homeproz/contact-info\";s:11:\"description\";s:66:\"A contact information block with address, phone, email, and hours.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:5:{i:0;s:7:\"contact\";i:1;s:7:\"address\";i:2;s:5:\"phone\";i:3;s:5:\"email\";i:4;s:5:\"hours\";}}s:14:\"cta-banner.php\";a:5:{s:5:\"title\";s:10:\"CTA Banner\";s:4:\"slug\";s:19:\"homeproz/cta-banner\";s:11:\"description\";s:59:\"A full-width call-to-action banner with heading and button.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:6:{i:0;s:4:\"call\";i:1;s:2:\"to\";i:2;s:6:\"action\";i:3;s:6:\"banner\";i:4;s:3:\"cta\";i:5;s:7:\"contact\";}}s:16:\"feature-grid.php\";a:5:{s:5:\"title\";s:24:\"Feature Grid (3 columns)\";s:4:\"slug\";s:21:\"homeproz/feature-grid\";s:11:\"description\";s:52:\"A three-column grid showcasing features or services.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:4:{i:0;s:8:\"features\";i:1;s:7:\"columns\";i:2;s:8:\"services\";i:3;s:8:\"benefits\";}}s:12:\"hero-cta.php\";a:5:{s:5:\"title\";s:13:\"Hero with CTA\";s:4:\"slug\";s:17:\"homeproz/hero-cta\";s:11:\"description\";s:73:\"A full-width hero section with heading, text, and call-to-action buttons.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:6:{i:0;s:4:\"hero\";i:1;s:6:\"banner\";i:2;s:4:\"call\";i:3;s:2:\"to\";i:4;s:6:\"action\";i:5;s:6:\"header\";}}s:17:\"split-content.php\";a:5:{s:5:\"title\";s:13:\"Split Content\";s:4:\"slug\";s:22:\"homeproz/split-content\";s:11:\"description\";s:65:\"A two-column layout with image on one side and text on the other.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:6:{i:0;s:5:\"split\";i:1;s:5:\"media\";i:2;s:4:\"text\";i:3;s:5:\"image\";i:4;s:3:\"two\";i:5;s:6:\"column\";}}s:13:\"team-grid.php\";a:5:{s:5:\"title\";s:9:\"Team Grid\";s:4:\"slug\";s:18:\"homeproz/team-grid\";s:11:\"description\";s:67:\"A grid layout showcasing team members with photos and contact info.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:5:{i:0;s:4:\"team\";i:1;s:6:\"agents\";i:2;s:5:\"staff\";i:3;s:7:\"members\";i:4;s:6:\"people\";}}s:15:\"testimonial.php\";a:5:{s:5:\"title\";s:11:\"Testimonial\";s:4:\"slug\";s:20:\"homeproz/testimonial\";s:11:\"description\";s:44:\"A testimonial quote with client attribution.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:4:{i:0;s:11:\"testimonial\";i:1;s:5:\"quote\";i:2;s:6:\"review\";i:3;s:6:\"client\";}}}}','off'); +INSERT INTO `wp_options` VALUES (1,'cron','a:12:{i:1764363747;a:1:{s:32:\"recovery_mode_clean_expired_keys\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1764363748;a:1:{s:34:\"wp_privacy_delete_old_export_files\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1764367344;a:1:{s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1764369115;a:1:{s:30:\"wp_delete_temp_updater_backups\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1764369116;a:1:{s:27:\"acf_update_site_health_data\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1764369144;a:1:{s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1764370944;a:1:{s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1764371307;a:1:{s:31:\"wpseo_permalink_structure_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1764371970;a:4:{s:26:\"aios_15_minutes_cron_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:21:\"aios-every-15-minutes\";s:4:\"args\";a:0:{}s:8:\"interval\";i:900;}}s:24:\"aiowps_hourly_cron_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}s:23:\"aiowps_daily_cron_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}s:24:\"aiowps_weekly_cron_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1764371978;a:1:{s:23:\"aiowps_clean_old_events\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1764450148;a:1:{s:30:\"wp_site_health_scheduled_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}s:7:\"version\";i:2;}','on'),(2,'siteurl','https://homeproz.dev.hanson.xyz','on'),(3,'home','https://homeproz.dev.hanson.xyz','on'),(4,'blogname','HomeProz','on'),(5,'blogdescription','','on'),(6,'users_can_register','0','on'),(7,'admin_email','brian@hanson.xyz','on'),(8,'start_of_week','1','on'),(9,'use_balanceTags','0','on'),(10,'use_smilies','1','on'),(11,'require_name_email','1','on'),(12,'comments_notify','1','on'),(13,'posts_per_rss','10','on'),(14,'rss_use_excerpt','0','on'),(15,'mailserver_url','mail.example.com','on'),(16,'mailserver_login','login@example.com','on'),(17,'mailserver_pass','','on'),(18,'mailserver_port','110','on'),(19,'default_category','1','on'),(20,'default_comment_status','open','on'),(21,'default_ping_status','open','on'),(22,'default_pingback_flag','1','on'),(23,'posts_per_page','10','on'),(24,'date_format','F j, Y','on'),(25,'time_format','g:i a','on'),(26,'links_updated_date_format','F j, Y g:i a','on'),(27,'comment_moderation','0','on'),(28,'moderation_notify','1','on'),(29,'permalink_structure','/%postname%/','on'),(30,'rewrite_rules','a:133:{s:11:\"^wp-json/?$\";s:22:\"index.php?rest_route=/\";s:14:\"^wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:21:\"^index.php/wp-json/?$\";s:22:\"index.php?rest_route=/\";s:24:\"^index.php/wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:17:\"^wp-sitemap\\.xml$\";s:23:\"index.php?sitemap=index\";s:17:\"^wp-sitemap\\.xsl$\";s:36:\"index.php?sitemap-stylesheet=sitemap\";s:23:\"^wp-sitemap-index\\.xsl$\";s:34:\"index.php?sitemap-stylesheet=index\";s:48:\"^wp-sitemap-([a-z]+?)-([a-z\\d_-]+?)-(\\d+?)\\.xml$\";s:75:\"index.php?sitemap=$matches[1]&sitemap-subtype=$matches[2]&paged=$matches[3]\";s:34:\"^wp-sitemap-([a-z]+?)-(\\d+?)\\.xml$\";s:47:\"index.php?sitemap=$matches[1]&paged=$matches[2]\";s:13:\"properties/?$\";s:28:\"index.php?post_type=property\";s:43:\"properties/feed/(feed|rdf|rss|rss2|atom)/?$\";s:45:\"index.php?post_type=property&feed=$matches[1]\";s:38:\"properties/(feed|rdf|rss|rss2|atom)/?$\";s:45:\"index.php?post_type=property&feed=$matches[1]\";s:30:\"properties/page/([0-9]{1,})/?$\";s:46:\"index.php?post_type=property&paged=$matches[1]\";s:47:\"category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?category_name=$matches[1]&feed=$matches[2]\";s:42:\"category/(.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?category_name=$matches[1]&feed=$matches[2]\";s:23:\"category/(.+?)/embed/?$\";s:46:\"index.php?category_name=$matches[1]&embed=true\";s:35:\"category/(.+?)/page/?([0-9]{1,})/?$\";s:53:\"index.php?category_name=$matches[1]&paged=$matches[2]\";s:17:\"category/(.+?)/?$\";s:35:\"index.php?category_name=$matches[1]\";s:44:\"tag/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?tag=$matches[1]&feed=$matches[2]\";s:39:\"tag/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?tag=$matches[1]&feed=$matches[2]\";s:20:\"tag/([^/]+)/embed/?$\";s:36:\"index.php?tag=$matches[1]&embed=true\";s:32:\"tag/([^/]+)/page/?([0-9]{1,})/?$\";s:43:\"index.php?tag=$matches[1]&paged=$matches[2]\";s:14:\"tag/([^/]+)/?$\";s:25:\"index.php?tag=$matches[1]\";s:45:\"type/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?post_format=$matches[1]&feed=$matches[2]\";s:40:\"type/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?post_format=$matches[1]&feed=$matches[2]\";s:21:\"type/([^/]+)/embed/?$\";s:44:\"index.php?post_format=$matches[1]&embed=true\";s:33:\"type/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?post_format=$matches[1]&paged=$matches[2]\";s:15:\"type/([^/]+)/?$\";s:33:\"index.php?post_format=$matches[1]\";s:38:\"properties/[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:48:\"properties/[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:68:\"properties/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:63:\"properties/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:63:\"properties/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:44:\"properties/[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:27:\"properties/([^/]+)/embed/?$\";s:41:\"index.php?property=$matches[1]&embed=true\";s:31:\"properties/([^/]+)/trackback/?$\";s:35:\"index.php?property=$matches[1]&tb=1\";s:51:\"properties/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?property=$matches[1]&feed=$matches[2]\";s:46:\"properties/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?property=$matches[1]&feed=$matches[2]\";s:39:\"properties/([^/]+)/page/?([0-9]{1,})/?$\";s:48:\"index.php?property=$matches[1]&paged=$matches[2]\";s:46:\"properties/([^/]+)/comment-page-([0-9]{1,})/?$\";s:48:\"index.php?property=$matches[1]&cpage=$matches[2]\";s:35:\"properties/([^/]+)(?:/([0-9]+))?/?$\";s:47:\"index.php?property=$matches[1]&page=$matches[2]\";s:27:\"properties/[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\"properties/[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\"properties/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"properties/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"properties/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\"properties/[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:54:\"property-type/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?property_type=$matches[1]&feed=$matches[2]\";s:49:\"property-type/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?property_type=$matches[1]&feed=$matches[2]\";s:30:\"property-type/([^/]+)/embed/?$\";s:46:\"index.php?property_type=$matches[1]&embed=true\";s:42:\"property-type/([^/]+)/page/?([0-9]{1,})/?$\";s:53:\"index.php?property_type=$matches[1]&paged=$matches[2]\";s:24:\"property-type/([^/]+)/?$\";s:35:\"index.php?property_type=$matches[1]\";s:56:\"property-status/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:54:\"index.php?property_status=$matches[1]&feed=$matches[2]\";s:51:\"property-status/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:54:\"index.php?property_status=$matches[1]&feed=$matches[2]\";s:32:\"property-status/([^/]+)/embed/?$\";s:48:\"index.php?property_status=$matches[1]&embed=true\";s:44:\"property-status/([^/]+)/page/?([0-9]{1,})/?$\";s:55:\"index.php?property_status=$matches[1]&paged=$matches[2]\";s:26:\"property-status/([^/]+)/?$\";s:37:\"index.php?property_status=$matches[1]\";s:49:\"location/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:56:\"index.php?property_location=$matches[1]&feed=$matches[2]\";s:44:\"location/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:56:\"index.php?property_location=$matches[1]&feed=$matches[2]\";s:25:\"location/([^/]+)/embed/?$\";s:50:\"index.php?property_location=$matches[1]&embed=true\";s:37:\"location/([^/]+)/page/?([0-9]{1,})/?$\";s:57:\"index.php?property_location=$matches[1]&paged=$matches[2]\";s:19:\"location/([^/]+)/?$\";s:39:\"index.php?property_location=$matches[1]\";s:12:\"robots\\.txt$\";s:18:\"index.php?robots=1\";s:13:\"favicon\\.ico$\";s:19:\"index.php?favicon=1\";s:12:\"sitemap\\.xml\";s:24:\"index.php??sitemap=index\";s:48:\".*wp-(atom|rdf|rss|rss2|feed|commentsrss2)\\.php$\";s:18:\"index.php?feed=old\";s:20:\".*wp-app\\.php(/.*)?$\";s:19:\"index.php?error=403\";s:18:\".*wp-register.php$\";s:23:\"index.php?register=true\";s:32:\"feed/(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:27:\"(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:8:\"embed/?$\";s:21:\"index.php?&embed=true\";s:20:\"page/?([0-9]{1,})/?$\";s:28:\"index.php?&paged=$matches[1]\";s:27:\"comment-page-([0-9]{1,})/?$\";s:39:\"index.php?&page_id=10&cpage=$matches[1]\";s:41:\"comments/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:36:\"comments/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:17:\"comments/embed/?$\";s:21:\"index.php?&embed=true\";s:44:\"search/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:39:\"search/(.+)/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:20:\"search/(.+)/embed/?$\";s:34:\"index.php?s=$matches[1]&embed=true\";s:32:\"search/(.+)/page/?([0-9]{1,})/?$\";s:41:\"index.php?s=$matches[1]&paged=$matches[2]\";s:14:\"search/(.+)/?$\";s:23:\"index.php?s=$matches[1]\";s:47:\"author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:42:\"author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:23:\"author/([^/]+)/embed/?$\";s:44:\"index.php?author_name=$matches[1]&embed=true\";s:35:\"author/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?author_name=$matches[1]&paged=$matches[2]\";s:17:\"author/([^/]+)/?$\";s:33:\"index.php?author_name=$matches[1]\";s:69:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:64:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:45:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/embed/?$\";s:74:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&embed=true\";s:57:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:81:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]\";s:39:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$\";s:63:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]\";s:56:\"([0-9]{4})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:51:\"([0-9]{4})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:32:\"([0-9]{4})/([0-9]{1,2})/embed/?$\";s:58:\"index.php?year=$matches[1]&monthnum=$matches[2]&embed=true\";s:44:\"([0-9]{4})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:65:\"index.php?year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]\";s:26:\"([0-9]{4})/([0-9]{1,2})/?$\";s:47:\"index.php?year=$matches[1]&monthnum=$matches[2]\";s:43:\"([0-9]{4})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:38:\"([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:19:\"([0-9]{4})/embed/?$\";s:37:\"index.php?year=$matches[1]&embed=true\";s:31:\"([0-9]{4})/page/?([0-9]{1,})/?$\";s:44:\"index.php?year=$matches[1]&paged=$matches[2]\";s:13:\"([0-9]{4})/?$\";s:26:\"index.php?year=$matches[1]\";s:27:\".?.+?/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\".?.+?/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\".?.+?/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\".?.+?/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"(.?.+?)/embed/?$\";s:41:\"index.php?pagename=$matches[1]&embed=true\";s:20:\"(.?.+?)/trackback/?$\";s:35:\"index.php?pagename=$matches[1]&tb=1\";s:40:\"(.?.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:35:\"(.?.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:28:\"(.?.+?)/page/?([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&paged=$matches[2]\";s:35:\"(.?.+?)/comment-page-([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&cpage=$matches[2]\";s:24:\"(.?.+?)(?:/([0-9]+))?/?$\";s:47:\"index.php?pagename=$matches[1]&page=$matches[2]\";s:27:\"[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\"[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\"[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\"[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"([^/]+)/embed/?$\";s:37:\"index.php?name=$matches[1]&embed=true\";s:20:\"([^/]+)/trackback/?$\";s:31:\"index.php?name=$matches[1]&tb=1\";s:40:\"([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?name=$matches[1]&feed=$matches[2]\";s:35:\"([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?name=$matches[1]&feed=$matches[2]\";s:28:\"([^/]+)/page/?([0-9]{1,})/?$\";s:44:\"index.php?name=$matches[1]&paged=$matches[2]\";s:35:\"([^/]+)/comment-page-([0-9]{1,})/?$\";s:44:\"index.php?name=$matches[1]&cpage=$matches[2]\";s:24:\"([^/]+)(?:/([0-9]+))?/?$\";s:43:\"index.php?name=$matches[1]&page=$matches[2]\";s:16:\"[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:26:\"[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:46:\"[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:41:\"[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:41:\"[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:22:\"[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";}','on'),(31,'hack_file','0','on'),(32,'blog_charset','UTF-8','on'),(33,'moderation_keys','','off'),(34,'active_plugins','a:5:{i:0;s:34:\"advanced-custom-fields-pro/acf.php\";i:1;s:51:\"all-in-one-wp-security-and-firewall/wp-security.php\";i:2;s:36:\"contact-form-7/wp-contact-form-7.php\";i:3;s:53:\"webp-converter-for-media/webp-converter-for-media.php\";i:4;s:24:\"wordpress-seo/wp-seo.php\";}','on'),(35,'category_base','','on'),(36,'ping_sites','https://rpc.pingomatic.com/','on'),(37,'comment_max_links','2','on'),(38,'gmt_offset','0','on'),(39,'default_email_category','1','on'),(40,'recently_edited','','off'),(41,'template','homeproz','on'),(42,'stylesheet','homeproz','on'),(43,'comment_registration','0','on'),(44,'html_type','text/html','on'),(45,'use_trackback','0','on'),(46,'default_role','subscriber','on'),(47,'db_version','60421','on'),(48,'uploads_use_yearmonth_folders','1','on'),(49,'upload_path','','on'),(50,'blog_public','1','on'),(51,'default_link_category','2','on'),(52,'show_on_front','page','on'),(53,'tag_base','','on'),(54,'show_avatars','1','on'),(55,'avatar_rating','G','on'),(56,'upload_url_path','','on'),(57,'thumbnail_size_w','150','on'),(58,'thumbnail_size_h','150','on'),(59,'thumbnail_crop','1','on'),(60,'medium_size_w','300','on'),(61,'medium_size_h','300','on'),(62,'avatar_default','mystery','on'),(63,'large_size_w','1024','on'),(64,'large_size_h','1024','on'),(65,'image_default_link_type','none','on'),(66,'image_default_size','','on'),(67,'image_default_align','','on'),(68,'close_comments_for_old_posts','0','on'),(69,'close_comments_days_old','14','on'),(70,'thread_comments','1','on'),(71,'thread_comments_depth','5','on'),(72,'page_comments','0','on'),(73,'comments_per_page','50','on'),(74,'default_comments_page','newest','on'),(75,'comment_order','asc','on'),(76,'sticky_posts','a:0:{}','on'),(77,'widget_categories','a:0:{}','on'),(78,'widget_text','a:0:{}','on'),(79,'widget_rss','a:0:{}','on'),(80,'uninstall_plugins','a:3:{s:24:\"wordpress-seo/wp-seo.php\";s:14:\"__return_false\";s:53:\"webp-converter-for-media/webp-converter-for-media.php\";a:2:{i:0;s:37:\"WebpConverter\\Plugin\\UninstallHandler\";i:1;s:22:\"load_uninstall_actions\";}s:51:\"all-in-one-wp-security-and-firewall/wp-security.php\";a:2:{i:0;s:15:\"AIO_WP_Security\";i:1;s:17:\"uninstall_handler\";}}','off'),(81,'timezone_string','','on'),(82,'page_for_posts','9','on'),(83,'page_on_front','10','on'),(84,'default_post_format','0','on'),(85,'link_manager_enabled','0','on'),(86,'finished_splitting_shared_terms','1','on'),(87,'site_icon','0','on'),(88,'medium_large_size_w','768','on'),(89,'medium_large_size_h','0','on'),(90,'wp_page_for_privacy_policy','3','on'),(91,'show_comments_cookies_opt_in','1','on'),(92,'admin_email_lifespan','1779915744','on'),(93,'disallowed_keys','','off'),(94,'comment_previously_approved','1','on'),(95,'auto_plugin_theme_update_emails','a:0:{}','off'),(96,'auto_update_core_dev','enabled','on'),(97,'auto_update_core_minor','enabled','on'),(98,'auto_update_core_major','enabled','on'),(99,'wp_force_deactivated_plugins','a:0:{}','on'),(100,'wp_attachment_pages_enabled','1','on'),(101,'initial_db_version','60421','on'),(102,'wp_user_roles','a:7:{s:13:\"administrator\";a:2:{s:4:\"name\";s:13:\"Administrator\";s:12:\"capabilities\";a:62:{s:13:\"switch_themes\";b:1;s:11:\"edit_themes\";b:1;s:16:\"activate_plugins\";b:1;s:12:\"edit_plugins\";b:1;s:10:\"edit_users\";b:1;s:10:\"edit_files\";b:1;s:14:\"manage_options\";b:1;s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:6:\"import\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:8:\"level_10\";b:1;s:7:\"level_9\";b:1;s:7:\"level_8\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:12:\"delete_users\";b:1;s:12:\"create_users\";b:1;s:17:\"unfiltered_upload\";b:1;s:14:\"edit_dashboard\";b:1;s:14:\"update_plugins\";b:1;s:14:\"delete_plugins\";b:1;s:15:\"install_plugins\";b:1;s:13:\"update_themes\";b:1;s:14:\"install_themes\";b:1;s:11:\"update_core\";b:1;s:10:\"list_users\";b:1;s:12:\"remove_users\";b:1;s:13:\"promote_users\";b:1;s:18:\"edit_theme_options\";b:1;s:13:\"delete_themes\";b:1;s:6:\"export\";b:1;s:20:\"wpseo_manage_options\";b:1;}}s:6:\"editor\";a:2:{s:4:\"name\";s:6:\"Editor\";s:12:\"capabilities\";a:36:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:15:\"wpseo_bulk_edit\";b:1;s:28:\"wpseo_edit_advanced_metadata\";b:1;}}s:6:\"author\";a:2:{s:4:\"name\";s:6:\"Author\";s:12:\"capabilities\";a:10:{s:12:\"upload_files\";b:1;s:10:\"edit_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;s:22:\"delete_published_posts\";b:1;}}s:11:\"contributor\";a:2:{s:4:\"name\";s:11:\"Contributor\";s:12:\"capabilities\";a:5:{s:10:\"edit_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;}}s:10:\"subscriber\";a:2:{s:4:\"name\";s:10:\"Subscriber\";s:12:\"capabilities\";a:2:{s:4:\"read\";b:1;s:7:\"level_0\";b:1;}}s:13:\"wpseo_manager\";a:2:{s:4:\"name\";s:11:\"SEO Manager\";s:12:\"capabilities\";a:38:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:15:\"wpseo_bulk_edit\";b:1;s:28:\"wpseo_edit_advanced_metadata\";b:1;s:20:\"wpseo_manage_options\";b:1;s:23:\"view_site_health_checks\";b:1;}}s:12:\"wpseo_editor\";a:2:{s:4:\"name\";s:10:\"SEO Editor\";s:12:\"capabilities\";a:36:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:15:\"wpseo_bulk_edit\";b:1;s:28:\"wpseo_edit_advanced_metadata\";b:1;}}}','on'),(103,'fresh_site','0','off'),(104,'user_count','1','off'),(105,'widget_block','a:6:{i:2;a:1:{s:7:\"content\";s:19:\"\";}i:3;a:1:{s:7:\"content\";s:154:\"

Recent Posts

\";}i:4;a:1:{s:7:\"content\";s:227:\"

Recent Comments

\";}i:5;a:1:{s:7:\"content\";s:146:\"

Archives

\";}i:6;a:1:{s:7:\"content\";s:150:\"

Categories

\";}s:12:\"_multiwidget\";i:1;}','auto'),(106,'sidebars_widgets','a:2:{s:19:\"wp_inactive_widgets\";a:5:{i:0;s:7:\"block-2\";i:1;s:7:\"block-3\";i:2;s:7:\"block-4\";i:3;s:7:\"block-5\";i:4;s:7:\"block-6\";}s:13:\"array_version\";i:3;}','auto'),(107,'widget_pages','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(108,'widget_calendar','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(109,'widget_archives','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(110,'widget_media_audio','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(111,'widget_media_image','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(112,'widget_media_gallery','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(113,'widget_media_video','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(114,'widget_meta','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(115,'widget_search','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(116,'widget_recent-posts','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(117,'widget_recent-comments','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(118,'widget_tag_cloud','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(119,'widget_nav_menu','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(120,'widget_custom_html','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(121,'_transient_wp_core_block_css_files','a:2:{s:7:\"version\";s:5:\"6.8.3\";s:5:\"files\";a:536:{i:0;s:23:\"archives/editor-rtl.css\";i:1;s:27:\"archives/editor-rtl.min.css\";i:2;s:19:\"archives/editor.css\";i:3;s:23:\"archives/editor.min.css\";i:4;s:22:\"archives/style-rtl.css\";i:5;s:26:\"archives/style-rtl.min.css\";i:6;s:18:\"archives/style.css\";i:7;s:22:\"archives/style.min.css\";i:8;s:20:\"audio/editor-rtl.css\";i:9;s:24:\"audio/editor-rtl.min.css\";i:10;s:16:\"audio/editor.css\";i:11;s:20:\"audio/editor.min.css\";i:12;s:19:\"audio/style-rtl.css\";i:13;s:23:\"audio/style-rtl.min.css\";i:14;s:15:\"audio/style.css\";i:15;s:19:\"audio/style.min.css\";i:16;s:19:\"audio/theme-rtl.css\";i:17;s:23:\"audio/theme-rtl.min.css\";i:18;s:15:\"audio/theme.css\";i:19;s:19:\"audio/theme.min.css\";i:20;s:21:\"avatar/editor-rtl.css\";i:21;s:25:\"avatar/editor-rtl.min.css\";i:22;s:17:\"avatar/editor.css\";i:23;s:21:\"avatar/editor.min.css\";i:24;s:20:\"avatar/style-rtl.css\";i:25;s:24:\"avatar/style-rtl.min.css\";i:26;s:16:\"avatar/style.css\";i:27;s:20:\"avatar/style.min.css\";i:28;s:21:\"button/editor-rtl.css\";i:29;s:25:\"button/editor-rtl.min.css\";i:30;s:17:\"button/editor.css\";i:31;s:21:\"button/editor.min.css\";i:32;s:20:\"button/style-rtl.css\";i:33;s:24:\"button/style-rtl.min.css\";i:34;s:16:\"button/style.css\";i:35;s:20:\"button/style.min.css\";i:36;s:22:\"buttons/editor-rtl.css\";i:37;s:26:\"buttons/editor-rtl.min.css\";i:38;s:18:\"buttons/editor.css\";i:39;s:22:\"buttons/editor.min.css\";i:40;s:21:\"buttons/style-rtl.css\";i:41;s:25:\"buttons/style-rtl.min.css\";i:42;s:17:\"buttons/style.css\";i:43;s:21:\"buttons/style.min.css\";i:44;s:22:\"calendar/style-rtl.css\";i:45;s:26:\"calendar/style-rtl.min.css\";i:46;s:18:\"calendar/style.css\";i:47;s:22:\"calendar/style.min.css\";i:48;s:25:\"categories/editor-rtl.css\";i:49;s:29:\"categories/editor-rtl.min.css\";i:50;s:21:\"categories/editor.css\";i:51;s:25:\"categories/editor.min.css\";i:52;s:24:\"categories/style-rtl.css\";i:53;s:28:\"categories/style-rtl.min.css\";i:54;s:20:\"categories/style.css\";i:55;s:24:\"categories/style.min.css\";i:56;s:19:\"code/editor-rtl.css\";i:57;s:23:\"code/editor-rtl.min.css\";i:58;s:15:\"code/editor.css\";i:59;s:19:\"code/editor.min.css\";i:60;s:18:\"code/style-rtl.css\";i:61;s:22:\"code/style-rtl.min.css\";i:62;s:14:\"code/style.css\";i:63;s:18:\"code/style.min.css\";i:64;s:18:\"code/theme-rtl.css\";i:65;s:22:\"code/theme-rtl.min.css\";i:66;s:14:\"code/theme.css\";i:67;s:18:\"code/theme.min.css\";i:68;s:22:\"columns/editor-rtl.css\";i:69;s:26:\"columns/editor-rtl.min.css\";i:70;s:18:\"columns/editor.css\";i:71;s:22:\"columns/editor.min.css\";i:72;s:21:\"columns/style-rtl.css\";i:73;s:25:\"columns/style-rtl.min.css\";i:74;s:17:\"columns/style.css\";i:75;s:21:\"columns/style.min.css\";i:76;s:33:\"comment-author-name/style-rtl.css\";i:77;s:37:\"comment-author-name/style-rtl.min.css\";i:78;s:29:\"comment-author-name/style.css\";i:79;s:33:\"comment-author-name/style.min.css\";i:80;s:29:\"comment-content/style-rtl.css\";i:81;s:33:\"comment-content/style-rtl.min.css\";i:82;s:25:\"comment-content/style.css\";i:83;s:29:\"comment-content/style.min.css\";i:84;s:26:\"comment-date/style-rtl.css\";i:85;s:30:\"comment-date/style-rtl.min.css\";i:86;s:22:\"comment-date/style.css\";i:87;s:26:\"comment-date/style.min.css\";i:88;s:31:\"comment-edit-link/style-rtl.css\";i:89;s:35:\"comment-edit-link/style-rtl.min.css\";i:90;s:27:\"comment-edit-link/style.css\";i:91;s:31:\"comment-edit-link/style.min.css\";i:92;s:32:\"comment-reply-link/style-rtl.css\";i:93;s:36:\"comment-reply-link/style-rtl.min.css\";i:94;s:28:\"comment-reply-link/style.css\";i:95;s:32:\"comment-reply-link/style.min.css\";i:96;s:30:\"comment-template/style-rtl.css\";i:97;s:34:\"comment-template/style-rtl.min.css\";i:98;s:26:\"comment-template/style.css\";i:99;s:30:\"comment-template/style.min.css\";i:100;s:42:\"comments-pagination-numbers/editor-rtl.css\";i:101;s:46:\"comments-pagination-numbers/editor-rtl.min.css\";i:102;s:38:\"comments-pagination-numbers/editor.css\";i:103;s:42:\"comments-pagination-numbers/editor.min.css\";i:104;s:34:\"comments-pagination/editor-rtl.css\";i:105;s:38:\"comments-pagination/editor-rtl.min.css\";i:106;s:30:\"comments-pagination/editor.css\";i:107;s:34:\"comments-pagination/editor.min.css\";i:108;s:33:\"comments-pagination/style-rtl.css\";i:109;s:37:\"comments-pagination/style-rtl.min.css\";i:110;s:29:\"comments-pagination/style.css\";i:111;s:33:\"comments-pagination/style.min.css\";i:112;s:29:\"comments-title/editor-rtl.css\";i:113;s:33:\"comments-title/editor-rtl.min.css\";i:114;s:25:\"comments-title/editor.css\";i:115;s:29:\"comments-title/editor.min.css\";i:116;s:23:\"comments/editor-rtl.css\";i:117;s:27:\"comments/editor-rtl.min.css\";i:118;s:19:\"comments/editor.css\";i:119;s:23:\"comments/editor.min.css\";i:120;s:22:\"comments/style-rtl.css\";i:121;s:26:\"comments/style-rtl.min.css\";i:122;s:18:\"comments/style.css\";i:123;s:22:\"comments/style.min.css\";i:124;s:20:\"cover/editor-rtl.css\";i:125;s:24:\"cover/editor-rtl.min.css\";i:126;s:16:\"cover/editor.css\";i:127;s:20:\"cover/editor.min.css\";i:128;s:19:\"cover/style-rtl.css\";i:129;s:23:\"cover/style-rtl.min.css\";i:130;s:15:\"cover/style.css\";i:131;s:19:\"cover/style.min.css\";i:132;s:22:\"details/editor-rtl.css\";i:133;s:26:\"details/editor-rtl.min.css\";i:134;s:18:\"details/editor.css\";i:135;s:22:\"details/editor.min.css\";i:136;s:21:\"details/style-rtl.css\";i:137;s:25:\"details/style-rtl.min.css\";i:138;s:17:\"details/style.css\";i:139;s:21:\"details/style.min.css\";i:140;s:20:\"embed/editor-rtl.css\";i:141;s:24:\"embed/editor-rtl.min.css\";i:142;s:16:\"embed/editor.css\";i:143;s:20:\"embed/editor.min.css\";i:144;s:19:\"embed/style-rtl.css\";i:145;s:23:\"embed/style-rtl.min.css\";i:146;s:15:\"embed/style.css\";i:147;s:19:\"embed/style.min.css\";i:148;s:19:\"embed/theme-rtl.css\";i:149;s:23:\"embed/theme-rtl.min.css\";i:150;s:15:\"embed/theme.css\";i:151;s:19:\"embed/theme.min.css\";i:152;s:19:\"file/editor-rtl.css\";i:153;s:23:\"file/editor-rtl.min.css\";i:154;s:15:\"file/editor.css\";i:155;s:19:\"file/editor.min.css\";i:156;s:18:\"file/style-rtl.css\";i:157;s:22:\"file/style-rtl.min.css\";i:158;s:14:\"file/style.css\";i:159;s:18:\"file/style.min.css\";i:160;s:23:\"footnotes/style-rtl.css\";i:161;s:27:\"footnotes/style-rtl.min.css\";i:162;s:19:\"footnotes/style.css\";i:163;s:23:\"footnotes/style.min.css\";i:164;s:23:\"freeform/editor-rtl.css\";i:165;s:27:\"freeform/editor-rtl.min.css\";i:166;s:19:\"freeform/editor.css\";i:167;s:23:\"freeform/editor.min.css\";i:168;s:22:\"gallery/editor-rtl.css\";i:169;s:26:\"gallery/editor-rtl.min.css\";i:170;s:18:\"gallery/editor.css\";i:171;s:22:\"gallery/editor.min.css\";i:172;s:21:\"gallery/style-rtl.css\";i:173;s:25:\"gallery/style-rtl.min.css\";i:174;s:17:\"gallery/style.css\";i:175;s:21:\"gallery/style.min.css\";i:176;s:21:\"gallery/theme-rtl.css\";i:177;s:25:\"gallery/theme-rtl.min.css\";i:178;s:17:\"gallery/theme.css\";i:179;s:21:\"gallery/theme.min.css\";i:180;s:20:\"group/editor-rtl.css\";i:181;s:24:\"group/editor-rtl.min.css\";i:182;s:16:\"group/editor.css\";i:183;s:20:\"group/editor.min.css\";i:184;s:19:\"group/style-rtl.css\";i:185;s:23:\"group/style-rtl.min.css\";i:186;s:15:\"group/style.css\";i:187;s:19:\"group/style.min.css\";i:188;s:19:\"group/theme-rtl.css\";i:189;s:23:\"group/theme-rtl.min.css\";i:190;s:15:\"group/theme.css\";i:191;s:19:\"group/theme.min.css\";i:192;s:21:\"heading/style-rtl.css\";i:193;s:25:\"heading/style-rtl.min.css\";i:194;s:17:\"heading/style.css\";i:195;s:21:\"heading/style.min.css\";i:196;s:19:\"html/editor-rtl.css\";i:197;s:23:\"html/editor-rtl.min.css\";i:198;s:15:\"html/editor.css\";i:199;s:19:\"html/editor.min.css\";i:200;s:20:\"image/editor-rtl.css\";i:201;s:24:\"image/editor-rtl.min.css\";i:202;s:16:\"image/editor.css\";i:203;s:20:\"image/editor.min.css\";i:204;s:19:\"image/style-rtl.css\";i:205;s:23:\"image/style-rtl.min.css\";i:206;s:15:\"image/style.css\";i:207;s:19:\"image/style.min.css\";i:208;s:19:\"image/theme-rtl.css\";i:209;s:23:\"image/theme-rtl.min.css\";i:210;s:15:\"image/theme.css\";i:211;s:19:\"image/theme.min.css\";i:212;s:29:\"latest-comments/style-rtl.css\";i:213;s:33:\"latest-comments/style-rtl.min.css\";i:214;s:25:\"latest-comments/style.css\";i:215;s:29:\"latest-comments/style.min.css\";i:216;s:27:\"latest-posts/editor-rtl.css\";i:217;s:31:\"latest-posts/editor-rtl.min.css\";i:218;s:23:\"latest-posts/editor.css\";i:219;s:27:\"latest-posts/editor.min.css\";i:220;s:26:\"latest-posts/style-rtl.css\";i:221;s:30:\"latest-posts/style-rtl.min.css\";i:222;s:22:\"latest-posts/style.css\";i:223;s:26:\"latest-posts/style.min.css\";i:224;s:18:\"list/style-rtl.css\";i:225;s:22:\"list/style-rtl.min.css\";i:226;s:14:\"list/style.css\";i:227;s:18:\"list/style.min.css\";i:228;s:22:\"loginout/style-rtl.css\";i:229;s:26:\"loginout/style-rtl.min.css\";i:230;s:18:\"loginout/style.css\";i:231;s:22:\"loginout/style.min.css\";i:232;s:25:\"media-text/editor-rtl.css\";i:233;s:29:\"media-text/editor-rtl.min.css\";i:234;s:21:\"media-text/editor.css\";i:235;s:25:\"media-text/editor.min.css\";i:236;s:24:\"media-text/style-rtl.css\";i:237;s:28:\"media-text/style-rtl.min.css\";i:238;s:20:\"media-text/style.css\";i:239;s:24:\"media-text/style.min.css\";i:240;s:19:\"more/editor-rtl.css\";i:241;s:23:\"more/editor-rtl.min.css\";i:242;s:15:\"more/editor.css\";i:243;s:19:\"more/editor.min.css\";i:244;s:30:\"navigation-link/editor-rtl.css\";i:245;s:34:\"navigation-link/editor-rtl.min.css\";i:246;s:26:\"navigation-link/editor.css\";i:247;s:30:\"navigation-link/editor.min.css\";i:248;s:29:\"navigation-link/style-rtl.css\";i:249;s:33:\"navigation-link/style-rtl.min.css\";i:250;s:25:\"navigation-link/style.css\";i:251;s:29:\"navigation-link/style.min.css\";i:252;s:33:\"navigation-submenu/editor-rtl.css\";i:253;s:37:\"navigation-submenu/editor-rtl.min.css\";i:254;s:29:\"navigation-submenu/editor.css\";i:255;s:33:\"navigation-submenu/editor.min.css\";i:256;s:25:\"navigation/editor-rtl.css\";i:257;s:29:\"navigation/editor-rtl.min.css\";i:258;s:21:\"navigation/editor.css\";i:259;s:25:\"navigation/editor.min.css\";i:260;s:24:\"navigation/style-rtl.css\";i:261;s:28:\"navigation/style-rtl.min.css\";i:262;s:20:\"navigation/style.css\";i:263;s:24:\"navigation/style.min.css\";i:264;s:23:\"nextpage/editor-rtl.css\";i:265;s:27:\"nextpage/editor-rtl.min.css\";i:266;s:19:\"nextpage/editor.css\";i:267;s:23:\"nextpage/editor.min.css\";i:268;s:24:\"page-list/editor-rtl.css\";i:269;s:28:\"page-list/editor-rtl.min.css\";i:270;s:20:\"page-list/editor.css\";i:271;s:24:\"page-list/editor.min.css\";i:272;s:23:\"page-list/style-rtl.css\";i:273;s:27:\"page-list/style-rtl.min.css\";i:274;s:19:\"page-list/style.css\";i:275;s:23:\"page-list/style.min.css\";i:276;s:24:\"paragraph/editor-rtl.css\";i:277;s:28:\"paragraph/editor-rtl.min.css\";i:278;s:20:\"paragraph/editor.css\";i:279;s:24:\"paragraph/editor.min.css\";i:280;s:23:\"paragraph/style-rtl.css\";i:281;s:27:\"paragraph/style-rtl.min.css\";i:282;s:19:\"paragraph/style.css\";i:283;s:23:\"paragraph/style.min.css\";i:284;s:35:\"post-author-biography/style-rtl.css\";i:285;s:39:\"post-author-biography/style-rtl.min.css\";i:286;s:31:\"post-author-biography/style.css\";i:287;s:35:\"post-author-biography/style.min.css\";i:288;s:30:\"post-author-name/style-rtl.css\";i:289;s:34:\"post-author-name/style-rtl.min.css\";i:290;s:26:\"post-author-name/style.css\";i:291;s:30:\"post-author-name/style.min.css\";i:292;s:26:\"post-author/editor-rtl.css\";i:293;s:30:\"post-author/editor-rtl.min.css\";i:294;s:22:\"post-author/editor.css\";i:295;s:26:\"post-author/editor.min.css\";i:296;s:25:\"post-author/style-rtl.css\";i:297;s:29:\"post-author/style-rtl.min.css\";i:298;s:21:\"post-author/style.css\";i:299;s:25:\"post-author/style.min.css\";i:300;s:33:\"post-comments-form/editor-rtl.css\";i:301;s:37:\"post-comments-form/editor-rtl.min.css\";i:302;s:29:\"post-comments-form/editor.css\";i:303;s:33:\"post-comments-form/editor.min.css\";i:304;s:32:\"post-comments-form/style-rtl.css\";i:305;s:36:\"post-comments-form/style-rtl.min.css\";i:306;s:28:\"post-comments-form/style.css\";i:307;s:32:\"post-comments-form/style.min.css\";i:308;s:26:\"post-content/style-rtl.css\";i:309;s:30:\"post-content/style-rtl.min.css\";i:310;s:22:\"post-content/style.css\";i:311;s:26:\"post-content/style.min.css\";i:312;s:23:\"post-date/style-rtl.css\";i:313;s:27:\"post-date/style-rtl.min.css\";i:314;s:19:\"post-date/style.css\";i:315;s:23:\"post-date/style.min.css\";i:316;s:27:\"post-excerpt/editor-rtl.css\";i:317;s:31:\"post-excerpt/editor-rtl.min.css\";i:318;s:23:\"post-excerpt/editor.css\";i:319;s:27:\"post-excerpt/editor.min.css\";i:320;s:26:\"post-excerpt/style-rtl.css\";i:321;s:30:\"post-excerpt/style-rtl.min.css\";i:322;s:22:\"post-excerpt/style.css\";i:323;s:26:\"post-excerpt/style.min.css\";i:324;s:34:\"post-featured-image/editor-rtl.css\";i:325;s:38:\"post-featured-image/editor-rtl.min.css\";i:326;s:30:\"post-featured-image/editor.css\";i:327;s:34:\"post-featured-image/editor.min.css\";i:328;s:33:\"post-featured-image/style-rtl.css\";i:329;s:37:\"post-featured-image/style-rtl.min.css\";i:330;s:29:\"post-featured-image/style.css\";i:331;s:33:\"post-featured-image/style.min.css\";i:332;s:34:\"post-navigation-link/style-rtl.css\";i:333;s:38:\"post-navigation-link/style-rtl.min.css\";i:334;s:30:\"post-navigation-link/style.css\";i:335;s:34:\"post-navigation-link/style.min.css\";i:336;s:27:\"post-template/style-rtl.css\";i:337;s:31:\"post-template/style-rtl.min.css\";i:338;s:23:\"post-template/style.css\";i:339;s:27:\"post-template/style.min.css\";i:340;s:24:\"post-terms/style-rtl.css\";i:341;s:28:\"post-terms/style-rtl.min.css\";i:342;s:20:\"post-terms/style.css\";i:343;s:24:\"post-terms/style.min.css\";i:344;s:24:\"post-title/style-rtl.css\";i:345;s:28:\"post-title/style-rtl.min.css\";i:346;s:20:\"post-title/style.css\";i:347;s:24:\"post-title/style.min.css\";i:348;s:26:\"preformatted/style-rtl.css\";i:349;s:30:\"preformatted/style-rtl.min.css\";i:350;s:22:\"preformatted/style.css\";i:351;s:26:\"preformatted/style.min.css\";i:352;s:24:\"pullquote/editor-rtl.css\";i:353;s:28:\"pullquote/editor-rtl.min.css\";i:354;s:20:\"pullquote/editor.css\";i:355;s:24:\"pullquote/editor.min.css\";i:356;s:23:\"pullquote/style-rtl.css\";i:357;s:27:\"pullquote/style-rtl.min.css\";i:358;s:19:\"pullquote/style.css\";i:359;s:23:\"pullquote/style.min.css\";i:360;s:23:\"pullquote/theme-rtl.css\";i:361;s:27:\"pullquote/theme-rtl.min.css\";i:362;s:19:\"pullquote/theme.css\";i:363;s:23:\"pullquote/theme.min.css\";i:364;s:39:\"query-pagination-numbers/editor-rtl.css\";i:365;s:43:\"query-pagination-numbers/editor-rtl.min.css\";i:366;s:35:\"query-pagination-numbers/editor.css\";i:367;s:39:\"query-pagination-numbers/editor.min.css\";i:368;s:31:\"query-pagination/editor-rtl.css\";i:369;s:35:\"query-pagination/editor-rtl.min.css\";i:370;s:27:\"query-pagination/editor.css\";i:371;s:31:\"query-pagination/editor.min.css\";i:372;s:30:\"query-pagination/style-rtl.css\";i:373;s:34:\"query-pagination/style-rtl.min.css\";i:374;s:26:\"query-pagination/style.css\";i:375;s:30:\"query-pagination/style.min.css\";i:376;s:25:\"query-title/style-rtl.css\";i:377;s:29:\"query-title/style-rtl.min.css\";i:378;s:21:\"query-title/style.css\";i:379;s:25:\"query-title/style.min.css\";i:380;s:25:\"query-total/style-rtl.css\";i:381;s:29:\"query-total/style-rtl.min.css\";i:382;s:21:\"query-total/style.css\";i:383;s:25:\"query-total/style.min.css\";i:384;s:20:\"query/editor-rtl.css\";i:385;s:24:\"query/editor-rtl.min.css\";i:386;s:16:\"query/editor.css\";i:387;s:20:\"query/editor.min.css\";i:388;s:19:\"quote/style-rtl.css\";i:389;s:23:\"quote/style-rtl.min.css\";i:390;s:15:\"quote/style.css\";i:391;s:19:\"quote/style.min.css\";i:392;s:19:\"quote/theme-rtl.css\";i:393;s:23:\"quote/theme-rtl.min.css\";i:394;s:15:\"quote/theme.css\";i:395;s:19:\"quote/theme.min.css\";i:396;s:23:\"read-more/style-rtl.css\";i:397;s:27:\"read-more/style-rtl.min.css\";i:398;s:19:\"read-more/style.css\";i:399;s:23:\"read-more/style.min.css\";i:400;s:18:\"rss/editor-rtl.css\";i:401;s:22:\"rss/editor-rtl.min.css\";i:402;s:14:\"rss/editor.css\";i:403;s:18:\"rss/editor.min.css\";i:404;s:17:\"rss/style-rtl.css\";i:405;s:21:\"rss/style-rtl.min.css\";i:406;s:13:\"rss/style.css\";i:407;s:17:\"rss/style.min.css\";i:408;s:21:\"search/editor-rtl.css\";i:409;s:25:\"search/editor-rtl.min.css\";i:410;s:17:\"search/editor.css\";i:411;s:21:\"search/editor.min.css\";i:412;s:20:\"search/style-rtl.css\";i:413;s:24:\"search/style-rtl.min.css\";i:414;s:16:\"search/style.css\";i:415;s:20:\"search/style.min.css\";i:416;s:20:\"search/theme-rtl.css\";i:417;s:24:\"search/theme-rtl.min.css\";i:418;s:16:\"search/theme.css\";i:419;s:20:\"search/theme.min.css\";i:420;s:24:\"separator/editor-rtl.css\";i:421;s:28:\"separator/editor-rtl.min.css\";i:422;s:20:\"separator/editor.css\";i:423;s:24:\"separator/editor.min.css\";i:424;s:23:\"separator/style-rtl.css\";i:425;s:27:\"separator/style-rtl.min.css\";i:426;s:19:\"separator/style.css\";i:427;s:23:\"separator/style.min.css\";i:428;s:23:\"separator/theme-rtl.css\";i:429;s:27:\"separator/theme-rtl.min.css\";i:430;s:19:\"separator/theme.css\";i:431;s:23:\"separator/theme.min.css\";i:432;s:24:\"shortcode/editor-rtl.css\";i:433;s:28:\"shortcode/editor-rtl.min.css\";i:434;s:20:\"shortcode/editor.css\";i:435;s:24:\"shortcode/editor.min.css\";i:436;s:24:\"site-logo/editor-rtl.css\";i:437;s:28:\"site-logo/editor-rtl.min.css\";i:438;s:20:\"site-logo/editor.css\";i:439;s:24:\"site-logo/editor.min.css\";i:440;s:23:\"site-logo/style-rtl.css\";i:441;s:27:\"site-logo/style-rtl.min.css\";i:442;s:19:\"site-logo/style.css\";i:443;s:23:\"site-logo/style.min.css\";i:444;s:27:\"site-tagline/editor-rtl.css\";i:445;s:31:\"site-tagline/editor-rtl.min.css\";i:446;s:23:\"site-tagline/editor.css\";i:447;s:27:\"site-tagline/editor.min.css\";i:448;s:26:\"site-tagline/style-rtl.css\";i:449;s:30:\"site-tagline/style-rtl.min.css\";i:450;s:22:\"site-tagline/style.css\";i:451;s:26:\"site-tagline/style.min.css\";i:452;s:25:\"site-title/editor-rtl.css\";i:453;s:29:\"site-title/editor-rtl.min.css\";i:454;s:21:\"site-title/editor.css\";i:455;s:25:\"site-title/editor.min.css\";i:456;s:24:\"site-title/style-rtl.css\";i:457;s:28:\"site-title/style-rtl.min.css\";i:458;s:20:\"site-title/style.css\";i:459;s:24:\"site-title/style.min.css\";i:460;s:26:\"social-link/editor-rtl.css\";i:461;s:30:\"social-link/editor-rtl.min.css\";i:462;s:22:\"social-link/editor.css\";i:463;s:26:\"social-link/editor.min.css\";i:464;s:27:\"social-links/editor-rtl.css\";i:465;s:31:\"social-links/editor-rtl.min.css\";i:466;s:23:\"social-links/editor.css\";i:467;s:27:\"social-links/editor.min.css\";i:468;s:26:\"social-links/style-rtl.css\";i:469;s:30:\"social-links/style-rtl.min.css\";i:470;s:22:\"social-links/style.css\";i:471;s:26:\"social-links/style.min.css\";i:472;s:21:\"spacer/editor-rtl.css\";i:473;s:25:\"spacer/editor-rtl.min.css\";i:474;s:17:\"spacer/editor.css\";i:475;s:21:\"spacer/editor.min.css\";i:476;s:20:\"spacer/style-rtl.css\";i:477;s:24:\"spacer/style-rtl.min.css\";i:478;s:16:\"spacer/style.css\";i:479;s:20:\"spacer/style.min.css\";i:480;s:20:\"table/editor-rtl.css\";i:481;s:24:\"table/editor-rtl.min.css\";i:482;s:16:\"table/editor.css\";i:483;s:20:\"table/editor.min.css\";i:484;s:19:\"table/style-rtl.css\";i:485;s:23:\"table/style-rtl.min.css\";i:486;s:15:\"table/style.css\";i:487;s:19:\"table/style.min.css\";i:488;s:19:\"table/theme-rtl.css\";i:489;s:23:\"table/theme-rtl.min.css\";i:490;s:15:\"table/theme.css\";i:491;s:19:\"table/theme.min.css\";i:492;s:24:\"tag-cloud/editor-rtl.css\";i:493;s:28:\"tag-cloud/editor-rtl.min.css\";i:494;s:20:\"tag-cloud/editor.css\";i:495;s:24:\"tag-cloud/editor.min.css\";i:496;s:23:\"tag-cloud/style-rtl.css\";i:497;s:27:\"tag-cloud/style-rtl.min.css\";i:498;s:19:\"tag-cloud/style.css\";i:499;s:23:\"tag-cloud/style.min.css\";i:500;s:28:\"template-part/editor-rtl.css\";i:501;s:32:\"template-part/editor-rtl.min.css\";i:502;s:24:\"template-part/editor.css\";i:503;s:28:\"template-part/editor.min.css\";i:504;s:27:\"template-part/theme-rtl.css\";i:505;s:31:\"template-part/theme-rtl.min.css\";i:506;s:23:\"template-part/theme.css\";i:507;s:27:\"template-part/theme.min.css\";i:508;s:30:\"term-description/style-rtl.css\";i:509;s:34:\"term-description/style-rtl.min.css\";i:510;s:26:\"term-description/style.css\";i:511;s:30:\"term-description/style.min.css\";i:512;s:27:\"text-columns/editor-rtl.css\";i:513;s:31:\"text-columns/editor-rtl.min.css\";i:514;s:23:\"text-columns/editor.css\";i:515;s:27:\"text-columns/editor.min.css\";i:516;s:26:\"text-columns/style-rtl.css\";i:517;s:30:\"text-columns/style-rtl.min.css\";i:518;s:22:\"text-columns/style.css\";i:519;s:26:\"text-columns/style.min.css\";i:520;s:19:\"verse/style-rtl.css\";i:521;s:23:\"verse/style-rtl.min.css\";i:522;s:15:\"verse/style.css\";i:523;s:19:\"verse/style.min.css\";i:524;s:20:\"video/editor-rtl.css\";i:525;s:24:\"video/editor-rtl.min.css\";i:526;s:16:\"video/editor.css\";i:527;s:20:\"video/editor.min.css\";i:528;s:19:\"video/style-rtl.css\";i:529;s:23:\"video/style-rtl.min.css\";i:530;s:15:\"video/style.css\";i:531;s:19:\"video/style.min.css\";i:532;s:19:\"video/theme-rtl.css\";i:533;s:23:\"video/theme-rtl.min.css\";i:534;s:15:\"video/theme.css\";i:535;s:19:\"video/theme.min.css\";}}','on'),(124,'_transient_doing_cron','1764373713.3518559932708740234375','on'),(125,'theme_mods_twentytwentyfive','a:2:{s:18:\"custom_css_post_id\";i:-1;s:16:\"sidebars_widgets\";a:2:{s:4:\"time\";i:1764367183;s:4:\"data\";a:3:{s:19:\"wp_inactive_widgets\";a:0:{}s:9:\"sidebar-1\";a:3:{i:0;s:7:\"block-2\";i:1;s:7:\"block-3\";i:2;s:7:\"block-4\";}s:9:\"sidebar-2\";a:2:{i:0;s:7:\"block-5\";i:1;s:7:\"block-6\";}}}}','off'),(126,'_transient_wp_styles_for_blocks','a:2:{s:4:\"hash\";s:32:\"64ad95698215776f80fa1e80f2eb5417\";s:6:\"blocks\";a:7:{s:11:\"core/button\";s:0:\"\";s:14:\"core/site-logo\";s:0:\"\";s:18:\"core/post-template\";s:0:\"\";s:12:\"core/columns\";s:0:\"\";s:14:\"core/pullquote\";s:121:\":root :where(.wp-block-pullquote){font-size: clamp(0.984em, 0.984rem + ((1vw - 0.2em) * 0.938), 1.5em);line-height: 1.6;}\";s:15:\"core/site-title\";s:89:\":root :where(.wp-block-site-title){font-family: var(--wp--preset--font-family--display);}\";s:15:\"core/navigation\";s:86:\":root :where(.wp-block-navigation){font-family: var(--wp--preset--font-family--body);}\";}}','on'),(129,'category_children','a:0:{}','auto'),(132,'_site_transient_update_themes','O:8:\"stdClass\":5:{s:12:\"last_checked\";i:1764371969;s:7:\"checked\";a:4:{s:8:\"homeproz\";s:5:\"1.0.0\";s:16:\"twentytwentyfive\";s:3:\"1.3\";s:16:\"twentytwentyfour\";s:3:\"1.3\";s:17:\"twentytwentythree\";s:3:\"1.6\";}s:8:\"response\";a:0:{}s:9:\"no_update\";a:3:{s:16:\"twentytwentyfive\";a:6:{s:5:\"theme\";s:16:\"twentytwentyfive\";s:11:\"new_version\";s:3:\"1.3\";s:3:\"url\";s:46:\"https://wordpress.org/themes/twentytwentyfive/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/theme/twentytwentyfive.1.3.zip\";s:8:\"requires\";s:3:\"6.7\";s:12:\"requires_php\";s:3:\"7.2\";}s:16:\"twentytwentyfour\";a:6:{s:5:\"theme\";s:16:\"twentytwentyfour\";s:11:\"new_version\";s:3:\"1.3\";s:3:\"url\";s:46:\"https://wordpress.org/themes/twentytwentyfour/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/theme/twentytwentyfour.1.3.zip\";s:8:\"requires\";s:3:\"6.4\";s:12:\"requires_php\";s:3:\"7.0\";}s:17:\"twentytwentythree\";a:6:{s:5:\"theme\";s:17:\"twentytwentythree\";s:11:\"new_version\";s:3:\"1.6\";s:3:\"url\";s:47:\"https://wordpress.org/themes/twentytwentythree/\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/theme/twentytwentythree.1.6.zip\";s:8:\"requires\";s:3:\"6.1\";s:12:\"requires_php\";s:3:\"5.6\";}}s:12:\"translations\";a:0:{}}','off'),(133,'current_theme','HomeProz','auto'),(134,'theme_switched','','auto'),(135,'theme_mods_homeproz','a:2:{s:18:\"nav_menu_locations\";a:1:{s:7:\"primary\";i:15;}s:18:\"custom_css_post_id\";i:-1;}','auto'),(141,'property_type_children','a:0:{}','auto'),(144,'property_status_children','a:0:{}','auto'),(150,'property_location_children','a:0:{}','auto'),(152,'_site_transient_update_core','O:8:\"stdClass\":4:{s:7:\"updates\";a:1:{i:0;O:8:\"stdClass\":10:{s:8:\"response\";s:6:\"latest\";s:8:\"download\";s:59:\"https://downloads.wordpress.org/release/wordpress-6.8.3.zip\";s:6:\"locale\";s:5:\"en_US\";s:8:\"packages\";O:8:\"stdClass\":5:{s:4:\"full\";s:59:\"https://downloads.wordpress.org/release/wordpress-6.8.3.zip\";s:10:\"no_content\";s:70:\"https://downloads.wordpress.org/release/wordpress-6.8.3-no-content.zip\";s:11:\"new_bundled\";s:71:\"https://downloads.wordpress.org/release/wordpress-6.8.3-new-bundled.zip\";s:7:\"partial\";s:0:\"\";s:8:\"rollback\";s:0:\"\";}s:7:\"current\";s:5:\"6.8.3\";s:7:\"version\";s:5:\"6.8.3\";s:11:\"php_version\";s:6:\"7.2.24\";s:13:\"mysql_version\";s:5:\"5.5.5\";s:11:\"new_bundled\";s:3:\"6.7\";s:15:\"partial_version\";s:0:\"\";}}s:12:\"last_checked\";i:1764371969;s:15:\"version_checked\";s:5:\"6.8.3\";s:12:\"translations\";a:0:{}}','off'),(156,'acf_first_activated_version','6.6.2','on'),(157,'acf_site_health','{\"event_first_activated\":1764369116,\"last_updated\":1764373713,\"event_activated_pro\":1764373713}','off'),(162,'wpcf7','a:2:{s:7:\"version\";s:5:\"6.1.3\";s:13:\"bulk_validate\";a:4:{s:9:\"timestamp\";i:1764370639;s:7:\"version\";s:5:\"6.1.3\";s:11:\"count_valid\";i:1;s:13:\"count_invalid\";i:0;}}','auto'),(165,'_site_transient_timeout_theme_roots','1764373103','off'),(166,'_site_transient_theme_roots','a:4:{s:8:\"homeproz\";s:7:\"/themes\";s:16:\"twentytwentyfive\";s:7:\"/themes\";s:16:\"twentytwentyfour\";s:7:\"/themes\";s:17:\"twentytwentythree\";s:7:\"/themes\";}','off'),(167,'yoast_migrations_free','a:1:{s:7:\"version\";s:4:\"26.4\";}','auto'),(168,'wpseo','a:120:{s:8:\"tracking\";b:0;s:16:\"toggled_tracking\";b:0;s:22:\"license_server_version\";b:0;s:15:\"ms_defaults_set\";b:0;s:40:\"ignore_search_engines_discouraged_notice\";b:0;s:19:\"indexing_first_time\";b:1;s:16:\"indexing_started\";b:0;s:15:\"indexing_reason\";s:24:\"attachments_made_enabled\";s:29:\"indexables_indexing_completed\";b:0;s:13:\"index_now_key\";s:0:\"\";s:7:\"version\";s:4:\"26.4\";s:16:\"previous_version\";s:0:\"\";s:20:\"disableadvanced_meta\";b:1;s:30:\"enable_headless_rest_endpoints\";b:1;s:17:\"ryte_indexability\";b:0;s:11:\"baiduverify\";s:0:\"\";s:12:\"googleverify\";s:0:\"\";s:8:\"msverify\";s:0:\"\";s:12:\"yandexverify\";s:0:\"\";s:12:\"ahrefsverify\";s:0:\"\";s:9:\"site_type\";s:0:\"\";s:20:\"has_multiple_authors\";s:0:\"\";s:16:\"environment_type\";s:0:\"\";s:23:\"content_analysis_active\";b:1;s:23:\"keyword_analysis_active\";b:1;s:34:\"inclusive_language_analysis_active\";b:0;s:21:\"enable_admin_bar_menu\";b:1;s:26:\"enable_cornerstone_content\";b:1;s:18:\"enable_xml_sitemap\";b:1;s:24:\"enable_text_link_counter\";b:1;s:16:\"enable_index_now\";b:1;s:19:\"enable_ai_generator\";b:1;s:22:\"ai_enabled_pre_default\";b:0;s:22:\"show_onboarding_notice\";b:1;s:18:\"first_activated_on\";i:1764371307;s:13:\"myyoast-oauth\";b:0;s:26:\"semrush_integration_active\";b:1;s:14:\"semrush_tokens\";a:0:{}s:20:\"semrush_country_code\";s:2:\"us\";s:19:\"permalink_structure\";s:0:\"\";s:8:\"home_url\";s:0:\"\";s:18:\"dynamic_permalinks\";b:0;s:17:\"category_base_url\";s:0:\"\";s:12:\"tag_base_url\";s:0:\"\";s:21:\"custom_taxonomy_slugs\";a:0:{}s:29:\"enable_enhanced_slack_sharing\";b:1;s:23:\"enable_metabox_insights\";b:1;s:23:\"enable_link_suggestions\";b:1;s:26:\"algolia_integration_active\";b:0;s:14:\"import_cursors\";a:0:{}s:13:\"workouts_data\";a:1:{s:13:\"configuration\";a:1:{s:13:\"finishedSteps\";a:0:{}}}s:28:\"configuration_finished_steps\";a:0:{}s:36:\"dismiss_configuration_workout_notice\";b:0;s:34:\"dismiss_premium_deactivated_notice\";b:0;s:19:\"importing_completed\";a:0:{}s:26:\"wincher_integration_active\";b:1;s:14:\"wincher_tokens\";a:0:{}s:36:\"wincher_automatically_add_keyphrases\";b:0;s:18:\"wincher_website_id\";s:0:\"\";s:18:\"first_time_install\";b:1;s:34:\"should_redirect_after_install_free\";b:0;s:34:\"activation_redirect_timestamp_free\";i:1764371307;s:18:\"remove_feed_global\";b:0;s:27:\"remove_feed_global_comments\";b:0;s:25:\"remove_feed_post_comments\";b:0;s:19:\"remove_feed_authors\";b:0;s:22:\"remove_feed_categories\";b:0;s:16:\"remove_feed_tags\";b:0;s:29:\"remove_feed_custom_taxonomies\";b:0;s:22:\"remove_feed_post_types\";b:0;s:18:\"remove_feed_search\";b:0;s:21:\"remove_atom_rdf_feeds\";b:0;s:17:\"remove_shortlinks\";b:0;s:21:\"remove_rest_api_links\";b:0;s:20:\"remove_rsd_wlw_links\";b:0;s:19:\"remove_oembed_links\";b:0;s:16:\"remove_generator\";b:0;s:20:\"remove_emoji_scripts\";b:0;s:24:\"remove_powered_by_header\";b:0;s:22:\"remove_pingback_header\";b:0;s:28:\"clean_campaign_tracking_urls\";b:0;s:16:\"clean_permalinks\";b:0;s:32:\"clean_permalinks_extra_variables\";s:0:\"\";s:14:\"search_cleanup\";b:0;s:20:\"search_cleanup_emoji\";b:0;s:23:\"search_cleanup_patterns\";b:0;s:22:\"search_character_limit\";i:50;s:20:\"deny_search_crawling\";b:0;s:21:\"deny_wp_json_crawling\";b:0;s:20:\"deny_adsbot_crawling\";b:0;s:19:\"deny_ccbot_crawling\";b:0;s:29:\"deny_google_extended_crawling\";b:0;s:20:\"deny_gptbot_crawling\";b:0;s:27:\"redirect_search_pretty_urls\";b:0;s:29:\"least_readability_ignore_list\";a:0:{}s:27:\"least_seo_score_ignore_list\";a:0:{}s:23:\"most_linked_ignore_list\";a:0:{}s:24:\"least_linked_ignore_list\";a:0:{}s:28:\"indexables_page_reading_list\";a:5:{i:0;b:0;i:1;b:0;i:2;b:0;i:3;b:0;i:4;b:0;}s:25:\"indexables_overview_state\";s:21:\"dashboard-not-visited\";s:28:\"last_known_public_post_types\";a:0:{}s:28:\"last_known_public_taxonomies\";a:0:{}s:23:\"last_known_no_unindexed\";a:0:{}s:14:\"new_post_types\";a:0:{}s:14:\"new_taxonomies\";a:0:{}s:34:\"show_new_content_type_notification\";b:0;s:44:\"site_kit_configuration_permanently_dismissed\";b:0;s:18:\"site_kit_connected\";b:0;s:37:\"site_kit_tracking_setup_widget_loaded\";s:2:\"no\";s:41:\"site_kit_tracking_first_interaction_stage\";s:0:\"\";s:40:\"site_kit_tracking_last_interaction_stage\";s:0:\"\";s:52:\"site_kit_tracking_setup_widget_temporarily_dismissed\";s:2:\"no\";s:52:\"site_kit_tracking_setup_widget_permanently_dismissed\";s:2:\"no\";s:31:\"google_site_kit_feature_enabled\";b:0;s:25:\"ai_free_sparks_started_on\";N;s:15:\"enable_llms_txt\";b:0;s:15:\"last_updated_on\";b:0;s:17:\"default_seo_title\";a:0:{}s:21:\"default_seo_meta_desc\";a:0:{}s:18:\"first_activated_by\";i:0;}','auto'),(169,'wpseo_titles','a:173:{s:17:\"forcerewritetitle\";b:0;s:9:\"separator\";s:7:\"sc-dash\";s:16:\"title-home-wpseo\";s:47:\"HomeProz Real Estate | Albert Lea MN Properties\";s:18:\"title-author-wpseo\";s:41:\"%%name%%, Author at %%sitename%% %%page%%\";s:19:\"title-archive-wpseo\";s:38:\"%%date%% %%page%% %%sep%% %%sitename%%\";s:18:\"title-search-wpseo\";s:63:\"You searched for %%searchphrase%% %%page%% %%sep%% %%sitename%%\";s:15:\"title-404-wpseo\";s:35:\"Page not found %%sep%% %%sitename%%\";s:25:\"social-title-author-wpseo\";s:8:\"%%name%%\";s:26:\"social-title-archive-wpseo\";s:8:\"%%date%%\";s:31:\"social-description-author-wpseo\";s:0:\"\";s:32:\"social-description-archive-wpseo\";s:0:\"\";s:29:\"social-image-url-author-wpseo\";s:0:\"\";s:30:\"social-image-url-archive-wpseo\";s:0:\"\";s:28:\"social-image-id-author-wpseo\";i:0;s:29:\"social-image-id-archive-wpseo\";i:0;s:19:\"metadesc-home-wpseo\";s:120:\"HomeProz Real Estate - Your trusted partner for buying and selling homes in Albert Lea, Minnesota and surrounding areas.\";s:21:\"metadesc-author-wpseo\";s:0:\"\";s:22:\"metadesc-archive-wpseo\";s:0:\"\";s:9:\"rssbefore\";s:0:\"\";s:8:\"rssafter\";s:53:\"The post %%POSTLINK%% appeared first on %%BLOGLINK%%.\";s:20:\"noindex-author-wpseo\";b:0;s:28:\"noindex-author-noposts-wpseo\";b:0;s:21:\"noindex-archive-wpseo\";b:0;s:14:\"disable-author\";b:0;s:12:\"disable-date\";b:0;s:19:\"disable-post_format\";b:0;s:18:\"disable-attachment\";b:0;s:20:\"breadcrumbs-404crumb\";s:25:\"Error 404: Page not found\";s:29:\"breadcrumbs-display-blog-page\";b:0;s:20:\"breadcrumbs-boldlast\";b:0;s:25:\"breadcrumbs-archiveprefix\";s:12:\"Archives for\";s:18:\"breadcrumbs-enable\";b:0;s:16:\"breadcrumbs-home\";s:4:\"Home\";s:18:\"breadcrumbs-prefix\";s:0:\"\";s:24:\"breadcrumbs-searchprefix\";s:16:\"You searched for\";s:15:\"breadcrumbs-sep\";s:2:\"»\";s:12:\"website_name\";s:0:\"\";s:11:\"person_name\";s:0:\"\";s:11:\"person_logo\";s:0:\"\";s:22:\"alternate_website_name\";s:0:\"\";s:12:\"company_logo\";s:0:\"\";s:12:\"company_name\";s:0:\"\";s:22:\"company_alternate_name\";s:0:\"\";s:17:\"company_or_person\";s:7:\"company\";s:25:\"company_or_person_user_id\";b:0;s:17:\"stripcategorybase\";b:0;s:26:\"open_graph_frontpage_title\";s:12:\"%%sitename%%\";s:25:\"open_graph_frontpage_desc\";s:0:\"\";s:26:\"open_graph_frontpage_image\";s:0:\"\";s:24:\"publishing_principles_id\";i:0;s:25:\"ownership_funding_info_id\";i:0;s:29:\"actionable_feedback_policy_id\";i:0;s:21:\"corrections_policy_id\";i:0;s:16:\"ethics_policy_id\";i:0;s:19:\"diversity_policy_id\";i:0;s:28:\"diversity_staffing_report_id\";i:0;s:15:\"org-description\";s:0:\"\";s:9:\"org-email\";s:0:\"\";s:9:\"org-phone\";s:0:\"\";s:14:\"org-legal-name\";s:0:\"\";s:17:\"org-founding-date\";s:0:\"\";s:20:\"org-number-employees\";s:0:\"\";s:10:\"org-vat-id\";s:0:\"\";s:10:\"org-tax-id\";s:0:\"\";s:7:\"org-iso\";s:0:\"\";s:8:\"org-duns\";s:0:\"\";s:11:\"org-leicode\";s:0:\"\";s:9:\"org-naics\";s:0:\"\";s:10:\"title-post\";s:39:\"%%title%% %%page%% %%sep%% %%sitename%%\";s:13:\"metadesc-post\";s:0:\"\";s:12:\"noindex-post\";b:0;s:23:\"display-metabox-pt-post\";b:0;s:23:\"post_types-post-maintax\";i:0;s:21:\"schema-page-type-post\";s:7:\"WebPage\";s:24:\"schema-article-type-post\";s:7:\"Article\";s:17:\"social-title-post\";s:9:\"%%title%%\";s:23:\"social-description-post\";s:0:\"\";s:21:\"social-image-url-post\";s:0:\"\";s:20:\"social-image-id-post\";i:0;s:10:\"title-page\";s:39:\"%%title%% %%page%% %%sep%% %%sitename%%\";s:13:\"metadesc-page\";s:0:\"\";s:12:\"noindex-page\";b:0;s:23:\"display-metabox-pt-page\";b:0;s:23:\"post_types-page-maintax\";i:0;s:21:\"schema-page-type-page\";s:7:\"WebPage\";s:24:\"schema-article-type-page\";s:4:\"None\";s:17:\"social-title-page\";s:9:\"%%title%%\";s:23:\"social-description-page\";s:0:\"\";s:21:\"social-image-url-page\";s:0:\"\";s:20:\"social-image-id-page\";i:0;s:16:\"title-attachment\";s:39:\"%%title%% %%page%% %%sep%% %%sitename%%\";s:19:\"metadesc-attachment\";s:0:\"\";s:18:\"noindex-attachment\";b:0;s:29:\"display-metabox-pt-attachment\";b:0;s:29:\"post_types-attachment-maintax\";i:0;s:27:\"schema-page-type-attachment\";s:7:\"WebPage\";s:30:\"schema-article-type-attachment\";s:4:\"None\";s:18:\"title-tax-category\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:21:\"metadesc-tax-category\";s:0:\"\";s:28:\"display-metabox-tax-category\";b:0;s:20:\"noindex-tax-category\";b:0;s:25:\"social-title-tax-category\";s:23:\"%%term_title%% Archives\";s:31:\"social-description-tax-category\";s:0:\"\";s:29:\"social-image-url-tax-category\";s:0:\"\";s:28:\"social-image-id-tax-category\";i:0;s:26:\"taxonomy-category-ptparent\";i:0;s:18:\"title-tax-post_tag\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:21:\"metadesc-tax-post_tag\";s:0:\"\";s:28:\"display-metabox-tax-post_tag\";b:0;s:20:\"noindex-tax-post_tag\";b:0;s:25:\"social-title-tax-post_tag\";s:23:\"%%term_title%% Archives\";s:31:\"social-description-tax-post_tag\";s:0:\"\";s:29:\"social-image-url-tax-post_tag\";s:0:\"\";s:28:\"social-image-id-tax-post_tag\";i:0;s:26:\"taxonomy-post_tag-ptparent\";i:0;s:21:\"title-tax-post_format\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:24:\"metadesc-tax-post_format\";s:0:\"\";s:31:\"display-metabox-tax-post_format\";b:0;s:23:\"noindex-tax-post_format\";b:0;s:28:\"social-title-tax-post_format\";s:23:\"%%term_title%% Archives\";s:34:\"social-description-tax-post_format\";s:0:\"\";s:32:\"social-image-url-tax-post_format\";s:0:\"\";s:31:\"social-image-id-tax-post_format\";i:0;s:29:\"taxonomy-post_format-ptparent\";i:0;s:14:\"title-property\";s:30:\"%%title%% %%sep%% %%sitename%%\";s:17:\"metadesc-property\";s:106:\"View property details, photos, and features for %%title%%. Contact HomeProz Real Estate in Albert Lea, MN.\";s:16:\"noindex-property\";b:0;s:27:\"display-metabox-pt-property\";b:0;s:27:\"post_types-property-maintax\";i:0;s:25:\"schema-page-type-property\";s:7:\"WebPage\";s:28:\"schema-article-type-property\";s:4:\"None\";s:21:\"social-title-property\";s:9:\"%%title%%\";s:27:\"social-description-property\";s:0:\"\";s:25:\"social-image-url-property\";s:0:\"\";s:24:\"social-image-id-property\";i:0;s:24:\"title-ptarchive-property\";s:49:\"Properties For Sale %%page%% %%sep%% %%sitename%%\";s:27:\"metadesc-ptarchive-property\";s:126:\"Browse all properties for sale in Albert Lea, Minnesota and surrounding areas. Find your dream home with HomeProz Real Estate.\";s:26:\"bctitle-ptarchive-property\";s:0:\"\";s:26:\"noindex-ptarchive-property\";b:0;s:31:\"social-title-ptarchive-property\";s:21:\"%%pt_plural%% Archive\";s:37:\"social-description-ptarchive-property\";s:0:\"\";s:35:\"social-image-url-ptarchive-property\";s:0:\"\";s:34:\"social-image-id-ptarchive-property\";i:0;s:23:\"title-tax-property_type\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:26:\"metadesc-tax-property_type\";s:0:\"\";s:33:\"display-metabox-tax-property_type\";b:0;s:25:\"noindex-tax-property_type\";b:0;s:30:\"social-title-tax-property_type\";s:23:\"%%term_title%% Archives\";s:36:\"social-description-tax-property_type\";s:0:\"\";s:34:\"social-image-url-tax-property_type\";s:0:\"\";s:33:\"social-image-id-tax-property_type\";i:0;s:31:\"taxonomy-property_type-ptparent\";i:0;s:25:\"title-tax-property_status\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:28:\"metadesc-tax-property_status\";s:0:\"\";s:35:\"display-metabox-tax-property_status\";b:0;s:27:\"noindex-tax-property_status\";b:0;s:32:\"social-title-tax-property_status\";s:23:\"%%term_title%% Archives\";s:38:\"social-description-tax-property_status\";s:0:\"\";s:36:\"social-image-url-tax-property_status\";s:0:\"\";s:35:\"social-image-id-tax-property_status\";i:0;s:33:\"taxonomy-property_status-ptparent\";i:0;s:27:\"title-tax-property_location\";s:53:\"%%term_title%% Archives %%page%% %%sep%% %%sitename%%\";s:30:\"metadesc-tax-property_location\";s:0:\"\";s:37:\"display-metabox-tax-property_location\";b:0;s:29:\"noindex-tax-property_location\";b:0;s:34:\"social-title-tax-property_location\";s:23:\"%%term_title%% Archives\";s:40:\"social-description-tax-property_location\";s:0:\"\";s:38:\"social-image-url-tax-property_location\";s:0:\"\";s:37:\"social-image-id-tax-property_location\";i:0;s:35:\"taxonomy-property_location-ptparent\";i:0;s:14:\"person_logo_id\";i:0;s:15:\"company_logo_id\";i:0;s:29:\"open_graph_frontpage_image_id\";i:0;}','auto'),(170,'wpseo_social','a:20:{s:13:\"facebook_site\";s:0:\"\";s:13:\"instagram_url\";s:0:\"\";s:12:\"linkedin_url\";s:0:\"\";s:11:\"myspace_url\";s:0:\"\";s:16:\"og_default_image\";s:0:\"\";s:19:\"og_default_image_id\";s:0:\"\";s:18:\"og_frontpage_title\";s:47:\"HomeProz Real Estate | Albert Lea MN Properties\";s:17:\"og_frontpage_desc\";s:97:\"Your trusted partner for buying and selling homes in Albert Lea, Minnesota and surrounding areas.\";s:18:\"og_frontpage_image\";s:0:\"\";s:21:\"og_frontpage_image_id\";s:0:\"\";s:9:\"opengraph\";b:1;s:13:\"pinterest_url\";s:0:\"\";s:15:\"pinterestverify\";s:0:\"\";s:7:\"twitter\";b:1;s:12:\"twitter_site\";s:0:\"\";s:17:\"twitter_card_type\";s:19:\"summary_large_image\";s:11:\"youtube_url\";s:0:\"\";s:13:\"wikipedia_url\";s:0:\"\";s:17:\"other_social_urls\";a:0:{}s:12:\"mastodon_url\";s:0:\"\";}','auto'),(171,'wpseo_llmstxt','a:7:{s:23:\"llms_txt_selection_mode\";s:4:\"auto\";s:13:\"about_us_page\";i:0;s:12:\"contact_page\";i:0;s:10:\"terms_page\";i:0;s:19:\"privacy_policy_page\";i:0;s:9:\"shop_page\";i:0;s:20:\"other_included_pages\";a:0:{}}','auto'),(174,'webpc_is_new_installation','1','auto'),(175,'webpc_notice_thanks','1765581302','auto'),(176,'webpc_notice_pro_version','1764976502','auto'),(177,'webpc_stats_installation_date','2025-11-28 23:15:02','auto'),(178,'webpc_stats_first_version','6.3.2','auto'),(181,'aio_wp_security_configs','a:52:{s:28:\"aiowps_enable_login_lockdown\";s:1:\"1\";s:28:\"aiowps_allow_unlock_requests\";s:1:\"1\";s:25:\"aiowps_max_login_attempts\";s:2:\"10\";s:24:\"aiowps_retry_time_period\";s:1:\"5\";s:26:\"aiowps_lockout_time_length\";s:2:\"30\";s:30:\"aiowps_max_lockout_time_length\";s:2:\"60\";s:28:\"aiowps_set_generic_login_msg\";s:1:\"1\";s:26:\"aiowps_enable_email_notify\";s:1:\"1\";s:20:\"aiowps_email_address\";s:16:\"brian@hanson.xyz\";s:39:\"aiowps_enable_invalid_username_lockdown\";s:0:\"\";s:43:\"aiowps_instantly_lockout_specific_usernames\";a:3:{i:0;s:5:\"admin\";i:1;s:13:\"administrator\";i:2;s:4:\"test\";}s:36:\"aiowps_remove_wp_generator_meta_info\";s:1:\"1\";s:27:\"aiowps_disable_file_editing\";s:1:\"1\";s:37:\"aiowps_prevent_default_wp_file_access\";s:1:\"1\";s:28:\"aiowps_enable_basic_firewall\";s:1:\"1\";s:27:\"aiowps_max_file_upload_size\";i:100;s:38:\"aiowps_disable_xmlrpc_pingback_methods\";s:1:\"1\";s:34:\"aiowps_block_debug_log_file_access\";s:1:\"1\";s:26:\"aiowps_disable_index_views\";s:1:\"1\";s:32:\"aiowps_prevent_users_enumeration\";s:1:\"1\";s:42:\"aiowps_disallow_unauthorized_rest_requests\";s:1:\"1\";s:40:\"aiowps_prevent_site_display_inside_frame\";s:1:\"1\";s:28:\"aiowps_enable_login_honeypot\";s:1:\"1\";s:35:\"aiowps_disable_application_password\";s:0:\"\";s:30:\"aiowps_enable_spambot_blocking\";s:1:\"1\";s:29:\"aiowps_enable_comment_captcha\";s:0:\"\";s:25:\"aiowps_enable_404_logging\";s:1:\"1\";s:28:\"aiowps_enable_404_IP_lockout\";s:0:\"\";s:36:\"aiowps_on_uninstall_delete_db_tables\";s:1:\"1\";s:34:\"aiowps_on_uninstall_delete_configs\";s:1:\"1\";s:31:\"aiowps_enable_rename_login_page\";s:0:\"\";s:43:\"aiowps_enable_brute_force_attack_prevention\";s:0:\"\";s:19:\"aiowps_site_lockout\";s:0:\"\";s:19:\"aiowps_enable_debug\";s:0:\"\";s:22:\"aiowps_default_captcha\";s:0:\"\";s:27:\"aiowps_enable_login_captcha\";s:1:\"1\";s:35:\"aiowps_enable_registration_honeypot\";s:1:\"1\";s:26:\"aiowps_enable_blacklisting\";s:0:\"\";s:25:\"aiowps_enable_5g_firewall\";s:0:\"\";s:25:\"aiowps_enable_6g_firewall\";s:0:\"\";s:26:\"aiowps_enable_custom_rules\";s:0:\"\";s:25:\"aiowps_prevent_hotlinking\";s:0:\"\";s:22:\"aiowps_copy_protection\";s:0:\"\";s:33:\"aiowps_disable_rss_and_atom_feeds\";s:0:\"\";s:27:\"aiowps_enable_forced_logout\";s:0:\"\";s:32:\"aiowps_enable_automated_fcd_scan\";s:0:\"\";s:12:\"installed-at\";i:1764371970;s:24:\"aiowps_default_recaptcha\";s:1:\"1\";s:25:\"aiowps_recaptcha_site_key\";s:40:\"6LejYRssAAAAAEhFcdcVBEB0j16HuLSWnyTYunYi\";s:27:\"aiowps_recaptcha_secret_key\";s:40:\"6LejYRssAAAAAKn-kf5xdZrBym4XA3ocxf_LFjJ7\";s:34:\"aiowps_enable_custom_login_captcha\";s:1:\"1\";s:40:\"aiowps_enable_password_protected_captcha\";s:1:\"1\";}','auto'),(182,'aios_antibot_key_map_info','a:3:{i:0;a:2:{i:0;a:2:{i:0;s:8:\"dz7zzn8y\";i:1;s:12:\"ewbnnm47eqe7\";}i:1;a:2:{i:0;s:8:\"ovzo7jga\";i:1;s:12:\"zojsx526xhvu\";}}i:1;a:2:{i:0;a:2:{i:0;s:8:\"xdxz27wr\";i:1;s:12:\"xeft4p3ib2l1\";}i:1;a:2:{i:0;s:8:\"oth0fymk\";i:1;s:12:\"bjcyxlmg09pv\";}}i:2;i:1764720000;}','off'),(183,'aiowpsec_db_version','2.1.4','auto'),(184,'aiowpsec_firewall_version','1.0.8','auto'),(185,'_site_transient_timeout_wp_theme_files_patterns-2aae27f1f26ef7a6be8ebee5c8a6a86b','1764374239','off'),(186,'_site_transient_wp_theme_files_patterns-2aae27f1f26ef7a6be8ebee5c8a6a86b','a:2:{s:7:\"version\";s:5:\"1.0.0\";s:8:\"patterns\";a:7:{s:16:\"contact-info.php\";a:5:{s:5:\"title\";s:18:\"Contact Info Block\";s:4:\"slug\";s:21:\"homeproz/contact-info\";s:11:\"description\";s:66:\"A contact information block with address, phone, email, and hours.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:5:{i:0;s:7:\"contact\";i:1;s:7:\"address\";i:2;s:5:\"phone\";i:3;s:5:\"email\";i:4;s:5:\"hours\";}}s:14:\"cta-banner.php\";a:5:{s:5:\"title\";s:10:\"CTA Banner\";s:4:\"slug\";s:19:\"homeproz/cta-banner\";s:11:\"description\";s:59:\"A full-width call-to-action banner with heading and button.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:6:{i:0;s:4:\"call\";i:1;s:2:\"to\";i:2;s:6:\"action\";i:3;s:6:\"banner\";i:4;s:3:\"cta\";i:5;s:7:\"contact\";}}s:16:\"feature-grid.php\";a:5:{s:5:\"title\";s:24:\"Feature Grid (3 columns)\";s:4:\"slug\";s:21:\"homeproz/feature-grid\";s:11:\"description\";s:52:\"A three-column grid showcasing features or services.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:4:{i:0;s:8:\"features\";i:1;s:7:\"columns\";i:2;s:8:\"services\";i:3;s:8:\"benefits\";}}s:12:\"hero-cta.php\";a:5:{s:5:\"title\";s:13:\"Hero with CTA\";s:4:\"slug\";s:17:\"homeproz/hero-cta\";s:11:\"description\";s:73:\"A full-width hero section with heading, text, and call-to-action buttons.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:6:{i:0;s:4:\"hero\";i:1;s:6:\"banner\";i:2;s:4:\"call\";i:3;s:2:\"to\";i:4;s:6:\"action\";i:5;s:6:\"header\";}}s:17:\"split-content.php\";a:5:{s:5:\"title\";s:13:\"Split Content\";s:4:\"slug\";s:22:\"homeproz/split-content\";s:11:\"description\";s:65:\"A two-column layout with image on one side and text on the other.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:6:{i:0;s:5:\"split\";i:1;s:5:\"media\";i:2;s:4:\"text\";i:3;s:5:\"image\";i:4;s:3:\"two\";i:5;s:6:\"column\";}}s:13:\"team-grid.php\";a:5:{s:5:\"title\";s:9:\"Team Grid\";s:4:\"slug\";s:18:\"homeproz/team-grid\";s:11:\"description\";s:67:\"A grid layout showcasing team members with photos and contact info.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:5:{i:0;s:4:\"team\";i:1;s:6:\"agents\";i:2;s:5:\"staff\";i:3;s:7:\"members\";i:4;s:6:\"people\";}}s:15:\"testimonial.php\";a:5:{s:5:\"title\";s:11:\"Testimonial\";s:4:\"slug\";s:20:\"homeproz/testimonial\";s:11:\"description\";s:44:\"A testimonial quote with client attribution.\";s:10:\"categories\";a:2:{i:0;s:8:\"featured\";i:1;s:8:\"homeproz\";}s:8:\"keywords\";a:4:{i:0;s:11:\"testimonial\";i:1;s:5:\"quote\";i:2;s:6:\"review\";i:3;s:6:\"client\";}}}}','off'),(187,'recently_activated','a:2:{s:30:\"advanced-custom-fields/acf.php\";i:1764373621;i:0;b:0;}','auto'),(188,'acf_pro_license','MzNjMGM0MjM5Yjk5MTI3NWQ1N2MwNWQyM2VjZTYzYzA0YzYzZDU5YmFlZDY3N2JhNGJiODZk','auto'); /*!40000 ALTER TABLE `wp_options` ENABLE KEYS */; UNLOCK TABLES; @@ -862,4 +863,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2025-11-28 17:31:05 +-- Dump completed on 2025-11-28 17:49:38 diff --git a/wp-content/plugins/advanced-custom-fields/README.md b/wp-content/plugins/advanced-custom-fields-pro/README.md old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/README.md rename to wp-content/plugins/advanced-custom-fields-pro/README.md diff --git a/wp-content/plugins/advanced-custom-fields/acf.php b/wp-content/plugins/advanced-custom-fields-pro/acf.php old mode 100755 new mode 100644 similarity index 99% rename from wp-content/plugins/advanced-custom-fields/acf.php rename to wp-content/plugins/advanced-custom-fields-pro/acf.php index d483cad3..90ebca25 --- a/wp-content/plugins/advanced-custom-fields/acf.php +++ b/wp-content/plugins/advanced-custom-fields-pro/acf.php @@ -1,17 +1,18 @@ table{margin:0 0 8px;background:#f9f9f9}.acf-repeater>table>tbody tr.acf-divider:not(:first-child)>td{border-top:10px solid #eaecf0}.acf-repeater .acf-row-handle{width:16px;text-align:center !important;vertical-align:middle !important;position:relative}.acf-repeater .acf-row-handle .acf-order-input-wrap{width:45px}.acf-repeater .acf-row-handle .acf-order-input::-webkit-outer-spin-button,.acf-repeater .acf-row-handle .acf-order-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.acf-repeater .acf-row-handle .acf-order-input{-moz-appearance:textfield;text-align:center}.acf-repeater .acf-row-handle .acf-icon{display:none;position:absolute;top:0;margin:-8px 0 0 -2px}.acf-repeater .acf-row-handle .acf-icon.-minus{top:50%}body.browser-msie .acf-repeater .acf-row-handle .acf-icon.-minus{top:25px}.acf-repeater .acf-row-handle.order{background:#f4f4f4;cursor:move;color:#aaa;text-shadow:#fff 0 1px 0}.acf-repeater .acf-row-handle.order:hover{color:#666}.acf-repeater .acf-row-handle.order+td{border-left-color:#dfdfdf}.acf-repeater .acf-row-handle.pagination{cursor:auto}.acf-repeater .acf-row-handle.remove{background:#f9f9f9;border-left-color:#dfdfdf}.acf-repeater th.acf-row-handle:before{content:"";width:16px;display:block;height:1px}.acf-repeater .acf-row.acf-clone{display:none !important}.acf-repeater .acf-row:hover>.acf-row-handle .acf-icon,.acf-repeater .acf-row.-hover>.acf-row-handle .acf-icon{display:block}.acf-repeater .acf-row:hover>.acf-row-handle .acf-icon.show-on-shift,.acf-repeater .acf-row.-hover>.acf-row-handle .acf-icon.show-on-shift{display:none}body.acf-keydown-shift .acf-repeater .acf-row:hover>.acf-row-handle .acf-icon.show-on-shift,body.acf-keydown-shift .acf-repeater .acf-row.-hover>.acf-row-handle .acf-icon.show-on-shift{display:block}body.acf-keydown-shift .acf-repeater .acf-row:hover>.acf-row-handle .acf-icon.hide-on-shift,body.acf-keydown-shift .acf-repeater .acf-row.-hover>.acf-row-handle .acf-icon.hide-on-shift{display:none}.acf-repeater>table>tbody>tr.ui-sortable-helper{box-shadow:0 1px 5px rgba(0,0,0,.2)}.acf-repeater>table>tbody>tr.ui-sortable-placeholder{visibility:visible !important}.acf-repeater>table>tbody>tr.ui-sortable-placeholder td{background:#f9f9f9}.acf-repeater.-row>table>tbody>tr>td,.acf-repeater.-block>table>tbody>tr>td{border-top-color:#e1e1e1}.acf-repeater.-empty>table>thead>tr>th{border-bottom:0 none}.acf-repeater.-empty.-row>table,.acf-repeater.-empty.-block>table{display:none}.acf-repeater .acf-row.-collapsed>.acf-field{display:none !important}.acf-repeater .acf-row.-collapsed>td.acf-field.-collapsed-target{display:table-cell !important}.acf-repeater .acf-row.-collapsed>.acf-fields>*{display:none !important}.acf-repeater .acf-row.-collapsed>.acf-fields>.acf-field.-collapsed-target{display:block !important}.acf-repeater .acf-row.-collapsed>.acf-fields>.acf-field.-collapsed-target[data-width]{float:none !important;width:auto !important}.acf-repeater.-table .acf-row.-collapsed .acf-field.-collapsed-target{border-left-color:#dfdfdf}.acf-repeater.-max .acf-icon[data-event=add-row]{display:none !important}.acf-repeater>.acf-actions .acf-button{float:right;pointer-events:auto !important}.acf-repeater>.acf-actions .acf-tablenav{float:right;margin-right:20px}.acf-repeater>.acf-actions .acf-tablenav .current-page{width:auto !important}.acf-flexible-content{position:relative;container-name:flexible-content;container-type:inline-size}.acf-flexible-content>.clones{display:none}.acf-flexible-content>.values{margin:0 0 8px}.acf-flexible-content>.values>.ui-sortable-placeholder{visibility:visible !important;border:1px dashed #b4b9be;box-shadow:none;background:rgba(0,0,0,0)}.acf-flexible-content .layout{position:relative;margin:20px 0 0;background:#fff;border:1px solid #ccd0d4}.acf-flexible-content .layout:first-child{margin-top:0}.acf-flexible-content .layout[data-enabled="0"]>.acf-fc-layout-actions-wrap .acf-layout-disabled{display:inline-flex}.acf-flexible-content .layout[data-renamed="1"] .acf-fc-layout-actions-wrap .acf-fc-layout-original-title{display:flex}.acf-flexible-content .layout .acf-fc-layout-actions-wrap{display:flex;justify-content:space-between;align-items:center;min-height:48px;border-bottom:#ccd0d4 solid 1px;padding:0 8px 0 12px;background:#f9f9f9}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-handle{display:flex;align-items:center;position:relative;cursor:move;color:#444;font-size:13px;font-weight:500;line-height:1.4em;flex-grow:1;gap:8px}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-layout-disabled{display:none;font-size:12px;font-weight:normal;line-height:16px;border-radius:2px;background-color:#e0e0e0;color:#101828;padding:4px 8px;margin-left:4px}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-layout-disabled:before{content:"";width:16px;height:16px;margin-right:4px;background:#101828;-webkit-mask-image:url("../../../images/icons/icon-hidden.svg");mask-image:url("../../../images/icons/icon-hidden.svg")}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-original-title{display:none;font-weight:400;color:rgba(68,68,68,.5)}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-order,.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-draggable-icon{display:flex;justify-content:center;width:32px;height:20px;border:1px solid #e0e0e0;border-radius:10px;box-sizing:border-box;line-height:18px;background:#f0f0f0;font-size:12px;color:#757575}html[dir=rtl] .acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-order,html[dir=rtl] .acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-draggable-icon{float:right;margin-right:0;margin-left:5px}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-order+.acf-fc-layout-draggable-icon{display:none;border:1px solid #2f2f2f;background:#2f2f2f}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-order+.acf-fc-layout-draggable-icon:before{content:"";width:7px;height:11px;margin:auto;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;background:#fff;vertical-align:middle;-webkit-mask-image:url("../../../images/icons/icon-draggable.svg");mask-image:url("../../../images/icons/icon-draggable.svg")}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls{display:flex;align-items:center;gap:5px}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .disabled .acf-icon{background:#ccc !important}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-icon{display:block;box-sizing:content-box;height:30px;width:30px}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-icon.-plus-alt,.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-icon.-duplicate-alt,.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-icon.-trash-alt,.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-icon.-more-actions{visibility:hidden;background:#101828}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-icon.-collapse{border:none;color:#101828}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-icon.-collapse:hover{background:none;color:#101828}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-layout-collapse{display:flex;align-items:center;align-content:center;margin-left:8px;padding-left:4px;border-left:1px solid #d9d9d9}.acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls a:focus{border-radius:2px}html[dir=rtl] .acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls{right:auto;left:9px}.acf-flexible-content .layout .acf-fc-layout-actions-wrap:hover .acf-fc-layout-order{display:none}.acf-flexible-content .layout .acf-fc-layout-actions-wrap:hover .acf-fc-layout-draggable-icon{display:flex}.acf-flexible-content .layout>.acf-fields,.acf-flexible-content .layout>.acf-table{border:1px solid rgba(0,0,0,0);border-top:none}.acf-flexible-content .layout.active-layout{border-color:rgba(0,0,0,0)}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap{background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));border:none}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-draggable-icon{border-color:#fff;background:#fff}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-draggable-icon:before{background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9))}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-handle{color:#fff}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-handle .acf-fc-layout-order{background:rgba(240,240,240,.2);border-color:rgba(224,224,224,.34);color:#fff}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-handle .acf-fc-layout-original-title{color:hsla(0,0%,100%,.5)}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls .disabled .acf-icon{background:hsla(0,0%,100%,.3)}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls .-plus-alt,.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls .-duplicate-alt,.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls .-trash-alt,.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls .-more-actions{background:#fff;visibility:visible}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls .-collapse{color:#fff}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls .-collapse:hover{color:#fff}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-layout-collapse{border-left-color:hsla(0,0%,100%,.2)}.acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap .acf-fc-layout-controls a:focus{box-shadow:0 0 0 1px #fff}.acf-flexible-content .layout.active-layout>.acf-fields,.acf-flexible-content .layout.active-layout>.acf-table{background:rgba(56,88,233,.04);border:1px solid rgba(56,88,233,.2)}.acf-flexible-content .layout.is-selected{border-color:#7e8993}.acf-flexible-content .layout.is-selected .acf-fc-layout-handle{border-color:#7e8993}.acf-flexible-content .layout:hover .acf-fc-layout-controls .acf-icon.-plus-alt,.acf-flexible-content .layout:hover .acf-fc-layout-controls .acf-icon.-duplicate-alt,.acf-flexible-content .layout:hover .acf-fc-layout-controls .acf-icon.-trash-alt,.acf-flexible-content .layout:hover .acf-fc-layout-controls .acf-icon.-more-actions,.acf-flexible-content .layout.-hover .acf-fc-layout-controls .acf-icon.-plus-alt,.acf-flexible-content .layout.-hover .acf-fc-layout-controls .acf-icon.-duplicate-alt,.acf-flexible-content .layout.-hover .acf-fc-layout-controls .acf-icon.-trash-alt,.acf-flexible-content .layout.-hover .acf-fc-layout-controls .acf-icon.-more-actions{visibility:visible}.acf-flexible-content .layout.-collapsed>.acf-fc-layout-actions-wrap{border-bottom-width:0}.acf-flexible-content .layout.-collapsed>.acf-fields,.acf-flexible-content .layout.-collapsed>.acf-table{display:none}.acf-flexible-content .layout>.acf-table{box-shadow:none;box-sizing:border-box}.acf-flexible-content .layout>.acf-table>tbody>tr{background:#fff}.acf-flexible-content .layout>.acf-table>thead>tr>th{background:#f9f9f9}.acf-flexible-content .no-value-message{padding:19px;border:#ccc dashed 2px;text-align:center;display:none}.acf-flexible-content.-empty>.no-value-message{display:block}.acf-flexible-content.-empty .acf-fc-top-actions{display:none !important}.acf-flexible-content>.acf-actions{display:flex;justify-content:flex-end}.acf-flexible-content>.acf-actions.acf-fc-top-actions{gap:20px;margin-bottom:15px}.acf-flexible-content>.acf-actions.acf-fc-top-actions .acf-separator{display:inline-block;width:1px;height:40px;background:#d9d9d9}.acf-flexible-content>.acf-actions.acf-fc-top-actions .acf-btn-clear{color:#0783be !important;padding:0}.acf-flexible-content>.acf-actions.acf-fc-top-actions .acf-btn-clear:hover{text-decoration:underline}.acf-flexible-content>.acf-actions .acf-button{display:inline-flex;align-items:center}@container flexible-content (max-width: 400px){.acf-flexible-content>.acf-actions.acf-fc-top-actions{flex-wrap:wrap;gap:10px}.acf-flexible-content>.acf-actions.acf-fc-top-actions .acf-separator{display:none}.acf-flexible-content>.acf-actions.acf-fc-top-actions .acf-btn-clear{flex:1 1 auto;text-align:center;justify-content:center}.acf-flexible-content>.acf-actions.acf-fc-top-actions .acf-button{flex:1 1 100%;justify-content:center;width:100%}}#acf-popup .acf-rename-layout-popup .inner .acf-field:first-child{margin-top:0}#acf-popup .acf-rename-layout-popup .inner .acf-field .acf-label{text-transform:uppercase;font-size:11px}#acf-popup .acf-rename-layout-popup .inner .acf-field input[type=text]{height:40px;border-radius:0}#acf-popup .acf-rename-layout-popup .inner .acf-actions{padding-top:10px}#acf-popup .acf-rename-layout-popup .inner .acf-actions .acf-reset-label{flex-grow:1;padding-left:0;padding-right:0}#acf-popup .acf-rename-layout-popup .inner .acf-actions .acf-confirm{background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9)) !important}#acf-popup .acf-rename-layout-popup .inner .acf-actions .acf-confirm:hover{background:var(--wp-components-color-accent-darker-10, var(--wp-admin-theme-color-darker-10, #2145e6)) !important}.block-editor-page .acf-flexible-content>.acf-actions .acf-button{border-radius:2px;height:40px}.block-editor-page .acf-flexible-content>.acf-actions .acf-button.button-primary{background:var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9))}.block-editor-page .acf-flexible-content>.acf-actions .acf-button.button-primary:hover{background:var(--wp-components-color-accent-darker-10, var(--wp-admin-theme-color-darker-10, #2145e6))}body:not(.block-editor-page) .acf-flexible-content .acf-fc-top-actions{min-height:30px}body:not(.block-editor-page) .acf-flexible-content .acf-fc-top-actions .acf-separator{height:30px}body:not(.block-editor-page) .acf-flexible-content .acf-fc-top-actions .acf-btn{min-height:30px}body:not(.block-editor-page) .acf-flexible-content .layout.active-layout>.acf-fc-layout-actions-wrap{background:#2271b1}body:not(.block-editor-page) .acf-flexible-content .layout.active-layout>.acf-fields,body:not(.block-editor-page) .acf-flexible-content .layout.active-layout>.acf-table{background:rgba(34,113,177,.04)}.rtl .acf-flexible-content .layout .acf-fc-layout-actions-wrap{padding:0 12px 0 0}.rtl .acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-layout-disabled:before{margin-right:0;margin-left:4px}.rtl .acf-flexible-content .layout .acf-fc-layout-actions-wrap .acf-fc-layout-controls .acf-layout-collapse{border-right:1px solid #d9d9d9;border-left:none;padding:0 4px 0 0}.rtl .acf-fc-popup.acf-more-layout-actions li a:before{margin-right:0;margin-left:5px}.acf-fc-popup{background:#fff;border:1px solid #d0d5dd;padding:2px 8px;z-index:900001;min-width:135px}.acf-fc-popup:before{content:none}.acf-fc-popup ul{display:flex;flex-direction:column;list-style:none}.acf-fc-popup ul,.acf-fc-popup li{margin:0;padding:0}.acf-fc-popup li{position:relative;float:none;white-space:nowrap;height:40px;display:flex;align-items:center}.acf-fc-popup .badge{display:inline-block;border-radius:8px;font-size:9px;line-height:15px;padding:0 5px;background:#d54e21;text-align:center;color:#fff;vertical-align:top;margin:2px 0 0 5px}.acf-fc-popup a{color:#101828;width:100%;padding:5px 10px;display:block;text-decoration:none;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.acf-fc-popup a:hover{color:#2271b1}.acf-fc-popup a.disabled{color:#888;background:rgba(0,0,0,0)}.acf-fc-popup a:focus{box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9));border-radius:4px}.acf-fc-popup.acf-more-layout-actions{width:212px}.acf-fc-popup.acf-more-layout-actions li a{width:100%}.acf-fc-popup.acf-more-layout-actions li a:before{content:"";display:inline-block;width:16px;height:16px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;margin-right:5px;background:#101828;vertical-align:middle;margin-top:-2px}.acf-fc-popup.acf-more-layout-actions li a:hover:before{background:#2271b1}.acf-fc-popup.acf-more-layout-actions li a.acf-rename-layout:before{-webkit-mask-image:url("../../../images/icons/icon-edit.svg");mask-image:url("../../../images/icons/icon-edit.svg")}.acf-fc-popup.acf-more-layout-actions li a.acf-toggle-layout:before{-webkit-mask-image:url("../../../images/icons/icon-hidden-alt.svg");mask-image:url("../../../images/icons/icon-hidden-alt.svg")}.acf-fc-popup.acf-more-layout-actions li a.acf-toggle-layout.enable{display:none}.acf-fc-popup.acf-more-layout-actions li a.acf-toggle-layout.enable:before{-webkit-mask-image:url("../../../images/icons/icon-visible.svg");mask-image:url("../../../images/icons/icon-visible.svg")}.acf-fc-popup.acf-more-layout-actions li a.acf-toggle-layout.disabled{pointer-events:none}.acf-fc-popup.acf-more-layout-actions li a.acf-toggle-layout.disabled:before{background:#888}.acf-fc-popup.acf-more-layout-actions.enable-layout .acf-toggle-layout.disable{display:none}.acf-fc-popup.acf-more-layout-actions.enable-layout .acf-toggle-layout.enable{display:block}body:not(.block-editor-page) .acf-more-layout-actions li a:focus{box-shadow:0 0 0 2px #2271b1}.acf-gallery{border:#ccd0d4 solid 1px;height:400px;position:relative}.acf-gallery .acf-gallery-main{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;z-index:2}.acf-gallery .acf-gallery-attachments{position:absolute;top:0;right:0;bottom:48px;left:0;padding:5px;overflow:auto;overflow-x:hidden}.acf-gallery .acf-gallery-attachment{width:25%;float:left;cursor:pointer;position:relative}.acf-gallery .acf-gallery-attachment .margin{margin:5px;border:#d5d9dd solid 1px;position:relative;overflow:hidden;background:#eee}.acf-gallery .acf-gallery-attachment .margin:before{content:"";display:block;padding-top:100%}.acf-gallery .acf-gallery-attachment .thumbnail{position:absolute;top:0;left:0;width:100%;height:100%;transform:translate(50%, 50%)}html[dir=rtl] .acf-gallery .acf-gallery-attachment .thumbnail{transform:translate(-50%, 50%)}.acf-gallery .acf-gallery-attachment .thumbnail img{display:block;height:auto;max-height:100%;width:auto;transform:translate(-50%, -50%)}html[dir=rtl] .acf-gallery .acf-gallery-attachment .thumbnail img{transform:translate(50%, -50%)}.acf-gallery .acf-gallery-attachment .filename{position:absolute;bottom:0;left:0;right:0;padding:5%;background:#f4f4f4;background:hsla(0,0%,100%,.8);border-top:#dfdfdf solid 1px;font-weight:bold;text-align:center;word-wrap:break-word;max-height:90%;overflow:hidden}.acf-gallery .acf-gallery-attachment .actions{position:absolute;top:0;right:0;display:none}.acf-gallery .acf-gallery-attachment:hover .actions{display:block}.acf-gallery .acf-gallery-attachment.ui-sortable-helper .margin{border:none;box-shadow:0 1px 3px rgba(0,0,0,.3)}.acf-gallery .acf-gallery-attachment.ui-sortable-placeholder .margin{background:#f1f1f1;border:none}.acf-gallery .acf-gallery-attachment.ui-sortable-placeholder .margin *{display:none !important}.acf-gallery .acf-gallery-attachment.active .margin{box-shadow:0 0 0 1px #fff,0 0 0 5px #0073aa}.acf-gallery .acf-gallery-attachment.-icon .thumbnail img{transform:translate(-50%, -70%)}html[dir=rtl] .acf-gallery .acf-gallery-attachment{float:right}.acf-gallery.sidebar-open .acf-gallery-attachment .actions{display:none}.acf-gallery.sidebar-open .acf-gallery-side{z-index:2}.acf-gallery .acf-gallery-toolbar{position:absolute;right:0;bottom:0;left:0;padding:10px;border-top:#d5d9dd solid 1px;background:#fff;min-height:28px}.acf-gallery .acf-gallery-toolbar .acf-hl li{line-height:24px}.acf-gallery .acf-gallery-toolbar .bulk-actions-select{width:auto;margin:0 1px 0 0}.acf-gallery .acf-gallery-side{position:absolute;top:0;right:0;bottom:0;width:0;background:#f9f9f9;border-left:#ccd0d4 solid 1px;z-index:1;overflow:hidden}.acf-gallery .acf-gallery-side .acf-gallery-side-inner{position:absolute;top:0;left:0;bottom:0;width:349px}.acf-gallery .acf-gallery-side-info{position:relative;width:100%;padding:10px;margin:-10px 0 15px -10px;background:#f1f1f1;border-bottom:#dfdfdf solid 1px}.acf-gallery .acf-gallery-side-info:after{display:block;clear:both;content:""}html[dir=rtl] .acf-gallery .acf-gallery-side-info{margin-left:0;margin-right:-10px}.acf-gallery .acf-gallery-side-info img{float:left;width:auto;max-width:65px;max-height:65px;margin:0 10px 1px 0;background:#fff;padding:3px;border:#ccd0d4 solid 1px;border-radius:1px}html[dir=rtl] .acf-gallery .acf-gallery-side-info img{float:right;margin:0 0 0 10px}.acf-gallery .acf-gallery-side-info p{font-size:13px;line-height:15px;margin:3px 0;word-break:break-all;color:#666}.acf-gallery .acf-gallery-side-info p strong{color:#000}.acf-gallery .acf-gallery-side-info a{text-decoration:none}.acf-gallery .acf-gallery-side-info a.acf-gallery-edit{color:#21759b}.acf-gallery .acf-gallery-side-info a.acf-gallery-remove{color:#bc0b0b}.acf-gallery .acf-gallery-side-info a:hover{text-decoration:underline}.acf-gallery .acf-gallery-side-data{position:absolute;top:0;right:0;bottom:48px;left:0;overflow:auto;overflow-x:inherit;padding:10px}.acf-gallery .acf-gallery-side-data .acf-label,.acf-gallery .acf-gallery-side-data th.label{color:#666;font-size:12px;line-height:25px;padding:0 4px 8px 0 !important;width:auto !important;vertical-align:top}html[dir=rtl] .acf-gallery .acf-gallery-side-data .acf-label,html[dir=rtl] .acf-gallery .acf-gallery-side-data th.label{padding:0 0 8px 4px !important}.acf-gallery .acf-gallery-side-data .acf-label label,.acf-gallery .acf-gallery-side-data th.label label{font-weight:normal}.acf-gallery .acf-gallery-side-data .acf-input,.acf-gallery .acf-gallery-side-data td.field{padding:0 0 8px !important}.acf-gallery .acf-gallery-side-data textarea{min-height:0;height:60px}.acf-gallery .acf-gallery-side-data p.help{font-size:12px}.acf-gallery .acf-gallery-side-data p.help:hover{font-weight:normal}.acf-gallery[data-columns="1"] .acf-gallery-attachment{width:100%}.acf-gallery[data-columns="2"] .acf-gallery-attachment{width:50%}.acf-gallery[data-columns="3"] .acf-gallery-attachment{width:33.333%}.acf-gallery[data-columns="4"] .acf-gallery-attachment{width:25%}.acf-gallery[data-columns="5"] .acf-gallery-attachment{width:20%}.acf-gallery[data-columns="6"] .acf-gallery-attachment{width:16.666%}.acf-gallery[data-columns="7"] .acf-gallery-attachment{width:14.285%}.acf-gallery[data-columns="8"] .acf-gallery-attachment{width:12.5%}.acf-gallery .ui-resizable-handle{display:block;position:absolute}.acf-gallery .ui-resizable-s{bottom:-5px;cursor:ns-resize;height:7px;left:0;width:100%}.acf-media-modal .attachment.acf-selected{box-shadow:0 0 0 3px #fff inset,0 0 0 7px #0073aa inset !important}.acf-media-modal .attachment.acf-selected .check{display:none !important}.acf-media-modal .attachment.acf-selected .thumbnail{opacity:.25 !important}.acf-media-modal .attachment.acf-selected .attachment-preview:before{background:rgba(0,0,0,.15);z-index:1;position:relative}.acf-admin-single-options-page .select2-dropdown{border-color:#6bb5d8 !important;margin-top:-5px;overflow:hidden;box-shadow:0px 1px 2px rgba(16,24,40,.1)}.acf-admin-single-options-page .select2-dropdown.select2-dropdown--above{margin-top:0}.acf-admin-single-options-page .select2-container--default .select2-results__option[aria-selected=true]{background-color:#f9fafb !important;color:#667085}.acf-admin-single-options-page .select2-container--default .select2-results__option[aria-selected=true]:hover{color:#399ccb}.acf-admin-single-options-page .select2-container--default .select2-results__option--highlighted[aria-selected]{color:#fff !important;background-color:#0783be !important}.acf-admin-single-options-page .select2-dropdown .select2-results__option{margin-bottom:0}.acf-create-options-page-popup~.select2-container{z-index:999999999}.acf-block-component .components-placeholder{margin:0}.block-editor .acf-field.acf-error{background-color:rgba(255,0,0,.05)}.acf-block-component .acf-block-fields{background:#fff;text-align:left;font-size:13px;line-height:1.4em;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.acf-block-component .acf-block-fields.acf-empty-block-fields{border:1px solid #1e1e1e;padding:12px}.components-panel .acf-block-component .acf-block-fields.acf-empty-block-fields{border:none;border-top:1px solid #ddd;border-bottom:1px solid #ddd}html[dir=rtl] .acf-block-component .acf-block-fields{text-align:right}.acf-block-component .acf-block-fields p{font-size:13px;line-height:1.5}.acf-block-body .acf-block-fields:has(>.acf-error-message),.acf-block-fields:has(>.acf-error-message) .acf-block-fields:has(>.acf-error-message){border:none !important}.acf-block-body .acf-error-message,.acf-block-fields:has(>.acf-error-message) .acf-error-message{margin-top:0;border:none}.acf-block-body .acf-error-message .acf-notice-dismiss,.acf-block-fields:has(>.acf-error-message) .acf-error-message .acf-notice-dismiss{display:flex;align-items:center;justify-content:center;overflow:hidden;outline:unset}.acf-block-body .acf-error-message .acf-icon.-cancel::before,.acf-block-fields:has(>.acf-error-message) .acf-error-message .acf-icon.-cancel::before{margin:0 !important}.acf-block-body.acf-block-has-validation-error,.acf-block-fields:has(>.acf-error-message).acf-block-has-validation-error{border:2px solid #d94f4f}.acf-block-body .acf-error .acf-input .acf-notice,.acf-block-fields:has(>.acf-error-message) .acf-error .acf-input .acf-notice{background:none !important;border:none !important;display:flex !important;align-items:center !important;padding-left:0}.acf-block-body .acf-error .acf-input .acf-notice p,.acf-block-fields:has(>.acf-error-message) .acf-error .acf-input .acf-notice p{margin:.5em 0 !important}.acf-block-body .acf-error .acf-input .acf-notice::before,.acf-block-fields:has(>.acf-error-message) .acf-error .acf-input .acf-notice::before{content:"";position:relative;top:0;left:0;font-size:20px;background-image:url(../../../images/icons/icon-info-red.svg);background-repeat:no-repeat;background-position:center;background-size:69%;height:26px !important;width:26px !important;box-sizing:border-box}.acf-block-body .acf-error .acf-label label,.acf-block-fields:has(>.acf-error-message) .acf-error .acf-label label{color:#d94f4f}.acf-block-body .acf-error .acf-input input,.acf-block-fields:has(>.acf-error-message) .acf-error .acf-input input{border-color:#d94f4f}.acf-block-body.acf-block-has-validation-error::before,.acf-block-fields:has(>.acf-error-message).acf-block-has-validation-error::before{content:"";position:absolute;top:-2px;left:-32px;font-size:20px;background-color:#d94f4f;background-image:url(../../../images/icons/icon-info-white.svg);background-repeat:no-repeat;background-position-x:center;background-position-y:52%;background-size:55%;height:40px;width:32px;box-sizing:border-box}.acf-block-body .acf-block-validation-error,.acf-block-fields:has(>.acf-error-message) .acf-block-validation-error{color:#d94f4f;display:flex;align-items:center}.acf-block-body .acf-block-fields,.acf-block-fields:has(>.acf-error-message) .acf-block-fields{border:#adb2ad solid 1px}.acf-block-body .acf-block-fields .acf-tab-wrap .acf-tab-group,.acf-block-fields:has(>.acf-error-message) .acf-block-fields .acf-tab-wrap .acf-tab-group{margin-left:0;padding:16px 20px 0}.acf-block-body .acf-fields>.acf-field,.acf-block-fields:has(>.acf-error-message) .acf-fields>.acf-field{padding:16px 20px}.acf-block-body .acf-fields>.acf-field.acf-accordion,.acf-block-fields:has(>.acf-error-message) .acf-fields>.acf-field.acf-accordion{border-color:#adb2ad}.acf-block-body .acf-fields>.acf-field.acf-accordion .acf-accordion-title,.acf-block-fields:has(>.acf-error-message) .acf-fields>.acf-field.acf-accordion .acf-accordion-title{padding:16px 20px}.acf-block-body .acf-button,.acf-block-body .acf-link a.button,.acf-block-body .acf-add-checkbox,.acf-block-fields:has(>.acf-error-message) .acf-button,.acf-block-fields:has(>.acf-error-message) .acf-link a.button,.acf-block-fields:has(>.acf-error-message) .acf-add-checkbox{color:#2271b1 !important;border-color:#2271b1 !important;background:#f6f7f7 !important;vertical-align:top}.acf-block-body .acf-button.button-primary:hover,.acf-block-body .acf-link a.button.button-primary:hover,.acf-block-body .acf-add-checkbox.button-primary:hover,.acf-block-fields:has(>.acf-error-message) .acf-button.button-primary:hover,.acf-block-fields:has(>.acf-error-message) .acf-link a.button.button-primary:hover,.acf-block-fields:has(>.acf-error-message) .acf-add-checkbox.button-primary:hover{color:#fff !important;background:#2271b1 !important}.acf-block-body .acf-button:focus,.acf-block-body .acf-link a.button:focus,.acf-block-body .acf-add-checkbox:focus,.acf-block-fields:has(>.acf-error-message) .acf-button:focus,.acf-block-fields:has(>.acf-error-message) .acf-link a.button:focus,.acf-block-fields:has(>.acf-error-message) .acf-add-checkbox:focus{outline:none !important;background:#f6f7f7 !important}.acf-block-body .acf-button:hover,.acf-block-body .acf-link a.button:hover,.acf-block-body .acf-add-checkbox:hover,.acf-block-fields:has(>.acf-error-message) .acf-button:hover,.acf-block-fields:has(>.acf-error-message) .acf-link a.button:hover,.acf-block-fields:has(>.acf-error-message) .acf-add-checkbox:hover{color:#0a4b78 !important}.acf-block-body .acf-block-preview,.acf-block-fields:has(>.acf-error-message) .acf-block-preview{min-height:10px}.acf-block-panel .acf-block-fields{border-top:#ddd solid 1px;border-bottom:#ddd solid 1px;min-height:1px}.acf-block-panel .acf-block-fields:empty{border-top:none}.acf-block-panel .acf-block-fields .acf-tab-wrap{background:rgba(0,0,0,0)}.components-panel__body .acf-block-panel{margin:16px -16px -16px}@media(min-width: 600px)and (min-width: 782px){.acf-block-form-modal{height:100% !important;width:50% !important;border-radius:0;position:absolute;right:0}html[dir=rtl] .acf-block-form-modal{right:auto;left:0}html[dir=rtl] .acf-block-form-modal .components-modal__header .components-button{left:0;right:auto}@keyframes components-modal__appear-animation{0%{right:-20px;opacity:0;transform:scale(1)}to{right:0;opacity:1;transform:scale(1)}}@keyframes components-modal__disappear-animation{0%{right:0;opacity:1;transform:scale(1)}to{right:-20px;opacity:0;transform:scale(1)}}@keyframes components-modal__appear-animation-rtl{0%{left:-20px;opacity:0;transform:scale(1)}to{left:0;opacity:1;transform:scale(1)}}@keyframes components-modal__disappear-animation-rtl{0%{left:0;opacity:1;transform:scale(1)}to{left:-20px;opacity:0;transform:scale(1)}}html[dir=rtl] .acf-block-form-modal.components-modal__frame{animation-name:components-modal__appear-animation-rtl !important}html[dir=rtl] .acf-block-form-modal.is-closing{animation-name:components-modal__disappear-animation-rtl !important}}.acf-blocks-open-expanded-editor-btn.has-text.has-icon{width:100%;justify-content:center} diff --git a/wp-content/plugins/advanced-custom-fields/assets/build/index.php b/wp-content/plugins/advanced-custom-fields-pro/assets/build/css/pro/index.php old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/assets/build/index.php rename to wp-content/plugins/advanced-custom-fields-pro/assets/build/css/pro/index.php diff --git a/wp-content/plugins/advanced-custom-fields/assets/build/js/index.php b/wp-content/plugins/advanced-custom-fields-pro/assets/build/index.php old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/assets/build/js/index.php rename to wp-content/plugins/advanced-custom-fields-pro/assets/build/index.php diff --git a/wp-content/plugins/advanced-custom-fields/assets/build/js/acf-escaped-html-notice.min.js b/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-escaped-html-notice.min.js old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/assets/build/js/acf-escaped-html-notice.min.js rename to wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-escaped-html-notice.min.js diff --git a/wp-content/plugins/advanced-custom-fields/assets/build/js/acf-field-group.min.js b/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-field-group.min.js old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/assets/build/js/acf-field-group.min.js rename to wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-field-group.min.js diff --git a/wp-content/plugins/advanced-custom-fields/assets/build/js/acf-input.min.js b/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-input.min.js old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/assets/build/js/acf-input.min.js rename to wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-input.min.js diff --git a/wp-content/plugins/advanced-custom-fields/assets/build/js/acf-internal-post-type.min.js b/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-internal-post-type.min.js old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/assets/build/js/acf-internal-post-type.min.js rename to wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf-internal-post-type.min.js diff --git a/wp-content/plugins/advanced-custom-fields/assets/build/js/acf.min.js b/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf.min.js old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/assets/build/js/acf.min.js rename to wp-content/plugins/advanced-custom-fields-pro/assets/build/js/acf.min.js diff --git a/wp-content/plugins/advanced-custom-fields/assets/images/field-states/index.php b/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/index.php old mode 100755 new mode 100644 similarity index 100% rename from wp-content/plugins/advanced-custom-fields/assets/images/field-states/index.php rename to wp-content/plugins/advanced-custom-fields-pro/assets/build/js/index.php diff --git a/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/pro/acf-pro-blocks.min.js b/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/pro/acf-pro-blocks.min.js new file mode 100644 index 00000000..92e44837 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/assets/build/js/pro/acf-pro-blocks.min.js @@ -0,0 +1 @@ +(()=>{var e={20:(e,t,r)=>{"use strict";var n=r(540),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,a=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function l(e,t,r){var n,i={},l=null,u=null;for(n in void 0!==r&&(l=""+r),void 0!==t.key&&(l=""+t.key),void 0!==t.ref&&(u=t.ref),t)s.call(t,n)&&!c.hasOwnProperty(n)&&(i[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===i[n]&&(i[n]=t[n]);return{$$typeof:o,type:e,key:l,ref:u,props:i,_owner:a.current}}t.Fragment=i,t.jsx=l,t.jsxs=l},138:()=>{jQuery,acf.jsxNameReplacements={"accent-height":"accentHeight",accentheight:"accentHeight","accept-charset":"acceptCharset",acceptcharset:"acceptCharset",accesskey:"accessKey","alignment-baseline":"alignmentBaseline",alignmentbaseline:"alignmentBaseline",allowedblocks:"allowedBlocks",allowfullscreen:"allowFullScreen",allowreorder:"allowReorder","arabic-form":"arabicForm",arabicform:"arabicForm",attributename:"attributeName",attributetype:"attributeType",autocapitalize:"autoCapitalize",autocomplete:"autoComplete",autocorrect:"autoCorrect",autofocus:"autoFocus",autoplay:"autoPlay",autoreverse:"autoReverse",autosave:"autoSave",basefrequency:"baseFrequency","baseline-shift":"baselineShift",baselineshift:"baselineShift",baseprofile:"baseProfile",calcmode:"calcMode","cap-height":"capHeight",capheight:"capHeight",cellpadding:"cellPadding",cellspacing:"cellSpacing",charset:"charSet",class:"className",classid:"classID",classname:"className","clip-path":"clipPath","clip-rule":"clipRule",clippath:"clipPath",clippathunits:"clipPathUnits",cliprule:"clipRule","color-interpolation":"colorInterpolation","color-interpolation-filters":"colorInterpolationFilters","color-profile":"colorProfile","color-rendering":"colorRendering",colorinterpolation:"colorInterpolation",colorinterpolationfilters:"colorInterpolationFilters",colorprofile:"colorProfile",colorrendering:"colorRendering",colspan:"colSpan",contenteditable:"contentEditable",contentscripttype:"contentScriptType",contentstyletype:"contentStyleType",contextmenu:"contextMenu",controlslist:"controlsList",crossorigin:"crossOrigin",dangerouslysetinnerhtml:"dangerouslySetInnerHTML",datetime:"dateTime",defaultchecked:"defaultChecked",defaultvalue:"defaultValue",diffuseconstant:"diffuseConstant",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback","dominant-baseline":"dominantBaseline",dominantbaseline:"dominantBaseline",edgemode:"edgeMode","enable-background":"enableBackground",enablebackground:"enableBackground",enctype:"encType",enterkeyhint:"enterKeyHint",externalresourcesrequired:"externalResourcesRequired","fill-opacity":"fillOpacity","fill-rule":"fillRule",fillopacity:"fillOpacity",fillrule:"fillRule",filterres:"filterRes",filterunits:"filterUnits","flood-color":"floodColor","flood-opacity":"floodOpacity",floodcolor:"floodColor",floodopacity:"floodOpacity","font-family":"fontFamily","font-size":"fontSize","font-size-adjust":"fontSizeAdjust","font-stretch":"fontStretch","font-style":"fontStyle","font-variant":"fontVariant","font-weight":"fontWeight",fontfamily:"fontFamily",fontsize:"fontSize",fontsizeadjust:"fontSizeAdjust",fontstretch:"fontStretch",fontstyle:"fontStyle",fontvariant:"fontVariant",fontweight:"fontWeight",for:"htmlFor",foreignobject:"foreignObject",formaction:"formAction",formenctype:"formEncType",formmethod:"formMethod",formnovalidate:"formNoValidate",formtarget:"formTarget",frameborder:"frameBorder","glyph-name":"glyphName","glyph-orientation-horizontal":"glyphOrientationHorizontal","glyph-orientation-vertical":"glyphOrientationVertical",glyphname:"glyphName",glyphorientationhorizontal:"glyphOrientationHorizontal",glyphorientationvertical:"glyphOrientationVertical",glyphref:"glyphRef",gradienttransform:"gradientTransform",gradientunits:"gradientUnits","horiz-adv-x":"horizAdvX","horiz-origin-x":"horizOriginX",horizadvx:"horizAdvX",horizoriginx:"horizOriginX",hreflang:"hrefLang",htmlfor:"htmlFor","http-equiv":"httpEquiv",httpequiv:"httpEquiv","image-rendering":"imageRendering",imagerendering:"imageRendering",innerhtml:"innerHTML",inputmode:"inputMode",itemid:"itemID",itemprop:"itemProp",itemref:"itemRef",itemscope:"itemScope",itemtype:"itemType",kernelmatrix:"kernelMatrix",kernelunitlength:"kernelUnitLength",keyparams:"keyParams",keypoints:"keyPoints",keysplines:"keySplines",keytimes:"keyTimes",keytype:"keyType",lengthadjust:"lengthAdjust","letter-spacing":"letterSpacing",letterspacing:"letterSpacing","lighting-color":"lightingColor",lightingcolor:"lightingColor",limitingconeangle:"limitingConeAngle",marginheight:"marginHeight",marginwidth:"marginWidth","marker-end":"markerEnd","marker-mid":"markerMid","marker-start":"markerStart",markerend:"markerEnd",markerheight:"markerHeight",markermid:"markerMid",markerstart:"markerStart",markerunits:"markerUnits",markerwidth:"markerWidth",maskcontentunits:"maskContentUnits",maskunits:"maskUnits",maxlength:"maxLength",mediagroup:"mediaGroup",minlength:"minLength",nomodule:"noModule",novalidate:"noValidate",numoctaves:"numOctaves","overline-position":"overlinePosition","overline-thickness":"overlineThickness",overlineposition:"overlinePosition",overlinethickness:"overlineThickness","paint-order":"paintOrder",paintorder:"paintOrder","panose-1":"panose1",pathlength:"pathLength",patterncontentunits:"patternContentUnits",patterntransform:"patternTransform",patternunits:"patternUnits",playsinline:"playsInline","pointer-events":"pointerEvents",pointerevents:"pointerEvents",pointsatx:"pointsAtX",pointsaty:"pointsAtY",pointsatz:"pointsAtZ",preservealpha:"preserveAlpha",preserveaspectratio:"preserveAspectRatio",primitiveunits:"primitiveUnits",radiogroup:"radioGroup",readonly:"readOnly",referrerpolicy:"referrerPolicy",refx:"refX",refy:"refY","rendering-intent":"renderingIntent",renderingintent:"renderingIntent",repeatcount:"repeatCount",repeatdur:"repeatDur",requiredextensions:"requiredExtensions",requiredfeatures:"requiredFeatures",rowspan:"rowSpan","shape-rendering":"shapeRendering",shaperendering:"shapeRendering",specularconstant:"specularConstant",specularexponent:"specularExponent",spellcheck:"spellCheck",spreadmethod:"spreadMethod",srcdoc:"srcDoc",srclang:"srcLang",srcset:"srcSet",startoffset:"startOffset",stddeviation:"stdDeviation",stitchtiles:"stitchTiles","stop-color":"stopColor","stop-opacity":"stopOpacity",stopcolor:"stopColor",stopopacity:"stopOpacity","strikethrough-position":"strikethroughPosition","strikethrough-thickness":"strikethroughThickness",strikethroughposition:"strikethroughPosition",strikethroughthickness:"strikethroughThickness","stroke-dasharray":"strokeDasharray","stroke-dashoffset":"strokeDashoffset","stroke-linecap":"strokeLinecap","stroke-linejoin":"strokeLinejoin","stroke-miterlimit":"strokeMiterlimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth",strokedasharray:"strokeDasharray",strokedashoffset:"strokeDashoffset",strokelinecap:"strokeLinecap",strokelinejoin:"strokeLinejoin",strokemiterlimit:"strokeMiterlimit",strokeopacity:"strokeOpacity",strokewidth:"strokeWidth",suppresscontenteditablewarning:"suppressContentEditableWarning",suppresshydrationwarning:"suppressHydrationWarning",surfacescale:"surfaceScale",systemlanguage:"systemLanguage",tabindex:"tabIndex",tablevalues:"tableValues",targetx:"targetX",targety:"targetY",templatelock:"templateLock","text-anchor":"textAnchor","text-decoration":"textDecoration","text-rendering":"textRendering",textanchor:"textAnchor",textdecoration:"textDecoration",textlength:"textLength",textrendering:"textRendering","underline-position":"underlinePosition","underline-thickness":"underlineThickness",underlineposition:"underlinePosition",underlinethickness:"underlineThickness","unicode-bidi":"unicodeBidi","unicode-range":"unicodeRange",unicodebidi:"unicodeBidi",unicoderange:"unicodeRange","units-per-em":"unitsPerEm",unitsperem:"unitsPerEm",usemap:"useMap","v-alphabetic":"vAlphabetic","v-hanging":"vHanging","v-ideographic":"vIdeographic","v-mathematical":"vMathematical",valphabetic:"vAlphabetic","vector-effect":"vectorEffect",vectoreffect:"vectorEffect","vert-adv-y":"vertAdvY","vert-origin-x":"vertOriginX","vert-origin-y":"vertOriginY",vertadvy:"vertAdvY",vertoriginx:"vertOriginX",vertoriginy:"vertOriginY",vhanging:"vHanging",videographic:"vIdeographic",viewbox:"viewBox",viewtarget:"viewTarget",vmathematical:"vMathematical","word-spacing":"wordSpacing",wordspacing:"wordSpacing","writing-mode":"writingMode",writingmode:"writingMode","x-height":"xHeight",xchannelselector:"xChannelSelector",xheight:"xHeight","xlink:actuate":"xlinkActuate","xlink:arcrole":"xlinkArcrole","xlink:href":"xlinkHref","xlink:role":"xlinkRole","xlink:show":"xlinkShow","xlink:title":"xlinkTitle","xlink:type":"xlinkType",xlinkactuate:"xlinkActuate",xlinkarcrole:"xlinkArcrole",xlinkhref:"xlinkHref",xlinkrole:"xlinkRole",xlinkshow:"xlinkShow",xlinktitle:"xlinkTitle",xlinktype:"xlinkType","xml:base":"xmlBase","xml:lang":"xmlLang","xml:space":"xmlSpace",xmlbase:"xmlBase",xmllang:"xmlLang","xmlns:xlink":"xmlnsXlink",xmlnsxlink:"xmlnsXlink",xmlspace:"xmlSpace",ychannelselector:"yChannelSelector",zoomandpan:"zoomAndPan"}},151:e=>{var t={utf8:{stringToBytes:function(e){return t.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(t.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],r=0;r{function t(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(t(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&t(e.slice(0,0))}(e)||!!e._isBuffer)}},287:(e,t)=>{"use strict";var r=Symbol.for("react.element"),n=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),a=Symbol.for("react.provider"),c=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator,h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,g={};function b(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||h}function k(){}function v(e,t,r){this.props=e,this.context=t,this.refs=g,this.updater=r||h}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},k.prototype=b.prototype;var y=v.prototype=new k;y.constructor=v,m(y,b.prototype),y.isPureReactComponent=!0;var x=Array.isArray,w=Object.prototype.hasOwnProperty,_={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function j(e,t,n){var o,i={},s=null,a=null;if(null!=t)for(o in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(s=""+t.key),t)w.call(t,o)&&!E.hasOwnProperty(o)&&(i[o]=t[o]);var c=arguments.length-2;if(1===c)i.children=n;else if(1{var n,o,i,s,a;n=r(939),o=r(151).utf8,i=r(206),s=r(151).bin,(a=function(e,t){e.constructor==String?e=t&&"binary"===t.encoding?s.stringToBytes(e):o.stringToBytes(e):i(e)?e=Array.prototype.slice.call(e,0):Array.isArray(e)||e.constructor===Uint8Array||(e=e.toString());for(var r=n.bytesToWords(e),c=8*e.length,l=1732584193,u=-271733879,d=-1732584194,p=271733878,f=0;f>>24)|4278255360&(r[f]<<24|r[f]>>>8);r[c>>>5]|=128<>>9<<4)]=c;var h=a._ff,m=a._gg,g=a._hh,b=a._ii;for(f=0;f>>0,u=u+v>>>0,d=d+y>>>0,p=p+x>>>0}return n.endian([l,u,d,p])})._ff=function(e,t,r,n,o,i,s){var a=e+(t&r|~t&n)+(o>>>0)+s;return(a<>>32-i)+t},a._gg=function(e,t,r,n,o,i,s){var a=e+(t&n|r&~n)+(o>>>0)+s;return(a<>>32-i)+t},a._hh=function(e,t,r,n,o,i,s){var a=e+(t^r^n)+(o>>>0)+s;return(a<>>32-i)+t},a._ii=function(e,t,r,n,o,i,s){var a=e+(r^(t|~n))+(o>>>0)+s;return(a<>>32-i)+t},a._blocksize=16,a._digestsize=16,e.exports=function(e,t){if(null==e)throw new Error("Illegal argument "+e);var r=n.wordsToBytes(a(e,t));return t&&t.asBytes?r:t&&t.asString?s.bytesToString(r):n.bytesToHex(r)}},540:(e,t,r)=>{"use strict";e.exports=r(287)},848:(e,t,r)=>{"use strict";e.exports=r(20)},939:e=>{var t,r;t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r={rotl:function(e,t){return e<>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&r.rotl(e,8)|4278255360&r.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],r=0,n=0;r>>5]|=e[r]<<24-n%32;return t},wordsToBytes:function(e){for(var t=[],r=0;r<32*e.length;r+=8)t.push(e[r>>>5]>>>24-r%32&255);return t},bytesToHex:function(e){for(var t=[],r=0;r>>4).toString(16)),t.push((15&e[r]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],r=0;r>>6*(3-i)&63)):r.push("=");return r.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var r=[],n=0,o=0;n>>6-2*o);return r}},e.exports=r}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}(()=>{"use strict";r(138);var e=r(848);const t=r(503);((r,n)=>{const{BlockControls:o,InspectorControls:i,InnerBlocks:s,useBlockProps:a,AlignmentToolbar:c,BlockVerticalAlignmentToolbar:l}=wp.blockEditor,{ToolbarGroup:u,ToolbarButton:d,Placeholder:p,Spinner:f}=wp.components,{Fragment:h}=wp.element,{Component:m}=React,{useSelect:g}=wp.data,{createHigherOrderComponent:b}=wp.compose,k=wp.blockEditor.__experimentalBlockAlignmentMatrixToolbar||wp.blockEditor.BlockAlignmentMatrixToolbar,v=wp.blockEditor.__experimentalBlockAlignmentMatrixControl||wp.blockEditor.BlockAlignmentMatrixControl,y=wp.blockEditor.__experimentalBlockFullHeightAligmentControl||wp.blockEditor.__experimentalBlockFullHeightAlignmentControl||wp.blockEditor.BlockFullHeightAlignmentControl,x=wp.blockEditor.__experimentalUseInnerBlocksProps||wp.blockEditor.useInnerBlocksProps,w={};function _(e){return w[e]||!1}function E(e){return _(e).acf_block_version||1}function j(e){return _(e).validate}function S(e){const t=wp.data.select("core/block-editor").getBlockParents(e);return wp.data.select("core/block-editor").getBlocksByClientId(t).filter(e=>"core/query"===e.name).length}function C(){return document.querySelectorAll('iframe[name="editor-canvas"]').length>0}function A(t){const r=t.post_types||[];if(r.length){r.push("wp_block");const e=acf.get("postType");if(!r.includes(e))return!1}if("string"==typeof t.icon&&"e===t.category).pop()||(t.category="common"),t=acf.parseArgs(t,{title:"",name:"",category:"",api_version:2,acf_block_version:1});for(const e in t.attributes)"default"in t.attributes[e]&&0===t.attributes[e].default.length&&delete t.attributes[e].default;t.supports.anchor&&(t.attributes.anchor={type:"string"});let i=$,s=N;var a;(t.supports.alignText||t.supports.align_text)&&(t.attributes=Y(t.attributes,"align_text","string"),i=function(t,r){const n=J;return r.alignText=n(r.alignText),class extends m{render(){const{attributes:r,setAttributes:i}=this.props,{alignText:s}=r;return(0,e.jsxs)(h,{children:[(0,e.jsx)(o,{group:"block",children:(0,e.jsx)(c,{value:n(s),onChange:function(e){i({alignText:n(e)})}})}),(0,e.jsx)(t,{...this.props})]})}}}(i,t)),(t.supports.alignContent||t.supports.align_content)&&(t.attributes=Y(t.attributes,"align_content","string"),i=function(t,r){let i,s,a=r.supports.align_content||r.supports.alignContent;return"matrix"===a?(i=v||k,s=X):(i=l,s=W),i===n?(console.warn(`The "${a}" alignment component was not found.`),t):(r.alignContent=s(r.alignContent),class extends m{render(){const{attributes:r,setAttributes:n}=this.props,{alignContent:a}=r;return(0,e.jsxs)(h,{children:[(0,e.jsx)(o,{group:"block",children:(0,e.jsx)(i,{label:acf.__("Change content alignment"),value:s(a),onChange:function(e){n({alignContent:s(e)})}})}),(0,e.jsx)(t,{...this.props})]})}})}(i,t)),(t.supports.fullHeight||t.supports.full_height)&&(t.attributes=Y(t.attributes,"full_height","boolean"),a=i,t.blockType,i=y?class extends m{render(){const{attributes:t,setAttributes:r}=this.props,{fullHeight:n}=t;return(0,e.jsxs)(h,{children:[(0,e.jsx)(o,{group:"block",children:(0,e.jsx)(y,{isActive:n,onToggle:function(e){r({fullHeight:e})}})}),(0,e.jsx)(a,{...this.props})]})}}:a),t.edit=t=>(wp.element.useEffect(()=>()=>{wp.data.dispatch("core/editor")&&wp.data.dispatch("core/editor").unlockPostSaving("acf/block/"+t.clientId)},[]),(0,e.jsx)(i,{...t})),t.save=()=>(0,e.jsx)(s,{}),w[t.name]=t;const u=wp.blocks.registerBlockType(t.name,t);return u.attributes.anchor&&(u.attributes.anchor={type:"string"}),u}acf.blockInstances={};const B={},I={};function T(e){const{attributes:n={},context:o={},query:i={},clientId:s=null,delay:a=0}=e,c=t(JSON.stringify({...n,...o,...i})),l=B[c]||{query:{},timeout:!1,promise:r.Deferred(),started:!1};return l.query={...l.query,...i},l.started||(clearTimeout(l.timeout),l.timeout=setTimeout(()=>{l.started=!0,I[c]?(B[c]=null,l.promise.resolve.apply(I[c][0],I[c][1])):r.ajax({url:acf.get("ajaxurl"),dataType:"json",type:"post",cache:!1,data:acf.prepareForAjax({action:"acf/ajax/fetch-block",block:JSON.stringify(n),clientId:s,context:JSON.stringify(o),query:l.query})}).always(()=>{B[c]=null}).done(function(){I[c]=[this,arguments],l.promise.resolve.apply(this,arguments)}).fail(function(){l.promise.reject.apply(this,arguments)})},a),B[c]=l),l.promise}function F(e,t){return JSON.stringify(e)===JSON.stringify(t)}function R(t,r,n=0){const o=function(e,t){switch(e){case"innerblocks":return t<2?s:"ACFInnerBlocks";case"script":return V;case"#comment":return null;default:e=O(e)}return e}(t.nodeName.toLowerCase(),r);if(!o)return null;const i={};if(1===n&&"ACFInnerBlocks"!==o&&(i.ref=React.createRef()),acf.arrayArgs(t.attributes).map(H).forEach(({name:e,value:t})=>{i[e]=t}),"ACFInnerBlocks"===o)return(0,e.jsx)(P,{...i});const a=[o,i];return acf.arrayArgs(t.childNodes).forEach(e=>{if(e instanceof Text){const t=e.textContent;t&&a.push(t)}else a.push(R(e,r,n+1))}),React.createElement.apply(this,a)}function O(e){return acf.isget(acf,"jsxNameReplacements",e)||e}function P(t){const{className:r="acf-innerblocks-container"}=t,n=x({className:r},t);return(0,e.jsx)("div",{...n,children:n.children})}function H(e){let t=e.name,r=e.value,n=acf.applyFilters("acf_blocks_parse_node_attr",!1,e);if(n)return n;switch(t){case"class":t="className";break;case"style":const e={};r.split(";").forEach(t=>{const r=t.indexOf(":");if(r>0){let n=t.substr(0,r).trim();const o=t.substr(r+1).trim();"-"!==n.charAt(0)&&(n=acf.strCamelCase(n)),e[n]=o}}),r=e;break;default:if(0===t.indexOf("data-"))break;t=O(t);const n=r.charAt(0);"["!==n&&"{"!==n||(r=JSON.parse(r)),"true"!==r&&"false"!==r||(r="true"===r)}return{name:t,value:r}}acf.parseJSX=(e,t)=>(e=(e="
"+e+"
").replace(/]+)?\/>/,""),R(r(e)[0],t,0).props.children);const M=b(t=>class extends m{constructor(e){super(e);const{name:t,attributes:r}=this.props,o=_(t);if(!o)return;Object.keys(r).forEach(e=>{""===r[e]&&delete r[e]});const i={full_height:"fullHeight",align_content:"alignContent",align_text:"alignText"};Object.keys(i).forEach(e=>{r[e]!==n?r[i[e]]=r[e]:r[i[e]]===n&&o[e]!==n&&(r[i[e]]=o[e]),delete o[e],delete r[e]});for(let e in o.attributes)r[e]===n&&o[e]!==n&&(r[e]=o[e])}render(){return(0,e.jsx)(t,{...this.props})}},"withDefaultAttributes");function N(){return(0,e.jsx)(s.Content,{})}wp.hooks.addFilter("editor.BlockListBlock","acf/with-default-attributes",M);class $ extends m{constructor(e){super(e),this.setup()}setup(){const{name:e,attributes:t,clientId:r}=this.props,n=_(e);function o(e){e.includes(t.mode)||(t.mode=e[0])}if(S(r)||C())o(["preview"]);else switch(n.mode){case"edit":o(["edit","preview"]);break;case"preview":o(["preview","edit"]);break;default:o(["auto"])}}render(){const{name:t,attributes:r,setAttributes:n,clientId:s}=this.props,a=_(t),c=S(s)||C();let{mode:l}=r;c&&(l="preview");let p=a.supports.mode;("auto"===l||c)&&(p=!1);const f="preview"===l?acf.__("Switch to Edit"):acf.__("Switch to Preview"),m="preview"===l?"edit":"welcome-view-site";return(0,e.jsxs)(h,{children:[(0,e.jsx)(o,{children:p&&(0,e.jsx)(u,{children:(0,e.jsx)(d,{className:"components-icon-button components-toolbar__control",label:f,icon:m,onClick:function(){n({mode:"preview"===l?"edit":"preview"})}})})}),(0,e.jsx)(i,{children:"preview"===l&&(0,e.jsx)("div",{className:"acf-block-component acf-block-panel",children:(0,e.jsx)(z,{...this.props})})}),(0,e.jsx)(L,{...this.props})]})}}function L(t){const{attributes:r,isSelected:n,name:o,clientId:i}=t,{mode:s}=r,c=g(e=>{const t=e("core/block-editor").getBlockRootClientId(i);return e("core/block-editor").getBlockIndex(i,t)});let l=!0,u="acf-block-component acf-block-body";return("auto"===s&&!n||"preview"===s)&&(u+=" acf-block-preview",l=!1),i in acf.blockInstances||(acf.blockInstances[i]={validation_errors:!1,mode:s}),acf.blockInstances[i].mode=s,n||(j(o)&&acf.blockInstances[i].validation_errors&&(u+=" acf-block-has-validation-error"),acf.blockInstances[i].has_been_deselected=!0),E(o)>1?(0,e.jsx)("div",{...a({className:u}),children:l?(0,e.jsx)(z,{...t,index:c}):(0,e.jsx)(U,{...t,index:c})}):(0,e.jsx)("div",{...a(),children:(0,e.jsx)("div",{className:"acf-block-component acf-block-body",children:l?(0,e.jsx)(z,{...t,index:c}):(0,e.jsx)(U,{...t,index:c})})})}class D extends m{render(){return(0,e.jsx)("div",{dangerouslySetInnerHTML:{__html:this.props.children}})}}class V extends m{render(){return(0,e.jsx)("div",{ref:e=>this.el=e})}setHTML(e){r(this.el).html(` + page ); + } + } + + + // initialize + new acf_admin_options_page(); +endif; + +?> diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/admin-updates.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/admin-updates.php new file mode 100644 index 00000000..0f6903b3 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/admin-updates.php @@ -0,0 +1,279 @@ + __( 'Error. Could not connect to the update server', 'acf' ) . ' (' . esc_html( $wp_error->get_error_message() ) . ').', + 'type' => 'error', + ) + ); + } + + /** + * get_changelog_changes + * + * Finds the specific changes for a given version from the provided changelog snippet. + * + * @date 14/1/19 + * @since 5.7.10 + * + * @param string $changelog The changelog text. + * @param string $version The version to find. + * @return string + */ + function get_changelog_changes( $changelog = '', $version = '' ) { + + // Explode changelog into sections. + $bits = array_filter( explode( '

', $changelog ) ); + + // Loop over each version chunk. + foreach ( $bits as $bit ) { + + // Find the version number for this chunk. + $bit = explode( '

', $bit ); + $bit_version = trim( $bit[0] ); + $bit_text = trim( $bit[1] ); + + // Compare the chunk version number against param and return HTML. + if ( acf_version_compare( $bit_version, '==', $version ) ) { + return '

' . esc_html( $bit_version ) . '

' . acf_esc_html( $bit_text ); + } + } + + // Return. + return ''; + } + + /** + * admin_menu + * + * Adds the admin menu subpage. + * + * @date 28/09/13 + * @since 5.0.0 + * + * @param void + * @return void + */ + function admin_menu() { + + // Bail early if no show_admin. + if ( ! acf_get_setting( 'show_admin' ) ) { + return; + } + + // Bail early if the updates page is not visible. + if ( ! acf_pro_is_updates_page_visible() ) { + return; + } + + // Add submenu. + $page = add_submenu_page( 'edit.php?post_type=acf-field-group', __( 'Updates', 'acf' ), __( 'Updates', 'acf' ), acf_get_setting( 'capability' ), 'acf-settings-updates', array( $this, 'html' ) ); + + // Add actions to page. + add_action( "load-$page", array( $this, 'load' ) ); + } + + /** + * load + * + * Runs when loading the submenu page. + * + * @date 7/01/2014 + * @since 5.0.0 + * + * @param void + * @return void + */ + function load() { + + add_action( 'admin_body_class', array( $this, 'admin_body_class' ) ); + + // Check activate. + if ( acf_verify_nonce( 'activate_pro_license' ) && ! empty( $_POST['acf_pro_license'] ) ) { + acf_pro_activate_license( sanitize_text_field( $_POST['acf_pro_license'] ) ); //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash -- unslash not needed. + + // Check deactivate. + } elseif ( acf_verify_nonce( 'deactivate_pro_license' ) ) { + acf_pro_deactivate_license(); + } + + // Check if we should force check the license status. + $force_get_license_status = false; + $retry_license_nonce = acf_request_arg( 'acf_retry_nonce' ); + if ( wp_verify_nonce( $retry_license_nonce, 'acf_recheck_status' ) || ! empty( $_GET['force-license-check'] ) ) { + $force_get_license_status = true; + } + + // vars + $license = acf_pro_get_license_key(); + $this->view = array( + 'license' => $license, + 'license_status' => acf_pro_get_license_status( $force_get_license_status ), + 'active' => $license ? 1 : 0, + 'current_version' => acf_get_setting( 'version' ), + 'remote_version' => '', + 'update_available' => false, + 'changelog' => '', + 'upgrade_notice' => '', + 'is_defined_license' => defined( 'ACF_PRO_LICENSE' ) && ! empty( ACF_PRO_LICENSE ) && is_string( ACF_PRO_LICENSE ), + 'license_error' => false, + 'wp_not_compatible' => false, + ); + + // get plugin updates + $force_check = ! empty( $_GET['force-check'] ); + $info = acf_updates()->get_plugin_info( 'pro', $force_check ); + + // Display error. + if ( is_wp_error( $info ) ) { + return $this->display_wp_error( $info ); + } + + // add info to view + $this->view['remote_version'] = $info['version']; + + // add changelog if the remote version is '>' than the current version + $version = acf_get_setting( 'version' ); + + // check if remote version is higher than current version + if ( version_compare( $info['version'], $version, '>' ) ) { + + // update view. + $this->view['update_available'] = true; + $this->view['changelog'] = $this->get_changelog_changes( $info['changelog'], $info['version'] ); + $this->view['upgrade_notice'] = $this->get_changelog_changes( $info['upgrade_notice'], $info['version'] ); + + // perform update checks if license is active. + $basename = acf_get_setting( 'basename' ); + $update = acf_updates()->get_plugin_update( $basename ); + $no_update = acf_updates()->get_no_update( $basename ); + + if ( $no_update && ! empty( $no_update['reason'] ) && $no_update['reason'] === 'wp_not_compatible' ) { + $this->view['wp_not_compatible'] = true; + acf_new_admin_notice( + array( + /* translators: %s the version of WordPress required for this ACF update */ + 'text' => sprintf( __( 'An update to ACF is available, but it is not compatible with your version of WordPress. Please upgrade to WordPress %s or newer to update ACF.', 'acf' ), $no_update['requires'] ), + 'type' => 'error', + ) + ); + } + + if ( $license ) { + if ( isset( $update['license_valid'] ) && ! $update['license_valid'] ) { + $this->view['license_error'] = true; + acf_new_admin_notice( + array( + 'text' => __( 'Error. Your license for this site has expired or been deactivated. Please reactivate your ACF PRO license.', 'acf' ), + 'type' => 'error', + ) + ); + } else { + // display error if no package url - possible if license key or site URL has been modified. + if ( $update && ! $update['package'] ) { + $this->view['license_error'] = true; + acf_new_admin_notice( + array( + 'text' => __( 'Error. Could not authenticate update package. Please check again or deactivate and reactivate your ACF PRO license.', 'acf' ), + 'type' => 'error', + ) + ); + } + } + + // refresh transient - if no update exists in the transient or if the transient 'new_version' is stale. + if ( ! $update || $update['new_version'] !== $info['version'] ) { + acf_updates()->refresh_plugins_transient(); + } + } + } + } + + /** + * Modifies the admin body class. + * + * @since 6.0.0 + * + * @param string $classes Space-separated list of CSS classes. + * @return string + */ + public function admin_body_class( $classes ) { + $classes .= ' acf-admin-page'; + return $classes; + } + + /** + * html + * + * Displays the submenu page's HTML. + * + * @date 7/01/2014 + * @since 5.0.0 + * + * @param void + * @return void + */ + function html() { + acf_get_view( __DIR__ . '/views/html-settings-updates.php', $this->view ); + } + } + + // Initialize. + acf_new_instance( 'ACF_Admin_Updates' ); +endif; // class_exists check diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/index.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/index.php new file mode 100644 index 00000000..97611c0c --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/index.php @@ -0,0 +1,2 @@ + '', // Unused. Messages start at index 1. + 1 => $this->options_page_created_message(), // Updated. + 2 => $this->options_page_created_message(), + 3 => __( 'Options page deleted.', 'acf' ), + 4 => __( 'Options page updated.', 'acf' ), + 5 => false, // Post type does not support revisions. + 6 => $this->options_page_created_message( true ), // Created. + 7 => __( 'Options page saved.', 'acf' ), + 8 => __( 'Options page submitted.', 'acf' ), + 9 => __( 'Options page scheduled for.', 'acf' ), + 10 => __( 'Options page draft updated.', 'acf' ), + ); + + return $messages; + } + + /** + * Renders the options page created message. + * + * @since 6.1 + * + * @param boolean $created True if the options page was just created. + * @return string + */ + public function options_page_created_message( $created = false ) { + global $post_id; + + $title = get_the_title( $post_id ); + + /* translators: %s options page name */ + $item_saved_text = sprintf( __( '%s options page updated', 'acf' ), $title ); + /* translators: %s options page name */ + $add_fields_text = sprintf( __( 'Add fields to %s', 'acf' ), $title ); + + if ( $created ) { + /* translators: %s options page name */ + $item_saved_text = sprintf( __( '%s options page created', 'acf' ), $title ); + } + + $add_fields_link = wp_nonce_url( + admin_url( 'post-new.php?post_type=acf-field-group&use_options_page=' . $post_id ), + 'add-fields-' . $post_id + ); + + ob_start(); + ?> +

+ + $this->get_parent_page_choices(), + ) + ); + } + + /** + * Enqueues any scripts necessary for internal post type. + * + * @since 6.2 + */ + public function admin_enqueue_scripts() { + wp_enqueue_style( 'acf-field-group' ); + + acf_localize_text( + array( + 'Post' => __( 'Post', 'acf' ), + 'Posts' => __( 'Posts', 'acf' ), + 'Page' => __( 'Page', 'acf' ), + 'Pages' => __( 'Pages', 'acf' ), + 'Default' => __( 'Default', 'acf' ), + ) + ); + + parent::admin_enqueue_scripts(); + + do_action( 'acf/ui_options_page/admin_enqueue_scripts' ); + } + + /** + * Sets up all functionality for the post type edit page to work. + * + * @since 3.1.8 + */ + public function admin_head() { + // global. + global $post, $acf_ui_options_page; + + // set global var. + $acf_ui_options_page = acf_get_internal_post_type( $post->ID, $this->post_type ); + + // metaboxes. + add_meta_box( 'acf-basic-settings', __( 'Basic Settings', 'acf' ), array( $this, 'mb_basic_settings' ), 'acf-ui-options-page', 'normal', 'high' ); + add_meta_box( 'acf-advanced-settings', __( 'Advanced Settings', 'acf' ), array( $this, 'mb_advanced_settings' ), 'acf-ui-options-page', 'normal', 'high' ); + + // actions. + add_action( 'post_submitbox_misc_actions', array( $this, 'post_submitbox_misc_actions' ), 10, 0 ); + add_action( 'edit_form_after_title', array( $this, 'edit_form_after_title' ), 10, 0 ); + + // filters. + add_filter( 'screen_settings', array( $this, 'screen_settings' ), 10, 1 ); + add_filter( 'get_user_option_screen_layout_acf-ui-options-page', array( $this, 'screen_layout' ), 10, 1 ); + add_filter( 'get_user_option_metaboxhidden_acf-ui-options-page', array( $this, 'force_basic_settings' ), 10, 1 ); + add_filter( 'get_user_option_closedpostboxes_acf-ui-options-page', array( $this, 'force_basic_settings' ), 10, 1 ); + add_filter( 'get_user_option_closedpostboxes_acf-ui-options-page', array( $this, 'force_advanced_settings' ), 10, 1 ); + + // 3rd party hook. + do_action( 'acf/ui_options_page/admin_head' ); + } + + /** + * This action will allow ACF to render metaboxes after the title. + */ + public function edit_form_after_title() { + + // globals. + global $post; + + // render post data. + acf_form_data( + array( + 'screen' => 'ui_options_page', + 'post_id' => $post->ID, + 'delete_fields' => 0, + 'validation' => 1, + ) + ); + } + + /** + * This function will add extra HTML to the acf form data element + * + * @since 5.3.8 + * + * @param array $args Arguments array to pass through to action. + * @return void + */ + public function form_data( $args ) { + do_action( 'acf/ui_options_page/form_data', $args ); + } + + /** + * This function will append extra l10n strings to the acf JS object + * + * @since 5.3.8 + * + * @param array $l10n The array of translated strings. + * @return array $l10n + */ + public function admin_l10n( $l10n ) { + return apply_filters( 'acf/ui_options_page/admin_l10n', $l10n ); + } + + /** + * Admin footer third party hook support + * + * @since 5.3.2 + */ + public function admin_footer() { + do_action( 'acf/ui_options_page/admin_footer' ); + } + + /** + * Screen settings html output + * + * @since 3.6.0 + * + * @param string $html Current screen settings HTML. + * @return string $html + */ + public function screen_settings( $html ) { + return $html; + } + + /** + * Sets the "Edit Post Type" screen to use a one-column layout. + * + * @param integer $columns Number of columns for layout. + * @return integer + */ + public function screen_layout( $columns = 0 ) { + return 1; + } + + /** + * Force basic settings to always be visible + * + * @param array $hidden_metaboxes The metaboxes hidden on this page. + * @return array + */ + public function force_basic_settings( $hidden_metaboxes ) { + if ( ! is_array( $hidden_metaboxes ) ) { + return $hidden_metaboxes; + } + return array_diff( $hidden_metaboxes, array( 'acf-basic-settings' ) ); + } + + /** + * Force advanced settings to be visible + * + * @param array $hidden_metaboxes The metaboxes hidden on this page. + * @return array + */ + public function force_advanced_settings( $hidden_metaboxes ) { + if ( ! is_array( $hidden_metaboxes ) ) { + return $hidden_metaboxes; + } + return array_diff( $hidden_metaboxes, array( 'acf-advanced-settings' ) ); + } + + /** + * This function will customize the publish metabox + * + * @since 5.2.9 + */ + public function post_submitbox_misc_actions() { + global $acf_ui_options_page; + + $status_label = $acf_ui_options_page['active'] ? _x( 'Active', 'post status', 'acf' ) : _x( 'Inactive', 'post status', 'acf' ); + ?> + + verify_save_post( $post_id, $post ) ) { + return $post_id; + } + + // Disable filters to ensure ACF loads raw data from DB. + acf_disable_filters(); + + // phpcs:disable WordPress.Security.NonceVerification.Missing -- Validated in $this->verify_save_post() above. + // phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized when saved. + $_POST['acf_ui_options_page']['ID'] = $post_id; + $_POST['acf_ui_options_page']['title'] = isset( $_POST['acf_ui_options_page']['page_title'] ) ? $_POST['acf_ui_options_page']['page_title'] : ''; + + // Save the post type. + acf_update_internal_post_type( $_POST['acf_ui_options_page'], $this->post_type ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Validated in verify_save_post + // phpcs:enable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized + // phpcs:enable WordPress.Security.NonceVerification.Missing + + return $post_id; + } + + /** + * Renders HTML for the basic settings metabox. + * + * @since 6.2 + */ + public function mb_basic_settings() { + global $acf_ui_options_page, $acf_parent_page_options; + + if ( ! acf_is_internal_post_type_key( $acf_ui_options_page['key'], 'acf-ui-options-page' ) ) { + $acf_ui_options_page['key'] = uniqid( 'ui_options_page_' ); + } + + $acf_parent_page_options = $this->get_parent_page_choices( (int) $acf_ui_options_page['ID'] ); + + acf_get_view( __DIR__ . '/../views/acf-ui-options-page/basic-settings.php' ); + } + + + /** + * Renders the HTML for the advanced settings metabox. + * + * @since 6.2 + */ + public function mb_advanced_settings() { + acf_get_view( __DIR__ . '/../views/acf-ui-options-page/advanced-settings.php' ); + } + + /** + * Iterates through the registered options pages and finds eligible parent pages. + * + * @since 6.2 + * + * @param integer $post_id The post ID of a current ACF UI options page used to prevent selection of itself as a child. + * @return array + */ + public function get_parent_page_choices( int $post_id = 0 ) { + global $menu; + $acf_all_options_pages = acf_get_options_pages(); + $acf_parent_page_choices = array( 'None' => array( 'none' => __( 'No Parent', 'acf' ) ) ); + $self_slug = false; + + if ( is_array( $acf_all_options_pages ) ) { + foreach ( $acf_all_options_pages as $options_page ) { + // Can't assign to child pages. + if ( ! empty( $options_page['parent_slug'] ) ) { + continue; + } + + // Can't be a child of itself. + if ( isset( $options_page['ID'] ) && $post_id === $options_page['ID'] ) { + $self_slug = $options_page['menu_slug']; + continue; + } + + $acf_parent_menu_slug = ! empty( $options_page['menu_slug'] ) ? $options_page['menu_slug'] : ''; + + // ACF overrides the `menu_slug` of parent pages with one child so they redirect to the child. + if ( ! empty( $options_page['_menu_slug'] ) ) { + $acf_parent_menu_slug = $options_page['_menu_slug']; + } + + $acf_parent_page_choices['acfOptionsPages'][ $acf_parent_menu_slug ] = ! empty( $options_page['page_title'] ) ? $options_page['page_title'] : $options_page['menu_slug']; + } + } + + foreach ( $menu as $item ) { + if ( ! empty( $item[0] ) ) { + $page_name = $item[0]; + $markup = '/<[^>]+>.*<\/[^>]+>/'; + $sanitized_name = preg_replace( $markup, '', $page_name ); + + // Prevent options pages being parents of themselves. + if ( ! empty( $item[2] ) && $item[2] === $self_slug ) { + continue; + } + + // If the current item is not an ACF-created options page, add it to the "Others" list. + if ( empty( $acf_parent_page_choices['acfOptionsPages'][ $item[2] ] ) ) { + $acf_parent_page_choices['Others'][ $item[2] ] = acf_esc_html( $sanitized_name ); + } + } + } + return $acf_parent_page_choices; + } + + /** + * Creates a simple options page over AJAX. + * + * @since 6.2 + * @return void + */ + public function ajax_create_options_page() { + // Disable filters to ensure ACF loads raw data from DB. + acf_disable_filters(); + + // phpcs:disable WordPress.Security.NonceVerification.Missing + $args = acf_parse_args( + $_POST, + array( + 'nonce' => '', + 'post_id' => 0, + 'acf_ui_options_page' => array(), + 'field_group_title' => '', + 'acf_parent_page_choices' => array(), + ) + ); + // phpcs:enable WordPress.Security.NonceVerification.Missing + + // Verify nonce and user capability. + if ( ! wp_verify_nonce( $args['nonce'], 'acf_nonce' ) || ! acf_current_user_can_admin() || ! $args['post_id'] ) { + die(); + } + + // Process form data. + if ( ! empty( $args['acf_ui_options_page'] ) ) { + // Prepare for save. + $options_page = acf_validate_internal_post_type( $args['acf_ui_options_page'], 'acf-ui-options-page' ); + $options_page['key'] = uniqid( 'ui_options_page_' ); + $options_page['title'] = ! empty( $args['acf_ui_options_page']['page_title'] ) ? $args['acf_ui_options_page']['page_title'] : ''; + $existing_options_pages = acf_get_options_pages(); + + // Check for duplicates. + if ( ! empty( $existing_options_pages ) ) { + foreach ( $existing_options_pages as $existing_options_page ) { + if ( $existing_options_page['menu_slug'] === $options_page['menu_slug'] ) { + wp_send_json_error( + array( + 'error' => __( 'The provided Menu Slug already exists.', 'acf' ), + ) + ); + } + } + } + + // Save the options page. + acf_update_internal_post_type( $options_page, 'acf-ui-options-page' ); + + wp_send_json_success( + array( + 'page_title' => esc_html( $options_page['page_title'] ), + 'menu_slug' => esc_attr( $options_page['menu_slug'] ), + ) + ); + } + + // Render the form. + ob_start(); + acf_get_view( + __DIR__ . '/../views/acf-ui-options-page/create-options-page-modal.php', + array( + 'field_group_title' => $args['field_group_title'], + 'acf_parent_page_choices' => $args['acf_parent_page_choices'], + ) + ); + $content = ob_get_clean(); + + wp_send_json_success( + array( + 'content' => $content, + 'title' => esc_html__( 'Add New Options Page', 'acf' ), + ) + ); + } + } + + new ACF_Admin_UI_Options_Page(); +endif; // Class exists check. diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/post-types/admin-ui-options-pages.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/post-types/admin-ui-options-pages.php new file mode 100644 index 00000000..b8e6a5d7 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/post-types/admin-ui-options-pages.php @@ -0,0 +1,217 @@ +post_type}" ) ) { + return; + } + + parent::current_screen(); + + // Run a first-run routine to set some defaults which are stored in user preferences. + if ( ! acf_get_user_setting( 'options-pages-first-run', false ) ) { + $option_key = 'manageedit-' . $this->post_type . 'columnshidden'; + $hidden_items = get_user_option( $option_key ); + + if ( ! is_array( $hidden_items ) ) { + $hidden_items = array(); + } + + if ( ! in_array( 'acf-key', $hidden_items ) ) { + $hidden_items[] = 'acf-key'; + } + update_user_option( get_current_user_id(), $option_key, $hidden_items, true ); + + acf_update_user_setting( 'options-pages-first-run', true ); + } + } + + /** + * Add any menu items required for post types. + * + * @since 6.1 + */ + public function admin_menu() { + $parent_slug = 'edit.php?post_type=acf-field-group'; + $cap = acf_get_setting( 'capability' ); + add_submenu_page( $parent_slug, __( 'Options Pages', 'acf' ), __( 'Options Pages', 'acf' ), $cap, 'edit.php?post_type=acf-ui-options-page' ); + } + + /** + * Customizes the admin table columns. + * + * @date 1/4/20 + * @since 5.9.0 + * + * @param array $_columns The columns array. + * @return array + */ + public function admin_table_columns( $_columns ) { + // Set the "no found" label to be our custom HTML for no results. + if ( empty( acf_request_arg( 's' ) ) ) { + global $wp_post_types; + $wp_post_types[ $this->post_type ]->labels->not_found = $this->get_not_found_html(); + } + + $columns = array( + 'cb' => $_columns['cb'], + 'title' => $_columns['title'], + 'acf-description' => __( 'Description', 'acf' ), + 'acf-key' => __( 'Key', 'acf' ), + ); + + if ( acf_get_local_json_files( $this->post_type ) ) { + $columns['acf-json'] = __( 'Local JSON', 'acf' ); + } + + return $columns; + } + + /** + * Renders a specific admin table column. + * + * @date 17/4/20 + * @since 5.9.0 + * + * @param string $column_name The name of the column to display. + * @param array $post The main ACF post array. + * @return void + */ + public function render_admin_table_column( $column_name, $post ) { + switch ( $column_name ) { + case 'acf-key': + echo ''; + echo esc_html( $post['key'] ); + break; + + // Description. + case 'acf-description': + if ( ! empty( $post['description'] ) && ( is_string( $post['description'] ) || is_numeric( $post['description'] ) ) ) { + echo '' . acf_esc_html( $post['description'] ) . ''; + } else { + echo ''; + echo '' . esc_html__( 'No description', 'acf' ) . ''; + } + break; + + // Local JSON. + case 'acf-json': + $this->render_admin_table_column_local_status( $post ); + break; + } + } + + /** + * Gets the translated action notice text for list table actions (activate, deactivate, sync, etc.). + * + * @since 6.1 + * + * @param string $action The action being performed. + * @param integer $count The number of items the action was performed on. + * @return string + */ + public function get_action_notice_text( $action, $count = 1 ) { + $text = ''; + $count = (int) $count; + + switch ( $action ) { + case 'acfactivatecomplete': + $text = sprintf( + /* translators: %s number of post types activated */ + _n( 'Options page activated.', '%s options pages activated.', $count, 'acf' ), + $count + ); + break; + case 'acfdeactivatecomplete': + $text = sprintf( + /* translators: %s number of post types deactivated */ + _n( 'Options page deactivated.', '%s options pages deactivated.', $count, 'acf' ), + $count + ); + break; + case 'acfduplicatecomplete': + $text = sprintf( + /* translators: %s number of post types duplicated */ + _n( 'Options page duplicated.', '%s options pages duplicated.', $count, 'acf' ), + $count + ); + break; + case 'acfsynccomplete': + $text = sprintf( + /* translators: %s number of post types synchronized */ + _n( 'Options page synchronized.', '%s options pages synchronized.', $count, 'acf' ), + $count + ); + break; + } + + return $text; + } + } + + // Instantiate. + acf_new_instance( 'ACF_Admin_UI_Options_Pages' ); +endif; // Class exists check. diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/post-types/index.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/post-types/index.php new file mode 100644 index 00000000..97611c0c --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/post-types/index.php @@ -0,0 +1,2 @@ + $tab_label ) { + acf_render_field_wrap( + array( + 'type' => 'tab', + 'label' => $tab_label, + 'key' => 'acf_ui_options_page_tabs', + ) + ); + + $wrapper_class = str_replace( '_', '-', $tab_key ); + + echo '
'; + + switch ( $tab_key ) { + case 'visibility': + $acf_dashicon_class_name = __( 'Dashicon class name', 'acf' ); + $acf_dashicon_link = '' . $acf_dashicon_class_name . ''; + + $acf_menu_icon_instructions = sprintf( + /* translators: %s = "dashicon class name", link to the WordPress dashicon documentation. */ + __( 'The icon used for the options page menu item in the admin dashboard. Can be a URL or %s to use for the icon.', 'acf' ), + $acf_dashicon_link + ); + + // Set the default value for the icon field. + $acf_default_icon_value = array( + 'type' => 'dashicons', + 'value' => 'dashicons-admin-generic', + ); + + $acf_icon_value = $acf_default_icon_value; + + // Override the value for backwards compatibility, if it was saved with the key 'icon_url' as a string. + if ( ! empty( $acf_ui_options_page['icon_url'] ) ) { + if ( strpos( $acf_ui_options_page['icon_url'], 'dashicons-' ) === 0 ) { + $acf_icon_value = array( + 'type' => 'dashicons', + 'value' => $acf_ui_options_page['icon_url'], + ); + } else { + $acf_icon_value = array( + 'type' => 'url', + 'value' => $acf_ui_options_page['icon_url'], + ); + } + } + + // Override the above value if a 'menu_icon' key exists, and is not empty, which is the new key for storing the icon. + if ( ! empty( $acf_ui_options_page['menu_icon'] ) ) { + $acf_icon_value = $acf_ui_options_page['menu_icon']; + } + + acf_render_field_wrap( + array( + 'label' => __( 'Menu Icon', 'acf' ), + 'type' => 'icon_picker', + 'name' => 'menu_icon', + 'key' => 'menu_icon', + 'class' => 'acf-options-page-menu_icon', + 'prefix' => 'acf_ui_options_page', + 'required' => false, + 'value' => $acf_icon_value, + 'default_value' => $acf_default_icon_value, + 'conditions' => array( + 'field' => 'parent_slug', + 'operator' => '==', + 'value' => 'none', + ), + ), + 'div', + 'field' + ); + + acf_render_field_wrap( + array( + 'label' => __( 'Menu Title', 'acf' ), + 'type' => 'text', + 'name' => 'menu_title', + 'key' => 'menu_title', + 'class' => 'acf-options-page-menu_title', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['menu_title'], + ), + 'div', + 'field' + ); + + $acf_menu_position_link = sprintf( + '%s', + __( 'Learn more about menu positions.', 'acf' ) + ); + $acf_menu_position_desc = sprintf( + /* translators: %s - link to WordPress docs to learn more about menu positions. */ + __( 'The position in the menu where this page should appear. %s', 'acf' ), + $acf_menu_position_link + ); + + $acf_menu_position_desc_parent = sprintf( + /* translators: %s - link to WordPress docs to learn more about menu positions. */ + __( 'The position in the menu where this page should appear. %s', 'acf' ), + $acf_menu_position_link + ); + + $acf_menu_position_desc_child = __( 'The position in the menu where this child page should appear. The first child page is 0, the next is 1, etc.', 'acf' ); + + $acf_menu_position_desc = '' . $acf_menu_position_desc_parent . ''; + $acf_menu_position_desc .= '' . $acf_menu_position_desc_child . ''; + + acf_render_field_wrap( + array( + 'label' => __( 'Menu Position', 'acf' ), + 'type' => 'text', + 'name' => 'position', + 'key' => 'position', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['position'], + 'instructions' => $acf_menu_position_desc, + ), + 'div', + 'field' + ); + + acf_render_field_wrap( + array( + 'label' => __( 'Redirect to Child Page', 'acf' ), + 'instructions' => __( 'When child pages exist for this parent page, this page will redirect to the first child page.', 'acf' ), + 'type' => 'true_false', + 'name' => 'redirect', + 'key' => 'redirect', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['redirect'], + 'ui' => 1, + 'default' => 1, + 'conditions' => array( + 'field' => 'parent_slug', + 'operator' => '==', + 'value' => 'none', + ), + ) + ); + + acf_render_field_wrap( + array( + 'type' => 'text', + 'name' => 'description', + 'key' => 'description', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['description'], + 'label' => __( 'Description', 'acf' ), + 'instructions' => __( 'A descriptive summary of the options page.', 'acf' ), + ), + 'div', + 'field' + ); + break; + case 'labels': + acf_render_field_wrap( + array( + 'label' => __( 'Update Button Label', 'acf' ), + 'instructions' => __( 'The label used for the submit button which updates the fields on the options page.', 'acf' ), + 'placeholder' => __( 'Update', 'acf' ), + 'type' => 'text', + 'name' => 'update_button', + 'key' => 'update_button', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['update_button'], + ), + 'div', + 'field' + ); + + acf_render_field_wrap( + array( + 'label' => __( 'Updated Message', 'acf' ), + 'instructions' => __( 'The message that is displayed after successfully updating the options page.', 'acf' ), + 'placeholder' => __( 'Updated Options', 'acf' ), + 'type' => 'text', + 'name' => 'updated_message', + 'key' => 'updated_message', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['updated_message'], + ), + 'div', + 'field' + ); + + break; + case 'permissions': + $acf_all_caps = array(); + + foreach ( wp_roles()->roles as $acf_role ) { + $acf_all_caps = array_merge( $acf_all_caps, $acf_role['capabilities'] ); + } + + // Get rid of duplicates and set the keys equal to the values. + $acf_all_caps = array_unique( array_keys( $acf_all_caps ) ); + $acf_all_caps = array_combine( $acf_all_caps, $acf_all_caps ); + + // Move the "edit_posts" to the first select option. + if ( in_array( 'edit_posts', $acf_all_caps, true ) ) { + $acf_all_caps = array_diff( $acf_all_caps, array( 'edit_posts' ) ); + $acf_all_caps = array_merge( array( 'edit_posts' => 'edit_posts' ), $acf_all_caps ); + } + + // TODO: Should we AJAX load this? Seems to require UI = true, which breaks our custom template. + acf_render_field_wrap( + array( + 'type' => 'select', + 'name' => 'capability', + 'key' => 'capability', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['capability'], + 'label' => __( 'Capability', 'acf' ), + 'instructions' => __( 'The capability required for this menu to be displayed to the user.', 'acf' ), + 'choices' => $acf_all_caps, + 'default' => 'edit_posts', + 'class' => 'acf-options-page-capability', + ), + 'div', + 'field' + ); + + acf_render_field_wrap( + array( + 'type' => 'select', + 'name' => 'data_storage', + 'key' => 'data_storage', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['data_storage'], + 'label' => __( 'Data Storage', 'acf' ), + 'instructions' => __( 'By default, the option page stores field data in the options table. You can make the page load field data from a post, user, or term.', 'acf' ), + 'choices' => array( + 'options' => __( 'Options', 'acf' ), + 'post_id' => __( 'Custom Storage', 'acf' ), + ), + 'default' => 'options', + 'hide_search' => true, + 'class' => 'acf-options-page-data_storage', + ), + 'div', + 'field' + ); + + $acf_custom_storage_url = acf_add_url_utm_tags( + 'https://www.advancedcustomfields.com/resources/get_field/', + 'docs', + 'options_page_ui', + 'get-a-value-from-different-objects' + ); + + $acf_custom_storage_link = sprintf( + '%2$s', + $acf_custom_storage_url, + __( 'Learn more about available settings.', 'acf' ) + ); + + $acf_custom_storage_desc = sprintf( + /* translators: %s = link to learn more about storage locations. */ + __( 'Set a custom storage location. Can be a numeric post ID (123), or a string (`user_2`). %s', 'acf' ), + $acf_custom_storage_link + ); + + acf_render_field_wrap( + array( + 'label' => __( 'Custom Storage', 'acf' ), + 'instructions' => $acf_custom_storage_desc, + 'type' => 'text', + 'name' => 'post_id', + 'key' => 'post_id', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['post_id'], + 'conditions' => array( + 'field' => 'data_storage', + 'operator' => '==', + 'value' => 'post_id', + ), + ), + 'div', + 'field' + ); + + acf_render_field_wrap( + array( + 'label' => __( 'Autoload Options', 'acf' ), + 'instructions' => __( 'Improve performance by loading the fields in the option records automatically when WordPress loads.', 'acf' ), + 'type' => 'true_false', + 'name' => 'autoload', + 'key' => 'autoload', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['autoload'], + 'ui' => 1, + 'default' => 0, + ) + ); + break; + default: + } + + do_action( "acf/ui_options_page/render_settings_tab/{$tab_key}", $acf_ui_options_page ); + + echo '
'; +} diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/acf-ui-options-page/basic-settings.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/acf-ui-options-page/basic-settings.php new file mode 100644 index 00000000..d8d76d2a --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/acf-ui-options-page/basic-settings.php @@ -0,0 +1,98 @@ + __( 'Page Title', 'acf' ), + /* translators: example options page name */ + 'placeholder' => __( 'Site Settings', 'acf' ), + 'type' => 'text', + 'name' => 'page_title', + 'key' => 'page_title', + 'class' => 'acf_options_page_title acf_slugify_to_key', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['page_title'], + 'required' => true, + ), + 'div', + 'field' +); + +acf_render_field_wrap( + array( + 'label' => __( 'Menu Slug', 'acf' ), + 'type' => 'text', + 'name' => 'menu_slug', + 'key' => 'menu_slug', + 'class' => 'acf-options-page-menu_slug acf_slugified_key', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['menu_slug'], + 'required' => true, + ), + 'div', + 'field' +); + +acf_render_field_wrap( + array( + 'label' => __( 'Parent Page', 'acf' ), + 'type' => 'select', + 'name' => 'parent_slug', + 'key' => 'parent_slug', + 'class' => 'acf-options-page-parent_slug', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['parent_slug'], + 'choices' => $acf_parent_page_options, + 'required' => true, + ), + 'div', + 'field' +); + +do_action( 'acf/post_type/basic_settings', $acf_ui_options_page ); + +acf_render_field_wrap( array( 'type' => 'seperator' ) ); + +acf_render_field_wrap( + array( + 'label' => __( 'Advanced Configuration', 'acf' ), + 'instructions' => __( 'I know what I\'m doing, show me all the options.', 'acf' ), + 'type' => 'true_false', + 'name' => 'advanced_configuration', + 'key' => 'advanced_configuration', + 'prefix' => 'acf_ui_options_page', + 'value' => $acf_ui_options_page['advanced_configuration'], + 'ui' => 1, + 'class' => 'acf-advanced-settings-toggle', + ) +); + +?> +
+ +
+ +
+ __( 'Page Title', 'acf' ), + /* translators: example options page name */ + 'placeholder' => __( 'Site Settings', 'acf' ), + 'value' => $acf_options_page_prefilled_title, + 'type' => 'text', + 'name' => 'page_title', + 'key' => 'page_title', + 'class' => 'acf_options_page_title acf_slugify_to_key', + 'prefix' => 'acf_ui_options_page', + 'required' => true, + ), + 'div', + 'field' + ); + + acf_render_field_wrap( + array( + 'label' => __( 'Menu Slug', 'acf' ), + 'type' => 'text', + 'name' => 'menu_slug', + 'key' => 'menu_slug', + 'class' => 'acf-options-page-menu_slug acf_slugified_key', + 'prefix' => 'acf_ui_options_page', + 'required' => true, + ), + 'div', + 'field' + ); + + acf_render_field_wrap( + array( + 'label' => __( 'Parent Page', 'acf' ), + 'type' => 'select', + 'name' => 'parent_slug', + 'key' => 'parent_slug', + 'class' => 'acf-options-page-parent_slug', + 'prefix' => 'acf_ui_options_page', + 'choices' => $acf_parent_page_choices, + 'required' => true, + ), + 'div', + 'field' + ); + ?> + +
+ + +
+ +
diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/acf-ui-options-page/index.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/acf-ui-options-page/index.php new file mode 100644 index 00000000..97611c0c --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/acf-ui-options-page/index.php @@ -0,0 +1,2 @@ +options pages are custom admin pages for managing global settings via fields. You can create multiple pages and sub-pages.', 'acf' ), + acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/options-page/', 'docs', 'no-options-pages' ) +); + +$acf_getting_started = sprintf( + /* translators: %s url to getting started guide */ + __( 'New to ACF? Take a look at our getting started guide.', 'acf' ), + acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/getting-started-with-acf/', 'docs', 'no-options-pages' ) +); + +$acf_learn_more_link = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/pro/', 'ACF upgrade', 'no-options-pages' ); +$acf_upgrade_button = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/pro/', 'ACF upgrade', 'no-options-pages-pricing', 'pricing-table' ); +?> + +
+
+ + + + +

+

+ + + + +
+ + +
+ + +

+
+
diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/html-options-page.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/html-options-page.php new file mode 100644 index 00000000..47b50eb1 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/html-options-page.php @@ -0,0 +1,57 @@ + +
+ +

+ +
+ + 'options', + 'post_id' => $post_id, + ) + ); + + wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); + wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); + + ?> + +
+ +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ +
+ +
+ +
diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/html-settings-updates.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/html-settings-updates.php new file mode 100644 index 00000000..9054b517 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/html-settings-updates.php @@ -0,0 +1,315 @@ +' . esc_html( $status_text ) . ''; + ?> + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + +
+ %3$s', + esc_url( $url ), + esc_attr( $class ), + esc_html( $text ) + ); +} +?> +
+ +

+ +
+
+

+
+
+ + +

+ +

+ + +
+ %3$s', + esc_attr( $acf_recheck_class ), + esc_url( $acf_recheck_url ), + esc_html( $acf_recheck_text ) + ); + ?> +
+ + + +
+ + + 'text', + 'name' => 'acf_pro_license', + 'value' => str_repeat( '*', strlen( $license ) ), + 'readonly' => $active ? 1 : 0, + ) + ); + + $activate_deactivate_btn_id = $active ? 'id="deactivate-license" ' : ''; + $activate_deactivate_btn_class = $active ? ' acf-btn-tertiary' : ''; + ?> + type="submit" value="" class="acf-btn"> + + %2$s', + esc_url( $acf_recheck_url ), + esc_html( $acf_recheck_text ) + ); + } + ?> + +
+ + +
+ +
+ + %s ', + acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/pro/', 'ACF upgrade', 'license activations' ), + $acf_view_pricing_text + ); + echo acf_esc_html( + sprintf( + /* translators: %s - link to ACF website */ + __( 'Don\'t have an ACF PRO license? %s', 'acf' ), + $acf_view_pricing_link + ) + ); + ?> + +
+ +
+
+ +
+ +
+
+

+
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + + + + + + +
+ + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+
+
diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/index.php b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/index.php new file mode 100644 index 00000000..97611c0c --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/admin/views/index.php @@ -0,0 +1,2 @@ + false, + 'render_callback' => false, + 'enqueue_style' => false, + 'enqueue_script' => false, + 'enqueue_assets' => false, + 'post_types' => array(), + 'uses_context' => array(), + 'supports' => array(), + 'attributes' => array(), + 'acf_block_version' => $default_acf_block_version, + 'validate' => true, + 'validate_on_load' => true, + 'use_post_meta' => false, + ) + ); + + // Add user provided attributes to ACF's required defaults. + $settings['attributes'] = wp_parse_args( + acf_get_block_type_default_attributes( $metadata ), + $settings['attributes'] + ); + + // Add default ACF 'supports' settings. + $settings['supports'] = wp_parse_args( + $settings['supports'], + array( + 'align' => true, + 'html' => false, + 'mode' => true, + 'jsx' => true, + 'multiple' => true, + ) + ); + + // Add default ACF 'uses_context' settings. + $settings['uses_context'] = array_values( + array_unique( + array_merge( + $settings['uses_context'], + array( + 'postId', + 'postType', + ) + ) + ) + ); + + // Map custom ACF properties from the ACF key, with localization. + $property_mappings = array( + 'renderCallback' => 'render_callback', + 'renderTemplate' => 'render_template', + 'mode' => 'mode', + 'blockVersion' => 'acf_block_version', + 'postTypes' => 'post_types', + 'validate' => 'validate', + 'validateOnLoad' => 'validate_on_load', + 'usePostMeta' => 'use_post_meta', + 'hideFieldsInSidebar' => 'hide_fields_in_sidebar', + ); + $textdomain = ! empty( $metadata['textdomain'] ) ? $metadata['textdomain'] : 'acf'; + $i18n_schema = get_block_metadata_i18n_schema(); + + foreach ( $property_mappings as $key => $mapped_key ) { + if ( isset( $metadata['acf'][ $key ] ) ) { + unset( $settings[ $key ] ); + $settings[ $mapped_key ] = $metadata['acf'][ $key ]; + if ( $textdomain && isset( $i18n_schema->$key ) ) { + $settings[ $mapped_key ] = translate_settings_using_i18n_schema( $i18n_schema->$key, $settings[ $key ], $textdomain ); + } + } + } + + if ( isset( $metadata['apiVersion'] ) ) { + // Use the apiVersion defined in block.json if it exists. + $settings['api_version'] = $metadata['apiVersion']; + } elseif ( $settings['acf_block_version'] >= 3 && version_compare( get_bloginfo( 'version' ), '6.3', '>=' ) ) { + // Otherwise, if we're on WP 6.3+ and the block is ACF block version 3 or greater, use apiVersion 3. + $settings['api_version'] = 3; + } else { + // Otherwise, default to apiVersion 2. + $settings['api_version'] = 2; + } + + // Add the block name and registration path to settings. + $settings['name'] = $metadata['name']; + $settings['path'] = dirname( $metadata['file'] ); + + // Prevent blocks that usePostMeta from being nested or saving multiple. + if ( ! empty( $settings['use_post_meta'] ) ) { + $settings['parent'] = array( 'core/post-content' ); + $settings['supports']['multiple'] = false; + } + + acf_get_store( 'block-types' )->set( $metadata['name'], $settings ); + add_action( 'enqueue_block_editor_assets', 'acf_enqueue_block_assets' ); + + // Ensure our render callback is used. + $settings['render_callback'] = 'acf_render_block_callback'; + + return $settings; +} + +/** + * Check if a block.json block is an ACF block. + * + * @since 6.0.0 + * + * @param array $metadata The raw block metadata array. + * @return boolean + */ +function acf_is_acf_block_json( $metadata ) { + return ( isset( $metadata['acf'] ) && $metadata['acf'] ); +} + + +/** + * Registers a block type. + * + * @date 18/2/19 + * @since 5.8.0 + * + * @param array $block The block settings. + * @return (array|false) + */ +function acf_register_block_type( $block ) { + // Validate block type settings. + $block = acf_validate_block_type( $block ); + + /** + * Filters the arguments for registering a block type. + * + * @since 5.8.9 + * + * @param array $block The array of arguments for registering a block type. + */ + $block = apply_filters( 'acf/register_block_type_args', $block ); + + // Require name. + if ( ! $block['name'] ) { + $message = __( 'Block type name is required.', 'acf' ); + _doing_it_wrong( __FUNCTION__, $message, '5.8.0' ); //phpcs:ignore -- escape not required. + return false; + } + + // Bail early if already exists. + if ( acf_has_block_type( $block['name'] ) ) { + /* translators: The name of the block type */ + $message = sprintf( __( 'Block type "%s" is already registered.', 'acf' ), $block['name'] ); + _doing_it_wrong( __FUNCTION__, $message, '5.8.0' ); //phpcs:ignore -- escape not required. + return false; + } + + // Set ACF required attributes. + $block['attributes'] = acf_get_block_type_default_attributes( $block ); + + /** + * Filters the default ACF block version for blocks registered via acf_register_block_type(). + * + * @since 6.6.0 + * + * @param integer $default_acf_block_version The default ACF block version. + * @param array $block An array of block settings. + * @return integer + */ + $default_acf_block_version = apply_filters( 'acf/blocks/default_block_version', 1, $block ); + + if ( ! isset( $block['acf_block_version'] ) ) { + $block['acf_block_version'] = $default_acf_block_version; + } + + if ( ! isset( $block['api_version'] ) ) { + if ( $block['acf_block_version'] >= 3 && version_compare( get_bloginfo( 'version' ), '6.3', '>=' ) ) { + $block['api_version'] = 3; + } else { + $block['api_version'] = 2; + } + } + + // Add to storage. + acf_get_store( 'block-types' )->set( $block['name'], $block ); + + // Overwrite callback for WordPress registration. + $block['render_callback'] = 'acf_render_block_callback'; + + // Register block type in WP. + if ( function_exists( 'register_block_type' ) ) { + register_block_type( + $block['name'], + $block + ); + } + + // Register action. + add_action( 'enqueue_block_editor_assets', 'acf_enqueue_block_assets' ); + + // Return block. + return $block; +} + +/** + * See acf_register_block_type(). + * + * @date 18/2/19 + * @since 5.7.12 + * + * @param array $block The block settings. + * @return (array|false) + */ +function acf_register_block( $block ) { + return acf_register_block_type( $block ); +} + +/** + * Returns true if a block type exists for the given name. + * + * @since 5.7.12 + * + * @param string $name The block type name. + * @return boolean + */ +function acf_has_block_type( $name ) { + return acf_get_store( 'block-types' )->has( $name ); +} + +/** + * Returns an array of all registered block types. + * + * @since 5.7.12 + * + * @return array + */ +function acf_get_block_types() { + return acf_get_store( 'block-types' )->get(); +} + +/** + * Returns a block type for the given name. + * + * @since 5.7.12 + * + * @param string $name The block type name. + * @return (array|null) + */ +function acf_get_block_type( $name ) { + return acf_get_store( 'block-types' )->get( $name ); +} + +/** + * Removes a block type for the given name. + * + * @since 5.7.12 + * + * @param string $name The block type name. + * @return void + */ +function acf_remove_block_type( $name ) { + acf_get_store( 'block-types' )->remove( $name ); +} + +/** + * Returns an array of default attribute settings for a block type. + * + * @date 19/11/18 + * @since 5.8.0 + * + * @param array $block_type A block configuration array. + * @return array + */ +function acf_get_block_type_default_attributes( $block_type ) { + $attributes = array( + 'name' => array( + 'type' => 'string', + 'default' => '', + ), + 'data' => array( + 'type' => 'object', + 'default' => array(), + ), + 'align' => array( + 'type' => 'string', + 'default' => '', + ), + 'mode' => array( + 'type' => 'string', + 'default' => '', + ), + ); + + foreach ( acf_get_block_back_compat_attribute_key_array() as $new => $old ) { + if ( isset( $block_type['supports'][ $old ] ) ) { + $block_type['supports'][ $new ] = $block_type['supports'][ $old ]; + unset( $block_type['supports'][ $old ] ); + } + } + + if ( ! empty( $block_type['supports']['alignText'] ) ) { + $attributes['alignText'] = array( + 'type' => 'string', + 'default' => '', + ); + } + if ( ! empty( $block_type['supports']['alignContent'] ) ) { + $attributes['alignContent'] = array( + 'type' => 'string', + 'default' => '', + ); + } + if ( ! empty( $block_type['supports']['fullHeight'] ) ) { + $attributes['fullHeight'] = array( + 'type' => 'boolean', + 'default' => '', + ); + } + + // For each of ACF's block attributes, check if the user's block attributes contains a default value we should use. + if ( isset( $block_type['attributes'] ) && is_array( $block_type['attributes'] ) ) { + foreach ( array_keys( $attributes ) as $key ) { + if ( isset( $block_type['attributes'][ $key ] ) && is_array( $block_type['attributes'][ $key ] ) && isset( $block_type['attributes'][ $key ]['default'] ) ) { + $attributes[ $key ]['default'] = $block_type['attributes'][ $key ]['default']; + } + } + } + + return $attributes; +} + +/** + * Validates a block type ensuring all settings exist. + * + * @since 5.8.0 + * + * @param array $block The block settings. + * @return array + */ +function acf_validate_block_type( $block ) { + + // Add default settings. + $block = wp_parse_args( + $block, + array( + 'name' => '', + 'title' => '', + 'description' => '', + 'category' => 'common', + 'icon' => '', + 'mode' => 'preview', + 'keywords' => array(), + 'supports' => array(), + 'post_types' => array(), + 'uses_context' => array(), + 'render_template' => false, + 'render_callback' => false, + 'enqueue_style' => false, + 'enqueue_script' => false, + 'enqueue_assets' => false, + ) + ); + + // Generate name with prefix. + if ( $block['name'] ) { + $block['name'] = 'acf/' . acf_slugify( $block['name'] ); + } + + // Add default 'supports' settings. + $block['supports'] = wp_parse_args( + $block['supports'], + array( + 'align' => true, + 'html' => false, + 'mode' => true, + ) + ); + + // Add default 'uses_context' settings. + $block['uses_context'] = wp_parse_args( + $block['uses_context'], + array( + 'postId', + 'postType', + ) + ); + + // Correct "Experimental" flags. + if ( isset( $block['supports']['__experimental_jsx'] ) ) { + $block['supports']['jsx'] = $block['supports']['__experimental_jsx']; + } + + // Normalize block 'parent' setting. + if ( array_key_exists( 'parent', $block ) ) { + // As of WP 6.8, parent must be an array. + if ( null === $block['parent'] ) { + unset( $block['parent'] ); + } elseif ( is_string( $block['parent'] ) ) { + $block['parent'] = array( $block['parent'] ); + } + } + + // Return block. + return $block; +} + +/** + * Prepares a block for use in render_callback by merging in all settings and attributes. + * + * @since 5.8.0 + * + * @param array $block The block props. + * @return array|boolean + */ +function acf_prepare_block( $block ) { + // Bail early if no name. + if ( ! isset( $block['name'] ) ) { + return false; + } + + // Ensure a block ID is always prefixed with `block_` for meta. + $block['id'] = acf_ensure_block_id_prefix( $block['id'] ); + + // Get block type and return false if doesn't exist. + $block_type = acf_get_block_type( $block['name'] ); + if ( ! $block_type ) { + return false; + } + + // Prevent protected attributes being overridden. + $protected = array( + 'render_template', + 'render_callback', + 'enqueue_script', + 'enqueue_style', + 'enqueue_assets', + 'post_types', + 'use_post_meta', + ); + $block = array_diff_key( $block, array_flip( $protected ) ); + + // Generate default attributes. + $attributes = array(); + foreach ( acf_get_block_type_default_attributes( $block_type ) as $k => $v ) { + $attributes[ $k ] = $v['default']; + } + + // Merge together arrays in order of least to most specific. + $block = array_merge( $block_type, $attributes, $block ); + + // Add backward compatibility attributes. + $block = acf_add_back_compat_attributes( $block ); + + // Return block. + return $block; +} + +/** + * Add backwards compatible attribute values. + * + * @since 6.0.0 + * + * @param array $block The original block. + * @return array Modified block array with backwards compatibility attributes. + */ +function acf_add_back_compat_attributes( $block ) { + foreach ( acf_get_block_back_compat_attribute_key_array() as $new => $old ) { + if ( ! empty( $block[ $new ] ) || ( isset( $block[ $new ] ) && ! isset( $block[ $old ] ) ) ) { + $block[ $old ] = $block[ $new ]; + } + } + + return $block; +} + +/** + * Get back compat new values and old values. + * + * @since 6.0.0 + * + * @return array back compat key array. + */ +function acf_get_block_back_compat_attribute_key_array() { + return array( + 'fullHeight' => 'full_height', + 'alignText' => 'align_text', + 'alignContent' => 'align_content', + ); +} + + +/** + * The render callback for all ACF blocks. + * + * @date 28/10/20 + * @since 5.9.2 + * + * @param array $attributes The block attributes. + * @param string $content The block content. + * @param WP_Block $wp_block The block instance (since WP 5.5). + * @return string The block HTML. + */ +function acf_render_block_callback( $attributes, $content = '', $wp_block = null ) { + + $is_preview = false; + $post_id = get_the_ID(); + + // Set preview flag to true when rendering for the block editor. + if ( is_admin() && acf_is_block_editor() ) { + $is_preview = true; + } + + // If ACF's block save method hasn't been called yet, try to initialize a default block. + if ( empty( $attributes['name'] ) && ! empty( $wp_block->name ) ) { + $attributes['name'] = $wp_block->name; + } + + // Return rendered block HTML. + return acf_rendered_block( $attributes, $content, $is_preview, $post_id, $wp_block ); +} + +/** + * Returns the rendered block HTML. + * + * @date 28/2/19 + * @since 5.7.13 + * + * @param array $attributes The block attributes. + * @param string $content The block content. + * @param boolean $is_preview Whether or not the block is being rendered for editing preview. + * @param integer $post_id The current post being edited or viewed. + * @param WP_Block $wp_block The block instance (since WP 5.5). + * @param array $context The block context array. + * @param boolean $is_ajax_render Whether or not this is an ACF AJAX render. + * @return string The block HTML. + */ +function acf_rendered_block( $attributes, $content = '', $is_preview = false, $post_id = 0, $wp_block = null, $context = false, $is_ajax_render = false ) { + $registry = WP_Block_Type_Registry::get_instance(); + $wp_block_type = $registry->get_registered( $attributes['name'] ); + + if ( isset( $wp_block_type->acf_block_version ) && $wp_block_type->acf_block_version >= 3 ) { + $mode = 'preview'; + $form = false; + } else { + $mode = isset( $attributes['mode'] ) ? $attributes['mode'] : 'auto'; + $form = ( 'edit' === $mode && $is_preview ); + } + + // If context is available from the WP_Block class object and we have no context of our own, use that. + if ( empty( $context ) && ! empty( $wp_block->context ) ) { + $context = $wp_block->context; + } + + // Check if we need to generate a block ID. + $force_new_id = false; + if ( acf_block_uses_post_meta( $attributes ) && ! empty( $attributes['id'] ) && empty( $attributes['data'] ) ) { + $force_new_id = true; + } + $attributes['id'] = acf_get_block_id( $attributes, $context, $force_new_id ); + + // Check if we've already got a cache of this block ID and return it to save rendering if we're in the backend. + if ( $is_preview ) { + $cached_block = acf_get_store( 'block-cache' )->get( $attributes['id'] ); + if ( $cached_block ) { + if ( $form ) { + if ( $cached_block['form'] ) { + return $cached_block['html']; + } + } elseif ( ! $cached_block['form'] ) { + return $cached_block['html']; + } + } + } + + ob_start(); + + $validation = false; + + if ( $form ) { + // Load the block form since we're in edit mode. + // Set flag for post REST cleanup of media enqueue count during preloads. + acf_set_data( 'acf_did_render_block_form', true ); + + $block = acf_prepare_block( $attributes ); + $block = acf_add_block_meta_values( $block, $post_id ); + acf_setup_meta( $block['data'], $block['id'], true ); + + if ( ! empty( $block['validate'] ) ) { + $validation = acf_get_block_validation_state( $block, false, false, true ); + } + + $fields = acf_get_block_fields( $block ); + if ( $fields ) { + acf_prefix_fields( $fields, "acf-{$block['id']}" ); + + echo '
'; + acf_render_fields( $fields, acf_ensure_block_id_prefix( $block['id'] ), 'div', 'field' ); + echo '
'; + } else { + echo acf_get_empty_block_form_html( $attributes['name'] ); //phpcs:ignore -- escaped in function. + } + } else { + if ( $is_preview ) { + acf_set_data( 'acf_doing_block_preview', true ); + } + + // Capture block render output. + acf_render_block( $attributes, $content, $is_preview, $post_id, $wp_block, $context ); + + if ( $is_preview && ! $is_ajax_render ) { + /** + * If we're in preloaded preview, we need to get the validation state for a preview too. + * Because the block render resets meta once it's finished to not pollute $post_id, we need to redo that process here. + */ + $block = acf_prepare_block( $attributes ); + $block = acf_add_block_meta_values( $block, $post_id ); + acf_setup_meta( $block['data'], $block['id'], true ); + if ( ! empty( $block['validate'] ) ) { + $validation = acf_get_block_validation_state( $block, false, false, true ); + } + } + } + + $html = ob_get_clean(); + $html = is_string( $html ) ? $html : ''; + + // Replace placeholder on front-end, or if we're rendering an ACF block inside another ACF block template. + if ( ! $is_preview || doing_action( 'acf_block_render_template' ) ) { + // Escape "$" character to avoid "capture group" interpretation. + $content = str_replace( '$', '\$', $content ); + + // Wrap content in our acf-inner-container wrapper if necessary. + if ( $wp_block && $wp_block->block_type->acf_block_version > 1 && apply_filters( 'acf/blocks/wrap_frontend_innerblocks', true, $attributes['name'] ) ) { + // Check for a class (or className) provided in the template to become the InnerBlocks wrapper class. + $matches = array(); + if ( preg_match( '/' . $content . ''; + } + $html = preg_replace( '//', $content, $html ); + } + + $block_cache = array( + 'form' => $form, + 'html' => $html, + ); + + if ( $is_preview && $validation ) { + // If we're in the preview, also store the validation status in the block cache. + $block_cache['validation'] = $validation; + } + + // Store in cache for preloading if we're in the backend. + acf_get_store( 'block-cache' )->set( + $attributes['id'], + $block_cache + ); + + acf_set_data( 'acf_doing_block_preview', false ); + + // Prevent edit forms being output to rest endpoints. + if ( $form && acf_get_data( 'acf_inside_rest_call' ) && apply_filters( 'acf/blocks/prevent_edit_forms_on_rest_endpoints', true ) ) { + return ''; + } + + return $html; +} + +/** + * Renders the block HTML. + * + * @since 5.7.12 + * + * @param array $attributes The block attributes. + * @param string $content The block content. + * @param boolean $is_preview Whether or not the block is being rendered for editing preview. + * @param integer $post_id The current post being edited or viewed. + * @param WP_Block $wp_block The block instance (since WP 5.5). + * @param array $context The block context array. + * @return void|string + */ +function acf_render_block( $attributes, $content = '', $is_preview = false, $post_id = 0, $wp_block = null, $context = false ) { + + // Prepare block ensuring all settings and attributes exist. + $block = acf_prepare_block( $attributes ); + if ( ! $block ) { + return ''; + } + + // Find post_id if not defined. + if ( ! $post_id ) { + $post_id = get_the_ID(); + } + + // Enqueue block type assets. + acf_enqueue_block_type_assets( $block ); + + $block = acf_add_block_meta_values( $block, $post_id ); + + // Setup postdata allowing get_field() to work. + acf_setup_meta( $block['data'], $block['id'], true ); + + // Call render_callback. + if ( is_callable( $block['render_callback'] ) ) { + call_user_func( $block['render_callback'], $block, $content, $is_preview, $post_id, $wp_block, $context ); + + // Or include template. + } elseif ( $block['render_template'] ) { + do_action( 'acf_block_render_template', $block, $content, $is_preview, $post_id, $wp_block, $context ); + } + + // Reset postdata. + acf_reset_meta( $block['id'] ); +} + +/** + * Locate and include an ACF block's template. + * + * @since 6.0.4 + * + * @param array $block The block props. + */ +function acf_block_render_template( $block, $content, $is_preview, $post_id, $wp_block, $context ) { + // Locate template. + if ( isset( $block['path'] ) && file_exists( $block['path'] . '/' . $block['render_template'] ) ) { + $path = $block['path'] . '/' . $block['render_template']; + } elseif ( file_exists( $block['render_template'] ) ) { + $path = $block['render_template']; + } else { + $path = locate_template( $block['render_template'] ); + } + + do_action( 'acf/blocks/pre_block_template_render', $block, $content, $is_preview, $post_id, $wp_block, $context ); + + // Include template. + if ( file_exists( $path ) ) { + include $path; + } elseif ( $is_preview ) { + echo acf_esc_html( apply_filters( 'acf/blocks/template_not_found_message', '

' . __( 'The render template for this ACF Block was not found', 'acf' ) . '

' ) ); + } + + do_action( 'acf/blocks/post_block_template_render', $block, $content, $is_preview, $post_id, $wp_block, $context ); +} + +/** + * Returns an array of all fields for the given block. + * + * @date 24/10/18 + * @since 5.8.0 + * + * @param array $block The block props. + * @return array + */ +function acf_get_block_fields( $block ) { + $fields = array(); + + // We need at least a block name to check. + if ( empty( $block['name'] ) ) { + return $fields; + } + + // Get field groups for this block. + $field_groups = acf_get_field_groups( + array( + 'block' => $block['name'], + ) + ); + + // Loop over results and append fields. + if ( $field_groups ) { + foreach ( $field_groups as $field_group ) { + $fields = array_merge( $fields, acf_get_fields( $field_group ) ); + } + } + + return $fields; +} + +/** + * Enqueues and localizes block scripts and styles. + * + * @since 5.7.13 + * + * @return void + */ +function acf_enqueue_block_assets() { + + // Localize text. + acf_localize_text( + array( + 'Switch to Edit' => __( 'Switch to Edit', 'acf' ), + 'Switch to Preview' => __( 'Switch to Preview', 'acf' ), + 'Change content alignment' => __( 'Change content alignment', 'acf' ), + 'Error previewing block' => __( 'An error occurred when loading the preview for this block.', 'acf' ), + 'Error loading block form' => __( 'An error occurred when loading the block in edit mode.', 'acf' ), + 'Edit Block' => __( 'Edit Block', 'acf' ), + 'Open Expanded Editor' => __( 'Open Expanded Editor', 'acf' ), + 'Error previewing block v3' => __( 'The preview for this block couldn’t be loaded. Review its content or settings for issues.', 'acf' ), + 'ACF Block' => __( 'ACF Block', 'acf' ), + + /* translators: %s: Block type title */ + '%s settings' => __( '%s settings', 'acf' ), + ) + ); + + // Get block types. + $block_types = array_map( + function ( $block ) { + // Render Callback may contain a incompatible class for JSON encoding. Turn it into a boolean for the frontend. + $block['render_callback'] = ! empty( $block['render_callback'] ); + return $block; + }, + acf_get_block_types() + ); + + // Localize data. + acf_localize_data( + array( + 'blockTypes' => array_values( $block_types ), + 'postType' => get_post_type(), + ) + ); + + // Enqueue script. + $min = defined( 'ACF_DEVELOPMENT_MODE' ) && ACF_DEVELOPMENT_MODE ? '' : '.min'; + + $blocks_js_path = acf_get_url( "assets/build/js/pro/acf-pro-blocks{$min}.js" ); + + wp_enqueue_script( 'acf-blocks', $blocks_js_path, array( 'acf-input', 'wp-blocks' ), ACF_VERSION, true ); + + // Enqueue block assets. + array_map( 'acf_enqueue_block_type_assets', $block_types ); + + // During the edit screen loading, WordPress renders all blocks in its own attempt to preload data. + // Retrieve any cached block HTML and include this in the localized data. + if ( acf_get_setting( 'preload_blocks' ) ) { + $preloaded_blocks = acf_get_store( 'block-cache' )->get_data(); + acf_localize_data( + array( + 'preloadedBlocks' => $preloaded_blocks, + ) + ); + } +} + +/** + * Enqueues scripts and styles for a specific block type. + * + * @since 5.7.13 + * + * @param array $block_type The block type settings. + * @return void + */ +function acf_enqueue_block_type_assets( $block_type ) { + + // Generate handle from name. + $handle = 'block-' . acf_slugify( $block_type['name'] ); + + // Enqueue style. + if ( $block_type['enqueue_style'] ) { + wp_enqueue_style( $handle, $block_type['enqueue_style'], array(), ACF_VERSION, 'all' ); + } + + // Enqueue script. + if ( $block_type['enqueue_script'] ) { + wp_enqueue_script( $handle, $block_type['enqueue_script'], array(), ACF_VERSION, true ); + } + + // Enqueue assets callback. + if ( $block_type['enqueue_assets'] && is_callable( $block_type['enqueue_assets'] ) ) { + call_user_func( $block_type['enqueue_assets'], $block_type ); + } +} + +/** + * Handles the ajax request for block data. + * + * @since 5.7.13 + * + * @return void + */ +function acf_ajax_fetch_block() { + // Validate ajax request. + if ( ! acf_verify_ajax() ) { + wp_send_json_error(); + } + + // Get request args. + $args = acf_request_args( + array( + 'post_id' => 0, + 'clientId' => null, + 'query' => array(), + ) + ); + + // Verify capability. + if ( ! empty( $args['post_id'] ) && is_numeric( $args['post_id'] ) ) { + // Editing a normal post - we can verify if the user has access to that post. + if ( ! acf_current_user_can_edit_post( (int) $args['post_id'] ) ) { + wp_send_json_error(); + } + } else { + // Could be editing a widget, using the site editor, etc. + $render_capability = apply_filters( 'acf/blocks/render_capability', 'edit_theme_options', $args['post_id'] ); + + if ( ! current_user_can( $render_capability ) ) { + wp_send_json_error(); + } + } + + $args['block'] = isset( $_REQUEST['block'] ) ? $_REQUEST['block'] : false; //phpcs:ignore -- requires auth; designed to contain unescaped html. + $args['context'] = isset( $_REQUEST['context'] ) ? $_REQUEST['context'] : array(); //phpcs:ignore -- requires auth; designed to contain unescaped html. + + $block = $args['block']; + $query = $args['query']; + $client_id = $args['clientId']; + $raw_context = $args['context']; + $post_id = $args['post_id']; + + // Bail early if no block. + if ( ! $block ) { + wp_send_json_error(); + } + + // Unslash and decode $_POST data for block and context. + $block = wp_unslash( $block ); + $block = json_decode( $block, true ); + + $context = false; + if ( ! empty( $raw_context ) ) { + $raw_context = wp_unslash( $raw_context ); + $raw_context = json_decode( $raw_context, true ); + if ( is_array( $raw_context ) ) { + $context = $raw_context; + // Check if a postId is set in the context, otherwise try and use it the default post_id. + $post_id = isset( $context['postId'] ) ? intval( $context['postId'] ) : intval( $args['post_id'] ); + } + } + + // Check if clientId should become $block['id']. + if ( empty( $block['id'] ) && ! empty( $client_id ) ) { + $block['id'] = $client_id; + } + + // Prepare block ensuring all settings and attributes exist. + $block = acf_prepare_block( $block ); + $block = acf_add_block_meta_values( $block, $post_id ); + + if ( ! $block ) { + wp_send_json_error(); + } + + // Load field defaults when first previewing a block. + $first_preview = false; + if ( ! empty( $query['preview'] ) && ! $block['data'] ) { + $fields = acf_get_block_fields( $block ); + foreach ( $fields as $field ) { + $block['data'][ "_{$field['name']}" ] = $field['key']; + } + $first_preview = true; + } + + // Setup postdata allowing form to load meta. + acf_setup_meta( $block['data'], $block['id'], true ); + + // Setup main postdata for post_id. + global $post; + //phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- required for block template rendering. + $post = get_post( $post_id ); + setup_postdata( $post ); + + // Vars. + $response = array( 'clientId' => $client_id ); + + // Check if we've recieved serialised form data + $use_post_data = false; + if ( ! empty( $block['data'] ) && is_array( $block['data'] ) ) { + // Ensure we've got field keys posted. + $valid_field_keys = array_filter( array_keys( $block['data'] ), 'acf_is_field_key' ); + if ( ! empty( $valid_field_keys ) ) { + $use_post_data = true; + } + } + + $query['validate'] = ( ! empty( $query['validate'] ) && ( $query['validate'] === 'true' || $query['validate'] === true ) ); + if ( ! empty( $query['validate'] ) || ! empty( $block['validate'] ) ) { + $response['validation'] = acf_get_block_validation_state( $block, $first_preview, $use_post_data ); + } + + // Query form. + if ( ! empty( $query['form'] ) ) { + + // Load fields for form. + $fields = acf_get_block_fields( $block ); + + // Prefix field inputs to avoid multiple blocks using the same name/id attributes. + acf_prefix_fields( $fields, "acf-{$block['id']}" ); + + if ( $fields ) { + // Start Capture. + ob_start(); + + // Render. + echo '
'; + acf_render_fields( $fields, $block['id'], 'div', 'field' ); + echo '
'; + + // Store Capture. + $response['form'] = ob_get_clean(); + } else { + // There are no fields on this block. + $response['form'] = acf_get_empty_block_form_html( $block['name'] ); //phpcs:ignore -- escaped in function. + } + } + + // Query preview. + if ( ! empty( $query['preview'] ) ) { + // Render_callback vars. + $content = ''; + $is_preview = true; + + // Render and store HTML. + $response['preview'] = acf_rendered_block( $block, $content, $is_preview, $post_id, null, $context, true ); + } + + // Send response. + wp_send_json_success( $response ); +} + +// Register ajax action. +acf_register_ajax( 'fetch-block', 'acf_ajax_fetch_block' ); + +/** + * Render the empty block form for when a block has no fields assigned. + * + * @since 6.0.0 + * + * @param string $block_name The block name current being rendered. + * @return string The html that makes up a block form with no fields. + */ +function acf_get_empty_block_form_html( $block_name ) { + + $message = __( 'This block contains no editable fields.', 'acf' ); + + if ( acf_current_user_can_admin() ) { + $message .= ' '; + $message .= sprintf( + /* translators: %s: an admin URL to the field group edit screen */ + __( 'Assign a field group to add fields to this block.', 'acf' ), + admin_url( 'edit.php?post_type=acf-field-group' ) + ); + } + + $message = apply_filters( 'acf/blocks/no_fields_assigned_message', $message, $block_name ); + + if ( ! is_string( $message ) ) { + $message = ''; + } + + if ( empty( $message ) ) { + return acf_esc_html( '
' ); + } else { + return acf_esc_html( '
' . $message . '
' ); + } +} + +/** + * Parse content that may contain HTML block comments and saves ACF block meta. + * + * @since 5.7.13 + * + * @param string $text Content that may contain HTML block comments. + * @return string + */ +function acf_parse_save_blocks( $text = '' ) { + + // Search text for dynamic blocks and modify attrs. + return addslashes( + preg_replace_callback( + '//', + 'acf_parse_save_blocks_callback', + stripslashes( $text ) + ) + ); +} + +// Hook into saving process. +add_filter( 'content_save_pre', 'acf_parse_save_blocks', 5, 1 ); + +/** + * Callback used in preg_replace to modify ACF Block comment. + * + * @since 5.7.13 + * + * @param array $matches The preg matches. + * @return string + */ +function acf_parse_save_blocks_callback( $matches ) { + // Defaults. + $name = isset( $matches['name'] ) ? $matches['name'] : ''; + $attrs = isset( $matches['attrs'] ) ? json_decode( $matches['attrs'], true ) : ''; + $void = isset( $matches['void'] ) ? $matches['void'] : ''; + + // Bail early if missing data or not an ACF Block. + if ( ! $name || ! $attrs || ! acf_has_block_type( $name ) ) { + return $matches[0]; + } + + // Check if we need to generate a block ID. + $block_id = acf_ensure_block_id_prefix( acf_get_block_id( $attrs ) ); + + if ( ! empty( $attrs['data'] ) ) { + if ( acf_block_uses_post_meta( $attrs ) ) { + // Block ID is used later to retrieve & save values. + $attrs['id'] = $block_id; + + // Cache the values until we have a post ID and can save. + $store = acf_get_store( 'block-meta-values' ); + $store->set( $block_id, $attrs['data'] ); + + // No need to store values in post content. + unset( $attrs['data'] ); + } else { + // Convert "data" to "meta". + // No need to check if already in meta format. Local Meta will do this for us. + $attrs['data'] = acf_setup_meta( $attrs['data'], $block_id ); + } + } + + /** + * Filters the block attributes before saving. + * + * @since 5.7.14 + * + * @param array $attrs The block attributes. + */ + $attrs = apply_filters( 'acf/pre_save_block', $attrs ); + + // Gutenberg expects a specific encoding format. + $attrs = acf_serialize_block_attributes( $attrs ); + + return ''; +} + +/** + * Return or generate a block ID. + * + * @since 6.0.0 + * + * @param array $attributes A block attributes array. + * @param array $context The block context array, defaults to an empty array. + * @param boolean $force If we should generate a new block ID even if one exists. + * @return string A block ID. + */ +function acf_get_block_id( $attributes, $context = array(), $force = false ) { + $context = is_array( $context ) ? $context : array(); + + ksort( $context ); + $attributes['_acf_context'] = $context; + if ( empty( $attributes['id'] ) || $force ) { + unset( $attributes['id'] ); + + // Remove all empty string values as they're not present in JS hash building. + foreach ( $attributes as $key => $value ) { + if ( '' === $value ) { + unset( $attributes[ $key ] ); + } + } + + // Check if data is empty and remove it if so to match JS hash building. + if ( isset( $attributes['data'] ) && empty( $attributes['data'] ) ) { + unset( $attributes['data'] ); + } + + ksort( $attributes ); + return md5( wp_json_encode( $attributes, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ) ); + } + return $attributes['id']; +} + +/** + * Ensure a block ID always has a block_ prefix for post meta internals. + * + * @since 6.0.0 + * + * @param string $block_id A possibly non-prefixed block ID. + * @return string A prefixed block ID. + */ +function acf_ensure_block_id_prefix( $block_id ) { + if ( substr( $block_id, 0, 6 ) === 'block_' ) { + return $block_id; + } + return 'block_' . $block_id; +} + +/** + * This directly copied from the WordPress core `serialize_block_attributes()` function. + * + * We need this in order to make sure that block attributes are stored in a way that is + * consistent with how Gutenberg sends them over from JS, and so that things like wp_kses() + * work as expected. Copied from core to get around a bug that was fixed in 5.8.1 or on the off chance + * that folks are still using WP 5.3 or below. + * + * TODO: Remove this when we refactor `acf_parse_save_blocks_callback()` to use `serialize_block()`, + * or when we're confident that folks aren't using WP versions prior to 5.8. + * + * @since 5.12 + * + * @param array $block_attributes Attributes object. + * @return string Serialized attributes. + */ +function acf_serialize_block_attributes( $block_attributes ) { + $encoded_attributes = wp_json_encode( $block_attributes, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ); + $encoded_attributes = preg_replace( '/--/', '\\u002d\\u002d', $encoded_attributes ); + $encoded_attributes = preg_replace( '//', '\\u003e', $encoded_attributes ); + $encoded_attributes = preg_replace( '/&/', '\\u0026', $encoded_attributes ); + // Regex: /\\"/. + $encoded_attributes = preg_replace( '/\\\\"/', '\\u0022', $encoded_attributes ); + + return $encoded_attributes; +} + +/** + * Handle validating a block's fields and return the validity, and any errors. + * + * This function can use values loaded into Local Meta, which means they have to be + * converted back to the data format before they can be validated. + * + * @since 6.3 + * + * @param array $block An array of the block's data attribute. + * @param boolean $using_defaults True if the block is currently being generated with default values. Default false. + * @param boolean $use_post_data True if we should validate the POSTed data rather than local meta values. Default false. + * @param boolean $on_load True if we're validating as part of a render. This is essentially the same as a first load. Default false. + * @return array An array containing a valid boolean, and an errors array. + */ +function acf_get_block_validation_state( $block, $using_defaults = false, $use_post_data = false, $on_load = false ) { + $block_id = $block['id']; + + if ( $on_load && empty( $block['validate_on_load'] ) ) { + // If we're in a page load render, and validate on load is false, skip validation. + $errors = false; + } elseif ( $use_post_data ) { + $errors = acf_validate_block_from_post_data( $block ); + } elseif ( $using_defaults || empty( $block['data'] ) ) { + // If data is empty or it's first preview, load the default fields for this block so we can get a required validation state from the current field set. + // Treat as "on load" if it's the first render of a block. + if ( empty( $block['validate_on_load'] ) ) { + $errors = false; + } else { + $errors = acf_validate_block_from_local_meta( $block_id, acf_get_block_fields( $block ), true ); + } + } else { + $errors = acf_validate_block_from_local_meta( $block_id, get_field_objects( $block_id, false ), false ); + } + + return array( + 'valid' => empty( $errors ), + 'errors' => $errors, + ); +} + +/** + * Handle the specific validation for a block from POSTed values. + * + * @since 6.3.1 + * + * @param array $block The block object containing the POSTed values and other block data + * @return array|boolean An array containing the validation errors, or false if there are no errors. + */ +function acf_validate_block_from_post_data( $block ) { + acf_reset_validation_errors(); + acf_validate_values( $block['data'], "acf-{$block['id']}" ); + $errors = acf_get_validation_errors(); + return $errors; +} + +/** + * Handle the specific validation for a block from local meta. + * + * This function uses the values loaded into Local Meta, which means they have to be + * converted back to the data format because they can be validated. + * + * @since 6.3.1 + * + * @param string $block_id The block ID. + * @param array $field_objects The field objects in local meta to be validated. + * @param boolean $using_defaults True if this is the first load of the block, when special validation may apply. + * @return array|boolean An array containing the validation errors, or false if there are no errors. + */ +function acf_validate_block_from_local_meta( $block_id, $field_objects, $using_defaults = false ) { + if ( empty( $field_objects ) ) { + return false; + } + + $using_loaded_meta = false; + if ( acf_get_data( $block_id . '_loaded_meta_values' ) ) { + $using_loaded_meta = true; + } + + acf_reset_validation_errors(); + foreach ( $field_objects as $field ) { + // Skip for nested fields - these don't work correctly on initial load of a saved block. + if ( ! empty( $field['sub_fields'] ) ) { + continue; + } + + // If we're using default values, or loaded meta we may have values which are about to be populated at field render, so shouldn't raise errors here. + if ( $using_defaults || $using_loaded_meta ) { + // Fields with conditional logic applied shouldn't be validated during first load as conditionals aren't respected. + if ( ! empty( $field['conditional_logic'] ) ) { + continue; + } + + // If we've got a empty value with a default value set and it's first load, don't produce a validation error as it will be substituted on render. + if ( $field['required'] && empty( $field['value'] ) && ! empty( $field['default_value'] ) ) { + continue; + } + + // If we're loading a few radio or select-like fields, without allow null, HTML will automatically select the first value on render, so skip here. + if ( $field['required'] && in_array( $field['type'], array( 'radio', 'button_group', 'select' ), true ) && ! $field['allow_null'] ) { + continue; + } + } + + $key = $field['key']; + $value = $field['value']; + acf_validate_value( $value, $field, "acf-{$block_id}[{$key}]" ); + } + + return acf_get_validation_errors(); +} + +/** + * Set ACF data before a rest call if media scripts have not been enqueued yet for after REST reset. + * + * @date 07/06/22 + * @since 6.0 + * + * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response The WordPress response object. + * @return mixed + */ +function acf_set_after_rest_media_enqueue_reset_flag( $response ) { + global $wp_actions; + + acf_set_data( 'acf_inside_rest_call', true ); + acf_set_data( 'acf_should_reset_media_enqueue', empty( $wp_actions['wp_enqueue_media'] ) ); + acf_set_data( 'acf_did_render_block_form', false ); + + return $response; +} +add_filter( 'rest_request_before_callbacks', 'acf_set_after_rest_media_enqueue_reset_flag' ); + +/** + * Reset wp_enqueue_media action count after REST call so it can happen inside the main execution if required. + * + * @date 07/06/22 + * @since 6.0 + * + * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response The WordPress response object. + * @return mixed + */ +function acf_reset_media_enqueue_after_rest( $response ) { + acf_set_data( 'acf_inside_rest_call', false ); + if ( acf_get_data( 'acf_should_reset_media_enqueue' ) && acf_get_data( 'acf_did_render_block_form' ) ) { + global $wp_actions; + //phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- no other option here as this works around a breaking WordPress change with REST preload scopes. + $wp_actions['wp_enqueue_media'] = 0; + } + + return $response; +} +add_filter( 'rest_request_after_callbacks', 'acf_reset_media_enqueue_after_rest' ); + +/** + * Checks if the provided block is configured to save/load post meta. + * + * @since 6.3 + * + * @param array $block The block to check. + * @return boolean + */ +function acf_block_uses_post_meta( $block ): bool { + if ( ! empty( $block['name'] ) && ! isset( $block['use_post_meta'] ) ) { + $block = acf_get_block_type( $block['name'] ); + } + + return ! empty( $block['use_post_meta'] ); +} + +/** + * Loads ACF field values from the post meta if the block is configured to do so. + * + * @since 6.3 + * + * @param array $block The block to get values for. + * @param integer $post_id The ID of the post to retrieve meta from. + * @return array + */ +function acf_add_block_meta_values( $block, $post_id ) { + // Bail if the block already has data (i.e. previewing an update). + if ( ! is_array( $block ) || ! empty( $block['data'] ) ) { + return $block; + } + + // Bail if block doesn't load from meta. + if ( ! acf_block_uses_post_meta( $block ) ) { + return $block; + } + + // Bail if we don't have a post ID or block ID. + if ( empty( $post_id ) || empty( $block['id'] ) ) { + return $block; + } + + $fields = acf_get_block_fields( $block ); + + if ( empty( $fields ) ) { + return $block; + } + + $values = array(); + $store = acf_get_store( 'values' ); + $block_id = acf_ensure_block_id_prefix( $block['id'] ); + + foreach ( $fields as $field ) { + $value = acf_get_value( $post_id, $field ); + + // Make sure we got a value (i.e. $allow_load = true). + if ( ! $store->has( "{$post_id}:{$field['name']}" ) ) { + continue; + } + + $store->set( "{$block_id}:{$field['name']}", $value ); + + $values[ $field['name'] ] = $value; + $values[ '_' . $field['name'] ] = $field['key']; // TODO: Is there a better way to generate this? + } + + $block['data'] = $values; + + acf_set_data( $block_id . '_loaded_meta_values', true ); + + return $block; +} + +/** + * Stores ACF field values in post meta for any blocks configured to do so. + * + * @since 6.3 + * + * @param integer $post_id The ID of the post being saved. + * @param WP_Post $post The post object. + * @return void + */ +function acf_save_block_meta_values( $post_id, $post ) { + $meta_values = acf_get_block_meta_values_to_save( $post->post_content ); + + if ( empty( $meta_values ) ) { + return; + } + + // Save values for any post meta blocks. + acf_save_post( $post_id, $meta_values ); +} +add_action( 'save_post', 'acf_save_block_meta_values', 10, 2 ); + +/** + * Iterates over blocks in post content and retrieves values + * that need to be saved to post meta. + * + * @since 6.3 + * + * @param string $content The content saved for the post. + * @return array An array containing the field values that need to be saved. + */ +function acf_get_block_meta_values_to_save( $content = '' ) { + $meta_values = array(); + + // Bail early if not in a format we expect or if it has no blocks. + if ( ! is_string( $content ) || empty( $content ) || ! has_blocks( $content ) ) { + return $meta_values; + } + + $blocks = parse_blocks( $content ); + + // Bail if no blocks to save. + if ( ! is_array( $blocks ) || empty( $blocks ) ) { + return $meta_values; + } + + foreach ( $blocks as $block ) { + // Verify this is an ACF block that should save to meta. + if ( ! acf_block_uses_post_meta( $block['attrs'] ) ) { + continue; + } + + // We need a block ID to retrieve the values from cache. + $block_id = ! empty( $block['attrs']['id'] ) ? $block['attrs']['id'] : false; + if ( ! $block_id ) { + continue; + } + + // Verify that we have values for this block. + $store = acf_get_store( 'block-meta-values' ); + if ( ! $store->has( $block_id ) ) { + continue; + } + + // Get the values and remove from cache. + $block_values = $store->get( $block_id ); + $store->remove( $block_id ); + + $meta_values = array_merge( $meta_values, $block_values ); + } + + return $meta_values; +} diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-clone.php b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-clone.php new file mode 100644 index 00000000..db9b2f32 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-clone.php @@ -0,0 +1,1252 @@ +name = 'clone'; + $this->label = _x( 'Clone', 'noun', 'acf' ); + $this->category = 'layout'; + $this->description = __( 'Allows you to select and display existing fields. It does not duplicate any fields in the database, but loads and displays the selected fields at run-time. The Clone field can either replace itself with the selected fields or display the selected fields as a group of subfields.', 'acf' ); + $this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-clone.png'; + $this->doc_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/clone/', 'docs', 'field-type-selection' ); + $this->tutorial_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/how-to-use-the-clone-field/', 'docs', 'field-type-selection' ); + $this->pro = true; + $this->supports = array( 'bindings' => false ); + $this->defaults = array( + 'clone' => '', + 'prefix_label' => 0, + 'prefix_name' => 0, + 'display' => 'seamless', + 'layout' => 'block', + ); + $this->have_rows = 'single'; + + // register filter + acf_enable_filter( 'clone' ); + + // ajax + add_action( 'wp_ajax_acf/fields/clone/query', array( $this, 'ajax_query' ) ); + + // filters + add_filter( 'acf/get_fields', array( $this, 'acf_get_fields' ), 5, 2 ); + add_filter( 'acf/prepare_field', array( $this, 'acf_prepare_field' ), 10, 1 ); + add_filter( 'acf/clone_field', array( $this, 'acf_clone_field' ), 10, 2 ); + } + + + /** + * This function will return true if acf_local functionality is enabled + * + * @type function + * @date 14/07/2016 + * @since 5.4.0 + * + * @param n/a + * @return n/a + */ + function is_enabled() { + + return acf_is_filter_enabled( 'clone' ); + } + + + /** + * This filter is appied to the $field after it is loaded from the database + * + * @type filter + * @since 3.6 + * @date 23/01/13 + * + * @param $field - the field array holding all the field options + * + * @return $field - the field array holding all the field options + */ + function load_field( $field ) { + + // bail early if not enabled + if ( ! $this->is_enabled() ) { + return $field; + } + + // load sub fields + // - sub field name's will be modified to include prefix_name settings + $field['sub_fields'] = $this->get_cloned_fields( $field ); + + // return + return $field; + } + + + /** + * This function will hook into the 'acf/get_fields' filter and inject/replace seamless clones fields + * + * @type function + * @date 17/06/2016 + * @since 5.3.8 + * + * @param $fields (array) + * @param $parent (array) + * @return $fields + */ + function acf_get_fields( $fields, $parent ) { + + // bail early if empty + if ( empty( $fields ) ) { + return $fields; + } + + // bail early if not enabled + if ( ! $this->is_enabled() ) { + return $fields; + } + + // vars + $i = 0; + + // loop + while ( $i < count( $fields ) ) { + + // vars + $field = $fields[ $i ]; + + // $i + ++$i; + + // bail early if not a clone field + if ( $field['type'] != 'clone' ) { + continue; + } + + // bail early if not seamless + if ( $field['display'] != 'seamless' ) { + continue; + } + + // bail early if sub_fields isn't set or not an array + if ( ! isset( $field['sub_fields'] ) || ! is_array( $field['sub_fields'] ) ) { + continue; + } + + // replace this clone field with sub fields + --$i; + array_splice( $fields, $i, 1, $field['sub_fields'] ); + } + + // return + return $fields; + } + + + /** + * This function will return an array of fields for a given clone field + * + * @type function + * @date 28/06/2016 + * @since 5.3.8 + * + * @param $field (array) + * @param $parent (array) + * @return (array) + */ + function get_cloned_fields( $field ) { + + // vars + $fields = array(); + + // bail early if no clone setting + if ( empty( $field['clone'] ) ) { + return $fields; + } + + // bail early if already cloning this field (avoid infinite looping) + if ( isset( $this->cloning[ $field['key'] ] ) ) { + return $fields; + } + + // update local ref + $this->cloning[ $field['key'] ] = 1; + + // Loop over selectors and load fields. + foreach ( $field['clone'] as $selector ) { + + // Field Group selector. + if ( acf_is_field_group_key( $selector ) ) { + $field_group = acf_get_field_group( $selector ); + if ( ! $field_group ) { + continue; + } + + $field_group_fields = acf_get_fields( $field_group ); + if ( ! $field_group_fields ) { + continue; + } + + $fields = array_merge( $fields, $field_group_fields ); + + // Field selector. + } elseif ( acf_is_field_key( $selector ) ) { + $fields[] = acf_get_field( $selector ); + } + } + + // field has ve been loaded for this $parent, time to remove cloning ref + unset( $this->cloning[ $field['key'] ] ); + + // clear false values (fields that don't exist) + $fields = array_filter( $fields ); + + // bail early if no sub fields + if ( empty( $fields ) ) { + return array(); + } + + // loop + // run acf_clone_field() on each cloned field to modify name, key, etc + foreach ( array_keys( $fields ) as $i ) { + $fields[ $i ] = acf_clone_field( $fields[ $i ], $field ); + } + + // return + return $fields; + } + + + /** + * This function is run when cloning a clone field + * Important to run the acf_clone_field function on sub fields to pass on settings such as 'parent_layout' + * + * @type function + * @date 28/06/2016 + * @since 5.3.8 + * + * @param $field (array) + * @param $clone_field (array) + * @return $field + */ + function acf_clone_field( $field, $clone_field ) { + + // bail early if this field is being cloned by some other kind of field (future proof) + if ( $clone_field['type'] != 'clone' ) { + return $field; + } + + // backup (used later) + // - backup only once (cloned clone fields can cause issues) + if ( ! isset( $field['__key'] ) ) { + $field['__key'] = $field['key']; + $field['__name'] = $field['_name']; + $field['__label'] = $field['label']; + } + + // seamless + if ( $clone_field['display'] == 'seamless' ) { + + // modify key + // - this will allow sub clone fields to correctly load values for the same cloned field + // - the original key will later be restored by acf/prepare_field allowing conditional logic JS to work + $field['key'] = $clone_field['key'] . '_' . $field['key']; + + // modify prefix allowing clone field to save sub fields + // - only used for parent seamless fields. Block or sub field's prefix will be overriden which also works + $field['prefix'] = $clone_field['prefix'] . '[' . $clone_field['key'] . ']'; + + // modify parent + $field['parent'] = $clone_field['parent']; + + // label_format + if ( $clone_field['prefix_label'] ) { + $field['label'] = $clone_field['label'] . ' ' . $field['label']; + } + } + + // prefix_name + if ( $clone_field['prefix_name'] ) { + + // modify the field name + // - this will allow field to load / save correctly + $field['name'] = $clone_field['name'] . '_' . $field['_name']; + + // modify the field _name (orig name) + // - this will allow fields to correctly understand the modified field + if ( $clone_field['display'] == 'seamless' ) { + $field['_name'] = $clone_field['_name'] . '_' . $field['_name']; + } + } + + // required + if ( $clone_field['required'] ) { + $field['required'] = 1; + } + + // type specific + // note: seamless clone fields will not be triggered + if ( $field['type'] == 'clone' ) { + $field = $this->acf_clone_clone_field( $field, $clone_field ); + } + + // return + return $field; + } + + + /** + * This function is run when cloning a clone field + * Important to run the acf_clone_field function on sub fields to pass on settings such as 'parent_layout' + * Do not delete! Removing this logic causes major issues with cloned clone fields within a flexible content layout. + * + * @type function + * @date 28/06/2016 + * @since 5.3.8 + * + * @param $field (array) + * @param $clone_field (array) + * @return $field + */ + function acf_clone_clone_field( $field, $clone_field ) { + + // modify the $clone_field name + // This seems odd, however, the $clone_field is later passed into the acf_clone_field() function + // Do not delete! + // when cloning a clone field, it is important to also change the _name too + // this allows sub clone fields to appear correctly in get_row() row array + if ( $field['prefix_name'] ) { + $clone_field['name'] = $field['_name']; + $clone_field['_name'] = $field['_name']; + } + + // bail early if no sub fields + if ( empty( $field['sub_fields'] ) ) { + return $field; + } + + // loop + foreach ( $field['sub_fields'] as &$sub_field ) { + + // clone + $sub_field = acf_clone_field( $sub_field, $clone_field ); + } + + // return + return $field; + } + + + /** + * description + * + * @type function + * @date 4/11/16 + * @since 5.5.0 + * + * @param $post_id (int) + * @return $post_id (int) + */ + function prepare_field_for_db( $field ) { + + // bail early if no sub fields + if ( empty( $field['sub_fields'] ) ) { + return $field; + } + + // bail early if name == _name + // this is a parent clone field and does not require any modification to sub field names + if ( $field['name'] == $field['_name'] ) { + return $field; + } + + // this is a sub field + // _name = 'my_field' + // name = 'rep_0_my_field' + // modify all sub fields to add 'rep_0_' name prefix (prefix_name setting has already been applied) + $length = strlen( $field['_name'] ); + $prefix = substr( $field['name'], 0, -$length ); + + // bail early if _name is not found at the end of name (unknown potential error) + if ( $prefix . $field['_name'] !== $field['name'] ) { + return $field; + } + + // acf_log('== prepare_field_for_db =='); + // acf_log('- clone name:', $field['name']); + // acf_log('- clone _name:', $field['_name']); + // loop + foreach ( $field['sub_fields'] as &$sub_field ) { + $sub_field['name'] = $prefix . $sub_field['name']; + } + + // return + return $field; + } + + + /** + * This filter is applied to the $value after it is loaded from the db + * + * @type filter + * @since 3.6 + * @date 23/01/13 + * + * @param $value (mixed) the value found in the database + * @param $post_id (mixed) the post_id from which the value was loaded + * @param $field (array) the field array holding all the field options + * @return $value + */ + function load_value( $value, $post_id, $field ) { + + // bail early if no sub fields + if ( empty( $field['sub_fields'] ) ) { + return $value; + } + + // modify names + $field = $this->prepare_field_for_db( $field ); + + // load sub fields + $value = array(); + + // loop + foreach ( $field['sub_fields'] as $sub_field ) { + + // add value + $value[ $sub_field['key'] ] = acf_get_value( $post_id, $sub_field ); + } + + // return + return $value; + } + + + /** + * This filter is appied to the $value after it is loaded from the db and before it is returned to the template + * + * @type filter + * @since 3.6 + * + * @param mixed $value The value which was loaded from the database. + * @param mixed $post_id The $post_id from which the value was loaded. + * @param array $field The field array holding all the field options. + * @param boolean $escape_html Should the field return a HTML safe formatted value. + * @return mixed $value The modified value. + */ + public function format_value( $value, $post_id, $field, $escape_html = false ) { + + // bail early if no value + if ( empty( $value ) ) { + return false; + } + + // modify names + $field = $this->prepare_field_for_db( $field ); + + // loop + foreach ( $field['sub_fields'] as $sub_field ) { + + // extract value + $sub_value = acf_extract_var( $value, $sub_field['key'] ); + + // format value + $sub_value = acf_format_value( $sub_value, $post_id, $sub_field, $escape_html ); + + // append to $row + $value[ $sub_field['__name'] ] = $sub_value; + } + + // return + return $value; + } + + /** + * Apply basic formatting to prepare the value for default REST output. + * + * @param mixed $value + * @param string|integer $post_id + * @param array $field + * @return mixed + */ + public function format_value_for_rest( $value, $post_id, array $field ) { + if ( empty( $value ) || ! is_array( $value ) ) { + return $value; + } + + if ( ! is_array( $field ) || ! isset( $field['sub_fields'] ) || ! is_array( $field['sub_fields'] ) ) { + return $value; + } + + // Loop through each row and within that, each sub field to process sub fields individually. + foreach ( $field['sub_fields'] as $sub_field ) { + + // Extract the sub field 'field_key'=>'value' pair from the $value and format it. + $sub_value = acf_extract_var( $value, $sub_field['key'] ); + $sub_value = acf_format_value_for_rest( $sub_value, $post_id, $sub_field ); + + // Add the sub field value back to the $value but mapped to the field name instead + // of the key reference. + $value[ $sub_field['name'] ] = $sub_value; + } + + return $value; + } + + /** + * This filter is appied to the $value before it is updated in the db + * + * @type filter + * @since 3.6 + * @date 23/01/13 + * + * @param $value - the value which will be saved in the database + * @param $field - the field array holding all the field options + * @param $post_id - the post_id of which the value will be saved + * + * @return $value - the modified value + */ + function update_value( $value, $post_id, $field ) { + + // bail early if no value + if ( ! acf_is_array( $value ) ) { + return null; + } + + // bail early if no sub fields + if ( empty( $field['sub_fields'] ) ) { + return null; + } + + // modify names + $field = $this->prepare_field_for_db( $field ); + + // loop + foreach ( $field['sub_fields'] as $sub_field ) { + + // vars + $v = false; + + // key (backend) + if ( isset( $value[ $sub_field['key'] ] ) ) { + $v = $value[ $sub_field['key'] ]; + + // name (frontend) + } elseif ( isset( $value[ $sub_field['_name'] ] ) ) { + $v = $value[ $sub_field['_name'] ]; + + // empty + } else { + + // input is not set (hidden by conditioanl logic) + continue; + } + + // restore original field key + $sub_field = $this->acf_prepare_field( $sub_field ); + + // update value + acf_update_value( $v, $post_id, $sub_field ); + } + + // return + return ''; + } + + + /** + * Create the HTML interface for your field + * + * @param $field - an array holding all the field's data + * + * @type action + * @since 3.6 + * @date 23/01/13 + */ + function render_field( $field ) { + + // bail early if no sub fields + if ( empty( $field['sub_fields'] ) ) { + return; + } + + // load values + foreach ( $field['sub_fields'] as &$sub_field ) { + + // add value + if ( isset( $field['value'][ $sub_field['key'] ] ) ) { + + // this is a normal value + $sub_field['value'] = $field['value'][ $sub_field['key'] ]; + } elseif ( isset( $sub_field['default_value'] ) ) { + + // no value, but this sub field has a default value + $sub_field['value'] = $sub_field['default_value']; + } + + // update prefix to allow for nested values + $sub_field['prefix'] = $field['name']; + + // restore label + $sub_field['label'] = $sub_field['__label']; + + // restore required + if ( $field['required'] ) { + $sub_field['required'] = 0; + } + } + + // render + if ( $field['layout'] == 'table' ) { + $this->render_field_table( $field ); + } else { + $this->render_field_block( $field ); + } + } + + + /** + * description + * + * @type function + * @date 12/07/2016 + * @since 5.4.0 + * + * @param $post_id (int) + * @return $post_id (int) + */ + function render_field_block( $field ) { + + // vars + $label_placement = $field['layout'] == 'block' ? 'top' : 'left'; + + // html + echo '
'; + + foreach ( $field['sub_fields'] as $sub_field ) { + acf_render_field_wrap( $sub_field ); + } + + echo '
'; + } + + + /** + * description + * + * @type function + * @date 12/07/2016 + * @since 5.4.0 + * + * @param $post_id (int) + * @return $post_id (int) + */ + function render_field_table( $field ) { + + ?> + + + + + + + + + + + + + +
> + + +
+ __( 'Fields', 'acf' ), + 'instructions' => __( 'Select one or more fields you wish to clone', 'acf' ), + 'type' => 'select', + 'name' => 'clone', + 'multiple' => 1, + 'allow_null' => 1, + 'choices' => $this->get_clone_setting_choices( $field['clone'] ), + 'ui' => 1, + 'ajax' => 1, + 'ajax_action' => 'acf/fields/clone/query', + 'placeholder' => '', + 'nonce' => wp_create_nonce( 'acf/fields/clone/query' ), + ) + ); + + acf_disable_filter( 'local' ); + + // display + acf_render_field_setting( + $field, + array( + 'label' => __( 'Display', 'acf' ), + 'instructions' => __( 'Specify the style used to render the clone field', 'acf' ), + 'type' => 'select', + 'name' => 'display', + 'class' => 'setting-display', + 'choices' => array( + 'group' => __( 'Group (displays selected fields in a group within this field)', 'acf' ), + 'seamless' => __( 'Seamless (replaces this field with selected fields)', 'acf' ), + ), + ) + ); + + // layout + acf_render_field_setting( + $field, + array( + 'label' => __( 'Layout', 'acf' ), + 'instructions' => __( 'Specify the style used to render the selected fields', 'acf' ), + 'type' => 'radio', + 'name' => 'layout', + 'layout' => 'horizontal', + 'choices' => array( + 'block' => __( 'Block', 'acf' ), + 'table' => __( 'Table', 'acf' ), + 'row' => __( 'Row', 'acf' ), + ), + ) + ); + + // prefix_label + $instructions = __( 'Labels will be displayed as %s', 'acf' ); + $instructions = sprintf( $instructions, '' ); + acf_render_field_setting( + $field, + array( + 'label' => __( 'Prefix Field Labels', 'acf' ), + 'instructions' => $instructions, + 'name' => 'prefix_label', + 'class' => 'setting-prefix-label', + 'type' => 'true_false', + 'ui' => 1, + ) + ); + + // prefix_name + $instructions = __( 'Values will be saved as %s', 'acf' ); + $instructions = sprintf( $instructions, '' ); + acf_render_field_setting( + $field, + array( + 'label' => __( 'Prefix Field Names', 'acf' ), + 'instructions' => $instructions, + 'name' => 'prefix_name', + 'class' => 'setting-prefix-name', + 'type' => 'true_false', + 'ui' => 1, + ) + ); + } + + + /** + * This function will return an array of choices data for Select2 + * + * @type function + * @date 17/06/2016 + * @since 5.3.8 + * + * @param $value (mixed) + * @return (array) + */ + function get_clone_setting_choices( $value ) { + + // vars + $choices = array(); + + // bail early if no $value + if ( empty( $value ) ) { + return $choices; + } + + // force value to array + $value = acf_get_array( $value ); + + // loop + foreach ( $value as $v ) { + $choices[ $v ] = $this->get_clone_setting_choice( $v ); + } + + // return + return $choices; + } + + + /** + * This function will return the label for a given clone choice + * + * @type function + * @date 17/06/2016 + * @since 5.3.8 + * + * @param $selector (mixed) + * @return (string) + */ + function get_clone_setting_choice( $selector = '' ) { + + // bail early no selector + if ( ! $selector ) { + return ''; + } + + // phpcs:disable WordPress.Security.NonceVerification.Missing -- Verified elsewhere. + // ajax_fields + if ( isset( $_POST['fields'][ $selector ] ) ) { + return $this->get_clone_setting_field_choice( acf_sanitize_request_args( $_POST['fields'][ $selector ] ) ); + } + // phpcs:enable WordPress.Security.NonceVerification.Missing + + // field + if ( acf_is_field_key( $selector ) ) { + return $this->get_clone_setting_field_choice( acf_get_field( $selector ) ); + } + + // group + if ( acf_is_field_group_key( $selector ) ) { + return $this->get_clone_setting_group_choice( acf_get_field_group( $selector ) ); + } + + // return + return $selector; + } + + + /** + * This function will return the text for a field choice + * + * @type function + * @date 20/07/2016 + * @since 5.4.0 + * + * @param $field (array) + * @return (string) + */ + function get_clone_setting_field_choice( $field ) { + + // bail early if no field + if ( ! $field ) { + return __( 'Unknown field', 'acf' ); + } + + // title + $title = $field['label'] ? $field['label'] : __( '(no title)', 'acf' ); + + // append type + $title .= ' (' . $field['type'] . ')'; + + // ancestors + // - allow for AJAX to send through ancestors count + $ancestors = isset( $field['ancestors'] ) ? $field['ancestors'] : count( acf_get_field_ancestors( $field ) ); + $title = str_repeat( '- ', $ancestors ) . $title; + + // return + return $title; + } + + + /** + * This function will return the text for a group choice + * + * @type function + * @date 20/07/2016 + * @since 5.4.0 + * + * @param $field_group (array) + * @return (string) + */ + function get_clone_setting_group_choice( $field_group ) { + + // bail early if no field group + if ( ! $field_group ) { + return __( 'Unknown field group', 'acf' ); + } + + // return + return sprintf( __( 'All fields from %s field group', 'acf' ), $field_group['title'] ); + } + + + /** + * AJAX handler for getting potential fields to clone. + * + * @since 5.3.8 + * + * @return void + */ + public function ajax_query() { + $nonce = acf_request_arg( 'nonce', '' ); + + if ( ! acf_verify_ajax( $nonce, 'acf/fields/clone/query' ) ) { + die(); + } + + // disable field to allow clone fields to appear selectable + acf_disable_filter( 'clone' ); + + // options + $options = acf_parse_args( + $_POST, + array( + 'post_id' => 0, + 'paged' => 0, + 's' => '', + 'title' => '', + 'fields' => array(), + ) + ); + + // vars + $results = array(); + $s = false; + $i = -1; + $limit = 20; + $range_start = $limit * ( $options['paged'] - 1 ); // 0, 20, 40 + $range_end = $range_start + ( $limit - 1 ); // 19, 39, 59 + + // search + if ( $options['s'] !== '' ) { + + // strip slashes (search may be integer) + $s = wp_unslash( strval( $options['s'] ) ); + } + + // load groups + $field_groups = acf_get_field_groups(); + $field_group = false; + + // bail early if no field groups + if ( empty( $field_groups ) ) { + die(); + } + + // move current field group to start + foreach ( array_keys( $field_groups ) as $j ) { + + // check ID + if ( $field_groups[ $j ]['ID'] !== $options['post_id'] ) { + continue; + } + + // extract field group and move to start + $field_group = acf_extract_var( $field_groups, $j ); + + // field group found, stop looking + break; + } + + // if field group was not found, this is a new field group (not yet saved) + if ( ! $field_group ) { + $field_group = array( + 'ID' => $options['post_id'], + 'title' => $options['title'], + 'key' => '', + ); + } + + // move current field group to start of list + array_unshift( $field_groups, $field_group ); + + // loop + foreach ( $field_groups as $field_group ) { + + // vars + $fields = false; + $ignore_s = false; + $data = array( + 'text' => $field_group['title'], + 'children' => array(), + ); + + // get fields + if ( $field_group['ID'] == $options['post_id'] ) { + $fields = $options['fields']; + } else { + $fields = acf_get_fields( $field_group ); + $fields = acf_prepare_fields_for_import( $fields ); + } + + // bail early if no fields + if ( ! $fields ) { + continue; + } + + // show all children for field group search match + if ( $s !== false && stripos( $data['text'], $s ) !== false ) { + $ignore_s = true; + } + + // populate children + $children = array(); + $children[] = $field_group['key']; + foreach ( $fields as $field ) { + $children[] = $field['key']; } + + // loop + foreach ( $children as $child ) { + + // bail early if no key (fake field group or corrupt field) + if ( ! $child ) { + continue; + } + + // vars + $text = false; + + // bail early if is search, and $text does not contain $s + if ( $s !== false && ! $ignore_s ) { + + // get early + $text = $this->get_clone_setting_choice( $child ); + + // search + if ( stripos( $text, $s ) === false ) { + continue; + } + } + + // $i + ++$i; + + // bail early if $i is out of bounds + if ( $i < $range_start || $i > $range_end ) { + continue; + } + + // load text + if ( $text === false ) { + $text = $this->get_clone_setting_choice( $child ); + } + + // append + $data['children'][] = array( + 'id' => $child, + 'text' => $text, + ); + } + + // bail early if no children + // - this group contained fields, but none shown on this page + if ( empty( $data['children'] ) ) { + continue; + } + + // append + $results[] = $data; + + // end loop if $i is out of bounds + // - no need to look further + if ( $i > $range_end ) { + break; + } + } + + // return + acf_send_ajax_results( + array( + 'results' => $results, + 'limit' => $limit, + ) + ); + } + + + /** + * This function will restore a field's key ready for input + * + * @type function + * @date 6/09/2016 + * @since 5.4.0 + * + * @param $field (array) + * @return $field + */ + function acf_prepare_field( $field ) { + + // bail early if not cloned + if ( empty( $field['_clone'] ) ) { + return $field; + } + + // restore key + if ( isset( $field['__key'] ) ) { + $field['key'] = $field['__key']; + } + + // return + return $field; + } + + + /** + * description + * + * @type function + * @date 11/02/2014 + * @since 5.0.0 + * + * @param $post_id (int) + * @return $post_id (int) + */ + function validate_value( $valid, $value, $field, $input ) { + + // bail early if no $value + if ( empty( $value ) ) { + return $valid; + } + + // bail early if no sub fields + if ( empty( $field['sub_fields'] ) ) { + return $valid; + } + + // loop + foreach ( array_keys( $field['sub_fields'] ) as $i ) { + + // get sub field + $sub_field = $field['sub_fields'][ $i ]; + $k = $sub_field['key']; + + // bail early if valu enot set (conditional logic?) + if ( ! isset( $value[ $k ] ) ) { + continue; + } + + // validate + acf_validate_value( $value[ $k ], $sub_field, "{$input}[{$k}]" ); + } + + // return + return $valid; + } + + /** + * Return the schema array for the REST API. + * + * @param array $field + * @return array + */ + public function get_rest_schema( array $field ) { + $schema = array( + 'type' => array( 'object', 'null' ), + 'required' => ! empty( $field['required'] ) ? array() : false, + 'items' => array( + 'type' => 'object', + 'properties' => array(), + ), + ); + + foreach ( $field['sub_fields'] as $sub_field ) { + /** @var acf_field $type */ + $type = acf_get_field_type( $sub_field['type'] ); + + if ( ! $type ) { + continue; + } + + $sub_field_schema = $type->get_rest_schema( $sub_field ); + + // Passing null to nested fields has no effect. Remove this as a possible type to prevent + // confusion in the schema. + $null_type_index = array_search( 'null', $sub_field_schema['type'] ); + if ( $null_type_index !== false ) { + unset( $sub_field_schema['type'][ $null_type_index ] ); + } + + $schema['items']['properties'][ $sub_field['name'] ] = $sub_field_schema; + + /** + * If the clone field itself is marked as required, all subfields are required, + * regardless of the status of the original fields. + */ + if ( is_array( $schema['required'] ) ) { + $schema['required'][] = $sub_field['name']; + } + } + + return $schema; + } + } + + + // initialize + acf_register_field_type( 'acf_field_clone' ); +endif; // class_exists check + +?> diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-flexible-content.php b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-flexible-content.php new file mode 100644 index 00000000..84f7ccd2 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-flexible-content.php @@ -0,0 +1,1663 @@ +name = 'flexible_content'; + $this->label = __( 'Flexible Content', 'acf' ); + $this->category = 'layout'; + $this->description = __( 'Allows you to define, create and manage content with total control by creating layouts that contain subfields that content editors can choose from.', 'acf' ) . ' ' . __( 'We do not recommend using this field in ACF Blocks.', 'acf' ); + $this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-flexible-content.png'; + $this->doc_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/flexible-content/', 'docs', 'field-type-selection' ); + $this->tutorial_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/building-layouts-with-the-flexible-content-field-in-a-theme/', 'docs', 'field-type-selection' ); + $this->pro = true; + $this->supports = array( 'bindings' => false ); + $this->defaults = array( + 'layouts' => array(), + 'min' => '', + 'max' => '', + 'button_label' => __( 'Add Row', 'acf' ), + ); + + // ajax + $this->add_action( 'wp_ajax_acf/fields/flexible_content/layout_title', array( $this, 'ajax_layout_title' ) ); + $this->add_action( 'wp_ajax_nopriv_acf/fields/flexible_content/layout_title', array( $this, 'ajax_layout_title' ) ); + + // filters + $this->add_filter( 'acf/prepare_field_for_export', array( $this, 'prepare_any_field_for_export' ) ); + $this->add_filter( 'acf/clone_field', array( $this, 'clone_any_field' ), 10, 2 ); + $this->add_filter( 'acf/validate_field', array( $this, 'validate_any_field' ) ); + $this->add_filter( 'acf/pre_render_fields', array( $this, 'pre_render_fields' ), 10, 2 ); + + // field filters + $this->add_field_filter( 'acf/get_sub_field', array( $this, 'get_sub_field' ), 10, 3 ); + $this->add_field_filter( 'acf/prepare_field_for_export', array( $this, 'prepare_field_for_export' ) ); + $this->add_field_filter( 'acf/prepare_field_for_import', array( $this, 'prepare_field_for_import' ) ); + } + + + /** + * Admin scripts enqueue for field. + * + * @since 5.3.2 + * + * @return void + */ + public function input_admin_enqueue_scripts() { + acf_localize_text( + array( + + // identifiers + 'layout' => esc_html__( 'layout', 'acf' ), + 'layouts' => esc_html__( 'layouts', 'acf' ), + 'Fields' => esc_html__( 'Fields', 'acf' ), + + // Adding/deleting a layout. + 'Duplicate' => esc_html__( 'Duplicate', 'acf' ), + 'Delete' => esc_html__( 'Delete', 'acf' ), + 'Delete Layout' => esc_html__( 'Delete Layout', 'acf' ), + /* translators: %s - Name of the Flexible content layout */ + 'Delete %s' => esc_html__( 'Delete %s', 'acf' ), + 'Are you sure you want to delete the layout?' => esc_html__( 'Are you sure you want to delete the layout?', 'acf' ), + /* translators: %s - Name of the Flexible content layout */ + 'Are you sure you want to delete %s?' => esc_html__( 'Are you sure you want to delete %s?', 'acf' ), + + // Renaming a layout. + 'Rename Layout' => esc_html__( 'Rename Layout', 'acf' ), + 'Rename' => esc_html__( 'Rename', 'acf' ), + 'New Label' => esc_html__( 'New Label', 'acf' ), + 'Remove Custom Label' => esc_html__( 'Remove Custom Label', 'acf' ), + + // min / max + 'This field requires at least {min} {label} {identifier}' => esc_html__( 'This field requires at least {min} {label} {identifier}', 'acf' ), + 'This field has a limit of {max} {label} {identifier}' => esc_html__( 'This field has a limit of {max} {label} {identifier}', 'acf' ), + 'Maximum rows reached ({max})' => esc_html__( 'Maximum rows reached ({max})', 'acf' ), + 'Maximum {label} {identifier} reached ({max})' => esc_html__( 'Maximum {label} {identifier} reached ({max})', 'acf' ), + + // popup badge + '{available} {label} {identifier} available (max {max})' => esc_html__( '{available} {label} {identifier} available (max {max})', 'acf' ), + '{required} {label} {identifier} required (min {min})' => esc_html__( '{required} {label} {identifier} required (min {min})', 'acf' ), + + // field settings + 'Flexible Content requires at least 1 layout' => esc_html__( 'Flexible Content requires at least 1 layout', 'acf' ), + ) + ); + } + + + /** + * This function will fill in the missing keys to create a valid layout + * + * @type function + * @date 3/10/13 + * @since 1.1.0 + * + * @param $layout (array) + * @return $layout (array) + */ + function get_valid_layout( $layout = array() ) { + + // parse + $layout = wp_parse_args( + $layout, + array( + 'key' => uniqid( 'layout_' ), + 'name' => '', + 'label' => '', + 'display' => 'block', + 'sub_fields' => array(), + 'min' => '', + 'max' => '', + ) + ); + + // return + return $layout; + } + + + /** + * This filter is appied to the $field after it is loaded from the database + * + * @type filter + * @since 3.6 + * @date 23/01/13 + * + * @param $field - the field array holding all the field options + * + * @return $field - the field array holding all the field options + */ + function load_field( $field ) { + + // bail early if no field layouts + if ( empty( $field['layouts'] ) ) { + return $field; + } + + // vars + $sub_fields = acf_get_fields( $field ); + + // loop through layouts, sub fields and swap out the field key with the real field + foreach ( array_keys( $field['layouts'] ) as $i ) { + + // extract layout + $layout = acf_extract_var( $field['layouts'], $i ); + + // validate layout + $layout = $this->get_valid_layout( $layout ); + + // append sub fields + if ( ! empty( $sub_fields ) ) { + foreach ( array_keys( $sub_fields ) as $k ) { + + // check if 'parent_layout' is empty + if ( empty( $sub_fields[ $k ]['parent_layout'] ) ) { + + // parent_layout did not save for this field, default it to first layout + $sub_fields[ $k ]['parent_layout'] = $layout['key']; + } + + // append sub field to layout, + if ( $sub_fields[ $k ]['parent_layout'] == $layout['key'] ) { + $layout['sub_fields'][] = acf_extract_var( $sub_fields, $k ); + } + } + } + + // append back to layouts + $field['layouts'][ $i ] = $layout; + } + + // return + return $field; + } + + + /** + * This function will return a specific sub field + * + * @type function + * @date 29/09/2016 + * @since 5.4.0 + * + * @param $sub_field + * @param $selector (string) + * @param $field (array) + * @return $post_id (int) + */ + function get_sub_field( $sub_field, $id, $field ) { + + // Get active layout. + $active = get_row_layout(); + + // Loop over layouts. + if ( $field['layouts'] ) { + foreach ( $field['layouts'] as $layout ) { + + // Restict to active layout if within a have_rows() loop. + if ( $active && $active !== $layout['name'] ) { + continue; + } + + // Check sub fields. + if ( $layout['sub_fields'] ) { + $sub_field = acf_search_fields( $id, $layout['sub_fields'] ); + if ( $sub_field ) { + break; + } + } + } + } + + // return + return $sub_field; + } + + /** + * Runs on the "acf/pre_render_fields" filter. Used to signify + * that we're currently rendering a Flexible Content field. + * + * @since 6.5 + * + * @param array $fields The main field array. + * @param mixed $post_id The post ID for the field being rendered. + * @return array + */ + public function pre_render_fields( $fields, $post_id = false ) { + if ( is_admin() ) { + $this->post_id = $post_id; + } + + return $fields; + } + + /** + * Renders the Flexible Content field. + * + * @since 3.6 + * + * @param array $field An array holding all the field's data. + * @return void + */ + public function render_field( $field ) { + // Add some defaults. + if ( empty( $field['button_label'] ) ) { + $field['button_label'] = $this->defaults['button_label']; + } + + // Render the field. + $renderer = new Render( + $field, + $this->get_layout_meta( $this->post_id, $field ) + ); + + $renderer->render(); + } + + /** + * Renders a single layout in a Flexible Content field. + * + * @since 5.0.0 + * + * @param array $field The field array. + * @param array $layout The layout to render + * @param integer|string $i The order of the layout being rendered. + * @param mixed $value The value of the layout. + * @return void + */ + public function render_layout( $field, $layout, $i, $value ) { + $disabled_layouts = $this->get_disabled_layouts( $this->post_id, $field ); + $renamed_layouts = $this->get_renamed_layouts( $this->post_id, $field ); + $layout_disabled = in_array( $i, $disabled_layouts, true ); + $renamed = ! empty( $renamed_layouts[ $i ] ) ? $renamed_layouts[ $i ] : ''; + + $layout = new Layout( $field, $layout, $i, $value, $layout_disabled, $renamed ); + $layout->render(); + } + + /** + * Renders the flexible content field layouts in the field group editor. + * + * @since 3.6 + * @date 23/01/13 + * + * @param array $field An array holding all the field's data. + */ + public function render_field_settings( $field ) { + $layout_open = apply_filters( 'acf/fields/flexible_content/layout_default_expanded', false ); + + // Load default layout. + if ( empty( $field['layouts'] ) ) { + $layout_open = true; + $field['layouts'] = array( + array(), + ); + } + + $field_settings_class = $layout_open ? 'open' : ''; + $toggle_class = $layout_open ? 'open' : 'closed'; + $field_settings_style = $layout_open ? '' : 'display: none;'; + + // loop through layouts + foreach ( $field['layouts'] as $layout ) { + + // get valid layout + $layout = $this->get_valid_layout( $layout ); + + // vars + $layout_prefix = "{$field['prefix']}[layouts][{$layout['key']}]"; + + ?> +
+
+
+ +
+ +
+ +
+ +
    +
  • +
  • +
  • +
  • +
  • +
+
+
+ acf_idify( $layout_prefix . '[key]' ), + 'name' => $layout_prefix . '[key]', + 'class' => 'layout-key', + 'value' => $layout['key'], + ) + ); + + ?> +
    +
  • + 'text', + 'name' => 'label', + 'class' => 'layout-label', + 'prefix' => $layout_prefix, + 'value' => $layout['label'], + 'prepend' => __( 'Label', 'acf' ), + ) + ); + + ?> +
  • +
  • + 'text', + 'name' => 'name', + 'class' => 'layout-name', + 'input-data' => array( '1p-ignore' => 'true' ), + 'prefix' => $layout_prefix, + 'value' => $layout['name'], + 'prepend' => __( 'Name', 'acf' ), + ) + ); + + ?> +
  • +
  • +
    +
    + 'select', + 'name' => 'display', + 'prefix' => $layout_prefix, + 'value' => $layout['display'], + 'class' => 'acf-is-prepended', + 'choices' => array( + 'table' => __( 'Table', 'acf' ), + 'block' => __( 'Block', 'acf' ), + 'row' => __( 'Row', 'acf' ), + ), + ) + ); + + ?> +
    +
  • +
  • + 'text', + 'name' => 'min', + 'prefix' => $layout_prefix, + 'value' => $layout['min'], + 'prepend' => __( 'Min', 'acf' ), + ) + ); + + ?> +
  • +
  • + 'text', + 'name' => 'max', + 'prefix' => $layout_prefix, + 'value' => $layout['max'], + 'prepend' => __( 'Max', 'acf' ), + ) + ); + + ?> +
  • +
+
+ $layout['sub_fields'], + 'parent' => $field['ID'], + 'is_subfield' => true, + ); + + acf_get_view( 'acf-field-group/fields', $args ); + + ?> +
+
+
+ __( 'Minimum Layouts', 'acf' ), + 'instructions' => '', + 'type' => 'number', + 'name' => 'min', + ) + ); + + // max + acf_render_field_setting( + $field, + array( + 'label' => __( 'Maximum Layouts', 'acf' ), + 'instructions' => '', + 'type' => 'number', + 'name' => 'max', + ) + ); + + // add new row label + acf_render_field_setting( + $field, + array( + 'label' => __( 'Button Label', 'acf' ), + 'instructions' => '', + 'type' => 'text', + 'name' => 'button_label', + ) + ); + } + + /** + * Filters the $value after it is loaded from the database. + * + * @since 3.6 + * + * @param mixed $value The value found in the database + * @param mixed $post_id The post_id from which the value was loaded + * @param array $field The field array holding all the field options + * @return $value + */ + public function load_value( $value, $post_id, $field ) { + // bail early if no value + if ( empty( $value ) || empty( $field['layouts'] ) ) { + return $value; + } + + $value = acf_get_array( $value ); + $disabled_layouts = $this->get_disabled_layouts( $post_id, $field ); + $rows = array(); + $layouts = array(); + + // sort layouts into names + foreach ( $field['layouts'] as $k => $layout ) { + $layouts[ $layout['name'] ] = $layout['sub_fields']; + } + + // loop through rows + foreach ( $value as $i => $l ) { + // If the layout is disabled, prevent it from showing up on the frontend. + if ( $this->should_disable_layout( $i, $disabled_layouts ) ) { + continue; + } + + // append to $values + $rows[ $i ] = array(); + $rows[ $i ]['acf_fc_layout'] = $l; + + // bail early if layout deosnt contain sub fields + if ( empty( $layouts[ $l ] ) ) { + continue; + } + + // get layout + $layout = $layouts[ $l ]; + + // loop through sub fields + foreach ( array_keys( $layout ) as $j ) { + + // get sub field + $sub_field = $layout[ $j ]; + + // bail early if no name (tab) + if ( acf_is_empty( $sub_field['name'] ) ) { + continue; + } + + // update full name + $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; + + // get value + $sub_value = acf_get_value( $post_id, $sub_field ); + + // add value + $rows[ $i ][ $sub_field['key'] ] = $sub_value; + } + } + + return $rows; + } + + /** + * Checks if a layout should be disabled based on the provided index and disabled layouts. + * + * @since 6.5 + * + * @param integer|string $layout_index The index of the layout to check. + * @param array $disabled_layouts The array of disabled layout indices. + * @return boolean + */ + private function should_disable_layout( $layout_index, $disabled_layouts = array() ): bool { + // No disabled layouts provided, so no need to disable. + if ( ! is_array( $disabled_layouts ) || empty( $disabled_layouts ) ) { + return false; + } + + // The layout is not in the disabled list, so no need to disable. + if ( ! in_array( $layout_index, $disabled_layouts, true ) ) { + return false; + } + + if ( is_admin() ) { + $args = acf_request_args( + array( + 'action' => '', + 'query' => '', + ) + ); + + // If this is a block preview, disable the layout. + if ( ( $args['action'] === 'acf/ajax/fetch-block' && ! empty( $args['query']['preview'] ) ) || + acf_get_data( 'acf_doing_block_preview' ) ) { + return true; + } + + // Editing a layout in the admin, so don't disable it. + return false; + } + + // The layout has been disabled, and we're on the frontend. + return true; + } + + /** + * This filter is appied to the $value after it is loaded from the db and before it is returned to the template + * + * @type filter + * @since 3.6 + * + * @param mixed $value The value which was loaded from the database. + * @param mixed $post_id The $post_id from which the value was loaded. + * @param array $field The field array holding all the field options. + * @param boolean $escape_html Should the field return a HTML safe formatted value. + * @return mixed $value The modified value. + */ + public function format_value( $value, $post_id, $field, $escape_html = false ) { + + // bail early if no value + if ( empty( $value ) || empty( $field['layouts'] ) ) { + return false; + } + + // sort layouts into names + $layouts = array(); + foreach ( $field['layouts'] as $k => $layout ) { + $layouts[ $layout['name'] ] = $layout['sub_fields']; + } + + // loop over rows + foreach ( array_keys( $value ) as $i ) { + + // get layout name + $l = $value[ $i ]['acf_fc_layout']; + + // bail early if layout deosnt exist + if ( empty( $layouts[ $l ] ) ) { + continue; + } + + // get layout + $layout = $layouts[ $l ]; + + // loop through sub fields + foreach ( array_keys( $layout ) as $j ) { + + // get sub field + $sub_field = $layout[ $j ]; + + // bail early if no name (tab) + if ( acf_is_empty( $sub_field['name'] ) ) { + continue; + } + + // extract value + $sub_value = acf_extract_var( $value[ $i ], $sub_field['key'] ); + + // update $sub_field name + $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; + + // format value + $sub_value = acf_format_value( $sub_value, $post_id, $sub_field, $escape_html ); + + // append to $row + $value[ $i ][ $sub_field['_name'] ] = $sub_value; + } + } + + // return + return $value; + } + + + /** + * description + * + * @type function + * @date 11/02/2014 + * @since 5.0.0 + * + * @param $post_id (int) + * @return $post_id (int) + */ + public function validate_value( $valid, $value, $field, $input ) { + // vars + $count = 0; + + // check if is value (may be empty string) + if ( is_array( $value ) ) { + + // remove acfcloneindex + if ( isset( $value['acfcloneindex'] ) ) { + unset( $value['acfcloneindex'] ); + } + + foreach ( $value as $row_value ) { + // Don't count disabled rows; + if ( ! empty( $row_value['acf_fc_layout_disabled'] ) ) { + continue; + } + ++$count; + } + } + + // validate required + if ( $field['required'] && ! $count ) { + $valid = false; + } + + // validate min + $min = (int) $field['min']; + if ( $min && $count < $min ) { + + // vars + $error = __( 'This field requires at least {min} {label} {identifier}', 'acf' ); + $identifier = _n( 'layout', 'layouts', $min, 'acf' ); + + // replace + $error = str_replace( '{min}', $min, $error ); + $error = str_replace( '{label}', '', $error ); + $error = str_replace( '{identifier}', $identifier, $error ); + + // return + return $error; + } + + // find layouts + $layouts = array(); + foreach ( array_keys( $field['layouts'] ) as $i ) { + + // vars + $layout = $field['layouts'][ $i ]; + + // add count + $layout['count'] = 0; + + // append + $layouts[ $layout['name'] ] = $layout; + } + + // validate value + if ( $count ) { + + // loop rows + foreach ( $value as $i => $row ) { + // ensure row is an array + if ( ! is_array( $row ) ) { + continue; + } + + if ( ! empty( $row['acf_fc_layout_disabled'] ) ) { + continue; + } + + // get layout + $l = $row['acf_fc_layout']; + + // bail if layout doesn't exist + if ( ! isset( $layouts[ $l ] ) ) { + continue; + } + + // increase count + ++$layouts[ $l ]['count']; + + // bail if no sub fields + if ( empty( $layouts[ $l ]['sub_fields'] ) ) { + continue; + } + + // loop sub fields + foreach ( $layouts[ $l ]['sub_fields'] as $sub_field ) { + + // get sub field key + $k = $sub_field['key']; + + // bail if no value + if ( ! isset( $value[ $i ][ $k ] ) ) { + continue; + } + + // validate + acf_validate_value( $value[ $i ][ $k ], $sub_field, "{$input}[{$i}][{$k}]" ); + } + // end loop sub fields + } + // end loop rows + } + + // validate layouts + foreach ( $layouts as $layout ) { + + // validate min / max + $min = (int) $layout['min']; + $count = $layout['count']; + $label = $layout['label']; + + if ( $min && $count < $min ) { + + // vars + $error = __( 'This field requires at least {min} {label} {identifier}', 'acf' ); + $identifier = _n( 'layout', 'layouts', $min, 'acf' ); + + // replace + $error = str_replace( '{min}', $min, $error ); + $error = str_replace( '{label}', '"' . $label . '"', $error ); + $error = str_replace( '{identifier}', $identifier, $error ); + + // return + return $error; + } + } + + // return + return $valid; + } + + + /** + * This function will return a specific layout by name from a field + * + * @since 5.5.8 + * + * @param string $name The layout name. + * @param array $field The field to load the layout from. + * @return array|false + */ + public function get_layout( $name, $field ) { + + // bail early if no layouts + if ( ! isset( $field['layouts'] ) ) { + return false; + } + + // loop + foreach ( $field['layouts'] as $layout ) { + + // match + if ( $layout['name'] === $name ) { + return $layout; + } + } + + // return + return false; + } + + /** + * Retrieves layout meta for the Flexible Content field saved to the provided post. + * + * @since 6.5 + * + * @param integer|string $post_id The ID of the post being edited. + * @param array $field The Flexible Content field array. + * @return array + */ + public function get_layout_meta( $post_id, $field ) { + $field_name = $field['name']; + + // Enables compatibility with nested Flexible Content fields during render. + if ( ! empty( $field['_prepare'] ) ) { + $field_name = acf_get_field_type( 'repeater' )->get_field_name_from_input_name( $field_name ); + } + + // Bail early if we don't have a field name to check. + if ( empty( $field_name ) ) { + return array(); + } + + // Return the cached meta if we have it. + $cache_key = "$post_id:$field_name"; + if ( ! empty( $this->layout_meta[ $cache_key ] ) ) { + return $this->layout_meta[ $cache_key ]; + } + + $layout_meta = acf_get_metadata_by_field( + $post_id, + array( + 'name' => '_' . $field_name . '_layout_meta', + ) + ); + + if ( empty( $layout_meta ) || ! is_array( $layout_meta ) ) { + return array(); + } + + $this->layout_meta[ $cache_key ] = $layout_meta; + + return $this->layout_meta[ $cache_key ]; + } + + /** + * Returns an array of layouts that have been disabled for the current field. + * + * @since 6.5 + * + * @param integer|string $post_id The ID of the post being edited. + * @param array $field The Flexible Content field array. + * @return array + */ + public function get_disabled_layouts( $post_id, $field ): array { + $layout_meta = $this->get_layout_meta( $post_id, $field ); + + if ( empty( $layout_meta['disabled'] ) || ! is_array( $layout_meta['disabled'] ) ) { + return array(); + } + + return $layout_meta['disabled']; + } + + /** + * Returns an array of layouts that have been renamed for the current field. + * + * @since 6.5 + * + * @param integer|string $post_id The ID of the post being edited. + * @param array $field The Flexible Content field array. + * @return array + */ + public function get_renamed_layouts( $post_id, $field ): array { + $layout_meta = $this->get_layout_meta( $post_id, $field ); + + if ( empty( $layout_meta['renamed'] ) || ! is_array( $layout_meta['renamed'] ) ) { + return array(); + } + + return $layout_meta['renamed']; + } + + /** + * This function will delete a value row + * + * @date 15/2/17 + * @since 5.5.8 + * + * @param integer $i + * @param array $field + * @param mixed $post_id + * @return boolean + */ + public function delete_row( $i, $field, $post_id ) { + + // vars + $value = acf_get_metadata_by_field( $post_id, $field ); + + // bail early if no value + if ( ! is_array( $value ) || ! isset( $value[ $i ] ) ) { + return false; + } + + // get layout + $layout = $this->get_layout( $value[ $i ], $field ); + + // bail early if no layout + if ( ! $layout || empty( $layout['sub_fields'] ) ) { + return false; + } + + // loop + foreach ( $layout['sub_fields'] as $sub_field ) { + + // modify name for delete + $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; + + // delete value + acf_delete_value( $post_id, $sub_field ); + } + + // return + return true; + } + + /** + * This function will update a value row + * + * @date 15/2/17 + * @since 5.5.8 + * + * @param array $row + * @param integer $i + * @param array $field + * @param mixed $post_id + * @return boolean + */ + public function update_row( $row, $i, $field, $post_id ) { + // bail early if no layout reference + if ( ! is_array( $row ) || ! isset( $row['acf_fc_layout'] ) ) { + return false; + } + + // get layout + $layout = $this->get_layout( $row['acf_fc_layout'], $field ); + + // bail early if no layout + if ( ! $layout || empty( $layout['sub_fields'] ) ) { + return false; + } + + foreach ( $layout['sub_fields'] as $sub_field ) { + $value = null; + + if ( array_key_exists( $sub_field['key'], $row ) ) { + $value = $row[ $sub_field['key'] ]; + } elseif ( array_key_exists( $sub_field['name'], $row ) ) { + $value = $row[ $sub_field['name'] ]; + } else { + // Value does not exist. + continue; + } + + // modify name for save + $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; + + // update field + acf_update_value( $value, $post_id, $sub_field ); + } + + return true; + } + + /** + * Filters the $value before it is updated in the database. + * + * @since 3.6 + * + * @param mixed $value The value which will be saved in the database + * @param mixed $post_id The post_id of which the value will be saved + * @param array $field The field array holding all the field options + * @return mixed $value The modified value + */ + public function update_value( $value, $post_id, $field ) { + // Bail early if no layouts or field name. + if ( empty( $field['layouts'] ) || empty( $field['name'] ) ) { + return $value; + } + + // vars + $new_value = array(); + $disabled_layouts = array(); + $renamed_layouts = array(); + $old_value = acf_get_metadata_by_field( $post_id, $field ); + $old_value = is_array( $old_value ) ? $old_value : array(); + + // update + if ( ! empty( $value ) ) { + $i = -1; + + // remove acfcloneindex + if ( isset( $value['acfcloneindex'] ) ) { + unset( $value['acfcloneindex'] ); + } + + // loop through rows + foreach ( $value as $row ) { + ++$i; + + // bail early if no layout reference + if ( ! is_array( $row ) || ! isset( $row['acf_fc_layout'] ) ) { + continue; + } + + // delete old row if layout has changed + if ( isset( $old_value[ $i ] ) && $old_value[ $i ] !== $row['acf_fc_layout'] ) { + $this->delete_row( $i, $field, $post_id ); + } + + if ( ! empty( $row['acf_fc_layout_disabled'] ) ) { + $disabled_layouts[] = $i; + } + unset( $row['acf_fc_layout_disabled'] ); + + if ( ! empty( $row['acf_fc_layout_custom_label'] ) ) { + $renamed_layouts[ $i ] = $row['acf_fc_layout_custom_label']; + } + unset( $row['acf_fc_layout_custom_label'] ); + + // update row + $this->update_row( $row, $i, $field, $post_id ); + + // append to order + $new_value[] = $row['acf_fc_layout']; + } + } + + // vars + $old_count = empty( $old_value ) ? 0 : count( $old_value ); + $new_count = empty( $new_value ) ? 0 : count( $new_value ); + + // Update layout meta. + acf_update_metadata_by_field( + $post_id, + array( + 'name' => '_' . $field['name'] . '_layout_meta', + ), + array( + 'disabled' => $disabled_layouts, + 'renamed' => $renamed_layouts, + ) + ); + + // remove old rows + if ( $old_count > $new_count ) { + + // loop + for ( $i = $new_count; $i < $old_count; $i++ ) { + $this->delete_row( $i, $field, $post_id ); + } + } + + // save false for empty value + if ( empty( $new_value ) ) { + $new_value = ''; + } + + // return + return $new_value; + } + + + /** + * Deletes a layout from a flexible content field. + * + * @type function + * @date 1/07/2015 + * @since 5.2.3 + * + * @param $post_id (int) + * @return $post_id (int) + */ + public function delete_value( $post_id, $key, $field ) { + + // vars + $old_value = acf_get_metadata_by_field( $post_id, $field['name'] ); + $old_value = is_array( $old_value ) ? $old_value : array(); + + // bail early if no rows or no sub fields + if ( empty( $old_value ) ) { + return; + } + + // loop + foreach ( array_keys( $old_value ) as $i ) { + $this->delete_row( $i, $field, $post_id ); + } + } + + + /** + * This filter is appied to the $field before it is saved to the database + * + * @type filter + * @since 3.6 + * + * @param array $field The field array holding all the field options + * @return array $field The modified field + */ + public function update_field( $field ) { + + // loop + if ( ! empty( $field['layouts'] ) ) { + foreach ( $field['layouts'] as &$layout ) { + unset( $layout['sub_fields'] ); + } + } + + // return + return $field; + } + + + /** + * description + * + * @type function + * @date 4/04/2014 + * @since 5.0.0 + * + * @param $post_id (int) + * @return $post_id (int) + */ + function delete_field( $field ) { + + if ( ! empty( $field['layouts'] ) ) { + + // loop through layouts + foreach ( $field['layouts'] as $layout ) { + + // loop through sub fields + if ( ! empty( $layout['sub_fields'] ) ) { + foreach ( $layout['sub_fields'] as $sub_field ) { + acf_delete_field( $sub_field['ID'] ); + } + // foreach + } + // if + } + // foreach + } + // if + } + + + /** + * This filter is appied to the $field before it is duplicated and saved to the database + * + * @type filter + * @since 3.6 + * @date 23/01/13 + * + * @param $field - the field array holding all the field options + * + * @return $field - the modified field + */ + function duplicate_field( $field ) { + + // vars + $sub_fields = array(); + + if ( ! empty( $field['layouts'] ) ) { + + // loop through layouts + foreach ( $field['layouts'] as $layout ) { + + // extract sub fields + $extra = acf_extract_var( $layout, 'sub_fields' ); + + // merge + if ( ! empty( $extra ) ) { + $sub_fields = array_merge( $sub_fields, $extra ); + } + } + // foreach + } + + // save field to get ID + $field = acf_update_field( $field ); + + // duplicate sub fields + acf_duplicate_fields( $sub_fields, $field['ID'] ); + + return $field; + } + + + /** + * Output the layout title for an AJAX response. + * + * @since 5.3.2 + */ + public function ajax_layout_title() { + + $options = acf_parse_args( + $_POST, // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Verified elsewhere. + array( + 'post_id' => 0, + 'i' => 0, + 'field_key' => '', + 'nonce' => '', + 'layout' => '', + 'value' => array(), + ) + ); + + // load field + $field = acf_get_field( $options['field_key'] ); + if ( ! $field ) { + die(); + } + + // vars + $layout = $this->get_layout( $options['layout'], $field ); + if ( ! $layout ) { + die(); + } + + // title + $title = $this->get_layout_title( $field, $layout, $options['i'], $options['value'] ); + + // echo + echo acf_esc_html( $title ); + die; + } + + /** + * Get a layout title for a field. + * + * @param array $field The field array + * @param array $layout The layout array + * @param integer $i The order number of the layout + * @param array $value The value of the layout + * @return string The layout title, optionally filtered. + */ + public function get_layout_title( $field, $layout, $i, $value ) { + $layout = new Layout( $field, $layout, $i, $value ); + return $layout->get_title(); + } + + /** + * This function will update clone field settings based on the origional field + * + * @type function + * @date 28/06/2016 + * @since 5.3.8 + * + * @param $clone (array) + * @param $field (array) + * @return $clone + */ + public function clone_any_field( $field, $clone_field ) { + + // remove parent_layout + // - allows a sub field to be rendered as a normal field + unset( $field['parent_layout'] ); + + // attempt to merger parent_layout + if ( isset( $clone_field['parent_layout'] ) ) { + $field['parent_layout'] = $clone_field['parent_layout']; + } + + // return + return $field; + } + + + /** + * Handles preparing the layouts for export. + * + * @since 5.0.0 + * + * @param array $field The whole fiel array + * @return array The export ready field array. + */ + public function prepare_field_for_export( $field ) { + + // loop + if ( ! empty( $field['layouts'] ) ) { + foreach ( $field['layouts'] as &$layout ) { + $layout['sub_fields'] = acf_prepare_fields_for_export( $layout['sub_fields'] ); + } + } + + // return + return $field; + } + + function prepare_any_field_for_export( $field ) { + + // remove parent_layout + unset( $field['parent_layout'] ); + + // return + return $field; + } + + + /** + * description + * + * @type function + * @date 11/03/2014 + * @since 5.0.0 + * + * @param $post_id (int) + * @return $post_id (int) + */ + public function prepare_field_for_import( $field ) { + + // Bail early if no layouts + if ( empty( $field['layouts'] ) ) { + return $field; + } + + // Storage for extracted fields. + $extra = array(); + + // Loop over layouts. + foreach ( $field['layouts'] as &$layout ) { + + // Ensure layout is valid. + $layout = $this->get_valid_layout( $layout ); + + // Extract sub fields. + $sub_fields = acf_extract_var( $layout, 'sub_fields' ); + + // Modify and append sub fields to $extra. + if ( $sub_fields ) { + foreach ( $sub_fields as $i => $sub_field ) { + + // Update atttibutes + $sub_field['parent'] = $field['key']; + $sub_field['parent_layout'] = $layout['key']; + $sub_field['menu_order'] = $i; + + // Append to extra. + $extra[] = $sub_field; + } + } + } + + // Merge extra sub fields. + if ( $extra ) { + array_unshift( $extra, $field ); + return $extra; + } + + // Return field. + return $field; + } + + + /** + * This function will add compatibility for the 'column_width' setting + * + * @type function + * @date 30/1/17 + * @since 5.5.6 + * + * @param $field (array) + * @return $field + */ + function validate_any_field( $field ) { + + // width has changed + if ( isset( $field['column_width'] ) ) { + $field['wrapper']['width'] = acf_extract_var( $field, 'column_width' ); + } + + // return + return $field; + } + + + /** + * This function will translate field settings + * + * @type function + * @date 8/03/2016 + * @since 5.3.2 + * + * @param $field (array) + * @return $field + */ + function translate_field( $field ) { + + // translate + $field['button_label'] = acf_translate( $field['button_label'] ); + + // loop + if ( ! empty( $field['layouts'] ) ) { + foreach ( $field['layouts'] as &$layout ) { + $layout['label'] = acf_translate( $layout['label'] ); + } + } + + // return + return $field; + } + + /** + * Additional validation for the flexible content field when submitted via REST. + * + * @param boolean $valid The current validity booleean + * @param integer $value The value of the field + * @param array $field The field array + * @return boolean|WP + */ + public function validate_rest_value( $valid, $value, $field ) { + $param = sprintf( '%s[%s]', $field['prefix'], $field['name'] ); + $data = array( + 'param' => $param, + 'value' => $value, + ); + + if ( ! is_array( $value ) && is_null( $value ) ) { + $error = sprintf( __( '%s must be of type array or null.', 'acf' ), $param ); + return new WP_Error( 'rest_invalid_param', $error, $param ); + } + + $layouts_to_update = array_count_values( array_column( $value, 'acf_fc_layout' ) ); + + foreach ( $field['layouts'] as $layout ) { + $num_layouts = isset( $layouts_to_update[ $layout['name'] ] ) ? $layouts_to_update[ $layout['name'] ] : 0; + + if ( '' !== $layout['min'] && $num_layouts < (int) $layout['min'] ) { + $error = sprintf( + _n( + '%1$s must contain at least %2$s %3$s layout.', + '%1$s must contain at least %2$s %3$s layouts.', + $layout['min'], + 'acf' + ), + $param, + number_format_i18n( $layout['min'] ), + $layout['name'] + ); + + return new WP_Error( 'rest_invalid_param', $error, $data ); + } + + if ( '' !== $layout['max'] && $num_layouts > (int) $layout['max'] ) { + $error = sprintf( + _n( + '%1$s must contain at most %2$s %3$s layout.', + '%1$s must contain at most %2$s %3$s layouts.', + $layout['max'], + 'acf' + ), + $param, + number_format_i18n( $layout['max'] ), + $layout['name'] + ); + + return new WP_Error( 'rest_invalid_param', $error, $data ); + } + } + + return $valid; + } + + /** + * Return the schema array for the REST API. + * + * @param array $field + * @return array + */ + public function get_rest_schema( array $field ) { + $schema = array( + 'type' => array( 'array', 'null' ), + 'required' => ! empty( $field['required'] ), + 'items' => array( + 'oneOf' => array(), + ), + ); + + // Loop through layouts building up a schema for each. + foreach ( $field['layouts'] as $layout ) { + $layout_schema = array( + 'type' => 'object', + 'properties' => array( + 'acf_fc_layout' => array( + 'type' => 'string', + 'required' => true, + // By using a pattern match against the layout name, data sent in must match an available + // layout on the flexible field. If it doesn't, a 400 Bad Request response will result. + 'pattern' => '^' . $layout['name'] . '$', + ), + ), + ); + + foreach ( $layout['sub_fields'] as $sub_field ) { + if ( $sub_field_schema = acf_get_field_rest_schema( $sub_field ) ) { + $layout_schema['properties'][ $sub_field['name'] ] = $sub_field_schema; + } + } + + $schema['items']['oneOf'][] = $layout_schema; + } + + if ( ! empty( $field['min'] ) ) { + $schema['minItems'] = (int) $field['min']; + } + + if ( ! empty( $field['max'] ) ) { + $schema['maxItems'] = (int) $field['max']; + } + + return $schema; + } + + /** + * Apply basic formatting to prepare the value for default REST output. + * + * @param mixed $value + * @param integer|string $post_id + * @param array $field + * @return array|mixed + */ + public function format_value_for_rest( $value, $post_id, array $field ) { + if ( empty( $value ) || ! is_array( $value ) || empty( $field['layouts'] ) ) { + return null; + } + + // Create a map of layout sub fields mapped to layout names. + foreach ( $field['layouts'] as $layout ) { + $layouts[ $layout['name'] ] = $layout['sub_fields']; + } + + // Loop through each layout and within that, each sub field to process sub fields individually. + foreach ( $value as &$layout ) { + $name = $layout['acf_fc_layout']; + + if ( empty( $layouts[ $name ] ) ) { + continue; + } + + foreach ( $layouts[ $name ] as $sub_field ) { + + // Bail early if the field has no name (tab). + if ( acf_is_empty( $sub_field['name'] ) ) { + continue; + } + + // Extract the sub field 'field_key'=>'value' pair from the $layout and format it. + $sub_value = acf_extract_var( $layout, $sub_field['key'] ); + $sub_value = acf_format_value_for_rest( $sub_value, $post_id, $sub_field ); + + // Add the sub field value back to the $layout but mapped to the field name instead + // of the key reference. + $layout[ $sub_field['name'] ] = $sub_value; + } + } + + return $value; + } + } + + + // initialize + acf_register_field_type( 'acf_field_flexible_content' ); +endif; // class_exists check + +?> diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-gallery.php b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-gallery.php new file mode 100644 index 00000000..bb6df3ea --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-gallery.php @@ -0,0 +1,930 @@ +name = 'gallery'; + $this->label = __( 'Gallery', 'acf' ); + $this->category = 'content'; + $this->description = __( 'An interactive interface for managing a collection of attachments, such as images.', 'acf' ); + $this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-gallery.png'; + $this->doc_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/gallery/', 'docs', 'field-type-selection' ); + $this->tutorial_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/how-to-use-the-gallery-field/', 'docs', 'field-type-selection' ); + $this->pro = true; + $this->supports = array( 'bindings' => false ); + $this->defaults = array( + 'return_format' => 'array', + 'preview_size' => 'medium', + 'insert' => 'append', + 'library' => 'all', + 'min' => 0, + 'max' => 0, + 'min_width' => 0, + 'min_height' => 0, + 'min_size' => 0, + 'max_width' => 0, + 'max_height' => 0, + 'max_size' => 0, + 'mime_types' => '', + ); + + // actions + add_action( 'wp_ajax_acf/fields/gallery/get_attachment', array( $this, 'ajax_get_attachment' ) ); + add_action( 'wp_ajax_nopriv_acf/fields/gallery/get_attachment', array( $this, 'ajax_get_attachment' ) ); + + add_action( 'wp_ajax_acf/fields/gallery/update_attachment', array( $this, 'ajax_update_attachment' ) ); + add_action( 'wp_ajax_nopriv_acf/fields/gallery/update_attachment', array( $this, 'ajax_update_attachment' ) ); + + add_action( 'wp_ajax_acf/fields/gallery/get_sort_order', array( $this, 'ajax_get_sort_order' ) ); + add_action( 'wp_ajax_nopriv_acf/fields/gallery/get_sort_order', array( $this, 'ajax_get_sort_order' ) ); + } + + /** + * description + * + * @type function + * @date 16/12/2015 + * @since 5.3.2 + * + * @param $post_id (int) + * @return $post_id (int) + */ + function input_admin_enqueue_scripts() { + + // localize + acf_localize_text( + array( + 'Add Image to Gallery' => __( 'Add Image to Gallery', 'acf' ), + 'Maximum selection reached' => __( 'Maximum selection reached', 'acf' ), + ) + ); + } + + /** + * AJAX handler for retrieving and rendering an attachment. + * + * @since 5.0.0 + * + * @return void + */ + public function ajax_get_attachment() { + // Get args. + $args = acf_request_args( + array( + 'id' => 0, + 'field_key' => '', + 'nonce' => '', + ) + ); + + // Validate request. + if ( ! acf_verify_ajax( $args['nonce'], $args['field_key'], true ) ) { + die(); + } + + // Cast args. + $args['id'] = (int) $args['id']; + + // Bail early if no id. + if ( ! $args['id'] ) { + die(); + } + + // Load field. + $field = acf_get_field( $args['field_key'] ); + if ( ! $field ) { + die(); + } + + // Render. + $this->render_attachment( $args['id'], $field ); + die; + } + + /** + * AJAX handler for updating an attachment. + * + * @since 5.0.0 + * + * @return void + */ + public function ajax_update_attachment() { + $args = acf_request_args( + array( + 'nonce' => '', + 'field_key' => '', + ) + ); + + if ( ! acf_verify_ajax( $args['nonce'], $args['field_key'], true ) ) { + wp_send_json_error(); + } + + // bail early if no attachments + if ( empty( $_POST['attachments'] ) ) { + wp_send_json_error(); + } + + // loop over attachments + foreach ( $_POST['attachments'] as $id => $changes ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitized by WP core when saved. + + if ( ! current_user_can( 'edit_post', $id ) ) { + wp_send_json_error(); + } + + $post = get_post( $id, ARRAY_A ); + + if ( 'attachment' != $post['post_type'] ) { + wp_send_json_error(); + } + + if ( isset( $changes['title'] ) ) { + $post['post_title'] = $changes['title']; + } + + if ( isset( $changes['caption'] ) ) { + $post['post_excerpt'] = $changes['caption']; + } + + if ( isset( $changes['description'] ) ) { + $post['post_content'] = $changes['description']; + } + + if ( isset( $changes['alt'] ) ) { + $alt = wp_unslash( $changes['alt'] ); + if ( $alt != get_post_meta( $id, '_wp_attachment_image_alt', true ) ) { + $alt = wp_strip_all_tags( $alt, true ); + update_post_meta( $id, '_wp_attachment_image_alt', wp_slash( $alt ) ); + } + } + + // save post + wp_update_post( $post ); + + /** This filter is documented in wp-admin/includes/media.php */ + // - seems off to run this filter AFTER the update_post function, but there is a reason + // - when placed BEFORE, an empty post_title will be populated by WP + // - this filter will still allow 3rd party to save extra image data! + $post = apply_filters( 'attachment_fields_to_save', $post, $changes ); + + // save meta + acf_save_post( $id ); + } + + // return + wp_send_json_success(); + } + + /** + * AJAX handler for getting the attachment sort order. + * + * @since 5.0.0 + * + * @return void + */ + public function ajax_get_sort_order() { + $order = 'DESC'; + $args = acf_parse_args( + $_POST, // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Verified below. + array( + 'ids' => 0, + 'sort' => 'date', + 'field_key' => '', + 'nonce' => '', + ) + ); + + if ( ! acf_verify_ajax( $args['nonce'], $args['field_key'], true ) ) { + wp_send_json_error(); + } + + // Reverse order. + if ( $args['sort'] === 'reverse' ) { + $ids = array_reverse( $args['ids'] ); + wp_send_json_success( $ids ); + } + + // Ascending order. + if ( $args['sort'] === 'title' ) { + $order = 'ASC'; + } + + // Find attachments (DISTINCT POSTS). + $ids = get_posts( + array( + 'post_type' => 'attachment', + 'numberposts' => -1, + 'post_status' => 'any', + 'post__in' => $args['ids'], + 'order' => $order, + 'orderby' => $args['sort'], + 'fields' => 'ids', + ) + ); + + if ( ! empty( $ids ) ) { + wp_send_json_success( $ids ); + } + + wp_send_json_error(); + } + + /** + * Renders the sidebar HTML shown when selecting an attachmemnt. + * + * @date 13/12/2013 + * @since 5.0.0 + * + * @param integer $id The attachment ID. + * @param array $field The field array. + * @return void + */ + function render_attachment( $id, $field ) { + // Load attachmenet data. + $attachment = wp_prepare_attachment_for_js( $id ); + $compat = get_compat_media_markup( $id ); + + // Get attachment thumbnail (video). + if ( isset( $attachment['thumb']['src'] ) ) { + $thumb = $attachment['thumb']['src']; + + // Look for thumbnail size (image). + } elseif ( isset( $attachment['sizes']['thumbnail']['url'] ) ) { + $thumb = $attachment['sizes']['thumbnail']['url']; + + // Use url for svg. + } elseif ( $attachment['type'] === 'image' ) { + $thumb = $attachment['url']; + + // Default to icon. + } else { + $thumb = wp_mime_type_icon( $id ); + } + + // Get attachment dimensions / time / size. + $dimensions = ''; + if ( $attachment['type'] === 'audio' ) { + $dimensions = __( 'Length', 'acf' ) . ': ' . $attachment['fileLength']; + } elseif ( ! empty( $attachment['width'] ) ) { + $dimensions = $attachment['width'] . ' x ' . $attachment['height']; + } + if ( ! empty( $attachment['filesizeHumanReadable'] ) ) { + $dimensions .= ' (' . $attachment['filesizeHumanReadable'] . ')'; + } + + ?> + + + + "{$field['key']}-title", + 'name' => 'title', + 'prefix' => $prefix, + 'type' => 'text', + 'label' => __( 'Title', 'acf' ), + 'value' => $attachment['title'], + ), + 'tr' + ); + + acf_render_field_wrap( + array( + // 'key' => "{$field['key']}-caption", + 'name' => 'caption', + 'prefix' => $prefix, + 'type' => 'textarea', + 'label' => __( 'Caption', 'acf' ), + 'value' => $attachment['caption'], + ), + 'tr' + ); + + acf_render_field_wrap( + array( + // 'key' => "{$field['key']}-alt", + 'name' => 'alt', + 'prefix' => $prefix, + 'type' => 'text', + 'label' => __( 'Alt Text', 'acf' ), + 'value' => $attachment['alt'], + ), + 'tr' + ); + + acf_render_field_wrap( + array( + // 'key' => "{$field['key']}-description", + 'name' => 'description', + 'prefix' => $prefix, + 'type' => 'textarea', + 'label' => __( 'Description', 'acf' ), + 'value' => $attachment['description'], + ), + 'tr' + ); + + ?> + +
+ $field['id'], + 'class' => "acf-gallery {$field['class']}", + 'data-library' => $field['library'], + 'data-preview_size' => $field['preview_size'], + 'data-min' => $field['min'], + 'data-max' => $field['max'], + 'data-mime_types' => $field['mime_types'], + 'data-insert' => $field['insert'], + 'data-columns' => 4, + 'data-nonce' => wp_create_nonce( 'acf_field_' . $this->name . '_' . $field['key'] ), + ); + + // Set gallery height with deafult of 400px and minimum of 200px. + $height = acf_get_user_setting( 'gallery_height', 400 ); + $height = max( $height, 200 ); + $attrs['style'] = "height:{$height}px"; + + // Load attachments. + $attachments = array(); + if ( $field['value'] ) { + + // Clean value into an array of IDs. + $attachment_ids = array_map( 'intval', acf_array( $field['value'] ) ); + + // Find posts in database (ensures all results are real). + $posts = acf_get_posts( + array( + 'post_type' => 'attachment', + 'post__in' => $attachment_ids, + 'update_post_meta_cache' => true, + 'update_post_term_cache' => false, + ) + ); + + // Load attatchment data for each post. + $attachments = array_map( 'acf_get_attachment', $posts ); + } + + ?> +
> + + + +
+ __( 'Return Format', 'acf' ), + 'instructions' => '', + 'type' => 'radio', + 'name' => 'return_format', + 'layout' => 'horizontal', + 'choices' => array( + 'array' => __( 'Image Array', 'acf' ), + 'url' => __( 'Image URL', 'acf' ), + 'id' => __( 'Image ID', 'acf' ), + ), + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Library', 'acf' ), + 'instructions' => __( 'Limit the media library choice', 'acf' ), + 'type' => 'radio', + 'name' => 'library', + 'layout' => 'horizontal', + 'choices' => array( + 'all' => __( 'All', 'acf' ), + 'uploadedTo' => __( 'Uploaded to post', 'acf' ), + ), + ) + ); + } + + /** + * Renders the field settings used in the "Validation" tab. + * + * @since 6.0 + * + * @param array $field The field settings array. + * @return void + */ + function render_field_validation_settings( $field ) { + // Clear numeric settings. + $clear = array( + 'min', + 'max', + 'min_width', + 'min_height', + 'min_size', + 'max_width', + 'max_height', + 'max_size', + ); + + foreach ( $clear as $k ) { + if ( empty( $field[ $k ] ) ) { + $field[ $k ] = ''; + } + } + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Minimum Selection', 'acf' ), + 'instructions' => '', + 'type' => 'number', + 'name' => 'min', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Maximum Selection', 'acf' ), + 'instructions' => '', + 'type' => 'number', + 'name' => 'max', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Minimum', 'acf' ), + 'hint' => __( 'Restrict which images can be uploaded', 'acf' ), + 'type' => 'text', + 'name' => 'min_width', + 'prepend' => __( 'Width', 'acf' ), + 'append' => 'px', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => '', + 'type' => 'text', + 'name' => 'min_height', + 'prepend' => __( 'Height', 'acf' ), + 'append' => 'px', + '_append' => 'min_width', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => '', + 'type' => 'text', + 'name' => 'min_size', + 'prepend' => __( 'File size', 'acf' ), + 'append' => 'MB', + '_append' => 'min_width', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Maximum', 'acf' ), + 'hint' => __( 'Restrict which images can be uploaded', 'acf' ), + 'type' => 'text', + 'name' => 'max_width', + 'prepend' => __( 'Width', 'acf' ), + 'append' => 'px', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => '', + 'type' => 'text', + 'name' => 'max_height', + 'prepend' => __( 'Height', 'acf' ), + 'append' => 'px', + '_append' => 'max_width', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => '', + 'type' => 'text', + 'name' => 'max_size', + 'prepend' => __( 'File size', 'acf' ), + 'append' => 'MB', + '_append' => 'max_width', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Allowed File Types', 'acf' ), + 'hint' => __( 'Comma separated list. Leave blank for all types', 'acf' ), + 'type' => 'text', + 'name' => 'mime_types', + ) + ); + } + + /** + * Renders the field settings used in the "Presentation" tab. + * + * @since 6.0 + * + * @param array $field The field settings array. + * @return void + */ + function render_field_presentation_settings( $field ) { + acf_render_field_setting( + $field, + array( + 'label' => __( 'Insert', 'acf' ), + 'instructions' => __( 'Specify where new attachments are added', 'acf' ), + 'type' => 'select', + 'name' => 'insert', + 'choices' => array( + 'append' => __( 'Append to the end', 'acf' ), + 'prepend' => __( 'Prepend to the beginning', 'acf' ), + ), + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Preview Size', 'acf' ), + 'instructions' => '', + 'type' => 'select', + 'name' => 'preview_size', + 'choices' => acf_get_image_sizes(), + ) + ); + } + + /** + * This filter is appied to the $value after it is loaded from the db and before it is returned to the template + * + * @type filter + * @since 3.6 + * @date 23/01/13 + * + * @param $value (mixed) the value which was loaded from the database + * @param $post_id (mixed) the post_id from which the value was loaded + * @param $field (array) the field array holding all the field options + * + * @return $value (mixed) the modified value + */ + function format_value( $value, $post_id, $field ) { + + // Bail early if no value. + if ( ! $value ) { + return false; + } + + // Clean value into an array of IDs. + $attachment_ids = array_map( 'intval', acf_array( $value ) ); + + // Find posts in database (ensures all results are real). + $posts = acf_get_posts( + array( + 'post_type' => 'attachment', + 'post__in' => $attachment_ids, + 'update_post_meta_cache' => true, + 'update_post_term_cache' => false, + ) + ); + + // Bail early if no posts found. + if ( ! $posts ) { + return false; + } + + // Format values using field settings. + $value = array(); + foreach ( $posts as $post ) { + + // Return object. + if ( $field['return_format'] == 'object' ) { + $item = $post; + + // Return array. + } elseif ( $field['return_format'] == 'array' ) { + $item = acf_get_attachment( $post ); + + // Return URL. + } elseif ( $field['return_format'] == 'url' ) { + $item = wp_get_attachment_url( $post->ID ); + + // Return ID. + } else { + $item = $post->ID; + } + + // Append item. + $value[] = $item; + } + + // Return. + return $value; + } + + + /** + * description + * + * @type function + * @date 11/02/2014 + * @since 5.0.0 + * + * @param $post_id (int) + * @return $post_id (int) + */ + function validate_value( $valid, $value, $field, $input ) { + + if ( empty( $value ) || ! is_array( $value ) ) { + $value = array(); + } + + if ( count( $value ) < $field['min'] ) { + $valid = _n( '%1$s requires at least %2$s selection', '%1$s requires at least %2$s selections', $field['min'], 'acf' ); + $valid = sprintf( $valid, $field['label'], $field['min'] ); + } + + return $valid; + } + + + /** + * This filter is appied to the $value before it is updated in the db + * + * @type filter + * @since 3.6 + * @date 23/01/13 + * + * @param $value - the value which will be saved in the database + * @param $post_id - the post_id of which the value will be saved + * @param $field - the field array holding all the field options + * + * @return $value - the modified value + */ + function update_value( $value, $post_id, $field ) { + + // Bail early if no value. + if ( empty( $value ) ) { + return $value; + } + + // Convert to array. + $value = acf_array( $value ); + + // Format array of values. + // - ensure each value is an id. + // - Parse each id as string for SQL LIKE queries. + $value = array_map( 'acf_idval', $value ); + $value = array_map( 'strval', $value ); + + // Return value. + return $value; + } + + /** + * Validates file fields updated via the REST API. + * + * @param boolean $valid The current validity booleean + * @param integer $value The value of the field + * @param array $field The field array + * @return boolean|WP + */ + public function validate_rest_value( $valid, $value, $field ) { + if ( ! $valid || ! is_array( $value ) ) { + return $valid; + } + + foreach ( $value as $attachment_id ) { + $file_valid = acf_get_field_type( 'file' )->validate_rest_value( $valid, $attachment_id, $field ); + + if ( is_wp_error( $file_valid ) ) { + return $file_valid; + } + } + + return $valid; + } + + /** + * Return the schema array for the REST API. + * + * @param array $field + * @return array + */ + public function get_rest_schema( array $field ) { + $schema = array( + 'type' => array( 'array', 'null' ), + 'required' => ! empty( $field['required'] ), + 'items' => array( + 'type' => 'number', + ), + ); + + if ( ! empty( $field['min'] ) ) { + $schema['minItems'] = (int) $field['min']; + } + + if ( ! empty( $field['max'] ) ) { + $schema['maxItems'] = (int) $field['max']; + } + + return $schema; + } + + /** + * @see \acf_field::get_rest_links() + * @param mixed $value The raw (unformatted) field value. + * @param integer|string $post_id + * @param array $field + * @return array + */ + public function get_rest_links( $value, $post_id, array $field ) { + $links = array(); + + if ( empty( $value ) ) { + return $links; + } + + foreach ( (array) $value as $object_id ) { + $links[] = array( + 'rel' => 'acf:attachment', + 'href' => rest_url( '/wp/v2/media/' . $object_id ), + 'embeddable' => true, + ); + } + + return $links; + } + + /** + * Apply basic formatting to prepare the value for default REST output. + * + * @param mixed $value + * @param string|integer $post_id + * @param array $field + * @return mixed + */ + public function format_value_for_rest( $value, $post_id, array $field ) { + return acf_format_numerics( $value ); + } + } + + + // initialize + acf_register_field_type( 'acf_field_gallery' ); +endif; // class_exists check + +?> diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-repeater.php b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-repeater.php new file mode 100644 index 00000000..1fbbbf31 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-repeater.php @@ -0,0 +1,1146 @@ +name = 'repeater'; + $this->label = __( 'Repeater', 'acf' ); + $this->category = 'layout'; + $this->description = __( 'Provides a solution for repeating content such as slides, team members, and call-to-action tiles, by acting as a parent to a set of subfields which can be repeated again and again.', 'acf' ); + $this->preview_image = acf_get_url() . '/assets/images/field-type-previews/field-preview-repeater.png'; + $this->doc_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/repeater/', 'docs', 'field-type-selection' ); + $this->tutorial_url = acf_add_url_utm_tags( 'https://www.advancedcustomfields.com/resources/repeater/how-to-use-the-repeater-field/', 'docs', 'field-type-selection' ); + $this->pro = true; + $this->supports = array( 'bindings' => false ); + $this->defaults = array( + 'sub_fields' => array(), + 'min' => 0, + 'max' => 0, + 'rows_per_page' => 20, + 'layout' => 'table', + 'button_label' => '', + 'collapsed' => '', + ); + + // field filters + $this->add_field_filter( 'acf/prepare_field_for_export', array( $this, 'prepare_field_for_export' ) ); + $this->add_field_filter( 'acf/prepare_field_for_import', array( $this, 'prepare_field_for_import' ) ); + + // filters + $this->add_filter( 'acf/validate_field', array( $this, 'validate_any_field' ) ); + $this->add_filter( 'acf/pre_render_fields', array( $this, 'pre_render_fields' ), 10, 2 ); + + add_action( 'wp_ajax_acf/ajax/query_repeater', array( $this, 'ajax_get_rows' ) ); + } + + /** + * Localizes text for the repeater field. + * + * @date 16/12/2015 + * @since 5.3.2 + */ + public function input_admin_enqueue_scripts() { + acf_localize_text( + array( + 'Minimum rows not reached ({min} rows)' => __( 'Minimum rows not reached ({min} rows)', 'acf' ), + 'Maximum rows reached ({max} rows)' => __( 'Maximum rows reached ({max} rows)', 'acf' ), + 'Error loading page' => __( 'Error loading page', 'acf' ), + 'Order will be assigned upon save' => __( 'Order will be assigned upon save', 'acf' ), + ) + ); + } + + /** + * Filters the field array after it's loaded from the database. + * + * @since 3.6 + * @date 23/01/13 + * + * @param array $field The field array holding all the field options. + * @return array + */ + public function load_field( $field ) { + $field['min'] = (int) $field['min']; + $field['max'] = (int) $field['max']; + $sub_fields = acf_get_fields( $field ); + + if ( $sub_fields ) { + $field['sub_fields'] = array_map( + function ( $sub_field ) use ( $field ) { + $sub_field['parent_repeater'] = $field['key']; + return $sub_field; + }, + $sub_fields + ); + } + + if ( empty( $field['rows_per_page'] ) || (int) $field['rows_per_page'] < 1 ) { + $field['rows_per_page'] = 20; + } + + if ( '' === $field['button_label'] ) { + $field['button_label'] = __( 'Add Row', 'acf' ); + } + + return $field; + } + + /** + * Runs on the "acf/pre_render_fields" filter. Used to signify + * that we're currently rendering a repeater field. + * + * @since 6.0.0 + * + * @param array $fields The main field array. + * @param mixed $post_id The post ID for the field being rendered. + * @return array + */ + public function pre_render_fields( $fields, $post_id = false ) { + if ( is_admin() ) { + $this->is_rendering = true; + $this->post_id = $post_id; + } + + return $fields; + } + + /** + * Create the HTML interface for your field + * + * @since 3.6 + * @date 23/01/13 + * + * @param array $field An array holding all the field's data. + */ + public function render_field( $field ) { + $_field = $field; + $field['orig_name'] = $this->get_field_name_from_input_name( $field['name'] ); + $_field['name'] = $field['orig_name']; + $field['total_rows'] = (int) acf_get_metadata_by_field( $this->post_id, $_field ); + $table = new ACF_Repeater_Table( $field ); + $table->render(); + } + + /** + * Create extra options for your field. This is rendered when editing a field. + * The value of $field['name'] can be used (like bellow) to save extra data to the $field + * + * @since 3.6 + * @date 23/01/13 + * + * @param array $field An array holding all the field's data. + */ + function render_field_settings( $field ) { + $args = array( + 'fields' => $field['sub_fields'], + 'parent' => $field['ID'], + 'is_subfield' => true, + ); + $supports_pagination = ( empty( $field['parent_repeater'] ) && empty( $field['parent_layout'] ) ); + ?> +
+
+ +

+
+
+ +
+
+ __( 'Layout', 'acf' ), + 'instructions' => '', + 'class' => 'acf-repeater-layout', + 'type' => 'radio', + 'name' => 'layout', + 'layout' => 'horizontal', + 'choices' => array( + 'table' => __( 'Table', 'acf' ), + 'block' => __( 'Block', 'acf' ), + 'row' => __( 'Row', 'acf' ), + ), + ) + ); + + if ( $supports_pagination ) { + acf_render_field_setting( + $field, + array( + 'label' => __( 'Pagination', 'acf' ), + 'instructions' => __( 'Useful for fields with a large number of rows.', 'acf' ), + 'class' => 'acf-repeater-pagination', + 'type' => 'true_false', + 'name' => 'pagination', + 'ui' => 1, + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Rows Per Page', 'acf' ), + 'instructions' => __( 'Set the number of rows to be displayed on a page.', 'acf' ), + 'class' => 'acf-repeater-pagination-num-rows', + 'type' => 'number', + 'name' => 'rows_per_page', + 'placeholder' => 20, + 'ui' => 1, + 'min' => 1, + 'conditions' => array( + 'field' => 'pagination', + 'operator' => '==', + 'value' => 1, + ), + ) + ); + } + } + + /** + * Renders the field settings used in the "Validation" tab. + * + * @since 6.0 + * + * @param array $field The field settings array. + * @return void + */ + function render_field_validation_settings( $field ) { + $field['min'] = empty( $field['min'] ) ? '' : $field['min']; + $field['max'] = empty( $field['max'] ) ? '' : $field['max']; + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Minimum Rows', 'acf' ), + 'instructions' => '', + 'type' => 'number', + 'name' => 'min', + 'placeholder' => '0', + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Maximum Rows', 'acf' ), + 'instructions' => '', + 'type' => 'number', + 'name' => 'max', + 'placeholder' => '0', + ) + ); + } + + /** + * Renders the field settings used in the "Presentation" tab. + * + * @since 6.0 + * + * @param array $field The field settings array. + * @return void + */ + function render_field_presentation_settings( $field ) { + $choices = array(); + if ( $field['collapsed'] ) { + $sub_field = acf_get_field( $field['collapsed'] ); + + if ( $sub_field ) { + $choices[ $sub_field['key'] ] = $sub_field['label']; + } + } + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Collapsed', 'acf' ), + 'instructions' => __( 'Select a sub field to show when row is collapsed', 'acf' ), + 'type' => 'select', + 'name' => 'collapsed', + 'allow_null' => 1, + 'choices' => $choices, + ) + ); + + acf_render_field_setting( + $field, + array( + 'label' => __( 'Button Label', 'acf' ), + 'instructions' => '', + 'type' => 'text', + 'name' => 'button_label', + 'placeholder' => __( 'Add Row', 'acf' ), + ) + ); + } + + /** + * Filters the field $value after it is loaded from the database. + * + * @since 3.6 + * + * @param mixed $value The value found in the database. + * @param mixed $post_id The $post_id from which the value was loaded. + * @param array $field The field array holding all the field options. + * @return array $value + */ + public function load_value( $value, $post_id, $field ) { + // Bail early if we don't have enough info to load the field. + if ( empty( $value ) || ! is_numeric( $value ) || empty( $field['sub_fields'] ) ) { + return false; + } + + $value = (int) $value; + $rows = array(); + $offset = 0; + $paged = isset( $_POST['paged'] ) ? intval( $_POST['paged'] ) : 1; // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Verified elsewhere. + + // Ensure pagination is disabled inside blocks. + if ( acf_get_data( 'acf_inside_rest_call' ) || doing_action( 'wp_ajax_acf/ajax/fetch-block' ) ) { + $field['pagination'] = false; + } + + if ( ! empty( $field['pagination'] ) && $this->is_rendering ) { + $rows_per_page = isset( $field['rows_per_page'] ) ? (int) $field['rows_per_page'] : 20; + + if ( $rows_per_page < 1 ) { + $rows_per_page = 20; + } + + if ( doing_action( 'wp_ajax_acf/ajax/query_repeater' ) ) { + $offset = ( $paged - 1 ) * $rows_per_page; // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Verified elsewhere. + $value = min( $value, $offset + $rows_per_page ); + } else { + $value = min( $value, $rows_per_page ); + } + } + + for ( $i = $offset; $i < $value; $i++ ) { + $rows[ $i ] = array(); + + foreach ( array_keys( $field['sub_fields'] ) as $j ) { + $sub_field = $field['sub_fields'][ $j ]; + + // Bail early if no name (tab field). + if ( acf_is_empty( $sub_field['name'] ) ) { + continue; + } + + // Update $sub_field name and value. + $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; + $sub_value = acf_get_value( $post_id, $sub_field ); + $rows[ $i ][ $sub_field['key'] ] = $sub_value; + } + } + + return $rows; + } + + /** + * This filter is appied to the $value after it is loaded from the db and before it is returned to the template + * + * @type filter + * @since 3.6 + * + * @param mixed $value The value which was loaded from the database. + * @param mixed $post_id The $post_id from which the value was loaded. + * @param array $field The field array holding all the field options. + * @param boolean $escape_html Should the field return a HTML safe formatted value. + * @return array $value The modified value. + */ + public function format_value( $value, $post_id, $field, $escape_html = false ) { + // bail early if no value + if ( empty( $value ) ) { + return false; + } + + // bail early if not array + if ( ! is_array( $value ) ) { + return false; + } + + // bail early if no sub fields + if ( empty( $field['sub_fields'] ) ) { + return false; + } + + // loop over rows + foreach ( array_keys( $value ) as $i ) { + + // loop through sub fields + foreach ( array_keys( $field['sub_fields'] ) as $j ) { + + // get sub field + $sub_field = $field['sub_fields'][ $j ]; + + // bail early if no name (tab) + if ( acf_is_empty( $sub_field['name'] ) ) { + continue; + } + + // extract value + $sub_value = acf_extract_var( $value[ $i ], $sub_field['key'] ); + + // update $sub_field name + $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; + + // format value + $sub_value = acf_format_value( $sub_value, $post_id, $sub_field, $escape_html ); + + // append to $row + $value[ $i ][ $sub_field['_name'] ] = $sub_value; + } + } + + return $value; + } + + /** + * Validates values for the repeater field + * + * @date 11/02/2014 + * @since 5.0.0 + * + * @param boolean $valid If the field is valid. + * @param mixed $value The value to validate. + * @param array $field The main field array. + * @param string $input The input element's name attribute. + * @return boolean + */ + function validate_value( $valid, $value, $field, $input ) { + // vars + $count = 0; + + // check if is value (may be empty string) + if ( is_array( $value ) ) { + + // remove acfcloneindex + if ( isset( $value['acfcloneindex'] ) ) { + unset( $value['acfcloneindex'] ); + } + + // count + $count = count( $value ); + } + + // validate required + if ( $field['required'] && ! $count ) { + $valid = false; + } + + // min + $min = (int) $field['min']; + if ( empty( $field['pagination'] ) && $min && $count < $min ) { + + // create error + $error = __( 'Minimum rows not reached ({min} rows)', 'acf' ); + $error = str_replace( '{min}', $min, $error ); + + // return + return $error; + } + + // validate value + if ( $count ) { + + // bail early if no sub fields + if ( ! $field['sub_fields'] ) { + return $valid; + } + + // loop rows + foreach ( $value as $i => $row ) { + + // Skip rows that were deleted in paginated repeaters. + if ( false !== strpos( $i, '_deleted' ) ) { + continue; + } + + // loop sub fields + foreach ( $field['sub_fields'] as $sub_field ) { + + // vars + $k = $sub_field['key']; + + // test sub field exists + if ( ! isset( $row[ $k ] ) ) { + continue; + } + + // validate + acf_validate_value( $row[ $k ], $sub_field, "{$input}[{$i}][{$k}]" ); + } + // end loop sub fields + } + // end loop rows + } + + return $valid; + } + + /** + * This function will update a value row. + * + * @date 15/2/17 + * @since 5.5.8 + * + * @param array $row + * @param integer $i + * @param array $field + * @param mixed $post_id + * @return boolean + */ + function update_row( $row, $i, $field, $post_id ) { + // bail early if no layout reference + if ( ! is_array( $row ) ) { + return false; + } + + // bail early if no layout + if ( empty( $field['sub_fields'] ) ) { + return false; + } + + foreach ( $field['sub_fields'] as $sub_field ) { + $value = null; + + if ( array_key_exists( $sub_field['key'], $row ) ) { + $value = $row[ $sub_field['key'] ]; + } elseif ( array_key_exists( $sub_field['name'], $row ) ) { + $value = $row[ $sub_field['name'] ]; + } else { + // Value does not exist. + continue; + } + + // modify name for save + $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; + + // update field + acf_update_value( $value, $post_id, $sub_field ); + } + + return true; + } + + /** + * This function will delete a value row. + * + * @date 15/2/17 + * @since 5.5.8 + * + * @param integer $i + * @param array $field + * @param mixed $post_id + * @return boolean + */ + function delete_row( $i, $field, $post_id ) { + // bail early if no sub fields + if ( empty( $field['sub_fields'] ) ) { + return false; + } + + foreach ( $field['sub_fields'] as $sub_field ) { + // modify name for delete + $sub_field['name'] = "{$field['name']}_{$i}_{$sub_field['name']}"; + + // delete value + acf_delete_value( $post_id, $sub_field ); + } + + return true; + } + + /** + * Filters the $value before it is updated in the database. + * + * @since 3.6 + * @date 23/01/13 + * + * @param mixed $value The value which will be saved in the database. + * @param mixed $post_id The $post_id of which the value will be saved. + * @param array $field The field array holding all the field options. + * @return mixed $value + */ + public function update_value( $value, $post_id, $field ) { + // Bail early if no sub fields. + if ( empty( $field['sub_fields'] ) ) { + return $value; + } + + if ( ! is_array( $value ) ) { + $value = array(); + } + + if ( isset( $value['acfcloneindex'] ) ) { + unset( $value['acfcloneindex'] ); + } + + $new_value = 0; + $old_value = (int) acf_get_metadata_by_field( $post_id, $field ); + + if ( ! empty( $field['pagination'] ) && did_action( 'acf/save_post' ) && ! isset( $_POST['_acf_form'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Value not used. + $old_rows = acf_get_value( $post_id, $field ); + $old_rows = is_array( $old_rows ) ? $old_rows : array(); + $edited_rows = array(); + $deleted_rows = array(); + $reordered_rows = array(); + $new_rows = array(); + + // Categorize the submitted values, so we know what to do with them. + foreach ( $value as $key => $row ) { + if ( ! is_array( $row ) ) { + continue; + } + + // Check if this is a new row. + if ( false === strpos( $key, 'row' ) ) { + unset( $row['acf_changed'] ); + + // Check if this new row was inserted before an existing row. + $reordered_row_num = isset( $row['acf_reordered'] ) ? (int) $row['acf_reordered'] : false; + + if ( false !== $reordered_row_num && $reordered_row_num <= $old_value ) { + $reordered_rows[ $key ] = $reordered_row_num; + } else { + $new_rows[ $key ] = $row; + } + + continue; + } + + $row_num = (int) str_replace( 'row-', '', $key ); + + if ( isset( $row['acf_deleted'] ) ) { + $deleted_rows[] = $row_num; + } elseif ( isset( $row['acf_reordered'] ) ) { + $reordered_rows[ $row_num ] = (int) $row['acf_reordered']; + } else { + unset( $row['acf_changed'] ); + $edited_rows[ $row_num ] = $row; + } + } + + // Process any row deletions first, but don't remove their keys yet. + foreach ( $deleted_rows as $deleted_row ) { + $this->delete_row( $deleted_row, $field, $post_id ); + $old_rows[ $deleted_row ] = 'acf_deleted'; + } + + // Update any existing rows that were edited. + foreach ( $edited_rows as $key => $row ) { + if ( array_key_exists( $key, $old_rows ) ) { + $old_rows[ $key ] = $row; + } + } + + $rows_to_move = array(); + $new_rows_to_move = array(); + foreach ( $reordered_rows as $old_order => $new_order ) { + if ( is_int( $old_order ) ) { + $rows_to_move[ $new_order ][] = $value[ 'row-' . $old_order ]; + unset( $old_rows[ $old_order ] ); + } else { + $new_rows_to_move[ $new_order ][] = $value[ $old_order ]; + } + } + + // Iterate over existing moved rows first. + if ( ! empty( $rows_to_move ) ) { + ksort( $rows_to_move ); + foreach ( $rows_to_move as $key => $values ) { + array_splice( $old_rows, $key, 0, $values ); + } + } + + // Iterate over inserted/duplicated rows in reverse order, so they're inserted into the correct spot. + if ( ! empty( $new_rows_to_move ) ) { + krsort( $new_rows_to_move ); + foreach ( $new_rows_to_move as $key => $values ) { + array_splice( $old_rows, $key, 0, $values ); + } + } + + // Append any new rows. + foreach ( $new_rows as $new_row ) { + $old_rows[] = $new_row; + } + + // Update the rows in the database. + $new_row_num = 0; + foreach ( $old_rows as $key => $row ) { + if ( 'acf_deleted' === $row ) { + unset( $old_rows[ $key ] ); + continue; + } + + $this->update_row( $row, $new_row_num, $field, $post_id ); + ++$new_row_num; + } + + // Calculate the total number of rows that will be saved after this update. + $new_value = count( $old_rows ); + } else { + $i = -1; + + foreach ( $value as $row ) { + ++$i; + + // Bail early if no row. + if ( ! is_array( $row ) ) { + continue; + } + + $this->update_row( $row, $i, $field, $post_id ); + ++$new_value; + } + } + + // Remove old rows. + if ( $old_value > $new_value ) { + for ( $i = $new_value; $i < $old_value; $i++ ) { + $this->delete_row( $i, $field, $post_id ); + } + } + + // Save empty string for empty value. + if ( empty( $new_value ) ) { + $new_value = ''; + } + + return $new_value; + } + + /** + * Deletes any subfields after the field has been deleted. + * + * @date 4/04/2014 + * @since 5.0.0 + * + * @param array $field The main field array. + * @return void + */ + function delete_field( $field ) { + // Bail early if no subfields. + if ( empty( $field['sub_fields'] ) ) { + return; + } + + // Delete any subfields. + foreach ( $field['sub_fields'] as $sub_field ) { + acf_delete_field( $sub_field['ID'] ); + } + } + + /** + * Deletes a value from the database. + * + * @date 1/07/2015 + * @since 5.2.3 + * + * @param integer $post_id The post ID to delete the value from. + * @param string $key The meta name/key (unused). + * @param array $field The main field array. + * @return void + */ + function delete_value( $post_id, $key, $field ) { + // Get the old value from the database. + $old_value = (int) acf_get_metadata_by_field( $post_id, $field ); + + // Bail early if no rows or no subfields. + if ( ! $old_value || empty( $field['sub_fields'] ) ) { + return; + } + + for ( $i = 0; $i < $old_value; $i++ ) { + $this->delete_row( $i, $field, $post_id ); + } + } + + /** + * This filter is applied to the $field before it is saved to the database. + * + * @since 3.6 + * + * @param array $field The field array holding all the field options. + * @return array + */ + public function update_field( $field ) { + unset( $field['sub_fields'] ); + return $field; + } + + /** + * This filter is applied to the $field before it is duplicated and saved to the database. + * + * @since 3.6 + * @date 23/01/13 + * + * @param array $field The field array holding all the field options. + * @return array + */ + function duplicate_field( $field ) { + // get sub fields + $sub_fields = acf_extract_var( $field, 'sub_fields' ); + + // save field to get ID + $field = acf_update_field( $field ); + + // duplicate sub fields + acf_duplicate_fields( $sub_fields, $field['ID'] ); + + return $field; + } + + /** + * This function will translate field settings. + * + * @date 8/03/2016 + * @since 5.3.2 + * + * @param array $field The main field array. + * @return array + */ + function translate_field( $field ) { + $field['button_label'] = acf_translate( $field['button_label'] ); + return $field; + } + + /** + * This function will add compatibility for the 'column_width' setting + * + * @date 30/1/17 + * @since 5.5.6 + * + * @param array $field The main field array. + * @return array + */ + function validate_any_field( $field ) { + // width has changed + if ( isset( $field['column_width'] ) ) { + $field['wrapper']['width'] = acf_extract_var( $field, 'column_width' ); + } + + return $field; + } + + /** + * Prepares the field for export. + * + * @date 11/03/2014 + * @since 5.0.0 + * + * @param array $field The field settings. + * @return array + */ + function prepare_field_for_export( $field ) { + // Check for subfields. + if ( ! empty( $field['sub_fields'] ) ) { + $field['sub_fields'] = acf_prepare_fields_for_export( $field['sub_fields'] ); + } + + return $field; + } + + /** + * Returns a flat array of fields containing all subfields ready for import. + * + * @date 11/03/2014 + * @since 5.0.0 + * + * @param array $field The field settings. + * @return array + */ + function prepare_field_for_import( $field ) { + // Check for sub fields. + if ( ! empty( $field['sub_fields'] ) ) { + $sub_fields = acf_extract_var( $field, 'sub_fields' ); + + // Modify sub fields. + foreach ( $sub_fields as $i => $sub_field ) { + $sub_fields[ $i ]['parent'] = $field['key']; + $sub_fields[ $i ]['menu_order'] = $i; + } + + // Return array of [field, sub_1, sub_2, ...]. + return array_merge( array( $field ), $sub_fields ); + } + + return $field; + } + + /** + * Additional validation for the repeater field when submitted via REST. + * + * @param boolean $valid The current validity booleean + * @param integer $value The value of the field + * @param array $field The field array + * @return boolean|WP + */ + public function validate_rest_value( $valid, $value, $field ) { + if ( ! is_array( $value ) && is_null( $value ) ) { + $param = sprintf( '%s[%s]', $field['prefix'], $field['name'] ); + $data = array( + 'param' => $param, + 'value' => $value, + ); + $error = sprintf( __( '%s must be of type array or null.', 'acf' ), $param ); + return new WP_Error( 'rest_invalid_param', $error, $param ); + } + + return $valid; + } + + /** + * Return the schema array for the REST API. + * + * @param array $field + * @return array + */ + public function get_rest_schema( array $field ) { + $schema = array( + 'type' => array( 'array', 'null' ), + 'required' => ! empty( $field['required'] ), + 'items' => array( + 'type' => 'object', + 'properties' => array(), + ), + ); + + foreach ( $field['sub_fields'] as $sub_field ) { + if ( $sub_field_schema = acf_get_field_rest_schema( $sub_field ) ) { + $schema['items']['properties'][ $sub_field['name'] ] = $sub_field_schema; + } + } + + if ( ! empty( $field['min'] ) ) { + $schema['minItems'] = (int) $field['min']; + } + + if ( ! empty( $field['max'] ) ) { + $schema['maxItems'] = (int) $field['max']; + } + + return $schema; + } + + /** + * Apply basic formatting to prepare the value for default REST output. + * + * @param mixed $value + * @param integer|string $post_id + * @param array $field + * @return array|mixed + */ + public function format_value_for_rest( $value, $post_id, array $field ) { + if ( empty( $value ) || ! is_array( $value ) || empty( $field['sub_fields'] ) ) { + return null; + } + + // Loop through each row and within that, each sub field to process sub fields individually. + foreach ( $value as &$row ) { + foreach ( $field['sub_fields'] as $sub_field ) { + + // Bail early if the field has no name (tab). + if ( acf_is_empty( $sub_field['name'] ) ) { + continue; + } + + // Extract the sub field 'field_key'=>'value' pair from the $row and format it. + $sub_value = acf_extract_var( $row, $sub_field['key'] ); + $sub_value = acf_format_value_for_rest( $sub_value, $post_id, $sub_field ); + + // Add the sub field value back to the $row but mapped to the field name instead + // of the key reference. + $row[ $sub_field['name'] ] = $sub_value; + } + } + + return $value; + } + + /** + * Takes the provided input name and turns it into a field name that + * works with repeater fields that are subfields of other fields. + * + * @param string $input_name The name attribute used in the repeater. + * @return string|boolean + */ + public function get_field_name_from_input_name( $input_name ) { + $parts = array(); + preg_match_all( '/\[([^\]]*)\]/', is_null( $input_name ) ? '' : $input_name, $parts ); + + if ( ! isset( $parts[1] ) ) { + return false; + } + + $field_keys = $parts[1]; + $name_parts = array(); + + foreach ( $field_keys as $field_key ) { + // Preserve acfcloneindex + if ( $field_key === 'acfcloneindex' ) { + $name_parts[] = 'acfcloneindex'; + continue; + } + + // Handle row numbers (row-0, row-1, etc.) + if ( strpos( $field_key, 'row-' ) === 0 ) { + $row_num = substr( $field_key, 4 ); + if ( is_numeric( $row_num ) ) { + $name_parts[] = (int) $row_num; + continue; + } + } + + // Handle compound keys (field_..._field_...) + $compound_keys = preg_split( '/_field_/', $field_key ); + if ( count( $compound_keys ) > 1 ) { + foreach ( $compound_keys as $i => $sub_key ) { + if ( $i > 0 ) { + $sub_key = 'field_' . $sub_key; + } + + // Seamless clone fields use compound keys which can be skipped. + $field = acf_get_field( $sub_key ); + if ( $field && 'clone' === $field['type'] && 'seamless' === $field['display'] ) { + continue; + } + + $name_parts[] = $field && ! empty( $field['name'] ) ? $field['name'] : $sub_key; + } + continue; + } + + // Handle standard field keys + if ( strpos( $field_key, 'field_' ) === 0 ) { + + // Skip clone fields with prefix_name disabled. + $field = acf_get_field( $field_key ); + if ( $field && $field['type'] === 'clone' && empty( $field['prefix_name'] ) ) { + continue; + } + + $name_parts[] = $field && ! empty( $field['name'] ) ? $field['name'] : $field_key; + continue; + } + + // Fallback: just add as is + $name_parts[] = $field_key; + } + + return implode( '_', $name_parts ); + } + + /** + * Returns an array of rows used to populate the repeater table over AJAX. + * + * @since 6.0.0 + * + * @return void|WP_Error + */ + public function ajax_get_rows() { + $args = acf_request_args( + array( + 'field_name' => '', + 'field_key' => '', + 'field_prefix' => '', + 'post_id' => 0, + 'rows_per_page' => 0, + 'refresh' => false, + 'nonce' => '', + ) + ); + + if ( ! acf_verify_ajax( $args['nonce'], $args['field_key'], true ) ) { + $error = array( 'error' => __( 'Invalid nonce.', 'acf' ) ); + wp_send_json_error( $error, 401 ); + } + + if ( '' === $args['field_name'] || '' === $args['field_key'] ) { + $error = array( 'error' => __( 'Invalid field key or name.', 'acf' ) ); + wp_send_json_error( $error, 404 ); + } + + $field = acf_get_field( $args['field_key'] ); + $post_id = acf_get_valid_post_id( $args['post_id'] ); + $response = array(); + + if ( ! $field || ! $post_id ) { + $error = array( 'error' => __( 'There was an error retrieving the field.', 'acf' ) ); + wp_send_json_error( $error, 404 ); + } + + // Make sure we have a valid field. + $field = acf_validate_field( $field ); + + // Make sure that we only get a subset of the rows. + $this->is_rendering = true; + + $args['rows_per_page'] = (int) $args['rows_per_page']; + + if ( $args['rows_per_page'] ) { + $field['rows_per_page'] = $args['rows_per_page']; + } + + /** + * We have to swap out the field name and prefix with the ones sent via JS, + * as the repeater could be inside a subfield. + */ + $field['name'] = $args['field_name']; + $field['prefix'] = $args['field_prefix']; + $field['value'] = acf_get_value( $post_id, $field ); + + if ( $args['refresh'] ) { + $response['total_rows'] = (int) acf_get_metadata_by_field( $post_id, $field ); + } + + // Render the rows to be sent back via AJAX. + $field = acf_prepare_field( $field ); + $repeater_table = new ACF_Repeater_Table( $field ); + $response['rows'] = $repeater_table->rows( true ); + + wp_send_json_success( $response ); + } + } + + // initialize + acf_register_field_type( 'acf_field_repeater' ); +endif; // class_exists check diff --git a/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-repeater-table.php b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-repeater-table.php new file mode 100644 index 00000000..9ebfdc77 --- /dev/null +++ b/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-repeater-table.php @@ -0,0 +1,497 @@ +field = $field; + $this->sub_fields = $field['sub_fields']; + + // Default to non-paginated repeaters. + if ( empty( $this->field['pagination'] ) ) { + $this->field['pagination'] = false; + } + + // We don't yet support pagination inside other repeaters or flexible content fields. + if ( ! empty( $this->field['parent_repeater'] ) || ! empty( $this->field['parent_layout'] ) ) { + $this->field['pagination'] = false; + } + + // We don't yet support pagination in frontend forms or inside blocks. + if ( ! is_admin() || acf_get_data( 'acf_inside_rest_call' ) || doing_action( 'wp_ajax_acf/ajax/fetch-block' ) ) { + $this->field['pagination'] = false; + } + + $this->setup(); + } + + /** + * Sets up the field for rendering. + * + * @since 6.0.0 + * + * @return void + */ + private function setup() { + if ( $this->field['collapsed'] ) { + foreach ( $this->sub_fields as &$sub_field ) { + // Add target class. + if ( $sub_field['key'] == $this->field['collapsed'] ) { + $sub_field['wrapper']['class'] .= ' -collapsed-target'; + } + } + } + + if ( $this->field['max'] ) { + // If max 1 row, don't show order. + if ( 1 == $this->field['max'] ) { + $this->show_order = false; + } + + // If max == min, don't show add or remove buttons. + if ( $this->field['max'] <= $this->field['min'] ) { + $this->show_remove = false; + $this->show_add = false; + } + } + + if ( empty( $this->field['rows_per_page'] ) ) { + $this->field['rows_per_page'] = 20; + } + + if ( (int) $this->field['rows_per_page'] < 1 ) { + $this->field['rows_per_page'] = 20; + } + + $this->value = $this->prepare_value(); + } + + /** + * Prepares the repeater values for rendering. + * + * @since 6.0.0 + * + * @return array + */ + private function prepare_value() { + $value = is_array( $this->field['value'] ) ? $this->field['value'] : array(); + + if ( empty( $this->field['pagination'] ) ) { + // If there are fewer values than min, populate the extra values. + if ( $this->field['min'] ) { + $value = array_pad( $value, $this->field['min'], array() ); + } + + // If there are more values than max, remove some values. + if ( $this->field['max'] ) { + $value = array_slice( $value, 0, $this->field['max'] ); + } + } + + $value['acfcloneindex'] = array(); + + return $value; + } + + /** + * Renders the full repeater table. + * + * @since 6.0.0 + * + * @return void + */ + public function render() { + // Attributes for main wrapper div. + $div = array( + 'class' => 'acf-repeater -' . $this->field['layout'], + 'data-min' => $this->field['min'], + 'data-max' => $this->field['max'], + 'data-pagination' => ! empty( $this->field['pagination'] ), + 'data-prefix' => $this->field['prefix'], + ); + + if ( $this->field['pagination'] ) { + $div['data-per_page'] = $this->field['rows_per_page']; + $div['data-total_rows'] = $this->field['total_rows']; + $div['data-orig_name'] = $this->field['orig_name']; + $div['data-nonce'] = wp_create_nonce( 'acf_field_' . $this->field['type'] . '_' . $this->field['key'] ); + } + + if ( empty( $this->value ) ) { + $div['class'] .= ' -empty'; + } + ?> +
> + $this->field['name'], + 'value' => '', + 'class' => 'acf-repeater-hidden-input', + ) + ); + ?> + + thead(); ?> + + rows(); ?> + +
+ table_actions(); ?> +
+ field['layout'] ) { + return; + } + ?> + + + show_order ) : ?> + + + + sub_fields as $sub_field ) : + // Prepare field (allow sub fields to be removed). + $sub_field = acf_prepare_field( $sub_field ); + if ( ! $sub_field ) { + continue; + } + + // Define attrs. + $attrs = array( + 'class' => 'acf-th', + 'data-name' => $sub_field['_name'], + 'data-type' => $sub_field['type'], + 'data-key' => $sub_field['key'], + ); + + if ( $sub_field['wrapper']['width'] ) { + $attrs['data-width'] = $sub_field['wrapper']['width']; + $attrs['style'] = 'width: ' . $sub_field['wrapper']['width'] . '%;'; + } + + // Remove "id" to avoid "for" attribute on