-
Notifications
You must be signed in to change notification settings - Fork 1
/
wink.php
228 lines (211 loc) · 10.8 KB
/
wink.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
<?php
/**
* Plugin Name: Wink Affiliate WordPress Plugin
* Description: This plugin integrates your Wink affiliate account with WordPress. It integrates with Gutenberg, Elementor, Avada, WPBakery and as shortcodes.
* Version: 1.4.20
* Author: Wink
* Author URI: https://wink.travel/
* License: GPL-3.0
* License URI: https://oss.ninja/gpl-3.0?organization=Useful%20Team&project=jwt-auth
* Text Domain: wink
*
* The Wink Affiliate WordPress plugin is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* any later version.
* WINK Affiliate WordPress plugin is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Wink Affiliate WordPress plugin. If not, see https://www.gnu.org/licenses/gpl-2.0.html.
*/
if ( ! defined( 'ABSPATH' ) ) exit;
class wink {
function __construct() {
$this->version = current_time('Y-m-d');
$this->section = 'wink'; // Customizer Section Name
$this->clientIdKey = 'winkClientId';
$this->clientSecretKey = 'winkSecret';
$this->environment = 'winkEnvironment';
$this->environmentVal = get_option($this->environment, 'production');
$this->pluginURL = esc_url(trailingslashit( plugin_dir_url( __FILE__ ) ) );
$this->settingsURL = esc_url(admin_url( '/customize.php?autofocus[section]='.$this->section));
add_action( 'customize_register', array( $this,'addSettings' ) ); // adding plugin settings to WP Customizer
add_action('admin_notices', array( $this,'adminNotice' ) ); // adding admin notice if client id has not been entered
//add_shortcode('wink', array( $this,'blockHandler' ) ); // Adding Shortcode
add_filter( 'block_categories_all', array( $this,'gutenbergBlockCategory' ), 10, 2); // Adding custom Gutenberg Block Category
//add_action('init', array( $this,'gutenbergBlockRegistration' ) ); // Adding Gutenberg Block
add_action( 'wp_enqueue_scripts', array($this, 'loadScripts' )); // too resource intensive to search all pages for Wink elements. Scripts need to be added all the time.
add_filter( 'script_loader_tag', array($this,'jsHelper'), 11, 3 ); // Helper to add attribute to js tag
add_action( 'admin_enqueue_scripts', array($this,'customizeScripts'));
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), array($this,'settingsLink' ));
add_action( 'customize_save_after' , array($this, 'clearwinkCache' ));
}
function settingsLink( $links ) {
// Build and escape the URL.
$url = esc_url( add_query_arg(
'page',
'nelio-content-settings',
get_admin_url() . 'admin.php'
) );
// Create the link.
$settings_link = '<a href="'.esc_url($this->settingsURL).'" title="'.esc_html__('Wink settings',"wink2travel").'">' . esc_html__( 'Settings',"wink2travel" ) . '</a>';
// Adds the link to the end of the array.
array_push(
$links,
$settings_link
);
return $links;
}
function customizeScripts() {
if (!isset($_GET['winkadmin']) && !isset($_GET['winkAdmin'])) {
wp_enqueue_style( 'winkCustomizer', $this->pluginURL . 'css/customize.css', array(), $this->version );
}
}
function jsHelper($tag, $handle, $src) {
$env = winkCore::environmentURL('js', $this->environmentVal);
$optimize = array(
'wink-Elements',
'wink-Elements-Poly',
'wink-Elements-main'
);
if ( in_array( $handle, $optimize ) ) { // this will be optimized
$tag = '<script type="module" src="' . esc_url( $src ) . '" defer data-cfasync="true"></script>';
}
return $tag;
}
function loadScripts() {
if (!empty(get_option($this->clientIdKey, false))) {
$env = winkCore::environmentURL('js', $this->environmentVal);
wp_enqueue_style('wink',$env.'/styles.css',array(),$this->version);
wp_enqueue_script('wink-Elements',$env.'/elements.js',array(),$this->version,true);
// wp_enqueue_script('wink-Elements-Poly',$env.'/polyfills.js',array(),$this->version,true);
// wp_enqueue_script('wink-Elements-main',$env.'/main.js',array(),$this->version,true);
}
}
function adminNotice() {
if (is_admin() && !get_option($this->clientIdKey, false)) {
if ( current_user_can( 'manage_options' ) ) { // let's only show this to admin users
echo '<div class="notice notice-info">
<img src="'.esc_url($this->pluginURL).'img/logo.png" alt="'.esc_html__('Wink logo',"wink2travel").'" width="100" style="margin-top: 10px;"><p><b>'.
esc_html__('Congratulations', "wink2travel").
'</b> '.
esc_html__('on installing the official Wink Affiliate WordPress plugin.',"wink2travel").
' <a href="'.esc_url($this->settingsURL).'" title="'.esc_html__('Wink settings',"wink2travel").'">'.
esc_html__('Click here',"wink2travel").
'</a> '.
esc_html__('to add your Wink Client-ID and your Client-Secret',"wink2travel").
'.</p>
</div>';
}
} else if (is_admin() && empty(get_option('permalink_structure'))) {
echo '<div class="notice notice-info">
<img src="'.esc_url($this->pluginURL).'img/logo.png" alt="'.esc_html__('Wink logo',"wink2travel").'" width="100" style="margin-top: 10px;"><p><b>'.
esc_html__('Attention!', "wink2travel").
'</b> '.
esc_html__('the Wink plugin requires permalinks. Please disable plain permalinks',"wink2travel").
' <a href="'.esc_url(admin_url('options-permalink.php')).'" title="'.esc_html__('Edit Permalinks',"wink2travel").'">'.
esc_html__('here',"wink2travel").
'</a> '.
esc_html__('and start using the plugin.',"wink2travel").
'.</p>
</div>';
}
}
function addSettings( $wp_customize ) {
$shortcodes = array();
$allShortcodes = apply_filters( 'winkShortcodes', $shortcodes);
if (!empty($allShortcodes)) {
foreach ($allShortcodes as $key => $shortcodeData) {
if (!empty($shortcodeData['code'])) {
$shortcodes[] = '['.$shortcodeData['code'].']';
}
}
}
$wp_customize->add_section( $this->section, array(
'title' => esc_html__( 'Wink Settings', "wink2travel" ),
'priority' => 30,
'description' => '<p><img src="'.esc_url($this->pluginURL).'img/logo.png" alt="'.__('Wink logo',"wink2travel").'" width="100"></p>'.esc_html__('This plugin connects your site to your Wink account. Once you entered your Client-ID, you can start using the Wink elements either as a Gutenberg block or via the shortcodes below', "wink2travel" ).'<br>'.implode('<br>',$shortcodes)
) );
$wp_customize->add_setting( $this->clientIdKey,array(
'type' => 'option'
));
$wp_customize->add_control( $this->clientIdKey, array(
'label' => esc_html__( 'Client-ID', "wink2travel" ),
'description' => esc_html__('You can find your Wink Client-ID in your Wink account. After entering your Client-ID start using Wink by adding the Wink Gutenberg blocks to your website.', "wink2travel"),
'section' => $this->section,
) );
$wp_customize->add_setting( $this->clientSecretKey,array(
'type' => 'option'
));
$wp_customize->add_control( $this->clientSecretKey, array(
'label' => esc_html__( 'Client-Secret', "wink2travel" ),
'description' => esc_html__('You can find your Wink Client-Secret in your Wink account. After entering your Client-Secret and your Client-ID start using Wink by adding the Wink Gutenberg blocks to your website.', "wink2travel"),
'section' => $this->section,
) );
$wp_customize->add_setting( $this->environment,array(
'type' => 'option',
'default' => 'live'
));
$wp_customize->add_control( $this->environment, array(
'type' => 'select',
'label' => esc_html__( 'Environment', "wink2travel" ),
'description' => esc_html__('Switch between environments. Use with caution and only if instructed by the Wink team.', "wink2travel"),
'section' => $this->section,
'choices' => array(
'production' => esc_html__( 'Live' ),
'staging' => esc_html__( 'Staging' ),
'development' => esc_html__( 'Development' )
),
) );
}
function clearwinkCache() {
delete_option( 'winkData' );
delete_option( 'winkdataTime' );
delete_option( 'winkcontentTime' );
delete_option( 'winkcontentBearer' );
}
function gutenbergBlockCategory($categories, $post) {
return array_merge(
$categories,
array(
array(
'slug' => "wink2travel".'-blocks',
'title' => esc_html__( 'Wink Blocks', "wink2travel" ),
),
)
);
}
}
$wink = new wink();
class winkCore {
function __construct() {
}
static function environmentURL($target, $environment) {
// error_log('Wink - target: '.$target);
// error_log('Wink - environment: '.$environment);
$environments = array(
'js' => array(
'staging' => 'https://staging-elements.wink.travel',
'development' => 'https://dev.traveliko.com:8011',
'production' => 'https://elements.wink.travel'
),
'json' => array(
'staging' => 'https://staging-iam.wink.travel',
'development' => 'https://dev.traveliko.com:9000',
'production' => 'https://iam.wink.travel'
),
'api' => array(
'staging' => 'https://staging-api.wink.travel',
'development' => 'https://dev.traveliko.com:8443',
'production' => 'https://api.wink.travel'
)
);
return $environments[$target][$environment];
}
}
if (!empty(get_option('winkClientId', false))) {
require_once('includes/elementHandler.php'); // Handles all Wink Elements (Only load it if the client id is present)
}