public function pjActionUpdate()
 {
     $this->checkLogin();
     if ($this->isAdmin()) {
         if (isset($_POST['voucher_update'])) {
             $data = array();
             $data['code'] = $_POST['code'];
             $data['discount'] = $_POST['discount'];
             $data['type'] = $_POST['type'];
             $data['valid'] = $_POST['valid'];
             switch ($_POST['valid']) {
                 case 'fixed':
                     $data['date_from'] = pjUtil::formatDate($_POST['f_date'], $this->option_arr['o_date_format']);
                     $data['date_to'] = $data['date_from'];
                     $data['time_from'] = $_POST['f_hour_from'] . ":" . $_POST['f_minute_from'] . ":00";
                     $data['time_to'] = $_POST['f_hour_to'] . ":" . $_POST['f_minute_to'] . ":00";
                     $data['every'] = array('NULL');
                     break;
                 case 'period':
                     $data['date_from'] = pjUtil::formatDate($_POST['p_date_from'], $this->option_arr['o_date_format']);
                     $data['date_to'] = pjUtil::formatDate($_POST['p_date_to'], $this->option_arr['o_date_format']);
                     $data['time_from'] = $_POST['p_hour_from'] . ":" . $_POST['p_minute_from'] . ":00";
                     $data['time_to'] = $_POST['p_hour_to'] . ":" . $_POST['p_minute_to'] . ":00";
                     $data['every'] = array('NULL');
                     break;
                 case 'recurring':
                     $data['date_from'] = array('NULL');
                     $data['date_to'] = array('NULL');
                     $data['every'] = $_POST['r_every'];
                     $data['time_from'] = $_POST['r_hour_from'] . ":" . $_POST['r_minute_from'] . ":00";
                     $data['time_to'] = $_POST['r_hour_to'] . ":" . $_POST['r_minute_to'] . ":00";
                     break;
             }
             pjVoucherModel::factory()->where('id', $_POST['id'])->limit(1)->modifyAll($data);
             pjUtil::redirect(PJ_INSTALL_URL . "index.php?controller=pjAdminVouchers&action=pjActionIndex&err=AV01");
         } else {
             $arr = pjVoucherModel::factory()->find($_GET['id'])->getData();
             if (count($arr) === 0) {
                 pjUtil::redirect(PJ_INSTALL_URL . "index.php?controller=pjAdminVouchers&action=pjActionIndex&err=AV08");
             }
             $this->set('arr', $arr);
             $this->appendJs('jquery.validate.min.js', PJ_THIRD_PARTY_PATH . 'validate/');
             $this->appendJs('additional-methods.js', PJ_THIRD_PARTY_PATH . 'validate/');
             $this->appendJs('pjAdminVouchers.js');
         }
     } else {
         $this->set('status', 2);
     }
 }
 public function getTokens($option_arr, $data, $salt, $locale_id)
 {
     $c_country = NULL;
     $d_country = NULL;
     if (isset($data['c_country']) && !empty($data['c_country'])) {
         $pjCountryModel = pjCountryModel::factory();
         $country_arr = pjCountryModel::factory()->select('t1.id, t2.content AS country_title')->join('pjMultiLang', "t2.model='pjCountry' AND t2.foreign_id=t1.id AND t2.field='name' AND t2.locale='" . $locale_id . "'", 'left outer')->find($data['c_country'])->getData();
         if (!empty($country_arr)) {
             $c_country = $country_arr['country_title'];
         }
         $country_arr = pjCountryModel::factory()->reset()->select('t1.id, t2.content AS country_title')->join('pjMultiLang', "t2.model='pjCountry' AND t2.foreign_id=t1.id AND t2.field='name' AND t2.locale='" . $locale_id . "'", 'left outer')->find($data['d_country_id'])->getData();
         if (!empty($country_arr)) {
             $d_country = $country_arr['country_title'];
         }
     }
     $row = array();
     if (isset($data['product_arr'])) {
         foreach ($data['product_arr'] as $v) {
             $extra = array();
             foreach ($v['extra_arr'] as $e) {
                 $extra[] = stripslashes(sprintf("%u x %s", $e['cnt'], $e['name']));
             }
             $row[] = stripslashes(sprintf("%u x %s", $v['cnt'], $v['name'])) . (count($extra) > 0 ? sprintf(" (%s)", join("; ", $extra)) : NULL);
         }
     }
     $order_data = count($row) > 0 ? join("\n", $row) : NULL;
     $discount = NULL;
     if (!empty($data['voucher_code'])) {
         $voucher_arr = pjVoucherModel::factory()->where('t1.code', $data['voucher_code'])->limit(1)->findAll()->getData();
         if (!empty($voucher_arr)) {
             $voucher_arr = $voucher_arr[0];
             switch ($voucher_arr['type']) {
                 case "amount":
                     $discount = pjUtil::formatCurrencySign($voucher_arr['discount'], $option_arr['o_currency']);
                     break;
                 case "percent":
                     $discount = $voucher_arr['discount'] . '%';
                     break;
             }
         }
     }
     $subtotal = pjUtil::formatCurrencySign($data['subtotal'], $option_arr['o_currency']);
     $price_delivery = pjUtil::formatCurrencySign($data['price_delivery'], $option_arr['o_currency']);
     $total = pjUtil::formatCurrencySign($data['total'], $option_arr['o_currency']);
     $cancelURL = PJ_INSTALL_URL . 'index.php?controller=pjFront&action=pjActionCancel&id=' . @$data['id'] . '&hash=' . sha1(@$data['id'] . @$data['created'] . $salt);
     $search = array('{Country}', '{City}', '{State}', '{Notes}', '{Zip}', '{Address1}', '{Address2}', '{Name}', '{Email}', '{Phone}', '{dCountry}', '{dCity}', '{dState}', '{dZip}', '{dAddress1}', '{dAddress2}', '{CCType}', '{CCNum}', '{CCExp}', '{CCSec}', '{PaymentMethod}', '{DateTime}', '{Subtotal}', '{Delivery}', '{Discount}', '{Total}', '{dNotes}', '{Location}', '{OrderID}', '{CancelURL}', '{OrderDetails}');
     $replace = array($c_country, @$data['c_city'], @$data['c_state'], @$data['c_notes'], @$data['c_zip'], @$data['c_address_1'], @$data['c_address_2'], @$data['c_name'], @$data['c_email'], @$data['c_phone'], $d_country, @$data['d_city'], $data['d_state'], @$data['d_zip'], @$data['d_address_1'], @$data['d_address_2'], @$data['cc_type'], @$data['cc_num'], @$data['payment_method'] == 'creditcard' ? @$data['cc_exp'] : NULL, @$data['cc_code'], @$data['payment_method'], date($option_arr['o_datetime_format'], strtotime(@$data['type'] == 'pickup' ? @$data['p_dt'] : @$data['d_dt'])), $subtotal, $price_delivery, @$discount, $total, @$data['d_notes'], @$data['location'], @$data['uuid'], $cancelURL, $order_data);
     return compact('search', 'replace');
 }