public static function output_substitution_information() { $substitution = new WSKL_SMS_Text_Substitution(); $order_magic_texts = $substitution->get_order_magic_texts(); $user_magic_texts = $substitution->get_user_magic_texts(); wskl_get_template('dabory-sms/admin/settings/dabory-sms-substitution.php', array('order_magic_texts' => &$order_magic_texts, 'user_magic_texts' => &$user_magic_texts)); }
/** * 시나리오에 따라 문자열을 보낸다. * 어떤 우커머스 이벤트가 있든지, 해당 이벤트에 대한 핸들링은 적절한 메시지를 보내는 것으로 귀결된다. * 주의. $order_id 와 $user_id 가 동시에 NULL 이 될 수 없다. * * @param int|NULL $order_id 주문에 대한 문자열이면 주문 ID. 주문과 관련되 문자가 아니면 NULL. * @param int|NULL $user_id 사용자와 관련된 문자열이면 사용자 ID. 사용자와 관련 없으면 NULL. * @param string $scenario 시나리오. 각 섹션의 ID. e.g., new-order, customer-new-account, ... * * @uses WSKL_SMS_Text_Substitution * @uses WSKL_Dabory_SMS_Provider_Loading * * @uses WSKL_Dabory_SMS_Trigger::get_setting_value() * @uses WSKL_Dabory_SMS_Trigger::get_settings() * @uses WSKL_Dabory_SMS_Trigger::is_already_sent() * @uses WSKL_Dabory_SMS_Trigger::log() * @uses WSKL_Dabory_SMS_Trigger::set_sending_result() * * @return bool */ private function trigger_common($order_id, $user_id, $scenario) { if ($order_id) { $order = wc_get_order($order_id); if (!$order) { $this->log('$order is invalid. Triggering halted.', __METHOD__); return FALSE; } } else { $order = NULL; } if ($user_id) { $user = get_user_by('id', $user_id); if (!$user) { $this->log("User ID {$user_id} is invalid.", __METHOD__); return FALSE; } } else { $user = NULL; } if (!$order && !$user_id) { $this->log('Either $order_id, or $user_id must be valid.', __METHOD__); return FALSE; } $emulation = wskl_is_option_enabled('develop_emulate_sms'); // check if a message is already sent (order only) if (!$emulation && $order && $this->is_already_sent($order, $scenario)) { $this->log("Order #{$order_id} has been notified. Triggering halted.", __METHOD__); return FALSE; } else { if (!$emulation && $user && $this->is_already_sent($user, $scenario)) { $this->log("User #{$user_id} ({$user->user_email}) has been notified. Triggering halted.", __METHOD__); return FALSE; } } // receiver meta key $gs = self::get_settings(); // retrieve the other fields $ns = self::get_settings($scenario); $message_template = self::get_setting_value($ns, $scenario, 'message_content'); $title_template = self::get_setting_value($ns, $scenario, 'message_title'); $notify_to_managers = self::get_setting_value($ns, $scenario, 'send_to_managers'); if ($order) { $receiver_phone_meta_key = wskl_get_from_assoc($gs, wskl_get_option_name('sms_receiver_meta_field')); if (empty($receiver_phone_meta_key)) { $this->log('$receiver_phone_meta_key is an empty string. Triggering halted.', __METHOD__); return FALSE; } $customer_phone = $order->{$receiver_phone_meta_key}; } else { $receiver_phone_meta_key = self::get_setting_value($ns, $scenario, 'phone_meta_field'); if (empty($receiver_phone_meta_key)) { $this->log('$receiver_phone_meta_key is an empty string. Triggering halted.', __METHOD__); return FALSE; } $customer_phone = $user->{$receiver_phone_meta_key}; } if (empty($customer_phone)) { $this->log('customer phone is empty! Triggering halted.', __METHOD__); return FALSE; } // receivers if ($notify_to_managers == 'yes') { $r = explode("\n", wskl_get_option('sms_shop_manager_phones')); $r[] = $customer_phone; $r = array_map(array(__CLASS__, 'trim_phone_number'), $r); $r = array_filter($r, array(__CLASS__, 'not_empty')); $r = array_unique($r); $receivers = implode(',', $r); $num_receivers = count($receivers); } else { $receivers = $customer_phone; $num_receivers = 1; } if (!$num_receivers) { $this->log('The number of recipient is 0! Triggering halted.', __METHOD__); return FALSE; } // message substitution $sub = new WSKL_SMS_Text_Substitution(); $sub->init_substitute($order, $user); $message_title = $sub->substitute($title_template); $message_content = $sub->substitute($message_template); $str_bytes = strlen($message_content); // message type if ($str_bytes > self::SMS_MAX_BYTES) { $message_type = 'lms'; } else { $message_type = 'sms'; } $args = array('remote_phone' => $receivers, 'remote_msg' => $message_content, 'remote_subject' => $message_title, 'remote_num' => $num_receivers, 'remote_etc1' => $order_id); if (!$emulation) { // ... and fire. /** @var WSKL_Dabory_SMS_Provider $provider_class */ $provider_class = Provider_Loading::get_provider_class(); $sender = $provider_class::factory(); $response = $sender->send_message($args, $message_type); assert($response[3] == $order_id, __FUNCTION__ . ': Order id of etc1 and $order_id are different. This is impossible.'); } else { $message = 'SMS emulation is enabled. Argument: ' . print_r($args, TRUE); error_log($message); } if (!$emulation && $order) { self::set_sending_result($order, $scenario, $message_type); } else { if (!$emulation && $user) { self::set_sending_result($user, $scenario, $message_type); } } return TRUE; }