Plugin Directory

Changeset 2958937


Ignore:
Timestamp:
08/27/2023 07:34:29 PM (3 years ago)
Author:
codemonkeys
Message:

V2.9.8

  • Added fix to rebuild missing export data during export
Location:
codemonkeys-hipaa-forms/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • codemonkeys-hipaa-forms/trunk/ajax-functions.php

    r2949557 r2958937  
    4444
    4545/*** ADMIN AJAX FUNCTION ***/
    46 /* GET SUBMITTED FORMS (DEPRECATED) */
    47 /* COMMENTED OUT ON 09/07/2022*/
    48 /*function cm_hipaa_get_forms() {
    49     if (isset($_REQUEST)) {
    50         $location = '';
    51         if(isset($_REQUEST['location'])) {
    52             $location = sanitize_text_field($_REQUEST['location']);
    53         }
    54         $formName = '';
    55         if(isset($_REQUEST['form_name'])) {
    56             $formName = sanitize_text_field($_REQUEST['form_name']);
    57         }
    58         $firstName = '';
    59         if(isset($_REQUEST['first_name'])) {
    60             $firstName = sanitize_text_field($_REQUEST['first_name']);
    61         }
    62         $lastName = '';
    63         if(isset($_REQUEST['last_name'])) {
    64             $lastName = sanitize_text_field($_REQUEST['last_name']);
    65         }
    66         $phone = '';
    67         if(isset($_REQUEST['phone'])) {
    68             $phone = sanitize_text_field($_REQUEST['phone']);
    69         }
    70         $email = '';
    71         if(isset($_REQUEST['email'])) {
    72             $email = sanitize_email($_REQUEST['email']);
    73         }
    74         $status = '';
    75         if(isset($_REQUEST['status'])) {
    76             $status = sanitize_text_field($_REQUEST['status']);
    77         }
    78         $limit = '';
    79         if(isset($_REQUEST['limit'])) {
    80             $limit = intval($_REQUEST['limit']);
    81         }
    82         $page = '';
    83         if(isset($_REQUEST['page'])) {
    84             $page = intval($_REQUEST['page']);
    85         }
    86         $nonce = '';
    87         if(isset($_REQUEST['nonce'])) {
    88             $nonce = sanitize_text_field($_REQUEST['nonce']);
    89         }
    90 
    91         if(!wp_verify_nonce($nonce, 'cm-hipaa-forms-nonce')) {
    92             $results = array(
    93                 'error' => 'Nonce expired, please refresh the page.  If the error persists please contact the site administrator'
    94             );
    95 
    96             echo json_encode($results);
    97         } else {
    98             // GET SUBMITTED FORMS FROM CODEMONKEYS HIPAA API
    99             $cmSubmittedForms = new cmHipaaForms;
    100             echo $cmSubmittedForms->getForms($location, $formName, $firstName, $lastName, $phone, $email, $status, $limit, $page);
    101         }
    102     }
    103 
    104     die();
    105 }*/
    106 //add_action( 'wp_ajax_cm_hipaa_get_forms', 'cm_hipaa_get_forms' );
    107 //add_action( 'wp_ajax_nopriv_cm_hipaa_get_forms', 'cm_hipaa_get_forms' );
    108 
    10946/* GET SUBMITTED FORMS LIST */
    11047function cm_hipaa_get_submitted_forms_list() {
     
    923860add_action( 'wp_ajax_cm_hipaa_get_file_upload_url', 'cm_hipaa_get_file_upload_url' );
    924861add_action( 'wp_ajax_nopriv_cm_hipaa_get_file_upload_url', 'cm_hipaa_get_file_upload_url' );
     862
     863/* REBUILD AND SAVE MISSING RAW FIELD ARRAY */
     864function cm_hipaa_rebuild_form_fields() {
     865    if (isset($_REQUEST)) {
     866        $formId = '';
     867        if(isset($_REQUEST['form_id'])) {
     868            $formId = intval($_REQUEST['form_id']);
     869        }
     870
     871        $sanitizedFormFields = array();
     872        if (isset($_REQUEST['form_fields'])) {
     873            $formFields = $_REQUEST['form_fields']; // ARRAY OF ENTIRE FIELDS
     874
     875            // SANITIZE ARRAY
     876            foreach($formFields as $formField) {
     877                $formFieldItem = array();
     878                foreach($formField as $key => $value) {
     879                    $formFieldKey = sanitize_text_field($key);
     880                    $formFieldValue = sanitize_text_field($value);
     881                    $formFieldItem[$formFieldKey] = $formFieldValue;
     882                }
     883
     884                array_push($sanitizedFormFields, $formFieldItem);
     885            }
     886        }
     887
     888        $nonce = '';
     889        if(isset($_REQUEST['nonce'])) {
     890            $nonce = sanitize_text_field($_REQUEST['nonce']);
     891        }
     892
     893        if(!wp_verify_nonce($nonce, 'cm-hipaa-admin-nonce')) {
     894            $results = array(
     895                'error' => 'Nonce expired, please refresh the page.  If the error persists please contact the site administrator'
     896            );
     897
     898            echo json_encode($results);
     899        } else {
     900            $security = wp_create_nonce('rebuildFormFields');
     901            $hipaaForms = new cmHipaaForms;
     902            echo $hipaaForms->rebuildFormFields($formId, $sanitizedFormFields, $security);
     903        }
     904    }
     905
     906    die();
     907}
     908add_action( 'wp_ajax_cm_hipaa_rebuild_form_fields', 'cm_hipaa_rebuild_form_fields' );
     909add_action( 'wp_ajax_nopriv_cm_hipaa_rebuild_form_fields', 'cm_hipaa_rebuild_form_fields' );
    925910
    926911/* EXPORT FORM */
     
    12471232            // GET CALDERA FORM DATA
    12481233            $calderaFormData = Caldera_Forms_Forms::get_form($formId);
    1249             $calderaFormName = $calderaFormData['name'];
    1250             $calderaFormDataMailer = $calderaFormData['mailer'];
    1251             $calderaFormSenderName = $calderaFormDataMailer['sender_name'];
    1252             $calderaFormSenderEmail = $calderaFormDataMailer['sender_email'];
    1253             $calderaFormRecipients = $calderaFormDataMailer['recipients'];
    1254             $calderaFormBccTo = $calderaFormDataMailer['bcc_to'];
    1255             $calderaFormSubject = $calderaFormDataMailer['email_subject'];
    1256             $fieldsData = $calderaFormData['fields'];
     1234
     1235            $calderaFormName = '';
     1236            if(isset($calderaFormData['name'])) {
     1237                $calderaFormName = $calderaFormData['name'];
     1238            }
     1239
     1240            $calderaFormDataMailer = '';
     1241            if(isset($calderaFormData['mailer'])) {
     1242                $calderaFormDataMailer = $calderaFormData['mailer'];
     1243            }
     1244
     1245            $calderaFormSenderName = '';
     1246            if(isset($calderaFormDataMailer['sender_name'])) {
     1247                $calderaFormSenderName = $calderaFormDataMailer['sender_name'];
     1248            }
     1249
     1250            $calderaFormSenderEmail = '';
     1251            if(isset($calderaFormDataMailer['sender_email'])) {
     1252                $calderaFormSenderEmail = $calderaFormDataMailer['sender_email'];
     1253            }
     1254
     1255            $calderaFormRecipients = '';
     1256            if(isset($calderaFormDataMailer['recipients'])) {
     1257                $calderaFormRecipients = $calderaFormDataMailer['recipients'];
     1258            }
     1259
     1260            $calderaFormBccTo = '';
     1261            if(isset($calderaFormDataMailer['bcc_to'])) {
     1262                $calderaFormBccTo = $calderaFormDataMailer['bcc_to'];
     1263            }
     1264
     1265            $calderaFormSubject = '';
     1266            if(isset($calderaFormDataMailer['email_subject'])) {
     1267                $calderaFormSubject = $calderaFormDataMailer['email_subject'];
     1268            }
     1269
     1270            $fieldsData = '';
     1271            if(isset($calderaFormData['fields'])) {
     1272                $fieldsData = $calderaFormData['fields'];
     1273            }
    12571274
    12581275            // SET NOTIFICATION EMAIL FROM NAME
     
    15651582            $phone = sanitize_text_field($_REQUEST['phone']);
    15661583        }
    1567         $formFields = '';
    1568         if(isset($_REQUEST['formFields'])) {
     1584
     1585        $sanitizedFormFields = array();
     1586        if (isset($_REQUEST['formFields'])) {
    15691587            $formFields = $_REQUEST['formFields']; // ARRAY OF ENTIRE FIELDS
    1570         }
     1588
     1589            // SANITIZE ARRAY
     1590            foreach($formFields as $formField) {
     1591                $formFieldItem = array();
     1592                foreach($formField as $key => $value) {
     1593                    $formFieldKey = sanitize_text_field($key);
     1594                    $formFieldValue = sanitize_text_field($value);
     1595                    $formFieldItem[$formFieldKey] = $formFieldValue;
     1596                }
     1597
     1598                array_push($sanitizedFormFields, $formFieldItem);
     1599            }
     1600        }
     1601
    15711602        $formHtml = '';
    15721603        if(isset($_REQUEST['formHtml'])) {
     
    15781609        }
    15791610        $nononce = '';
    1580         $nonce = '';
    15811611        if(isset($_REQUEST['nononce'])) {
    15821612            $nononce = sanitize_text_field($_REQUEST['nononce']);
    15831613        }
     1614        $nonce = '';
    15841615        if(isset($_REQUEST['nonce'])) {
    15851616            $nonce = sanitize_text_field($_REQUEST['nonce']);
     
    16591690        } else {
    16601691            $gravityFormMeta = RGFormsModel::get_form_meta($formIdStripped);
    1661             $gravityFormName = $gravityFormMeta['title'];
    1662             $gravityFormNotifications = $gravityFormMeta['notifications'];
     1692
     1693            $gravityFormName = '';
     1694            if(isset($gravityFormMeta['title'])) {
     1695                $gravityFormName = $gravityFormMeta['title'];
     1696            }
     1697
     1698            $gravityFormNotifications = '';
     1699            if(isset($gravityFormMeta['notifications'])) {
     1700                $gravityFormNotifications = $gravityFormMeta['notifications'];
     1701            }
    16631702
    16641703            $gravityNotificationRecipients = '';
     
    16711710                // GET GRAVITY NOTIFICATION VALUES
    16721711                foreach($gravityFormNotifications as $gravityFormNotification) {
    1673                     $gravityNotificationRecipients = $gravityFormNotification['to'];
    1674                     $gravityNotificationSenderName = $gravityFormNotification['fromName'] ?? '';
    1675                     $gravityNotificationSenderEmail = $gravityFormNotification['from'] ?? '';
    1676                     $gravityNotificationBccTo = $gravityFormNotification['bcc'] ?? '';
    1677                     $gravityNotificationSubject = $gravityFormNotification['subject'];
     1712                    if(isset($gravityFormNotification['to'])) {
     1713                        $gravityNotificationRecipients = $gravityFormNotification['to'];
     1714                    }
     1715                    if(isset($gravityFormNotification['fromName'])) {
     1716                        $gravityNotificationSenderName = $gravityFormNotification['fromName'];
     1717                    }
     1718                    if(isset($gravityFormNotification['from'])) {
     1719                        $gravityNotificationSenderEmail = $gravityFormNotification['from'];
     1720                    }
     1721                    if(isset($gravityFormNotification['bcc'])) {
     1722                        $gravityNotificationBccTo = $gravityFormNotification['bcc'];
     1723                    }
     1724                    if(isset($gravityFormNotification['subject'])) {
     1725                        $gravityNotificationSubject = $gravityFormNotification['subject'];
     1726                    }
    16781727
    16791728                    // REPLACE MERGE TAGS IF USED
     
    18321881
    18331882            $fields = array();
    1834             foreach ($formFields as $key => $value) {
     1883            foreach ($sanitizedFormFields as $key => $value) {
    18351884                $fieldId = '';
    18361885                if(isset($value['field_id'])) {
     
    18381887                }
    18391888
    1840                 $fieldLabel = strip_tags($value['label']);
    1841                 $optionLabel = strip_tags($value['option_label']);
    1842                 $optionValue = sanitize_text_field($value['option_value']);
    1843                 $fieldValue = sanitize_text_field($value['value']);
    1844                 $optionText = trim($value['option_text']);
    1845                 $fieldType = sanitize_text_field($value['field_type']);
     1889                $fieldLabel = '';
     1890                if(isset($value['label'])) {
     1891                    $fieldLabel = strip_tags($value['label']);
     1892                }
     1893
     1894                $optionLabel = '';
     1895                if(isset($value['option_label'])) {
     1896                    $optionLabel = strip_tags($value['option_label']);
     1897                }
     1898
     1899                $optionValue = '';
     1900                if(isset($value['option_value'])) {
     1901                    $optionValue = $value['option_value'];
     1902                }
     1903
     1904                $fieldValue = '';
     1905                if(isset($value['value'])) {
     1906                    $fieldValue = $value['value'];
     1907                }
     1908
     1909                $optionText = '';
     1910                if(isset($value['option_text'])) {
     1911                    $optionText = trim($value['option_text']);
     1912                }
     1913
     1914                $fieldType = '';
     1915                if(isset($value['field_type'])) {
     1916                    $fieldType = $value['field_type'];
     1917                }
    18461918
    18471919                // PUSH FIELD TO ARRAY
  • codemonkeys-hipaa-forms/trunk/css/admin-style.css

    r2949557 r2958937  
    11/**
    22 * Created by Spencer on 7/16/2018.
    3  * V2.9.7
     3 * V2.9.8
    44 */
    55
  • codemonkeys-hipaa-forms/trunk/css/style.css

    r2949557 r2958937  
    11/**
    22 * Created by Spencer on 7/16/2018.
    3  * V2.9.7
     3 * V2.9.8
    44 */
    55
  • codemonkeys-hipaa-forms/trunk/enqueue.php

    r2949557 r2958937  
    4141            // ENQUEUE SCRIPT
    4242            wp_enqueue_script( 'jquery-form' );
    43             wp_enqueue_script( 'cmHipaaAdminBuggyFill', plugin_dir_url(__FILE__) . 'js/viewport-units-buggyfill.js', array('jquery'), '2.9.7', true );
    44             wp_enqueue_script( 'cmHipaaAdminBuggyFillHack', plugin_dir_url(__FILE__) . 'js/viewport-units-buggyfill.hacks.js', array('jquery'), '2.9.7', true );
    45             wp_enqueue_script( 'cmHipaaAdminScript', plugin_dir_url(__FILE__) . 'js/admin-script.js', array('jquery'), '2.9.7', true );
    46             wp_enqueue_script( 'cm-hipaa-signature', plugin_dir_url(__FILE__) . 'js/jSignature/jSignature.min.noconflict.js', array('jquery'), '2.9.7', true);
    47             wp_enqueue_script( 'cm-hipaa-jquery-print', plugin_dir_url(__FILE__) . 'js/printThis.js', array('jquery'), '2.9.7', true);
     43            wp_enqueue_script( 'cmHipaaAdminBuggyFill', plugin_dir_url(__FILE__) . 'js/viewport-units-buggyfill.js', array('jquery'), '2.9.8', true );
     44            wp_enqueue_script( 'cmHipaaAdminBuggyFillHack', plugin_dir_url(__FILE__) . 'js/viewport-units-buggyfill.hacks.js', array('jquery'), '2.9.8', true );
     45            wp_enqueue_script( 'cmHipaaAdminScript', plugin_dir_url(__FILE__) . 'js/admin-script.js', array('jquery'), '2.9.8', true );
     46            wp_enqueue_script( 'cm-hipaa-signature', plugin_dir_url(__FILE__) . 'js/jSignature/jSignature.min.noconflict.js', array('jquery'), '2.9.8', true);
     47            wp_enqueue_script( 'cm-hipaa-jquery-print', plugin_dir_url(__FILE__) . 'js/printThis.js', array('jquery'), '2.9.8', true);
    4848        };
    4949    };
     
    7474
    7575    // ENQUEUE CUSTOM JS
    76     wp_enqueue_script( 'cmHipaaBuggyFill', plugin_dir_url(__FILE__) . 'js/viewport-units-buggyfill.js', array('jquery'), '2.9.7', true );
    77     wp_enqueue_script( 'cmHipaaBuggyFillHack', plugin_dir_url(__FILE__) . 'js/viewport-units-buggyfill.hacks.js', array('jquery'), '2.9.7', true );
    78     wp_enqueue_script('cm-hipaa-script', plugin_dir_url(__FILE__) . 'js/script.js', array('jquery'), '2.9.7&time=' . time(), true);
    79     wp_enqueue_script('cm-hipaa-signature', plugin_dir_url(__FILE__) . 'js/jSignature/jSignature.min.noconflict.js', array('jquery'), '2.9.7', true);
     76    wp_enqueue_script( 'cmHipaaBuggyFill', plugin_dir_url(__FILE__) . 'js/viewport-units-buggyfill.js', array('jquery'), '2.9.8', true );
     77    wp_enqueue_script( 'cmHipaaBuggyFillHack', plugin_dir_url(__FILE__) . 'js/viewport-units-buggyfill.hacks.js', array('jquery'), '2.9.8', true );
     78    wp_enqueue_script('cm-hipaa-script', plugin_dir_url(__FILE__) . 'js/script.js', array('jquery'), '2.9.8&time=' . time(), true);
     79    wp_enqueue_script('cm-hipaa-signature', plugin_dir_url(__FILE__) . 'js/jSignature/jSignature.min.noconflict.js', array('jquery'), '2.9.8', true);
    8080
    8181    // CHECK IF HOMEPAGE
  • codemonkeys-hipaa-forms/trunk/hipaa-forms.php

    r2949557 r2958937  
    1010 * Plugin URI: https://www.hipaaforms.online
    1111 * Description: HIPAA Compliant Forms
    12  * Version: 2.9.7
     12 * Version: 2.9.8
    1313 * Author: Code Monkeys LLC
    1414 * Author URI: https://www.codemonkeysllc.com
  • codemonkeys-hipaa-forms/trunk/includes/class-cm-hipaa.php

    r2848460 r2958937  
    22472247                            $results = array(
    22482248                                'success' => 'success',
     2249                                'form_id' => $formId,
    22492250                                'form' => $form,
    22502251                                'files' => $files
     
    53525353    }
    53535354
     5355    /*** REBUILD MISSING FORM FIELDS ARRAY ***/
     5356    public function rebuildFormFields($formId, $formFields, $security) {
     5357        if(!wp_verify_nonce($security, 'rebuildFormFields')){
     5358            return json_encode(array('error' => 'There was an error: NONCE EXPIRED'));
     5359        }else {
     5360            // GET LICENCE KEY
     5361            $licenseKey = esc_attr(get_option('license_key'));
     5362
     5363            /* GET ENCRYPT KEYS */
     5364            $encryptKey = '';
     5365            $encryptIV = '';
     5366            // Create curl resource
     5367            $curl = curl_init(self::CURL_URL);
     5368
     5369            // Create post data
     5370            $curl_post_data = array(
     5371                'form_id' => $formId,
     5372                'plugin_version' => HIPAAFORMS_CURRENT_VERSION
     5373            );
     5374
     5375            // Assign curl settings
     5376            curl_setopt($curl, CURLOPT_HTTPHEADER, array(
     5377                'Action: getencryptkeys',
     5378                'License-Key: ' . $licenseKey
     5379            ));
     5380            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
     5381            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($curl_post_data));
     5382            curl_setopt($curl, CURLOPT_REFERER, get_site_url());
     5383
     5384            $output = json_decode(curl_exec($curl));
     5385
     5386            // Close curl resource to free up system resources
     5387            curl_close($curl);
     5388
     5389            if ($output) {
     5390                foreach ($output as $data) {
     5391                    $error = '';
     5392                    if (isset($data->error)) {
     5393                        $error = $data->error;
     5394                    }
     5395
     5396                    if ($error) {
     5397                        $results = array(
     5398                            'error' => $error
     5399                        );
     5400                    } else {
     5401                        $success = $data->success;
     5402
     5403                        if ($success == 'success') {
     5404                            if (isset($data->encrypt_key)) {
     5405                                $encryptKey = $data->encrypt_key;
     5406                            }
     5407
     5408                            if (isset($data->encrypt_iv)) {
     5409                                $encryptIV = $data->encrypt_iv;
     5410                            }
     5411
     5412                            $results = array(
     5413                                'encrypt_key' => $encryptKey,
     5414                                'encrypt_iv' => $encryptIV
     5415                            );
     5416                        } else {
     5417                            $results = array(
     5418                                'error' => 'API did not return a success message'
     5419                            );
     5420                        }
     5421                    }
     5422                }
     5423            } else {
     5424                $results = array(
     5425                    'error' => 'No response from API'
     5426                );
     5427            }
     5428
     5429            // ENCRYPT FORM FIELDS ARRAY
     5430            $encryptedFields = self::encrypt(json_encode($formFields), $encryptKey, $encryptIV);
     5431
     5432            /* SEND ENCRYPTED FORM FIELDS TO API */
     5433            // Create curl resource
     5434            //$curl_url = 'https://www.hipaaforms.online/hipaa-api';
     5435            $curl = curl_init(self::CURL_URL);
     5436
     5437            // Create post data
     5438            $curl_post_data = array(
     5439                'form_id' => $formId,
     5440                'form_fields' => $encryptedFields,
     5441                'plugin_version' => HIPAAFORMS_CURRENT_VERSION
     5442            );
     5443
     5444            // Assign curl settings
     5445            curl_setopt($curl, CURLOPT_HTTPHEADER, array(
     5446                'Action: rebuildformfields',
     5447                'License-Key: ' . $licenseKey
     5448            ));
     5449            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
     5450            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($curl_post_data));
     5451            curl_setopt($curl, CURLOPT_REFERER, get_site_url());
     5452
     5453            $output = json_decode(curl_exec($curl));
     5454
     5455            // Close curl resource to free up system resources
     5456            curl_close($curl);
     5457
     5458            if ($output) {
     5459                foreach ($output as $data) {
     5460                    $error = '';
     5461                    if (isset($data->error)) {
     5462                        $error = $data->error;
     5463                    }
     5464
     5465                    if ($error) {
     5466                        $results = array(
     5467                            'error' => $error
     5468                        );
     5469                    } else {
     5470                        $success = $data->success;
     5471
     5472                        if ($success == 'success') {
     5473                            $results = array(
     5474                                'success' => 'success'
     5475                            );
     5476                        }
     5477                    }
     5478                }
     5479            } else {
     5480                $results = array(
     5481                    'error' => 'No response from API'
     5482                );
     5483            }
     5484
     5485            return json_encode($results);
     5486        }
     5487    }
     5488
    53545489    /**** EXPORT FORM ***/
    53555490    public function exportForm($formId, $includeNotes, $security) {
     
    55075642                                    $decryptedFields = json_decode(self::decrypt($formFields, $encryptKey, $encryptIv));
    55085643                                    $fields[] = $decryptedFields;
     5644
     5645                                    // IF DECRYPTED FIELDS IS EMPTY
     5646                                    if(is_array($decryptedFields) && empty($decryptedFields)) {
     5647                                        $results = array(
     5648                                            'error' => 'EMPTY',
     5649                                            'content' => 'Decrypted Fields Array is Empty',
     5650                                            'form_id' => $formId
     5651                                        );
     5652
     5653                                        return json_encode($results);
     5654                                    }
     5655                                } else {
     5656                                    $results = array(
     5657                                        'error' => 'EMPTY',
     5658                                        'content' => 'Form fields is empty',
     5659                                        'form_id' => $formId
     5660                                    );
     5661
     5662                                    return json_encode($results);
    55095663                                }
    55105664                            }
     
    55245678                                'domain' => $domain,
    55255679                                'date' => $formDate,
    5526                                 'fields' => $fields
     5680                                'fields' => $fields,
     5681                                'form_fields' => $formFields
    55275682                            );
    55285683                        } else {
     
    56755830
    56765831                            if (is_array($formsData) && !empty($formsData)) {
     5832                                // LOOP FORMS & CHECK FOR MISSING/EMPTY FORM FIELDS
     5833                                $emptyForms = array();
     5834                                foreach ($formsData as $formData) {
     5835                                    $form = $formData[0];
     5836                                    $formId = $form->form_id;
     5837                                    $formFields = $form->fields;
     5838                                    $encryptKey = $form->encrypt_key;
     5839                                    $encryptIv = $form->encrypt_iv;
     5840
     5841                                    // DECRYPT FORM FIELDS
     5842                                    $decryptedFields = '';
     5843                                    if ($formFields) {
     5844                                        $decryptedFields = json_decode(self::decrypt($formFields, $encryptKey, $encryptIv));
     5845                                    }
     5846
     5847                                    if(!$formFields || is_array($decryptedFields) && empty($decryptedFields)) {
     5848                                        array_push($emptyForms, $formId);
     5849                                    }
     5850                                }
     5851
     5852                                if($emptyForms && is_array($emptyForms) && !empty($emptyForms)) {
     5853                                    $results = array(
     5854                                        'error' => 'Empty form fields',
     5855                                        'form_ids' => $emptyForms
     5856                                    );
     5857
     5858                                    return json_encode($results);
     5859                                }
     5860
    56775861                                // LOOP FORMS
    56785862                                $forms = array();
     
    61916375
    61926376    /*
    6193      * FRONT END CLASSES
     6377     * FRONT END METHODS
    61946378     */
    61956379
  • codemonkeys-hipaa-forms/trunk/js/admin-script.js

    r2949557 r2958937  
    22 * Created by Spencer on 7/16/2018.
    33 * Updated by Dan on 7/27/2022.
    4  * V2.9.7
     4 * V2.9.8
    55 * Updated: 09/09/2022 by Dan
    66 */
     
    23162316/*** EXPORT FORM ***/
    23172317function cmHipaaExportForm(formId) {
    2318     //var nonce = hipaaScript.nonce;
    23192318    var resultsEle = jQuery('.cm-hipaa-submitted-form-export-results[data-form-id="' + formId + '"]');
    23202319
     
    23312330        success: function (data) {
    23322331            var exportData = JSON.parse(data);
    2333             var formId = exportData.form_id;
    2334             var formName = exportData.form_name.replace(/ /g,"_");
    2335             var firstName = exportData.first_name;
    2336             var lastName = exportData.last_name;
    2337             var email = exportData.email;
    2338             var phone = exportData.phone;
    2339             var location = exportData.location;
    2340             var domain = exportData.domain;
    2341             var date = exportData.date;
    2342             var formFields = exportData.fields;
    2343 
    2344             if(exportData) {
    2345                 // TODO: FORMAT FIELDS AND REPLACE FAKE PATHS AND CHECKMARK IMAGES
    2346                 var csv = '';
    2347 
    2348                 jQuery.each(formFields, function() {
    2349                     // Loop the array of objects
    2350                     var fields = jQuery(this);
    2351 
    2352                     for(var row = 0; row < fields.length; row++) {
    2353                         // ADD FORM_ID, FORM_NAME, FIRST_NAME & LAST_NAME TO FORMFIELDS ARRAY
    2354                         fields[row]['form_id'] = formId;
    2355                         fields[row]['form_name'] = formName;
    2356                         fields[row]['first_name'] = firstName;
    2357                         fields[row]['last_name'] = lastName;
    2358                         fields[row]['email'] = email;
    2359                         fields[row]['phone'] = phone;
    2360                         fields[row]['location'] = location;
    2361                         fields[row]['domain'] = domain;
    2362                         fields[row]['date'] = date;
    2363                     }
    2364 
    2365                     for(var row = 0; row < fields.length; row++) {
    2366                         var keysAmount = Object.keys(fields[row]).length;
    2367                         var keysCounter = 1;
    2368                         var valuesCounter = 1;
    2369 
    2370                         // If this is the first row, generate the headings
    2371                         if(row === 0){
    2372                             // Loop each property of the object
    2373                             for(var headKey in fields[row]) {
    2374                                 // This is to not add a comma at the last cell
    2375                                 // The '\r\n' adds a new line
    2376                                 csv += headKey + (keysCounter < keysAmount ? ',' : '\r\n' );
    2377                                 keysCounter++;
     2332            var dataError = exportData.error;
     2333
     2334            if(dataError === 'EMPTY') {
     2335                console.log('ERROR: ' + exportData.content);
     2336                // REBUILD FIELDS ARRAY
     2337                cmHipaaRebuildFieldsArray(exportData.form_id, 'single');
     2338            } else {
     2339                var formId = exportData.form_id;
     2340                var formName = exportData.form_name.replace(/ /g, "_");
     2341                var firstName = exportData.first_name;
     2342                var lastName = exportData.last_name;
     2343                var email = exportData.email;
     2344                var phone = exportData.phone;
     2345                var location = exportData.location;
     2346                var domain = exportData.domain;
     2347                var date = exportData.date;
     2348                var formFields = exportData.fields;
     2349
     2350                if (formFields && formFields !== 'null') {
     2351                    // TODO: FORMAT FIELDS AND REPLACE FAKE PATHS AND CHECKMARK IMAGES
     2352                    var csv = '';
     2353
     2354                    jQuery.each(formFields, function () {
     2355                        // Loop the array of objects
     2356                        var fields = jQuery(this);
     2357
     2358                        for (var row = 0; row < fields.length; row++) {
     2359                            // ADD FORM_ID, FORM_NAME, FIRST_NAME & LAST_NAME TO FORMFIELDS ARRAY
     2360                            fields[row]['form_id'] = formId;
     2361                            fields[row]['form_name'] = formName;
     2362                            fields[row]['first_name'] = firstName;
     2363                            fields[row]['last_name'] = lastName;
     2364                            fields[row]['email'] = email;
     2365                            fields[row]['phone'] = phone;
     2366                            fields[row]['location'] = location;
     2367                            fields[row]['domain'] = domain;
     2368                            fields[row]['date'] = date;
     2369                        }
     2370
     2371                        for (var row = 0; row < fields.length; row++) {
     2372                            var keysAmount = Object.keys(fields[row]).length;
     2373                            var keysCounter = 1;
     2374                            var valuesCounter = 1;
     2375
     2376                            // If this is the first row, generate the headings
     2377                            if (row === 0) {
     2378                                // Loop each property of the object
     2379                                for (var headKey in fields[row]) {
     2380                                    // This is to not add a comma at the last cell
     2381                                    // The '\r\n' adds a new line
     2382                                    csv += headKey + (keysCounter < keysAmount ? ',' : '\r\n');
     2383                                    keysCounter++;
     2384                                }
    23782385                            }
     2386
     2387                            if (!fields[row]['field_id'] && fields[row]['label'] === 'Signature') {
     2388                                // IGNORE DRAG 'N DRAW SIGNATURE FIELD
     2389                            } else {
     2390                                for (var valKey in fields[row]) {
     2391                                    var fieldValue;
     2392
     2393                                    if (fields[row][valKey]) {
     2394                                        if (typeof fields[row][valKey] === 'string' || fields[row][valKey] instanceof String) {
     2395                                            fieldValue = fields[row][valKey].trim().replace(/,/g, ';').replace(/(\r\n|\n|\r)/gm, ';');
     2396                                        } else {
     2397                                            // IF VALUE IS OBJECT ARRAY LIKE FROM MULTISELECT, JOIN VALUES TO STRING
     2398                                            if (Array.isArray(fields[row][valKey])) {
     2399                                                fieldValue = fields[row][valKey].join(';');
     2400                                                fieldValue = fieldValue.trim().replace(/,/g, ';');
     2401                                            } else {
     2402                                                fieldValue = fields[row][valKey];
     2403                                            }
     2404                                        }
     2405                                    } else {
     2406                                        fieldValue = 'NA';
     2407                                    }
     2408
     2409                                    csv += fieldValue + (valuesCounter < keysAmount ? ',' : '\r\n');
     2410                                    valuesCounter++;
     2411                                }
     2412                            }
     2413
     2414                            keysCounter = 1;
     2415                            valuesCounter = 1;
    23792416                        }
    2380 
    2381                         if(!fields[row]['field_id'] && fields[row]['label'] === 'Signature') {
    2382                             // IGNORE DRAG 'N DRAW SIGNATURE FIELD
    2383                         } else {
    2384                             for (var valKey in fields[row]) {
    2385                                 var fieldValue;
    2386 
    2387                                 if (fields[row][valKey]) {
    2388                                     if(typeof fields[row][valKey] === 'string' || fields[row][valKey] instanceof String) {
    2389                                         fieldValue = fields[row][valKey].trim().replace(/,/g, ';').replace(/(\r\n|\n|\r)/gm,';');
    2390                                     } else {
    2391                                         // IF VALUE IS OBJECT ARRAY LIKE FROM MULTISELECT, JOIN VALUES TO STRING
    2392                                         if(Array.isArray(fields[row][valKey])) {
    2393                                             fieldValue = fields[row][valKey].join(';');
    2394                                             fieldValue = fieldValue.trim().replace(/,/g, ';');
    2395                                         } else {
    2396                                             fieldValue = fields[row][valKey];
    2397                                         }
    2398                                     }
    2399                                 } else {
    2400                                     fieldValue = 'NA';
    2401                                 }
    2402 
    2403                                 csv += fieldValue + (valuesCounter < keysAmount ? ',' : '\r\n');
    2404                                 valuesCounter++;
    2405                             }
    2406                         }
    2407 
    2408                         keysCounter = 1;
    2409                         valuesCounter = 1;
    2410                     }
    2411                 });
    2412 
    2413                 // Once we are done looping, download the .csv by creating a link
    2414                 var link = document.createElement('a');
    2415                 link.id = 'download-form-csv-' + formId;
    2416                 link.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(csv));
    2417                 link.setAttribute('download', 'hipaa_form_' + formId + '.csv');
    2418                 document.body.appendChild(link);
    2419                 document.querySelector('#download-form-csv-' + formId).click();
    2420 
    2421                 resultsEle.html('');
    2422             } else {
    2423                 resultsEle.html('No results');
     2417                    });
     2418
     2419                    // Once we are done looping, download the .csv by creating a link
     2420                    var link = document.createElement('a');
     2421                    link.id = 'download-form-csv-' + formId;
     2422                    link.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(csv));
     2423                    link.setAttribute('download', 'hipaa_form_' + formId + '.csv');
     2424                    document.body.appendChild(link);
     2425                    document.querySelector('#download-form-csv-' + formId).click();
     2426
     2427                    resultsEle.html('');
     2428                } else {
     2429                    resultsEle.html('No results, form fields empty');
     2430                }
    24242431            }
    24252432        },
     
    26452652                    var exportData = JSON.parse(data);
    26462653                    var formsSet = exportData.forms;
     2654
     2655                    if(exportData.error === 'Empty form fields') {
     2656                        const emptyFormIds = exportData.form_ids;
     2657                        console.log('ERROR: Forms ' + emptyFormIds + ' missing fields data, rebuilding fields data now...');
     2658
     2659                        if(emptyFormIds && Array.isArray(emptyFormIds)) {
     2660                            buildHiddenForms(emptyFormIds);
     2661                        } else {
     2662                            console.log('Form fields empty but no form IDs found');
     2663                        }
     2664
     2665                        return false;
     2666                    }
    26472667
    26482668                    jQuery.each(formsSet, function(formsIndex, formsValue) {
     
    27592779    }
    27602780}
     2781
     2782/*** REBUILD EMPTY FIELDS ARRAY ***/
     2783function cmHipaaRebuildFieldsArray(formId, type, isLast) {
     2784    let formWrapper;
     2785    if(type === 'single') {
     2786        formWrapper = jQuery('#cm-submitted-form-wrapper-' + formId);
     2787    } else if(type === 'bulk') {
     2788        formWrapper = jQuery('#cm-hidden-submitted-form-wrapper-' + formId);
     2789    }
     2790
     2791    // REMOVE JUNK FROM HTML WE DON'T WANT PASSED INTO VALUES
     2792    formWrapper.find('.screen-reader-text, .gfield_required').remove();
     2793
     2794    // GET FIELDS
     2795    const fields = formWrapper.find('.gfield');
     2796    let formFields = [];
     2797
     2798    jQuery.each(fields, function() {
     2799        const thisField = jQuery(this);
     2800        const fieldId = thisField.attr('id');
     2801        const legend = thisField.find('legend').text();
     2802        const label = thisField.find('label').text();
     2803        const fieldClass = thisField.attr('class');
     2804        const fieldClassArr = fieldClass.split(' ');
     2805        const typeClass = fieldClassArr.filter(p => String(p).startsWith('gfield--type'));
     2806        const fieldType = typeClass[0].split('-').pop();
     2807        let fieldValue = '';
     2808
     2809        // SET LABEL VALUE (SOME FIELDS HAVE A LEGEND)
     2810        let labelValue;
     2811        if(legend) {
     2812            labelValue = legend;
     2813        } else {
     2814            labelValue = label;
     2815        }
     2816
     2817        // SET CHECKBOX OR RADIO FIELD LABEL AND INPUT LABEL
     2818        if (fieldType === 'checkbox' || fieldType === 'radio') {
     2819            let optionFieldWrapper = thisField.find('.cm-hipaa-forms-radio-checked-wrapper, .cm-hipaa-forms-radio-not-checked-wrapper, .cm-hipaa-forms-checkbox-checked-wrapper, .cm-hipaa-forms-checkbox-not-checked-wrapper');
     2820
     2821            jQuery.each(optionFieldWrapper, function(index) {
     2822                let optionLabelEle;
     2823                let optionId = '';
     2824                let optionLabel = '';
     2825
     2826                optionLabelEle = jQuery(this).find('label');
     2827                optionId = optionLabelEle.attr('for');
     2828
     2829                if(!optionLabelEle || optionLabelEle.length === 0) {
     2830                    optionLabelEle = jQuery(this).find('.gform-field-label');
     2831                    optionId = fieldId + '_' + index;
     2832                }
     2833
     2834                optionLabel = optionLabelEle.text().trim();
     2835
     2836                if(jQuery(this).hasClass('cm-hipaa-forms-radio-checked-wrapper') || jQuery(this).hasClass('cm-hipaa-forms-checkbox-checked-wrapper')) {
     2837                    fieldValue = 'checked';
     2838                } else {
     2839                    fieldValue = '';
     2840                }
     2841
     2842                formFields.push({
     2843                    'field_id': optionId,
     2844                    'label': labelValue,
     2845                    'option_label': optionLabel,
     2846                    'option_value': optionLabel,
     2847                    'option_text': '',
     2848                    'value': fieldValue,
     2849                    'field_type': fieldType
     2850                });
     2851            });
     2852        } else if(fieldType === 'list') {
     2853            const listGroups = thisField.find('.gfield_list_group');
     2854            const listHeaders = thisField.find('.gform-field-label.gfield_header_item');
     2855            let listItems = [];
     2856
     2857            // LOOP LIST GROUPS
     2858            jQuery.each(listGroups, function() {
     2859                const listGroup = jQuery(this);
     2860
     2861                // IF HEADERS EXIST
     2862                if (listHeaders && listHeaders.length > 0) {
     2863                    // LOOP HEADERS
     2864                    jQuery.each(listHeaders, function (index) {
     2865                        // GET GROUP ITEMS WITHIN THIS GROUP
     2866                        const listGroupItem = listGroup.find('.gfield_list_group_item:eq(' + index + ')').find('span');
     2867                        let listHeader = listGroupItem.attr('aria-label');
     2868                        // REPLACE COMMA WITH SEMICOLON
     2869                        listHeader = listHeader.replace(',', ';');
     2870                        const listValue = listGroupItem.text().trim();
     2871
     2872                        listItems.push(listHeader + ':' + listValue);
     2873                    });
     2874                } else {
     2875                    const listItemEles = listGroup.find('.gfield_list_group_item');
     2876
     2877                    jQuery.each(listItemEles, function () {
     2878                        listItems.push(jQuery(this).text().trim());
     2879                    });
     2880                }
     2881            });
     2882
     2883            fieldValue = listItems.join(' - ');
     2884
     2885            formFields.push({
     2886                'field_id': fieldId,
     2887                'label': labelValue,
     2888                'option_label': '',
     2889                'option_value': '',
     2890                'option_text': '',
     2891                'value': fieldValue,
     2892                'field_type': fieldType
     2893            });
     2894        } else {
     2895            fieldValue = thisField.find('.ginput_container').text().trim();
     2896
     2897            formFields.push({
     2898                'field_id': fieldId,
     2899                'label': labelValue,
     2900                'option_label': '',
     2901                'option_value': '',
     2902                'option_text': '',
     2903                'value': fieldValue,
     2904                'field_type': fieldType
     2905            });
     2906        }
     2907    });
     2908
     2909    // ADD PRIVACY FIELD
     2910    const privacyFieldWrapper = formWrapper.find('.cm-hipaa-forms-privacy-statement');
     2911    if(privacyFieldWrapper) {
     2912        const privacyLabelEle = privacyFieldWrapper.find('label');
     2913        const privacyLabel = privacyLabelEle.text().trim();
     2914        const privacyOptionLabel = privacyFieldWrapper.find('.cm-hipaa-forms-checkbox-value').text().trim();
     2915
     2916        let privacyFieldValue = '';
     2917        if(privacyFieldWrapper.hasClass('cm-hipaa-forms-checkbox-checked-wrapper')) {
     2918            privacyFieldValue = 'checked';
     2919        }
     2920
     2921        formFields.push({
     2922            'field_id': 'cm-hipaa-forms-privacy-agree',
     2923            'label': 'Privacy Agreement',
     2924            'option_label': privacyLabel,
     2925            'option_value': privacyOptionLabel,
     2926            'option_text': '',
     2927            'value': privacyFieldValue,
     2928            'field_type': 'checkbox'
     2929        });
     2930    }
     2931    //console.log(formFields);
     2932
     2933    jQuery.ajax({
     2934        method: 'POST',
     2935        type: 'POST',
     2936        url: hipaaScript.ajax_url,
     2937        data: {
     2938            'action': 'cm_hipaa_rebuild_form_fields',
     2939            'form_id': formId,
     2940            'form_fields': formFields,
     2941            'nonce': hipaaScript.nonce
     2942        },
     2943        success: function (data) {
     2944            const results = JSON.parse(data);
     2945
     2946            if(results.success === 'success') {
     2947                if(type === 'single') {
     2948                    console.log('Fields data for form ID ' + formId + ' successfully rebuilt, continuing to export...');
     2949
     2950                    // RE-RUN EXPORT
     2951                    cmHipaaExportForm(formId);
     2952                } else if(type === 'bulk') {
     2953                    console.log('Fields data for form ID ' + formId + ' successfully rebuilt');
     2954
     2955                    // REMOVE HIDDEN FORM ELEMENT
     2956                    jQuery('#cm-hidden-submitted-form-wrapper-' + formId).remove();
     2957                    console.log('Form ID ' + formId + ' HTML removed');
     2958
     2959                    if(isLast === true || isLast === 'true') {
     2960                        // IF LAST FORM IN BULK LOOP
     2961                        console.log('All field data rebuilt for all forms, continuing to export...');
     2962
     2963                        // GET FORM ID'S TO EXPORT
     2964                        const formIds = jQuery('.cm-hipaa-forms-bulk-export-button').attr('data-form-ids');
     2965
     2966                        // RE-RUN BULK EXPORT
     2967                        cmHipaaBulkFormExport(formIds);
     2968                    } else {
     2969                        console.log('Rebuilding fields data for next form...');
     2970                    }
     2971                }
     2972            } else {
     2973                console.log('Error rebuilding fields data: ' + results.error);
     2974            }
     2975        },
     2976        error: function (errorThrown) {
     2977            console.log(errorThrown);
     2978        }
     2979    });
     2980}
     2981
     2982async function buildHiddenForms(formIds = []) {
     2983    // LOOP EMPTY FORM ID'S
     2984    for(let i = 0; i < formIds.length; i++) {
     2985        let isLast = false;
     2986        let result;
     2987        try {
     2988            result = await jQuery.ajax({
     2989                method: 'POST',
     2990                type: 'POST',
     2991                url: hipaaScript.ajax_url,
     2992                data: {
     2993                    'action': 'cm_hipaa_get_submitted_form',
     2994                    'form_id': formIds[i],
     2995                    'nonce': hipaaScript.nonce
     2996                },
     2997            });
     2998        } catch (error) {
     2999            result = {
     3000                'error': error
     3001            }
     3002            console.error(error);
     3003        }
     3004
     3005        let resultData;
     3006        if(result) {
     3007            resultData = JSON.parse(result);
     3008        }
     3009
     3010        if(resultData.success === 'success') {
     3011            // SET "isLast" TRUE IF LAST ITERATION
     3012            if(i+1 === formIds.length) {
     3013                isLast = true;
     3014            }
     3015
     3016            // ADD FORM IN HIDDEN ELEMENT
     3017            jQuery('.cm-hipaa-forms-bulk-export-wrapper').append('<div id="cm-hidden-submitted-form-wrapper-' + resultData.form_id + '" style="display:none">' + resultData.form + '</div>');
     3018            console.log('HTML form pulled for form ID ' + resultData.form_id);
     3019
     3020            // REBUILD MISSING FORM FIELDS DATA
     3021            cmHipaaRebuildFieldsArray(resultData.form_id, 'bulk', isLast);
     3022        }
     3023    }
     3024
     3025    // EMPTY FIELDS VALUES
     3026    // 2580 "U1oxYWhVNEh5dGJacS9uUWNPUEswdz09"
     3027    // 2579 "cFV1cjVzVmU0NVByUzkxZDViMFZqdz09"
     3028    // 2578 "aEE4ZlhRRWJDOUZhWHpNRmVDK2tBUT09"
     3029    // 2577 "K0d5N1RHUm5BSUsxQ080SGJkc1JKQT09"
     3030    // 2576 "WDFVdlF6TTN6MW41Y0prelhRYjh6QT09"
     3031    // 2575 "b20ybG1nZGhlZ21TdjJHa1RCTE5BQT09"
     3032    // 2574 "VnpMTUtUekR5a0tsWk5xUVNTQ0NRdz09"
     3033    // 2573 "aUxqcFJ1U0lqTnhHWmUvOTZYaVRoUT09"
     3034    // 2572 "WG5tOTRyT2hqMDJhSVllSVczZWZHQT09"
     3035    // 2571 "dTFQZTBjUUlKL1I5Qi9JUkdRZHAwdz09"
     3036    // 2570 "SkhkOVlKbHBnTUhmZEVXOVZIbzVHZz09"
     3037}
  • codemonkeys-hipaa-forms/trunk/js/script.js

    r2949557 r2958937  
    22 * Created by Spencer on 7/16/2018.
    33 * Updated by Dan on 7/14/2023.
    4  * V2.9.7
     4 * V2.9.8
    55 */
    66
     
    31193119                submitButton.removeClass('inactive').addClass('active');
    31203120            } else {
     3121                //console.log(formId);
    31213122                //console.log(formFields);
    31223123                //console.log(hiddenForm.html());
  • codemonkeys-hipaa-forms/trunk/readme.txt

    r2949557 r2958937  
    33Tags: hipaa forms, gravity forms, hipaa compliance, secure forms, health forms, medical forms
    44Requires at least: 5.4
    5 Tested up to: 6.2.5
    6 Stable tag: 2.9.7
     5Tested up to: 6.3.5
     6Stable tag: 2.9.8
    77License: GPLv2
    88
     
    186186
    187187== Changelog ==
     188V2.9.8
     189- Added fix to rebuild missing export data during export
     190
    188191V2.9.7
    189192- Fixed empty export
Note: See TracChangeset for help on using the changeset viewer.