get( $recipient_type, $order_status, $scheme ); $data = array( 'recipient_type' => $recipient_type, 'order_status' => $order_status, 'scheme' => $scheme, 'message' => $message, 'updated_by' => $user_id, 'updated_at' => $now, ); if ( $found ) { $updated = $wpdb->update( $tables['templates'], $data, array( 'id' => (int) $found->id ), array( '%s', '%s', '%s', '%s', '%d', '%s' ), array( '%d' ) ); return false !== $updated; } $data['created_at'] = $now; $inserted = $wpdb->insert( $tables['templates'], $data, array( '%s', '%s', '%s', '%s', '%d', '%s', '%s' ) ); return false !== $inserted; } /** * Get template by unique key. * * @param string $recipient_type Recipient type. * @param string $order_status Order status. * @param string $scheme Sending scheme. * @return object|null */ public function get( string $recipient_type, string $order_status, string $scheme ) { global $wpdb; $tables = Installer::get_table_names(); return $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$tables['templates']} WHERE recipient_type = %s AND order_status = %s AND scheme = %s LIMIT 1", $recipient_type, $order_status, $scheme ) ); } /** * Seed default WooCommerce templates without overwriting existing records. * * @param int $user_id User ID. */ public function seed_defaults( int $user_id = 0 ): void { foreach ( $this->get_default_statuses() as $status => $label ) { foreach ( array( 'customer', 'admin' ) as $recipient_type ) { foreach ( array( 'sms', 'viber', 'viber_sms' ) as $scheme ) { if ( $this->get( $recipient_type, $status, $scheme ) ) { continue; } $this->save( $recipient_type, $status, $scheme, $this->get_default_message( $recipient_type, $label ), $user_id ); } } } } /** * Get default statuses. * * @return array */ private function get_default_statuses(): array { if ( function_exists( 'wc_get_order_statuses' ) ) { return wc_get_order_statuses(); } return array( 'wc-pending' => __( 'Pending payment', 'inteltele' ), 'wc-processing' => __( 'Processing', 'inteltele' ), 'wc-on-hold' => __( 'On hold', 'inteltele' ), 'wc-completed' => __( 'Completed', 'inteltele' ), 'wc-cancelled' => __( 'Cancelled', 'inteltele' ), 'wc-refunded' => __( 'Refunded', 'inteltele' ), 'wc-failed' => __( 'Failed', 'inteltele' ), ); } /** * Get default message text. * * @param string $recipient_type Recipient type. * @param string $status_label Status label. */ private function get_default_message( string $recipient_type, string $status_label ): string { if ( 'admin' === $recipient_type ) { return sprintf( /* translators: %s: order status label. */ __( 'Store {StoresName}: order #{OrderID} changed to %s. Customer: {ClientName} {ClientLastName}, phone: {ClientPhone}, total: {OrderSum} {OrderCurrency}, delivery: {AddrOrderDelivery}, TTN: {TTN_Number}.', 'inteltele' ), $status_label ); } return sprintf( /* translators: %s: order status label. */ __( '{ClientName}, your order #{OrderID} at {StoresName} changed to %s. Total: {OrderSum} {OrderCurrency}. Track: {TrackingURL}. Pay: {PaymentURL}.', 'inteltele' ), $status_label ); } }