Plugin Directory

Changeset 3294227


Ignore:
Timestamp:
05/15/2025 02:16:55 PM (11 months ago)
Author:
vasyltech
Message:

Official 7.0.2

Location:
advanced-access-manager
Files:
327 added
15 edited

Legend:

Unmodified
Added
Removed
  • advanced-access-manager/trunk/aam.php

    r3290564 r3294227  
    44 * Plugin Name: Advanced Access Manager
    55 * Description: Powerfully robust WordPress plugin designed to help you control every aspect of your website, your way.
    6  * Version: 7.0.1
     6 * Version: 7.0.2
    77 * Author: VasylTech LLC <support@aamplugin.com>
    88 * Author URI: https://aamportal.com
     
    147147     * @access public
    148148     *
    149      * @version 7.0.0
     149     * @version 7.0.2
    150150     */
    151151    public static function on_plugins_loaded()
    152152    {
     153        // Load AAM
     154        self::get_instance();
     155
    153156        // Load all the defined AAM services
    154157        foreach(self::SERVICES as $service_class => $flag) {
     
    157160            }
    158161        }
    159 
    160         // Load AAM
    161         self::get_instance();
    162162    }
    163163
     
    288288    define('AAM_MEDIA', plugins_url('/media', __FILE__));
    289289    define('AAM_KEY', 'advanced-access-manager');
    290     define('AAM_VERSION', '7.0.1');
     290    define('AAM_VERSION', '7.0.2');
    291291    define('AAM_BASEDIR', __DIR__);
    292292
  • advanced-access-manager/trunk/application/Addon/Repository.php

    r3290564 r3294227  
    3232     * Note! This is the latest version at the time of AAM publishing
    3333     *
    34      * @version 7.0.0
     34     * @version 7.0.2
    3535     */
    36     const LATEST_PREMIUM_VERSION = '7.0.1';
     36    const LATEST_PREMIUM_VERSION = '7.0.2';
    3737
    3838    /**
  • advanced-access-manager/trunk/application/Backend/Manager.php

    r3290564 r3294227  
    367367     *
    368368     * @return void
    369      *
    370      * @access public
    371      * @version 6.0.0
     369     * @access public
     370     *
     371     * @version 7.0.2
    372372     */
    373373    public function ajax()
     
    376376
    377377        // Clean buffer to make sure that nothing messing around with system
    378         while (@ob_end_clean()) { /* Close all the open buffers and flush them */ }
     378        while (ob_get_level() > 0) {
     379            ob_end_clean();
     380        }
    379381
    380382        // Process ajax request
  • advanced-access-manager/trunk/application/Framework/Service/BackendMenu.php

    r3286780 r3294227  
    357357     * @access private
    358358     *
    359      * @version 7.0.0
     359     * @version 7.0.2
    360360     */
    361361    private function _get_raw_menu()
     
    364364        global $menu, $submenu;
    365365
    366         if (empty($_cache)) {
     366        if ((defined('DOING_AJAX') && DOING_AJAX)
     367            || $this->misc->get_current_area() === 'api'
     368        ) {
     369           $result = $_cache = $this->cache->get(self::CACHE_OPTION);
     370        } elseif (empty($_cache)) {
    367371            $result        = [];
    368372            $persist_cache = false;
    369373
    370374            if (!empty($menu)) {
    371                 $result['menu'] = $this->_filter_menu_items($menu);
     375                $result['menu'] = $this->_prepare_menu_items($menu);
    372376                $persist_cache  = true;
    373377            }
    374378
    375379            if (!empty($submenu)) {
    376                 $result['submenu'] = $this->_filter_submenu_items($submenu);
     380                $result['submenu'] = $this->_prepare_submenu_items($submenu);
    377381                $persist_cache     = true;
    378382            }
     
    380384            if ($persist_cache) {
    381385                $this->cache->set(self::CACHE_OPTION, $result, 31536000);
    382             }
    383 
    384             if (empty($result)) { // Either AJAX or RESTful API call
    385                 $result = $this->cache->get(self::CACHE_OPTION);
    386386            }
    387387
     
    395395
    396396    /**
    397      * Filter menu items
     397     * Prepare menu items to be cached
    398398     *
    399399     * @param array $items
     
    402402     * @access private
    403403     *
    404      * @version 7.0.0
    405      */
    406     private function _filter_menu_items($items)
     404     * @version 7.0.2
     405     */
     406    private function _prepare_menu_items($items)
    407407    {
    408408        $response = [];
     
    418418
    419419    /**
    420      * Filter submenu item list
     420     * Prepare submenu item list
    421421     *
    422422     * @param array $items
     
    425425     * @access private
    426426     *
    427      * @version 7.0.0
    428      */
    429     private function _filter_submenu_items($items)
     427     * @version 7.0.2
     428     */
     429    private function _prepare_submenu_items($items)
    430430    {
    431431        $response = [];
  • advanced-access-manager/trunk/application/Framework/Service/Metaboxes.php

    r3286780 r3294227  
    373373     * @access private
    374374     *
    375      * @version 7.0.0
     375     * @version 7.0.2
    376376     */
    377377    private function _prepare_metabox_slug($metabox)
     
    380380        if (is_array($metabox) && isset($metabox['callback'])) {
    381381            $result = $this->misc->callable_to_slug($metabox['callback']);
     382
     383            if (!empty($metabox['args']['taxonomy'])) {
     384                $result = $metabox['args']['taxonomy'] . '_' . $result;
     385            }
    382386
    383387            // Taking into consideration Closures
  • advanced-access-manager/trunk/application/Framework/Utility/Misc.php

    r3290570 r3294227  
    263263        $res = $post;
    264264
    265         if (get_the_ID()) {
    266             $res = get_post(get_the_ID());
     265        if ($wp_query->is_post_type_archive) {
     266            // Getting a slug of a browsing page and try to fetch a page
     267            // by the slug
     268            $res = get_page_by_path(trim($this->get($_SERVER, 'REQUEST_URI'), '/'));
    267269        } elseif (!empty($wp_query->queried_object)) {
    268270            $res = $wp_query->queried_object;
    269         } elseif (!empty($wp_query->post)) {
    270             $res = $wp_query->post;
     271        } elseif (!empty($wp_query->queried_object_id)) {
     272            $res = get_post($wp_query->queried_object_id);
    271273        } elseif (!empty($wp_query->query_vars['p'])) {
    272274            $res = get_post($wp_query->query_vars['p']);
     
    293295        } elseif (isset($_POST['post_ID'])) {
    294296            $res = get_post(filter_input(INPUT_POST, 'post_ID', FILTER_VALIDATE_INT));
     297        } elseif (!empty($wp_query->post)) {
     298            $res = $wp_query->post;
     299        } elseif (get_the_ID()) {
     300            $res = get_post(get_the_ID());
    295301        }
    296302
     
    546552
    547553    /**
     554     * Determine if given user is an administrator
     555     *
     556     * @param int $user_id
     557     *
     558     * @return boolean
     559     * @access public
     560     *
     561     * @version 7.0.2
     562     */
     563    public function is_admin($user_id = null)
     564    {
     565        $result = false;
     566        $user   = empty($user_id) ? wp_get_current_user() : get_userdata($user_id);
     567
     568        if (is_a($user, WP_User::class) && $user->exists()) {
     569            $result = in_array('administrator', $user->roles, true);
     570        }
     571
     572        return $result;
     573    }
     574
     575    /**
    548576     * Convert term slug or ID to WP_Term
    549577     *
  • advanced-access-manager/trunk/application/Restful/Mu.php

    r3286780 r3294227  
    6262            $permission_cb = function() {
    6363                return current_user_can('aam_manager')
    64                     && AAM::api()->misc->is_super_admin();
     64                    && AAM::api()->misc->is_admin();
    6565            };
    6666
  • advanced-access-manager/trunk/application/Service/BackendMenu.php

    r3286780 r3294227  
    4747     * @access protected
    4848     *
    49      * @version 7.0.0
     49     * @version 7.0.2
    5050     */
    5151    protected function initialize_hooks()
     
    5555            // does not have the ability to manage admin menu through AAM UI
    5656            add_filter('parent_file', function($parent_file) {
    57                 if ((is_admin()
    58                     && filter_input(INPUT_GET, 'page') === 'aam')
    59                     && AAM::api()->misc->is_super_admin()
     57                if (is_admin()
     58                    && filter_input(INPUT_GET, 'page') === 'aam'
     59                    && current_user_can('aam_manage_backend_menu')
    6060                ) {
    61                    AAM::api()->backend_menu()->get_items();
     61                    AAM::api()->backend_menu()->get_items();
    6262                } else {
    6363                    $this->filter_menu();
  • advanced-access-manager/trunk/application/Service/Content.php

    r3286780 r3294227  
    122122                global $wp_query;
    123123
    124                 if ($wp_query->is_single || $wp_query->is_page) {
     124                if (is_single()
     125                    || is_page()
     126                    || is_post_type_archive()
     127                    || $wp_query->is_posts_page
     128                ) {
    125129                    $this->_authorize_post_access();
    126130                }
     
    209213     * @global WP_Query $wp_query
    210214     *
    211      * @version 7.0.0
     215     * @version 7.0.2
    212216     */
    213217    private function _authorize_post_access()
     
    222226            } elseif ($service->is_redirected($post)) {
    223227                AAM::api()->redirect->do_redirect($service->get_redirect($post));
     228            } elseif ($service->is_teaser_message_set($post)) {
     229                AAM::api()->redirect->do_redirect([
     230                    'type'    => 'custom_message',
     231                    'message' => $service->get_teaser_message($post)
     232                ]);
    224233            }
    225234        }
     
    517526     * @return WP_REST_Response
    518527     *
    519      * @version 7.0.0
     528     * @version 7.0.2
    520529     */
    521530    private function _authorize_post_rest_access($response, $post, $request)
     
    560569                'message' => 'The content is restricted.'
    561570            ]);
     571        } elseif ($service->is_teaser_message_set($post)) {
     572            $response->set_status(401);
     573            $response->set_data([
     574                'code'    => 'rest_unauthorized',
     575                'message' => $service->get_teaser_message($post)
     576            ]);
    562577        }
    563578
     
    818833     * @access private
    819834     *
    820      * @version 7.0.0
     835     * @version 7.0.2
    821836     */
    822837    private function _map_read_post_caps($caps, $post_id, $password = null)
     
    830845        } elseif ($service->is_restricted($post_id)) {
    831846            $caps[] = 'do_not_allow';
     847        } elseif ($service->is_teaser_message_set($post_id)) {
     848            $caps[] = 'do_not_allow';
    832849        }
    833850
  • advanced-access-manager/trunk/application/Service/Core.php

    r3290564 r3294227  
    6363     * @return void
    6464     *
    65      * @version 7.0.0
     65     * @version 7.0.2
    6666     */
    6767    protected function __construct()
     
    8383        // Ensuring safely of transactions
    8484        add_filter('gettext_advanced-access-manager', function($translation) {
    85             return esc_js($translation);
     85            return esc_html($translation);
    8686        });
    8787
  • advanced-access-manager/trunk/application/Service/Identity.php

    r3290564 r3294227  
    6666     * @access protected
    6767     *
    68      * @version 7.0.0
     68     * @version 7.0.2
    6969     */
    7070    protected function initialize_hooks()
     
    103103        }, 10, 2);
    104104        add_action('check_passwords', function($login, &$pwd1, &$pwd2) {
    105             if (!AAM::api()->misc->is_super_admin()) {
     105            if (!AAM::api()->misc->is_admin()) {
    106106                $this->_check_passwords($login, $pwd1, $pwd2);
    107107            }
  • advanced-access-manager/trunk/application/Service/Metaboxes.php

    r3286780 r3294227  
    8686     * @access private
    8787     *
    88      * @version 7.0.0
     88     * @version 7.0.2
    8989     */
    9090    private function _initialize_metaboxes($post_type)
     
    107107                            );
    108108
     109                            // If $args contain taxonomy - prepend it to ensure that
     110                            // it is unique
     111                            if (!empty($box['args']['taxonomy'])) {
     112                                $slug = $box['args']['taxonomy'] . '_' . $slug;
     113                            }
     114
    109115                            // If Closure is used for callback, use the ID instead
    110116                            if (empty($slug)){
     
    185191     * @access private
    186192     *
    187      * @version 7.0.0
     193     * @version 7.0.2
    188194     */
    189195    private function _filter_zones($zones, $screen_id)
     
    193199        foreach ($zones as $zone => $priorities) {
    194200            foreach ($priorities as $metaboxes) {
    195                 foreach ($metaboxes as $id => $metabox) {
    196                     if (!empty($metabox)
    197                         && $service->is_denied($metabox, $screen_id) === true
    198                     ) {
     201                foreach ($metaboxes as $id => $mbox) {
     202                    if (!empty($mbox) && $service->is_denied($mbox, $screen_id)) {
    199203                        remove_meta_box($id, $screen_id, $zone);
    200204                    }
  • advanced-access-manager/trunk/application/Service/Widgets.php

    r3286780 r3294227  
    203203     * @access private
    204204     *
    205      * @version 7.0.0
     205     * @version 7.0.2
    206206     */
    207207    private function _filter_dashboard_widgets()
     
    215215                foreach($groups as $widgets) {
    216216                    foreach($widgets as $widget) {
    217                         if ($service->is_denied($widget)) {
     217                        if (!empty($widget) && $service->is_denied($widget)) {
    218218                            remove_meta_box($widget['id'], 'dashboard', $priority);
    219219                        }
  • advanced-access-manager/trunk/media/js/aam.js

    r3286780 r3294227  
    15061506
    15071507                if ($(container).length) {
    1508                     //reset button
     1508                    // Reset button
    15091509                    $('#policy_reset').bind('click', function () {
    15101510                        const btn      = this;
     
    23442344                    });
    23452345
    2346                     //reset button
     2346                    // Reset button
    23472347                    $('#metabox-reset').bind('click', function () {
    23482348                        const _this = $(this);
     
    50955095                    });
    50965096
    5097                     //reset button
     5097                    // Reset button
    50985098                    $('#route-reset').bind('click', function () {
    50995099                        const _btn = $(this);
     
    52225222                    });
    52235223
    5224                     //reset button
     5224                    // Reset button
    52255225                    $('#uri-reset').bind('click', function () {
    52265226                        const _btn = $(this);
     
    52965296                                        $('#url_access_trigger_callback_value').val()
    52975297                                    )
     5298                                }
     5299                            } else if (type === 'login_redirect') {
     5300                                payload.redirect = {
     5301                                    type
    52985302                                }
    52995303                            }
     
    66846688
    66856689                        getAAM().queueRequest(function () {
    6686                             $.ajax(`${getLocal().rest_base}aam/v2/reset`, {
     6690                            $.ajax(`${getLocal().rest_base}aam/v2/core/reset`, {
    66876691                                type: 'POST',
    66886692                                dataType: 'json',
  • advanced-access-manager/trunk/readme.txt

    r3290564 r3294227  
    55Requires PHP: 5.6.0
    66Tested up to: 6.8.0
    7 Stable tag: 7.0.1
     7Stable tag: 7.0.2
    88
    99Your WordPress security starts within — with AAM. Take control of your WordPress website and solve security gaps today.
     
    6161== Changelog ==
    6262
     63= 7.0.2 =
     64* Fixed: Restricted post with Teaser Message is not enforced [https://github.com/aamplugin/advanced-access-manager/issues/460](https://github.com/aamplugin/advanced-access-manager/issues/460)
     65* Fixed: The "Redirect to the login page" option does not persist [https://github.com/aamplugin/advanced-access-manager/issues/459](https://github.com/aamplugin/advanced-access-manager/issues/459)
     66* Fixed: The Reset All AAM settings button does not work [https://github.com/aamplugin/advanced-access-manager/issues/457](https://github.com/aamplugin/advanced-access-manager/issues/457)
     67* Fixed: Metaboxes for custom taxonomies have the same slug [https://github.com/aamplugin/advanced-access-manager/issues/456](https://github.com/aamplugin/advanced-access-manager/issues/456)
     68* Fixed: PHP Notice: AAM_Framework_Service_Widgets(): Invalid widget provided in /wp-includes/functions.php [https://github.com/aamplugin/advanced-access-manager/issues/443](https://github.com/aamplugin/advanced-access-manager/issues/443)
     69* Fixed: AAM labels quote escape [https://github.com/aamplugin/advanced-access-manager/issues/455](https://github.com/aamplugin/advanced-access-manager/issues/455)
     70* Fixed: List of backend menu items is empty on the Backend Menu tab [https://github.com/aamplugin/advanced-access-manager/issues/454](https://github.com/aamplugin/advanced-access-manager/issues/454)
     71* Fixed: Issue with clearing buffer [https://github.com/aamplugin/advanced-access-manager/issues/453](https://github.com/aamplugin/advanced-access-manager/issues/453)
     72* Fixed: Uncaught Error: Call to a member function list() on null in /../Framework/Manager.php:450 [https://github.com/aamplugin/advanced-access-manager/issues/452](https://github.com/aamplugin/advanced-access-manager/issues/452)
     73* Enhancement: Give the ability to control archive pages [https://github.com/aamplugin/advanced-access-manager/issues/458](https://github.com/aamplugin/advanced-access-manager/issues/458)
     74
    6375= 7.0.1 =
    6476* Fixed: Access Denied message when aam_access_dashboard capability is created [https://github.com/aamplugin/advanced-access-manager/issues/451](https://github.com/aamplugin/advanced-access-manager/issues/451)
     
    7991* Fixed: Incorrectly invoked translation function [https://github.com/aamplugin/advanced-access-manager/issues/440](https://github.com/aamplugin/advanced-access-manager/issues/440)
    8092* Fixed: Download audit report issue [https://github.com/aamplugin/advanced-access-manager/issues/438](https://github.com/aamplugin/advanced-access-manager/issues/438)
    81 
    82 = 6.9.49 =
    83 * Fixed: Resetting all settings does not actually reset them all [https://github.com/aamplugin/advanced-access-manager/issues/436](https://github.com/aamplugin/advanced-access-manager/issues/436)
    84 * New: Allow to prepare the executive audit report [https://github.com/aamplugin/advanced-access-manager/issues/437](https://github.com/aamplugin/advanced-access-manager/issues/437)
    85 
    86 = 6.9.48 =
    87 * Fixed: Notice in WordPress if the none-default language is active [https://github.com/aamplugin/advanced-access-manager/issues/435](https://github.com/aamplugin/advanced-access-manager/issues/435)
    88 * Fixed: PHP Warning: Array to string conversion in /.../RoleTransparencyCheck.php on line 83 [https://github.com/aamplugin/advanced-access-manager/issues/433](https://github.com/aamplugin/advanced-access-manager/issues/433)
    89 * New: Give the ability to share security audit report [https://github.com/aamplugin/advanced-access-manager/issues/434](https://github.com/aamplugin/advanced-access-manager/issues/434)
    90 
    91 = 6.9.47 =
    92 * Fixed: PHP Warning: Array to string conversion in /.../RoleTransparencyCheck.php on line 83 [https://github.com/aamplugin/advanced-access-manager/issues/433](https://github.com/aamplugin/advanced-access-manager/issues/433)
    93 
    94 = 6.9.46 =
    95 * Added: Run AAM Audit periodically [https://github.com/aamplugin/advanced-access-manager/issues/432](https://github.com/aamplugin/advanced-access-manager/issues/432)
    96 * Added: Allow the ability to jump to a specific AAM tab [https://github.com/aamplugin/advanced-access-manager/issues/431](https://github.com/aamplugin/advanced-access-manager/issues/431)
    97 
    98 = 6.9.45 =
    99 * Added: Introduce AAM Security Score Widget [https://github.com/aamplugin/advanced-access-manager/issues/430](https://github.com/aamplugin/advanced-access-manager/issues/430)
    100 
    101 = 6.9.44 =
    102 * Removed: AI Chatbot service. We are moving it all to [aamportal.com](https://aamportal.com) website as Virtual assistant
    103 * Removed: Contact form. We are changing our customer support policy and directing customers to the [contact us](https://aamportal.com/contact-us) page instead
    104 
    105 = 6.9.43=
    106 * Fixed: Can't update roles with whitespaces in slug [https://github.com/aamplugin/advanced-access-manager/issues/428](https://github.com/aamplugin/advanced-access-manager/issues/428)
    107 * Added: Enhance Security Scan with additional steps [https://github.com/aamplugin/advanced-access-manager/issues/427](https://github.com/aamplugin/advanced-access-manager/issues/427)
    108 
    109 = 6.9.42 =
    110 * Fixed: UI bug fixes [https://github.com/aamplugin/advanced-access-manager/issues/426](https://github.com/aamplugin/advanced-access-manager/issues/426)
    111 * Fixed: Custom user roles not copying correctly [https://github.com/aamplugin/advanced-access-manager/issues/419](https://github.com/aamplugin/advanced-access-manager/issues/419)
    112 * Changed: DataTables warning and REST API Forbidden [https://github.com/aamplugin/advanced-access-manager/issues/420](https://github.com/aamplugin/advanced-access-manager/issues/420)
    113 
    114 = 6.9.41 =
    115 * Added: New Security Audit service [https://github.com/aamplugin/advanced-access-manager/issues/425](https://github.com/aamplugin/advanced-access-manager/issues/425)
    116 
    117 = 6.9.39 =
    118 * Fixed: Can't toggle capabilities when "Edit/Delete Capabilities" option is disabled [https://github.com/aamplugin/advanced-access-manager/issues/422](https://github.com/aamplugin/advanced-access-manager/issues/422)
    119 * Fixed: Fail to create a custom capability with digits [https://github.com/aamplugin/advanced-access-manager/issues/423](https://github.com/aamplugin/advanced-access-manager/issues/423)
    120 * Fixed: Deleted user may cause DataTables errors on AAM UI [https://github.com/aamplugin/advanced-access-manager/issues/424](https://github.com/aamplugin/advanced-access-manager/issues/424)
    121 
    122 = 6.9.38 =
    123 * Fixed: Capabilities that do not follow WP naming standards can't be toggled [https://github.com/aamplugin/advanced-access-manager/issues/418](https://github.com/aamplugin/advanced-access-manager/issues/418)
    124 * Fixed: URL Access UI bug [https://github.com/aamplugin/advanced-access-manager/issues/417](https://github.com/aamplugin/advanced-access-manager/issues/417)
    125 * Fixed: Incorrectly handled PostList AAM shortcode [https://github.com/aamplugin/advanced-access-manager/issues/416](https://github.com/aamplugin/advanced-access-manager/issues/416)
    126 * Fixed: Uncaught TypeError: AAM_Framework_Service_Settings::set_settings(): Argument #1 [https://github.com/aamplugin/advanced-access-manager/issues/415](https://github.com/aamplugin/advanced-access-manager/issues/415)
    127 
    128 = 6.9.37 =
    129 * Fixed: Uncaught InvalidArgumentException: Redirect type allow does not accept status codes [https://github.com/aamplugin/advanced-access-manager/issues/413](https://github.com/aamplugin/advanced-access-manager/issues/413)
    130 * Fixed: Incorrectly handled reduced permissions to AAM UI [https://github.com/aamplugin/advanced-access-manager/issues/414](https://github.com/aamplugin/advanced-access-manager/issues/414)
    131 * Added: Allow to bypass recommended by WordPress core naming convention for capabilities [https://github.com/aamplugin/advanced-access-manager/issues/412](https://github.com/aamplugin/advanced-access-manager/issues/412)
    132 * Added: Be more verbose with RESTful API errors [https://github.com/aamplugin/advanced-access-manager/issues/411](https://github.com/aamplugin/advanced-access-manager/issues/411)
    133 
    134 = 6.9.36 =
    135 * Fixed: [Allowed memory size of XXX bytes exhausted (tried to allocate YYY bytes)](https://github.com/aamplugin/advanced-access-manager/issues/407)
    136 * Fixed: [Deprecated PHP notice](https://github.com/aamplugin/advanced-access-manager/issues/408)
    137 * Fixed: [Not all admin menu items get properly protected](https://github.com/aamplugin/advanced-access-manager/issues/409)
    138 * Added: [Allow the ability to report unexpected application errors](https://github.com/aamplugin/advanced-access-manager/issues/410)
    139 
    140 = 6.9.35 =
    141 * Fixed: PHP Fatal error: Uncaught Error: Call to undefined function switch_to_user_locale [https://github.com/aamplugin/advanced-access-manager/issues/398](https://github.com/aamplugin/advanced-access-manager/issues/398)
    142 * Fixed: The Posts & Terms inheritance indicator is shown incorrectly [https://github.com/aamplugin/advanced-access-manager/issues/403](https://github.com/aamplugin/advanced-access-manager/issues/403)
    143 * Fixed: Not all posts are listed on the Posts & Terms tab [https://github.com/aamplugin/advanced-access-manager/issues/399](https://github.com/aamplugin/advanced-access-manager/issues/399)
    144 * Fixed: Role with only numeric numbers is not properly handled [https://github.com/aamplugin/advanced-access-manager/issues/400](https://github.com/aamplugin/advanced-access-manager/issues/400)
    145 * Fixed: DataTables warning: table id=jwt-list - Requested unknown parameter '2' for row 0 [https://github.com/aamplugin/advanced-access-manager/issues/404](https://github.com/aamplugin/advanced-access-manager/issues/404)
    146 * Fixed: Reset to default does not work properly in UI [https://github.com/aamplugin/advanced-access-manager/issues/401](https://github.com/aamplugin/advanced-access-manager/issues/401)
    147 * Changed: By default, turn off the AI assistant [https://github.com/aamplugin/advanced-access-manager/issues/402](https://github.com/aamplugin/advanced-access-manager/issues/402)
    148 * Added: Develop a shortcode that renders list of posts [https://github.com/aamplugin/advanced-access-manager/issues/405](https://github.com/aamplugin/advanced-access-manager/issues/405)
    149 
    150 = 6.9.34 =
    151 * Changed: Move AAM settings management to framework [https://github.com/aamplugin/advanced-access-manager/issues/396](https://github.com/aamplugin/advanced-access-manager/issues/396)
    152 * Changed: Move AAM configuration management to framework [https://github.com/aamplugin/advanced-access-manager/issues/395](https://github.com/aamplugin/advanced-access-manager/issues/395)
    153 
    154 = 6.9.33 =
    155 * Fixed: AAM RESTful API does not honor user's selected language [https://github.com/aamplugin/advanced-access-manager/issues/394](https://github.com/aamplugin/advanced-access-manager/issues/394)
    156 * Changed: Refactor how user status is handled [https://github.com/aamplugin/advanced-access-manager/issues/393](https://github.com/aamplugin/advanced-access-manager/issues/393)
    157 * Changed: Revise RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/392](https://github.com/aamplugin/advanced-access-manager/issues/392)
    158 
    159 = 6.9.32 =
    160 * Fixed: The "Access Manager Metabox" does not function during initial load [https://github.com/aamplugin/advanced-access-manager/issues/391](https://github.com/aamplugin/advanced-access-manager/issues/391)
    161 * Changed: Introduce RESTful API to manage users [https://github.com/aamplugin/advanced-access-manager/issues/390](https://github.com/aamplugin/advanced-access-manager/issues/390)
    162 * Added: Extend Multisite support [https://github.com/aamplugin/advanced-access-manager/issues/389](https://github.com/aamplugin/advanced-access-manager/issues/389)
    163 
    164 = 6.9.31 =
    165 * Fixed: Overwritten flag for content resources does not take into consideration scope [https://github.com/aamplugin/advanced-access-manager/issues/385](https://github.com/aamplugin/advanced-access-manager/issues/385)
    166 * Fixed: User expiration flag does not clear when resettings all AAM settings [https://github.com/aamplugin/advanced-access-manager/issues/382](https://github.com/aamplugin/advanced-access-manager/issues/382)
    167 * Added: Fully develop "Content" RESTful API endpoints [https://github.com/aamplugin/advanced-access-manager/issues/386](https://github.com/aamplugin/advanced-access-manager/issues/386)
    168 * Added: Give the ability to extend AAM Framework with additional methods [https://github.com/aamplugin/advanced-access-manager/issues/387](https://github.com/aamplugin/advanced-access-manager/issues/387)
    169 * Changed: Move "Posts & Terms" reset feature to RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/384](https://github.com/aamplugin/advanced-access-manager/issues/384)
    170 * Changed: Speed-up AAM PHP Framework [https://github.com/aamplugin/advanced-access-manager/issues/388](https://github.com/aamplugin/advanced-access-manager/issues/388)
    171 
    172 = 6.9.30 =
    173 * Fixed: The list of terms for any selected taxonomy is not listed [https://github.com/aamplugin/advanced-access-manager/issues/376](https://github.com/aamplugin/advanced-access-manager/issues/376)
    174 * Fixed: An error of type E_PARSE was caused in line 210 of the file /.../application/Backend/Manager.php [https://github.com/aamplugin/advanced-access-manager/issues/377](https://github.com/aamplugin/advanced-access-manager/issues/377)
    175 * Fixed: Incorrectly merging access controls for identity governance service with multirole support [https://github.com/aamplugin/advanced-access-manager/issues/378](https://github.com/aamplugin/advanced-access-manager/issues/378)
    176 * Fixed: Internal inheritance info incorrectly set for Default access level [https://github.com/aamplugin/advanced-access-manager/issues/379](https://github.com/aamplugin/advanced-access-manager/issues/379)
    177 
    178 = 6.9.29 =
    179 * Fixed: Warning: Attempt to read property "capabilities" on null in [https://github.com/aamplugin/advanced-access-manager/issues/374](https://github.com/aamplugin/advanced-access-manager/issues/374)
    180 * Fixed: Warning: Attempt to read property "ID" on bool in [https://github.com/aamplugin/advanced-access-manager/issues/373](https://github.com/aamplugin/advanced-access-manager/issues/373)
    181 * Fixed: Stripped query strings in new account "set password" links AND Disallowed password reset [https://github.com/aamplugin/advanced-access-manager/issues/372](https://github.com/aamplugin/advanced-access-manager/issues/372)
    182 * Changed: Move Posts & Terms service to RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/375](https://github.com/aamplugin/advanced-access-manager/issues/375)
    183 
    184 = 6.9.28 =
    185 * Fixed: Message: base64_encode(): Passing null to parameter #1 [https://github.com/aamplugin/advanced-access-manager/issues/370](https://github.com/aamplugin/advanced-access-manager/issues/370)
    186 * Fixed: Menu items that recycle the same ID are incorrectly handled [https://github.com/aamplugin/advanced-access-manager/issues/364](https://github.com/aamplugin/advanced-access-manager/issues/364)
    187 * Fixed: The login brute-force feature incorrectly counts hits [https://github.com/aamplugin/advanced-access-manager/issues/366](https://github.com/aamplugin/advanced-access-manager/issues/366)
    188 * Changed: Take into account multi-byte URLs [https://github.com/aamplugin/advanced-access-manager/issues/371](https://github.com/aamplugin/advanced-access-manager/issues/371)
    189 * Added: New "User Governance" feature [https://github.com/aamplugin/advanced-access-manager/issues/369](https://github.com/aamplugin/advanced-access-manager/issues/369)
    190 * Added: Allow the ability to chain method return value for Access Policy marker path [https://github.com/aamplugin/advanced-access-manager/issues/365](https://github.com/aamplugin/advanced-access-manager/issues/365)
    191 * Added: Add "in" and "not in" operand to the Hook filters [https://github.com/aamplugin/advanced-access-manager/issues/367](https://github.com/aamplugin/advanced-access-manager/issues/367)
    192 * Added: Allow the ability to turn off "Aarmie AI Chatbot" [https://github.com/aamplugin/advanced-access-manager/issues/368](https://github.com/aamplugin/advanced-access-manager/issues/368)
    193 * Deprecated: The "User Level Filters" [https://aamportal.com/article/demystifying-the-aam-user-level-filter-service](https://aamportal.com/article/demystifying-the-aam-user-level-filter-service)
    194 
    195 = 6.9.27 =
    196 * Fixed: Backend Menu & Toolbar services do not show any items [https://github.com/aamplugin/advanced-access-manager/issues/362](https://github.com/aamplugin/advanced-access-manager/issues/362)
    197 * Added: Introduce Aarmie virtual assistant [https://github.com/aamplugin/advanced-access-manager/issues/361](https://github.com/aamplugin/advanced-access-manager/issues/361)
    198 
    199 = 6.9.26 =
    200 * Fixed: Metaboxes & Widgets service appends list for each refresh [https://github.com/aamplugin/advanced-access-manager/issues/358](https://github.com/aamplugin/advanced-access-manager/issues/358)
    201 * Fixed: Fatal error: No such file or directory in /.../application/Core/Migration.php:184 [https://github.com/aamplugin/advanced-access-manager/issues/357](https://github.com/aamplugin/advanced-access-manager/issues/357)
    202 * New:   Add the ability to change HTTP status code for "Access Denied" message [https://github.com/aamplugin/advanced-access-manager/issues/359](https://github.com/aamplugin/advanced-access-manager/issues/359)
    203 * Changed: Revise all redirect functionality and standardize internal implementation [https://github.com/aamplugin/advanced-access-manager/issues/360](https://github.com/aamplugin/advanced-access-manager/issues/360)
    204 
    205 = 6.9.25 =
    206 * Fixed: Access Policy Param "Enforce" did not enforce [https://github.com/aamplugin/advanced-access-manager/issues/355](https://github.com/aamplugin/advanced-access-manager/issues/355)
    207 * Fixed: Uncaught TypeError: AAM_Core_Policy_Token::evaluate(): Argument #3 ($args) must be of type array, null given [https://github.com/aamplugin/advanced-access-manager/issues/353](https://github.com/aamplugin/advanced-access-manager/issues/353)
    208 * Added: Enhance Hook Access Policy Resource [https://github.com/aamplugin/advanced-access-manager/issues/354](https://github.com/aamplugin/advanced-access-manager/issues/354)
    209 
    210 = 6.9.24 =
    211 * Fixed: Incorrectly merged access controls with 3 or more roles [https://github.com/aamplugin/advanced-access-manager/issues/352](https://github.com/aamplugin/advanced-access-manager/issues/352)
    212 * Fixed: Unnecessary forward slashes escapes in Access Policies [https://github.com/aamplugin/advanced-access-manager/issues/350](https://github.com/aamplugin/advanced-access-manager/issues/350)
    213 * New: Added the "Operator" option for Access Policies Conditions [https://github.com/aamplugin/advanced-access-manager/issues/351](https://github.com/aamplugin/advanced-access-manager/issues/351)
    214 * New: Added support for IP CIDR annotations for Access Policies [https://github.com/aamplugin/advanced-access-manager/issues/349](https://github.com/aamplugin/advanced-access-manager/issues/349)
    215 
    216 = 6.9.23 =
    217 * Fixed: Type E_Error in Visibility.php [https://github.com/aamplugin/advanced-access-manager/issues/347](https://github.com/aamplugin/advanced-access-manager/issues/347)
    218 * Fixed: The previous selected role does not visually uncheck if switched to manage visitors or default [https://github.com/aamplugin/advanced-access-manager/issues/348](https://github.com/aamplugin/advanced-access-manager/issues/348)
    219 * Changed: The minimum required WordPress version was lifted from 5.0.0 to 5.2.0.
    220 
    221 = 6.9.22 =
    222 * Fixed: Redirect to login page for visitors does not work [https://github.com/aamplugin/advanced-access-manager/issues/346](https://github.com/aamplugin/advanced-access-manager/issues/346)
    223 * Fixed: Fatal error: Uncaught TypeError: method_exists() [https://github.com/aamplugin/advanced-access-manager/issues/344](https://github.com/aamplugin/advanced-access-manager/issues/344)
    224 * Changed: Added "mergeAlign.limit" property [https://github.com/aamplugin/advanced-access-manager/issues/345](https://github.com/aamplugin/advanced-access-manager/issues/345)
    225 * Changed: Change how ${USER.ip} marker works [https://github.com/aamplugin/advanced-access-manager/issues/338](https://github.com/aamplugin/advanced-access-manager/issues/338)
    226 
    227 = 6.9.21 =
    228 * Fixed: Content visibility issue with multi-role setup [https://github.com/aamplugin/advanced-access-manager/issues/342](https://github.com/aamplugin/advanced-access-manager/issues/342)
    229 * Fixed: URL Access feature does not save "Redirect to page" [https://github.com/aamplugin/advanced-access-manager/issues/339](https://github.com/aamplugin/advanced-access-manager/issues/339)
    230 * Changed: Enhance plugins security pasture [https://github.com/aamplugin/advanced-access-manager/issues/341](https://github.com/aamplugin/advanced-access-manager/issues/341)
    231 
    232 = 6.9.20 =
    233 * Fixed: When deleting URL Access rule, the "Unexpected Application Error" is displayed [https://github.com/aamplugin/advanced-access-manager/issues/337](https://github.com/aamplugin/advanced-access-manager/issues/337)
    234 * Fixed: URL Access does not correctly handle multiple roles [https://github.com/aamplugin/advanced-access-manager/issues/336](https://github.com/aamplugin/advanced-access-manager/issues/336)
    235 * Changed: Add-ons page overhaul [https://github.com/aamplugin/advanced-access-manager/issues/335](https://github.com/aamplugin/advanced-access-manager/issues/335)
    236 
    237 = 6.9.19 =
    238 * Fixed: Handling "Profile" submenu access [https://github.com/aamplugin/advanced-access-manager/issues/334](https://github.com/aamplugin/advanced-access-manager/issues/334)
    239 * Fixed: Passing null to parameter #2 ($string) of type string is deprecated in /../Content.php on line 223 [https://github.com/aamplugin/advanced-access-manager/issues/333](https://github.com/aamplugin/advanced-access-manager/issues/333)
    240 * Fixed: Undefined array key 2 in /../application/Core/Object/Menu.php on line 136 [](https://github.com/aamplugin/advanced-access-manager/issues/331https://github.com/aamplugin/advanced-access-manager/issues/331)
    241 * Changed: Improve Login Redirect Shortcode redirect [https://github.com/aamplugin/advanced-access-manager/issues/332](https://github.com/aamplugin/advanced-access-manager/issues/332)
    242 
    243 = 6.9.18 =
    244 * Fixed: DataTables alert when URL Access service has at least one rule [https://github.com/aamplugin/advanced-access-manager/issues/330](https://github.com/aamplugin/advanced-access-manager/issues/330)
    245 * Fixed: AAM core caching override [https://github.com/aamplugin/advanced-access-manager/issues/329](https://github.com/aamplugin/advanced-access-manager/issues/329)
    246 * Fixed: PHP Deprecated: preg_replace(): Passing null to parameter [https://github.com/aamplugin/advanced-access-manager/issues/326](https://github.com/aamplugin/advanced-access-manager/issues/326)
    247 * Changed: Update core API to allow defining option autoload [https://github.com/aamplugin/advanced-access-manager/issues/328](https://github.com/aamplugin/advanced-access-manager/issues/328)
    248 * Changed: Update the "Welcome" service to include most common use-cases [https://github.com/aamplugin/advanced-access-manager/issues/327](https://github.com/aamplugin/advanced-access-manager/issues/327)
    249 
    250 = 6.9.17 =
    251 * Fixed: Fatal error: array_merge(): Argument #2 must be of type array, string given in .../LoginForm.php:46 [https://github.com/aamplugin/advanced-access-manager/issues/318](https://github.com/aamplugin/advanced-access-manager/issues/318)
    252 * Fixed: Custom HTML message is escaped [https://github.com/aamplugin/advanced-access-manager/issues/322](https://github.com/aamplugin/advanced-access-manager/issues/322)
    253 * Added New: Add the ability to add additional properties to URL Access form [https://github.com/aamplugin/advanced-access-manager/issues/320](https://github.com/aamplugin/advanced-access-manager/issues/320)
    254 * Added New: Enhance Access Policy Hook resource [https://github.com/aamplugin/advanced-access-manager/issues/323](https://github.com/aamplugin/advanced-access-manager/issues/323)
    255 * Changed: Move away from WP core transients [https://github.com/aamplugin/advanced-access-manager/issues/319](https://github.com/aamplugin/advanced-access-manager/issues/319)
    256 * Changed: Move xpath resolver to its own class [https://github.com/aamplugin/advanced-access-manager/issues/321](https://github.com/aamplugin/advanced-access-manager/issues/321)
    257 * Changed: Change the RESTful API rest_pre_dispatch filter priority [https://github.com/aamplugin/advanced-access-manager/issues/324](https://github.com/aamplugin/advanced-access-manager/issues/324)
    258 * Changed: Changed the minimum required WP version to 5.0.0 [https://github.com/aamplugin/advanced-access-manager/issues/325](https://github.com/aamplugin/advanced-access-manager/issues/325)
    259 
    260 = 6.9.16 =
    261 * Fixed: Error when trying to edit the menu [https://github.com/aamplugin/advanced-access-manager/issues/315](https://github.com/aamplugin/advanced-access-manager/issues/315)
    262 * Breaking Change: Removed `callback` attribute from `aam` shortcodes [https://github.com/aamplugin/advanced-access-manager/issues/316](https://github.com/aamplugin/advanced-access-manager/issues/316)
    263 * Changed: Improved shortcode remote IP detection [https://github.com/aamplugin/advanced-access-manager/issues/317](https://github.com/aamplugin/advanced-access-manager/issues/317)
    264 
    265 = 6.9.14 =
    266 * Fixed: PHP deprecated notices [https://github.com/aamplugin/advanced-access-manager/issues/305](https://github.com/aamplugin/advanced-access-manager/issues/305)
    267 * Fixed: Admin Menu get corrupted if the first submenu is restricted [https://github.com/aamplugin/advanced-access-manager/issues/307](https://github.com/aamplugin/advanced-access-manager/issues/307)
    268 * Fixed: Multipage role list malfunction [https://github.com/aamplugin/advanced-access-manager/issues/306](https://github.com/aamplugin/advanced-access-manager/issues/306)
    269 * Fixed: Empty error message when role fail to create [https://github.com/aamplugin/advanced-access-manager/issues/310](https://github.com/aamplugin/advanced-access-manager/issues/310)
    270 * Changed: Adding ref=plugin query param to all links that point to aamportal.com [https://github.com/aamplugin/advanced-access-manager/issues/308](https://github.com/aamplugin/advanced-access-manager/issues/308)
    271 * Added New: Introduce Access Denied Redirect RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/309](https://github.com/aamplugin/advanced-access-manager/issues/309)
    272 
    273 = 6.9.13 =
    274 * Fixed: User object does not initialize after login [https://github.com/aamplugin/advanced-access-manager/issues/300](https://github.com/aamplugin/advanced-access-manager/issues/300)
    275 * Fixed: Wildcard for URL Access malfunction [https://github.com/aamplugin/advanced-access-manager/issues/296](https://github.com/aamplugin/advanced-access-manager/issues/296)
    276 * Fixed: Restoring a previous Policy Revision adds backslashes (thank you @solaceten) [https://github.com/aamplugin/advanced-access-manager/issues/294](https://github.com/aamplugin/advanced-access-manager/issues/294)
    277 * Fixed: Incorrectly handled login redirect with access policy [https://github.com/aamplugin/advanced-access-manager/issues/299](https://github.com/aamplugin/advanced-access-manager/issues/299)
    278 * Changed: Move toolbar cache to transient & increase cache ttl [https://github.com/aamplugin/advanced-access-manager/issues/297](https://github.com/aamplugin/advanced-access-manager/issues/297)
    279 * Added New: Add additional helpful tips to the AAM UI [https://github.com/aamplugin/advanced-access-manager/issues/298](https://github.com/aamplugin/advanced-access-manager/issues/298)
    280 * Added New: Introduce Metaboxes & Widgets RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/301](https://github.com/aamplugin/advanced-access-manager/issues/301)
    281 * Added New: Introduce Backend Menu RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/293](https://github.com/aamplugin/advanced-access-manager/issues/293)
    282 * Added New: Introduce Admin Toolbar RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/302](https://github.com/aamplugin/advanced-access-manager/issues/302)
    283 * Added New: Add notification about premium add-on update availability [https://github.com/aamplugin/advanced-access-manager/issues/303](https://github.com/aamplugin/advanced-access-manager/issues/303)
    284 * Added New: Introduce restricted mode for RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/304](https://github.com/aamplugin/advanced-access-manager/issues/304)
    285 
    286 = 6.9.12 =
    287 * Fixed: URL Access skips query params for new rules [https://github.com/aamplugin/advanced-access-manager/issues/283](https://github.com/aamplugin/advanced-access-manager/issues/283)
    288 * Fixed: Access policy does not apply for newly logged in user [https://github.com/aamplugin/advanced-access-manager/issues/286](https://github.com/aamplugin/advanced-access-manager/issues/286)
    289 * Fixed: Compatibility with PHP 5.6 [https://github.com/aamplugin/advanced-access-manager/issues/287](https://github.com/aamplugin/advanced-access-manager/issues/287)
    290 * Changed: Rewrite the Login Redirect service to use RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/285](https://github.com/aamplugin/advanced-access-manager/issues/285)
    291 * Changed: Rewrite the Logout Redirect service to use RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/291](https://github.com/aamplugin/advanced-access-manager/issues/291)
    292 * Changed: Rewrite the 404 Redirect service to use RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/292](https://github.com/aamplugin/advanced-access-manager/issues/292)
    293 * Changed: Backend Menu UI improvement [https://github.com/aamplugin/advanced-access-manager/issues/288](https://github.com/aamplugin/advanced-access-manager/issues/288)
    294 * Changed: Admin toolbar UI improvement [https://github.com/aamplugin/advanced-access-manager/issues/289](https://github.com/aamplugin/advanced-access-manager/issues/289)
    295 * Changed: Metaboxes & Widgets UI improvement [https://github.com/aamplugin/advanced-access-manager/issues/290](https://github.com/aamplugin/advanced-access-manager/issues/290)
    296 * Added New: Allow redefining the login message when access is restricted [https://github.com/aamplugin/advanced-access-manager/issues/284](https://github.com/aamplugin/advanced-access-manager/issues/284)
    297 
    298 = 6.9.11 =
    299 * Fixed: Change role does not work for expired access [https://github.com/aamplugin/advanced-access-manager/issues/279](https://github.com/aamplugin/advanced-access-manager/issues/279)
    300 * Changed: Enhance JWT Token RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/278](https://github.com/aamplugin/advanced-access-manager/issues/278)
    301 * Changed: Replace deprecated DateTime format [https://github.com/aamplugin/advanced-access-manager/issues/281](https://github.com/aamplugin/advanced-access-manager/issues/281)
    302 * Changed: Improve user experience during plugin activation [https://github.com/aamplugin/advanced-access-manager/issues/282](https://github.com/aamplugin/advanced-access-manager/issues/282)
    303 
    304 = 6.9.10 =
    305 * Fixed: Can't see AAM settings when editing page [https://github.com/aamplugin/advanced-access-manager/issues/270](https://github.com/aamplugin/advanced-access-manager/issues/270)
    306 * Fixed: The set_slug should not sanitize key [https://github.com/aamplugin/advanced-access-manager/issues/271](https://github.com/aamplugin/advanced-access-manager/issues/271)
    307 * Fixed: Admin Menu restriction edge-case [https://github.com/aamplugin/advanced-access-manager/issues/272](https://github.com/aamplugin/advanced-access-manager/issues/272)
    308 * Changed: Refactor JWT Token Service [https://github.com/aamplugin/advanced-access-manager/issues/273](https://github.com/aamplugin/advanced-access-manager/issues/273)
    309 * Changed: Refactor the API Route Service [https://github.com/aamplugin/advanced-access-manager/issues/274](https://github.com/aamplugin/advanced-access-manager/issues/274)
    310 * Changed: Normalize Role ID [https://github.com/aamplugin/advanced-access-manager/issues/275](https://github.com/aamplugin/advanced-access-manager/issues/275)
    311 * Changed: Stop using user_status column [https://github.com/aamplugin/advanced-access-manager/issues/276](https://github.com/aamplugin/advanced-access-manager/issues/276)
    312 
    313 = 6.9.9 =
    314 * Fixed: Undefined array key "callback" [https://github.com/aamplugin/advanced-access-manager/issues/264](https://github.com/aamplugin/advanced-access-manager/issues/264)
    315 * Fixed: PHP Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string [https://github.com/aamplugin/advanced-access-manager/issues/265](https://github.com/aamplugin/advanced-access-manager/issues/265)
    316 * Changed: Disabling the "Render Access Manager Metabox" by default [https://github.com/aamplugin/advanced-access-manager/issues/268](https://github.com/aamplugin/advanced-access-manager/issues/268)
    317 * Changed: https://github.com/aamplugin/advanced-access-manager/issues/266 [https://github.com/aamplugin/advanced-access-manager/issues/266](https://github.com/aamplugin/advanced-access-manager/issues/266)
    318 * Added: Include MU plugins in the policy dependency check [https://github.com/aamplugin/advanced-access-manager/issues/267](https://github.com/aamplugin/advanced-access-manager/issues/267)
    319 
    320 = 6.9.8 =
    321 * Fixed: Fix the missing token_expires [https://github.com/aamplugin/advanced-access-manager/issues/263](https://github.com/aamplugin/advanced-access-manager/issues/263)
    322 * Fixed: DataTables warning: table id=role-list - Ajax error [https://github.com/aamplugin/advanced-access-manager/issues/262](https://github.com/aamplugin/advanced-access-manager/issues/262)
    323 * Fixed: List of users does not filter [https://github.com/aamplugin/advanced-access-manager/issues/261](https://github.com/aamplugin/advanced-access-manager/issues/261)
    324 
    325 = 6.9.7 =
    326 * Fixed: DataTables warning: table id=role-list [https://github.com/aamplugin/advanced-access-manager/issues/258](https://github.com/aamplugin/advanced-access-manager/issues/258)
    327 * Fixed: PHP Fatal error: Uncaught ArgumentCountError [https://github.com/aamplugin/advanced-access-manager/issues/259](https://github.com/aamplugin/advanced-access-manager/issues/259)
    328 * Added New: Warn user about disabling RESTful API [https://github.com/aamplugin/advanced-access-manager/issues/260](https://github.com/aamplugin/advanced-access-manager/issues/260)
    329 
    330 = 6.9.6 =
    331 * Fixed: Role XXX already exists [https://github.com/aamplugin/advanced-access-manager/issues/250](https://github.com/aamplugin/advanced-access-manager/issues/250)
    332 * Fixed: Clean-up deprecated warnings [https://github.com/aamplugin/advanced-access-manager/issues/252](https://github.com/aamplugin/advanced-access-manager/issues/252)
    333 * Added New: RESTful API to manage Roles [https://github.com/aamplugin/advanced-access-manager/issues/253](https://github.com/aamplugin/advanced-access-manager/issues/253)
    334 * Added New: Introducing AAM Developer Framework [https://github.com/aamplugin/advanced-access-manager/issues/254](https://github.com/aamplugin/advanced-access-manager/issues/254)
    335 * Added New: Enhance AAM API to allow settings reset [https://github.com/aamplugin/advanced-access-manager/issues/249](https://github.com/aamplugin/advanced-access-manager/issues/249)
    336 * Changed: Simplify premium offering functionality further [https://github.com/aamplugin/advanced-access-manager/issues/255](https://github.com/aamplugin/advanced-access-manager/issues/255)
    337 * Changed: Remove all references to aamplugin.com [https://github.com/aamplugin/advanced-access-manager/issues/256](https://github.com/aamplugin/advanced-access-manager/issues/256)
    338 
    339 = 6.9.5 =
    340 * Fixed: Duplicated ConfigPress editor [https://github.com/aamplugin/advanced-access-manager/issues/241](https://github.com/aamplugin/advanced-access-manager/issues/241)
    341 * Changed: Switch to aamportal.com API for the premium add-ons [https://github.com/aamplugin/advanced-access-manager/issues/243](https://github.com/aamplugin/advanced-access-manager/issues/243)
    342 * Changed: Improve AAM Admin Menu feature performance [https://github.com/aamplugin/advanced-access-manager/issues/240](https://github.com/aamplugin/advanced-access-manager/issues/240)
    343 
    344 = 6.9.4 =
    345 * Fixed: Incorrectly escaped string values [https://github.com/aamplugin/advanced-access-manager/issues/239](https://github.com/aamplugin/advanced-access-manager/issues/239)
    346 * Fixed: Incorrectly handled revoked token validation [https://github.com/aamplugin/advanced-access-manager/issues/238](https://github.com/aamplugin/advanced-access-manager/issues/238)
    347 * Fixed: Super-Admin is unable to re-assign roles in network sites [https://github.com/aamplugin/advanced-access-manager/issues/180](https://github.com/aamplugin/advanced-access-manager/issues/180)
    348 
    349 = 6.9.3 =
    350 * Fixed: Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable... [https://github.com/aamplugin/advanced-access-manager/issues/236](https://github.com/aamplugin/advanced-access-manager/issues/236)
    351 * Fixed: Warning: Undefined variable $value in... [https://github.com/aamplugin/advanced-access-manager/issues/235](https://github.com/aamplugin/advanced-access-manager/issues/235)
    352 * Changed: Deprecating offering of some AAM premium add-ons [https://github.com/aamplugin/advanced-access-manager/issues/237](https://github.com/aamplugin/advanced-access-manager/issues/237)
    353 
    354 = 6.9.2 =
    355 * Fixed: Compliance with WordPress.org code quality [https://github.com/aamplugin/advanced-access-manager/issues/229](https://github.com/aamplugin/advanced-access-manager/issues/229)
    356 
    357 = 6.9.1 =
    358 * Fixed: Incorrectly stripped backslashes for Access Policy [https://github.com/aamplugin/advanced-access-manager/issues/228](https://github.com/aamplugin/advanced-access-manager/issues/228)
    359 * Fixed: PHP Notice: Function AAM_Backend_Subject::hasCapability was called incorrectly [https://github.com/aamplugin/advanced-access-manager/issues/227](https://github.com/aamplugin/advanced-access-manager/issues/227)
    360 * Fixed: PHP Notice: Undefined offset: -1 in [https://github.com/aamplugin/advanced-access-manager/issues/226](https://github.com/aamplugin/advanced-access-manager/issues/226)
    361 * Added New: Add the ability to hook into filter [https://github.com/aamplugin/advanced-access-manager/issues/225](https://github.com/aamplugin/advanced-access-manager/issues/225)
    362 
    363 = 6.9.0 =
    364 * Fixed: Revoking JWT token via UI causes current user to logout [https://github.com/aamplugin/advanced-access-manager/issues/224](https://github.com/aamplugin/advanced-access-manager/issues/224)
    365 * Fixed: Notice: Undefined variable: cache [https://github.com/aamplugin/advanced-access-manager/issues/223](https://github.com/aamplugin/advanced-access-manager/issues/223)
    366 * Changed: Update JWT vendor [https://github.com/aamplugin/advanced-access-manager/issues/221](https://github.com/aamplugin/advanced-access-manager/issues/221)
    36793
    36894= 6.0.0 =
Note: See TracChangeset for help on using the changeset viewer.