public static function add_job($form_id, array $mail_packet, $mails_in_one_go = 20, $optional_callback = null)
 {
     $job_batch = get_option("rm_option_jobman_job", null);
     if ($job_batch == null) {
         $job_batch = array();
     }
     $test = RM_DBManager::count('SUBMISSIONS', array('form_id' => $form_id, 'user_email' => 'not null'));
     //Test if there is an 'user_email' entry for the given form
     if ($test === false || $test === 0) {
         return false;
     }
     $job = new stdClass();
     $job->form_id = $form_id;
     $job->job_size = $mails_in_one_go;
     $job->callback = $optional_callback;
     $job->offset = 0;
     $job->mail_packet = $mail_packet;
     $job->total = (int) RM_DBManager::count('SUBMISSIONS', array('form_id' => $form_id));
     $job->started_on = RM_Utilities::get_current_time();
     $form_fields = array();
     $fields = self::get_fields($form_id);
     if ($fields) {
         foreach ($fields as $field) {
             $form_fields[] = $field->field_type . "_" . $field->field_id;
         }
     }
     $job->form_fields = $form_fields;
     $job_batch["_" . $form_id] = $job;
     //error_log('job added');
     // self::log_var_dump($job_batch);
     update_option("rm_option_jobman_job", $job_batch);
     //error_log('exiting from add_job');
     return true;
 }
 public function charge($data, $pricing_details)
 {
     $curr_date = RM_Utilities::get_current_time();
     $stripe_api_key = $this->options->get_value_of('stripe_api_key');
     if ($stripe_api_key == null) {
         return false;
     }
     if ($pricing_details->total_price <= 0.0) {
         return true;
     }
     //Zero amount case.
     $global_options = new RM_Options();
     // Get the credit card details submitted by the form
     $error = '';
     $success = '';
     // Create the charge on Stripe's servers - this will charge the user's card
     $items = array();
     foreach ($pricing_details->billing as $detail) {
         $items[] = $detail->label;
     }
     $response = '';
     $items_str = implode(',', $items);
     try {
         \Stripe\Stripe::setApiKey($stripe_api_key);
         //sk_test_GsT4d690JZzbFk48w0GhsrIX
         $charge = \Stripe\Charge::create(array("amount" => $pricing_details->total_price * 100, "currency" => strtolower($this->currency), "source" => $data->stripeToken, "description" => $items_str));
         $response = $charge->getLastResponse();
         $response_body = json_decode($response->body);
     } catch (Stripe_InvalidRequestError $e) {
         return false;
     } catch (\Stripe\Error\Card $e) {
         //echo 'test'; die;
         $log_entry_id = RM_DBManager::insert_row('PAYPAL_LOGS', array('submission_id' => $data->submission_id, 'form_id' => $data->form_id, 'txn_id' => '', 'status' => 'Card Declined', 'total_amount' => $pricing_details->total_price, 'currency' => $this->currency, 'posted_date' => $curr_date), array('%d', '%d', '%s', '%s', '%f', '%s', '%s'));
         return false;
     }
     if ($response->code == "200") {
         $log_entry_id = RM_DBManager::insert_row('PAYPAL_LOGS', array('submission_id' => $data->submission_id, 'form_id' => $data->form_id, 'txn_id' => $response_body->balance_transaction, 'status' => $response_body->status, 'total_amount' => $pricing_details->total_price, 'currency' => $this->currency, 'posted_date' => $curr_date), array('%d', '%d', '%s', '%s', '%f', '%s', '%s'));
         return true;
     }
     return false;
 }
 public function charge($data, $pricing_details)
 {
     $form_id = $data->form_id;
     $this_script = get_permalink();
     if (false == $this_script) {
         $this_script = admin_url('admin-ajax.php?action=registrationmagic_embedform&form_id=' . $data->form_id);
     }
     $sign = strpos($this_script, '?') ? '&' : '?';
     $i = 1;
     foreach ($pricing_details->billing as $item) {
         $this->paypal->add_field('item_name_' . $i, $item->label);
         $i++;
     }
     $i = 1;
     $total_amount = 0.0;
     foreach ($pricing_details->billing as $item) {
         $this->paypal->add_field('amount_' . $i, $item->price);
         $total_amount += floatval($item->price);
         $i++;
     }
     $invoice = (string) date("His") . rand(1234, 9632);
     $this->paypal->add_field('business', $this->paypal_email);
     // Call the facilitator eaccount
     $this->paypal->add_field('cmd', '_cart');
     // cmd should be _cart for cart checkout
     $this->paypal->add_field('upload', '1');
     $this->paypal->add_field('return', $this_script . $sign . 'rm_pproc=success&rm_pproc_id=0');
     // return URL after the transaction got over
     $this->paypal->add_field('cancel_return', $this_script . $sign . 'rm_pproc=cancel&rm_pproc_id=0');
     // cancel URL if the trasaction was cancelled during half of the transaction
     $this->paypal->add_field('notify_url', $this_script . $sign . 'rm_pproc=ipn&rm_pproc_id=0');
     // Notify URL which received IPN (Instant Payment Notification)
     $this->paypal->add_field('currency_code', $this->currency);
     $this->paypal->add_field('invoice', $invoice);
     $this->paypal->add_field('page_style', $this->paypal_page_style);
     //Insert into PayPal log table
     $curr_date = RM_Utilities::get_current_time();
     //date_i18n(get_option('date_format'));
     if ($total_amount <= 0.0) {
         $log_entry_id = RM_DBManager::insert_row('PAYPAL_LOGS', array('submission_id' => $data->submission_id, 'form_id' => $form_id, 'invoice' => $invoice, 'status' => 'Completed', 'total_amount' => $total_amount, 'currency' => $this->currency, 'posted_date' => $curr_date), array('%d', '%d', '%s', '%s', '%f', '%s', '%s'));
         return true;
     } else {
         $log_entry_id = RM_DBManager::insert_row('PAYPAL_LOGS', array('submission_id' => $data->submission_id, 'form_id' => $form_id, 'invoice' => $invoice, 'status' => 'Pending', 'total_amount' => $total_amount, 'currency' => $this->currency, 'posted_date' => $curr_date), array('%d', '%d', '%s', '%s', '%f', '%s', '%s'));
     }
     if (isset($data->user_id)) {
         $cstm_data = $log_entry_id . "|" . $data->user_id;
     } else {
         $cstm_data = $log_entry_id . "|0";
     }
     $this->paypal->add_field('custom', $cstm_data);
     $this->paypal->add_field('return', $this_script . $sign . 'rm_pproc=success&rm_pproc_id=' . $log_entry_id);
     // return URL after the transaction got over
     $this->paypal->add_field('cancel_return', $this_script . $sign . 'rm_pproc=cancel&rm_pproc_id=' . $log_entry_id);
     // cancel URL if the trasaction was cancelled during half of the transaction
     $this->paypal->add_field('notify_url', $this_script . $sign . 'rm_pproc=ipn&rm_pproc_id=' . $log_entry_id);
     // Notify URL which received IPN (Instant Payment Notification)
     $this->paypal->submit_paypal_post();
     // POST it to paypal
     return 'do_not_redirect';
     //We do not want form redirect to work in case paypal processing is going on.
 }
 public function migrate_submissions($offset = 0, $limit = 9999999)
 {
     global $wpdb;
     $qry = "";
     $fields = array();
     $pfields = array();
     $plogs = array();
     $form_field = array();
     $data_mapping = $this->value_map['submissions'];
     $dst_data = array();
     $dst_data_sub = array();
     $users = array();
     $emails = array();
     $dbcolumns = array('sub_field_id', 'submission_id', 'field_id', 'form_id', 'value');
     $dbcolumns_sub = array('submission_id', 'form_id', 'data', 'user_email', 'submitted_on', 'unique_token');
     //$dbcolumns_sub_ph = array('%d', '%d', '%s', '%s', '%s', '%s');
     //$dbcolumns_ph = array('%d', '%d', '%d', '%d', '%s');
     $dbcolumns_sub_ph = "(%d,%d,%s,%s,%s,%s)";
     $dbcolumns_ph = "(%d,%d,%d,%d,%s)";
     $all_sub = array();
     $all_sub_fields = array();
     $table_name_fields = $wpdb->prefix . 'crf_fields';
     $table_name_pfields = $wpdb->prefix . 'crf_fields';
     $table_name_plogs = $wpdb->prefix . 'crf_paypal_log';
     $table_name_src = $wpdb->prefix . 'crf_submissions';
     $table_name_dst = $wpdb->prefix . 'rm_submission_fields';
     $table_name_dst_sub = $wpdb->prefix . 'rm_submissions';
     $table_name_fields_rm = $wpdb->prefix . 'rm_fields';
     $options = new RM_Options();
     $srcdata = $wpdb->get_results("SELECT * FROM {$table_name_src} WHERE 1 LIMIT {$offset}, {$limit}");
     $fieldsdata = $wpdb->get_results("SELECT * FROM {$table_name_fields} WHERE 1");
     $pfieldsdata = $wpdb->get_results("SELECT * FROM {$table_name_pfields} WHERE 1");
     $plogsdata = $wpdb->get_results("SELECT * FROM {$table_name_plogs} WHERE 1");
     if (is_array($fieldsdata)) {
         foreach ($fieldsdata as $f_data) {
             $fields[$f_data->Id] = $f_data;
             if (!isset($form_field[$f_data->Form_Id])) {
                 $form_field[$f_data->Form_Id] = array();
             }
             if (!isset($form_field[$f_data->Form_Id][$f_data->Type])) {
                 $form_field[$f_data->Form_Id][$f_data->Type] = $f_data->Id;
             }
         }
         unset($fieldsdata);
         if (is_array($plogsdata)) {
             foreach ($plogsdata as $p_data) {
                 $log = maybe_unserialize($p_data->log);
                 $plogs[$log['custom']] = $log['mc_currency'];
             }
         }
         unset($plogsdata);
         if (is_array($pfieldsdata)) {
             foreach ($pfieldsdata as $p_data) {
                 $pfields[$p_data->Id] = $p_data;
             }
         }
         unset($pfieldsdata);
         $i = 0;
         if ($srcdata && is_array($srcdata)) {
             foreach ($srcdata as $s) {
                 $dst_data[$i] = array();
                 $is_row_valid = true;
                 if (isset($form_field[$s->form_id]['email'])) {
                     $ef_id = $form_field[$s->form_id]['email'];
                 } else {
                     $ef_id = 0;
                 }
                 if (!isset($dst_data_sub[$s->submission_id])) {
                     $dst_data_sub[$s->submission_id] = array();
                     foreach ($dbcolumns_sub as $index) {
                         $dst_data_sub[$s->submission_id][$index] = null;
                     }
                     $dst_data_sub[$s->submission_id]['submission_id'] = $s->submission_id;
                     $dst_data_sub[$s->submission_id]['form_id'] = $s->form_id;
                     $dst_data_sub[$s->submission_id]['data'] = array();
                 }
                 foreach ($data_mapping as $a => $b) {
                     $value = $s->{$a};
                     if ($a === 'field') {
                         switch ($s->{$a}) {
                             case 'first_name':
                                 if (isset($form_field[$s->form_id]['first_name'])) {
                                     $f_id = $form_field[$s->form_id]['first_name'];
                                     $value = $fields[$f_id]->Id;
                                     $dst_data_sub[$s->submission_id]['data'][$value] = new stdClass();
                                     $dst_data_sub[$s->submission_id]['data'][$value]->label = stripslashes($fields[$f_id]->Name);
                                     $dst_data_sub[$s->submission_id]['data'][$value]->value = stripslashes($s->value);
                                 } else {
                                     $dst_data_sub[$s->submission_id]['data']['first_name'] = new stdClass();
                                     $dst_data_sub[$s->submission_id]['data']['first_name']->label = 'first_name';
                                     $dst_data_sub[$s->submission_id]['data']['first_name']->value = stripslashes($s->value);
                                 }
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['first_name'] = $s->value;
                                 break;
                             case 'last_name':
                                 if (isset($form_field[$s->form_id]['last_name'])) {
                                     $f_id = $form_field[$s->form_id]['last_name'];
                                     $value = $fields[$f_id]->Id;
                                     $dst_data_sub[$s->submission_id]['data'][$value] = new stdClass();
                                     $dst_data_sub[$s->submission_id]['data'][$value]->label = stripslashes($fields[$f_id]->Name);
                                     $dst_data_sub[$s->submission_id]['data'][$value]->value = stripslashes($s->value);
                                 } else {
                                     $dst_data_sub[$s->submission_id]['data']['last_name'] = new stdClass();
                                     $dst_data_sub[$s->submission_id]['data']['last_name']->label = 'last_name';
                                     $dst_data_sub[$s->submission_id]['data']['last_name']->value = stripslashes($s->value);
                                 }
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['last_name'] = $s->value;
                                 break;
                             case 'description':
                                 if (isset($form_field[$s->form_id]['description'])) {
                                     $f_id = $form_field[$s->form_id]['description'];
                                     $value = $fields[$f_id]->Id;
                                     $dst_data_sub[$s->submission_id]['data'][$value] = new stdClass();
                                     $dst_data_sub[$s->submission_id]['data'][$value]->label = stripslashes($fields[$f_id]->Name);
                                     $dst_data_sub[$s->submission_id]['data'][$value]->value = stripslashes($s->value);
                                 } else {
                                     $dst_data_sub[$s->submission_id]['data']['description'] = new stdClass();
                                     $dst_data_sub[$s->submission_id]['data']['description']->label = 'description';
                                     $dst_data_sub[$s->submission_id]['data']['description']->value = stripslashes($s->value);
                                 }
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['bio'] = $s->value;
                                 break;
                             case 'token':
                                 $dst_data_sub[$s->submission_id]['unique_token'] = $s->value;
                                 $is_row_valid = false;
                                 break;
                             case 'entry_time':
                                 $dst_data_sub[$s->submission_id]['submitted_on'] = RM_Utilities::get_current_time($s->value);
                                 $is_row_valid = false;
                                 break;
                             case 'user_email':
                                 $dst_data_sub[$s->submission_id]['user_email'] = $s->value;
                                 $dst_data_sub[$s->submission_id]['data']['user_email'] = new stdClass();
                                 $dst_data_sub[$s->submission_id]['data']['user_email']->label = 'user_email';
                                 $dst_data_sub[$s->submission_id]['data']['user_email']->value = stripslashes($s->value);
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['user_email'] = $s->value;
                                 break;
                             case 'form_type':
                                 $is_row_valid = false;
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['form_type'] = $s->value;
                                 break;
                             case 'user_approval':
                                 $is_row_valid = false;
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['user_approval'] = $s->value;
                                 break;
                             case 'role':
                                 $is_row_valid = false;
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['role'] = $s->value;
                                 break;
                             case 'payment_status':
                                 $is_row_valid = false;
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['payment_status'] = $s->value;
                                 break;
                             case 'user_name':
                                 $is_row_valid = false;
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['user_name'] = $s->value;
                                 break;
                             case 'user_pass':
                                 $is_row_valid = false;
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['user_pass'] = $s->value;
                                 break;
                             case 'pass_encrypt':
                                 $is_row_valid = false;
                                 if (!isset($users[$s->submission_id])) {
                                     $users[$s->submission_id] = array();
                                 }
                                 $users[$s->submission_id]['pass_encrypt'] = $s->value;
                                 break;
                             default:
                                 $tmp = explode('_', $s->{$a});
                                 $f_id = array_pop($tmp);
                                 if (is_numeric($f_id)) {
                                     $label = implode('_', $tmp);
                                     $value = $f_id;
                                     if (isset($fields[$f_id]) && $fields[$f_id]->Name === $label) {
                                         switch ($fields[$f_id]->Type) {
                                             case 'checkbox':
                                             case 'repeatable_text':
                                                 $s->value = maybe_serialize(explode(',', $s->value));
                                                 break;
                                             case 'DatePicker':
                                                 $x = explode('-', $s->value);
                                                 $s->value = $x[1] . '/' . $x[2] . '/' . $x[0];
                                                 break;
                                             case 'file':
                                                 $x = explode(',', $s->value);
                                                 $x['rm_field_type'] = 'File';
                                                 $s->value = maybe_serialize($x);
                                                 break;
                                             case 'pricing':
                                                 if (isset($plogs[$s->submission_id])) {
                                                     $curr = $plogs[$s->submission_id];
                                                 } else {
                                                     $curr = get_option('crf_currency');
                                                 }
                                                 if (!$curr) {
                                                     $curr = 'USD';
                                                 }
                                                 if ($pfields[$fields[$f_id]->Value]->Type === 'checkbox') {
                                                     $v = array();
                                                     $ab = explode(',', $s->value);
                                                     foreach ($ab as $ba) {
                                                         $ac = explode('_', $ba);
                                                         $pr = array_pop($ac);
                                                         $pr_name = implode('_', $ac);
                                                         $v[] = $pr_name . '(' . $options->get_formatted_amount($pr, $curr) . ')';
                                                     }
                                                     $s->value = maybe_serialize($v);
                                                 } elseif ($pfields[$fields[$f_id]->Value]->Type === 'checkbox') {
                                                     $ac = explode('_', $ba);
                                                     $pr = array_pop($ac);
                                                     $pr_name = implode('_', $ac);
                                                     $s->value = $pr_name . '(' . $options->get_formatted_amount($pr, $curr) . ')';
                                                 } else {
                                                     $s->value = $options->get_formatted_amount($s->value, $curr);
                                                 }
                                                 break;
                                         }
                                         if ($ef_id === $f_id && !isset($emails[$s->submission_id])) {
                                             $emails[$s->submission_id] = new stdClass();
                                             $emails[$s->submission_id]->id = $ef_id;
                                             $emails[$s->submission_id]->value = $s->value;
                                         }
                                         $dst_data_sub[$s->submission_id]['data'][$f_id] = new stdClass();
                                         $dst_data_sub[$s->submission_id]['data'][$f_id]->label = stripslashes($fields[$f_id]->Name);
                                         $dst_data_sub[$s->submission_id]['data'][$f_id]->value = maybe_unserialize($s->value);
                                     } else {
                                         $dst_data_sub[$s->submission_id]['data'][$f_id] = new stdClass();
                                         $dst_data_sub[$s->submission_id]['data'][$f_id]->label = stripslashes($label);
                                         $dst_data_sub[$s->submission_id]['data'][$f_id]->value = maybe_unserialize($s->value);
                                     }
                                 } else {
                                     $is_row_valid = false;
                                 }
                                 break;
                         }
                     }
                     if ($is_row_valid) {
                         if (isset($s->{$a}) && $value !== null) {
                             $dst_data[$i][$b] = $value;
                         } else {
                             $dst_data[$i][$b] = null;
                         }
                     }
                 }
                 if ($is_row_valid) {
                     $i++;
                 } else {
                     $dst_data[$i] = array();
                 }
             }
             if ($dst_data && count($dst_data) !== 0) {
                 $qry .= "INSERT INTO {$table_name_dst} (`" . implode('`,`', $dbcolumns) . "`) values ";
                 $i = 0;
                 foreach ($dst_data as $d) {
                     if (is_array($d) && count($d) !== 0) {
                         foreach ($d as $d_single) {
                             $all_sub_fields[] = $d_single;
                         }
                         if ($i === 0) {
                             $qry .= $dbcolumns_ph;
                         } else {
                             $qry .= ", " . $dbcolumns_ph;
                         }
                         $i++;
                     }
                 }
                 $qry_sub = "INSERT INTO {$table_name_dst_sub} (`" . implode('`,`', $dbcolumns_sub) . "`) values ";
                 $i = 0;
                 foreach ($dst_data_sub as $sub_id => $d_sub) {
                     if (!isset($d_sub['user_email'])) {
                         if (isset($emails[$sub_id])) {
                             $dst_data_sub[$sub_id] = $emails[$sub_id]->value;
                             $this->created[] = $d_sub['form_id'];
                             $wpdb->update($table_name_fields_rm, array('is_field_primary' => 1), array('field_id' => $emails[$sub_id]->id), '%d', '%d');
                         } else {
                             $dst_data_sub[$sub_id] = null;
                         }
                     }
                     if (isset($d_sub['data'])) {
                         $d_sub['data'] = maybe_serialize($d_sub['data']);
                     }
                     if (is_array($d_sub) && count($d_sub) !== 0) {
                         foreach ($d_sub as $d_sub_single) {
                             $all_sub[] = $d_sub_single;
                         }
                         if ($i === 0) {
                             $qry_sub .= $dbcolumns_sub_ph;
                         } else {
                             $qry_sub .= ", " . $dbcolumns_sub_ph;
                         }
                         $i++;
                     }
                 }
             } else {
                 error_log('no_data_sub_fields');
             }
             if (count($users) !== 0) {
                 foreach ($users as $user) {
                     if ($user['form_type'] === 'reg_form' && (isset($user['user_approval']) && $user['user_approval'] != 'yes' || isset($user['payment_status']) && $user['payment_status'] === 'pending') && isset($user['user_email']) && is_email($user['user_email']) && !email_exists($user['user_email']) && isset($user['user_pass']) && isset($user['user_name'])) {
                         $password = null;
                         if (isset($user['pass_encrypt']) && $user['pass_encrypt'] == 1) {
                             $password = $this->crf_encrypt_decrypt_pass('decrypt', $user['user_pass']);
                             $password = $this->enc_str($password);
                         } else {
                             $password = $user['user_pass'];
                         }
                         $user_id = wp_create_user($user['user_name'], $password, $user['user_email']);
                         update_user_meta($user_id, 'rm_user_status', 1);
                         if (isset($user['first_name']) && $user['first_name']) {
                             update_user_meta($user_id, 'first_name', 1);
                         }
                         if (isset($user['last_name']) && $user['last_name']) {
                             update_user_meta($user_id, 'last_name', 1);
                         }
                         if (isset($user['bio']) && $user['bio']) {
                             update_user_meta($user_id, 'description', 1);
                         }
                     }
                 }
             }
             //$qry = esc_sql($qry);
             //error_log("Query: ".$qry);
             $result = $wpdb->query($wpdb->prepare($qry, $all_sub_fields));
             if (!$result) {
                 error_log('submission_fields_not_migrated');
             }
             $result_sub = $wpdb->query($wpdb->prepare($qry_sub, $all_sub));
             if (!$result_sub) {
                 error_log('submissions_not_migrated');
             }
             return;
         }
     }
     return false;
 }
 public function update_into_db()
 {
     if (!$this->initialized) {
         return false;
     }
     if (!$this->id) {
         return false;
     }
     $data = array('email' => $this->email, 'otp_code' => $this->otp_code, 'last_activity_time' => RM_Utilities::get_current_time());
     $data_specifiers = array('%s', '%s', '%s');
     $result = RM_DBManager::update_row('FRONT_USERS', $this->field_id, $data, $data_specifiers);
     if (!$result) {
         return false;
     }
     return true;
 }
 public static function update_last_activity()
 {
     global $wpdb;
     $table_name = RM_Table_Tech::get_table_name_for('FRONT_USERS');
     return $wpdb->query("UPDATE {$table_name} set `last_activity_time`= '" . RM_Utilities::get_current_time() . "'");
 }
 public function update_into_db()
 {
     if (!$this->initialized) {
         return false;
     }
     if (!$this->note_id) {
         return false;
     }
     $data = array('submission_id' => $this->submission_id, 'notes' => $this->notes, 'status' => $this->status, 'last_edit_date' => RM_Utilities::get_current_time(), 'last_edited_by' => get_current_user_id(), 'note_options' => maybe_serialize($this->note_options));
     $data_specifiers = array('%d', '%s', '%s', '%s', '%s', '%s');
     $result = RM_DBManager::update_row('NOTES', $this->note_id, $data, $data_specifiers);
     if (!$result) {
         return false;
     }
     return true;
 }
 public function process_payment($form_id, $reg_data, $service, $request)
 {
     //echo "<pre>"; var_dump($_GET); die;
     $payment_fields = array();
     foreach ($request->req as $field_name => $field_value) {
         if (substr($field_name, 0, 5) === 'Price') {
             $payment_fields[$field_name] = $field_value;
         }
     }
     //echo "<br>id= ".explode("_", $field_name)[2];
     //var_dump($payment_fields);
     //die;
     $sandbox = parent::get_setting('paypal_test_mode');
     $paypal_email = parent::get_setting('paypal_email');
     $currency = parent::get_setting('currency');
     $paypal_page_style = parent::get_setting('paypal_page_style');
     require_once plugin_dir_path(plugin_dir_path(__FILE__)) . 'external/PayPal/paypal.php';
     $p = new paypal_class();
     // paypal class
     if ($sandbox == 'yes') {
         $p->toggle_sandbox(true);
     } else {
         $p->toggle_sandbox(false);
     }
     $p->admin_mail = get_option('admin_email');
     // set notification email
     if (isset($request->req['rm_pproc'])) {
         switch ($request->req['rm_pproc']) {
             case 'success':
                 if (isset($request->req['rm_pproc_id'])) {
                     $log_id = $request->req['rm_pproc_id'];
                     $log = RM_DBManager::get_row('PAYPAL_LOGS', $log_id);
                     if ($log) {
                         if ($log->log) {
                             $paypal_log = maybe_unserialize($log->log);
                             $payment_status = $paypal_log['payment_status'];
                             if ($payment_status == 'Completed') {
                                 echo '<div id="rmform">';
                                 echo "<div class='rminfotextfront'>" . RM_UI_Strings::get("MSG_PAYMENT_SUCCESS") . "</br>";
                                 echo '</div></div>';
                                 return 'success';
                             } else {
                                 if ($payment_status == 'Denied' || $payment_status == 'Failed' || $payment_status == 'Refunded' || $payment_status == 'Reversed' || $payment_status == 'Voided') {
                                     echo '<div id="rmform">';
                                     echo "<div class='rminfotextfront'>" . RM_UI_Strings::get("MSG_PAYMENT_FAILED") . "</br>";
                                     echo '</div></div>';
                                     return 'failed';
                                 } else {
                                     if ($payment_status == 'In-Progress' || $payment_status == 'Pending' || $payment_status == 'Processed') {
                                         echo '<div id="rmform">';
                                         echo "<div class='rminfotextfront'>" . RM_UI_Strings::get("MSG_PAYMENT_PENDING") . "</br>";
                                         echo '</div></div>';
                                         return 'pending';
                                     } else {
                                         if ($payment_status == 'Canceled_Reversal') {
                                             return 'canceled_reversal';
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 return false;
             case 'cancel':
                 echo '<div id="rmform">';
                 echo "<div class='rminfotextfront'>" . RM_UI_Strings::get("MSG_PAYMENT_CANCEL") . "</br>";
                 echo '</div></div>';
                 return;
             case 'ipn':
                 $trasaction_id = $_POST["txn_id"];
                 $payment_status = $_POST["payment_status"];
                 $cstm = $_POST["custom"];
                 $abcd = explode("|", $cstm);
                 $user_id = (int) $abcd[1];
                 $acbd = explode("|", $cstm);
                 $log_entry_id = (int) $acbd[0];
                 //$_POST["custom"];
                 $log_array = maybe_serialize($_POST);
                 $curr_date = RM_Utilities::get_current_time();
                 // date_i18n(get_option('date_format'));
                 RM_DBManager::update_row('PAYPAL_LOGS', $log_entry_id, array('status' => $payment_status, 'txn_id' => $trasaction_id, 'posted_date' => $curr_date, 'log' => $log_array), array('%s', '%s', '%s', '%s'));
                 if ($p->validate_ipn()) {
                     //IPN is valid, check payment status and process logic
                     if ($payment_status == 'Completed') {
                         if ($user_id) {
                             $gopt = new RM_Options();
                             $this->user_service->activate_user_by_id($user_id);
                         }
                         return 'success';
                     } else {
                         if ($payment_status == 'Denied' || $payment_status == 'Failed' || $payment_status == 'Refunded' || $payment_status == 'Reversed' || $payment_status == 'Voided') {
                             return 'failed';
                         } else {
                             if ($payment_status == 'In-Progress' || $payment_status == 'Pending' || $payment_status == 'Processed') {
                                 return 'pending';
                             } else {
                                 if ($payment_status == 'Canceled_Reversal') {
                                     return 'canceled_reversal';
                                 }
                             }
                         }
                     }
                     //Send mail notifications about payment success.
                     /* $recipients = parent::get_setting('admin_email');
                     
                                               if ($recipients)
                                               {
                                               $recipients = explode(',', $recipients);
                     
                                               foreach ($recipients as $recipient)
                                               {
                                               $p->send_report($recipient);
                                               }
                                               } */
                     return 'unknown';
                 }
                 return 'invalid_ipn';
         }
         //return;
     }
     $paypal_field = new RM_PayPal_Fields();
     $prices = array();
     $item_names = array();
     foreach ($payment_fields as $pf_name => $pf_value) {
         $abe = explode("_", $pf_name);
         $paypal_field->load_from_db((int) $abe[2]);
         switch ($paypal_field->get_type()) {
             case "fixed":
                 $prices[] = $paypal_field->get_value();
                 $item_names[] = $paypal_field->get_name();
                 break;
             case "userdef":
                 if ($pf_value == "") {
                     break;
                 }
                 $prices[] = $pf_value;
                 $item_names[] = $paypal_field->get_name();
                 break;
             case "multisel":
                 $tmp_v = maybe_unserialize($paypal_field->get_option_price());
                 $tmp_l = maybe_unserialize($paypal_field->get_option_label());
                 foreach ($pf_value as $pf_single_val) {
                     $index = (int) substr($pf_single_val, 1);
                     if (!isset($tmp_v[$index])) {
                         continue;
                     }
                     $prices[] = $tmp_v[$index];
                     $item_names[] = $tmp_l[$index];
                 }
                 break;
             case "dropdown":
                 $tmp_v = maybe_unserialize($paypal_field->get_option_price());
                 $tmp_l = maybe_unserialize($paypal_field->get_option_label());
                 //Check whether dropdown was not submitted
                 if (!$pf_value) {
                     break;
                 }
                 $index = (int) substr($pf_value, 1);
                 if (!isset($tmp_v[$index])) {
                     break;
                 }
                 $prices[] = $tmp_v[$index];
                 $item_names[] = $tmp_l[$index];
                 break;
         }
     }
     /*
      echo "<br><br>========  names =============<br><br>";
      var_dump($item_names);
      echo "<br><br>========  prices =============<br><br>";
      var_dump($prices);
      die;
     */
     $this_script = get_permalink();
     $sign = strpos($this_script, '?') ? '&' : '?';
     $i = 1;
     foreach ($item_names as $item_name) {
         $p->add_field('item_name_' . $i, $item_name);
         $i++;
     }
     $i = 1;
     $total_amount = 0.0;
     foreach ($prices as $price) {
         $p->add_field('amount_' . $i, $price);
         $total_amount += floatval($price);
         $i++;
     }
     $invoice = (string) date("His") . rand(1234, 9632);
     $p->add_field('business', $paypal_email);
     // Call the facilitator eaccount
     $p->add_field('cmd', '_cart');
     // cmd should be _cart for cart checkout
     $p->add_field('upload', '1');
     $p->add_field('return', $this_script . $sign . 'rm_pproc=success&rm_pproc_id=');
     // return URL after the transaction got over
     $p->add_field('cancel_return', $this_script . $sign . 'rm_pproc=cancel');
     // cancel URL if the trasaction was cancelled during half of the transaction
     $p->add_field('notify_url', $this_script . $sign . 'rm_pproc=ipn');
     // Notify URL which received IPN (Instant Payment Notification)
     $p->add_field('currency_code', $currency);
     $p->add_field('invoice', $invoice);
     $p->add_field('page_style', $paypal_page_style);
     //Insert into PayPal log table
     $curr_date = RM_Utilities::get_current_time();
     //date_i18n(get_option('date_format'));
     if ($total_amount <= 0.0) {
         $log_entry_id = RM_DBManager::insert_row('PAYPAL_LOGS', array('submission_id' => $reg_data->submission_id, 'form_id' => $form_id, 'invoice' => $invoice, 'status' => 'Completed', 'total_amount' => $total_amount, 'currency' => $currency, 'posted_date' => $curr_date), array('%d', '%d', '%s', '%s', '%f', '%s', '%s'));
         return 'zero_amount';
     } else {
         $log_entry_id = RM_DBManager::insert_row('PAYPAL_LOGS', array('submission_id' => $reg_data->submission_id, 'form_id' => $form_id, 'invoice' => $invoice, 'status' => 'Pending', 'total_amount' => $total_amount, 'currency' => $currency, 'posted_date' => $curr_date), array('%d', '%d', '%s', '%s', '%f', '%s', '%s'));
     }
     $p->add_field('custom', $log_entry_id . "|" . $reg_data->user_id);
     $p->add_field('return', $this_script . $sign . 'rm_pproc=success&rm_pproc_id=' . $log_entry_id);
     // return URL after the transaction got over
     $p->add_field('cancel_return', $this_script . $sign . 'rm_pproc=cancel&rm_pproc_id=' . $log_entry_id);
     // cancel URL if the trasaction was cancelled during half of the transaction
     $p->add_field('notify_url', $this_script . $sign . 'rm_pproc=ipn');
     // Notify URL which received IPN (Instant Payment Notification)
     $p->submit_paypal_post();
     // POST it to paypal
     //$p->dump_fields();
 }