#[\AllowDynamicProperties] class WPML_Package { const CACHE_GROUP = 'WPML_Package'; public $ID; public $view_link; public $edit_link; public $is_translation; public $string_data; public $title; public $new_title; public $kind_slug; public $kind; public $trid; public $name; public $translation_element_type; public $post_id; public $translator_note; private $element_type_prefix; /** * This gives a context to determine what's really * required to load. When set to `true`, we skip * some useless DB queries in the constructor. * * @var bool */ private $translate_only = false; /** * @param stdClass|WPML_Package|array|int|WP_Post $data_item */ function __construct( $data_item ) { $this->element_type_prefix = 'package'; $this->view_link = ''; $this->edit_link = ''; $this->post_id = null; if ( $data_item ) { if ( is_object( $data_item ) ) { $data_item = get_object_vars( $data_item ); } if ( is_numeric( $data_item ) ) { $data_item = $this->init_from_id( $data_item, ARRAY_A ); } if ( isset( $data_item['title'] ) ) { $this->new_title = $data_item['title']; } if ( $data_item && is_array( $data_item ) ) { $this->init_from_array( $data_item ); } $this->new_title = $this->new_title != $this->title ? $this->new_title : null; } } private function init_from_id( $id, $output = OBJECT ) { global $wpdb; $packages_query = "SELECT * FROM {$wpdb->prefix}icl_string_packages WHERE id=%s"; $packages_prepared = $wpdb->prepare( $packages_query, $id ); $package = $wpdb->get_row( $packages_prepared, $output ); return $package; } public function __get( $property ) { if ( $property == 'id' ) { _deprecated_argument( 'id', '0.0.2', "Property 'id' is deprecated. Please use 'ID'." ); return $this->ID; } if ( $property == 'post_id' ) { return $this->ID; } if ( $property == 'post_title' ) { return $this->title; } if ( $property == 'post_type' ) { return $this->kind_slug; } return null; } public function __set( $property, $value ) { if ( $property == 'id' ) { _deprecated_argument( 'id', '0.0.2', "Property 'id' is deprecated. Please use 'ID'." ); $this->ID = $value; } else { $this->$property = $value; } } public function __isset( $property ) { if ( $property == 'id' ) { return isset( $this->ID ); } return false; } public function __unset( $property ) { if ( $property == 'id' ) { unset( $this->$property ); } } public function get_translation_element_type() { return $this->translation_element_type; } public function get_package_post_id() { return $this->get_element_type_prefix() . '_' . $this->kind_slug . '_' . $this->ID; } public function get_element_type_prefix() { return $this->element_type_prefix; } public function set_package_post_data() { $this->translation_element_type = $this->element_type_prefix . '_' . $this->kind_slug; $this->update_strings_data(); } public function update_strings_data() { $strings = []; $package_id = $this->ID; if ( $package_id ) { $results = $this->get_package_strings(); foreach ( $results as $result ) { $string_name = $this->get_package_string_name_from_st_name( $result ); $strings[ $string_name ] = $result->value; } $this->string_data = $strings; } } /** * @param bool $refresh * * @return mixed */ public function get_package_strings( $refresh = false ) { global $wpdb; $package_id = $this->ID; $results = false; if ( $package_id ) { $cache = new WPML_WP_Cache( self::CACHE_GROUP ); $cache_key = 'strings:' . $package_id; $found = false; $results = $cache->get( $cache_key, $found ); if ( ! $found || $refresh ) { $results_query = " SELECT id, name, value, wrap_tag, type, title FROM {$wpdb->prefix}icl_strings WHERE string_package_id=%d ORDER BY location, id ASC"; $results_prepare = $wpdb->prepare( $results_query, $package_id ); $results = $wpdb->get_results( $results_prepare ); $cache->set( $cache_key, $results ); } } return $results; } public function set_strings_language( $language_code ) { global $wpdb; $package_id = $this->ID; if ( $package_id ) { $update_query = "UPDATE {$wpdb->prefix}icl_strings SET language=%s WHERE string_package_id=%d"; $update_prepare = $wpdb->prepare( $update_query, $language_code, $package_id ); $wpdb->query( $update_prepare ); // Action called after string is updated. do_action( 'wpml_st_string_updated' ); } } /** * @param \stdClass $result * * @return string */ private function get_package_string_name_from_st_name( $result ) { // package string name is the same as the string name. return $result->name; } private function sanitize_attributes() { if ( isset( $this->name ) ) { $this->name = $this->sanitize_string_name( $this->name ); } if ( ( ! isset( $this->title ) || $this->title === '' ) && isset( $this->name ) ) { $this->title = $this->name; } if ( ! isset( $this->edit_link ) ) { $this->edit_link = ''; } $this->sanitize_kind(); } public function create_new_package_record() { $this->sanitize_attributes(); $package_id = $this->package_exists(); if ( ! $package_id ) { global $wpdb; $data = array( 'kind_slug' => $this->kind_slug, 'kind' => $this->kind, 'name' => $this->name, 'title' => $this->title, 'edit_link' => $this->edit_link, 'view_link' => $this->view_link, 'post_id' => $this->post_id, ); $wpdb->insert( $wpdb->prefix . 'icl_string_packages', $data ); $package_id = $wpdb->insert_id; $this->ID = $package_id; } return $package_id; } public function update_package_record() { $result = false; if ( $this->ID ) { global $wpdb; $update_data = array( 'kind_slug' => $this->kind_slug, 'kind' => $this->kind, 'name' => $this->name, 'title' => $this->title, 'edit_link' => $this->edit_link, 'view_link' => $this->view_link, ); $update_where = array( 'ID' => $this->ID, ); $result = $wpdb->update( $wpdb->prefix . 'icl_string_packages', $update_data, $update_where ); } return $result; } public function get_package_id() { return $this->ID; } public function sanitize_string_name( $string_name ) { $string_name = preg_replace( '/[ \[\]]+/', '-', $string_name ); return $string_name; } /** * @param string $string_value * @param string $sanitized_string_name * * @return string|mixed */ function translate_string( $string_value, $sanitized_string_name ) { if ( $this->translate_only || $this->get_package_id() ) { $sanitized_string_name = $this->sanitize_string_name( $sanitized_string_name ); $string_context = $this->get_string_context_from_package(); $string_name = $sanitized_string_name; return icl_translate( $string_context, $string_name, $string_value ); } else { return $string_value; } } function get_string_context_from_package() { return $this->kind_slug . '-' . $this->name; } public function get_string_id_from_package( $string_name, $string_value ) { $package_id = $this->get_package_id(); $string_context = $this->get_string_context_from_package(); $string_data = array( 'context' => $string_context, 'name' => $string_name, ); /** * @param int|null $default * @param array $string_data { * * @type string $context * @type string $name Optional * } */ $string_id = apply_filters( 'wpml_string_id', null, $string_data ); if ( ! $string_id ) { $string_id = icl_register_string( $string_context, $string_name, $string_value, false, $this->get_package_language() ); } return $string_id; } function get_translated_strings( $strings ) { $package_id = $this->get_package_id(); if ( $package_id ) { $results = $this->get_package_strings(); foreach ( $results as $result ) { $translations = icl_get_string_translations_by_id( $result->id ); if ( ! empty( $translations ) ) { $string_name = $this->get_package_string_name_from_st_name( $result ); $strings[ $string_name ] = $translations; } } } return $strings; } function set_translated_strings( $translations ) { global $wpdb; $this->sanitize_attributes(); $package_id = $this->get_package_id(); if ( $package_id ) { foreach ( $translations as $string_name => $languages ) { $string_id_query = "SELECT id FROM {$wpdb->prefix}icl_strings WHERE name='%s'"; $string_id_prepare = $wpdb->prepare( $string_id_query, $string_name ); $string_id = $wpdb->get_var( $string_id_prepare ); foreach ( $languages as $language_code => $language_data ) { icl_add_string_translation( $string_id, $language_code, $language_data['value'], $language_data['status'] ); } } } } private function init_from_array( $args ) { foreach ( $args as $key => $value ) { if ( 'id' == $key ) { $key = 'ID'; } $this->$key = $value; } $this->sanitize_attributes(); if ( $this->translate_only ) { return; } if ( $this->package_id_exists() || $this->package_name_and_kind_exists() ) { $this->set_package_from_db(); } $this->set_package_post_data(); } public function has_kind_and_name() { return ( isset( $this->kind ) && isset( $this->name ) && $this->kind && $this->name ); } private function set_package_from_db() { $package = false; if ( $this->package_id_exists() ) { $package = $this->get_package_from_id(); } elseif ( $this->package_name_and_kind_exists() ) { $package = $this->get_package_from_name_and_kind(); } if ( $package ) { $this->object_to_package( $package ); } $this->sanitize_kind(); } private function get_package_from_id() { $result = false; if ( $this->has_id() ) { global $wpdb; $package_query = "SELECT * FROM {$wpdb->prefix}icl_string_packages WHERE ID=%d"; $package_prepared = $wpdb->prepare( $package_query, array( $this->ID ) ); $result = $wpdb->get_row( $package_prepared ); } return $result; } private function get_package_from_name_and_kind() { global $wpdb; $cache = new WPML_WP_Cache( self::CACHE_GROUP ); $cache_key = 'name-kind:' . $this->kind_slug . $this->name; $found = false; $result = $cache->get( $cache_key, $found ); if ( ! $found ) { $package_query = "SELECT * FROM {$wpdb->prefix}icl_string_packages WHERE kind_slug=%s AND name=%s"; $package_prepared = $wpdb->prepare( $package_query, array( $this->kind_slug, $this->name ) ); $result = $wpdb->get_row( $package_prepared ); if ( $result ) { $cache->set( $cache_key, $result ); } } return $result; } private function package_name_and_kind_exists() { $result = false; if ( $this->has_kind_and_name() ) { $result = (bool) $this->get_package_from_name_and_kind(); } return $result; } private function package_id_exists() { $result = false; if ( $this->has_id() ) { global $wpdb; $package_query = "SELECT ID FROM {$wpdb->prefix}icl_string_packages WHERE ID=%d"; $package_prepared = $wpdb->prepare( $package_query, array( $this->ID ) ); $result = $wpdb->get_var( $package_prepared ); } return $result; } /** * @return bool|mixed */ protected function package_exists() { $existing_package = false; if ( $this->has_id() ) { $existing_package = $this->package_id_exists(); } elseif ( $this->has_kind_and_name() ) { $existing_package = $this->package_name_and_kind_exists(); } return $existing_package; } /** * @return bool */ private function has_id() { return isset( $this->ID ) && $this->ID; } /** * @param \stdClass $package */ private function object_to_package( $package ) { $this->ID = $package->ID; $this->kind_slug = $package->kind_slug; $this->kind = $package->kind; $this->name = $package->name; $this->title = $package->title; $this->edit_link = $package->edit_link; $this->view_link = $package->view_link; } private function get_kind_from_slug() { global $wpdb; if ( $this->kind_slug ) { $kinds_query = "SELECT kind FROM {$wpdb->prefix}icl_string_packages WHERE kind_slug=%s GROUP BY kind"; $kinds_prepared = $wpdb->prepare( $kinds_query, $this->kind_slug ); $kinds = $wpdb->get_col( $kinds_prepared ); if ( count( $kinds ) > 1 ) { throw new WPML_Package_Exception( 'error', 'Package contains multiple kinds' ); } if ( $kinds ) { return $kinds[0]; } } return null; } private function sanitize_kind() { if ( isset( $this->kind ) && ( ! isset( $this->kind_slug ) || trim( $this->kind_slug ) === '' ) ) { $this->kind_slug = sanitize_title_with_dashes( $this->kind ); } if ( $this->kind == $this->kind_slug ) { $this->kind = $this->get_kind_from_slug(); } } public function get_package_element_type() { return 'package_' . $this->kind_slug; } /** * @return string|null */ public function get_package_language() { global $sitepress; if ( $this->post_id ) { $details = null; $post = get_post( $this->post_id ); if ( $post ) { $details = $sitepress->get_element_language_details( $this->post_id, 'post_' . $post->post_type ); } } else { $element_type = $this->get_package_element_type(); $details = $sitepress->get_element_language_details( $this->ID, $element_type ); } if ( $details ) { return $details->language_code; } else { return null; } } public function are_all_strings_included( $strings ) { // check to see if all the strings in this package are present in $strings $package_strings = $this->get_package_strings(); if ( is_array( $package_strings ) ) { foreach ( $package_strings as $string ) { if ( ! in_array( $string->id, $strings ) ) { return false; } } } return true; } public function flush_cache() { $cache = new WPML_WP_Cache( self::CACHE_GROUP ); $cache->flush_group_cache(); } } Terms and conditions – Cashwave

Terms and conditions

These Terms of Use govern your access to our financial education services. When you subscribe to our financial education platform, you must accept these Terms of Use in order for your access to be validated and properly processed. The service provider will only agree to review your platform subscription request if you accept these Terms of Use. Despite compliance with these Terms of Use, the service provider is under no obligation to accept your access request. Whether or not you grant access to the platform and maintain continued access is at the sole discretion of the service provider. A debtor’s account may be deactivated at any time, at the sole discretion of the service provider, without any applicable damages against the service provider. These Terms of Use supplement any other applicable agreement between the parties and remain valid throughout the subscription service granted by the company providing the services.

WHO CAN SUBSCRIBE TO OUR SERVICES?

You must be at least 18 years old and not be considered incapacitated or subject to guardianship.

The purpose of your request for access to the financial education platform must not be made, directly or indirectly, for an illegal, prohibited, criminal, fraudulent purpose, for money laundering purposes or as part of any other act considered in bad faith by the company providing the services, at its sole and exclusive discretion.

You are required to reveal your full identity.

You may not impersonate another.

You have not been the subject of a denied request or account closure with our company within thirty (30) days prior to this request for access to our financial education platform.

COLLECTION AND USE OF INFORMATION

To process your request for access to our financial education platform, as mentioned above, the company providing the services must verify the information about you. The type of information collected depends on the information you provide and how you use the Service Provider’s website.

You hereby understand and agree that when a request for access to the Financial Education Platform is made, the Service Provider collects the content of the request, communications, and other information you provide, including when you create an account, create or share content, or when you communicate with or send messages to members, officers, administrators, agents, or partners of the Service Provider.

This may include information in or about the content you provide (e.g., metadata), such as the location of a photo or the date a file was created. You formally consent that all information collected may be used by the company providing the services in the context of managing your request for access to the financial education platform and may be transmitted to any other affiliated company, service provider or other related companies for the purpose of investigating or aggregating data concerning you.

Your data may be part of a database managed by the company providing the services, by any other affiliated company, service provider or other related companies for the purpose of processing and investigating access requests, under the conditions mentioned above or otherwise, and may be retained for an indefinite period by the company providing the services and by any other affiliated company, service provider or other related companies for this purpose. The data may be shared with public or legal authorities, when ordered by law and/or a court of law.

JURISDICTION OF APPLICATIONS FOR OUR SERVICES AND DISPUTE MANAGEMENT

The company providing the services is a company doing business in the province of Quebec, Canada, and any acceptance of the application for access to the financial education platform will be deemed to have been made in the province of Quebec, Canada, regardless of your place of residence or the location where your application was made. You agree that, in the event of a dispute, the laws of Quebec and Canada will apply and that any dispute will be heard in the jurisdiction of the province of Quebec, Canada, in the legal district of Montreal, to the exclusion of any other jurisdiction or district.

UPDATING THESE TERMS OF USE

The company providing the services may modify its services and regulations, and it may be necessary to make changes to these Terms of Use. The service provider will notify you before modifying these Terms of Use and give you an opportunity to review them before they become effective. If you continue to use the services provided by the service provider, you will be bound by the revised Terms of Use.