Plugin Directory

Changeset 2200549


Ignore:
Timestamp:
11/25/2019 01:10:00 PM (6 years ago)
Author:
thmarx
Message:

v 2.2.0

Location:
experience-manager/trunk
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • experience-manager/trunk/assets/elementor/experience-manager-elementor.js

    r2192435 r2200549  
    1313
    1414onElementorReady().then(function () {
    15     console.log("Hallo Leute");
    16     console.log("exm", window.elementor);
    17 
    18     window.elementor.channels.editor.on("exm:editor:preview", function () {
    19         console.log("event");
     15    window.elementor.channels.editor.on("exm:editor:highlight", function () {
     16        tma_toggle_highlight();
    2017    });
    2118
    2219});
    23 //webtools.domReady(function (event) {
    24 //  console.log("Hallo Leute");
    25 //  console.log("exm", window.elementor);
    26 //
    27 //  window.elementor.channels.editor.on("exm:editor:preview", function () {
    28 //      console.log("event");
    29 //  });
    30 //
    31 //});
     20var tma_exm_elementor_highlight = false;
     21function tma_toggle_highlight() {
     22    if (tma_exm_elementor_highlight) {
     23        tma_exm_elementor_highlight = false;
     24        webtools.Highlight.deactivate();
     25    } else {
     26        tma_exm_elementor_highlight = true;
     27        webtools.Highlight.activate(Array.apply([], document.querySelectorAll('[data-tma-group]')));
     28    }
     29}
     30
  • experience-manager/trunk/experience-manager.php

    r2192435 r2200549  
    55  Description: The integration for the experience platform.
    66  Author: Thorsten Marx
    7   Version: 2.1.0
     7  Version: 2.2.0
    88  Author URI: https://wp-digitalexperience.com/
    99  Text Domain: tma-webtools
     
    1414}
    1515
    16 define("TMA_EXPERIENCE_MANAGER_VERSION", "2.1.0");
     16define("TMA_EXPERIENCE_MANAGER_VERSION", "2.2.0");
    1717define("TMA_EXPERIENCE_MANAGER_SEGMENT_MATCHING_ALL", "all");
    1818define("TMA_EXPERIENCE_MANAGER_SEGMENT_MATCHING_ANY", "any");
     
    4343
    4444    if (\TMA\ExperienceManager\Plugins::getInstance()->elementor()) {
    45         new \TMA\ExperienceManager\Elementor_Integration();
    46         //new \TMA\ExperienceManager\Elementor_Preview();
     45        \TMA\ExperienceManager\Elementor_Integration::getInstance();
     46        \TMA\ExperienceManager\Elementor_Preview::getInstance();
    4747    }
    4848    if (\TMA\ExperienceManager\Plugins::getInstance()->popup_maker()) {
     
    7777    // Settings
    7878//  require_once 'includes/frontend/class.tma_script_helper.php';
    79     require_once 'includes/frontend/class.shortcode_tma_content.php';
     79    //require_once 'includes/frontend/class.shortcode_tma_content.php';
    8080    require_once 'includes/frontend/template_tags.php';
    8181
    82     new TMA\ExperienceManager\TMA_Widget_Targeting();
     82    // IS not stored
     83    //new TMA\ExperienceManager\TMA_Widget_Targeting();
    8384
    8485    require_once 'includes/modules/events/class.ecommerce_events.php';
  • experience-manager/trunk/includes/backend/class.tma_wpadminbar.php

    r2096995 r2200549  
    8888
    8989        $segments = tma_exm_get_segments_as_array();
     90        tma_exm_log("hier sind die segmente");
     91        tma_exm_log(json_encode($segments));
    9092        if (sizeof($segments) > 0) {
    9193            foreach ($segments as $segment) {
  • experience-manager/trunk/includes/backend/segment/class.segment-editor.php

    r2192435 r2200549  
    100100                 */
    101101
    102                 wp_enqueue_script ( 'tma-webtools-backend' );
     102                wp_enqueue_script('tma-webtools-backend');
    103103                wp_enqueue_style('experience-manager-codemirror-styles', TMA_EXPERIENCE_MANAGER_URL . 'assets/codemirror/codemirror.css', array(), "5.48.4", false);
    104104                wp_enqueue_script('experience-manager-codemirror', TMA_EXPERIENCE_MANAGER_URL . 'assets/codemirror/codemirror.js', array(), "5.48.4", false);
     
    147147            $siteid = get_option('tma_webtools_option')['webtools_siteid'];
    148148        }
    149         $dsl = get_post_meta($post->ID, 'tma_segment_editor', true);
    150 
    151        
    152149        $post_data = array(
    153150            'name' => $post->post_title,
    154151            'externalId' => $ID,
    155152            'active' => $post->post_status === "publish",
    156             'dsl' => $dsl
    157         );
    158 
    159         tma_exm_log($post_data);
     153            'dsl' => $this->get_segment_dsl($post->ID),
     154            'period' => $this->get_segment_period($post->ID)
     155        );
     156       
     157        tma_exm_log("post data");
     158        tma_exm_log(json_encode($post_data));
    160159
    161160        $request = new \TMA\ExperienceManager\TMA_Request();
     
    237236    }
    238237
    239     public function save($post_id) {
     238    public function get_segment_dsl($post_id) {
    240239        if (array_key_exists('exm_audience_editor', $_POST)) {
    241240            $editor_value = filter_input(INPUT_POST, 'exm_audience_editor');
    242             //$editor_value = sanitize_textarea_field($_POST['exm_audience_editor']);
     241
     242            return $editor_value;
     243        } else {
     244            return get_post_meta($post_id, 'tma_segment_editor', true);
     245        }
     246    }
     247    public function get_segment_period($post_id) {
     248        $period = [
     249            'unit' => "YEAR", // MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
     250            'count' => 1
     251        ];
     252        if (array_key_exists('exm_audience_editor_tw_unit', $_POST)) {
     253            $period['unit'] = $_POST['exm_audience_editor_tw_unit'];
     254        } else {
     255            $period['unit'] = get_post_meta($post_id, 'tma_segment_editor_unit', true);
     256        }
     257       
     258        if (array_key_exists('exm_audience_editor_tw_count', $_POST)) {
     259            $period['count'] = intval($_POST['exm_audience_editor_tw_count']);
     260        } else {
     261            $period['count'] = intval(get_post_meta($post_id, 'tma_segment_editor_count', true));
     262        }
     263       
     264        return $period;
     265    }
     266
     267    public function save($post_id) {
     268        tma_exm_log("save");
     269        if (array_key_exists('exm_audience_editor', $_POST)) {
     270            $editor_value = filter_input(INPUT_POST, 'exm_audience_editor');
    243271            update_post_meta(
    244272                    $post_id,
     
    247275            );
    248276        }
     277        if (array_key_exists('exm_audience_editor_tw_unit', $_POST)) {
     278            update_post_meta(
     279                    $post_id,
     280                    'tma_segment_editor_unit',
     281                    $_POST['exm_audience_editor_tw_unit']
     282            );
     283        }
     284        if (array_key_exists('exm_audience_editor_tw_count', $_POST)) {
     285            update_post_meta(
     286                    $post_id,
     287                    'tma_segment_editor_count',
     288                    $_POST['exm_audience_editor_tw_count']
     289            );
     290        }
     291       
    249292    }
    250293
     
    269312                SegmentType::$TYPE   // Post type
    270313        );
     314        add_meta_box(
     315                'tma_segment_editor_timewindow', // Unique ID
     316                'Time window', // Box title
     317                [$this, 'time_meta_box'], // Content callback, must be of type callable
     318                SegmentType::$TYPE   // Post type
     319        );
    271320    }
    272321
     
    277326    public function categories($post) {
    278327        include 'categories.php';
     328    }
     329
     330    function time_meta_box($post) {
     331        $unit = get_post_meta($post->ID, 'tma_segment_editor_unit', true);
     332        $count = get_post_meta($post->ID, 'tma_segment_editor_count', true);
     333        ?>
     334        <div>
     335        <label for="exm_audience_editor_tw_unit">Unit</label>
     336        <select name="exm_audience_editor_tw_unit" id="tma_segment_editor_tw_unit" class="postbox">
     337            <option value="YEAR" <?php selected($unit, 'YEAR'); ?> >YEAR</option>
     338            <option value="MONTH" <?php selected($unit, 'MONTH'); ?> >MONTH</option>
     339            <option value="WEEK" <?php selected($unit, 'WEEK'); ?> >WEEK</option>
     340            <option value="DAY" <?php selected($unit, 'DAY'); ?> >DAY</option>
     341            <option value="HOUR" <?php selected($unit, 'HOUR'); ?> >HOUR</option>
     342            <option value="MINUTE" <?php selected($unit, 'MINUTE'); ?> >MINUTE</option>
     343        </select>
     344        </div>
     345        <div>
     346            <label for="exm_audience_editor_tw_unit">Count</label>
     347            <input type="number" name="exm_audience_editor_tw_count" class="postbox" value="<?php echo $count?>" />
     348        </div>
     349        <?php
    279350    }
    280351
     
    282353        $value = get_post_meta($post->ID, 'tma_segment_editor', true);
    283354        ?>
    284         <textarea name="exm_audience_editor" id="exm_audience_editor" cols="50" rows="10"><?php if ($value && $value !== "") {
     355        <textarea name="exm_audience_editor" id="exm_audience_editor" cols="50" rows="10"><?php
     356        if ($value && $value !== "") {
    285357            echo $value;
    286         } ?></textarea>
     358        }
     359        ?></textarea>
    287360        <script type="text/javascript">
    288361            CodeMirror.fromTextArea(document.getElementById("exm_audience_editor"), {
  • experience-manager/trunk/includes/backend/segment/description.php

    r2192433 r2200549  
    103103            <span>User has visited at least two products of the category T-Shirts: </span><b>rule(CATEGORY).path('/tshirts/').field('c_categories').count(2)</b>
    104104        </p>
    105         <p>
    106             <span class="headline">KEYVALUE</span>
    107             <br />
    108             Check if a user has visited posts or products of a specific category.
    109             User the category path generator to get the correct path: <a href="#exm_categories">Category path generator</a>
    110             <br />
    111             <b>rule(CATEGORY).field('c_categories')</b>
    112             <br />
    113             "browser.name", ua.getBrowser().name());
    114             "browser.group", ua.getBrowser().getGroup().name());
    115             "browser.version", ua.getBrowserVersion().getVersion());
    116             "os.name", ua.getOperatingSystem().name());
    117             "os.group", ua.getOperatingSystem().getGroup().name());
    118             "os.type", ua.getOperatingSystem().getDeviceType().name());
    119             <span class="subheadline">Examples</span><br/>
    120             <span>User has visited at least two post of a category: </span><b>rule(CATEGORY).path('/news/local').field('c_categories').count(2)</b>
    121             <br/>
    122             <span>User has visited at least two products of the category T-Shirts: </span><b>rule(CATEGORY).path('/tshirts/').field('c_categories').count(2)</b>
    123         </p>
     105       
    124106    </div>
    125107
  • experience-manager/trunk/includes/class.request.php

    r2141767 r2200549  
    3131    public function __construct() {
    3232        $this->options = get_option('tma_webtools_option');
     33       
    3334    }
    3435
     
    215216     */
    216217    public function getSegments($userid) {
    217         /*
    218           if (tma_is_preview()) {
    219           if (isset($_GET['segment'])) {
    220           $segments = filter_input(INPUT_GET, 'segment', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
    221           $result = '{"user" :{"segments" : ["' . implode("\",\"", $segments) . '"]}, "status" : "ok"}';
    222           return json_decode($result);
    223           } else {
    224           $result = '{"user" : {"segments" : []}, "status" : "ok"}';
    225           return json_decode($result);
    226           }
    227           } */
    228 
    229 
    230218        if (!isset($this->options["webtools_apikey"]) || !isset($this->options['webtools_url'])) {
    231219            $result = '{"user" : {"segments" : []}}';
     
    236224        if (false === $result) {
    237225            $url = $this->options['webtools_url'] . 'rest/userinformation/user?apikey=' . $apikey . '&user=' . $userid;
    238             $result = $this->loadContent($url, '{"user" : {"segments" : []}, "status" : "ok"}');
     226            $result = $this->loadContent($url, '{"user" : {"segments" : []}, "status" : "ok", "default": true}');
    239227
    240228            wp_cache_set($userid, $result, "", 60);
     
    375363
    376364        $response = wp_remote_get($url, $parameters);
    377 
     365        tma_exm_log(json_encode($response));
    378366        if ((is_object($response) || is_array($response)) && !is_wp_error($response)) {
    379367            $result = $response['body']; // use the content
  • experience-manager/trunk/includes/class.tma_rest.php

    r2192435 r2200549  
    7575
    7676        $segments['segments'] = tma_exm_get_segments_as_array();
    77         $segments['user_segments'] = tma_exp_get_user_segments();
     77        $segments['user_segments'] = tma_exm_get_user_segments();
    7878
    7979        return apply_filters("experience-manager/rest/segments", $segments);
  • experience-manager/trunk/includes/frontend/class.shortcode_tma_content.php

    r2192435 r2200549  
    3232     */
    3333    public static $match_mode_all = TMA_EXPERIENCE_MANAGER_SEGMENT_MATCHING_ALL; //'all';
     34
    3435    /**
    3536     *
     
    3738     */
    3839    public static $match_mode_none = TMA_EXPERIENCE_MANAGER_SEGMENT_MATCHING_NONE; //'none';
    39    
    4040    public static $delimiter = ',';
    4141    private static $contentGroups = array();
     
    166166    }
    167167
     168    public static function array_flat($usersSegments) {
     169        $segments = [];
     170
     171        foreach ($usersSegments as $segment) {
     172            $segments[] = $segment->wpid;
     173        }
     174
     175        return $segments;
     176    }
     177
    168178    /**
    169179     *
  • experience-manager/trunk/includes/modules/ads/advanced/class.advanced_ads.php

    r2192435 r2200549  
    6363        }
    6464
    65         $user_segments = array_map('trim', $user_segments);
     65        //$user_segments = array_map('trim', $user_segments);
    6666        $settings_segments = array_map('trim', $settings_segments);
    67         return ShortCode_TMA_CONTENT::matching_mode_all($user_segments, $settings_segments);
     67        return tma_exm_array_match_all($settings_segments, $user_segments);
    6868    }
    6969
  • experience-manager/trunk/includes/modules/editors/class.integration.php

    r2192435 r2200549  
    124124
    125125        $matching = false;
    126         $segments = array_map('trim', $segments);
     126//      $segments = array_map('trim', $segments);
    127127        $attr_segments = array_map('trim', $attr_segments);
    128128        if ($matching_mode === ShortCode_TMA_CONTENT::$match_mode_all) {
    129             $matching = ShortCode_TMA_CONTENT::matching_mode_all($segments, $attr_segments);
     129//          $matching = ShortCode_TMA_CONTENT::matching_mode_all(ShortCode_TMA_CONTENT::array_flat($segments), $attr_segments);
     130            $matching = tma_exm_array_match_all($attr_segments, $segments);
    130131        } else if ($matching_mode === ShortCode_TMA_CONTENT::$match_mode_any) {
    131             $matching = ShortCode_TMA_CONTENT::matching_mode_any($segments, $attr_segments);
     132//          $matching = ShortCode_TMA_CONTENT::matching_mode_any(ShortCode_TMA_CONTENT::array_flat($segments), $attr_segments);
     133            $matching = tma_exm_array_match_any($attr_segments, $segments);
    132134        } else if ($matching_mode === ShortCode_TMA_CONTENT::$match_mode_none) {
    133             $matching = !ShortCode_TMA_CONTENT::matching_mode_any($segments, $attr_segments);
     135//          $matching = !ShortCode_TMA_CONTENT::matching_mode_any(ShortCode_TMA_CONTENT::array_flat($segments), $attr_segments);
     136            $matching = !tma_exm_array_match_all($attr_segments, $segments);
    134137        }
    135138
  • experience-manager/trunk/includes/modules/editors/elementor/class.elementor_integration.php

    r2192471 r2200549  
    2222class Elementor_Integration extends Integration {
    2323
     24    protected static $_instance = null;
     25
     26    public static function getInstance() {
     27        if (null === self::$_instance) {
     28            self::$_instance = new self;
     29        }
     30        return self::$_instance;
     31    }
     32
    2433    /**
    2534     * Start up
    2635     */
    27     public function __construct() {
     36    private function __construct() {
    2837
    2938        parent::__construct();
     
    92101        return Elementor_Integration::_isActivated($args);
    93102    }
    94    
     103
    95104    protected function isGroupDefault($args) {
    96105        return (is_array($args) && !empty($args['tma_default']) && $args['tma_default'] === "yes");
  • experience-manager/trunk/includes/modules/editors/elementor/class.elementor_preview.php

    r2192435 r2200549  
    2121
    2222class Elementor_Preview {
     23   
     24    protected static $_instance = null;
     25
     26    public static function getInstance() {
     27        if (null === self::$_instance) {
     28            self::$_instance = new self;
     29        }
     30        return self::$_instance;
     31    }
    2332
    2433    /**
    2534     * Start up
    2635     */
    27     public function __construct() {
     36    private function __construct() {
    2837        add_action('elementor/element/post/document_settings/after_section_end', array($this, 'add_elementor_page_settings_controls'));
    2938
     
    3241        add_action("elementor/widget/render_content", function ($content, $element) {
    3342            if (\Elementor\Plugin::$instance->editor->is_edit_mode()) {
    34                 $attrs = Elementor_Integration::getAttributes($element, true);
     43                // TODO: static call not working anymore
     44                $attrs = Elementor_Integration::getInstance()->getAttributes($element, true);
    3545                $element->add_render_attribute('exm_wrapper', $attrs);
    3646                return '<div id="exm_wrapper" ' . $element->get_render_attribute_string('exm_wrapper') . ' >' . $content . "</div>";
     
    4151
    4252    function widget_scripts() {
    43         wp_register_script('exm-elementor', plugins_url('experience-manager/assets/elementor/experience-manager-elementor.js'), [], "2.1.0", true);
     53        wp_register_script('exm-elementor', plugins_url('experience-manager/assets/elementor/experience-manager-elementor.js'), [], "2.2.0", true);
    4454        wp_enqueue_script('exm-elementor');
    4555    }
    4656
    47     function add_elementor_page_settings_controls(\Elementor\Core\DocumentTypes\Post $page) {
     57    function add_elementor_page_settings_controls( $page) { // \Elementor\Core\DocumentTypes\Post
    4858
    4959        $page->start_controls_section(
     
    5767                'exm_toggle_preview',
    5868                [
    59                     'label' => __('Toggle preview', 'tma-webtools'),
     69                    'label' => __('Toggle highlight', 'tma-webtools'),
     70                    'description' => __("Highlight the elements with configured targeting!", "tma-webtools"),
    6071                    'type' => \Elementor\Controls_Manager::BUTTON,
    6172                    'separator' => 'before',
    6273                    'button_type' => 'success',
    63                     'text' => __('Preview', 'tma-webtools'),
    64                     'event' => 'exm:editor:preview',
     74                    'text' => __('Highlight', 'tma-webtools'),
     75                    'event' => 'exm:editor:highlight',
    6576                ]
    6677        );
     
    7081
    7182}
    72 
    73 /**
    74  function handleMenuItemColor ( newValue ) {
    75     console.log( newValue );
    76     elementor.reloadPreview();
    77 }
    78  elementor.settings.page.addChangeCallback( 'menu_item_color', handleMenuItemColor );
    79  
    80  */
    81 
    82 //$tma_elementor_integration = new Elementor_Integration();
  • experience-manager/trunk/includes/modules/messages/popup-maker/class.popup-maker.php

    r2192435 r2200549  
    5555        }
    5656
    57         $user_segments = array_map('trim', $user_segments);
     57        //$user_segments = array_map('trim', $user_segments);
    5858        $settings_segments = array_map('trim', $settings_segments);
    59         return ShortCode_TMA_CONTENT::matching_mode_all($user_segments, $settings_segments);
     59//      return ShortCode_TMA_CONTENT::matching_mode_all(ShortCode_TMA_CONTENT::array_flat($user_segments), $settings_segments);
     60        return tma_exm_array_match_all($settings_segments, $user_segments);
    6061    }
    6162
  • experience-manager/trunk/includes/tma_functions.php

    r2192435 r2200549  
    11<?php
    22
    3 function tma_exm_get_user_segments ($defaultValue = []) {
     3function tma_exm_array_match_all($settings_segments, $user_segments) {
     4    tma_exm_log("tma_exm_array_match_all");
     5    tma_exm_log(json_encode($settings_segments));
     6    $user_segments = TMA\ExperienceManager\ShortCode_TMA_CONTENT::array_flat($user_segments);
     7    tma_exm_log(json_encode($user_segments));
     8   
     9    return TMA\ExperienceManager\ShortCode_TMA_CONTENT::matching_mode_all($user_segments, $settings_segments);
     10}
     11
     12function tma_exm_array_match_any($settings_segments, $user_segments) {
     13    tma_exm_log("tma_exm_array_match_all");
     14    tma_exm_log(json_encode($settings_segments));
     15    $user_segments = TMA\ExperienceManager\ShortCode_TMA_CONTENT::array_flat($user_segments);
     16    tma_exm_log(json_encode($user_segments));
     17   
     18    return TMA\ExperienceManager\ShortCode_TMA_CONTENT::matching_mode_any($user_segments, $settings_segments);
     19}
     20
     21function tma_exm_get_user_segments($defaultValue = []) {
    422    $request = new TMA\ExperienceManager\TMA_Request();
    523    $response = $request->getSegments(\TMA\ExperienceManager\TMA_Request::getUserID());
    624    tma_exm_log(json_encode($response));
    725    if ($response !== NULL && $response !== FALSE && $response->status === "ok" && property_exists($response->user, "actionSystem")) {
    8         $tma_config['user_segments'] = $response->user->actionSystem->segments;
     26//      $tma_config['user_segments'] = $response->user->actionSystem->segments;
     27        return $response->user->actionSystem->segments;
    928    }
    1029    return $defaultValue;
    11    
    1230}
    1331
     
    4462        $segments = [];
    4563
    46         $args = array('post_type' => \TMA\ExperienceManager\Segment\SegmentType::$TYPE, 'orderby' => 'title');
     64        $args = array(
     65            'post_type' => \TMA\ExperienceManager\Segment\SegmentType::$TYPE,
     66            'orderby' => 'title',
     67            'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit')
     68        );
    4769        $loop = new WP_Query($args);
    4870
     
    111133}
    112134
    113 function tma_exm_is_elementor_active () {
    114     return \TMA\ExperienceManager\Plugins::getInstance()->elementor()
    115             && (\Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode());
     135function tma_exm_is_elementor_active() {
     136    return \TMA\ExperienceManager\Plugins::getInstance()->elementor() && (\Elementor\Plugin::$instance->editor->is_edit_mode() || \Elementor\Plugin::$instance->preview->is_preview_mode());
    116137}
    117138
    118139function tma_exm_is_editor_active() {
    119     if (isset($_GET['action'])  && ($_GET['action'] === 'edit')) { // || $_GET['action'] === 'elementor')
     140    if (isset($_GET['action']) && ($_GET['action'] === 'edit')) { // || $_GET['action'] === 'elementor')
    120141        tma_exm_log("editor is active gutenberg");
    121142        return true;
     
    124145        return true;
    125146    }
    126    
     147
    127148    return false;
    128149}
  • experience-manager/trunk/includes/widgets/class.widget_targeting.php

    r2096995 r2200549  
    5353
    5454        function add_widget_form($widget, $return, $instance) {
     55            tma_exm_log(json_encode($widget));
     56            tma_exm_log(json_encode($instance));
    5557            // Display the description option.
    5658            $enable = isset($instance['tma_personalization']) ? $instance['tma_personalization'] : '';
  • experience-manager/trunk/js/experience-manager-frontend.js

    r2096995 r2200549  
    1919
    2020    function tma_webtools_update(segments) {
    21         webtools.Frontend.update(segments.user_segments);
     21        let flat_segments = segments.user_segments.map(segment => "" + segment.wpid);
     22        webtools.Frontend.update(flat_segments);
    2223    }
    2324
  • experience-manager/trunk/readme.txt

    r2192435 r2200549  
    33Tags: digital experience platform, experience manager, targeting, analytics, tracking, product targeting, behaviour targets
    44Requires at least: 4.4.1
    5 Tested up to: 5.2.2
    6 Stable tag: 2.1.0
     5Tested up to: 5.3
     6Stable tag: 2.2.0
    77License: GPLv2 or later
    88
     
    6363
    6464== Changelog ==
     65
     662.2.0
     67 * Add highlighting of widgets with configured targeting to elementor
     68 * Segment editor publish-save-order issue fixed
     69 * Javascript for updating segments fixed
     70 * Widget Targeting removed due to bug
    6571
    66722.1.0
Note: See TracChangeset for help on using the changeset viewer.