1&1 IONOS Address Book - Version 1.0.0

Version Description

Download this release

Release Info

Developer kimalumalu
Plugin Icon wp plugin 1&1 IONOS Address Book
Version 1.0.0
Comparing to
See all releases

Version 1.0.0

Files changed (67) hide show
  1. config/api_endpoints.json +24 -0
  2. config/api_fields.json +3 -0
  3. config/plugins.json +20 -0
  4. cosy-address-book.php +248 -0
  5. css/address-book.css +143 -0
  6. css/address-book.less +143 -0
  7. inc/api-client.php +410 -0
  8. inc/api-response.php +73 -0
  9. inc/config.php +231 -0
  10. inc/form-handler.php +64 -0
  11. inc/handlers/contact-form-7.php +402 -0
  12. inc/handlers/wp-forms-lite.php +159 -0
  13. inc/http-response.php +83 -0
  14. inc/market.php +92 -0
  15. inc/rest-api.php +286 -0
  16. inc/rest-client.php +249 -0
  17. inc/view.php +16 -0
  18. inc/views/description.php +46 -0
  19. inc/views/main.php +13 -0
  20. inc/views/plugins/description.php +12 -0
  21. inc/views/plugins/settings.php +92 -0
  22. inc/views/settings.php +19 -0
  23. js/address-book.js +97 -0
  24. languages/cosy-address-book-de_CH.mo +0 -0
  25. languages/cosy-address-book-de_CH.po +117 -0
  26. languages/cosy-address-book-de_CH_informal.mo +0 -0
  27. languages/cosy-address-book-de_CH_informal.po +117 -0
  28. languages/cosy-address-book-de_DE.mo +0 -0
  29. languages/cosy-address-book-de_DE.po +117 -0
  30. languages/cosy-address-book-en_AU.mo +0 -0
  31. languages/cosy-address-book-en_AU.po +115 -0
  32. languages/cosy-address-book-en_CA.mo +0 -0
  33. languages/cosy-address-book-en_CA.po +121 -0
  34. languages/cosy-address-book-en_GB.mo +0 -0
  35. languages/cosy-address-book-en_GB.po +115 -0
  36. languages/cosy-address-book-en_NZ.mo +0 -0
  37. languages/cosy-address-book-en_NZ.po +115 -0
  38. languages/cosy-address-book-en_US.mo +0 -0
  39. languages/cosy-address-book-en_US.po +115 -0
  40. languages/cosy-address-book-es_AR.mo +0 -0
  41. languages/cosy-address-book-es_AR.po +115 -0
  42. languages/cosy-address-book-es_CL.mo +0 -0
  43. languages/cosy-address-book-es_CL.po +115 -0
  44. languages/cosy-address-book-es_CO.mo +0 -0
  45. languages/cosy-address-book-es_CO.po +115 -0
  46. languages/cosy-address-book-es_CR.mo +0 -0
  47. languages/cosy-address-book-es_CR.po +115 -0
  48. languages/cosy-address-book-es_ES.mo +0 -0
  49. languages/cosy-address-book-es_ES.po +115 -0
  50. languages/cosy-address-book-es_GT.mo +0 -0
  51. languages/cosy-address-book-es_GT.po +115 -0
  52. languages/cosy-address-book-es_MX.mo +0 -0
  53. languages/cosy-address-book-es_MX.po +115 -0
  54. languages/cosy-address-book-es_PE.mo +0 -0
  55. languages/cosy-address-book-es_PE.po +115 -0
  56. languages/cosy-address-book-es_VE.mo +0 -0
  57. languages/cosy-address-book-es_VE.po +115 -0
  58. languages/cosy-address-book-fr_BE.mo +0 -0
  59. languages/cosy-address-book-fr_BE.po +115 -0
  60. languages/cosy-address-book-fr_CA.mo +0 -0
  61. languages/cosy-address-book-fr_CA.po +115 -0
  62. languages/cosy-address-book-fr_FR.mo +0 -0
  63. languages/cosy-address-book-fr_FR.po +115 -0
  64. languages/cosy-address-book-it_IT.mo +0 -0
  65. languages/cosy-address-book-it_IT.po +115 -0
  66. languages/cosy-address-book.pot +137 -0
  67. readme.txt +23 -0
config/api_endpoints.json ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cosy_middleware": {
3
+ "production": {
4
+ "EU": "https://api.addressbook-eu.ionos.com",
5
+ "US": "https://api.addressbook-us.ionos.com"
6
+ },
7
+ "integration": "http://example.cosy-integration.com",
8
+ "development": "http://cosy.wiremock.lan:8080"
9
+ },
10
+ "cosy_frontend": {
11
+ "production": {
12
+ "DE": "https://adressbuch.ionos.de",
13
+ "GB": "https://addressbook.ionos.co.uk",
14
+ "ES": "https://addressbook.ionos.es",
15
+ "FR": "https://addressbook.ionos.fr",
16
+ "IT": "https://addressbook.ionos.it",
17
+ "US": "https://addressbook.ionos.com",
18
+ "CA": "https://addressbook.ionos.ca",
19
+ "MX": "https://addressbook.ionos.mx"
20
+ },
21
+ "integration": "http://example.cosy-integration.com",
22
+ "development": "http://localhost:8001"
23
+ }
24
+ }
config/api_fields.json ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ {
2
+ "fields":["firstName", "lastName", "email", "phone", "notes", "consent"]
3
+ }
config/plugins.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "plugins": {
3
+ "supported_types": [
4
+ "contactForm7",
5
+ "WpFormsLite"
6
+ ],
7
+ "display_names": [
8
+ "Contact Form 7",
9
+ "WPforms"
10
+ ],
11
+ "plugin_types": {
12
+ "contactForm7": {
13
+ "display_name": "Contact Form 7"
14
+ },
15
+ "WpFormsLite": {
16
+ "display_name": "WPforms"
17
+ }
18
+ }
19
+ }
20
+ }
cosy-address-book.php ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: 1&1 IONOS Address Book
4
+ * Plugin URI: https://wordpress.org/plugins/cosy-address-book
5
+ * Description: Sends visitor contact data generated by contact forms embedded in WordPress websites to 1&1 IONOS Address Book
6
+ * Version: 1.0.0
7
+ * License: MIT
8
+ * Author: 1&1 IONOS
9
+ * Author URI: https://www.ionos.com
10
+ * Text Domain: cosy-address-book
11
+ * Domain Path: /languages
12
+ */
13
+ /*
14
+ * This program is free software; you can redistribute it and/or
15
+ * modify it under the terms of the GNU General Public License
16
+ * as published by the Free Software Foundation; either version 2
17
+ * of the License, or (at your option) any later version.
18
+ *
19
+ * This program is distributed in the hope that it will be useful,
20
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
+ * GNU General Public License for more details.
23
+ *
24
+ * You should have received a copy of the GNU General Public License
25
+ * along with this program; if not, write to the Free Software
26
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
27
+ *
28
+ * Online: http://www.gnu.org/licenses/gpl.txt
29
+ */
30
+ if ( ! defined( 'ABSPATH' ) ) {
31
+ die( 'Forbidden' );
32
+ }
33
+
34
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
35
+
36
+ class CoSy_Address_Book {
37
+ const VERSION = '1.0.0';
38
+ const ADDRESS_BOOK_PAGE_ID = 'cosy-address-book';
39
+ const LANGUAGE_DOMAIN = 'cosy-address-book';
40
+ const PLUGIN_TYPE_MUST_USE = 'must-use-plugin';
41
+ const PLUGIN_TYPE_DEFAULT = 'default-plugin-type';
42
+
43
+ /**
44
+ * @var CoSy_Address_Book_Api_Client
45
+ */
46
+ private $api_client;
47
+
48
+ /**
49
+ * @var bool
50
+ */
51
+ private $show_admin_menu;
52
+
53
+ /**
54
+ * CoSy_Address_Book constructor
55
+ */
56
+ public function __construct() {
57
+ $this->load_global_files();
58
+ $this->init();
59
+ $this->load_form_handlers();
60
+ $this->add_actions();
61
+ }
62
+
63
+ /**
64
+ * Loads text domain to be able to use available translations
65
+ */
66
+ public function load_text_domain() {
67
+ $language_loaded = null;
68
+
69
+ if( $this->is_must_use_plugin() ) {
70
+ $language_loaded = $this->load_text_domain_by_plugin_type( self::PLUGIN_TYPE_MUST_USE );
71
+ } else {
72
+ $language_loaded = $this->load_text_domain_by_plugin_type( self::PLUGIN_TYPE_DEFAULT );
73
+ }
74
+
75
+ // Check whether language could be loaded properly. If not, use en_US as a fallback.
76
+ if ( empty( $language_loaded ) ) {
77
+ load_textdomain( self::LANGUAGE_DOMAIN, $this->get_default_language_file_path() );
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Activates menu entry in admin navigation bar
83
+ */
84
+ public function add_address_book_menu() {
85
+ if ( is_admin() && current_user_can( 'manage_options' ) && $this->show_admin_menu ) {
86
+ add_menu_page(
87
+ __( 'cosy_address_book_admin_page_title', 'cosy-address-book' ),
88
+ __( 'cosy_address_book_menu_title', 'cosy-address-book' ),
89
+ 'manage_options',
90
+ self::ADDRESS_BOOK_PAGE_ID,
91
+ array( $this, 'load_menu_page' ),
92
+ 'dashicons-book',
93
+ 62
94
+ );
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Adds available javascript and css scripts
100
+ */
101
+ public function add_js_and_css_scripts() {
102
+ wp_enqueue_style( 'cosy-address-book', plugins_url( 'css/address-book.css', __FILE__ ), array(), self::VERSION );
103
+ wp_enqueue_script( 'cosy-address-book', plugins_url( 'js/address-book.js', __FILE__ ), array( 'jquery' ), self::VERSION, true );
104
+ }
105
+
106
+ /**
107
+ * Loads main admin menu page to describe how to use current plugin
108
+ */
109
+ public function load_menu_page() {
110
+ CoSy_Address_Book_View::load_page();
111
+ }
112
+
113
+ /**
114
+ * Initializes current available rest api instance and register requires rest routes
115
+ */
116
+ public function address_book_rest_api_init() {
117
+ CoSy_Address_Book_Rest_Api::instance()->register_rest_routes();
118
+ }
119
+
120
+ /**
121
+ * Adds all required actions for handling admin menu-, plugin form- and IONOS Address Book data
122
+ */
123
+ private function add_actions() {
124
+ add_action( 'plugins_loaded', array( $this, 'load_text_domain' ) );
125
+ add_action( 'admin_menu', array( $this, 'add_address_book_menu' ) );
126
+ add_action( 'admin_enqueue_scripts', array( $this, 'add_js_and_css_scripts' ) );
127
+ add_action( 'rest_api_init', array( $this, 'address_book_rest_api_init' ) );
128
+ }
129
+
130
+ /**
131
+ * Binds all requires utility classes
132
+ */
133
+ private function load_global_files() {
134
+ include_once 'inc/api-client.php';
135
+ include_once 'inc/rest-api.php';
136
+ include_once 'inc/api-response.php';
137
+ include_once 'inc/http-response.php';
138
+ include_once 'inc/rest-client.php';
139
+ include_once 'inc/config.php';
140
+ include_once 'inc/market.php';
141
+ include_once 'inc/form-handler.php';
142
+ include_once 'inc/view.php';
143
+ }
144
+
145
+ /**
146
+ * Binds and activates form handlers in dependence to active form plugins
147
+ */
148
+ private function load_form_handlers() {
149
+ if ( is_plugin_active( 'contact-form-7/wp-contact-form-7.php' ) ) {
150
+ include_once 'inc/handlers/contact-form-7.php';
151
+ $this->add_form_handler( new CoSy_Contact_Form_7_Handler() );
152
+ $this->show_admin_menu();
153
+ add_filter( 'wpcf7_posted_data', function ( $form_data ) {
154
+ $this->api_client->save_data_into_address_book( $form_data, CoSy_Contact_Form_7_Handler::FORM_TYPE );
155
+ return $form_data;
156
+ } );
157
+ }
158
+
159
+ if ( is_plugin_active( 'wpforms-lite/wpforms.php' ) ) {
160
+ include_once 'inc/handlers/wp-forms-lite.php';
161
+ $this->add_form_handler( new CoSy_WP_Forms_Lite_Handler() );
162
+ $this->show_admin_menu();
163
+ add_filter( 'wpforms_process_complete', function ( $form_data ) {
164
+ $this->api_client->save_data_into_address_book( $form_data, CoSy_WP_Forms_Lite_Handler::FORM_TYPE );
165
+ } );
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Initializes class instance variables
171
+ */
172
+ private function init() {
173
+ $this->api_client = CoSy_Address_Book_Api_Client::instance();
174
+ $this->show_admin_menu = false;
175
+ }
176
+
177
+ /**
178
+ * Adds given form handler and activates corresponding admin menu flag
179
+ *
180
+ * @param CoSy_Form_Handler $form_handler
181
+ * @param string $filter_function
182
+ * @param string $data_post_handler_function
183
+ */
184
+ private function add_form_handler( CoSy_Form_Handler $form_handler ) {
185
+ $this->api_client->add_form_handler( $form_handler );
186
+ }
187
+
188
+ /**
189
+ * Sets value of show_admin_menu flag to true
190
+ *
191
+ * In this case show admin menu icon will become visible in wp-admin navigation bar and
192
+ * corresponding views get accessible too
193
+ */
194
+ private function show_admin_menu() {
195
+ $this->show_admin_menu = true;
196
+ }
197
+
198
+ /**
199
+ * Retrieves default language file path
200
+ *
201
+ * @return string
202
+ */
203
+ private function get_default_language_file_path() {
204
+ return sprintf( '%s/languages/%s-en_US.mo',__DIR__, self::LANGUAGE_DOMAIN );
205
+ }
206
+
207
+ /**
208
+ * Loads text domain by given plugin type
209
+ *
210
+ * @param string $plugin_type in this case either a must-use-plugin or a plugin installable by user
211
+ *
212
+ * @return bool
213
+ */
214
+ private function load_text_domain_by_plugin_type( $plugin_type ){
215
+ $language_loaded = null;
216
+
217
+ switch ( $plugin_type ) {
218
+ case self::PLUGIN_TYPE_MUST_USE:
219
+ $language_loaded = load_muplugin_textdomain(
220
+ self::LANGUAGE_DOMAIN,
221
+ basename( dirname( __FILE__ ) ). '/languages'
222
+ );
223
+ break;
224
+
225
+ case self::PLUGIN_TYPE_DEFAULT:
226
+ $language_loaded = load_plugin_textdomain(
227
+ self::LANGUAGE_DOMAIN,
228
+ false,
229
+ dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
230
+ break;
231
+
232
+ default:
233
+ $language_loaded = false;
234
+ }
235
+
236
+ return $language_loaded;
237
+ }
238
+
239
+ /**
240
+ * Checks if current installation is must-use plugin or not
241
+ */
242
+ private function is_must_use_plugin()
243
+ {
244
+ return strpos( plugin_dir_path( __FILE__ ), 'mu-plugins' ) !== false;
245
+ }
246
+ }
247
+
248
+ $cosy_address_book = new CoSy_Address_Book();
css/address-book.css ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .ui-cosy-address-book {
2
+ color: #1F282D;
3
+ margin-right: 10px;
4
+ font-size: 14px;
5
+ }
6
+
7
+ .ui-cosy-address-book > div {
8
+ max-width: 450px;
9
+ }
10
+
11
+ .ui-cosy-address-book h1 {
12
+ font-size: 30px;
13
+ line-height: 1.3333em;
14
+ font-weight: 400;
15
+ }
16
+
17
+ .ui-cosy-address-book h2 {
18
+ font-size: 19px;
19
+ line-height: 24px;
20
+ font-weight: 500;
21
+ margin-bottom: 16px;
22
+ margin-top: 30px;
23
+ }
24
+
25
+ .ui-cosy-address-book h4 {
26
+ font-size: 19px;
27
+ line-height: 24px;
28
+ font-weight: 500;
29
+ margin-bottom: 8px;
30
+ margin-top: 24px;
31
+ }
32
+
33
+ .ui-cosy-address-book p {
34
+ margin-top: 8px;
35
+ font-size: 14px;
36
+ }
37
+
38
+ .ui-cosy-address-book input {
39
+ width: inherit;
40
+ height: 40px;
41
+ }
42
+
43
+ .ui-cosy-address-book a {
44
+ text-decoration: none;
45
+ font-weight: 500;
46
+ }
47
+
48
+ .ui-cosy-address-book button {
49
+ cursor: pointer;
50
+ color: white;
51
+ height: 36px;
52
+ border-radius: 5px;
53
+ background-color: #0B9DCC;
54
+ }
55
+
56
+ .ui-cosy-address-book .flex-layout {
57
+ display: flex;
58
+ flex: 1 1 auto;
59
+ flex-wrap: nowrap;
60
+ flex-direction: row;
61
+ min-width: 0;
62
+ }
63
+
64
+ .ui-cosy-address-book .flex-layout .flex-item {
65
+ flex: 1 1 auto;
66
+ max-width: 100%;
67
+ }
68
+
69
+ .ui-cosy-address-book .flex-layout .flex-item.flex-grow {
70
+ flex: 1;
71
+ }
72
+
73
+ .ui-cosy-address-book .flex-layout .flex-item.flex-shrink {
74
+ flex-grow: 0 !important;
75
+ flex-shrink: 1 !important;
76
+ }
77
+
78
+ .ui-cosy-address-book .flex-layout .flex-item.size-6 {
79
+ flex-basis: 50%;
80
+ flex-grow: 0;
81
+ max-width: 50%;
82
+ margin-bottom: 8px;
83
+ }
84
+
85
+ .ui-cosy-address-book .flex-layout.flex-wrap {
86
+ flex-wrap: wrap;
87
+ }
88
+
89
+ .ui-cosy-address-book .flex-layout.v-center {
90
+ align-items: center;
91
+ }
92
+
93
+ .ui-cosy-address-book .mr8 {
94
+ margin-right: 8px;
95
+ }
96
+
97
+ .ui-cosy-address-book .mb16 {
98
+ margin-bottom: 16px;
99
+ }
100
+
101
+ .ui-cosy-address-book .mb4 {
102
+ margin-bottom: 4px;
103
+ }
104
+
105
+ .ui-cosy-address-book select {
106
+ width: 100%;
107
+ }
108
+
109
+ .ui-cosy-address-book input {
110
+ border: 1px solid #b3b6b8;
111
+ border-radius: 2px;
112
+ display: inline-block;
113
+ box-shadow: none;
114
+ height: 36px;
115
+ padding: 0 12px;
116
+ width: 100%;
117
+ margin: 0;
118
+ }
119
+
120
+ .ui-cosy-address-book .info-message {
121
+ padding: 14px 18px;
122
+ background-color: #F3FBFD;
123
+ border-bottom: 1px solid #0f95fc;
124
+ border-top: 1px solid #0f95fc;
125
+ }
126
+
127
+ .ui-cosy-address-book .info-message.success {
128
+ background-color: #f3fcf5;
129
+ border-color: #38cc59;
130
+ }
131
+
132
+ .ui-cosy-address-book .info-message.error {
133
+ background-color: #fdf2f2;
134
+ border-color: #d60600;
135
+ }
136
+
137
+ .ui-cosy-address-book .deconnection-link {
138
+ margin-top: 3px;
139
+ }
140
+
141
+ .ui-cosy-address-book .no-wrap {
142
+ white-space: nowrap;
143
+ }
css/address-book.less ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .ui-cosy-address-book {
2
+ color: #1F282D;
3
+ margin-right: 10px;
4
+ font-size: 14px;
5
+
6
+ > div {
7
+ max-width: 450px;
8
+ }
9
+
10
+ h1 {
11
+ font-size: 30px;
12
+ line-height: 1.3333em;
13
+ font-weight: 400;
14
+ }
15
+
16
+ h2 {
17
+ font-size: 19px;
18
+ line-height: 24px;
19
+ font-weight: 500;
20
+ margin-bottom: 16px;
21
+ margin-top: 30px;
22
+ }
23
+
24
+ h4 {
25
+ font-size: 19px;
26
+ line-height: 24px;
27
+ font-weight: 500;
28
+ margin-bottom: 8px;
29
+ margin-top: 24px;
30
+ }
31
+
32
+ p {
33
+ margin-top: 8px;
34
+ font-size: 14px;
35
+ }
36
+
37
+ input {
38
+ width: inherit;
39
+ height: 40px;
40
+ }
41
+
42
+ a {
43
+ text-decoration: none;
44
+ font-weight: 500;
45
+ }
46
+
47
+ button {
48
+ cursor: pointer;
49
+ color: white;
50
+ height: 36px;
51
+ border-radius: 5px;
52
+ background-color: #0B9DCC;
53
+ }
54
+
55
+ .flex-layout {
56
+ display: flex;
57
+ flex: 1 1 auto;
58
+ flex-wrap: nowrap;
59
+ flex-direction: row;
60
+ min-width: 0;
61
+
62
+ .flex-item {
63
+ flex: 1 1 auto;
64
+ max-width: 100%;
65
+
66
+ &.flex-grow {
67
+ flex: 1;
68
+ }
69
+
70
+ &.flex-shrink {
71
+ flex-grow: 0 !important;
72
+ flex-shrink: 1 !important;
73
+ }
74
+
75
+ &.size-6 {
76
+ flex-basis: 50%;
77
+ flex-grow: 0;
78
+ max-width: 50%;
79
+ margin-bottom: 8px;
80
+ }
81
+ }
82
+
83
+ &.flex-wrap {
84
+ flex-wrap: wrap;
85
+ }
86
+
87
+ &.v-center {
88
+ align-items: center;
89
+ }
90
+ }
91
+
92
+ .mr8 {
93
+ margin-right: 8px;
94
+ }
95
+
96
+ .mb16 {
97
+ margin-bottom: 16px;
98
+ }
99
+
100
+ .mb4 {
101
+ margin-bottom: 4px;
102
+ }
103
+
104
+ select {
105
+ width: 100%;
106
+ }
107
+
108
+ input {
109
+ border: 1px solid #b3b6b8;
110
+ border-radius: 2px;
111
+ display: inline-block;
112
+ box-shadow: none;
113
+ height: 36px;
114
+ padding: 0 12px;
115
+ width: 100%;
116
+ margin: 0;
117
+ }
118
+
119
+ .info-message {
120
+ padding: 14px 18px;
121
+ background-color: #F3FBFD;
122
+ border-bottom: 1px solid #0f95fc;
123
+ border-top: 1px solid #0f95fc;
124
+
125
+ &.success {
126
+ background-color: #f3fcf5;
127
+ border-color: #38cc59;
128
+ }
129
+
130
+ &.error {
131
+ background-color: #fdf2f2;
132
+ border-color: #d60600;
133
+ }
134
+ }
135
+
136
+ .deconnection-link {
137
+ margin-top: 3px;
138
+ }
139
+
140
+ .no-wrap {
141
+ white-space: nowrap;
142
+ }
143
+ }
inc/api-client.php ADDED
@@ -0,0 +1,410 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class responsible of handling of CoSy Address Book api data and form handlers
5
+ */
6
+ class CoSy_Address_Book_Api_Client {
7
+ const WP_OPTION_API_KEY_DATA = 'cosy_address_book_api_key_data';
8
+ const WP_OPTION_FORM_TYPE = 'cosy_address_book_form_type';
9
+ const OPTION_API_KEY = 'api_key';
10
+ const OPTION_DOMAIN = 'domain';
11
+
12
+ /**
13
+ * Instance of api client
14
+ *
15
+ * @param CoSy_Address_Book_Api_Client
16
+ */
17
+ private static $instance;
18
+
19
+ /**
20
+ * Instance of http client
21
+ *
22
+ * @var Address_Book_Rest_Client
23
+ */
24
+ private $rest_client;
25
+
26
+ /**
27
+ * Instance of Address_Book_Config
28
+ *
29
+ * @var CoSy_Address_Book_Config
30
+ */
31
+ private $config;
32
+
33
+ /**
34
+ * List of registered form handlers
35
+ *
36
+ * @var CoSy_Form_Handler[]
37
+ */
38
+ private $form_handlers;
39
+
40
+ /**
41
+ * retrieves an instance of CoSy_Address_Book_Api_Client
42
+ *
43
+ * @return CoSy_Address_Book_Api_Client
44
+ */
45
+ public static function instance() {
46
+ if ( is_null( self::$instance ) ) {
47
+ $config = CoSy_Address_Book_Config::instance();
48
+ $rest_client = new Address_Book_Rest_Client( $config );
49
+ self::$instance = new self( CoSy_Address_Book_Config::instance(), $rest_client );
50
+ }
51
+
52
+ return self::$instance;
53
+ }
54
+
55
+ /**
56
+ * Creates an instance of CoSy_Address_Book_Api_Client
57
+ *
58
+ * @param CoSy_Address_Book_Config $config
59
+ * @param Address_Book_Rest_Client $rest_Client
60
+ */
61
+ public function __construct( CoSy_Address_Book_Config $config, Address_Book_Rest_Client $rest_Client ) {
62
+ $this->is_connected = false;
63
+ $this->form_handlers = array();
64
+ $this->config = $config;
65
+ $this->rest_client = $rest_Client;
66
+ }
67
+
68
+ /**
69
+ * Connects domain of current website to CoSy Address Book via given api key and persists result into wp_options
70
+ *
71
+ * @param string $api_key
72
+ *
73
+ * @return CoSy_Address_Book_Api_Response object response determining if connection was successful or not
74
+ */
75
+ public function connect_api_key( $api_key ) {
76
+ $domain = $this->fetch_domain();
77
+ $is_connected = $this->connect_to_api( $domain, $api_key );
78
+ $api_response = new CoSy_Address_Book_Api_Response();
79
+
80
+ if ( $is_connected ) {
81
+ $is_persisted_key = $this->persist_api_key( $domain, $api_key );
82
+ $api_response->set_is_successful( $is_connected );
83
+
84
+ if ( ! $is_persisted_key ) {
85
+ $api_response->set_is_successful( false );
86
+ $api_response->set_message(
87
+ $this->get_translation( 'cosy_address_book_generic_error' )
88
+ );
89
+ }
90
+ } else {
91
+ $api_response->set_message(
92
+ $this->get_translation( 'cosy_address_book_generic_error' )
93
+ );
94
+ }
95
+
96
+ return $api_response;
97
+ }
98
+
99
+ /**
100
+ * Saves field mapping
101
+ *
102
+ * @param string $field_mapping
103
+ * @param string $form_type
104
+ *
105
+ * @return CoSy_Address_Book_Api_Response object response to check if persistence of field mapping was successful or not
106
+ */
107
+ public function save_field_mapping( $field_mapping, $form_type ) {
108
+ $persisted_field_mapping = json_encode( $this->get_field_mapping( $form_type ) );
109
+
110
+ if ( strcasecmp( $persisted_field_mapping, $field_mapping ) == 0 ) {
111
+ return new CoSy_Address_Book_Api_Response(
112
+ true,
113
+ $this->get_translation( 'cosy_address_book_field_mapping_successful' )
114
+ );
115
+ }
116
+
117
+ $is_saved_mapping = update_option(
118
+ $this->get_form_type_option_name( $form_type ),
119
+ $field_mapping
120
+ );
121
+
122
+ $translation_key = ( $is_saved_mapping ) ? 'cosy_address_book_field_mapping_successful' : 'cosy_address_book_generic_error';
123
+
124
+ return new CoSy_Address_Book_Api_Response(
125
+ $is_saved_mapping,
126
+ $this->get_translation( $translation_key )
127
+ );
128
+ }
129
+
130
+ /**
131
+ * Retrieves persisted field mapping identified mapped to given form type
132
+ *
133
+ * @param string $form_type
134
+ *
135
+ * @return mixed
136
+ */
137
+ public function get_field_mapping( $form_type ) {
138
+ $field_mapping = get_option( $this->get_form_type_option_name( $form_type ) );
139
+
140
+ if ( empty( $field_mapping ) ) {
141
+ return $this->get_default_field_mapping( $form_type );
142
+ }
143
+
144
+ return json_decode( $field_mapping, true );
145
+ }
146
+
147
+ /**
148
+ * Adds a form handler to current list of registered form handlers
149
+ *
150
+ * @param CoSy_Form_Handler $form_handler
151
+ */
152
+ public function add_form_handler( CoSy_Form_Handler $form_handler ) {
153
+ $this->form_handlers[ $form_handler->get_type() ] = $form_handler;
154
+ }
155
+
156
+ /**
157
+ * Retrieves registered form handlers
158
+ *
159
+ * @return CoSy_Form_Handler[]
160
+ */
161
+ public function get_form_handlers() {
162
+ return $this->form_handlers;
163
+ }
164
+
165
+ /**
166
+ * Retrieves a form handler identified by given form type if found
167
+ *
168
+ * @param string $form_type form type to identify handler to be retrieved
169
+ *
170
+ * @return CoSy_Form_Handler|null
171
+ */
172
+ public function get_form_handler( $form_type ) {
173
+ if ( array_key_exists( $form_type, $this->form_handlers ) ) {
174
+ return $this->form_handlers[ $form_type ];
175
+ }
176
+
177
+ return null;
178
+ }
179
+
180
+ /**
181
+ * Saves given data into CoSy Address Book
182
+ *
183
+ * @param array $data data to be sent
184
+ * @param string $form_type type of form to extract corresponding data to be sent to address book
185
+ *
186
+ * @return CoSy_Address_Book_Api_Response Api_Response object response to check if persistence of field mapping was successful or not
187
+ */
188
+ public function save_data_into_address_book( array $data, $form_type ) {
189
+ $form_handler = $this->get_form_handler( $form_type );
190
+ $field_mapping = $this->get_field_mapping( $form_type );
191
+
192
+ $field_mapping_array = ( is_array( $field_mapping ) ) ? $field_mapping : json_decode( $field_mapping, true );
193
+
194
+ $api_key = $this->get_api_key();
195
+ $api_response = new CoSy_Address_Book_Api_Response();
196
+
197
+ if ( $form_handler instanceof CoSy_Form_Handler ) {
198
+ if ( $form_handler->has_consent( $data ) ) {
199
+ $request_body = $form_handler->create_request_body( $data, $field_mapping_array );
200
+ $is_saved_data = $this->rest_client->create_contacts( $api_key, $request_body );
201
+ $api_response->set_is_successful( $is_saved_data );
202
+
203
+ if ( ! $is_saved_data ) {
204
+ $api_response->set_is_successful( false );
205
+ $api_response->set_message( $this->rest_client->get_last_error() );
206
+ }
207
+ }
208
+ }
209
+
210
+ return $api_response;
211
+ }
212
+
213
+ /**
214
+ * Sets value of current config to the given one
215
+ *
216
+ * @param CoSy_Address_Book_Config $config
217
+ */
218
+ public function set_config( CoSy_Address_Book_Config $config ) {
219
+ $this->config = $config;
220
+ }
221
+
222
+ /**
223
+ * Checks whether current domain is connected to CoSy Address Book or not
224
+ *
225
+ * @return boolean
226
+ */
227
+ public function is_connected() {
228
+ $api_key = $this->get_api_key();
229
+
230
+ if ( ! empty( $api_key ) ) {
231
+ return $this->rest_client->get_subscription( $api_key )->is_successful();
232
+ }
233
+
234
+ return false;
235
+ }
236
+
237
+ /**
238
+ * Checks whether current domain is the which is subscribed to CoSy Address Book or not
239
+ *
240
+ * Note that a subscription update request will be sent to CoSy Middleware API
241
+ * if current domain is different from domain subscribed to CoSy Address Book
242
+ *
243
+ * @return boolean
244
+ */
245
+ public function check_subscription_update() {
246
+ $api_key = $this->get_api_key();
247
+ $domain = $this->fetch_domain();
248
+
249
+ if ( ! empty( $api_key ) ) {
250
+ $subscription_response = $this->rest_client->get_subscription( $api_key );
251
+ $is_subscribed = $subscription_response->is_successful();
252
+ $subscription = $subscription_response->get_message();
253
+
254
+ if ( $subscription !== $domain ) {
255
+ $is_subscribed = $this->update_subscription( $subscription, $domain );
256
+ }
257
+
258
+ return $is_subscribed;
259
+ }
260
+
261
+ return false;
262
+ }
263
+
264
+ /**
265
+ * Checks if web form settings like field mapping shall be displayed on view or not
266
+ *
267
+ * Note that at least one web form of supported form handler type must be embedded on page to display form settings
268
+ *
269
+ * @return bool
270
+ */
271
+ public function has_displayable_form_settings() {
272
+ $has_displayable_form_settings = false;
273
+
274
+ /* @var CoSy_Form_Handler $form_handler */
275
+ foreach ( $this->form_handlers as $form_handler ) {
276
+ if ( $form_handler->has_form_embedded_on_page() ) {
277
+ $has_displayable_form_settings = true;
278
+ }
279
+ }
280
+
281
+ return $has_displayable_form_settings;
282
+ }
283
+
284
+ /**
285
+ * Persists given api key into WP-Options
286
+ *
287
+ * @param string $domain
288
+ * @param string $api_key
289
+ *
290
+ * @return bool flags determining if persistence of api key was successful or not
291
+ */
292
+ private function persist_api_key( $domain, $api_key ) {
293
+ return update_option(
294
+ self::WP_OPTION_API_KEY_DATA,
295
+ array(
296
+ self::OPTION_DOMAIN => $domain,
297
+ self::OPTION_API_KEY => $api_key
298
+ )
299
+ );
300
+ }
301
+
302
+
303
+ /**
304
+ * Connects given domain to CoSy Address Book via given api key
305
+ *
306
+ * @param string $domain
307
+ * @param string $api_key value of api_key to be used to connect to CoSy Address Book
308
+ *
309
+ * @return bool flag determining if connection was successful or not
310
+ */
311
+ private function connect_to_api( $domain, $api_key ) {
312
+ return $this->rest_client->create_subscription( $domain, $api_key );
313
+ }
314
+
315
+ /**
316
+ * Retrieves current value of api_key at which current domain is connected to CoSy Address Book to
317
+ *
318
+ * @return string
319
+ */
320
+ private function get_api_key() {
321
+ return $this->get_persisted_api_key_data( self::OPTION_API_KEY );
322
+ }
323
+
324
+ /**
325
+ * Retrieves form type wp option name matching to given form type
326
+ *
327
+ * @param string $form_type
328
+ *
329
+ * @return string
330
+ */
331
+ private function get_form_type_option_name( $form_type ) {
332
+ return sprintf( '%s_%s', self::WP_OPTION_FORM_TYPE, $form_type );
333
+ }
334
+
335
+ /**
336
+ * Retrieves current domain fetched from WordPress configuration
337
+ *
338
+ * @return string
339
+ */
340
+ private function fetch_domain() {
341
+ return parse_url( get_site_url(), PHP_URL_HOST );
342
+ }
343
+
344
+ /**
345
+ * Retrieves persisted api key data
346
+ *
347
+ * @param $key identifier of data type to be used
348
+ *
349
+ * @return string
350
+ */
351
+ private function get_persisted_api_key_data( $key ) {
352
+ $wp_option_api_key_data = get_option( self::WP_OPTION_API_KEY_DATA );
353
+ if ( is_array( $wp_option_api_key_data ) && array_key_exists( $key, $wp_option_api_key_data ) ) {
354
+ return $wp_option_api_key_data[ $key ];
355
+ }
356
+
357
+ return '';
358
+ }
359
+
360
+ /**
361
+ * Triggers api update request of persisted domain to CoSy Address Book API
362
+ *
363
+ * @param string $persisted_domain
364
+ * @param string $current_domain
365
+ *
366
+ * @return bool
367
+ */
368
+ private function update_subscription( $persisted_domain, $current_domain ) {
369
+ return $this->rest_client->update_subscription(
370
+ $persisted_domain,
371
+ $current_domain,
372
+ $this->get_api_key()
373
+ );
374
+ }
375
+
376
+ /**
377
+ * Retrieves default field mapping to be used in case user field mapping is not yet persisted
378
+ *
379
+ * @param string $form_type
380
+ *
381
+ * @return array
382
+ */
383
+ private function get_default_field_mapping( $form_type ) {
384
+ $default_field_mapping = [];
385
+
386
+ $api_fields = $this->config->get_api_fields();
387
+ $form_handler = $this->get_form_handler( $form_type );
388
+ if ( $form_handler instanceof CoSy_Form_Handler ) {
389
+ foreach ( $api_fields as $api_field ) {
390
+ $field_by_type = $form_handler->get_field_by_type( $api_field );
391
+ if ( ! empty( $field_by_type ) ) {
392
+ $default_field_mapping[ $field_by_type ] = $api_field;
393
+ }
394
+ }
395
+ }
396
+
397
+ return $default_field_mapping;
398
+ }
399
+
400
+ /**
401
+ * Retrieves translation of given key
402
+ *
403
+ * @param string $translation_key
404
+ *
405
+ * @return string
406
+ */
407
+ private function get_translation( $translation_key ) {
408
+ return __( $translation_key, 'cosy-address-book' );
409
+ }
410
+ }
inc/api-response.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This class is responsible of encapsulating result of api requests status and potential error messages
5
+ */
6
+ class CoSy_Address_Book_Api_Response {
7
+ /**
8
+ * @var bool
9
+ */
10
+ private $is_successful;
11
+
12
+ /**
13
+ * @var string
14
+ */
15
+ private $message;
16
+
17
+ /**
18
+ * Creates an instance of Address_Book_Api_Response
19
+ *
20
+ * @param bool $is_successful
21
+ * @param string $message
22
+ */
23
+ public function __construct( $is_successful = false, $message = '' ) {
24
+ $this->is_successful = $is_successful;
25
+ $this->message = $message;
26
+ }
27
+
28
+ /**
29
+ * @return bool
30
+ */
31
+ public function is_successful() {
32
+ return $this->is_successful;
33
+ }
34
+
35
+ /**
36
+ * @param bool $is_successful
37
+ */
38
+ public function set_is_successful( $is_successful ) {
39
+ $this->is_successful = $is_successful;
40
+ }
41
+
42
+ /**
43
+ * @return string
44
+ */
45
+ public function get_message() {
46
+ return $this->message;
47
+ }
48
+
49
+ /**
50
+ * @param string $message
51
+ */
52
+ public function set_message( $message ) {
53
+ $this->message = $message;
54
+ }
55
+
56
+ /**
57
+ * Retrieves a json string representation of current api response instance
58
+ *
59
+ * @return string
60
+ */
61
+ public function to_json_string() {
62
+ return json_encode( $this->to_array() );
63
+ }
64
+
65
+ /**
66
+ * Retrieves a array representation of current api response instance
67
+ *
68
+ * @return array
69
+ */
70
+ public function to_array() {
71
+ return [ 'is_successful' => $this->is_successful, 'message' => $this->message ];
72
+ }
73
+ }
inc/config.php ADDED
@@ -0,0 +1,231 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This class is responsible of fetching all relevant configuration data such as: endpoint, url and supported api fields
5
+ *
6
+ * Furthermore it used utility class Address_Book_Market to identify the right market to match market based configuration
7
+ */
8
+ class CoSy_Address_Book_Config {
9
+ /**
10
+ * Instance of api client
11
+ *
12
+ * @param CoSy_Address_Book_Config
13
+ */
14
+ private static $instance;
15
+
16
+ /**
17
+ * instance of Address_Book_Market to fetch relevant market data
18
+ *
19
+ * @var CoSy_Address_Book_Market
20
+ */
21
+ private $market;
22
+
23
+ /**
24
+ * current stage environment extracted out of STAGE_ENV env parameter
25
+ *
26
+ * @var string
27
+ */
28
+ private $environment;
29
+
30
+ /**
31
+ * current folder containing all config files
32
+ *
33
+ * @var string
34
+ */
35
+ private $folder;
36
+
37
+ /**
38
+ * retrieves an instance of CoSy_Address_Book_Config
39
+ *
40
+ * @return CoSy_Address_Book_Config
41
+ */
42
+ public static function instance() {
43
+ if ( is_null( self::$instance ) ) {
44
+ $market = new CoSy_Address_Book_Market();
45
+ $folder = self::get_folder();
46
+ $environment = self::get_environment();
47
+ self::$instance = new self( $market, $folder, $environment );
48
+ }
49
+
50
+ return self::$instance;
51
+ }
52
+
53
+ /**
54
+ * Address_Book_Config constructor.
55
+ *
56
+ * @param CoSy_Address_Book_Market $market instance of Address_Book_Market to fetch relevant market data
57
+ * @param string $folder folder containing all config files
58
+ * @param string $environment stage environment
59
+ */
60
+ public function __construct( CoSy_Address_Book_Market $market, $folder, $environment ) {
61
+ $this->market = $market;
62
+ $this->folder = $folder;
63
+ $this->environment = $environment;
64
+ }
65
+
66
+ /**
67
+ * Retrieves api endpoint
68
+ *
69
+ * @return string
70
+ */
71
+ public function get_api_endpoint() {
72
+ return $this->get_endpoint( 'cosy_middleware', $this->market->get_market_group() );
73
+ }
74
+
75
+ /**
76
+ * Retrieves CoSy Address Book Frontend endpoint
77
+ *
78
+ * @return string
79
+ */
80
+ public function get_frontend_endpoint() {
81
+ return $this->get_endpoint( 'cosy_frontend', $this->market->get_market() );
82
+ }
83
+
84
+ /**
85
+ * Retrieves url of CoSy Address Book Frontend landing page
86
+ *
87
+ * @return string
88
+ */
89
+ public function get_address_book_url() {
90
+ return $this->get_frontend_endpoint();
91
+ }
92
+
93
+
94
+ /**
95
+ * Retrieves url of CoSy Address Book Frontend setting page
96
+ *
97
+ * @return string
98
+ */
99
+ public function get_settings_page_url() {
100
+ return sprintf( '%s/settings', $this->get_frontend_endpoint() );
101
+ }
102
+
103
+ /**
104
+ * Retrieves url describing gdpr policies handling
105
+ *
106
+ * @return string
107
+ */
108
+ public function get_gdpr_policies_url() {
109
+ return $this->get_endpoint( 'gdpr_policies', $this->market->get_market() );
110
+ }
111
+
112
+ /**
113
+ * Retrieves list of currently supported api fields
114
+ *
115
+ * @return array
116
+ */
117
+ public function get_api_fields() {
118
+ $config = $this->get_config_data( 'api_fields' );
119
+
120
+ return $config['fields'];
121
+ }
122
+
123
+ /**
124
+ * Retrieves list of supported plugin types
125
+ *
126
+ * @return array
127
+ */
128
+ public function get_supported_plugin_types() {
129
+ $config = $this->get_config_data( 'plugins' );
130
+
131
+ return $config['plugins']['supported_types'];
132
+ }
133
+
134
+ /**
135
+ * Retrieves list of plugins display names
136
+ *
137
+ * @return array
138
+ */
139
+ public function get_plugins_display_names() {
140
+ $config = $this->get_config_data( 'plugins' );
141
+
142
+ return $config['plugins']['display_names'];
143
+ }
144
+
145
+ /**
146
+ * Retrieves corresponding form plugin display name identified by given form type
147
+ *
148
+ * @param string $plugin_type
149
+ *
150
+ * @return string
151
+ */
152
+ public function get_plugin_display_name( $plugin_type ) {
153
+ $config = $this->get_config_data( 'plugins' );
154
+
155
+ return $config['plugins']['plugin_types'][ $plugin_type ]['display_name'];
156
+ }
157
+
158
+ /**
159
+ * Retrieves endpoint value depending on injected relevant parameters
160
+ *
161
+ * @param string $section config section to extract endpoint value data from
162
+ * @param string $market_data market data to be used to extract end point value
163
+ *
164
+ * @return string
165
+ */
166
+ private function get_endpoint( $section, $market_data ) {
167
+ $end_point = null;
168
+
169
+ $config = $this->get_config_data( 'api_endpoints' );
170
+
171
+ switch ( $this->environment ) {
172
+ case 'production':
173
+ $end_point = $config[ $section ][ $this->environment ][ $market_data ];
174
+ break;
175
+
176
+ default:
177
+ $end_point = $config[ $section ][ $this->environment ];
178
+
179
+ }
180
+
181
+ return $end_point;
182
+ }
183
+
184
+ /**
185
+ * Retrieves config data found in file identified by given name
186
+ *
187
+ * @param string $file_name
188
+ *
189
+ * @return array
190
+ */
191
+ private function get_config_data( $file_name ) {
192
+ return json_decode( file_get_contents( $this->get_file_path( $file_name ) ), true );
193
+ }
194
+
195
+ /**
196
+ * Retrieves corresponding file path identified by given config type
197
+ *
198
+ * @param string $config_type
199
+ *
200
+ * @return string
201
+ */
202
+ private function get_file_path( $config_type ) {
203
+ return sprintf( '%s/%s.json', $this->folder, $config_type );
204
+ }
205
+
206
+ /**
207
+ * Retrieves current environment stage extracted out of STAGE_ENV env parameter
208
+ *
209
+ * Note that if no STAGE_ENV is set or found, 'production' will be retrieved a default value
210
+ *
211
+ * @return string
212
+ */
213
+ private static function get_environment() {
214
+ $stage_env = getenv( 'STAGE_ENV' );
215
+
216
+ if ( empty( $stage_env ) ) {
217
+ return 'production';
218
+ }
219
+
220
+ return $stage_env;
221
+ }
222
+
223
+ /**
224
+ * Retrieves current folder containing config files
225
+ *
226
+ * @return string
227
+ */
228
+ private static function get_folder() {
229
+ return sprintf( '%s/../config', __DIR__ );
230
+ }
231
+ }
inc/form-handler.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This interface defines business logic and behaviour facade of form handler classes working in adapter approach
5
+ *
6
+ * Class implementing this interface might differ from each other depending on which WordPress Form Plugin they rely on
7
+ */
8
+ interface CoSy_Form_Handler {
9
+ /**
10
+ * Checks if at least one instance of current form type is embedded on a page
11
+ *
12
+ * @return bool
13
+ */
14
+ public function has_form_embedded_on_page();
15
+
16
+ /**
17
+ * Checks if given form data contain consent data
18
+ *
19
+ * @param array $form_data form data to be saved into CoSy Address Book
20
+ *
21
+ * @return bool
22
+ */
23
+ public function has_consent( array $form_data );
24
+
25
+ /**
26
+ * Checks if form handler requires a specific user field mapping for synchronisation to address book api fields
27
+ *
28
+ * @return bool
29
+ */
30
+ public function requires_user_field_mapping();
31
+
32
+ /**
33
+ * Retrieves user chosen fields of form to be embedded on page and synchronised to cosy address book
34
+ *
35
+ * @return array
36
+ */
37
+ public function get_user_form_fields();
38
+
39
+ /**
40
+ * Retrieves corresponding field name identified by given type
41
+ *
42
+ * @param string $type type of field to be retrieved (eg.: email, phone, etc)
43
+ *
44
+ * @return string
45
+ */
46
+ public function get_field_by_type( $type );
47
+
48
+ /**
49
+ * Retrieves identifier of current form type
50
+ *
51
+ * @return string
52
+ */
53
+ public function get_type();
54
+
55
+ /**
56
+ * Creates a request body using given form data
57
+ *
58
+ * @param array $form_data form data to be used to create request body
59
+ * @param array $field_mapping field mapping to identify api fields of request body
60
+ *
61
+ * @return string
62
+ */
63
+ public function create_request_body( array $form_data, array $field_mapping = [] );
64
+ }
inc/handlers/contact-form-7.php ADDED
@@ -0,0 +1,402 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class responsible of handling configuration of contact form 7 plugin field mapping and generated
5
+ * visitor form data responding to be sent to CoSy Address Book api
6
+ */
7
+ class CoSy_Contact_Form_7_Handler implements CoSy_Form_Handler {
8
+ const FORM_TYPE = 'contactForm7';
9
+
10
+ /**
11
+ * Instance of WPCF7_ContactForm
12
+ *
13
+ * @var WPCF7_ContactForm
14
+ */
15
+ private $wpcf7_instance;
16
+
17
+ /**
18
+ * List of field types supported by current handler to be used to identify fields by name
19
+ *
20
+ * @var array
21
+ */
22
+ private $field_types = array(
23
+ 'email' => 'email',
24
+ 'phone' => 'tel',
25
+ 'notes' => 'textarea',
26
+ 'consent' => 'acceptance'
27
+ );
28
+
29
+ /**
30
+ * Checks if at least one instance of current form type is embedded on a page
31
+ *
32
+ * @return bool
33
+ */
34
+ public function has_form_embedded_on_page() {
35
+ $pages = get_pages();
36
+ foreach ( $pages as $page ) {
37
+ if ( ! empty( $page->post_content ) && has_shortcode( $page->post_content, 'contact-form-7' ) ) {
38
+ return true;
39
+ }
40
+ }
41
+
42
+ return false;
43
+ }
44
+
45
+ /**
46
+ * Checks if given form data contain consent data
47
+ *
48
+ * @param array $form_data form data to be saved into CoSy Address Book
49
+ *
50
+ * @return bool
51
+ */
52
+ public function has_consent( array $form_data ) {
53
+ $has_consent = false;
54
+ $wpcf7_instance_id = $this->fetch_wpcf7_instance_id( $form_data );
55
+ $consent_field = $this->get_field_by_type( 'consent', $wpcf7_instance_id );
56
+
57
+ if ( ! empty( $consent_field ) ) {
58
+ foreach ( $form_data as $field_name => $field_value ) {
59
+ if ( ! empty( strstr( $consent_field, $field_name ) && $field_value == true ) ) {
60
+ $has_consent = true;
61
+ break;
62
+ }
63
+ }
64
+ }
65
+
66
+ return $has_consent;
67
+ }
68
+
69
+ /**
70
+ * Checks if form handler requires a specific user field mapping for synchronisation to address book api fields
71
+ *
72
+ * @return bool
73
+ */
74
+ public function requires_user_field_mapping() {
75
+ return true;
76
+ }
77
+
78
+ /**
79
+ * Retrieves user chosen fields of form to be embedded on page and synchronised to CoSy Address Book
80
+ *
81
+ * Note that a deep regular expression parsing of Contact_Form_7 form html config value stored as wp_post entry
82
+ * has to be done in order to extract single form fields due to lack of a generic function fulfilling this concern
83
+ *
84
+ * WPCF7_ContactForm::prop( 'form' ); currently retrieves entire string value
85
+ *
86
+ * @example form html config value used in mock file used in unit tests at /test/mockfiles/contact_form_7
87
+ *
88
+ * @return array
89
+ */
90
+ public function get_user_form_fields() {
91
+ $form_html_config = $this->get_form_html_config();
92
+
93
+ if ( empty( $form_html_config ) ) {
94
+ return [];
95
+ }
96
+
97
+ preg_match_all(
98
+ '/\s(\w+).*\]/',
99
+ $form_html_config,
100
+ $field_templates
101
+ );
102
+
103
+ $user_form_fields = explode(
104
+ ']',
105
+ implode( '', $field_templates[0] )
106
+ );
107
+
108
+ $raw_form_field_values = preg_replace( '/.*\[.*acceptance.*/', '', $user_form_fields );
109
+
110
+ return $this->get_sanitized_value_list( $raw_form_field_values );
111
+ }
112
+
113
+ /**
114
+ * Retrieves identifier of current form type
115
+ *
116
+ * @return string
117
+ */
118
+ public function get_type() {
119
+ return self::FORM_TYPE;
120
+ }
121
+
122
+ /**
123
+ * Retrieves corresponding field name identified by given type in form config html value
124
+ *
125
+ * Note that a deep regular expression parsing of Contact_Form_7 form html config value stored as wp_post entry
126
+ * has to be done in order to extract single form field due to lack of a generic function fulfilling this concern
127
+ *
128
+ * WPCF7_ContactForm::prop( 'form' ); currently retrieves entire string value
129
+ *
130
+ * @example form html config value used in mock file used in unit tests at /test/mockfiles/contact_form_7
131
+ *
132
+ * @param string $type type of field to be retrieved (eg.: email, phone, etc)
133
+ * @param mixed $wpcf7_instance_id instance id of a specific form instance to fetch if explicitly required
134
+ *
135
+ * @return string
136
+ */
137
+ public function get_field_by_type( $type, $wpcf7_instance_id = null ) {
138
+ $field = '';
139
+
140
+ if ( array_key_exists( $type, $this->field_types ) ) {
141
+ $form_html_config = $this->get_form_html_config( $wpcf7_instance_id );
142
+ if ( ! empty( $form_html_config ) ) {
143
+ if ( $type == 'consent' ) {
144
+ $field = $this->fetch_consent_field_name( $form_html_config );
145
+ } else {
146
+ $field = $this->fetch_field_name_by_type( $type, $form_html_config );
147
+ }
148
+ }
149
+ }
150
+
151
+ return $field;
152
+ }
153
+
154
+ /**
155
+ * Injects a new instance of WPCF7_ContactForm
156
+ *
157
+ * @param WPCF7_ContactForm $wpcf7_instance
158
+ */
159
+ public function set_wpfc7_instance( WPCF7_ContactForm $wpcf7_instance ) {
160
+ $this->wpcf7_instance = $wpcf7_instance;
161
+ }
162
+
163
+ /**
164
+ * Creates a request body using given form data
165
+ *
166
+ * @param array $form_data form data to be used to create request body
167
+ * @param array $field_mapping field mapping to identify api fields of request body
168
+ *
169
+ * @return string
170
+ */
171
+ public function create_request_body( array $form_data, array $field_mapping = [] ) {
172
+ $wpcf7_instance_id = $this->fetch_wpcf7_instance_id( $form_data );
173
+
174
+ $request_data = array(
175
+ 'source' => array(
176
+ 'type' => 'CONTACTFORM',
177
+ 'description' => parse_url( get_site_url(), PHP_URL_HOST )
178
+ )
179
+ );
180
+
181
+ if ( is_array( $form_data ) ) {
182
+ foreach ( $form_data as $name => $value ) {
183
+ $api_field_name = $this->fetch_api_field_name( $field_mapping, $name );
184
+ if ( ! empty( $api_field_name ) && ! empty( $value ) ) {
185
+ switch ( $api_field_name ) {
186
+ case 'consent':
187
+ $form_html_config = $this->get_form_html_config( $wpcf7_instance_id );
188
+ $request_data['consent'] = array(
189
+ 'origin' => parse_url( get_site_url(), PHP_URL_HOST ),
190
+ 'text' => $this->fetch_consent_field_text( $form_html_config ),
191
+ 'issuedAt' => date( DATE_ISO8601, time() )
192
+ );
193
+ break;
194
+
195
+ default:
196
+ $request_data[ $api_field_name ] = $value;
197
+ }
198
+ }
199
+ }
200
+ }
201
+
202
+ return json_encode( $request_data );
203
+ }
204
+
205
+ /**
206
+ * Retrieves instance of WPCF7_ContactForm if found
207
+ *
208
+ * @param mixed $wpcf7_instance_id instance id of a specific form instance to fetch if explicitly required
209
+ *
210
+ * @return bool|WPCF7_ContactForm
211
+ */
212
+ private function get_wpcf7_instance( $wpcf7_instance_id = null ) {
213
+ if ( $this->wpcf7_instance instanceof WPCF7_ContactForm ) {
214
+ return $this->wpcf7_instance;
215
+ }
216
+
217
+ if ( ! empty( $wpcf7_instance_id ) ) {
218
+ return WPCF7_ContactForm::get_instance( $wpcf7_instance_id );
219
+ }
220
+
221
+ $args = array(
222
+ 'post_type' => 'wpcf7_contact_form',
223
+ 'numberposts' => '1',
224
+ 'order' => 'ASC',
225
+ );
226
+
227
+ $wpcf7_posts = get_posts( $args );
228
+ $wpcf7_first_post = array_pop( $wpcf7_posts );
229
+
230
+ return WPCF7_ContactForm::get_instance( $wpcf7_first_post->ID );
231
+ }
232
+
233
+ /**
234
+ * Retrieves persisted form html config
235
+ *
236
+ * @param mixed $wpcf7_instance_id instance id of a specific form instance to fetch if explicitly required
237
+ *
238
+ * @return string
239
+ */
240
+ private function get_form_html_config( $wpcf7_instance_id = null ) {
241
+ $wpcf7_form_instance = $this->get_wpcf7_instance( $wpcf7_instance_id );
242
+ if ( $wpcf7_form_instance instanceof WPCF7_ContactForm ) {
243
+ $form_html_config = $wpcf7_form_instance->prop( 'form' );
244
+
245
+ return ( empty( $form_html_config ) ) ? '' : $form_html_config;
246
+ }
247
+
248
+ return '';
249
+ }
250
+
251
+ /**
252
+ * Fetch api field name out of field mapping mathcing to given form field
253
+ *
254
+ * @param array $field_mapping
255
+ * @param string $form_field_name
256
+ *
257
+ * @example form html config value used in mock file used in unit tests at /test/mockfiles/contact_form_7
258
+ *
259
+ * @return string
260
+ */
261
+ private function fetch_api_field_name( array $field_mapping, $form_field_name ) {
262
+ $api_field_name = '';
263
+
264
+ foreach ( $field_mapping as $form_field => $api_field ) {
265
+ if ( ! empty( strstr( $form_field, $form_field_name ) ) ) {
266
+ $api_field_name = $api_field;
267
+ break;
268
+ }
269
+ }
270
+
271
+ return $api_field_name;
272
+ }
273
+
274
+ /**
275
+ * Fetches consent field name from given form html config
276
+ *
277
+ * @param string $form_html_config
278
+ *
279
+ * @see self::get_field_by_type()
280
+ *
281
+ * @return string
282
+ */
283
+ private function fetch_consent_field_name( $form_html_config ) {
284
+ $consent_field_template_fragments = $this->fetch_consent_field_template_fragments( $form_html_config );
285
+
286
+ if ( empty( $consent_field_template_fragments ) ) {
287
+ return '';
288
+ }
289
+
290
+ return trim( array_shift( $consent_field_template_fragments ) );
291
+ }
292
+
293
+ /**
294
+ * Fetches consent field text from given form html config
295
+ *
296
+ * @param string $form_html_config
297
+ *
298
+ * @return string
299
+ */
300
+ private function fetch_consent_field_text( $form_html_config ) {
301
+ $consent_field_template_fragments = $this->fetch_consent_field_template_fragments( $form_html_config );
302
+
303
+ if ( empty( $consent_field_template_fragments ) ) {
304
+ return '';
305
+ }
306
+
307
+ return trim( str_replace( '[/acceptance', '', $consent_field_template_fragments[1] ) );
308
+ }
309
+
310
+ /**
311
+ * Retrieves consent field template fragments out of given form html config
312
+ *
313
+ * @param string $form_html_config
314
+ *
315
+ * @return array
316
+ */
317
+ private function fetch_consent_field_template_fragments( $form_html_config ) {
318
+ $consent_field_template_fragments = [];
319
+
320
+ preg_match_all(
321
+ '/\s(\w+).*\]/',
322
+ $form_html_config,
323
+ $field_templates
324
+ );
325
+
326
+ foreach ( $field_templates[0] as $field_template ) {
327
+ if ( preg_match( '/\[.*acceptance.*\]/', $field_template ) ) {
328
+ $consent_field_template_fragments = explode( ']', $field_template );
329
+ break;
330
+ }
331
+ }
332
+
333
+ return $consent_field_template_fragments;
334
+ }
335
+
336
+ /**
337
+ * Retrieves sanitized value list
338
+ *
339
+ * @param array $raw_value_list
340
+ *
341
+ * @return array
342
+ */
343
+ private function get_sanitized_value_list( array $raw_value_list ) {
344
+ $sanitized_value_list = [];
345
+
346
+ foreach ( $raw_value_list as $raw_value ) {
347
+ if ( ! empty( $raw_value ) ) {
348
+ array_push( $sanitized_value_list, trim( $raw_value ) );
349
+ }
350
+ }
351
+
352
+ return $sanitized_value_list;
353
+ }
354
+
355
+ /**
356
+ * Fetches a specific field name matching to given field type from given form html config
357
+ *
358
+ * @param string $type
359
+ * @param string $form_html_config
360
+ *
361
+ * @example form html config value used in mock file used in unit tests at /test/mockfiles/contact_form_7
362
+ * @see self::get_field_by_type()
363
+ *
364
+ * @return string
365
+ */
366
+ private function fetch_field_name_by_type( $type, $form_html_config ) {
367
+ $field = null;
368
+
369
+ preg_match_all(
370
+ '/\[.*(\w+).*\]/',
371
+ $form_html_config,
372
+ $field_templates
373
+ );
374
+
375
+ foreach ( $field_templates[0] as $field_template ) {
376
+ $pattern = sprintf( '/^\[%s.*\]$/', $this->field_types[ $type ] );
377
+
378
+ if ( preg_match( $pattern, $field_template ) ) {
379
+ preg_match_all(
380
+ '/\s(\w+).*\]/',
381
+ $field_template,
382
+ $field_name
383
+ );
384
+
385
+ $field = str_replace( [ ' ', '[', ']' ], '', $field_name[0][0] );
386
+ }
387
+ }
388
+
389
+ return $field;
390
+ }
391
+
392
+ /**
393
+ * Fetches wpcf7 instance id from given data lit if found
394
+ *
395
+ * @param array $data
396
+ *
397
+ * @return mixed|null
398
+ */
399
+ private function fetch_wpcf7_instance_id( array $data ) {
400
+ return ( isset( $data['_wpcf7'] ) ) ? $data['_wpcf7'] : null;
401
+ }
402
+ }
inc/handlers/wp-forms-lite.php ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class responsible of handling configuration of WPforms lite plugin field mapping and generated
5
+ * visitor form data responding to be sent to CoSy Address Book api
6
+ */
7
+ class CoSy_WP_Forms_Lite_Handler implements CoSy_Form_Handler {
8
+ const FORM_TYPE = 'WpFormsLite';
9
+
10
+ /**
11
+ * Checks if at least one instance of current form type is embedded on a page
12
+ *
13
+ * @return bool
14
+ */
15
+ public function has_form_embedded_on_page() {
16
+ $pages = get_pages();
17
+ foreach ( $pages as $page ) {
18
+ if ( ! empty( $page->post_content )
19
+ &&
20
+ ( has_shortcode( $page->post_content, 'wpforms' )
21
+ ||
22
+ $this->has_wpforms_widget( $page->post_content )
23
+ )
24
+ ) {
25
+ return true;
26
+ }
27
+ }
28
+
29
+ return false;
30
+ }
31
+
32
+ /**
33
+ * Checks if given form data contain consent data
34
+ *
35
+ * @param array $form_data form data to be saved into CoSy Address Book
36
+ *
37
+ * @return bool
38
+ */
39
+ public function has_consent( array $form_data ) {
40
+ $has_consent = false;
41
+ foreach ( $form_data as $form_field ) {
42
+ if ( is_array( $form_field ) && array_key_exists( 'type', $form_field ) ) {
43
+ if ( ( $form_field['type'] == 'gdpr-checkbox' ) && ! empty( $form_field['value'] ) ) {
44
+ $has_consent = true;
45
+ break;
46
+ }
47
+ }
48
+
49
+ }
50
+
51
+ return $has_consent;
52
+ }
53
+
54
+ /**
55
+ * Checks if form handler requires a specific user field mapping for synchronisation to address book api fields
56
+ *
57
+ * @return bool
58
+ */
59
+ public function requires_user_field_mapping() {
60
+ return false;
61
+ }
62
+
63
+ /**
64
+ * Retrieves user chosen fields of form to be embedded on page and synchronised to CoSy address book
65
+ *
66
+ * @return array
67
+ */
68
+ public function get_user_form_fields() {
69
+ return [];
70
+ }
71
+
72
+ /**
73
+ * Retrieves identifier of current form type
74
+ *
75
+ * @return string
76
+ */
77
+ public function get_type() {
78
+ return self::FORM_TYPE;
79
+ }
80
+
81
+ /**
82
+ * Retrieves corresponding field name identified by given type
83
+ *
84
+ * @param string $type type of field to be retrieved (eg.: email, phone, etc)
85
+ *
86
+ * @return string
87
+ */
88
+ public function get_field_by_type( $type ) {
89
+ return '';
90
+ }
91
+
92
+ /**
93
+ * Creates a request body using given form data
94
+ *
95
+ * @param array $form_data form data to be used to create request body
96
+ * @param array $field_mapping field mapping to identify api fields of request body
97
+ *
98
+ * @return string
99
+ */
100
+ public function create_request_body( array $form_data, array $field_mapping = [] ) {
101
+ $request_data = array(
102
+ 'source' => array(
103
+ 'type' => 'CONTACTFORM',
104
+ 'description' => parse_url( get_site_url(), PHP_URL_HOST )
105
+ )
106
+ );
107
+
108
+ if ( is_array( $form_data ) ) {
109
+ foreach ( $form_data as $field ) {
110
+ if ( is_array( $field ) && isset( $field['type'] ) && ! empty( $field['value'] ) ) {
111
+ switch ( $field['type'] ) {
112
+ case 'name':
113
+ $request_data['firstName'] = $field['first'];
114
+ $request_data['lastName'] = $field['last'];
115
+ break;
116
+
117
+ case 'email':
118
+ $request_data['email'] = $field['value'];
119
+ break;
120
+
121
+ case 'phone':
122
+ $request_data['phone'] = $field['value'];
123
+ break;
124
+
125
+ case 'textarea':
126
+ $request_data['notes'] = $field['value'];
127
+ break;
128
+
129
+ case 'gdpr-checkbox':
130
+ $request_data['consent'] = array(
131
+ 'origin' => parse_url( get_site_url(), PHP_URL_HOST ),
132
+ 'text' => $field['value'],
133
+ 'issuedAt' => date( DATE_ISO8601, time() )
134
+ );
135
+ break;
136
+ }
137
+ }
138
+ }
139
+ }
140
+
141
+ return json_encode( $request_data );
142
+ }
143
+
144
+ /**
145
+ * Checks if given post content has a wpforms widget
146
+ *
147
+ * This function has been explicitly implemented due to lack of WordPress Core generic function
148
+ * retrieving flag confirming presence of a wpforms-widget on a page or not like done in WordPress core function.
149
+ *
150
+ * 'has_short_code($content)'
151
+ *
152
+ * @param string $content
153
+ *
154
+ * @return bool
155
+ */
156
+ private function has_wpforms_widget( $content ) {
157
+ return boolval( preg_match( '/.*wpforms\/form-selector.*formId.*:.*\d+.*/', $content ) );
158
+ }
159
+ }
inc/http-response.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class responsible of wrapping Wordpress http response data
5
+ */
6
+ class CoSy_Address_Book_Http_Response {
7
+ /**
8
+ * @var $data
9
+ */
10
+ private $data;
11
+
12
+ /**
13
+ * Retrieves an instance of Address_Book_Http_Response
14
+ *
15
+ * @param array $data
16
+ */
17
+ public function __construct( array $data ) {
18
+ $this->data = $data;
19
+ }
20
+
21
+ /**
22
+ * Checks if $response is an http error
23
+ *
24
+ * @return bool
25
+ */
26
+ public function is_error() {
27
+ return $this->get_status_code() != WP_Http::OK;
28
+ }
29
+
30
+ /**
31
+ * Retrieves http error built out of response message and body
32
+ *
33
+ * @return string
34
+ */
35
+ public function get_error() {
36
+ return json_encode(
37
+ [
38
+ 'status_code' => $this->get_status_code(),
39
+ 'error_type' => $this->get_message(),
40
+ 'error_message' => $this->get_body()
41
+ ]
42
+ );
43
+ }
44
+
45
+ /**
46
+ * Retrieves http status code of found current response
47
+ *
48
+ * @return int
49
+ */
50
+ public function get_status_code() {
51
+ if ( isset( $this->data['response']['code'] ) ) {
52
+ return $this->data['response']['code'];
53
+ }
54
+
55
+ return 0;
56
+ }
57
+
58
+ /**
59
+ * Retrieves http response message of found current response
60
+ *
61
+ * @return string
62
+ */
63
+ public function get_message() {
64
+ if ( isset( $this->data['response']['message'] ) ) {
65
+ return $this->data['response']['message'];
66
+ }
67
+
68
+ return '';
69
+ }
70
+
71
+ /**
72
+ * Retrieves http response body of found current response
73
+ *
74
+ * @return string
75
+ */
76
+ public function get_body() {
77
+ if ( isset( $this->data['body'] ) ) {
78
+ return $this->data['body'];
79
+ }
80
+
81
+ return '';
82
+ }
83
+ }
inc/market.php ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This class is responsible of fetching market value configured for current WordPress installation
5
+ */
6
+ class CoSy_Address_Book_Market {
7
+ /**
8
+ * @var string
9
+ */
10
+ const WP_OPTION_MARKET = 'assistant_market';
11
+
12
+ /**
13
+ * @var string
14
+ */
15
+ const MARKET_GROUP_EU = 'EU';
16
+
17
+ /**
18
+ * @var string
19
+ */
20
+ const MARKET_GROUP_US = 'US';
21
+
22
+ /**
23
+ * Default market
24
+ *
25
+ * @var string
26
+ */
27
+ private $default_market = 'US';
28
+
29
+ /**
30
+ * List of supported markets
31
+ *
32
+ * @var array
33
+ */
34
+ private $supported_markets = [ 'DE', 'CA', 'GB', 'US', 'ES', 'MX', 'FR', 'IT' ];
35
+
36
+ /**
37
+ * List of markets assigned to EU markets
38
+ *
39
+ * @var array
40
+ */
41
+ private $eu_markets = [ 'DE', 'ES', 'GB', 'FR', 'IT' ];
42
+
43
+ /**
44
+ * List of markets assigned to EU markets
45
+ *
46
+ * @var array
47
+ */
48
+ private $us_markets = [ 'US', 'CA', 'MX' ];
49
+
50
+ /**
51
+ * Retrieves depending on market value configured for current installation in wp_option
52
+ *
53
+ * @return string
54
+ */
55
+ public function get_market() {
56
+ $market = $this->get_wp_option_market();
57
+
58
+ if ( ! $market || ! in_array( $market, $this->supported_markets ) ) {
59
+ $market = $this->default_market;
60
+ }
61
+
62
+ return $market;
63
+ }
64
+
65
+ /**
66
+ * Retrieves market group EU or US depending on market value configured for current installation
67
+ *
68
+ * @return string
69
+ */
70
+ public function get_market_group() {
71
+ $market = $this->get_wp_option_market();
72
+
73
+ if ( in_array( $market, $this->eu_markets ) ) {
74
+ return self::MARKET_GROUP_EU;
75
+ }
76
+
77
+ if ( in_array( $market, $this->us_markets ) ) {
78
+ return self::MARKET_GROUP_US;
79
+ }
80
+
81
+ return self::MARKET_GROUP_US;
82
+ }
83
+
84
+ /**
85
+ * Retrieves the contract's market value provided by the installation
86
+ *
87
+ * @return string
88
+ */
89
+ private function get_wp_option_market() {
90
+ return ( string ) strtoupper( get_option( self::WP_OPTION_MARKET, $this->default_market ) );
91
+ }
92
+ }
inc/rest-api.php ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This class is responsible of encapsulating handling of http requests sent to plugin such as:
5
+ * fetching, saving mapping between form -and api fields or handling of api key for subscription to CoSy Address Book
6
+ */
7
+ class CoSy_Address_Book_Rest_Api {
8
+ /**
9
+ * content type for field mapping
10
+ *
11
+ * @var string
12
+ */
13
+ CONST CONTENT_TYPE_FIELD_MAPPING = 'application/vnd.ionos.product.integration.cosy.wordpress.field-mapping-v1+json';
14
+
15
+ /**
16
+ * content type for api key
17
+ *
18
+ * @var string
19
+ */
20
+ CONST CONTENT_TYPE_API_KEY = 'application/vnd.ionos.product.integration.cosy.wordpress.api-key-v1+json';
21
+
22
+ /**
23
+ * content type for generic success feedback
24
+ *
25
+ * @var string
26
+ */
27
+ CONST CONTENT_TYPE_SUCCESS = 'application/vnd.ionos.product.integration.cosy.wordpress.success-v1+json';
28
+
29
+ /**
30
+ * Request param for field mapping
31
+ *
32
+ * @var string
33
+ */
34
+ CONST PARAM_FORM_TYPE = 'formType';
35
+
36
+ /**
37
+ * Request param for field mapping
38
+ *
39
+ * @var string
40
+ */
41
+ CONST PARAM_FIELD_MAPPING = 'field_mapping';
42
+
43
+ /**
44
+ * Request param for api_key
45
+ *
46
+ * @var string
47
+ */
48
+ CONST PARAM_API_KEY = 'api_key';
49
+
50
+ /**
51
+ * Namespace of first version of rest api
52
+ */
53
+ const NAMESPACE_V1 = 'cosy/v1';
54
+
55
+ /**
56
+ * Instance of rest api
57
+ *
58
+ * @param CoSy_Address_Book_Rest_Api
59
+ */
60
+ private static $instance;
61
+
62
+ /**
63
+ * Instance of address book api client to communicate with CoSy Address Book api
64
+ *
65
+ * @var CoSy_Address_Book_Api_Client
66
+ */
67
+ private $api_client;
68
+
69
+ /**
70
+ * Instance of address book config to extract for example supported plugins
71
+ *
72
+ * @var CoSy_Address_Book_Config
73
+ */
74
+ private $config;
75
+
76
+ /**
77
+ * Flag determining if current user is authorised to access rest api
78
+ *
79
+ * @var bool
80
+ */
81
+ private $is_authorised_current_user;
82
+
83
+ /**
84
+ * retrieves an instance of Address_Book_Rest_Api
85
+ *
86
+ * @return CoSy_Address_Book_Rest_Api
87
+ */
88
+ public static function instance() {
89
+ if ( is_null( self::$instance ) ) {
90
+ self::$instance = new self(
91
+ CoSy_Address_Book_Api_Client::instance(),
92
+ CoSy_Address_Book_Config::instance()
93
+ );
94
+ }
95
+
96
+ return self::$instance;
97
+ }
98
+
99
+ /**
100
+ * Address_Book_Internal_Rest_Api constructor.
101
+ *
102
+ * @param CoSy_Address_Book_Api_Client $api_client
103
+ */
104
+ public function __construct( CoSy_Address_Book_Api_Client $api_client, CoSy_Address_Book_Config $config ) {
105
+ $this->is_authorised_current_user = current_user_can( 'manage_options' );
106
+ $this->api_client = $api_client;
107
+ $this->config = $config;
108
+ }
109
+
110
+ /**
111
+ * Registers required rest routes to serve sent requests
112
+ */
113
+ public function register_rest_routes() {
114
+ register_rest_route( self::NAMESPACE_V1,
115
+ 'address-book/connect',
116
+ array(
117
+ array(
118
+ 'methods' => WP_REST_Server::CREATABLE,
119
+ 'callback' => array( $this, 'connect_api_key' ),
120
+ 'permission_callback' => function () {
121
+ return $this->is_authorised_current_user;
122
+ }
123
+ )
124
+ )
125
+ );
126
+
127
+ register_rest_route( self::NAMESPACE_V1,
128
+ '(?P<formType>\w+)/fields',
129
+ array(
130
+ array(
131
+ 'methods' => WP_REST_Server::READABLE,
132
+ 'callback' => array( $this, 'get_field_mapping' ),
133
+ 'args' => array(
134
+ 'formType' => array(
135
+ 'required' => true,
136
+ 'validate_callback' => array( $this, 'validate_form_type' )
137
+ )
138
+ ),
139
+ 'permission_callback' => function () {
140
+ return $this->is_authorised_current_user;
141
+ }
142
+ )
143
+ )
144
+ );
145
+
146
+ register_rest_route( self::NAMESPACE_V1,
147
+ '(?P<formType>\w+)/fields/save',
148
+ array(
149
+ array(
150
+ 'methods' => WP_REST_Server::CREATABLE,
151
+ 'callback' => array( $this, 'save_field_mapping' ),
152
+ 'args' => array(
153
+ 'formType' => array(
154
+ 'required' => true,
155
+ 'validate_callback' => array( $this, 'validate_form_type' )
156
+ ),
157
+ ),
158
+ 'permission_callback' => function () {
159
+ return $this->is_authorised_current_user;
160
+ }
161
+ )
162
+ )
163
+ );
164
+ }
165
+
166
+ /**
167
+ * Validates form type used as request parameter
168
+ *
169
+ * @param string $form_type
170
+ *
171
+ * @return bool
172
+ */
173
+ public function validate_form_type( $form_type ) {
174
+ return in_array( $form_type, $this->config->get_supported_plugin_types() );
175
+ }
176
+
177
+ /**
178
+ * Retrieves field mapping data in accordance to form type provided by request
179
+ *
180
+ * @param WP_REST_Request $request
181
+ *
182
+ * @return WP_REST_Response
183
+ */
184
+ public function get_field_mapping( WP_REST_Request $request ) {
185
+
186
+ $field_mapping = $this->api_client->get_field_mapping( $request->get_param( self::PARAM_FORM_TYPE ) );
187
+
188
+ return $this->create_success_rest_response( $field_mapping, self::CONTENT_TYPE_FIELD_MAPPING );
189
+ }
190
+
191
+ /**
192
+ * Persists field mapping data provided by request in accordance to a specific form type
193
+ *
194
+ * @param WP_REST_Request $request
195
+ *
196
+ * @return WP_REST_Response
197
+ */
198
+ public function save_field_mapping( WP_REST_Request $request ) {
199
+ $is_valid_request = $this->validate_request( $request );
200
+
201
+ if ( ! $is_valid_request ) {
202
+ return $this->create_error_rest_response( 'save field mapping', WP_Http::BAD_REQUEST );
203
+ }
204
+
205
+ $request_body = json_decode( $request->get_body(), true );
206
+
207
+ $response = $this->api_client->save_field_mapping(
208
+ json_encode( $request_body[ self::PARAM_FIELD_MAPPING ] ),
209
+ $request->get_param( self::PARAM_FORM_TYPE )
210
+ )->to_array();
211
+
212
+ return $this->create_success_rest_response( $response, self::CONTENT_TYPE_FIELD_MAPPING );
213
+ }
214
+
215
+ /**
216
+ * Connects domain of current installation to CoSy Address Book using api key provided by request
217
+ *
218
+ * @param WP_REST_Request $request
219
+ *
220
+ * @return WP_REST_Response
221
+ */
222
+ public function connect_api_key( WP_REST_Request $request ) {
223
+ $is_valid_request = $this->validate_request( $request );
224
+ if ( ! $is_valid_request ) {
225
+ return $this->create_error_rest_response( 'api key connection', WP_Http::BAD_REQUEST );
226
+ }
227
+
228
+ $request_body = json_decode( $request->get_body(), true );
229
+ $response = $this->api_client->connect_api_key( $request_body[ self::PARAM_API_KEY ] )->to_array();
230
+
231
+ return $this->create_success_rest_response( $response, self::CONTENT_TYPE_SUCCESS );
232
+ }
233
+
234
+ /**
235
+ * @param WP_REST_Request $request
236
+ *
237
+ * @return bool
238
+ */
239
+ private function validate_request( WP_REST_Request $request ) {
240
+ $is_valid_request = null;
241
+
242
+ $content_type = $request->get_header( 'Content-Type' );
243
+
244
+ switch ( $content_type ) {
245
+ case self::CONTENT_TYPE_FIELD_MAPPING:
246
+ $request_body = json_decode( $request->get_body(), true );
247
+ $is_valid_request = isset( $request_body[ self::PARAM_FIELD_MAPPING ] ) &&
248
+ ! empty( $request_body[ self::PARAM_FIELD_MAPPING ] );
249
+ break;
250
+
251
+ case self::CONTENT_TYPE_API_KEY:
252
+ $request_body = json_decode( $request->get_body(), true );
253
+ $is_valid_request = isset( $request_body[ self::PARAM_API_KEY ] ) &&
254
+ ! empty( $request_body[ self::PARAM_API_KEY ] );
255
+ break;
256
+
257
+ default:
258
+ $is_valid_request = false;
259
+
260
+ }
261
+
262
+ return $is_valid_request;
263
+ }
264
+
265
+ /**
266
+ * Creates an instance of WP_REST_Response with error message in according to given request type
267
+ *
268
+ * @param string $request_type
269
+ * @param int $status_code
270
+ *
271
+ * @return WP_REST_Response
272
+ */
273
+ private function create_error_rest_response( $request_type, $status_code ) {
274
+ return new WP_REST_Response( sprintf( 'invalid %s request', $request_type ), $status_code );
275
+ }
276
+
277
+ /**
278
+ * @param mixed $data data to be injected into success rest response
279
+ * @param string $content_type content type of retrieved resource
280
+ *
281
+ * @return WP_REST_Response
282
+ */
283
+ private function create_success_rest_response( $data, $content_type ) {
284
+ return new WP_REST_Response( $data, WP_Http::OK, [ 'Content-Type' => $content_type ] );
285
+ }
286
+ }
inc/rest-client.php ADDED
@@ -0,0 +1,249 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class responsible of handling RESTful communication to CoSy Address Book API
5
+ */
6
+ class Address_Book_Rest_Client {
7
+ /**
8
+ * @string
9
+ */
10
+ const CONTENT_TYPE_SUBSCRIPTION = 'application/vnd.ionos.product.integration.cosy.subscription-v1+json';
11
+
12
+ /**
13
+ * Instance of Address_Book_Config
14
+ *
15
+ * @var CoSy_Address_Book_Config
16
+ */
17
+ private $config;
18
+
19
+ /**
20
+ * Last error generated by CoSy Address Book API
21
+ *
22
+ * @var string
23
+ */
24
+ private $last_error;
25
+
26
+ /**
27
+ * Creates an instance of Http_Client
28
+ *
29
+ * @param CoSy_Address_Book_Config $config instance of address Book Config to extract utility parameters
30
+ */
31
+ public function __construct( CoSy_Address_Book_Config $config ) {
32
+ $this->config = $config;
33
+ }
34
+
35
+ /**
36
+ * Retrieves subscription mapped to given api key
37
+ *
38
+ * @param string $api_key api key assigned to expected domain
39
+ *
40
+ * @return CoSy_Address_Book_Api_Response
41
+ */
42
+ public function get_subscription( $api_key ) {
43
+ $response = $this->do_request(
44
+ 'GET',
45
+ sprintf( '%s/subscriptions', $this->config->get_api_endpoint() ),
46
+ $api_key
47
+ );
48
+
49
+ if ( is_wp_error( $response ) ) {
50
+ return new CoSy_Address_Book_Api_Response( false, $response->get_error_message() );
51
+ }
52
+
53
+ return $this->fetch_subscription_from_response( $response );
54
+ }
55
+
56
+ /**
57
+ * Creates a subscription api rest resource with given api key
58
+ *
59
+ * @param string $domain
60
+ * @param string $api_key
61
+ *
62
+ * @return bool
63
+ */
64
+ public function create_subscription( $domain, $api_key ) {
65
+ $response = $this->do_request(
66
+ 'POST',
67
+ sprintf( '%s/subscriptions', $this->config->get_api_endpoint() ),
68
+ $api_key,
69
+ json_encode( [ 'domain' => $domain ] )
70
+ );
71
+
72
+ return $this->is_success_response( $response );
73
+ }
74
+
75
+ /**
76
+ * Updates subscription api rest resource identified by given api key with new domain value
77
+ *
78
+ * @param string $current_domain
79
+ * @param string $new_domain
80
+ * @param string $api_key
81
+ *
82
+ * @return bool
83
+ */
84
+ public function update_subscription( $current_domain, $new_domain, $api_key ) {
85
+ $response = $this->do_request(
86
+ 'PUT',
87
+ sprintf( '%s/subscriptions/%s', $this->config->get_api_endpoint(), $current_domain ),
88
+ $api_key,
89
+ json_encode( [ 'domain' => $new_domain ] )
90
+ );
91
+
92
+ return $this->is_success_response( $response );
93
+ }
94
+
95
+ /**
96
+ * Creates a subscription contacts data api rest resource with given api key and request body data
97
+ *
98
+ * @param string $api_key
99
+ * @param string $request_body
100
+ *
101
+ * @return bool
102
+ */
103
+ public function create_contacts( $api_key, $request_body ) {
104
+ $response = $this->do_request(
105
+ 'POST',
106
+ sprintf( '%s/contacts', $this->config->get_api_endpoint() ),
107
+ $api_key,
108
+ $request_body
109
+ );
110
+
111
+ return $this->is_success_response( $response );
112
+ }
113
+
114
+ /**
115
+ * Retrieves Last error generated by CoSy Address Book API
116
+ *
117
+ * @return string
118
+ */
119
+ public function get_last_error() {
120
+ return $this->last_error;
121
+ }
122
+
123
+ /**
124
+ * Creates an instance of Address_Book_Http_Response
125
+ *
126
+ * @param array $response
127
+ *
128
+ * @return CoSy_Address_Book_Http_Response
129
+ */
130
+ private function create_http_response_instance( array $response ) {
131
+ return new CoSy_Address_Book_Http_Response( $response );
132
+ }
133
+
134
+ /**
135
+ * Checks if response consecutively sent to a request is a success or error response
136
+ *
137
+ * @param WP_Error|array $response
138
+ *
139
+ * @return bool
140
+ */
141
+ private function is_success_response( $response ) {
142
+ if ( is_wp_error( $response ) ) {
143
+ $this->last_error = $response->get_error_message();
144
+
145
+ return false;
146
+ } else {
147
+ $http_response = $this->create_http_response_instance( $response );
148
+ if ( $http_response->is_error() ) {
149
+ $this->last_error = $http_response->get_error();
150
+
151
+ return false;
152
+ }
153
+
154
+ return true;
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Retrieves expected subscription domain if found in response
160
+ *
161
+ * @param array $response
162
+ *
163
+ * @return CoSy_Address_Book_Api_Response
164
+ *
165
+ * @see GET resource config/wiremock/__files/cosy/subscription_domain_GET.json
166
+ */
167
+ private function fetch_subscription_from_response( array $response ) {
168
+ $is_success_subscription_response = false;
169
+ $api_response_message = null;
170
+ $http_response = $this->create_http_response_instance( $response );
171
+
172
+ if ( $http_response->is_error() ) {
173
+ $api_response_message = $http_response->get_error();
174
+ } else {
175
+ $is_success_subscription_response = true;
176
+ $subscriptions = json_decode( $http_response->get_body(), true );
177
+ foreach ( $subscriptions as $subscription ) {
178
+ if ( array_key_exists( 'domain', $subscription ) ) {
179
+ $api_response_message = $subscription['domain'];
180
+ break;
181
+ }
182
+ }
183
+ }
184
+
185
+ return new CoSy_Address_Book_Api_Response( $is_success_subscription_response, $api_response_message );
186
+ }
187
+
188
+
189
+ /**
190
+ * Proceeds an http request with given data
191
+ *
192
+ * @param string $method (GET|PUT|POST)
193
+ * @param string $request_url
194
+ * @param string $api_key
195
+ * @param string $request_body
196
+ *
197
+ * @return WP_Error|array
198
+ */
199
+ private function do_request( $method, $request_url, $api_key, $request_body = null ) {
200
+ $response = null;
201
+ $authorisation = sprintf( 'API-Key %s', $api_key );
202
+
203
+ switch ( $method ) {
204
+ case 'GET':
205
+ $response = wp_remote_get(
206
+ $request_url,
207
+ array(
208
+ 'sslverify' => false,
209
+ 'headers' => array(
210
+ 'Authorization' => $authorisation,
211
+ 'Content-Type' => self::CONTENT_TYPE_SUBSCRIPTION
212
+ )
213
+ )
214
+ );
215
+ break;
216
+
217
+ case 'PUT':
218
+ $response = wp_remote_request(
219
+ $request_url,
220
+ array(
221
+ 'method' => 'PUT',
222
+ 'sslverify' => false,
223
+ 'headers' => array(
224
+ 'Authorization' => $authorisation,
225
+ 'Content-Type' => self::CONTENT_TYPE_SUBSCRIPTION
226
+ ),
227
+ 'body' => $request_body
228
+ )
229
+ );
230
+ break;
231
+
232
+ default:
233
+ $response = wp_remote_post(
234
+ $request_url,
235
+ array(
236
+ 'sslverify' => false,
237
+ 'headers' => array(
238
+ 'Authorization' => $authorisation,
239
+ 'Content-Type' => self::CONTENT_TYPE_SUBSCRIPTION
240
+ ),
241
+ 'body' => $request_body
242
+ )
243
+ );
244
+
245
+ }
246
+
247
+ return $response;
248
+ }
249
+ }
inc/view.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This class is responsible of rendering html value of view identified by specific file name
5
+ */
6
+ class CoSy_Address_Book_View {
7
+ public static function load_page() {
8
+ self::load_view( 'main' );
9
+ }
10
+
11
+ public static function load_view( $template_name ) {
12
+ load_template(
13
+ sprintf( '%s/views/%s.php', __DIR__, $template_name )
14
+ );
15
+ }
16
+ }
inc/views/description.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p>
2
+ <?php _e( 'cosy_address_book_invitation', 'cosy-address-book' ); ?>
3
+ <a href='<?php echo CoSy_Address_Book_Config::instance()->get_address_book_url(); ?>' target='_blank'>
4
+ <?php _e( 'cosy_address_book_url_text', 'cosy-address-book' ); ?>
5
+ </a>
6
+ </p>
7
+ <h2><?php _e( 'cosy_address_book_connection_header', 'cosy-address-book' ); ?></h2>
8
+ <div id="feedback-message" default-error="<?php _e( 'cosy_address_book_generic_error', 'cosy-address-book' ); ?>"></div>
9
+ <div>
10
+ <p>
11
+ <?php _e( 'cosy_address_book_guidance_summary', 'cosy-address-book' ); ?>
12
+ </p>
13
+ <div class="flex-layout">
14
+ <div class="flex-item flex-shrink no-wrap mr8">
15
+ <?php _e( 'cosy_address_book_guidance_step_one_label', 'cosy-address-book' ); ?>:
16
+ </div>
17
+ <div class="flex-item flex-grow mb16">
18
+ <span>
19
+ <?php _e( 'cosy_address_book_guidance_step_one_content', 'cosy-address-book' ); ?>
20
+ <a href='<?php echo CoSy_Address_Book_Config::instance()->get_settings_page_url(); ?>'
21
+ target="_blank">
22
+ <?php _e( 'cosy_address_book_url_text', 'cosy-address-book' ); ?>
23
+ </a>
24
+ </span>
25
+ </div>
26
+ </div>
27
+ <div class="flex-layout">
28
+ <div class="flex-item flex-shrink no-wrap mr8">
29
+ <?php _e( 'cosy_address_book_guidance_step_two_label', 'cosy-address-book' ); ?>:
30
+ </div>
31
+ <div class="flex-item flex-grow mb16">
32
+ <div class="mb4">
33
+ <?php _e( 'cosy_address_book_guidance_step_two_content', 'cosy-address-book' ); ?>
34
+ </div>
35
+ <div>
36
+ <div class="mb4"><label
37
+ for="apiKey"><?php _e( 'cosy_address_book_activation_form_label', 'cosy-address-book' ); ?></label>
38
+ </div>
39
+ <input name='api_key' id="apiKey" type="text">
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ <div>
45
+ <button id="connect-api-key"><?php _e( 'cosy_address_book_form_button_text', 'cosy-address-book' ); ?></button>
46
+ </div>
inc/views/main.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="ui-cosy-address-book">
2
+ <h1>
3
+ <?php _e( 'cosy_address_book_menu_page_headline', 'cosy-address-book' ); ?>
4
+ </h1>
5
+ <div>
6
+ <?php
7
+ CoSy_Address_Book_Api_Client::instance()->check_subscription_update();
8
+ CoSy_Address_Book_View::load_view(
9
+ ( CoSy_Address_Book_Api_Client::instance()->is_connected() ) ? 'settings' : 'description'
10
+ );
11
+ ?>
12
+ </div>
13
+ </div>
inc/views/plugins/description.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div>
2
+ <h2><?php _e( 'cosy_address_book_plugin_description_header', 'cosy-address-book' ); ?></h2>
3
+ <p><?php _e( 'cosy_address_book_plugin_activation_hint', 'cosy-address-book' ); ?></p>
4
+ <ul>
5
+ <?php
6
+ foreach ( CoSy_Address_Book_Config::instance()->get_plugins_display_names() as $display_name ) { ?>
7
+ <li>&#8210;&nbsp;&nbsp; <?php echo $display_name; ?>
8
+ </li>
9
+ <?php } ?>
10
+ </ul>
11
+ <p><?php _e( 'cosy_address_book_web_form_insertion_hint', 'cosy-address-book' ); ?></p>
12
+ </div>
inc/views/plugins/settings.php ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $api_fields = CoSy_Address_Book_Config::instance()->get_api_fields();
3
+ $form_handlers = CoSy_Address_Book_Api_Client::instance()->get_form_handlers();
4
+
5
+ /* @var CoSy_Form_Handler $form_handler */
6
+ foreach ( $form_handlers as $form_handler ) { ?>
7
+ <?php if ( $form_handler->has_form_embedded_on_page() ) { ?>
8
+ <h2 class='ui-form-type' id="<?php echo $form_handler->get_type(); ?>">
9
+ <?php echo CoSy_Address_Book_Config::instance()->get_plugin_display_name(
10
+ $form_handler->get_type()
11
+ ); ?>
12
+ </h2>
13
+ <?php if ( $form_handler->requires_user_field_mapping() ) { ?>
14
+ <p>
15
+ <?php _e( 'cosy_address_book_mapping_description', 'cosy-address-book' ); ?>
16
+ </p>
17
+ <div id="feedback-message"
18
+ default-error="<?php _e( 'cosy_address_book_generic_error', 'cosy-address-book' ); ?>"></div>
19
+ <div>
20
+ <div class="flex-layout flex-wrap v-center">
21
+ <div class="flex-item size-6">
22
+ <b><?php _e( 'cosy_address_book_mapping_header_api_fields', 'cosy-address-book' ); ?></b>
23
+ </div>
24
+ <div class="flex-item size-6">
25
+ <b><?php _e( 'cosy_address_book_mapping_header_form_fields', 'cosy-address-book' ); ?></b>
26
+ </div>
27
+ </div>
28
+ <?php foreach ( $api_fields as $api_field ) { ?>
29
+ <div class='flex-layout flex-wrap v-center ui-mapping-configuration'>
30
+ <div class="flex-item size-6 ui-api-field" id=<?php echo $api_field; ?>>
31
+ <label>
32
+ <?php _e(
33
+ sprintf(
34
+ 'cosy_address_book_api_field_display_name_%s',
35
+ strtolower( $api_field )
36
+ ),
37
+ 'cosy-address-book'
38
+ ); ?>
39
+ </label>
40
+ </div>
41
+ <div class="flex-item size-6 ui-form-field">
42
+ <?php echo get_form_fields_choice_element(
43
+ $form_handler->get_user_form_fields()
44
+ ); ?>
45
+ </div>
46
+ </div>
47
+ <?php } ?>
48
+ <div>
49
+ <p>
50
+ <?php _e( 'cosy_address_book_consent_field_constraint_hint', 'cosy-address-book' ); ?>
51
+ </p>
52
+ </div>
53
+ </div>
54
+ <button type="button" id="save-field-mappings">
55
+ <?php _e( 'cosy_address_book_form_button_text', 'cosy-address-book' ); ?>
56
+ </button>
57
+ <?php } else { ?>
58
+ <div>
59
+ <p>
60
+ <?php _e( 'cosy_address_book_synchronisation_ready_hint', 'cosy-address-book' ); ?>
61
+ </p>
62
+ </div>
63
+ <div class='ui-gdpr-policy-hint'>
64
+ <p>
65
+ <?php _e( 'cosy_address_book_gdpr_hint_content', 'cosy-address-book' ); ?>
66
+ </p>
67
+ </div>
68
+ <?php } ?>
69
+ <?php } ?>
70
+ <?php } ?>
71
+ <?php
72
+ function get_form_fields_choice_element( array $form_fields ) {
73
+ $option_elements_pattern = '#OPTIONS#';
74
+
75
+ $form_fields_choice_element = sprintf( "
76
+ <select>
77
+ <option value='none'>-</option>
78
+ %s
79
+ <select>",
80
+ $option_elements_pattern
81
+ );
82
+
83
+ $option_elements = '';
84
+
85
+ foreach ( $form_fields as $form_field ) {
86
+ $option_elements .= sprintf( "<option value='%s'>%s</option>", $form_field, $form_field );
87
+ }
88
+
89
+ return str_replace( $option_elements_pattern, $option_elements, $form_fields_choice_element );
90
+ }
91
+
92
+ ?>
inc/views/settings.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div>
2
+ <h2><?php _e( 'cosy_address_book_connection_header', 'cosy-address-book' ); ?></h2>
3
+ <?php _e( 'cosy_address_book_connection_confirmation', 'cosy-address-book' ); ?>
4
+ <div class="deconnection-link">
5
+ <a href='<?php echo CoSy_Address_Book_Config::instance()->get_settings_page_url(); ?>' target='_blank'>
6
+ <?php _e( 'cosy_address_book_deconnection_url_text', 'cosy-address-book' ); ?>
7
+ </a>
8
+ </div>
9
+ </div>
10
+ <div>
11
+ <?php
12
+ $template_name = sprintf(
13
+ 'plugins/%s',
14
+ ( CoSy_Address_Book_Api_Client::instance()->has_displayable_form_settings() ) ? 'settings' : 'description'
15
+ );
16
+
17
+ CoSy_Address_Book_View::load_view( $template_name );
18
+ ?>
19
+ </div>
js/address-book.js ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (
2
+ function ( $ ) {
3
+ var rest_endpoint = '/wp-json/cosy/v1';
4
+
5
+ init_post_handlers();
6
+ init_persisted_mapping_values();
7
+
8
+ function init_post_handlers() {
9
+ $( 'button#connect-api-key' ).click( function () {
10
+ $.ajax( {
11
+ url: rest_endpoint + '/address-book/connect',
12
+ type: 'POST',
13
+ headers: {
14
+ 'Content-Type': 'application/vnd.ionos.product.integration.cosy.wordpress.api-key-v1+json'
15
+ },
16
+ data: JSON.stringify( {
17
+ "api_key": $( '#apiKey' ).val()
18
+ } )
19
+ } ).done( function ( data ) {
20
+ if ( data.is_successful === true ) {
21
+ location.reload( true );
22
+ } else {
23
+ show_form_message( 'error' );
24
+ }
25
+ } ).error( function () {
26
+ show_form_message( 'error' );
27
+ } )
28
+ } );
29
+
30
+ $( 'button#save-field-mappings' ).click( function () {
31
+ var form_type = $( '.ui-form-type' ).attr( 'id' );
32
+
33
+ $.ajax( {
34
+ url: rest_endpoint + '/' + form_type + '/fields/save',
35
+ type: 'POST',
36
+ headers: {
37
+ 'Content-Type': 'application/vnd.ionos.product.integration.cosy.wordpress.field-mapping-v1+json'
38
+ },
39
+ data: JSON.stringify( {
40
+ "field_mapping": get_field_mapping()
41
+ } )
42
+ } ).done( function ( data ) {
43
+ show_form_message( data.is_successful ? 'success' : 'error', data.message );
44
+ } ).error( function () {
45
+ show_form_message( 'error' );
46
+ } );
47
+ } );
48
+ }
49
+
50
+ function init_persisted_mapping_values() {
51
+ var form_type = $( '.ui-form-type' ).attr( 'id' );
52
+
53
+ if ( form_type !== undefined ) {
54
+ $.ajax( {
55
+ url: rest_endpoint + '/' + form_type + '/fields',
56
+ type: 'GET',
57
+ } ).done( function ( data ) {
58
+
59
+ var persistedMapping = (
60
+ $.isPlainObject( data )
61
+ ) ? data : JSON.parse( data );
62
+ $.each( persistedMapping, function ( form_field, api_field ) {
63
+ $( "[id='" + api_field + "']" ).parent().find( 'select' ).val( form_field );
64
+ } );
65
+ } );
66
+ }
67
+ }
68
+
69
+ function get_field_mapping() {
70
+ var field_mapping = {};
71
+
72
+ $( '.ui-mapping-configuration' ).each( function () {
73
+ var api_field = $( this ).find( '.ui-api-field' ).attr( 'id' ),
74
+ form_field = $( this ).find( '.ui-form-field select' ).val();
75
+
76
+ if ( form_field !== 'none' ) {
77
+ field_mapping[form_field] = api_field;
78
+ }
79
+ } );
80
+
81
+ return JSON.stringify( field_mapping );
82
+ }
83
+
84
+ function show_form_message( type, text ) {
85
+ var feedbackContainer = $( '#feedback-message' );
86
+ var messageText = text || feedbackContainer.attr( 'default-error' );
87
+ var message = $( '<p class="info-message ' + type + '" style="display:none"></p>' ).text( messageText );
88
+ feedbackContainer.append( message );
89
+ $( '#feedback-message .info-message' ).slideDown();
90
+ setTimeout( function () {
91
+ $( '#feedback-message .info-message' ).slideUp( 'normal', function () {
92
+ $( this ).remove();
93
+ } );
94
+ }, 3500 );
95
+ }
96
+ }
97
+ )( jQuery );
languages/cosy-address-book-de_CH.mo ADDED
Binary file
languages/cosy-address-book-de_CH.po ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Addressbuch"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Addressbuch"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&amp;1 IONOS Addressbuch"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Dieses Plugin funktionniert nur in Verbindung mit dem"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&amp;1 IONOS Addressbuch"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Um Kontaktinformationen Ihrer website automatisch in Ihrem 1&amp;1 IONOS Addressbuch zu speichern, müssen Sie beide Systeme wie folgt verbinden:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Schritt 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Erstellen Sie ein Einmal-Passwort auf der Seite &quot;Quellen verwalten&quot; in Ihrem"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Schritt 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Fügen Sie das erstellte Einmal-Passwort in das untenstehenden Feld ein und und klicken Sie auf &quot;Speichern&quot;"
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Einmal-Passwort"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Speichern"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Verbindung"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Installieren Sie eines der folgenden Plugins, um Kontaktinformationen automatisch in Ihrem 1&1 IONOS Addressbuch zu speichern."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Wenn Sie ein Kontaktformular in Ihrer Website eingebunden haben, sehen Sie auf dieser Seite weitere Einstellungen."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Erfolgreich verbunden mit Ihrem 1&amp;1 IONOS Addressbuch"
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "In welchem Feld Ihres Addressbuchs sollen die Daten des Kontaktformulars agbespeichert werden?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "1&amp;1 IONOS Addressbuch"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Feld des Kontaktformulars"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Vorname"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Nachname"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-Mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Telefon"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notizen"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Einwilligung (Pflichtfeld)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Kontaktdaten aus Ihrem Kontaktformular werden automatisch in Ihrem 1&amp;1 IONOS Addressbuch abgespeichert."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Verbindung lösen"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Aufgrund der aktuellen EU-Datenschutzrichtlinie dürfen die Daten des Kontaktformulars nur in Ihrem Addressbuch gespeichert werden,"
106
+ "&nbsp;wenn der Nutzer der Speicherung zustimmt. Aus diesem Grund ist das Feld &quot;Einwilligung&quot; ein Pflichtfeld."
107
+
108
+ msgid "cosy_address_book_gdpr_hint_content"
109
+ msgstr "Bitte beachten Sie:<br/>Aufgrund der aktuellen EU-Datenschutzrichtlinie dürfen die Daten des Kontaktformulars nur in Ihrem Addressbuch gespeichert werden,&nbsp;wenn der Nutzer der Speicherung zustimmt. Aus diesem Grund ist das Feld Einwilligung ein Pflichtfeld."
110
+ "Stellen Sie deshalb sicher, dass Sie eine Einwilligung Ihrer Nutzer einholen."
111
+
112
+ #Message from API Client
113
+ msgid "cosy_address_book_generic_error"
114
+ msgstr "Beim speichern ist ein Fehler aufgetreten. Bitte versuchen Sie erneut."
115
+
116
+ msgid "cosy_address_book_field_mapping_successful"
117
+ msgstr "Die Zuordnung der Felder wurde erfolgreich gespeichert"
languages/cosy-address-book-de_CH_informal.mo ADDED
Binary file
languages/cosy-address-book-de_CH_informal.po ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Adressbuch"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Adressbuch"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&amp;1 IONOS Adressbuch"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Dieses Plugin funktioniert nur in Verbindung mit dem"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&amp;1 IONOS Adressbuch"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Um Kontaktinformationen Ihrer Website automatisch in Ihrem 1&amp;1 IONOS Adressbuch zu speichern, verbinden Sie WordPress einfach mit dem 1&amp;1 IONOS Adressbuch:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Schritt 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Erstellen Sie ein Einmalpasswort auf der Seite &quot;Quellen verwalten&quot; in Ihrem"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Schritt 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Geben Sie das erstellte Einmalpasswort in das untenstehende Feld ein und klicken Sie auf &quot;Speichern&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Einmalpasswort"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Speichern"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Verbindung herstellen"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Installieren Sie eines der folgenden Plugins, um Kontaktinformationen automatisch in Ihrem 1&1 IONOS Adressbuch zu speichern."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Wenn Sie ein Kontaktformular in Ihrer Website eingebunden haben, sehen Sie auf dieser Seite weitere Einstellungen."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Die Verbindung mit Ihrem 1&amp;1 IONOS Adressbuch war erfolgreich."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "In welchem Feld Ihres Adressbuchs sollen die Daten des Kontaktformulars abgespeichert werden?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "1&amp;1 IONOS Adressbuch"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Feld des Kontaktformulars"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Vorname"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Nachname"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-Mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Telefon"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notizen"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Einwilligung (Pflichtfeld)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Kontaktdaten aus Ihrem Kontaktformular werden automatisch in Ihrem 1&amp;1 IONOS Adressbuch abgespeichert."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Verbindung trennen"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Aufgrund der aktuellen EU-Datenschutzrichtlinie dürfen die Daten des Kontaktformulars nur in Ihrem Addressbuch gespeichert werden,"
106
+ "&nbsp;wenn der Nutzer der Speicherung zustimmt. Aus diesem Grund ist das Feld &quot;Einwilligung&quot; ein Pflichtfeld."
107
+
108
+ msgid "cosy_address_book_gdpr_hint_content"
109
+ msgstr "Bitte beachten Sie:<br/>Aufgrund der aktuellen EU-Datenschutzrichtlinie dürfen die Daten des Kontaktformulars nur in Ihrem Addressbuch gespeichert werden,&nbsp;wenn der Nutzer der Speicherung zustimmt. Aus diesem Grund ist das Feld Einwilligung ein Pflichtfeld."
110
+ "Stellen Sie deshalb sicher, dass Sie eine Einwilligung Ihrer Nutzer einholen."
111
+
112
+ #Message from API Client
113
+ msgid "cosy_address_book_generic_error"
114
+ msgstr "Beim Speichern ist ein Fehler aufgetreten. Bitte versuchen Sie erneut."
115
+
116
+ msgid "cosy_address_book_field_mapping_successful"
117
+ msgstr "Die Zuordnung der Felder wurde erfolgreich gespeichert."
languages/cosy-address-book-de_DE.mo ADDED
Binary file
languages/cosy-address-book-de_DE.po ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Adressbuch"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Adressbuch"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&amp;1 IONOS Adressbuch"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Dieses Plugin funktioniert nur in Verbindung mit dem"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&amp;1 IONOS Adressbuch"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Um Kontaktinformationen Ihrer Website automatisch in Ihrem 1&amp;1 IONOS Adressbuch zu speichern, verbinden Sie WordPress einfach mit dem 1&amp;1 IONOS Adressbuch:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Schritt 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Erstellen Sie ein Einmalpasswort auf der Seite &quot;Quellen verwalten&quot; in Ihrem"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Schritt 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Geben Sie das erstellte Einmalpasswort in das untenstehende Feld ein und klicken Sie auf &quot;Speichern&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Einmalpasswort"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Speichern"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Verbindung herstellen"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Installieren Sie eines der folgenden Plugins, um Kontaktinformationen automatisch in Ihrem 1&1 IONOS Adressbuch zu speichern."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Wenn Sie ein Kontaktformular in Ihrer Website eingebunden haben, sehen Sie auf dieser Seite weitere Einstellungen."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Die Verbindung mit Ihrem 1&amp;1 IONOS Adressbuch war erfolgreich."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "In welchem Feld Ihres Adressbuchs sollen die Daten des Kontaktformulars abgespeichert werden?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "1&amp;1 IONOS Adressbuch"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Feld des Kontaktformulars"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Vorname"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Nachname"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-Mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Telefon"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notizen"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Einwilligung (Pflichtfeld)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Kontaktdaten aus Ihrem Kontaktformular werden automatisch in Ihrem 1&amp;1 IONOS Adressbuch abgespeichert."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Verbindung trennen"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Aufgrund der aktuellen EU-Datenschutzrichtlinie dürfen die Daten des Kontaktformulars nur in Ihrem Addressbuch gespeichert werden,"
106
+ "&nbsp;wenn der Nutzer der Speicherung zustimmt. Aus diesem Grund ist das Feld &quot;Einwilligung&quot; ein Pflichtfeld."
107
+
108
+ msgid "cosy_address_book_gdpr_hint_content"
109
+ msgstr "Bitte beachten Sie:<br/>Aufgrund der aktuellen EU-Datenschutzrichtlinie dürfen die Daten des Kontaktformulars nur in Ihrem Addressbuch gespeichert werden,&nbsp;wenn der Nutzer der Speicherung zustimmt. Aus diesem Grund ist das Feld Einwilligung ein Pflichtfeld."
110
+ "Stellen Sie deshalb sicher, dass Sie eine Einwilligung Ihrer Nutzer einholen."
111
+
112
+ #Message from API Client
113
+ msgid "cosy_address_book_generic_error"
114
+ msgstr "Beim Speichern ist ein Fehler aufgetreten. Bitte versuchen Sie erneut."
115
+
116
+ msgid "cosy_address_book_field_mapping_successful"
117
+ msgstr "Die Zuordnung der Felder wurde erfolgreich gespeichert."
languages/cosy-address-book-en_AU.mo ADDED
Binary file
languages/cosy-address-book-en_AU.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Address Book"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Address Book"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Address Book"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "This plugin only works in conjunction with the"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Address Book"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "To automatically store your website contact information in your 1&1 IONOS Address Book, simply connect WordPress to the 1&1 IONOS Address Book:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Step 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Create a one time password in the &quot;Manage Sources&quot; page of your"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Step 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Enter the one time password in the field below and click &quot;Save&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "One time password"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Save"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Establish connection"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Install one of the following plugins to automatically store contact information in your 1&1 IONOS address book."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "If you have integrated a contact form into your website, you will see further settings on this page."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "The connection with your 1&1 IONOS address book was successful."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "In which field of your address book should the contact form data be saved?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "1&1 IONOS Address Book"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Contact form field"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Forename"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Surname"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Email"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Phone"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notes"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consent (mandatory field)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Contact details from your contact form are automatically saved in your 1&1 IONOS address book."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Disconnect"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Due to current EU General Data Protection Regulations, the contact form data may only be stored in your 1&1 IONOS address book if the user agrees to its storage. For this reason, the &quot;Consent&quot; field is mandatory."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "Please note:<br/>Due to current EU General Data Protection Regulations, the contact form data may only be stored in your 1&1 IONOS address book if the user agrees to its storage. For this reason, the consent field is mandatory, please ensure that you obtain the consent from your users."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "An error occurred during saving. Please try again."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "The assignment of the fields was saved successfully."
languages/cosy-address-book-en_CA.mo ADDED
Binary file
languages/cosy-address-book-en_CA.po ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:23+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: en_CA\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Address Book"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Address Book"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&amp;1 IONOS Address Book"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "This plugin only works with the"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&amp;1 IONOS Address Book"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "In order to automatically save contact data of your WordPress website into your 1&amp;1 IONOS Address Book, you need to connect both systems to each other as described below:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Step 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Generate a new one-time-password on the page &quot;Configure Settings&quot; in your"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Step 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Paste the generated one-time-password into field below and click &quot;Save&quot;"
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "One-time password"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Save"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Connection"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Install one following plugins in order to save contact data into your 1&amp;1 IONOS Address Book."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "As soon as you insert a web form to your website, you will see further settings on current page."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Successfully connected to your 1&amp;1 IONOS Address Book"
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "Which form field should be saved to which contact field?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "1&amp;1 IONOS Address Book"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Contact form field"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "First Name"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Last Name"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Email"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Phone"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notes"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Privacy consent (required)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Your configured form fields will be automatically synchronised to corresponding IONOS Address Book fields."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Disconnect"
103
+
104
+ msgid "cosy_address_book_form_settings_url_text"
105
+ msgstr "Your Form Configuration"
106
+
107
+ msgid "cosy_address_book_consent_field_constraint_hint"
108
+ msgstr "In the range of EU GDPR Policies, contact form data will be saved in your Address Book only if the visitor consents. This is the reason why field &quot;Privacy consent&quot; is mandatory"
109
+
110
+ msgid "cosy_address_book_gdpr_hint_content"
111
+ msgstr "Please note: Due to privacy reasons it it required to obtain a privacy consent from the user, which allows you to process personal data."
112
+
113
+ msgid "cosy_address_book_gdpr_hint_url_text"
114
+ msgstr "More Information"
115
+
116
+ #Message from API Client
117
+ msgid "cosy_address_book_generic_error"
118
+ msgstr "An error occurred while saving, please retry"
119
+
120
+ msgid "cosy_address_book_field_mapping_successful"
121
+ msgstr "Field mapping successfully saved"
languages/cosy-address-book-en_GB.mo ADDED
Binary file
languages/cosy-address-book-en_GB.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Address Book"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Address Book"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Address Book"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "This plugin only works in conjunction with the"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Address Book"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "To automatically store your website contact information in your 1&1 IONOS Address Book, simply connect WordPress to the 1&1 IONOS Address Book:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Step 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Create a one time password in the &quot;Manage Sources&quot; page of your"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Step 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Enter the one time password in the field below and click &quot;Save&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "One time password"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Save"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Establish connection"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Install one of the following plugins to automatically store contact information in your 1&1 IONOS address book."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "If you have integrated a contact form into your website, you will see further settings on this page."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "The connection with your 1&1 IONOS address book was successful."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "In which field of your address book should the contact form data be saved?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "1&1 IONOS Address Book"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Contact form field"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Forename"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Surname"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Email"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Phone"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notes"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consent (mandatory field)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Contact details from your contact form are automatically saved in your 1&1 IONOS address book."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Disconnect"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Due to current EU General Data Protection Regulations, the contact form data may only be stored in your 1&1 IONOS address book if the user agrees to its storage. For this reason, the &quot;Consent&quot; field is mandatory."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "Please note:<br/>Due to current EU General Data Protection Regulations, the contact form data may only be stored in your 1&1 IONOS address book if the user agrees to its storage. For this reason, the consent field is mandatory, please ensure that you obtain the consent from your users."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "An error occurred during saving. Please try again."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "The assignment of the fields was saved successfully."
languages/cosy-address-book-en_NZ.mo ADDED
Binary file
languages/cosy-address-book-en_NZ.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Address Book"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Address Book"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Address Book"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "This plugin only works in conjunction with the"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Address Book"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "To automatically store your website contact information in your 1&1 IONOS Address Book, simply connect WordPress to the 1&1 IONOS Address Book:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Step 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Create a one time password in the &quot;Manage Sources&quot; page of your"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Step 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Enter the one time password in the field below and click &quot;Save&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "One time password"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Save"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Establish connection"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Install one of the following plugins to automatically store contact information in your 1&1 IONOS address book."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "If you have integrated a contact form into your website, you will see further settings on this page."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "The connection with your 1&1 IONOS address book was successful."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "In which field of your address book should the contact form data be saved?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "1&1 IONOS Address Book"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Contact form field"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Forename"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Surname"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Email"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Phone"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notes"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consent (mandatory field)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Contact details from your contact form are automatically saved in your 1&1 IONOS address book."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Disconnect"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Due to current EU General Data Protection Regulations, the contact form data may only be stored in your 1&1 IONOS address book if the user agrees to its storage. For this reason, the &quot;Consent&quot; field is mandatory."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "Please note:<br/>Due to current EU General Data Protection Regulations, the contact form data may only be stored in your 1&1 IONOS address book if the user agrees to its storage. For this reason, the consent field is mandatory, please ensure that you obtain the consent from your users."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "An error occurred during saving. Please try again."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "The assignment of the fields was saved successfully."
languages/cosy-address-book-en_US.mo ADDED
Binary file
languages/cosy-address-book-en_US.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Contacts"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Contacts"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS address book"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "This plugin only works in conjunction with the"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS address book"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "To automatically store your website's contact information in your 1&1 IONOS address book, simply connect WordPress to the 1&1 IONOS address book:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Step 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Create a one-time password on the &quot;Manage sources&quot; page in your"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Step 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Enter the created one-time password in the field below and click &quot;Save&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "One-time password"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Save"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Establish connection"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Install one of the following plugins to automatically store contact information in your 1&1 IONOS address book."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "If you have integrated a contact form into your website, you will see further settings on this page."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "The connection with your 1&1 IONOS address book was successful."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "In which field of your address book should the data of the contact form be saved?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "1&1 IONOS address book"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Field of the contact form"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "First name"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Last name"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Email"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Phone"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notices"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consent (mandatory field)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Contact details from your contact form are automatically saved in your 1&1 IONOS address book."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Disconnect"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Due to the current EU data protection directive, the data of the contact form may only be stored in your 1&1 IONOS address book if the user agrees to its storage. For this reason, the &quot;Consent&quot; field is mandatory."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "Please note:<br/>Due to the current EU data protection directive, the contact form data may only be stored in your 1&1 IONOS address book if the user agrees to the storage. For this reason, the consent field is mandatory, so make sure that you obtain the consent of your users."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "An error occurred during saving. Please try again."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "The assignment of the fields was saved successfully."
languages/cosy-address-book-es_AR.mo ADDED
Binary file
languages/cosy-address-book-es_AR.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de tu sitio web en la Libreta de direcciones, simplemente conéctala a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingresa esta contraseña en el campo abajo y haz clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instala uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando hayas integrado un formulario de contacto en el sitio web, verás más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se estableció con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario expresó su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrate de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se produjo un error al guardar la información. "
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se asignaron con éxito."
languages/cosy-address-book-es_CL.mo ADDED
Binary file
languages/cosy-address-book-es_CL.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de tu sitio web en la Libreta de direcciones, simplemente conéctala a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingresa esta contraseña en el campo abajo y haz clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instala uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando hayas integrado un formulario de contacto en el sitio web, verás más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se estableció con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario expresó su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrate de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se produjo un error al guardar la información. "
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se asignaron con éxito."
languages/cosy-address-book-es_CO.mo ADDED
Binary file
languages/cosy-address-book-es_CO.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de tu sitio web en la Libreta de direcciones, simplemente conéctala a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingresa esta contraseña en el campo abajo y haz clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instala uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando hayas integrado un formulario de contacto en el sitio web, verás más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se estableció con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario expresó su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrate de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se produjo un error al guardar la información. "
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se asignaron con éxito."
languages/cosy-address-book-es_CR.mo ADDED
Binary file
languages/cosy-address-book-es_CR.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de tu sitio web en la Libreta de direcciones, simplemente conéctala a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingresa esta contraseña en el campo abajo y haz clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instala uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando hayas integrado un formulario de contacto en el sitio web, verás más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se estableció con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario expresó su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrate de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se produjo un error al guardar la información. "
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se asignaron con éxito."
languages/cosy-address-book-es_ES.mo ADDED
Binary file
languages/cosy-address-book-es_ES.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de su sitio web en la Libreta de direcciones, simplemente conéctela a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Cree una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingrese esta contraseña en el campo abajo y haga clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instale uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando haya integrado un formulario de contacto en el sitio web, verá más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se ha establecido con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Correo"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrese de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se ha producido un error al guardar la información. Por favor, inténtelo de nuevo."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se han asignado con éxito."
languages/cosy-address-book-es_GT.mo ADDED
Binary file
languages/cosy-address-book-es_GT.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de tu sitio web en la Libreta de direcciones, simplemente conéctala a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingresa esta contraseña en el campo abajo y haz clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instala uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando hayas integrado un formulario de contacto en el sitio web, verás más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se estableció con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario expresó su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrate de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se produjo un error al guardar la información. "
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se asignaron con éxito."
languages/cosy-address-book-es_MX.mo ADDED
Binary file
languages/cosy-address-book-es_MX.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de tu sitio web en la Libreta de direcciones, simplemente conéctala a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingresa esta contraseña en el campo abajo y haz clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instala uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando hayas integrado un formulario de contacto en el sitio web, verás más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se estableció con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario expresó su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrate de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se produjo un error al guardar la información. "
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se asignaron con éxito."
languages/cosy-address-book-es_PE.mo ADDED
Binary file
languages/cosy-address-book-es_PE.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de tu sitio web en la Libreta de direcciones, simplemente conéctala a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingresa esta contraseña en el campo abajo y haz clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instala uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando hayas integrado un formulario de contacto en el sitio web, verás más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se estableció con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario expresó su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrate de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se produjo un error al guardar la información. "
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se asignaron con éxito."
languages/cosy-address-book-es_VE.mo ADDED
Binary file
languages/cosy-address-book-es_VE.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Libreta de direcciones"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Libreta de direcciones"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "1&1 IONOS Libreta de direcciones"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Este plugin solo funciona con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "1&1 IONOS Libreta de direcciones"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Para guardar automáticamente los contactos que entren a través de tu sitio web en la Libreta de direcciones, simplemente conéctala a WordPress:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Paso 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una contraseña de un solo uso en la página &quot;Gestionar fuentes&quot; en la"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Paso 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Ingresa esta contraseña en el campo abajo y haz clic en &quot;Guardar&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Contraseña de un solo uso"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Guardar"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Conectar"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Instala uno de los siguientes plugins para guardar automáticamente los contactos en la Libreta de direcciones."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Cuando hayas integrado un formulario de contacto en el sitio web, verás más configuraciones en esta página."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Se estableció con éxito la conexión a la Libreta de direcciones."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "¿En qué campo de la Libreta de direcciones deben guardarse los datos del formulario de contacto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Libreta de direcciones"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del formulario"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nombre"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Apellidos"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Teléfono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notas"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentimiento (obligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Los datos del formulario de contacto se guardarán automáticamente en la Libreta de direcciones."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Desconectar"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario expresó su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "A tener en cuenta:<br/>Debido al Reglamento General de Protección de Datos de la Unión Europea, los datos del formulario de contacto pueden guardarse en la Libreta de direcciones solo si el usuario ha expresado su consentimiento. Por este motivo, el campo &quot;Consentimiento&quot; es obligatorio. Asegúrate de obtener el consentimiento de los usuarios."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Se produjo un error al guardar la información. "
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "Los campos se asignaron con éxito."
languages/cosy-address-book-fr_BE.mo ADDED
Binary file
languages/cosy-address-book-fr_BE.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Carnet d'adresses"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Carnet d'adresses"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "Carnet d'adresses 1&1 IONOS"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Ce plugin ne fonctionne qu'avec le "
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "Carnet d'adresses 1&1 IONOS"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Pour stocker automatiquement les données de contact de votre site Web dans votre Carnet d'adresses 1&1 IONOS, connectez simplement WordPress au Carnet d'adresses 1&1 IONOS :"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Étape 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Créez un mot de passe unique sur la page « Gérer les sources » dans votre"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Étape 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Entrez dans le champ ci-dessous le mot de passe unique que vous venez de créer et cliquez sur « Enregistrer »."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Mot de passe unique"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Enregistrer"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Établir la connexion"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Installez l'un des plugins suivants pour enregistrer automatiquement les informations de contact dans votre Carnet d'adresses 1&1 IONOS."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Si vous intégrez un formulaire de contact sur votre site Web, vous verrez d'autres paramètres sur cette page."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "La connexion avec votre Carnet d'adresses 1&1 IONOS a été établie."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "Dans quel champ de votre carnet d'adresses les données du formulaire de contact doivent-elles être enregistrées ?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Carnet d'adresses 1&1 IONOS"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Champ du formulaire de contact"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Prénom"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Nom de famille"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Email"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Téléphone"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notes"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentement (champ obligatoire)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Les données de contact de votre formulaire de contact seront automatiquement enregistrées dans votre Carnet d'adresses 1&1 IONOS."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Retirer la connexion"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "En raison de la directive européenne en vigueur sur la protection des données, les données du formulaire de contact ne peuvent être enregistrées dans votre Carnet d'adresses 1&1 IONOS que si l'utilisateur y consent. Pour cette raison, le champ « Consentement » est un champ obligatoire."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "Veuillez noter:<br/>En vertu de la directive actuelle de l'UE sur la protection des données, les données du formulaire de contact ne peuvent être enregistrées dans votre Carnet d'adresses 1&1 IONOS que si l'utilisateur y consent. Pour cette raison, le champ de consentement est obligatoire. Assurez-vous donc d'obtenir le consentement de vos utilisateurs."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Une erreur s'est produite lors de l'enregistrement. Veuillez réessayer."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "L'affectation des champs a été enregistrée avec succès."
languages/cosy-address-book-fr_CA.mo ADDED
Binary file
languages/cosy-address-book-fr_CA.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Carnet d'adresses"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Carnet d'adresses"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "Carnet d'adresses 1&1 IONOS"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Ce plugin ne fonctionne qu'avec le "
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "Carnet d'adresses 1&1 IONOS"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Pour stocker automatiquement les données de contact de votre site Web dans votre Carnet d'adresses 1&1 IONOS, connectez simplement WordPress au Carnet d'adresses 1&1 IONOS :"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Étape 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Créez un mot de passe unique sur la page « Gérer les sources » dans votre"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Étape 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Entrez dans le champ ci-dessous le mot de passe unique que vous venez de créer et cliquez sur « Enregistrer »."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Mot de passe unique"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Enregistrer"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Établir la connexion"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Installez l'un des plugins suivants pour enregistrer automatiquement les informations de contact dans votre Carnet d'adresses 1&1 IONOS."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Si vous intégrez un formulaire de contact sur votre site Web, vous verrez d'autres paramètres sur cette page."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "La connexion avec votre Carnet d'adresses 1&1 IONOS a été établie."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "Dans quel champ de votre carnet d'adresses les données du formulaire de contact doivent-elles être enregistrées ?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Carnet d'adresses 1&1 IONOS"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Champ du formulaire de contact"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Prénom"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Nom de famille"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Email"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Téléphone"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notes"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentement (champ obligatoire)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Les données de contact de votre formulaire de contact seront automatiquement enregistrées dans votre Carnet d'adresses 1&1 IONOS."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Retirer la connexion"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "En raison de la directive européenne en vigueur sur la protection des données, les données du formulaire de contact ne peuvent être enregistrées dans votre Carnet d'adresses 1&1 IONOS que si l'utilisateur y consent. Pour cette raison, le champ « Consentement » est un champ obligatoire."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "Veuillez noter:<br/>En vertu de la directive actuelle de l'UE sur la protection des données, les données du formulaire de contact ne peuvent être enregistrées dans votre Carnet d'adresses 1&1 IONOS que si l'utilisateur y consent. Pour cette raison, le champ de consentement est obligatoire. Assurez-vous donc d'obtenir le consentement de vos utilisateurs."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Une erreur s'est produite lors de l'enregistrement. Veuillez réessayer."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "L'affectation des champs a été enregistrée avec succès."
languages/cosy-address-book-fr_FR.mo ADDED
Binary file
languages/cosy-address-book-fr_FR.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Carnet d'adresses"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Carnet d'adresses"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "Carnet d'adresses 1&1 IONOS"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Ce plugin ne fonctionne qu'avec le "
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "Carnet d'adresses 1&1 IONOS"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Pour stocker automatiquement les données de contact de votre site Web dans votre Carnet d'adresses 1&1 IONOS, connectez simplement WordPress au Carnet d'adresses 1&1 IONOS :"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Étape 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Créez un mot de passe unique sur la page « Gérer les sources » dans votre"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Étape 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Entrez dans le champ ci-dessous le mot de passe unique que vous venez de créer et cliquez sur « Enregistrer »."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Mot de passe unique"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Enregistrer"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Établir la connexion"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugins"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Installez l'un des plugins suivants pour enregistrer automatiquement les informations de contact dans votre Carnet d'adresses 1&1 IONOS."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Si vous intégrez un formulaire de contact sur votre site Web, vous verrez d'autres paramètres sur cette page."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "La connexion avec votre Carnet d'adresses 1&1 IONOS a été établie."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "Dans quel champ de votre carnet d'adresses les données du formulaire de contact doivent-elles être enregistrées ?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Carnet d'adresses 1&1 IONOS"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Champ du formulaire de contact"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Prénom"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Nom de famille"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "Email"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Téléphone"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Notes"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consentement (champ obligatoire)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "Les données de contact de votre formulaire de contact seront automatiquement enregistrées dans votre Carnet d'adresses 1&1 IONOS."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Retirer la connexion"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "En raison de la directive européenne en vigueur sur la protection des données, les données du formulaire de contact ne peuvent être enregistrées dans votre Carnet d'adresses 1&1 IONOS que si l'utilisateur y consent. Pour cette raison, le champ « Consentement » est un champ obligatoire."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "Veuillez noter:<br/>En vertu de la directive actuelle de l'UE sur la protection des données, les données du formulaire de contact ne peuvent être enregistrées dans votre Carnet d'adresses 1&1 IONOS que si l'utilisateur y consent. Pour cette raison, le champ de consentement est obligatoire. Assurez-vous donc d'obtenir le consentement de vos utilisateurs."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Une erreur s'est produite lors de l'enregistrement. Veuillez réessayer."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "L'affectation des champs a été enregistrée avec succès."
languages/cosy-address-book-it_IT.mo ADDED
Binary file
languages/cosy-address-book-it_IT.po ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WordPress CoSy Address Book\n"
4
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/cosy-address-book\n"
5
+ "POT-Creation-Date: 2015-08-17 08:39+0200\n"
6
+ "PO-Revision-Date: 2016-06-29 14:20+0200\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: de_DE\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
14
+ "X-Generator: Poedit 1.8.4\n"
15
+
16
+ #Admin page title
17
+ msgid "cosy_address_book_admin_page_title"
18
+ msgstr "Rubrica"
19
+
20
+ #Admin Menu title (navigation bar)
21
+ msgid "cosy_address_book_menu_title"
22
+ msgstr "Rubrica"
23
+
24
+ #Description page
25
+ msgid "cosy_address_book_menu_page_headline"
26
+ msgstr "Rubrica 1&1 IONOS"
27
+
28
+ msgid "cosy_address_book_invitation"
29
+ msgstr "Questo plugin funziona solo in combinazione con la"
30
+
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr "rubrica 1&1 IONOS"
33
+
34
+ msgid "cosy_address_book_guidance_summary"
35
+ msgstr "Per salvare automaticamente le informazioni di contatto del tuo sito web nella tua rubrica 1&1 IONOS, è sufficiente collegare WordPress alla rubrica 1&1 IONOS:"
36
+
37
+ msgid "cosy_address_book_guidance_step_one_label"
38
+ msgstr "Step 1"
39
+
40
+ msgid "cosy_address_book_guidance_step_one_content"
41
+ msgstr "Crea una password, valida solo una volta, nella pagina &quot;Gestisci le fonti&quot; nella"
42
+
43
+ msgid "cosy_address_book_guidance_step_two_label"
44
+ msgstr "Step 2"
45
+
46
+ msgid "cosy_address_book_guidance_step_two_content"
47
+ msgstr "Inserisci la password, valida solo una volta, nel campo sottostante e clicca su &quot;Salva&quot;."
48
+
49
+ msgid "cosy_address_book_activation_form_label"
50
+ msgstr "Password valida solo una volta"
51
+
52
+ msgid "cosy_address_book_form_button_text"
53
+ msgstr "Salva"
54
+
55
+ #Settings page
56
+ msgid "cosy_address_book_connection_header"
57
+ msgstr "Crea il collegamento"
58
+
59
+ msgid "cosy_address_book_plugin_description_header"
60
+ msgstr "Plugin"
61
+
62
+ msgid "cosy_address_book_plugin_activation_hint"
63
+ msgstr "Installa uno dei seguenti plugin, affinché le informazioni di contatto vengano salvate automaticamente nella rubrica 1&1 IONOS."
64
+
65
+ msgid "cosy_address_book_web_form_insertion_hint"
66
+ msgstr "Se hai inserito un modulo di contatto nel tuo sito web, su questa pagina puoi trovare ulteriori impostazioni."
67
+
68
+ msgid "cosy_address_book_connection_confirmation"
69
+ msgstr "Il collegamento alla tua rubrica 1&1 IONOS è avvenuto con successo."
70
+
71
+ msgid "cosy_address_book_mapping_description"
72
+ msgstr "In quale campo della tua rubrica desideri salvare i dati del modulo di contatto?"
73
+
74
+ msgid "cosy_address_book_mapping_header_api_fields"
75
+ msgstr "Rubrica 1&1 IONOS"
76
+
77
+ msgid "cosy_address_book_mapping_header_form_fields"
78
+ msgstr "Campo del modulo di contatto"
79
+
80
+ msgid "cosy_address_book_api_field_display_name_firstname"
81
+ msgstr "Nome"
82
+
83
+ msgid "cosy_address_book_api_field_display_name_lastname"
84
+ msgstr "Cognome"
85
+
86
+ msgid "cosy_address_book_api_field_display_name_email"
87
+ msgstr "E-mail"
88
+
89
+ msgid "cosy_address_book_api_field_display_name_phone"
90
+ msgstr "Telefono"
91
+
92
+ msgid "cosy_address_book_api_field_display_name_notes"
93
+ msgstr "Annotazioni"
94
+
95
+ msgid "cosy_address_book_api_field_display_name_consent"
96
+ msgstr "Consenso (campo obbligatorio)"
97
+
98
+ msgid "cosy_address_book_synchronisation_ready_hint"
99
+ msgstr "I dati di contatto del tuo modulo di contatto vengono automaticamente salvati nella rubrica 1&1 IONOS."
100
+
101
+ msgid "cosy_address_book_deconnection_url_text"
102
+ msgstr "Rimuovi il collegamento"
103
+
104
+ msgid "cosy_address_book_consent_field_constraint_hint"
105
+ msgstr "In conformità all'attuale direttiva UE sulla protezione dei dati, i dati del modulo di contatto possono essere salvati nella tua rubrica 1&1 IONOS solo se l'utente acconsente al loro salvataggio. Per questo motivo, il campo &quot;Consenso&quot; è obbligatorio."
106
+
107
+ msgid "cosy_address_book_gdpr_hint_content"
108
+ msgstr "Attenzione: <br/>In conformità all'attuale direttiva UE sulla protezione dei dati, i dati del modulo di contatto possono essere salvati nella tua rubrica 1&1 IONOS solo se l'utente acconsente al loro salvataggio. Per questo motivo, il campo Consenso è obbligatorio. Assicurati quindi che l'utente acconsenta al salvataggio dei suoi dati."
109
+
110
+ #Message from API Client
111
+ msgid "cosy_address_book_generic_error"
112
+ msgstr "Si è verificato un errore durante il salvataggio. Ti preghiamo di riprovare."
113
+
114
+ msgid "cosy_address_book_field_mapping_successful"
115
+ msgstr "L'assegnazione dei campi è stata salvata con successo."
languages/cosy-address-book.pot ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2019 1&1 IONOS
2
+ # This file is distributed under the GPLv2 or later.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: CoSy Address Book 1.0.0\n"
6
+ "Report-Msgid-Bugs-To: "
7
+ "https://wordpress.org/support/plugin/cosy-address-book\n"
8
+ "POT-Creation-Date: 2019-03-11 17:02:56+00:00\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=utf-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "X-Generator: grunt-wp-i18n 0.5.4\n"
16
+
17
+ #: cosy-address-book/cosy-address-book.php:87
18
+ msgid "cosy_address_book_admin_page_title"
19
+ msgstr ""
20
+
21
+ #: cosy-address-book/cosy-address-book.php:88
22
+ msgid "cosy_address_book_menu_title"
23
+ msgstr ""
24
+
25
+ #: cosy-address-book/inc/views/description.php:2
26
+ msgid "cosy_address_book_invitation"
27
+ msgstr ""
28
+
29
+ #: cosy-address-book/inc/views/description.php:4
30
+ #: cosy-address-book/inc/views/description.php:22
31
+ msgid "cosy_address_book_url_text"
32
+ msgstr ""
33
+
34
+ #: cosy-address-book/inc/views/description.php:7
35
+ #: cosy-address-book/inc/views/settings.php:2
36
+ msgid "cosy_address_book_connection_header"
37
+ msgstr ""
38
+
39
+ #: cosy-address-book/inc/views/description.php:8
40
+ #: cosy-address-book/inc/views/plugins/settings.php:18
41
+ msgid "cosy_address_book_generic_error"
42
+ msgstr ""
43
+
44
+ #: cosy-address-book/inc/views/description.php:11
45
+ msgid "cosy_address_book_guidance_summary"
46
+ msgstr ""
47
+
48
+ #: cosy-address-book/inc/views/description.php:15
49
+ msgid "cosy_address_book_guidance_step_one_label"
50
+ msgstr ""
51
+
52
+ #: cosy-address-book/inc/views/description.php:19
53
+ msgid "cosy_address_book_guidance_step_one_content"
54
+ msgstr ""
55
+
56
+ #: cosy-address-book/inc/views/description.php:29
57
+ msgid "cosy_address_book_guidance_step_two_label"
58
+ msgstr ""
59
+
60
+ #: cosy-address-book/inc/views/description.php:33
61
+ msgid "cosy_address_book_guidance_step_two_content"
62
+ msgstr ""
63
+
64
+ #: cosy-address-book/inc/views/description.php:37
65
+ msgid "cosy_address_book_activation_form_label"
66
+ msgstr ""
67
+
68
+ #: cosy-address-book/inc/views/description.php:45
69
+ #: cosy-address-book/inc/views/plugins/settings.php:55
70
+ msgid "cosy_address_book_form_button_text"
71
+ msgstr ""
72
+
73
+ #: cosy-address-book/inc/views/main.php:3
74
+ msgid "cosy_address_book_menu_page_headline"
75
+ msgstr ""
76
+
77
+ #: cosy-address-book/inc/views/plugins/description.php:2
78
+ msgid "cosy_address_book_plugin_description_header"
79
+ msgstr ""
80
+
81
+ #: cosy-address-book/inc/views/plugins/description.php:3
82
+ msgid "cosy_address_book_plugin_activation_hint"
83
+ msgstr ""
84
+
85
+ #: cosy-address-book/inc/views/plugins/description.php:11
86
+ msgid "cosy_address_book_web_form_insertion_hint"
87
+ msgstr ""
88
+
89
+ #: cosy-address-book/inc/views/plugins/settings.php:15
90
+ msgid "cosy_address_book_mapping_description"
91
+ msgstr ""
92
+
93
+ #: cosy-address-book/inc/views/plugins/settings.php:22
94
+ msgid "cosy_address_book_mapping_header_api_fields"
95
+ msgstr ""
96
+
97
+ #: cosy-address-book/inc/views/plugins/settings.php:25
98
+ msgid "cosy_address_book_mapping_header_form_fields"
99
+ msgstr ""
100
+
101
+ #: cosy-address-book/inc/views/plugins/settings.php:50
102
+ msgid "cosy_address_book_consent_field_constraint_hint"
103
+ msgstr ""
104
+
105
+ #: cosy-address-book/inc/views/plugins/settings.php:60
106
+ msgid "cosy_address_book_synchronisation_ready_hint"
107
+ msgstr ""
108
+
109
+ #: cosy-address-book/inc/views/plugins/settings.php:65
110
+ msgid "cosy_address_book_gdpr_hint_content"
111
+ msgstr ""
112
+
113
+ #: cosy-address-book/inc/views/settings.php:3
114
+ msgid "cosy_address_book_connection_confirmation"
115
+ msgstr ""
116
+
117
+ #: cosy-address-book/inc/views/settings.php:6
118
+ msgid "cosy_address_book_deconnection_url_text"
119
+ msgstr ""
120
+
121
+ #. Plugin Name of the plugin/theme
122
+ msgid "CoSy Address Book"
123
+ msgstr ""
124
+
125
+ #. Author URI of the plugin/theme
126
+ msgid "https://www.ionos.com"
127
+ msgstr ""
128
+
129
+ #. Description of the plugin/theme
130
+ msgid ""
131
+ "Sends visitor contact data generated by contact forms embedded in WordPress "
132
+ "websites to CoSy Address Book"
133
+ msgstr ""
134
+
135
+ #. Author of the plugin/theme
136
+ msgid "1&1 IONOS"
137
+ msgstr ""
readme.txt ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === 1&1 IONOS Address Book ===
2
+ Contributors: ionos, kimalumalu, gdespoulain, pfefferle
3
+ Tags: contact, contact data, address book, synchronisation
4
+ Requires at least: 3.8
5
+ Tested up to: 5.2
6
+ Stable tag: 1.0.0
7
+ Requires PHP: 5.6
8
+ License: MIT
9
+ License URI: https://opensource.org/licenses/MIT
10
+
11
+ Sends website visitor form contact data to IONOS Address Book
12
+
13
+ == Description ==
14
+
15
+ The 1&1 IONOS Address Book sends visitor contact data generated by forms embedded into WordPress websites to 1&1 IONOS Address Book
16
+ Current supported contact form types are: `Contact Form 7` and `WPforms Lite`
17
+
18
+ == Installation ==
19
+
20
+ 1. Upload the `1&1 IONOS Address Book` to the `/wp-content/plugins/` directory.
21
+ 2. Activate the plugin through the 'Plugins' menu in WordPress.
22
+ 3. Activate connection to 1&1 IONOS Address Book API as described in plugin welcome page on admin dashboard
23
+ 4. Save your changes.