Plugin Directory

Changeset 3387000


Ignore:
Timestamp:
10/30/2025 10:57:00 AM (5 months ago)
Author:
publirump
Message:

Version 1.3.0 – Added display name and improved form and security handling.

Location:
publir-ump/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • publir-ump/trunk/Readme.txt

    r3380069 r3387000  
    55Tested up to: 6.8.3
    66Requires PHP: 5.2.4
    7 Stable tag: 1.2.8
     7Stable tag: 1.3.0
    88License: GNU 2.0
    99License URI: https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
  • publir-ump/trunk/assets/css/admin-ump.css

    r2732984 r3387000  
    175175  padding: 0 !important;
    176176  border-color: #ccc !important;
    177   background-color: transparent; !important;
     177  background-color: transparent !important;
    178178  vertical-align: middle;
    179179}
     
    207207  transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
    208208}
    209 .publir-tabset .#payBtn { margin-top: 0; }
     209.publir-tabset #payBtn { margin-top: 0; }
    210210.publirump-login-response p,.publir-signup-response p,.pblr-reset-response p,
    211211.pblr-update-response p,.pblr-cancel-response p{
     
    217217  display: none;
    218218}
    219 .publir-update-pass,.publir-cancel-form{
     219.publir-update-pass,.publir-cancel-form, .publir-update-displayname{
    220220  margin-bottom: 20px;
    221221  margin-top: 15px !important;
  • publir-ump/trunk/assets/js/ump.js

    r3080232 r3387000  
    278278    ***/
    279279   
     280   
     281    /***
     282    * Upadte Display Name Ajax
     283    ***/
     284    jQuery('#update-displayname').submit(function(e){
     285        e.preventDefault();
     286        var update_pass = jQuery('#update-displayname');
     287        //Validation
     288        jQuery('.publir-update-displayname-img').show();
     289        jQuery('input[type="submit"]').prop('disabled', true);
     290        if(!jQuery("#ump-display-name").val()){
     291            jQuery('.publir-update-displayname-img').hide();
     292            jQuery('input[type="submit"]').prop('disabled', false);
     293            jQuery("#ump-display-name").addClass('error');
     294            jQuery(".pblr-update-displayname-response").addClass("error");
     295            jQuery(".pblr-update-displayname-response").html('<p>Display Name field required</p>');
     296            return false;
     297        } else{
     298            jQuery(".pblr-update-displayname-response").removeClass("error");
     299            jQuery(".pblr-update-displayname-response").html('<p></p>');
     300            jQuery("#ump-display-name").removeClass('error');
     301        }
     302        //ajax submit form
     303        jQuery('.publir-update-displayname-img').show();
     304        jQuery.ajax({
     305            type: "POST",
     306            url:update_pass.attr('action'),
     307            data: update_pass.serialize(), // serializes the form's elements.
     308            success: function(response) {
     309                jQuery('.publir-update-displayname-img').hide();
     310                if( jQuery.trim(response)  != "" ) {
     311                    var data = JSON.parse(response);
     312                    if(data.type == 'success' ){
     313                        jQuery('.pblr-update-displayname-response').removeClass('error');
     314                        jQuery('.pblr-update-displayname-response').html('<p>'+data.message+'</p>');
     315                        jQuery('.pblr-update-displayname-response').show();
     316                        setTimeout(function(){
     317                          location.reload();
     318                      }, 2000);
     319                    } else {
     320                        jQuery(".pblr-update-displayname-response").addClass("error");
     321                        jQuery('.pblr-update-displayname-response').html('<p>'+data.message+'</p>');
     322                        jQuery('.pblr-update-displayname-response').show();
     323                    }
     324                } else {
     325                    jQuery(".pblr-update-displayname-response").addClass("error");
     326                    jQuery('.pblr-update-displayname-response').html('<p>Connection error occured. Please try agin after some time or do refresh page.</p>');
     327                    jQuery('.pblr-update-displayname-response').show();
     328                }
     329            },
     330            error: function (jqXHR, exception) {
     331                jQuery('.publir-update-displayname-img').hide();
     332                var msg = '';
     333                if (jqXHR.status === 0) {
     334                    msg = 'Not connect.\n Verify Network.';
     335                } else if (jqXHR.status == 404) {
     336                    msg = 'Requested page not found.';
     337                } else if (jqXHR.status == 500) {
     338                    msg = 'Internal Server Error';
     339                } else if (exception === 'parsererror') {
     340                    msg = 'Requested JSON parse failed.';
     341                } else if (exception === 'timeout') {
     342                    msg = 'Time out error.';
     343                } else if (exception === 'abort') {
     344                    msg = 'Ajax request aborted.';
     345                } else {
     346                    msg = 'Uncaught Error.\n';// + jqXHR.responseText;
     347                }
     348                jQuery(".pblr-update-displayname-response").addClass("error");
     349                jQuery('.pblr-update-displayname-response').html('<p>'+msg+' Try page reload</p>');
     350                jQuery('.pblr-update-displayname-response').show();
     351            }
     352        });
     353        jQuery('input[type="submit"]').prop('disabled', false);
     354    });
     355    /***
     356    * Upadte Display Name Ajax Completed
     357    ***/
     358
    280359    /***
    281360    * Password reset Ajax
  • publir-ump/trunk/functions.php

    r3080232 r3387000  
    124124                }else{
    125125                    $post_id = wp_insert_post($my_post,true);
    126                     update_post_meta( $post_id, '_wp_page_template', plugin_dir_path( __FILE__ ) . '/ump-page-template.php' );
     126                    update_post_meta( $post_id, '_wp_page_template','ump-page-template.php' );
    127127                }
    128128            }
     
    149149}
    150150
    151 add_filter( 'template_include', 'publir_change_page_template', 99 );
     151add_filter( 'template_include', 'publir_change_page_template', 1 );
    152152
    153 if ( ! function_exists( 'publir_change_page_template' ) )  {
    154     /**
    155     * Sets up theme defaults and registers support for various WordPress features
    156     *
    157     *  It is important to set up these functions before the init hook so that none of these
    158     *  features are lost.
    159     */
     153function publir_change_page_template($template)
     154{
     155    $options = get_option('publir_wp_options');
     156    $page_name = $options['setting_page_id'];
    160157
    161     function publir_change_page_template($template)
    162     {
    163         $options = get_option('publir_wp_options');
    164         $page_name = $options['setting_page_id'];
    165         if (get_the_title(get_the_ID()) == $page_name) {
    166             $meta = get_post_meta(get_the_ID());
    167             if (!empty($meta['_wp_page_template'][0]) && $meta['_wp_page_template'][0] != $template) {
    168                 $template = $meta['_wp_page_template'][0];
    169             }
    170         }
    171         return $template;
    172     }
     158    if (get_the_title(get_the_ID()) == $page_name) {
     159        $meta = get_post_meta(get_the_ID());
     160        $selected_template = $meta['_wp_page_template'][0] ?? '';
     161
     162        if ($selected_template === 'ump-page-template.php') {
     163            $plugin_template = plugin_dir_path(__FILE__) . 'ump-page-template.php';
     164            if (file_exists($plugin_template)) {
     165                return $plugin_template;
     166            } else {
     167                error_log('Publir UMP: Template not found at ' . $plugin_template);
     168            }
     169        }
     170
     171        if (!empty($selected_template) && file_exists($selected_template)) {
     172            return $selected_template;
     173        }
     174    }
     175
     176    return $template;
    173177}
     178
     179add_action('wp_body_open', function () {
     180    if (is_singular()) {
     181        global $post;
     182        $selected_template = get_post_meta($post->ID, '_wp_page_template', true);
     183        if ($selected_template === 'ump-page-template.php') {
     184            ?>
     185            <script>
     186                document.addEventListener('DOMContentLoaded', function () {
     187                    document.body.id = 'publir-subscribe';
     188                });
     189            </script>
     190            <?php
     191        }
     192    }
     193});
  • publir-ump/trunk/options.php

    r3380069 r3387000  
    208208
    209209                    // Build full template path
    210                     $template_path = plugin_dir_path( __FILE__ ) . 'ump-page-template.php';
     210                    $template_path = 'ump-page-template.php';
    211211
    212212                    // Get current meta
  • publir-ump/trunk/ump-page-template.php

    r3080232 r3387000  
    108108            <br>
    109109                <?php
     110                _e(do_shortcode('[publir_update_display_name]') );
    110111                _e(do_shortcode('[publir_update_password]') );
    111112                _e(do_shortcode('[publir_update_card]'));
  • publir-ump/trunk/ump.php

    r3380069 r3387000  
    44 * Plugin URI: https://www.publir.com/wordpress-plugin/ump
    55 * Description: Manage your Publir settings from this page.
    6  * Version: 1.2.8
     6 * Version: 1.3.0
    77 * Author: Publir
    88 * Author URI: https://www.publir.com
     
    8484                        <input class="publirump-login-button button" type="submit" name="change-password" value="Change Password" />
    8585                        <div class="publir-update-pass-img"  style="display: none">
     86                            <img src="<?php _e( esc_url_raw($loaderUrl) ); ?>" />
     87                        </div>
     88                    </div>
     89                </div>
     90            </div>
     91        </form>
     92        <?php
     93       
     94        return ob_get_clean();
     95    }
     96}
     97
     98add_shortcode('publir_update_display_name','publir_update_display_name_value');
     99if ( ! function_exists( 'publir_update_display_name_value' ) )  {
     100    function publir_update_display_name_value(){
     101        ob_start();
     102        $loaderUrl = plugin_dir_url( __FILE__ ). 'assets/loader.gif';
     103        ?>
     104        <h6 class="publirump-pb-15">Update Account</h6>
     105        <b class="publirump-pb-15">Update Display Name</b>
     106        <form id="update-displayname" class="publir-update-displayname" action="<?php _e(esc_url(admin_url( 'admin-ajax.php' ))); ?>" method="post" >
     107            <?php wp_nonce_field( "publr-updatedisplayname-form" ); ?>
     108            <input type="hidden" name="action" value="publir_display_name_action">
     109            <div class="login publir-row">
     110                <div class="publirump-login password">
     111                    <input id="ump-display-name" type="text" name="display_name" placeholder="Enter Display Name" />
     112                </div>
     113                <div class="publir-row">
     114                    <div class="publir-row pblr-update-displayname-response"></div>
     115                    <div class="publir-row">
     116                        <input class="publirump-login-button button" type="submit" name="change-display-name" value="Update Display Name" />
     117                        <div class="publir-update-displayname-img"  style="display: none">
    86118                            <img src="<?php _e( esc_url_raw($loaderUrl) ); ?>" />
    87119                        </div>
     
    221253                </div>
    222254                <div class="form-group">
     255                    <label>Display Name</label>
     256                    <input type="text" name="display_name" id="display_name" class="field autoDisable" placeholder="Display Name" autofocus="">
     257                </div>
     258                <div class="form-group">
    223259                    <label>Email</label>
    224260                    <input type="email" name="email" id="email" class="field autoDisable" placeholder="Enter Email">
     
    266302        $siteSubData = publir_get_site_subs_data();
    267303        ?>
    268         <div class="panel container publir-entry-content">
     304        <div class="publir-entry-content">
    269305            <div class="publirump-pb-15">
    270306                <b class="">Update Card</b>
     
    345381            "siteName"              => $siteName
    346382        );
     383        if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
     384            $user_ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
     385        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
     386            $user_ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
     387        } else {
     388            $user_ip = $_SERVER['REMOTE_ADDR'];
     389        }
     390        $user_agent  = $_SERVER['HTTP_USER_AGENT'];
    347391        $args = array(
    348392            'method'      => 'POST',
     
    352396                'Accept' => 'application/json',
    353397                'Content-Type'  => 'application/json',
     398                "X-Forwarded-For" => $user_ip,
     399                "User-Agent" => $user_agent
    354400            ),
    355401            'body'        => json_encode($body),
     
    396442
    397443            setcookie('publir_subs_log', $serialized_data, time() + 300, "/", false, false, false);
    398             setcookie('publir_subscriber_status', $response['sid'], time() + (86400 * 1), "/", false,false,false);
     444
     445            $payloadPubToken = 'PUBTOKEN' . $response['sid'].$response['site_id'];
     446            $encodedSid = base64_encode($payloadPubToken);
     447            setcookie('publir_subscriber_status', $encodedSid,  time() + (86400 * 365 * 1), "/", false,false,false);
     448
     449            $encodedDisplayName = base64_encode($response['display_name']);
     450            setcookie('publir_subscriber_dn', $encodedDisplayName,  time() + (86400 * 365 * 1), "/", false,false,false);
    399451
    400452            $return = json_encode(array('message'=>'Login Successful!','status_code'=>200));
     
    485537
    486538        $fixedJSON = publir_fix_json_response($response);
     539        wp_send_json(  $fixedJSON );
     540        wp_die();
     541    }
     542}
     543
     544//Update Display Name with ajax function
     545add_action( 'wp_ajax_publir_display_name_action', 'publir_display_name_action' );
     546add_action( 'wp_ajax_nopriv_publir_display_name_action', 'publir_display_name_action' );
     547
     548if ( ! function_exists( 'publir_display_name_action' ) )  {
     549    function publir_display_name_action() {
     550        $options = get_option('publir_wp_options');
     551        $site_id = sanitize_text_field($options['publir_site_id']);
     552        $publir_secret_key = sanitize_text_field($options['publir_secret_key']);
     553        $email = '';
     554        if (isset($_COOKIE['publir_subs_log'])) {
     555            $pubCookieData = getCookieData();
     556            if(!empty($pubCookieData)){
     557                $email = custom_decrypt($pubCookieData['ehash'], $publir_secret_key);
     558            }
     559        }
     560        if(empty($email)){
     561            $return = json_encode(array('message'=>'Your session has expired. Please log in to continue where you left off.','status_code'=>401));
     562            wp_send_json(  $return );
     563            wp_die();
     564        }
     565        if( empty($site_id) ) {
     566            $return = json_encode(array('message'=>'Site id is empty','status_code'=>201));
     567            wp_send_json(  $return );
     568            wp_die();
     569        }
     570        $url  = 'https://subs-api.publir.com/publirsubscriptionsapi-dev-hello';
     571       
     572        if( empty($_POST['display_name'])) {
     573            $return = json_encode(array('message'=>'Display Name Field can\'t empty','status_code'=>201));
     574            wp_send_json(  $return );
     575            wp_die();
     576        }
     577        else  {
     578            $display_name = sanitize_text_field($_POST['display_name']);
     579        }
     580        $siteName = get_bloginfo( 'name');
     581        $body = array(
     582            "publir_method"     => "update_display_name",
     583            "display_name"       => $display_name,
     584            "email"             => $email,
     585            "siteId"            => $site_id,
     586            "siteName"          => $siteName
     587        );
     588        $args = array(
     589            "method"      => "POST",
     590            "timeout"     => 45,
     591            "sslverify"   => false,
     592            "headers"     => array(
     593                "Accept" => "application/json",
     594                "Content-Type"  => "application/json",
     595            ),
     596            "body"        => json_encode($body),
     597        );
     598
     599        $request = wp_remote_post( $url, $args );
     600
     601        $response = wp_remote_retrieve_body( $request );
     602        $fixedJSON = publir_fix_json_response($response);
     603
     604        $response = json_decode($fixedJSON, true);
     605        if ($response['type'] == 'success') {
     606            $encodedDisplayName = base64_encode($display_name);
     607            setcookie('publir_subscriber_dn', $encodedDisplayName,  time() + (86400 * 365 * 1), "/", false,false,false);
     608        }
     609       
    487610        wp_send_json(  $fixedJSON );
    488611        wp_die();
     
    754877        }
    755878        $name = sanitize_text_field($_POST['name']);
     879        if( empty($name) ) {
     880            $return = json_encode(array('message'=>'Name is required.','status_code'=>201));
     881            wp_send_json( $return  );
     882            wp_die();
     883        }
     884
     885        $display_name = sanitize_text_field($_POST['display_name']);
     886        if( empty($display_name) ) {
     887            $return = json_encode(array('message'=>'Display Name is required.','status_code'=>201));
     888            wp_send_json( $return  );
     889            wp_die();
     890        }
    756891        $stripeToken = '';
    757892        if( empty($_POST['stripeToken']) && $plan != "Free" ) {
     
    786921            "siteName"          => $siteName,
    787922            "fullName"          => $name,
     923            "display_name"      => $display_name,
    788924            "plan"              => $plan,
    789925            "siteMode"          => $siteSubData['siteMode'],
Note: See TracChangeset for help on using the changeset viewer.